diff --git a/DEPS b/DEPS
index 1fd3d99e..46483c5 100644
--- a/DEPS
+++ b/DEPS
@@ -228,11 +228,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'f7367df647cafb8f9f5b36293a56151c4f72ea5b',
+  'skia_revision': 'eb342e13d0ed4cdba262bbc8533fb271510a96fd',
   # 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': 'acedeb73aa3de90686c671b4a57e7b6b97f320a6',
+  'v8_revision': '97d3cf7155699a542d204a1627b44e0a5d4d6700',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -240,7 +240,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'b1b760e74e0024ffe25554a0bac3aeec2986caee',
+  'angle_revision': '17d4ff96ce5c3de106056ccb6a77b0ea6247a865',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -307,7 +307,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '4e63c269915dbaead91ff2bd7245e71d14d5a183',
+  'devtools_frontend_revision': 'b2e972040c77a12d84f8c62615ba339ddec31d55',
   # 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.
@@ -347,7 +347,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': 'c61a24b5fd761dcdfd6f74a149fe048353850137',
+  'dawn_revision': '27e17a6aad1f80786baa413b67e054a40e119ab2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -767,7 +767,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': 'W_Ao-8V07thIs3GBTCZUN5L80ogZiewh6X1WkE3y4qEC',
+          'version': 'eX56cS56N9qCnvqydGMdLomSzdAsiZCC3_miMAh-K_wC',
       },
     ],
     'condition': 'checkout_android',
@@ -1389,7 +1389,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '02c4020f875f43cefcad9222d2354c49b5b20a90',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'bb09784511ef291082ade44a2d3d05dd3e45d30d',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1580,9 +1580,9 @@
   },
 
   'src/third_party/usrsctp/usrsctplib':
-    Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '1ade45cbadfd19298d2c47dc538962d4425ad2dd',
+    Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '978003f36a3bc1e9fdeafae26dbfe825684b0a25',
 
-  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@4f32520bef0e26366cafeae994e29c2be50ec425',
+  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@902c4504128fce062af3203efc9ae86749282a5f',
 
   'src/third_party/vulkan_memory_allocator':
     Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'f67d7fa397e83060b76a1ec53579116a0bbdff7a',
@@ -1621,7 +1621,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '0e845f4383ecdee114e9011ba2e903a061b9adff',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'bb90497eaada6ea725eb7622536956b722bb8a8c',
+    Var('webrtc_git') + '/src.git' + '@' + 'cfea2182f8e41c3d8293d4e26b291ef2abf23257',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb
index 5752b22..3184601 100644
--- a/ash/strings/ash_strings_az.xtb
+++ b/ash/strings/ash_strings_az.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">Quraşdırın</translation>
 <translation id="3573179567135747900">"<ph name="FROM_LOCALE" />" qaytarın (yenidən başlanmanı tələb edir)</translation>
 <translation id="3576141592585647168">Saat qurşağını dəyişin</translation>
+<translation id="3580650856351781466">Danışıq faylları endirilir</translation>
 <translation id="3593039967545720377">Mübadilə buferinə baxmaq üçün <ph name="SHORTCUT_KEY_NAME" /> + V düyməsinə basaraq mübadilə buferi tarixçəsinə giriş edin. Başlamaq üçün bir elementi kopyalayın.</translation>
 <translation id="3593646411856133110">Açıq tətbiqləri görmək üçün yuxarı çəkib saxlayın</translation>
 <translation id="3595596368722241419">Batareya doludur</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb
index dddba92..d2931f1 100644
--- a/ash/strings/ash_strings_be.xtb
+++ b/ash/strings/ash_strings_be.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">Наладзіць</translation>
 <translation id="3573179567135747900">Вярнуць вярнуцца да мовы: <ph name="FROM_LOCALE" /> (патрабуецца перазапуск)</translation>
 <translation id="3576141592585647168">Змена часавага пояса</translation>
+<translation id="3580650856351781466">Ідзе спампоўванне файлаў для ператварэння маўлення ў тэкст</translation>
 <translation id="3593039967545720377">Каб праглядзець гісторыю буфера абмену, націсніце <ph name="SHORTCUT_KEY_NAME" /> + V Каб пачаць, скапіруйце элемент.</translation>
 <translation id="3593646411856133110">Каб убачыць адкрытыя праграмы, правядзіце пальцам уверх і ўтрымлівайце</translation>
 <translation id="3595596368722241419">Акумулятар поўнасцю зараджаны</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 3b7e37b..e2c2c18 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">Nastavit</translation>
 <translation id="3573179567135747900">Změnit zpět na jazyk <ph name="FROM_LOCALE" /> (vyžaduje restart)</translation>
 <translation id="3576141592585647168">Změnit časové pásmo</translation>
+<translation id="3580650856351781466">Stahování řečových souborů</translation>
 <translation id="3593039967545720377">Stisknutím kláves <ph name="SHORTCUT_KEY_NAME" /> + V zobrazíte schránku a najdete její historii. Začněte tím, že zkopírujete položku.</translation>
 <translation id="3593646411856133110">Přejetím nahoru a podržením zobrazíte otevřené aplikace</translation>
 <translation id="3595596368722241419">Baterie je nabitá</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index fac339d..c1e2bd0 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">Configurar</translation>
 <translation id="3573179567135747900">Volver a "<ph name="FROM_LOCALE" />" (debes reiniciar).</translation>
 <translation id="3576141592585647168">Cambiar zona horaria</translation>
+<translation id="3580650856351781466">Descargando archivos de voz</translation>
 <translation id="3593039967545720377">Presiona <ph name="SHORTCUT_KEY_NAME" /> + V para acceder al historial del portapapeles. Copia un elemento para comenzar.</translation>
 <translation id="3593646411856133110">Desliza hacia arriba y mantén presionado para ver las apps abiertas</translation>
 <translation id="3595596368722241419">Batería completa</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index e19ffd8..00687fa 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">Määritä</translation>
 <translation id="3573179567135747900">Vaihda takaisin kieleksi <ph name="FROM_LOCALE" /> (vaatii uudelleenkäynnistyksen)</translation>
 <translation id="3576141592585647168">Muuta aikavyöhykettä</translation>
+<translation id="3580650856351781466">Ladataan puhetiedostoja</translation>
 <translation id="3593039967545720377">Avaa leikepöytä painamalla <ph name="SHORTCUT_KEY_NAME" /> + V, jotta voit nähdä leikepöydän historian. Aloita kopioimalla kohde.</translation>
 <translation id="3593646411856133110">Näet avoimet sovellukset pyyhkäisemällä ylös ja painamalla pitkään</translation>
 <translation id="3595596368722241419">Akku täynnä</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 3e6bd60..34825c17 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">I-set up</translation>
 <translation id="3573179567135747900">Palitan pabalik sa "<ph name="FROM_LOCALE" />" (kailangang i-restart)</translation>
 <translation id="3576141592585647168">Baguhin ang timezone</translation>
+<translation id="3580650856351781466">Nagda-download ng mga speech file</translation>
 <translation id="3593039967545720377">I-access ang history ng iyong clipboard sa pamamagitan ng pagpindot sa <ph name="SHORTCUT_KEY_NAME" /> + V para tingnan ang clipboard mo. Kumopya ng item para magsimula.</translation>
 <translation id="3593646411856133110">Mag-swipe pataas at i-hold para makita ang mga nakabukas na app</translation>
 <translation id="3595596368722241419">Puno na ang baterya</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index e32165bc..659a749e 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">Configurer</translation>
 <translation id="3573179567135747900">Revenir à « <ph name="FROM_LOCALE" /> » (redémarrage requis)</translation>
 <translation id="3576141592585647168">Changer le fuseau horaire</translation>
+<translation id="3580650856351781466">Téléchargement de fichiers vocaux en cours…</translation>
 <translation id="3593039967545720377">Accédez à l'historique du presse-papiers en appuyant sur<ph name="SHORTCUT_KEY_NAME" />+V. Cette action affichera le presse-papiers. Copiez un élément pour commencer.</translation>
 <translation id="3593646411856133110">Balayez l'écran vers le haut et maintenez le doigt sur l'écran pour afficher les applications ouvertes</translation>
 <translation id="3595596368722241419">Batterie entièrement chargée</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 9ddbcbb..876a3dc6 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">Siapkan</translation>
 <translation id="3573179567135747900">Ubah kembali ke "<ph name="FROM_LOCALE" />" (harus dinyalakan ulang)</translation>
 <translation id="3576141592585647168">Ubah zona waktu</translation>
+<translation id="3580650856351781466">Mendownload file ucapan</translation>
 <translation id="3593039967545720377">Akses histori papan klip dengan menekan <ph name="SHORTCUT_KEY_NAME" /> + V untuk menampilkan papan klip. Salin item untuk memulai.</translation>
 <translation id="3593646411856133110">Geser ke atas dan tahan untuk melihat aplikasi yang terbuka</translation>
 <translation id="3595596368722241419">Baterai penuh</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index 0a8f7f0..cceca421 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">הגדרה</translation>
 <translation id="3573179567135747900">לשינוי בחזרה ל"<ph name="FROM_LOCALE" />" (נדרשת הפעלה מחדש)</translation>
 <translation id="3576141592585647168">שינוי אזור הזמן</translation>
+<translation id="3580650856351781466">מתבצעת הורדה של קובצי דיבור</translation>
 <translation id="3593039967545720377">‏כדי להיכנס להיסטוריית הלוח, יש ללחוץ על <ph name="SHORTCUT_KEY_NAME" /> + V לצפייה בלוח. כדי להתחיל, צריך להעתיק פריט.</translation>
 <translation id="3593646411856133110">כדי להציג את האפליקציות הפתוחות, מחליקים כלפי מעלה ולוחצים לחיצה ארוכה</translation>
 <translation id="3595596368722241419">סוללה מלאה</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index 3d28604..48dfa0d 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">តំឡើង</translation>
 <translation id="3573179567135747900">ប្តូរទៅ "<ph name="FROM_LOCALE" />" (តម្រូវឲ្យចាប់ផ្តើមឡើងវិញ)</translation>
 <translation id="3576141592585647168">ប្ដូរល្វែងម៉ោង</translation>
+<translation id="3580650856351781466">កំពុងទាញយកឯកសារនៃការនិយាយ</translation>
 <translation id="3593039967545720377">ចូលប្រើប្រវត្តិឃ្លីបបតរបស់អ្នកដោយចុច <ph name="SHORTCUT_KEY_NAME" /> + V ដើម្បីមើលឃ្លីបបតរបស់អ្នក។ សូមចម្លងធាតុណាមួយ ដើម្បីចាប់ផ្ដើម។</translation>
 <translation id="3593646411856133110">អូសឡើងលើ រួចសង្កត់ឱ្យជាប់ ដើម្បីមើល​កម្មវិធីដែលបើក</translation>
 <translation id="3595596368722241419">ថ្មពេញ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index e1c5e0c..e4f5be1 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">설정</translation>
 <translation id="3573179567135747900">'<ph name="FROM_LOCALE" />'(으)로 다시 변경(다시 시작해야 함)</translation>
 <translation id="3576141592585647168">시간대 변경</translation>
+<translation id="3580650856351781466">음성 파일 다운로드 중</translation>
 <translation id="3593039967545720377"><ph name="SHORTCUT_KEY_NAME" /> + V 키를 눌러 클립보드를 열면 클립보드 기록에 액세스할 수 있습니다. 시작하려면 항목을 복사하세요.</translation>
 <translation id="3593646411856133110">위로 스와이프한 후 눌러 열려 있는 앱 보기</translation>
 <translation id="3595596368722241419">배터리 충전 완료</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index 14b1db4..f90b73b 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">Sediakan</translation>
 <translation id="3573179567135747900">Tukar kembali kepada "<ph name="FROM_LOCALE" />" (perlu dimulakan semula)</translation>
 <translation id="3576141592585647168">Tukar zon waktu</translation>
+<translation id="3580650856351781466">Memuat turun fail pertuturan</translation>
 <translation id="3593039967545720377">Akses sejarah papan keratan anda dengan menekan <ph name="SHORTCUT_KEY_NAME" /> + V untuk melihat papan keratan anda. Salin item untuk bermula.</translation>
 <translation id="3593646411856133110">Leret ke atas dan tahan untuk melihat apl yang terbuka</translation>
 <translation id="3595596368722241419">Bateri penuh</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index 6f14ce1..502b11b 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -177,6 +177,7 @@
 <translation id="2322173485024759474">Një shkronjë pas</translation>
 <translation id="2339073806695260576">Trokit te butoni i stilolapsit në raft për të mbajtur një shënim, për të nxjerrë një pamje të ekranit, për të përdorur treguesin me lazer ose xhamin zmadhues.</translation>
 <translation id="2341729377289034582">U kyç vertikalisht</translation>
+<translation id="2350794187831162545">Ligjërimi në <ph name="LANGUAGE" /> përpunohet tani lokalisht dhe punon jashtë linje. Mund ta ndryshosh gjuhën e "Diktimit" te "Cilësimet &gt; Qasshmëria".</translation>
 <translation id="2352467521400612932">Cilësimet e stilolapsit</translation>
 <translation id="2354174487190027830">Po aktivizon <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Vazhdo</translation>
@@ -436,6 +437,7 @@
 <translation id="4379531060876907730">Këto janë veglat e tua të stilolapsit</translation>
 <translation id="4389184120735010762">Ke shtypur shkurtoren e tastierës për zmadhuesin me puthitje. Dëshiron ta aktivizosh?</translation>
 <translation id="439598569299422042">Në pauzë, <ph name="SIZE_INFO" /></translation>
+<translation id="4405151984121254935">Lloji i pajisjes së lidhur periferike nuk mbështetet</translation>
 <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> është joaktive.</translation>
 <translation id="4421231901400348175">Po ndan kontrollin e ekranit me <ph name="HELPER_NAME" /> përmes "Ndihmës në distancë".</translation>
 <translation id="4424159417645388645">Tavolina e punës 5</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb
index 5c72842d..858ee70 100644
--- a/ash/strings/ash_strings_zh-HK.xtb
+++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -324,6 +324,7 @@
 <translation id="3571734092741541777">設定</translation>
 <translation id="3573179567135747900">改回「<ph name="FROM_LOCALE" />」(需要重新啟動)</translation>
 <translation id="3576141592585647168">變更時區</translation>
+<translation id="3580650856351781466">正在下載語音檔案</translation>
 <translation id="3593039967545720377">如要存取剪貼簿記錄,按下<ph name="SHORTCUT_KEY_NAME" /> + V 鍵即可查看剪貼簿。複製項目即可開始使用。</translation>
 <translation id="3593646411856133110">向上滑動並按住螢幕,即可查看開啟的應用程式</translation>
 <translation id="3595596368722241419">電池已滿</translation>
diff --git a/ash/webui/diagnostics_ui/backend/network_health_provider.cc b/ash/webui/diagnostics_ui/backend/network_health_provider.cc
index e10b821..a610230 100644
--- a/ash/webui/diagnostics_ui/backend/network_health_provider.cc
+++ b/ash/webui/diagnostics_ui/backend/network_health_provider.cc
@@ -385,7 +385,6 @@
   GetActiveNetworkState();
 
   // Update the currently active network and fire the network list observer.
-  UpdateActiveGuid();
   NotifyNetworkListObservers();
 }
 
@@ -491,7 +490,6 @@
   // then update the network list observers as well. This can happen if for
   // example, a WiFi network is currently the primary and then an ethernet
   // network becomes connected.
-  UpdateActiveGuid();
   NotifyNetworkListObservers();
   NotifyNetworkStateObserver(iter->second);
 }
@@ -503,6 +501,7 @@
 }
 
 void NetworkHealthProvider::NotifyNetworkListObservers() {
+  UpdateActiveGuid();
   std::vector<std::string> observer_guids = GetObserverGuids();
   for (auto& observer : network_list_observers_) {
     observer->OnNetworkListChanged(mojo::Clone(observer_guids), active_guid_);
diff --git a/base/BUILD.gn b/base/BUILD.gn
index cb4f75f..7a0a4f5 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -1922,6 +1922,7 @@
         "allocator/partition_allocator/starscan/stack/stack.cc",
         "allocator/partition_allocator/starscan/stack/stack.h",
         "allocator/partition_allocator/starscan/starscan_fwd.h",
+        "allocator/partition_allocator/starscan/state_bitmap.h",
         "allocator/partition_allocator/starscan/stats_collector.cc",
         "allocator/partition_allocator/starscan/stats_collector.h",
         "allocator/partition_allocator/starscan/write_protector.cc",
@@ -3490,6 +3491,7 @@
       "allocator/partition_allocator/starscan/pcscan_unittest.cc",
       "allocator/partition_allocator/starscan/scan_loop_unittest.cc",
       "allocator/partition_allocator/starscan/stack/stack_unittest.cc",
+      "allocator/partition_allocator/starscan/state_bitmap_unittest.cc",
       "allocator/partition_allocator/thread_cache_unittest.cc",
     ]
   }
diff --git a/base/allocator/partition_allocator/partition_address_space.cc b/base/allocator/partition_allocator/partition_address_space.cc
index 29a7c3f..ee6294d 100644
--- a/base/allocator/partition_allocator/partition_address_space.cc
+++ b/base/allocator/partition_allocator/partition_address_space.cc
@@ -72,7 +72,7 @@
   PA_DCHECK(IsInBRPPool(reinterpret_cast<void*>(current - 1)));
   PA_DCHECK(!IsInBRPPool(reinterpret_cast<void*>(current)));
 
-#if defined(PA_ALLOW_PCSCAN)
+#if PA_STARSCAN_USE_CARD_TABLE
   // Reserve memory for PCScan quarantine card table.
   void* requested_address = reinterpret_cast<void*>(brp_pool_base_address_);
   char* actual_address = internal::AddressPoolManager::GetInstance()->Reserve(
@@ -80,7 +80,7 @@
   PA_CHECK(requested_address == actual_address)
       << "QuarantineCardTable is required to be allocated in the beginning of "
          "the BRPPool";
-#endif  // defined(PA_ALLOW_PCSCAN)
+#endif  // PA_STARSCAN_USE_CARD_TABLE
 
   PA_DCHECK(reserved_base_address_ + properties.size == current);
 }
diff --git a/base/allocator/partition_allocator/partition_alloc_config.h b/base/allocator/partition_allocator/partition_alloc_config.h
index 8f3f786..0c2abf33 100644
--- a/base/allocator/partition_allocator/partition_alloc_config.h
+++ b/base/allocator/partition_allocator/partition_alloc_config.h
@@ -41,6 +41,18 @@
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
 #define PA_STARSCAN_UFFD_WRITE_PROTECTOR_SUPPORTED
 #endif
+
+#if defined(PA_HAS_64_BITS_POINTERS)
+// Disable currently the card table to check the memory improvement.
+#define PA_STARSCAN_USE_CARD_TABLE 0
+#else
+// The card table is permanently disabled for 32-bit.
+#define PA_STARSCAN_USE_CARD_TABLE 0
+#endif
+#endif
+
+#if PA_STARSCAN_USE_CARD_TABLE && !defined(PA_ALLOW_PCSCAN)
+#error "Card table can only be used when *Scan is allowed"
 #endif
 
 // POSIX is not only UNIX, e.g. macOS and other OSes. We do use Linux-specific
diff --git a/base/allocator/partition_allocator/partition_page.h b/base/allocator/partition_allocator/partition_page.h
index d7d4e1e..65d71791 100644
--- a/base/allocator/partition_allocator/partition_page.h
+++ b/base/allocator/partition_allocator/partition_page.h
@@ -446,8 +446,14 @@
   PA_DCHECK(IsWithinSuperPagePayload(maybe_inner_ptr,
                                      extent->root->IsQuarantineAllowed()));
 #endif
-  auto* slot_span =
-      SlotSpanMetadata<thread_safe>::FromSlotInnerPtr(maybe_inner_ptr);
+  // Don't use FromSlotInnerPtr() because |is_valid| DCHECKs can fail there.
+  auto* page = PartitionPage<thread_safe>::FromPtr(maybe_inner_ptr);
+  if (!page->is_valid)
+    return nullptr;
+  page -= page->slot_span_metadata_offset;
+  PA_DCHECK(page->is_valid);
+  PA_DCHECK(!page->slot_span_metadata_offset);
+  auto* slot_span = &page->slot_span_metadata;
   // Check if the slot span is actually used and valid.
   if (!slot_span->bucket)
     return nullptr;
diff --git a/base/allocator/partition_allocator/starscan/pcscan_internal.cc b/base/allocator/partition_allocator/starscan/pcscan_internal.cc
index 656d3e6..a01a4ea 100644
--- a/base/allocator/partition_allocator/starscan/pcscan_internal.cc
+++ b/base/allocator/partition_allocator/starscan/pcscan_internal.cc
@@ -49,22 +49,6 @@
 #include "base/time/time.h"
 #include "build/build_config.h"
 
-#if defined(ARCH_CPU_X86_64)
-// Include order is important, so we disable formatting.
-// clang-format off
-// Including these headers directly should generally be avoided. For the
-// scanning loop, we check at runtime which SIMD extension we can use. Since
-// Chrome is compiled with -msse3 (the minimal requirement), we include the
-// headers directly to make the intrinsics available. Another option could be to
-// use inline assembly, but that would hinder compiler optimization for
-// vectorized instructions.
-#include <immintrin.h>
-#include <smmintrin.h>
-#include <avxintrin.h>
-#include <avx2intrin.h>
-// clang-format on
-#endif
-
 namespace base {
 namespace internal {
 
@@ -96,7 +80,7 @@
 struct [[maybe_unused]] ReentrantScannerGuard final{};
 #endif
 
-#if defined(PA_HAS_64_BITS_POINTERS)
+#if PA_STARSCAN_USE_CARD_TABLE
 // Bytemap that represent regions (cards) that contain quarantined objects.
 // A single PCScan cycle consists of the following steps:
 // 1) clearing (memset quarantine + marking cards that contain quarantine);
@@ -156,7 +140,7 @@
 static_assert(kSuperPageSize >= sizeof(QuarantineCardTable),
               "Card table size must be less than kSuperPageSize, since this is "
               "what is committed");
-#endif
+#endif  // PA_STARSCAN_USE_CARD_TABLE
 
 template <typename T>
 using MetadataVector = std::vector<T, MetadataAllocator<T>>;
@@ -208,7 +192,7 @@
 }
 
 void CommitCardTable() {
-#if defined(PA_HAS_64_BITS_POINTERS)
+#if PA_STARSCAN_USE_CARD_TABLE
   // First, make sure that GigaCage is initialized.
   PartitionAddressSpace::Init();
   // Then, commit the card table.
@@ -442,11 +426,16 @@
   struct GigaCageLookupPolicy {
     ALWAYS_INLINE bool TestOnHeapPointer(uintptr_t maybe_ptr) const {
 #if defined(PA_HAS_64_BITS_POINTERS)
-#if DCHECK_IS_ON()
+#if PA_STARSCAN_USE_CARD_TABLE
       PA_DCHECK(
           IsManagedByPartitionAllocBRPPool(reinterpret_cast<void*>(maybe_ptr)));
-#endif
       return QuarantineCardTable::GetFrom(maybe_ptr).IsQuarantined(maybe_ptr);
+#else
+      // Without the card table, use the reservation offset table. It's not as
+      // precise (meaning that we may have hit the slow path more frequently),
+      // but reduces the memory overhead.
+      return IsManagedByNormalBuckets(reinterpret_cast<void*>(maybe_ptr));
+#endif
 #else   // defined(PA_HAS_64_BITS_POINTERS)
       return IsManagedByPartitionAllocBRPPool(
           reinterpret_cast<void*>(maybe_ptr));
@@ -618,6 +607,15 @@
   auto* root =
       Root::FromPointerInNormalBuckets(reinterpret_cast<char*>(maybe_ptr));
 
+#if !PA_STARSCAN_USE_CARD_TABLE
+  // Without the card table, we must make sure that |maybe_ptr| doesn't point to
+  // metadata partition.
+  // TODO(bikineev): To speed things up, consider removing the check and
+  // committing quarantine bitmaps for metadata partition.
+  if (UNLIKELY(!root->IsQuarantineEnabled()))
+    return 0;
+#endif
+
   // Check if pointer was in the quarantine bitmap.
   const uintptr_t base = GetObjectStartInSuperPage(maybe_ptr, *root);
   if (!base || !scanner_bitmap->template CheckBit<AccessType::kAtomic>(base))
@@ -653,6 +651,11 @@
 
   const PCScan::ClearType clear_type = pcscan_.clear_type_;
 
+#if !PA_STARSCAN_USE_CARD_TABLE
+  if (clear_type == PCScan::ClearType::kEager)
+    return;
+#endif
+
   StarScanSnapshot::ClearingView view(*snapshot_);
   view.VisitConcurrently([this, clear_type](uintptr_t super_page_base) {
     auto* bitmap = QuarantineBitmapFromPointer(
@@ -668,7 +671,7 @@
           const size_t size = slot_span->GetUsableSize(root);
           if (clear_type == PCScan::ClearType::kLazy)
             memset(object, 0, size);
-#if defined(PA_HAS_64_BITS_POINTERS)
+#if PA_STARSCAN_USE_CARD_TABLE
           // Set card(s) for this quarantined object.
           QuarantineCardTable::GetFrom(ptr).Quarantine(ptr, size);
 #endif
@@ -872,7 +875,7 @@
               auto* slot_span = SlotSpan::FromSlotInnerPtr(object);
               swept_bytes += slot_span->bucket->slot_size;
               root->FreeNoHooksImmediate(object, slot_span);
-#if defined(PA_HAS_64_BITS_POINTERS)
+#if PA_STARSCAN_USE_CARD_TABLE
               // Reset card(s) for this quarantined object. Please note that the
               // cards may still contain quarantined objects (which were
               // promoted in this scan cycle), but
diff --git a/base/allocator/partition_allocator/starscan/state_bitmap.h b/base/allocator/partition_allocator/starscan/state_bitmap.h
new file mode 100644
index 0000000..f0752f1
--- /dev/null
+++ b/base/allocator/partition_allocator/starscan/state_bitmap.h
@@ -0,0 +1,376 @@
+// Copyright (c) 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_ALLOCATOR_PARTITION_ALLOCATOR_STARSCAN_STATE_BITMAP_H_
+#define BASE_ALLOCATOR_PARTITION_ALLOCATOR_STARSCAN_STATE_BITMAP_H_
+
+#include <climits>
+#include <cstddef>
+#include <cstdint>
+
+#include <algorithm>
+#include <array>
+#include <atomic>
+#include <tuple>
+
+#include "base/allocator/partition_allocator/partition_alloc_check.h"
+#include "base/bits.h"
+#include "base/compiler_specific.h"
+
+namespace base {
+namespace internal {
+
+// Bitmap which tracks allocation states. An allocation can be in one of 3
+// states:
+// - freed (00),
+// - allocated (11),
+// - quarantined (01 or 10, depending on the *Scan epoch).
+//
+// The state machine of allocation states:
+//         +-------------+                +-------------+
+//         |             |    malloc()    |             |
+//         |    Freed    +--------------->|  Allocated  |
+//         |    (00)     |    (or 11)     |    (11)     |
+//         |             |                |             |
+//         +-------------+                +------+------+
+//                ^                              |
+//                |                              |
+//    real_free() | (and 00)              free() | (and 01(10))
+//                |                              |
+//                |       +-------------+        |
+//                |       |             |        |
+//                +-------+ Quarantined |<-------+
+//                        |   (01,10)   |
+//                        |             |
+//                        +-------------+
+//                         ^           |
+//                         |  mark()   |
+//                         +-----------+
+//                           (xor 11)
+//
+// The bitmap can be safely accessed from multiple threads, but this doesn't
+// imply visibility on the data (i.e. no ordering guaranties, since relaxed
+// atomics are used underneath). The bitmap itself must be created inside a
+// page, size and alignment of which are specified as template arguments
+// |PageSize| and |PageAlignment|. |AllocationAlignment| specifies the minimal
+// alignment of objects that are allocated inside a page (serves as the
+// granularity in the bitmap).
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+class StateBitmap final {
+  enum class State : uint8_t {
+    kFreed = 0b00,
+    kQuarantined1 = 0b01,
+    kQuarantined2 = 0b10,
+    kAlloced = 0b11,
+    kNumOfStates = 4,
+  };
+
+  using CellType = uintptr_t;
+  static constexpr size_t kBitsPerCell = sizeof(CellType) * CHAR_BIT;
+  static constexpr size_t kBitsNeededForAllocation =
+      bits::Log2Floor(static_cast<size_t>(State::kNumOfStates));
+  static constexpr CellType kStateMask = (1 << kBitsNeededForAllocation) - 1;
+
+  static constexpr size_t kBitmapSize =
+      (PageSize + ((kBitsPerCell * AllocationAlignment) - 1)) /
+      (kBitsPerCell * AllocationAlignment) * kBitsNeededForAllocation;
+  static constexpr size_t kPageOffsetMask = PageAlignment - 1;
+  static constexpr size_t kPageBaseMask = ~kPageOffsetMask;
+
+ public:
+  using Epoch = size_t;
+
+  static constexpr size_t kPageSize = PageSize;
+  static constexpr size_t kPageAlignment = PageAlignment;
+  static constexpr size_t kAllocationAlignment = AllocationAlignment;
+  static constexpr size_t kMaxEntries =
+      (kBitmapSize / kBitsNeededForAllocation) * kBitsPerCell;
+
+  inline StateBitmap();
+
+  // Sets the bits corresponding to |address| as allocated.
+  ALWAYS_INLINE void Allocate(uintptr_t address);
+
+  // Sets the bits corresponding to |address| as quarantined. Must be called
+  // only once, in which case returns |true|. Otherwise, if the object was
+  // already quarantined or freed before, returns |false|.
+  ALWAYS_INLINE bool Quarantine(uintptr_t address, Epoch epoch);
+
+  // Marks ("promotes") quarantined object.
+  ALWAYS_INLINE void MarkQuarantined(uintptr_t address);
+
+  // Sets the bits corresponding to |address| as freed.
+  ALWAYS_INLINE void Free(uintptr_t address);
+
+  // Getters that check object state.
+  ALWAYS_INLINE bool IsAllocated(uintptr_t address) const;
+  ALWAYS_INLINE bool IsQuarantined(uintptr_t address) const;
+  ALWAYS_INLINE bool IsFreed(uintptr_t address) const;
+
+  // Iterate objects depending on their state.
+  //
+  // The callback is of type
+  //   void(Address)
+  // and is passed the object address as parameter.
+  template <typename Callback>
+  inline void IterateAllocated(Callback) const;
+  template <typename Callback>
+  inline void IterateQuarantined(Callback) const;
+  template <typename Callback>
+  inline void IterateUnmarkedQuarantined(size_t epoch, Callback) const;
+
+  inline void Clear();
+
+ private:
+  std::atomic<CellType>& AsAtomicCell(size_t cell_index) {
+    return reinterpret_cast<std::atomic<CellType>&>(bitmap_[cell_index]);
+  }
+  const std::atomic<CellType>& AsAtomicCell(size_t cell_index) const {
+    return reinterpret_cast<const std::atomic<CellType>&>(bitmap_[cell_index]);
+  }
+
+  ALWAYS_INLINE unsigned GetBits(uintptr_t address) const;
+
+  struct FilterQuarantine {
+    ALWAYS_INLINE bool operator()(CellType cell) const;
+    const size_t epoch;
+  };
+
+  struct FilterUnmarkedQuarantine {
+    ALWAYS_INLINE bool operator()(CellType cell) const;
+    const size_t epoch;
+  };
+
+  struct FilterAllocated {
+    ALWAYS_INLINE bool operator()(CellType cell) const;
+    const size_t epoch;
+  };
+
+  template <typename Filter, typename Callback>
+  inline void IterateImpl(size_t epoch, Callback);
+
+  ALWAYS_INLINE CellType LoadCell(size_t cell_index) const;
+  ALWAYS_INLINE static constexpr std::pair<size_t, size_t>
+      AllocationIndexAndBit(uintptr_t);
+
+  std::array<CellType, kBitmapSize> bitmap_;
+};
+
+// The constructor can be omitted, but the Chromium's clang plugin wrongly
+// warns that the type is not trivially constructible.
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+inline StateBitmap<PageSize, PageAlignment, AllocationAlignment>::
+    StateBitmap() = default;
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+ALWAYS_INLINE void
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::Allocate(
+    uintptr_t address) {
+  PA_DCHECK(IsFreed(address));
+  size_t cell_index, object_bit;
+  std::tie(cell_index, object_bit) = AllocationIndexAndBit(address);
+  const CellType mask = static_cast<CellType>(State::kAlloced) << object_bit;
+  auto& cell = AsAtomicCell(cell_index);
+  cell.fetch_or(mask, std::memory_order_relaxed);
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+ALWAYS_INLINE bool
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::Quarantine(
+    uintptr_t address,
+    Epoch epoch) {
+  // *Scan is enabled at runtime, which means that we can quarantine allocation,
+  // that was previously not recorded in the bitmap. Hence, we can't reliably
+  // check transition from kAlloced to kQuarantined.
+  static_assert((~static_cast<CellType>(State::kQuarantined1) & kStateMask) ==
+                    (static_cast<CellType>(State::kQuarantined2) & kStateMask),
+                "kQuarantined1 must be inverted kQuarantined2");
+  const State quarantine_state =
+      epoch & 0b1 ? State::kQuarantined1 : State::kQuarantined2;
+  size_t cell_index, object_bit;
+  std::tie(cell_index, object_bit) = AllocationIndexAndBit(address);
+  const CellType mask =
+      ~(static_cast<CellType>(quarantine_state) << object_bit);
+  auto& cell = AsAtomicCell(cell_index);
+  const CellType cell_before = cell.fetch_and(mask, std::memory_order_relaxed);
+  // Check if the previous state was also quarantined.
+  return __builtin_popcount(static_cast<unsigned>((cell_before >> object_bit) &
+                                                  kStateMask)) != 1;
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+ALWAYS_INLINE void
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::MarkQuarantined(
+    uintptr_t address) {
+  PA_DCHECK(IsQuarantined(address));
+  static_assert((~static_cast<CellType>(State::kQuarantined1) & kStateMask) ==
+                    (static_cast<CellType>(State::kQuarantined2) & kStateMask),
+                "kQuarantined1 must be inverted kQuarantined2");
+  static constexpr CellType kXorMask = 0b11;
+  size_t cell_index, object_bit;
+  std::tie(cell_index, object_bit) = AllocationIndexAndBit(address);
+  const CellType mask = kXorMask << object_bit;
+  auto& cell = AsAtomicCell(cell_index);
+  cell.fetch_xor(mask, std::memory_order_relaxed);
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+ALWAYS_INLINE void
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::Free(
+    uintptr_t address) {
+  PA_DCHECK(IsQuarantined(address));
+  static_assert((~static_cast<CellType>(State::kAlloced) & kStateMask) ==
+                    (static_cast<CellType>(State::kFreed) & kStateMask),
+                "kFreed must be inverted kAlloced");
+  size_t cell_index, object_bit;
+  std::tie(cell_index, object_bit) = AllocationIndexAndBit(address);
+  const CellType mask = ~(static_cast<CellType>(State::kAlloced) << object_bit);
+  auto& cell = AsAtomicCell(cell_index);
+  cell.fetch_and(mask, std::memory_order_relaxed);
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+ALWAYS_INLINE bool
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::IsAllocated(
+    uintptr_t address) const {
+  return GetBits(address) == static_cast<unsigned>(State::kAlloced);
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+ALWAYS_INLINE bool
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::IsQuarantined(
+    uintptr_t address) const {
+  // On x86 CPI of popcnt is the same as tzcnt, so we use it instead of tzcnt +
+  // inversion.
+  return __builtin_popcount(GetBits(address)) == 1;
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+ALWAYS_INLINE bool
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::IsFreed(
+    uintptr_t address) const {
+  return GetBits(address) == static_cast<unsigned>(State::kFreed);
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+ALWAYS_INLINE
+    typename StateBitmap<PageSize, PageAlignment, AllocationAlignment>::CellType
+    StateBitmap<PageSize, PageAlignment, AllocationAlignment>::LoadCell(
+        size_t cell_index) const {
+  return AsAtomicCell(cell_index).load(std::memory_order_relaxed);
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+ALWAYS_INLINE constexpr std::pair<size_t, size_t>
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::
+    AllocationIndexAndBit(uintptr_t address) {
+  const uintptr_t offset_in_page = address & kPageOffsetMask;
+  const size_t allocation_number =
+      (offset_in_page / kAllocationAlignment) * kBitsNeededForAllocation;
+  const size_t cell_index = allocation_number / kBitsPerCell;
+  PA_DCHECK(kBitmapSize > cell_index);
+  const size_t bit = allocation_number % kBitsPerCell;
+  return {cell_index, bit};
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+unsigned StateBitmap<PageSize, PageAlignment, AllocationAlignment>::GetBits(
+    uintptr_t address) const {
+  size_t cell_index, object_bit;
+  std::tie(cell_index, object_bit) = AllocationIndexAndBit(address);
+  return (LoadCell(cell_index) >> object_bit) & kStateMask;
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+bool StateBitmap<PageSize, PageAlignment, AllocationAlignment>::
+    FilterQuarantine::operator()(CellType bits) const {
+  return __builtin_popcount(bits) == 1;
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+bool StateBitmap<PageSize, PageAlignment, AllocationAlignment>::
+    FilterUnmarkedQuarantine::operator()(CellType bits) const {
+  // Truth table:
+  // epoch & 1 | bits | result
+  //     0     |  01  |   1
+  //     1     |  10  |   1
+  //     *     |  **  |   0
+  return bits - (epoch & 0b01) == 0b01;
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+bool StateBitmap<PageSize, PageAlignment, AllocationAlignment>::
+    FilterAllocated::operator()(CellType bits) const {
+  return bits == 0b11;
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+template <typename Filter, typename Callback>
+inline void
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::IterateImpl(
+    size_t epoch,
+    Callback callback) {
+  // The bitmap (|this|) is allocated inside the page with |kPageAlignment|.
+  Filter filter{epoch};
+  const uintptr_t base = reinterpret_cast<uintptr_t>(this) & kPageBaseMask;
+  for (size_t cell_index = 0; cell_index < kBitmapSize; ++cell_index) {
+    CellType value = LoadCell(cell_index);
+    while (value) {
+      const size_t trailing_zeroes =
+          (base::bits::CountTrailingZeroBits(value) & ~0b1);
+      const size_t clear_value_mask =
+          ~(static_cast<CellType>(kStateMask) << trailing_zeroes);
+      if (!filter((value >> trailing_zeroes) & kStateMask)) {
+        // Clear current object bit in temporary value to advance iteration.
+        value &= clear_value_mask;
+        continue;
+      }
+      const size_t object_number =
+          (cell_index * kBitsPerCell) + trailing_zeroes;
+      const uintptr_t object_address =
+          base +
+          (object_number * kAllocationAlignment / kBitsNeededForAllocation);
+      callback(object_address);
+      // Clear current object bit in temporary value to advance iteration.
+      value &= clear_value_mask;
+    }
+  }
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+template <typename Callback>
+inline void
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::IterateAllocated(
+    Callback callback) const {
+  const_cast<StateBitmap&>(*this)
+      .template IterateImpl<FilterAllocated, Callback>(0, std::move(callback));
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+template <typename Callback>
+inline void
+StateBitmap<PageSize, PageAlignment, AllocationAlignment>::IterateQuarantined(
+    Callback callback) const {
+  const_cast<StateBitmap&>(*this)
+      .template IterateImpl<FilterQuarantine, Callback>(0, std::move(callback));
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+template <typename Callback>
+inline void StateBitmap<PageSize, PageAlignment, AllocationAlignment>::
+    IterateUnmarkedQuarantined(size_t epoch, Callback callback) const {
+  const_cast<StateBitmap&>(*this)
+      .template IterateImpl<FilterUnmarkedQuarantine, Callback>(
+          epoch, std::move(callback));
+}
+
+template <size_t PageSize, size_t PageAlignment, size_t AllocationAlignment>
+void StateBitmap<PageSize, PageAlignment, AllocationAlignment>::Clear() {
+  std::fill(bitmap_.begin(), bitmap_.end(), '\0');
+}
+
+}  // namespace internal
+}  // namespace base
+
+#endif  // BASE_ALLOCATOR_PARTITION_ALLOCATOR_STARSCAN_STATE_BITMAP_H_
diff --git a/base/allocator/partition_allocator/starscan/state_bitmap_unittest.cc b/base/allocator/partition_allocator/starscan/state_bitmap_unittest.cc
new file mode 100644
index 0000000..edf506c
--- /dev/null
+++ b/base/allocator/partition_allocator/starscan/state_bitmap_unittest.cc
@@ -0,0 +1,302 @@
+// Copyright (c) 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/allocator/partition_allocator/starscan/state_bitmap.h"
+
+#include "base/allocator/partition_allocator/page_allocator.h"
+#include "base/allocator/partition_allocator/partition_alloc_constants.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+namespace internal {
+
+namespace {
+
+using TestBitmap = StateBitmap<kSuperPageSize, kSuperPageSize, kAlignment>;
+
+class PageWithBitmap final {
+ public:
+  PageWithBitmap()
+      : base_(base::AllocPages(nullptr,
+                               kSuperPageSize,
+                               kSuperPageAlignment,
+                               PageReadWrite,
+                               PageTag::kPartitionAlloc)),
+        bitmap_(new (base_) TestBitmap) {}
+
+  PageWithBitmap(const PageWithBitmap&) = delete;
+  PageWithBitmap& operator=(const PageWithBitmap&) = delete;
+
+  ~PageWithBitmap() { base::FreePages(base_, kSuperPageSize); }
+
+  TestBitmap& bitmap() const { return *bitmap_; }
+
+  void* base() const { return base_; }
+  size_t size() const { return kSuperPageSize; }
+
+  void* base_;
+  TestBitmap* bitmap_;
+};
+
+class PartitionAllocStateBitmapTest : public ::testing::Test {
+ protected:
+  TestBitmap& bitmap() const { return page.bitmap(); }
+
+  void AllocateObject(size_t object_position) {
+    page.bitmap().Allocate(ObjectAddress(object_position));
+  }
+
+  void FreeObject(size_t object_position) {
+    page.bitmap().Free(ObjectAddress(object_position));
+  }
+
+  bool QuarantineObject(size_t object_position, size_t epoch) {
+    return page.bitmap().Quarantine(ObjectAddress(object_position), epoch);
+  }
+
+  void MarkQuarantinedObject(size_t object_position) {
+    page.bitmap().MarkQuarantined(ObjectAddress(object_position));
+  }
+
+  bool IsAllocated(size_t object_position) const {
+    return page.bitmap().IsAllocated(ObjectAddress(object_position));
+  }
+
+  bool IsQuarantined(size_t object_position) const {
+    return page.bitmap().IsQuarantined(ObjectAddress(object_position));
+  }
+
+  bool IsFreed(size_t object_position) const {
+    return page.bitmap().IsFreed(ObjectAddress(object_position));
+  }
+
+  void AssertAllocated(size_t object_position) const {
+    EXPECT_TRUE(IsAllocated(object_position));
+    EXPECT_FALSE(IsQuarantined(object_position));
+    EXPECT_FALSE(IsFreed(object_position));
+  }
+
+  void AssertFreed(size_t object_position) const {
+    EXPECT_FALSE(IsAllocated(object_position));
+    EXPECT_FALSE(IsQuarantined(object_position));
+    EXPECT_TRUE(IsFreed(object_position));
+  }
+
+  void AssertQuarantined(size_t object_position) const {
+    EXPECT_FALSE(IsAllocated(object_position));
+    EXPECT_TRUE(IsQuarantined(object_position));
+    EXPECT_FALSE(IsFreed(object_position));
+  }
+
+  size_t CountAllocated() const {
+    size_t count = 0;
+    bitmap().IterateAllocated([&count](uintptr_t) { count++; });
+    return count;
+  }
+
+  size_t CountQuarantined() const {
+    size_t count = 0;
+    bitmap().IterateQuarantined([&count](uintptr_t) { count++; });
+    return count;
+  }
+
+  bool IsQuarantineEmpty() const { return !CountQuarantined(); }
+
+  uintptr_t ObjectAddress(size_t pos) const {
+    return reinterpret_cast<uintptr_t>(page.base()) + sizeof(TestBitmap) +
+           pos * kAlignment;
+  }
+
+  static constexpr uintptr_t LastIndex() {
+    return TestBitmap::kMaxEntries - (sizeof(TestBitmap) / kAlignment) - 1;
+  }
+
+  static constexpr uintptr_t MiddleIndex() { return LastIndex() / 2; }
+
+ private:
+  PageWithBitmap page;
+};
+
+constexpr size_t kTestEpoch = 0;
+
+}  // namespace
+
+TEST_F(PartitionAllocStateBitmapTest, MoreThanZeroEntriesPossible) {
+  const size_t max_entries = TestBitmap::kMaxEntries;
+  EXPECT_LT(0u, max_entries);
+}
+
+TEST_F(PartitionAllocStateBitmapTest, InitialQuarantineEmpty) {
+  EXPECT_TRUE(IsQuarantineEmpty());
+}
+
+TEST_F(PartitionAllocStateBitmapTest, QuarantineImpliesNonEmpty) {
+  AllocateObject(0);
+  EXPECT_TRUE(IsQuarantineEmpty());
+  QuarantineObject(0, kTestEpoch);
+  EXPECT_FALSE(IsQuarantineEmpty());
+}
+
+TEST_F(PartitionAllocStateBitmapTest, RepetitiveQuarantine) {
+  AllocateObject(MiddleIndex());
+  EXPECT_TRUE(QuarantineObject(MiddleIndex(), kTestEpoch));
+  EXPECT_FALSE(QuarantineObject(MiddleIndex(), kTestEpoch));
+}
+
+TEST_F(PartitionAllocStateBitmapTest, CountAllocated) {
+  AllocateObject(0);
+  EXPECT_EQ(1u, CountAllocated());
+  QuarantineObject(0, kTestEpoch);
+  EXPECT_EQ(0u, CountAllocated());
+}
+
+TEST_F(PartitionAllocStateBitmapTest, StateTransititions) {
+  for (auto i : {static_cast<uintptr_t>(0), static_cast<uintptr_t>(1),
+                 LastIndex() - 1, LastIndex()}) {
+    AssertFreed(i);
+
+    AllocateObject(i);
+    AssertAllocated(i);
+
+    QuarantineObject(i, kTestEpoch);
+    AssertQuarantined(i);
+
+    MarkQuarantinedObject(i);
+    AssertQuarantined(i);
+
+    FreeObject(i);
+    AssertFreed(i);
+  }
+}
+
+TEST_F(PartitionAllocStateBitmapTest, QuarantineFreeMultipleObjects) {
+  static constexpr size_t kCount = 256;
+  for (size_t i = 0; i < kCount; ++i) {
+    AllocateObject(i);
+  }
+  EXPECT_EQ(kCount, CountAllocated());
+  EXPECT_EQ(0u, CountQuarantined());
+
+  for (size_t i = 0; i < kCount; ++i) {
+    QuarantineObject(i, kTestEpoch);
+  }
+  EXPECT_EQ(0u, CountAllocated());
+  EXPECT_EQ(kCount, CountQuarantined());
+
+  for (size_t i = 0; i < kCount; ++i) {
+    FreeObject(i);
+    EXPECT_EQ(kCount - i - 1, CountQuarantined());
+  }
+  EXPECT_TRUE(IsQuarantineEmpty());
+}
+
+TEST_F(PartitionAllocStateBitmapTest, AdjacentQuarantinedObjectsAtBegin) {
+  AllocateObject(0);
+  QuarantineObject(0, kTestEpoch);
+  AllocateObject(1);
+  QuarantineObject(1, kTestEpoch);
+
+  EXPECT_FALSE(IsQuarantined(2));
+  {
+    size_t count = 0;
+    this->bitmap().IterateQuarantined([&count, this](uintptr_t current) {
+      if (count == 0) {
+        EXPECT_EQ(ObjectAddress(0), current);
+      } else if (count == 1) {
+        EXPECT_EQ(ObjectAddress(1), current);
+      }
+      count++;
+    });
+
+    EXPECT_EQ(2u, count);
+  }
+  // Now mark only the first object.
+  {
+    MarkQuarantinedObject(0);
+
+    size_t count = 0;
+    this->bitmap().IterateUnmarkedQuarantined(
+        kTestEpoch, [&count, this](uintptr_t current) {
+          if (count == 0)
+            EXPECT_EQ(ObjectAddress(1), current);
+          count++;
+        });
+
+    EXPECT_EQ(1u, count);
+  }
+}
+
+TEST_F(PartitionAllocStateBitmapTest, AdjacentQuarantinedObjectsAtMiddle) {
+  AllocateObject(MiddleIndex());
+  QuarantineObject(MiddleIndex(), kTestEpoch);
+  AllocateObject(MiddleIndex() + 1);
+  QuarantineObject(MiddleIndex() + 1, kTestEpoch);
+  {
+    size_t count = 0;
+    this->bitmap().IterateQuarantined([&count, this](uintptr_t current) {
+      if (count == 0) {
+        EXPECT_EQ(ObjectAddress(MiddleIndex()), current);
+      } else if (count == 1) {
+        EXPECT_EQ(ObjectAddress(MiddleIndex() + 1), current);
+      }
+      count++;
+    });
+
+    EXPECT_EQ(2u, count);
+  }
+  // Now mark only the first object.
+  {
+    MarkQuarantinedObject(MiddleIndex());
+
+    size_t count = 0;
+    this->bitmap().IterateUnmarkedQuarantined(
+        kTestEpoch, [&count, this](uintptr_t current) {
+          if (count == 0)
+            EXPECT_EQ(ObjectAddress(MiddleIndex() + 1), current);
+          count++;
+        });
+
+    EXPECT_EQ(1u, count);
+  }
+}
+
+TEST_F(PartitionAllocStateBitmapTest, AdjacentQuarantinedObjectsAtEnd) {
+  AllocateObject(LastIndex());
+  QuarantineObject(LastIndex(), kTestEpoch);
+  AllocateObject(LastIndex() - 1);
+  QuarantineObject(LastIndex() - 1, kTestEpoch);
+
+  EXPECT_FALSE(IsQuarantined(LastIndex() - 2));
+  {
+    size_t count = 0;
+    this->bitmap().IterateQuarantined([&count, this](uintptr_t current) {
+      if (count == 0) {
+        EXPECT_EQ(ObjectAddress(LastIndex() - 1), current);
+      } else if (count == 1) {
+        EXPECT_EQ(ObjectAddress(LastIndex()), current);
+      }
+      count++;
+    });
+
+    EXPECT_EQ(2u, count);
+  }
+  // Now mark only the first object.
+  {
+    MarkQuarantinedObject(LastIndex());
+
+    size_t count = 0;
+    this->bitmap().IterateUnmarkedQuarantined(
+        kTestEpoch, [&count, this](uintptr_t current) {
+          if (count == 0)
+            EXPECT_EQ(ObjectAddress(LastIndex() - 1), current);
+          count++;
+        });
+
+    EXPECT_EQ(1u, count);
+  }
+}
+
+}  // namespace internal
+}  // namespace base
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index b0c3409..59108a1 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-6.20210809.4.1
+6.20210810.0.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index b0c3409..59108a1 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-6.20210809.4.1
+6.20210810.0.1
diff --git a/cc/base/list_container_helper.cc b/cc/base/list_container_helper.cc
index ea58696d..1e5a350 100644
--- a/cc/base/list_container_helper.cc
+++ b/cc/base/list_container_helper.cc
@@ -31,8 +31,14 @@
   // This class holds the raw memory chunk, as well as information about its
   // size and availability.
   struct InnerList {
-    InnerList(const InnerList&) = delete;
-    InnerList& operator=(const InnerList&) = delete;
+    InnerList(size_t capacity, size_t element_size, size_t alignment)
+        : data(static_cast<char*>(
+              base::AlignedAlloc(capacity * element_size, alignment))),
+          capacity(capacity),
+          size(0),
+          step(element_size) {}
+    InnerList(InnerList&& other) = default;
+    InnerList& operator=(InnerList&& other) = default;
 
     std::unique_ptr<char[], base::AlignedFreeDeleter> data;
     // The number of elements in total the memory can hold. The difference
@@ -45,8 +51,6 @@
     // elements' memory locations.
     size_t step;
 
-    InnerList() : capacity(0), size(0), step(0) {}
-
     void Erase(char* position) {
       // Confident that destructor is called by caller of this function. Since
       // CharAllocator does not handle construction after
@@ -117,7 +121,7 @@
     DCHECK_EQ(element_size % alignment, 0u);
     AllocateNewList(element_count > 0 ? element_count
                                       : kDefaultNumElementTypesToReserve);
-    last_list_ = storage_[last_list_index_].get();
+    last_list_ = &storage_[last_list_index_];
   }
 
   CharAllocator(const CharAllocator&) = delete;
@@ -133,7 +137,7 @@
         AllocateNewList(last_list_->capacity * 2);
 
       ++last_list_index_;
-      last_list_ = storage_[last_list_index_].get();
+      last_list_ = &storage_[last_list_index_];
     }
 
     ++size_;
@@ -149,7 +153,7 @@
   size_t Capacity() const {
     size_t capacity_sum = 0;
     for (const auto& inner_list : storage_)
-      capacity_sum += inner_list->capacity;
+      capacity_sum += inner_list.capacity;
     return capacity_sum;
   }
 
@@ -158,7 +162,7 @@
     DCHECK(!storage_.empty());
     storage_.erase(storage_.begin() + 1, storage_.end());
     last_list_index_ = 0;
-    last_list_ = storage_[0].get();
+    last_list_ = &storage_[0];
     last_list_->size = 0;
     size_ = 0;
   }
@@ -168,7 +172,7 @@
     last_list_->RemoveLast();
     if (last_list_->IsEmpty() && last_list_index_ > 0) {
       --last_list_index_;
-      last_list_ = storage_[last_list_index_].get();
+      last_list_ = &storage_[last_list_index_];
 
       // If there are now two empty inner lists, free one of them.
       if (last_list_index_ + 2 < storage_.size())
@@ -181,12 +185,12 @@
     DCHECK_EQ(this, position->ptr_to_container);
 
     // Update |position| to point to the element after the erased element.
-    InnerList* list = storage_[position->vector_index].get();
+    InnerList& list = storage_[position->vector_index];
     char* item_iterator = position->item_iterator;
-    if (item_iterator == list->LastElement())
+    if (item_iterator == list.LastElement())
       position->Increment();
 
-    list->Erase(item_iterator);
+    list.Erase(item_iterator);
     // TODO(weiliangc): Free the InnerList if it is empty.
     --size_;
   }
@@ -201,20 +205,20 @@
       // Set |position| to be the first inserted element.
       Allocate();
       position->vector_index = storage_.size() - 1;
-      position->item_iterator = storage_[position->vector_index]->LastElement();
+      position->item_iterator = storage_[position->vector_index].LastElement();
       // Allocate the rest.
       for (size_t i = 1; i < count; ++i)
         Allocate();
     } else {
-      storage_[position->vector_index]->InsertBefore(
+      storage_[position->vector_index].InsertBefore(
           alignment_, &position->item_iterator, count);
       size_ += count;
     }
   }
 
-  InnerList* InnerListById(size_t id) const {
+  const InnerList& InnerListById(size_t id) const {
     DCHECK_LT(id, storage_.size());
-    return storage_[id].get();
+    return storage_[id];
   }
 
   size_t FirstInnerListId() const {
@@ -222,7 +226,7 @@
     // non-empty.
     DCHECK_GT(size_, 0u);
     size_t id = 0;
-    while (storage_[id]->size == 0)
+    while (storage_[id].size == 0)
       ++id;
     return id;
   }
@@ -232,7 +236,7 @@
     // non-empty.
     DCHECK_GT(size_, 0u);
     size_t id = storage_.size() - 1;
-    while (storage_[id]->size == 0)
+    while (storage_[id].size == 0)
       --id;
     return id;
   }
@@ -243,16 +247,10 @@
 
  private:
   void AllocateNewList(size_t list_size) {
-    std::unique_ptr<InnerList> new_list(new InnerList);
-    new_list->capacity = list_size;
-    new_list->size = 0;
-    new_list->step = element_size_;
-    new_list->data.reset(static_cast<char*>(
-        base::AlignedAlloc(list_size * element_size_, alignment_)));
-    storage_.push_back(std::move(new_list));
+    storage_.emplace_back(list_size, element_size_, alignment_);
   }
 
-  std::vector<std::unique_ptr<InnerList>> storage_;
+  std::vector<InnerList> storage_;
   const size_t alignment_;
   const size_t element_size_;
 
@@ -298,47 +296,45 @@
 
 ListContainerHelper::PositionInCharAllocator
 ListContainerHelper::PositionInCharAllocator::Increment() {
-  CharAllocator::InnerList* list =
-      ptr_to_container->InnerListById(vector_index);
-  if (item_iterator == list->LastElement()) {
+  const auto& list = ptr_to_container->InnerListById(vector_index);
+  if (item_iterator == list.LastElement()) {
     ++vector_index;
     while (vector_index < ptr_to_container->list_count()) {
-      if (ptr_to_container->InnerListById(vector_index)->size != 0)
+      if (ptr_to_container->InnerListById(vector_index).size != 0)
         break;
       ++vector_index;
     }
     if (vector_index < ptr_to_container->list_count())
-      item_iterator = ptr_to_container->InnerListById(vector_index)->Begin();
+      item_iterator = ptr_to_container->InnerListById(vector_index).Begin();
     else
       item_iterator = nullptr;
   } else {
-    item_iterator += list->step;
+    item_iterator += list.step;
   }
   return *this;
 }
 
 ListContainerHelper::PositionInCharAllocator
 ListContainerHelper::PositionInCharAllocator::ReverseIncrement() {
-  CharAllocator::InnerList* list =
-      ptr_to_container->InnerListById(vector_index);
-  if (item_iterator == list->Begin()) {
+  const auto& list = ptr_to_container->InnerListById(vector_index);
+  if (item_iterator == list.Begin()) {
     --vector_index;
     // Since |vector_index| is unsigned, we compare < list_count() instead of
     // comparing >= 0, as the variable will wrap around when it goes out of
     // range (below 0).
     while (vector_index < ptr_to_container->list_count()) {
-      if (ptr_to_container->InnerListById(vector_index)->size != 0)
+      if (ptr_to_container->InnerListById(vector_index).size != 0)
         break;
       --vector_index;
     }
     if (vector_index < ptr_to_container->list_count()) {
       item_iterator =
-          ptr_to_container->InnerListById(vector_index)->LastElement();
+          ptr_to_container->InnerListById(vector_index).LastElement();
     } else {
       item_iterator = nullptr;
     }
   } else {
-    item_iterator -= list->step;
+    item_iterator -= list.step;
   }
   return *this;
 }
@@ -348,9 +344,9 @@
 ListContainerHelper::ListContainerHelper(size_t alignment,
                                          size_t max_size_for_derived_class,
                                          size_t num_of_elements_to_reserve_for)
-    : data_(new CharAllocator(alignment,
-                              max_size_for_derived_class,
-                              num_of_elements_to_reserve_for)) {}
+    : data_(std::make_unique<CharAllocator>(alignment,
+                                            max_size_for_derived_class,
+                                            num_of_elements_to_reserve_for)) {}
 
 ListContainerHelper::~ListContainerHelper() = default;
 
@@ -375,7 +371,7 @@
 
   size_t id = data_->LastInnerListId();
   return ConstReverseIterator(data_.get(), id,
-                              data_->InnerListById(id)->LastElement(), 0);
+                              data_->InnerListById(id).LastElement(), 0);
 }
 
 ListContainerHelper::ConstReverseIterator ListContainerHelper::crend() const {
@@ -389,7 +385,7 @@
 
   size_t id = data_->LastInnerListId();
   return ReverseIterator(data_.get(), id,
-                         data_->InnerListById(id)->LastElement(), 0);
+                         data_->InnerListById(id).LastElement(), 0);
 }
 
 ListContainerHelper::ReverseIterator ListContainerHelper::rend() {
@@ -401,7 +397,7 @@
     return cend();
 
   size_t id = data_->FirstInnerListId();
-  return ConstIterator(data_.get(), id, data_->InnerListById(id)->Begin(), 0);
+  return ConstIterator(data_.get(), id, data_->InnerListById(id).Begin(), 0);
 }
 
 ListContainerHelper::ConstIterator ListContainerHelper::cend() const {
@@ -417,7 +413,7 @@
     return end();
 
   size_t id = data_->FirstInnerListId();
-  return Iterator(data_.get(), id, data_->InnerListById(id)->Begin(), 0);
+  return Iterator(data_.get(), id, data_->InnerListById(id).Begin(), 0);
 }
 
 ListContainerHelper::Iterator ListContainerHelper::end() {
@@ -434,13 +430,13 @@
   size_t original_index = index;
   size_t list_index;
   for (list_index = 0; list_index < data_->list_count(); ++list_index) {
-    size_t current_size = data_->InnerListById(list_index)->size;
+    size_t current_size = data_->InnerListById(list_index).size;
     if (index < current_size)
       break;
     index -= current_size;
   }
   return ConstIterator(data_.get(), list_index,
-                       data_->InnerListById(list_index)->ElementAt(index),
+                       data_->InnerListById(list_index).ElementAt(index),
                        original_index);
 }
 
@@ -449,13 +445,13 @@
   size_t original_index = index;
   size_t list_index;
   for (list_index = 0; list_index < data_->list_count(); ++list_index) {
-    size_t current_size = data_->InnerListById(list_index)->size;
+    size_t current_size = data_->InnerListById(list_index).size;
     if (index < current_size)
       break;
     index -= current_size;
   }
   return Iterator(data_.get(), list_index,
-                  data_->InnerListById(list_index)->ElementAt(index),
+                  data_->InnerListById(list_index).ElementAt(index),
                   original_index);
 }
 
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
index d319561..10ed2997 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
@@ -198,39 +198,11 @@
         mTabModelSelectorObserver = new TabModelSelectorObserver() {
             @Override
             public void onTabModelSelected(TabModel newModel, TabModel oldModel) {
-                boolean isIncognito = newModel.isIncognito();
-                int dialogBackgroundColor =
-                        TabUiThemeProvider.getTabGridDialogBackgroundColor(context, isIncognito);
-                ColorStateList tintList = isIncognito
-                        ? AppCompatResources.getColorStateList(
-                                mContext, R.color.default_icon_color_light_tint_list)
-                        : AppCompatResources.getColorStateList(
-                                mContext, R.color.default_icon_color_tint_list);
-                int ungroupBarBackgroundColor =
-                        TabUiThemeProvider.getTabGridDialogUngroupBarBackgroundColor(
-                                context, isIncognito);
-                int ungroupBarHoveredBackgroundColor =
-                        TabUiThemeProvider.getTabGridDialogUngroupBarHoveredBackgroundColor(
-                                context, isIncognito);
-                int ungroupBarTextColor = TabUiThemeProvider.getTabGridDialogUngroupBarTextColor(
-                        context, isIncognito);
-                int ungroupBarHoveredTextColor =
-                        TabUiThemeProvider.getTabGridDialogUngroupBarHoveredTextColor(
-                                context, isIncognito);
-
-                mModel.set(TabGridPanelProperties.DIALOG_BACKGROUND_COLOR, dialogBackgroundColor);
-                mModel.set(TabGridPanelProperties.TINT, tintList);
-                mModel.set(TabGridPanelProperties.DIALOG_UNGROUP_BAR_BACKGROUND_COLOR,
-                        ungroupBarBackgroundColor);
-                mModel.set(TabGridPanelProperties.DIALOG_UNGROUP_BAR_HOVERED_BACKGROUND_COLOR,
-                        ungroupBarHoveredBackgroundColor);
-                mModel.set(
-                        TabGridPanelProperties.DIALOG_UNGROUP_BAR_TEXT_COLOR, ungroupBarTextColor);
-                mModel.set(TabGridPanelProperties.DIALOG_UNGROUP_BAR_HOVERED_TEXT_COLOR,
-                        ungroupBarHoveredTextColor);
+                updateColorProperties(context, newModel.isIncognito());
             }
         };
         mTabModelSelector.addObserver(mTabModelSelectorObserver);
+        updateColorProperties(context, mTabModelSelector.isIncognitoSelected());
 
         // Setup ScrimView click Runnable.
         mScrimClickRunnable = () -> {
@@ -413,6 +385,34 @@
                         R.plurals.bottom_tab_grid_title_placeholder, tabsCount, tabsCount));
     }
 
+    private void updateColorProperties(Context context, boolean isIncognito) {
+        int dialogBackgroundColor =
+                TabUiThemeProvider.getTabGridDialogBackgroundColor(context, isIncognito);
+        ColorStateList tintList = isIncognito ? AppCompatResources.getColorStateList(
+                                          mContext, R.color.default_icon_color_light_tint_list)
+                                              : AppCompatResources.getColorStateList(mContext,
+                                                      R.color.default_icon_color_tint_list);
+        int ungroupBarBackgroundColor =
+                TabUiThemeProvider.getTabGridDialogUngroupBarBackgroundColor(context, isIncognito);
+        int ungroupBarHoveredBackgroundColor =
+                TabUiThemeProvider.getTabGridDialogUngroupBarHoveredBackgroundColor(
+                        context, isIncognito);
+        int ungroupBarTextColor =
+                TabUiThemeProvider.getTabGridDialogUngroupBarTextColor(context, isIncognito);
+        int ungroupBarHoveredTextColor =
+                TabUiThemeProvider.getTabGridDialogUngroupBarHoveredTextColor(context, isIncognito);
+
+        mModel.set(TabGridPanelProperties.DIALOG_BACKGROUND_COLOR, dialogBackgroundColor);
+        mModel.set(TabGridPanelProperties.TINT, tintList);
+        mModel.set(TabGridPanelProperties.DIALOG_UNGROUP_BAR_BACKGROUND_COLOR,
+                ungroupBarBackgroundColor);
+        mModel.set(TabGridPanelProperties.DIALOG_UNGROUP_BAR_HOVERED_BACKGROUND_COLOR,
+                ungroupBarHoveredBackgroundColor);
+        mModel.set(TabGridPanelProperties.DIALOG_UNGROUP_BAR_TEXT_COLOR, ungroupBarTextColor);
+        mModel.set(TabGridPanelProperties.DIALOG_UNGROUP_BAR_HOVERED_TEXT_COLOR,
+                ungroupBarHoveredTextColor);
+    }
+
     private static int getRootId(Tab tab) {
         return CriticalPersistedTabData.from(tab).getRootId();
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/RelatedSearchesControl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/RelatedSearchesControl.java
index 920eb6fa..edf2487 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/RelatedSearchesControl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/RelatedSearchesControl.java
@@ -473,7 +473,8 @@
         RelatedSearchesUma.logSelectedSuggestionIndex(
                 suggestionIndex + (mDisplayDefaultQuery ? 0 : 1));
         mChipsSelected++;
-        ContextualSearchUma.logAllSearches(/* isRelatedSearches */ true);
+        boolean isRelatedSearchesSuggestion = suggestionIndex > 0 || !mDisplayDefaultQuery;
+        ContextualSearchUma.logAllSearches(isRelatedSearchesSuggestion);
     }
 
     /** The position of the first Related Searches suggestion in the carousel UI. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31.java b/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31.java
index eb4334c..6fe2cd24 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31.java
@@ -277,7 +277,9 @@
             }
 
             @Override
-            public void tabClosureCommitted(Tab tab) {
+            public void didCloseTab(Tab tab) {
+                // didCloseTab is called for both normal/incognito tabs, whereas tabClosureCommitted
+                // is called for normal tabs only.
                 writeTabCount(mInstanceId, selector);
             }
 
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31UnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31UnitTest.java
index 66e5839..35a1b05 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31UnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/multiwindow/MultiInstanceManagerApi31UnitTest.java
@@ -511,7 +511,7 @@
         assertEquals(incognitoTabMessage, 1,
                 MultiInstanceManagerApi31.readIncognitoTabCount(INSTANCE_ID_1));
 
-        triggerTabClosureCommitted(tabModelObserver, mTab1);
+        triggerDidCloseTab(tabModelObserver, mTab1);
         assertEquals(normalTabMessage, 1, MultiInstanceManagerApi31.readTabCount(INSTANCE_ID_1));
         assertEquals(incognitoTabMessage, 1,
                 MultiInstanceManagerApi31.readIncognitoTabCount(INSTANCE_ID_1));
@@ -571,7 +571,7 @@
         assertEquals("URL should be from the active normal tab", URL2.getSpec(),
                 MultiInstanceManagerApi31.readUrl(INSTANCE_ID_1));
 
-        triggerTabClosureCommitted(tabModelObserver, mTab1);
+        triggerDidCloseTab(tabModelObserver, mTab1);
         triggerTabRemoved(tabModelObserver, mTab2);
         assertEquals("Tab count should be zero", 0,
                 MultiInstanceManagerApi31.readTabCount(INSTANCE_ID_1));
@@ -597,13 +597,13 @@
         tabModelObserver.didAddTab(tab, 0, 0);
     }
 
-    private void triggerTabClosureCommitted(TabModelObserver tabModelObserver, Tab tab) {
+    private void triggerDidCloseTab(TabModelObserver tabModelObserver, Tab tab) {
         if (tab.isIncognito()) {
             mIncognitoTabCount--;
         } else {
             mNormalTabCount--;
         }
-        tabModelObserver.tabClosureCommitted(tab);
+        tabModelObserver.didCloseTab(tab);
     }
 
     private void triggerTabRemoved(TabModelObserver tabModelObserver, Tab tab) {
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp
index de241d5..9f437d0a 100644
--- a/chrome/app/os_settings_strings.grdp
+++ b/chrome/app/os_settings_strings.grdp
@@ -2010,6 +2010,27 @@
   <message name="IDS_SETTINGS_BLUETOOTH" desc="Name of the settings page which displays Bluetooth device settings.">
     Bluetooth
   </message>
+  <message name="IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_ONE_DEVICE" desc="Accessibility only label for Bluetooth summary page, when connected to one device.">
+    Connected to Bluetooth device named <ph name="DEVICE">$1<ex>Beats</ex></ph>
+  </message>
+  <message name="IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_TWO_DEVICES" desc="Accessibility only label for Bluetooth summary page, when connected to two devices.">
+    Connected to Bluetooth devices named <ph name="FIRST_DEVICE">$1<ex>Beats</ex></ph> and <ph name="SECOND_DEVICE">$2<ex>Mouse</ex></ph>
+  </message>
+  <message name="IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_TWO_OR_MORE_DEVICES" desc="Accessibility only label for Bluetooth summary page, when connected to two or more devices.">
+    Connected to <ph name="DEVICE">$1<ex>Beats</ex></ph> and <ph name="NUMBER_OF_DEVICES">$2<ex>2</ex></ph> other Bluetooth devices
+  </message>
+  <message name="IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_TWO_OR_MORE_DEVICES_DESCRIPTION" desc="Label for Bluetooth summary page, when connected to two or more devices.">
+    <ph name="DEVICE">$1<ex>Beats</ex></ph> and <ph name="NUMBER_OF_DEVICES">$2<ex>2</ex></ph> others
+  </message>
+  <message name="IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_TWO_DEVICES_DESCRIPTION" desc="Label for Bluetooth summary page, when connected to two devices.">
+    <ph name="FIRST_DEVICE">$1<ex>Beats</ex></ph>, <ph name="SECOND_DEVICE">$2<ex>Mouse</ex></ph>
+  </message>
+  <message name="IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_OFF" desc="Label for Bluetooth summary page, when Bluetooth is off.">
+    Off
+  </message>
+  <message name="IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_ON" desc="Label for Bluetooth summary page, when Bluetooth is on but no devices are connected.">
+    On
+  </message>
   <message name="IDS_SETTINGS_BLUETOOTH_DEVICE_DETAILS" desc="Name of the settings page which displays Bluetooth device details.">
     Bluetooth device details
   </message>
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_ONE_DEVICE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_ONE_DEVICE.png.sha1
new file mode 100644
index 0000000..1ada513
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_ONE_DEVICE.png.sha1
@@ -0,0 +1 @@
+56026f5dd9498dfd770aa0094733b2f1d99443e5
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_TWO_DEVICES.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_TWO_DEVICES.png.sha1
new file mode 100644
index 0000000..93d95901
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_TWO_DEVICES.png.sha1
@@ -0,0 +1 @@
+943808d6b0e34c47a25b09af76acb022856cb0c0
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_TWO_OR_MORE_DEVICES.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_TWO_OR_MORE_DEVICES.png.sha1
new file mode 100644
index 0000000..68a57da
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_TWO_OR_MORE_DEVICES.png.sha1
@@ -0,0 +1 @@
+b987ef0faea1cb24fafbd2eb76a53b25e6cffe55
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_OFF.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_OFF.png.sha1
new file mode 100644
index 0000000..1f965235
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_OFF.png.sha1
@@ -0,0 +1 @@
+79f489d663a33fc70ce7f918ea633ec0ba59653f
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_ON.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_ON.png.sha1
new file mode 100644
index 0000000..f1f118a
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_ON.png.sha1
@@ -0,0 +1 @@
+96b2aadc6af78fd6d78846ac01d53b9b9987bc39
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_TWO_DEVICES_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_TWO_DEVICES_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..93d95901
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_TWO_DEVICES_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+943808d6b0e34c47a25b09af76acb022856cb0c0
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_TWO_OR_MORE_DEVICES_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_TWO_OR_MORE_DEVICES_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..68a57da
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_TWO_OR_MORE_DEVICES_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+b987ef0faea1cb24fafbd2eb76a53b25e6cffe55
\ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index 9cdf462..5f656b73 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -441,6 +441,7 @@
 <translation id="1476088332184200792">Cihazınıza Kopyalayın</translation>
 <translation id="1476607407192946488">&amp;Dil Ayarları</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> smart kartınızın taxılı qalmasını tələb edir.</translation>
+<translation id="1477654881618305065">Təşkilatınız bu məzmunu paylaşmağa icazə vermir. Yardıma ehtiyacınız varsa, admininizlə əlaqə saxlayın.</translation>
 <translation id="1478340334823509079">Ətraflı: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Quraşdırma aktiv deyil</translation>
 <translation id="1480571698637441426">Suallar soruşduğunuz zaman uyğunlaşdırılmış cavablar almaq üçün Assistentinizə ekranınızda olan məzmunun ekran şəklinə giriş imkanı verin. Buraya oxudulan mahnı və ya videolar haqqında məlumatlar da daxil ola bilər.</translation>
@@ -614,6 +615,7 @@
 <translation id="1643921258693943800">Yaxınlıqda Paylaşımdan istifadə etmək üçün Bluetooth və Wi-Fi'ın aktiv edin</translation>
 <translation id="1644574205037202324">Tarixçə</translation>
 <translation id="1645516838734033527"><ph name="DEVICE_TYPE" /> cihazını qorumaq üçün Ağıllı Kilid telefonda ekran kilidi tələb edir.</translation>
+<translation id="1646793251510634025">Axtarış və baxışı optimallaşdırmaq üçün ayarları nəzərdən keçirin</translation>
 <translation id="1646982517418478057">Bu sertifikatı şifrələmək üçün parol daxil edin</translation>
 <translation id="1648528859488547844">Məkanı aşkarlamaq üçün Wi‑Fi və ya mobil şəbəkə istifadə edin</translation>
 <translation id="164936512206786300">Bluetooth cihazını ayırın</translation>
@@ -1460,6 +1462,7 @@
 <translation id="2514326558286966059">Barmaq izinizlə daha sürətli kiliddən çıxarın</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">Daha bir keçirici təyin edin</translation>
+<translation id="251722524540674480">İstifadəçi adınızı təsdiq edin</translation>
 <translation id="2517472476991765520">Skan edin</translation>
 <translation id="2518024842978892609">Müştəri sertifikatlarınızı istifadə edin</translation>
 <translation id="2519517390894391510">Sertifikat Profilinin Adı</translation>
@@ -2163,6 +2166,7 @@
 <translation id="3288047731229977326">Developer rejimində işləyən artırmalar kompüterinizə zərər verə bilər. Developer deyilsinizsə, güvənli qalmaq üçün bu artırmaların developer rejimində işləməsinə icazə verməməlisiniz.</translation>
 <translation id="3289668031376215426">Avto-kapitalizasiya</translation>
 <translation id="3289856944988573801">Güncəlləşmələri yoxlamaq üçün Ethernet və ya Wi-Fi istifadə edin.</translation>
+<translation id="3291436823898732747">Təkmilləşdirilmiş axtarış: Məsələn, yazmağa başlamazdan əvvəl Omnibox'dakı təkliflər</translation>
 <translation id="3293644607209440645">Bu səhifəni göndərin</translation>
 <translation id="32939749466444286">Linux konteyneri işə düşmədi. Yenidən cəhd edin.</translation>
 <translation id="3294437725009624529">Qonaq</translation>
@@ -4195,6 +4199,7 @@
 <translation id="5505307013568720083">Mürəkkəb bitdi</translation>
 <translation id="5505794066310932198">Dəyişdirmə Komandanı</translation>
 <translation id="5507756662695126555">İmtinasızlıq</translation>
+<translation id="5507795078844206688">Ziyarət etdiyiniz səhifələrin keçidləri, məsələn, https://www.google.com</translation>
 <translation id="5509693895992845810">Yadda saxlama formatı:</translation>
 <translation id="5509914365760201064">Emitent: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Google'dan Şəkil Təsvirləri əldə edin</translation>
@@ -4511,6 +4516,7 @@
 <translation id="5869522115854928033">Saxlanılmış parollar</translation>
 <translation id="5870086504539785141">Girişimlik menyusunu qapadın</translation>
 <translation id="5870155679953074650">Ağır zədələr</translation>
+<translation id="5875534259258494936">Ekran paylaşımı sona çatdı</translation>
 <translation id="5876576639916258720">İcra edilir...</translation>
 <translation id="5876851302954717356">Sağa Yeni Panel</translation>
 <translation id="5877064549588274448">Kanal dəyişdi. Dəyişiklikləri tətbiq etmək üçün cihazınızı yenidən başladın.</translation>
@@ -5368,6 +5374,7 @@
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> kök olaraq işə salına bilməz.</translation>
 <translation id="6812841287760418429">Dəyişiklikləri saxlayın</translation>
 <translation id="6813907279658683733">Bütün Ekran</translation>
+<translation id="6814033694018386318">Google ilə paylaşdıqlarınız</translation>
 <translation id="6817174620439930047">Sayt, MIDI cihazlarına daxil olmaq üçün sistem eksklüziv mesajlarından istifadə etmək istədikdə icazə alsın (tövsiyə olunur)</translation>
 <translation id="6818198425579322765">Tərcümə ediləcək səhifənin dili</translation>
 <translation id="6818802132960437751">Daxili virus qoruması</translation>
@@ -5863,6 +5870,7 @@
 <translation id="7374376573160927383">USB cihazlarını idarə edin</translation>
 <translation id="7374461526650987610">Protokol nizamlayıcıları</translation>
 <translation id="7375235221357833624">{0,plural, =1{Cihazı 1 saat ərzində güncəlləyin}other{Cihazı # saat ərzində güncəlləyin}}</translation>
+<translation id="7376543451826039186">Sürətli axtarış: Məsələn, cari səhifəyə əsaslanaraq növbəti məzmunu proaktiv şəkildə yükləyin</translation>
 <translation id="7376553024552204454">Hərəkətdə olarkən maus kursorunu vurğulayın</translation>
 <translation id="737728204345822099">Bu sayta girişinizin yazısı təhlükəsizlik açarınızda saxlanıla bilər.</translation>
 <translation id="7377451353532943397">Sensor girişini blok etməyə davam edin</translation>
@@ -5920,6 +5928,7 @@
 <translation id="7427798576651127129"><ph name="DEVICE_NAME" /> cihazından zəng</translation>
 <translation id="7431719494109538750">HID cihazları tapılmadı</translation>
 <translation id="7431991332293347422">Axtarış tarixçəsinin Axtarış və sairəni necə fərdiləşdirdiyinə nəzarət edin</translation>
+<translation id="7432200167665670017">Admininiz "<ph name="EXTENSION_NAME" />" - App ID <ph name="EXTENSION_ID" /> artırmasını bloklayıb</translation>
 <translation id="7433708794692032816"><ph name="DEVICE_TYPE" /> cihazınızdan istifadəyə davam etmək üçün smart kart taxın</translation>
 <translation id="7433957986129316853">Saxlayın</translation>
 <translation id="7434509671034404296">Developer</translation>
@@ -5949,6 +5958,7 @@
 <translation id="7460045493116006516">Quraşdırdığınız hazırki tema</translation>
 <translation id="7461924472993315131">Pin</translation>
 <translation id="746216226901520237">Növbəti dəfə telefon <ph name="DEVICE_TYPE" /> cihazını kiliddən çıxaracaq. Ayarlardan Smart Lock'u deaktiv edə bilərsiniz.</translation>
+<translation id="7464637891177137294">Google Hesabınızda saxlayın, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# açıq tab, tab sətrini dəyişmək üçün basın}other{# açıq tab, tab sətrini dəyişmək üçün basın}}</translation>
 <translation id="7465635034594602553">Xəta baş verdi. Bir neçə dəqiqə gözləyib <ph name="APP_NAME" /> tətbiqini yenidən işə salın.</translation>
 <translation id="7465778193084373987">Netscape Sertifikat Ləğvetmə URL</translation>
@@ -6012,6 +6022,7 @@
 <translation id="7525625923260515951">Seçilən mətn səsləndirilsin</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{Daha 1 element}other{Daha {NUM_DOWNLOADS} element}}</translation>
 <translation id="7526989658317409655">Yertutan</translation>
+<translation id="7527758104894292229">Onu Google Hesabınızda (<ph name="ACCOUNT" />) güncəlləyin</translation>
 <translation id="7529411698175791732">İnternet bağlantısını yoxlayın. Problem hələ də davam edirsə, hesabdan çıxaraq yenidən daxil olmağa çalışın.</translation>
 <translation id="7529876053219658589">{0,plural, =1{Qonaq pəncərəsini bağlayın}other{Qonaq pəncərəsini bağlayın}}</translation>
 <translation id="7530016656428373557">Reyti Vatda hesablayın</translation>
@@ -6398,6 +6409,7 @@
 <translation id="7898725031477653577">Həmişə tərcümə edin</translation>
 <translation id="790040513076446191">Gizliliklə bağlı ayarları işlədin</translation>
 <translation id="7901405293566323524">Telefon Habı</translation>
+<translation id="7901914889562552258">Səhifə göstəricilərindən istifadə edilərək Chrome təkmilləşdirildi</translation>
 <translation id="7903345046358933331">Səhifə cavab vermir. Səhifə cavab verənə kimi gözləyə və ya bağlaya bilərsiniz.</translation>
 <translation id="7903742244674067440">Bu sertifikat təşkilatlarını müəyyən edən sertifikatlarınız var</translation>
 <translation id="7903859912536385558">stabil (etibarlı yoxlayıcı)</translation>
@@ -6863,6 +6875,7 @@
 <translation id="8392364544846746346">Sayt cihazındakı fayl və qovluqları redaktə etmək istədikdə icazə tələb edilsin</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> üçün seçimlər menyusu</translation>
 <translation id="8393511274964623038">Plaqini dayandırın</translation>
+<translation id="839363317075970734">Bluetooth cihazının detalları</translation>
 <translation id="8393700583063109961">Mesaj göndərin</translation>
 <translation id="8397825320644530257">Qoşulmuş telefonu ayırın</translation>
 <translation id="8398877366907290961">Hər halda davam edin</translation>
@@ -7113,6 +7126,7 @@
 <translation id="8681614230122836773">Chrome kompüterdə zərərli proqram tapıb</translation>
 <translation id="8682730193597992579"><ph name="PRINTER_NAME" /> qoşuldu və hazırdır</translation>
 <translation id="8683081248374354009">Qrupu sıfırlayın</translation>
+<translation id="8683526617475118045">Nə əldə edirsiniz</translation>
 <translation id="8688672835843460752">Əlçatandır</translation>
 <translation id="8690129572193755009">Saytlar protokolları nizamlamaq üçün icazə istəyə bilər</translation>
 <translation id="8695139659682234808">Ayarlamadan sonra valideyn nəzarəti əlavə edin</translation>
@@ -7166,6 +7180,7 @@
 <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> əvəzinə <ph name="PROTOCOL" /> linklərini açın</translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">Səhifənin tərcümə ediləcəyi dili seçin</translation>
+<translation id="8737916108453753541">Keçidlər axtarış davranışını anlamaq üçün Google ilə paylaşılır</translation>
 <translation id="8740247629089392745">Bu Chromebook'u <ph name="SUPERVISED_USER_NAME" /> adlı istifadəçiyə verə bilərsiniz. Ayarlama tamamlanmaq üzrədir, bundan sonra araşdırmağa başlaya bilərsiniz.</translation>
 <translation id="8741944563400125534">Düymə ilə Giriş ayarlama bələdçisi</translation>
 <translation id="8742998548129056176">Bu ümumi məlumat cihazınız və ondan istifadə haqqındadır (məsələn, batareya səviyyəsi, sistem və tətbiq fəaliyyəti və xətalar). Data Android məhsullarını təkmilləşdirmək məqsədilə istifadə olunacaq. Bəzi ümumiləşdirilmiş məlumatlar Google tətbiqlərinə və Android tərtibatçıları kimi partnyorlara tətbiq və məhsullarını təkmilləşdirməkdə kömək edəcək.</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index b8b7091..d366a3a 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -446,6 +446,7 @@
 <translation id="1476088332184200792">Скапіраваць на прыладу</translation>
 <translation id="1476607407192946488">&amp;Налады мовы</translation>
 <translation id="1477446329585670721">Па правілах дамена <ph name="DOMAIN" /> разумная картка павінна быць устаўлена.</translation>
+<translation id="1477654881618305065">Ваша арганізацыя не дазваляе вам абагульваць гэта змесціва. Пры патрэбе звярніцеся да адміністратара.</translation>
 <translation id="1478340334823509079">Падрабязнасці: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Усталяванне не ўключана</translation>
 <translation id="1480571698637441426">Каб адказы на вашы пытанні былі больш дакладнымі, дазвольце Памочніку выкарыстоўваць інфармацыю на вашым экране. Яна можа ўключаць у сябе звесткі аб кампазіцыях і відэа, якія прайграюцца.</translation>
@@ -621,6 +622,7 @@
 <translation id="1643921258693943800">Каб выкарыстоўваць "Абагульванне паблізу", уключыце Bluetooth і Wi-Fi</translation>
 <translation id="1644574205037202324">Гісторыя</translation>
 <translation id="1645516838734033527">Каб прылада <ph name="DEVICE_TYPE" /> была ў бяспецы, Smart Lock патрабуе, каб функцыя блакіроўкі экрана на вашым тэлефоне была ўключана.</translation>
+<translation id="1646793251510634025">Азнаёмцеся з наладамі пошуку і аптымізацыі прагляду сайтаў</translation>
 <translation id="1646982517418478057">Каб зашыфраваць гэты сертыфікат, увядзіце пароль</translation>
 <translation id="1648528859488547844">Выкарыстоўваць Wi‑Fi або мабільныя сеткі для вызначэння месцазнаходжання</translation>
 <translation id="164936512206786300">Разлучыць прыладу Bluetooth</translation>
@@ -1464,6 +1466,7 @@
 <translation id="2514326558286966059">Ажыццяўляйце разблакіроўку прылады хутчэй, выкарыстоўваючы адбітак пальца</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">Прызначыць яшчэ адзін пераключальнік</translation>
+<translation id="251722524540674480">Пацвердзіце імя карыстальніка</translation>
 <translation id="2517472476991765520">Пошук</translation>
 <translation id="2518024842978892609">Выкарыстанне вашых кліенцкіх сертыфікатаў</translation>
 <translation id="2519517390894391510">Назва профілю сертыфіката</translation>
@@ -2167,6 +2170,7 @@
 <translation id="3288047731229977326">Пашырэнні, якія працуюць у рэжыме распрацоўшчыка, могуць пашкодзіць камп'ютар. Калі вы не распрацоўшчык, вам у мэтах бяспекі трэба забараніць гэтым пашырэнням працаваць у рэжыме распрацоўшчыка.</translation>
 <translation id="3289668031376215426">Аўтаматычны ўвод вялікіх літар</translation>
 <translation id="3289856944988573801">Каб праверыць наяўнасць абнаўленняў, падключыцеся да сеткі Ethernet або Wi-Fi.</translation>
+<translation id="3291436823898732747">Зручнейшы прагляд сайтаў: напрыклад, амнібокс будзе паказваць прапановы да таго, як вы пачняце ўводзіць запыт.</translation>
 <translation id="3293644607209440645">Адправіць гэту старонку</translation>
 <translation id="32939749466444286">Кантэйнер Linux не запусціўся. Паўтарыце спробу.</translation>
 <translation id="3294437725009624529">Госць</translation>
@@ -4199,6 +4203,7 @@
 <translation id="5505307013568720083">Чарніла скончылася</translation>
 <translation id="5505794066310932198">Уключыць або выключыць Commander</translation>
 <translation id="5507756662695126555">Неабвержны</translation>
+<translation id="5507795078844206688">URL-адрасы наведаных старонак, напрыклад, https://www.google.com.</translation>
 <translation id="5509693895992845810">Захаваць &amp;як...</translation>
 <translation id="5509914365760201064">Выдавец: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Атрымліваць апісанні відарысаў ад Google</translation>
@@ -4515,6 +4520,7 @@
 <translation id="5869522115854928033">Захаваныя паролі</translation>
 <translation id="5870086504539785141">Закрыць меню спецыяльных магчымасцей</translation>
 <translation id="5870155679953074650">Апаратныя збоі</translation>
+<translation id="5875534259258494936">Абагульванне экрана завершана</translation>
 <translation id="5876576639916258720">Выконваецца...</translation>
 <translation id="5876851302954717356">Новая ўкладка справа</translation>
 <translation id="5877064549588274448">Канал зменены. Перазапусціце прыладу, каб змены прымяніліся.</translation>
@@ -5374,6 +5380,7 @@
 <translation id="6812349420832218321">Немагчыма запусціць <ph name="PRODUCT_NAME" /> з правамі каранёвага доступу.</translation>
 <translation id="6812841287760418429">Захаваць змяненні</translation>
 <translation id="6813907279658683733">Увесь экран</translation>
+<translation id="6814033694018386318">Даныя, якія абагульваюцца з Google</translation>
 <translation id="6817174620439930047">Запытваць, калі сайт хоча выкарыстоўваць эксклюзіўныя сістэмныя паведамленні для доступу да MIDI-прылад (рэкамендуецца)</translation>
 <translation id="6818198425579322765">З якой мовы перакладаць старонку</translation>
 <translation id="6818802132960437751">Убудаваная абарона ад вірусаў</translation>
@@ -5869,6 +5876,7 @@
 <translation id="7374376573160927383">Кіраваць прыладамі USB</translation>
 <translation id="7374461526650987610">Апрацоўшчыкі пратаколаў</translation>
 <translation id="7375235221357833624">{0,plural, =1{Перазапусціце прыладу на працягу гадзіны}one{Перазапусціце прыладу на працягу # гадзіны}few{Перазапусціце прыладу на працягу # гадзін}many{Перазапусціце прыладу на працягу # гадзін}other{Перазапусціце прыладу на працягу # гадзіны}}</translation>
+<translation id="7376543451826039186">Хутчэйшы прагляд сайтаў: напрыклад, на падставе даных з бягучай старонкі пэўнае змесціва будзе загружацца без запыту.</translation>
 <translation id="7376553024552204454">Указваць на курсор мышы, калі ён рухаецца</translation>
 <translation id="737728204345822099">На ключы бяспекі можа быць пакінуты запіс пра наведванне вамі гэтага вэб-сайта.</translation>
 <translation id="7377451353532943397">Працягваць блакіраваць доступ да датчыкаў</translation>
@@ -5926,6 +5934,7 @@
 <translation id="7427798576651127129">Выклік з прылады <ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">Прылады HID не знойдзены</translation>
 <translation id="7431991332293347422">Кіраванне тым, як ваша гісторыя прагляду сайтаў выкарыстоўваецца для персаналізацыі пошуку і ў іншых мэтах</translation>
+<translation id="7432200167665670017">Адміністратар заблакіраваў пашырэнне "<ph name="EXTENSION_NAME" />" (ідэнтыфікатар праграмы: <ph name="EXTENSION_ID" />)</translation>
 <translation id="7433708794692032816">Каб працягваць карыстацца прыладай <ph name="DEVICE_TYPE" />, устаўце разумную картку</translation>
 <translation id="7433957986129316853">Пакінуць</translation>
 <translation id="7434509671034404296">Для распрацоўшчыкаў</translation>
@@ -5955,6 +5964,7 @@
 <translation id="7460045493116006516">Бягучая тэма, якую вы ўсталявалі</translation>
 <translation id="7461924472993315131">PIN-код</translation>
 <translation id="746216226901520237">Наступны раз прылада <ph name="DEVICE_TYPE" /> будзе разблакіравана з дапамогай вашага тэлефона. Вы можаце выключыць Smart Lock у Наладах.</translation>
+<translation id="7464637891177137294">Ён будзе захаваны ва Уліковым запісе Google <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# адкрытая ўкладка. Націсніце, каб уключыць або выключыць панэль укладак}one{# адкрытая ўкладка. Націсніце, каб уключыць або выключыць панэль укладак}few{# адкрытыя ўкладкі. Націсніце, каб уключыць або выключыць панэль укладак}many{# адкрытых укладак. Націсніце, каб уключыць або выключыць панэль укладак}other{# адкрытай укладкі. Націсніце, каб уключыць або выключыць панэль укладак}}</translation>
 <translation id="7465635034594602553">Нешта пайшло не так. Пачакайце некалькі хвілін і запусціце праграму <ph name="APP_NAME" /> зноў.</translation>
 <translation id="7465778193084373987">URL-адрас адклікання сертыфікатаў Netscape</translation>
@@ -6018,6 +6028,7 @@
 <translation id="7525625923260515951">Праслухаць вылучаны тэкст</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{Яшчэ 1}one{Яшчэ {NUM_DOWNLOADS}}few{Яшчэ {NUM_DOWNLOADS}}many{Яшчэ {NUM_DOWNLOADS}}other{Яшчэ {NUM_DOWNLOADS}}}</translation>
 <translation id="7526989658317409655">Запаўняльнік</translation>
+<translation id="7527758104894292229">Ён будзе абноўлены ва Уліковым запісе Google <ph name="ACCOUNT" /></translation>
 <translation id="7529411698175791732">Праверце падключэнне да інтэрнэту. Калі праблема застанецца, паспрабуйце выйсці і ўвайсці зноў.</translation>
 <translation id="7529876053219658589">{0,plural, =1{Закрыць гасцявое акно}one{Закрыць гасцявыя вокны}few{Закрыць гасцявыя вокны}many{Закрыць гасцявыя вокны}other{Закрыць гасцявыя вокны}}</translation>
 <translation id="7530016656428373557">Індыкатар разрадкі ў ватах</translation>
@@ -6404,6 +6415,7 @@
 <translation id="7898725031477653577">Заўсёды перакладаць</translation>
 <translation id="790040513076446191">Кіраваць наладамі, звязанымі з прыватнасцю</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
+<translation id="7901914889562552258">Палепшаная версія Chrome, якая выкарыстоўвае паказчыкі старонак.</translation>
 <translation id="7903345046358933331">Старонка перастала адказваць на запыты. Можна пачакаць, пакуль яна пачне адказваць, або закрыць яе.</translation>
 <translation id="7903742244674067440">У вас захоўваюцца сертыфікаты, якія ідэнтыфікуюць гэтыя цэнтры сертыфікацыі</translation>
 <translation id="7903859912536385558">"стабільны" (давераны тэсціроўшчык)</translation>
@@ -6869,6 +6881,7 @@
 <translation id="8392364544846746346">Запытваць дазвол на змяненне сайтамі файлаў ці папак на прыладзе</translation>
 <translation id="8392451568018454956">Меню параметраў для <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8393511274964623038">Спыніць убудову</translation>
+<translation id="839363317075970734">Падрабязныя звесткі пра прыладу з Bluetooth</translation>
 <translation id="8393700583063109961">Адправіць паведамленне</translation>
 <translation id="8397825320644530257">Адключыць падключаны тэлефон</translation>
 <translation id="8398877366907290961">Усё роўна працягнуць</translation>
@@ -7119,6 +7132,7 @@
 <translation id="8681614230122836773">Chrome знайшоў шкоднае праграмнае забеспячэнне на вашым камп'ютары</translation>
 <translation id="8682730193597992579">Прынтар "<ph name="PRINTER_NAME" />" падключаны і гатовы да працы</translation>
 <translation id="8683081248374354009">Скінуць параметры групы</translation>
+<translation id="8683526617475118045">Якія перавагі дае гэта функцыя</translation>
 <translation id="8688672835843460752">Даступна</translation>
 <translation id="8690129572193755009">Сайты могуць запытваць дазвол на кіраванне пратаколамі</translation>
 <translation id="8695139659682234808">Дадаванне функцыі бацькоўскага кантролю па завяршэнні наладкі</translation>
@@ -7172,6 +7186,7 @@
 <translation id="8737685506611670901">Адкрываць спасылкі <ph name="PROTOCOL" /> замест <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Фіктыўныя</translation>
 <translation id="8737914367566358838">Выберыце, на якую мову перакласці старонку</translation>
+<translation id="8737916108453753541">URL-адрасы абагульваюцца з Google, каб аналізаваць дзеянні карыстальнікаў у браўзеры.</translation>
 <translation id="8740247629089392745">Вы можаце перадаць Chromebook карыстальніку <ph name="SUPERVISED_USER_NAME" />. Наладжванне амаль завершана. Пара пазнаёміцца са змесцівам.</translation>
 <translation id="8741944563400125534">Майстар наладкі доступу праз пераключальнікі</translation>
 <translation id="8742998548129056176">Гэта агульная інфармацыя пра вашу прыладу і яе выкарыстанне (напрыклад, узровень зараду акумулятара, дзеянні ў сістэме і праграмах, а таксама памылкі). Даныя будуць выкарыстоўвацца для ўдасканалення сістэмы Android, а пэўная згрупаваная інфармацыя дапаможа ўдасканаліць праграмы Google і будзе карыснай для партнёраў кампаніі, напрыклад для распрацоўшчыкаў Android, у паляпшэнні праграм і прадуктаў.</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index b1158b1..08708ea6 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -445,6 +445,7 @@
 <translation id="1476088332184200792">Kopírovat do zařízení</translation>
 <translation id="1476607407192946488">&amp;Jazyková nastavení</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> vyžaduje, abyste čipovou kartu ponechali vloženou.</translation>
+<translation id="1477654881618305065">Vaše organizace nepovoluje sdílet tento obsah. Pokud potřebujete pomoc, obraťte se na administrátora.</translation>
 <translation id="1478340334823509079">Podrobnosti: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Instalace není povolena</translation>
 <translation id="1480571698637441426">Pokud na otázky chcete dostávat přizpůsobené odpovědi, poskytněte Asistentovi přístup ke snímkům obsahu na obrazovce. Mohou být zahrnuty i informace o přehrávaných skladbách nebo videích.</translation>
@@ -620,6 +621,7 @@
 <translation id="1643921258693943800">Pokud chcete používat sdílení nablízko, zapněte Bluetooth a Wi-Fi</translation>
 <translation id="1644574205037202324">Historie</translation>
 <translation id="1645516838734033527">Smart Lock z důvodu zajištění bezpečnosti zařízení <ph name="DEVICE_TYPE" /> vyžaduje, aby byl v telefonu nastaven zámek obrazovky.</translation>
+<translation id="1646793251510634025">Zkontrolujte nastavení pro optimalizaci vyhledávání a procházení internetu</translation>
 <translation id="1646982517418478057">Zadejte heslo k zašifrování tohoto certifikátu</translation>
 <translation id="1648528859488547844">K určování polohy používat Wi-Fi nebo mobilní sítě</translation>
 <translation id="164936512206786300">Zrušit spárování se zařízením Bluetooth</translation>
@@ -1462,6 +1464,7 @@
 <translation id="2514326558286966059">Rychlejší odemknutí otiskem prstu</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">Přidružte ještě jeden přepínač</translation>
+<translation id="251722524540674480">Potvrďte své uživatelské jméno</translation>
 <translation id="2517472476991765520">Naskenovat</translation>
 <translation id="2518024842978892609">Používat vaše klientské certifikáty</translation>
 <translation id="2519517390894391510">Název profilu certifikátu</translation>
@@ -2165,6 +2168,7 @@
 <translation id="3288047731229977326">Rozšíření spuštěná v režimu pro vývojáře mohou poškodit počítač. Pokud nejste vývojář, měli byste s ohledem na svou bezpečnost rozšíření spuštěná v tomto režimu deaktivovat.</translation>
 <translation id="3289668031376215426">Velká písmena automaticky</translation>
 <translation id="3289856944988573801">Chcete-li zkontrolovat dostupnost aktualizací, použijte síť Ethernet nebo Wi-Fi.</translation>
+<translation id="3291436823898732747">Lepší procházení: Například návrhy v omniboxu, ještě než začnete psát</translation>
 <translation id="3293644607209440645">Odeslat tuto stránku</translation>
 <translation id="32939749466444286">Kontejner systému Linux se nespustil. Zkuste to znovu.</translation>
 <translation id="3294437725009624529">Host</translation>
@@ -4198,6 +4202,7 @@
 <translation id="5505307013568720083">Došel inkoust</translation>
 <translation id="5505794066310932198">Přepnout Commander</translation>
 <translation id="5507756662695126555">Neodvolatelnost</translation>
+<translation id="5507795078844206688">Adresy URL navštívených stránek, například https://www.google.com</translation>
 <translation id="5509693895992845810">Uložit &amp;jako...</translation>
 <translation id="5509914365760201064">Vydal: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Získat popisy obrázků z Googlu</translation>
@@ -4514,6 +4519,7 @@
 <translation id="5869522115854928033">Uložená hesla</translation>
 <translation id="5870086504539785141">Zavřít nabídku usnadnění přístupu</translation>
 <translation id="5870155679953074650">Chyby stránkování na disk</translation>
+<translation id="5875534259258494936">Sdílení obrazovky bylo ukončeno</translation>
 <translation id="5876576639916258720">Spuštěno...</translation>
 <translation id="5876851302954717356">Nová karta napravo</translation>
 <translation id="5877064549588274448">Verze byla změněna. Změny se projeví po restartování zařízení.</translation>
@@ -5373,6 +5379,7 @@
 <translation id="6812349420832218321">Aplikaci <ph name="PRODUCT_NAME" /> nelze spustit jako uživatel root.</translation>
 <translation id="6812841287760418429">Uchovat změny</translation>
 <translation id="6813907279658683733">Celá obrazovka</translation>
+<translation id="6814033694018386318">Co sdílíte s Googlem</translation>
 <translation id="6817174620439930047">Zeptat se, když chce web využít exkluzivní zprávy systému pro přístup k zařízením MIDI (doporučeno)</translation>
 <translation id="6818198425579322765">Jazyk stránky k překladu</translation>
 <translation id="6818802132960437751">Integrovaná antivirová ochrana</translation>
@@ -5868,6 +5875,7 @@
 <translation id="7374376573160927383">Spravovat zařízení USB</translation>
 <translation id="7374461526650987610">Obslužné nástroje protokolů</translation>
 <translation id="7375235221357833624">{0,plural, =1{Do hodiny zařízení aktualizujte}few{Do # hodin zařízení aktualizujte}many{Do # hodiny zařízení aktualizujte}other{Do # hodin zařízení aktualizujte}}</translation>
+<translation id="7376543451826039186">Rychlejší procházení: Například proaktivní načítání dalšího konkrétního obsahu na základě aktuální stránky</translation>
 <translation id="7376553024552204454">Zvýraznit ukazatel myši, když se pohybuje.</translation>
 <translation id="737728204345822099">Na bezpečnostním klíči zůstane záznam o návštěvě tohoto webu.</translation>
 <translation id="7377451353532943397">I nadále blokovat přístup k senzorům</translation>
@@ -5925,6 +5933,7 @@
 <translation id="7427798576651127129">Zavolat ze zařízení <ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">Nebyla nalezena žádná zařízení HID</translation>
 <translation id="7431991332293347422">Nastavte, jak se má vaše historie prohlížení používat k personalizaci Vyhledávání a dalších služeb</translation>
+<translation id="7432200167665670017">Administrátor rozšíření <ph name="EXTENSION_NAME" /> zablokoval – ID aplikace <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">Pokud chcete pokračovat v používání zařízení <ph name="DEVICE_TYPE" />, vložte čipovou kartu</translation>
 <translation id="7433957986129316853">Zachovat</translation>
 <translation id="7434509671034404296">Vývojář</translation>
@@ -5954,6 +5963,7 @@
 <translation id="7460045493116006516">Aktuálně nainstalovaný motiv</translation>
 <translation id="7461924472993315131">Připnout</translation>
 <translation id="746216226901520237">Příště váš telefon zařízení <ph name="DEVICE_TYPE" /> odemkne. Funkci Smart Lock můžete vypnout v Nastavení.</translation>
+<translation id="7464637891177137294">Uložte si ho do účtu Google, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{Je otevřená # karta, stisknutím přepnete lištu karet}few{Jsou otevřené # karty, stisknutím přepnete lištu karet}many{Je otevřených # karty, stisknutím přepnete lištu karet}other{Je otevřených # karet, stisknutím přepnete lištu karet}}</translation>
 <translation id="7465635034594602553">Došlo k chybě. Několik minut počkejte a spusťte aplikaci <ph name="APP_NAME" /> znovu.</translation>
 <translation id="7465778193084373987">Adresa URL pro odvolání certifikátu Netscape</translation>
@@ -6017,6 +6027,7 @@
 <translation id="7525625923260515951">Poslech vybraného textu</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 další}few{{NUM_DOWNLOADS} další}many{{NUM_DOWNLOADS} dalšího}other{{NUM_DOWNLOADS} dalších}}</translation>
 <translation id="7526989658317409655">Zástupný symbol</translation>
+<translation id="7527758104894292229">Aktualizujte ho ve svém účtu Google, <ph name="ACCOUNT" /></translation>
 <translation id="7529411698175791732">Zkontrolujte připojení k internetu. Pokud problém přetrvává, zkuste se odhlásit a znovu přihlásit.</translation>
 <translation id="7529876053219658589">{0,plural, =1{Zavřít okno hosta}few{Zavřít okna hosta}many{Zavřít okna hosta}other{Zavřít okna hosta}}</translation>
 <translation id="7530016656428373557">Rychlost vybíjení ve wattech</translation>
@@ -6403,6 +6414,7 @@
 <translation id="7898725031477653577">Vždy překládat</translation>
 <translation id="790040513076446191">Manipulovat s nastavením týkajícím se ochrany soukromí</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
+<translation id="7901914889562552258">Lepší metriky využívání stránek Chromem</translation>
 <translation id="7903345046358933331">Stránka přestala reagovat. Můžete počkat, až začne reagovat, nebo ji ukončit.</translation>
 <translation id="7903742244674067440">Máte založené certifikáty, které identifikují tyto certifikační autority</translation>
 <translation id="7903859912536385558">stabilní (důvěryhodný tester)</translation>
@@ -6869,6 +6881,7 @@
 <translation id="8392364544846746346">Zeptat se, když chce web upravit soubory nebo složky v zařízení</translation>
 <translation id="8392451568018454956">Nabídka možností pro uživatele <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8393511274964623038">Ukončit plugin</translation>
+<translation id="839363317075970734">Podrobnosti zařízení Bluetooth</translation>
 <translation id="8393700583063109961">Odeslat zprávu</translation>
 <translation id="8397825320644530257">Odpojit připojený telefon</translation>
 <translation id="8398877366907290961">Přesto pokračovat</translation>
@@ -7118,6 +7131,7 @@
 <translation id="8681614230122836773">Chrome ve vašem počítači našel škodlivý software</translation>
 <translation id="8682730193597992579">Tiskárna <ph name="PRINTER_NAME" /> je připojená a připravená</translation>
 <translation id="8683081248374354009">Resetovat skupinu</translation>
+<translation id="8683526617475118045">Co získáte</translation>
 <translation id="8688672835843460752">Dostupné</translation>
 <translation id="8690129572193755009">Weby mohou žádat o povolení zpracovávat protokoly</translation>
 <translation id="8695139659682234808">Přidejte rodičovskou kontrolu po dokončení nastavení</translation>
@@ -7171,6 +7185,7 @@
 <translation id="8737685506611670901">Otevírat odkazy <ph name="PROTOCOL" /> namísto aplikace <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">Vyberte jazyk, do kterého chcete stránku přeložit</translation>
+<translation id="8737916108453753541">Adresy URL jsou sdíleny s Googlem za účelem zjišťování chování během procházení internetu</translation>
 <translation id="8740247629089392745">Tento Chromebook můžete předat uživateli <ph name="SUPERVISED_USER_NAME" />. Nastavení je skoro hotové. Pak bude čas prozkoumat obsah.</translation>
 <translation id="8741944563400125534">Průvodce nastavením přístupu pomocí přepínačů</translation>
 <translation id="8742998548129056176">Toto jsou obecné informace o vašem zařízení a způsobu jeho používání (např. stav baterie, aktivita systému a aplikací nebo chyby). Data budou využívána k vylepšení systému Android. Některé souhrnné informace pomohou s vylepšováním aplikací a služeb také našim partnerům, například vývojářům Androidu.</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 236fcb3..b769755 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -443,6 +443,7 @@
 <translation id="1476088332184200792">Copiar a tu dispositivo</translation>
 <translation id="1476607407192946488">&amp;Configuración de idiomas</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> requiere que no quites la tarjeta inteligente.</translation>
+<translation id="1477654881618305065">Tu organización no te permite compartir este contenido. Si necesitas ayuda, comunícate con tu administrador.</translation>
 <translation id="1478340334823509079">Detalles: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">La instalación no está habilitada</translation>
 <translation id="1480571698637441426">Para obtener respuestas personalizadas cuando hagas preguntas, permite que Asistente acceda a una captura de pantalla de lo que sucede en tu dispositivo. También puede acceder a información sobre las canciones o los videos que se estén reproduciendo.</translation>
@@ -615,6 +616,7 @@
 <translation id="1643921258693943800">Para usar Compartir con Nearby, activa las conexiones Bluetooth y Wi-Fi.</translation>
 <translation id="1644574205037202324">Historial</translation>
 <translation id="1645516838734033527">Para mantener tu dispositivo <ph name="DEVICE_TYPE" /> protegido, Smart Lock requiere que agregues un bloqueo de pantalla en tu teléfono.</translation>
+<translation id="1646793251510634025">Revisa la configuración para optimizar la búsqueda y la navegación</translation>
 <translation id="1646982517418478057">Ingresa una contraseña para encriptar este certificado</translation>
 <translation id="1648528859488547844">Usar Wi-Fi o redes móviles para determinar la ubicación</translation>
 <translation id="164936512206786300">Desvincular el dispositivo Bluetooth</translation>
@@ -1458,6 +1460,7 @@
 <translation id="2514326558286966059">Desbloquea más rápido con tu huella dactilar</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">Asignar un interruptor más</translation>
+<translation id="251722524540674480">Confirmar tu nombre de usuario</translation>
 <translation id="2517472476991765520">Buscar</translation>
 <translation id="2518024842978892609">Usar los certificados de cliente</translation>
 <translation id="2519517390894391510">Nombre de perfil del certificado</translation>
@@ -2162,6 +2165,7 @@
 <translation id="3288047731229977326">Las extensiones que se ejecutan en modo de programador pueden dañar tu computadora. Si no eres programador, debes inhabilitar las extensiones que se ejecutan en modo de programador para mantenerte protegido.</translation>
 <translation id="3289668031376215426">Mayúsculas automáticas</translation>
 <translation id="3289856944988573801">Para comprobar si hay actualizaciones, utiliza una conexión Ethernet o Wi-Fi.</translation>
+<translation id="3291436823898732747">Navegación mejorada: Por ejemplo, sugerencias en el cuadro multifunción antes de empezar a escribir</translation>
 <translation id="3293644607209440645">Enviar esta página</translation>
 <translation id="32939749466444286">No se inició el contenedor de Linux. Vuelve a intentarlo.</translation>
 <translation id="3294437725009624529">Invitado</translation>
@@ -4196,6 +4200,7 @@
 <translation id="5505307013568720083">Se agotó la tinta</translation>
 <translation id="5505794066310932198">Activar o desactivar Commander</translation>
 <translation id="5507756662695126555">No rechazo</translation>
+<translation id="5507795078844206688">URL de las páginas que visitas, p. ej., https://www.google.com</translation>
 <translation id="5509693895992845810">Gu&amp;ardar como...</translation>
 <translation id="5509914365760201064">Emisor: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Obtener descripciones de imágenes de Google</translation>
@@ -4512,6 +4517,7 @@
 <translation id="5869522115854928033">Contraseñas almacenadas</translation>
 <translation id="5870086504539785141">Cerrar menú de accesibilidad</translation>
 <translation id="5870155679953074650">Fallos graves</translation>
+<translation id="5875534259258494936">Se dejó de compartir la pantalla</translation>
 <translation id="5876576639916258720">En ejecución…</translation>
 <translation id="5876851302954717356">Nueva pestaña a la derecha</translation>
 <translation id="5877064549588274448">Se cambió el canal. Reinicia el dispositivo para aplicar los cambios.</translation>
@@ -5371,6 +5377,7 @@
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> no se puede ejecutar como raíz.</translation>
 <translation id="6812841287760418429">Conservar cambios</translation>
 <translation id="6813907279658683733">Pantalla completa</translation>
+<translation id="6814033694018386318">Lo que compartes con Google</translation>
 <translation id="6817174620439930047">Preguntarme cuando un sitio quiera usar los mensajes exclusivos del sistema para acceder a dispositivos MIDI (recomendado)</translation>
 <translation id="6818198425579322765">Idioma de la página para traducir</translation>
 <translation id="6818802132960437751">Protección antivirus integrada</translation>
@@ -5866,6 +5873,7 @@
 <translation id="7374376573160927383">Administrar dispositivos USB</translation>
 <translation id="7374461526650987610">Controladores de protocolos</translation>
 <translation id="7375235221357833624">{0,plural, =1{Actualiza el dispositivo en el transcurso de una hora}other{Actualiza el dispositivo en el transcurso de # horas}}</translation>
+<translation id="7376543451826039186">Navegación más rápida: Por ejemplo, se carga contenido más específico y basado en la página actual de forma proactiva</translation>
 <translation id="7376553024552204454">Resaltar el cursor del mouse cuando se mueve</translation>
 <translation id="737728204345822099">Es posible que se guarde un registro de tu visita a este sitio en tu llave de seguridad.</translation>
 <translation id="7377451353532943397">Seguir bloqueando el acceso a los sensores</translation>
@@ -5923,6 +5931,7 @@
 <translation id="7427798576651127129">Llamada de <ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">No se encontraron dispositivos HID</translation>
 <translation id="7431991332293347422">Controla cómo se usa tu historial de navegación para personalizar la Búsqueda y mucho más</translation>
+<translation id="7432200167665670017">Tu administrador bloqueó "<ph name="EXTENSION_NAME" />" - ID de la app: <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">Inserta la tarjeta inteligente para seguir usando tu <ph name="DEVICE_TYPE" /></translation>
 <translation id="7433957986129316853">Conservar el cambio</translation>
 <translation id="7434509671034404296">Opciones para desarrolladores</translation>
@@ -5952,6 +5961,7 @@
 <translation id="7460045493116006516">Tema actual que tienes instalado</translation>
 <translation id="7461924472993315131">Fijar</translation>
 <translation id="746216226901520237">La próxima vez, tu teléfono desbloqueará tu <ph name="DEVICE_TYPE" />. Puedes desactivar Smart Lock en la configuración.</translation>
+<translation id="7464637891177137294">Guárdala en tu Cuenta de Google, <ph name="ACCOUNT" />.</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# pestaña abierta, presiona para activar o desactivar la barra de pestañas}other{# pestañas abiertas, presiona para activar o desactivar la barra de pestañas}}</translation>
 <translation id="7465635034594602553">Se produjo un error. Espera unos minutos y vuelve a ejecutar <ph name="APP_NAME" />.</translation>
 <translation id="7465778193084373987">URL de revocación del certificado de Netscape</translation>
@@ -6015,6 +6025,7 @@
 <translation id="7525625923260515951">Se escucha el texto seleccionado.</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 más}other{{NUM_DOWNLOADS} más}}</translation>
 <translation id="7526989658317409655">Marcador de posición</translation>
+<translation id="7527758104894292229">Actualízala en tu Cuenta de Google, <ph name="ACCOUNT" />.</translation>
 <translation id="7529411698175791732">Comprueba tu conexión a Internet. Si el problema persiste, intenta salir de tu cuenta y acceder de nuevo.</translation>
 <translation id="7529876053219658589">{0,plural, =1{Cerrar la ventana de la sesión de invitado}other{Cerrar las ventanas de la sesión de invitado}}</translation>
 <translation id="7530016656428373557">Tasa de descarga en vatios</translation>
@@ -6402,6 +6413,7 @@
 <translation id="7898725031477653577">Traducir siempre</translation>
 <translation id="790040513076446191">Manipular la configuración relacionada con la privacidad</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
+<translation id="7901914889562552258">Experiencia de Chrome mejorada mediante las métricas de las páginas</translation>
 <translation id="7903345046358933331">La página no responde. Puedes esperar a que vuelva a responder o cerrarla.</translation>
 <translation id="7903742244674067440">Tienes certificados archivados que identifican estas autoridades de certificación</translation>
 <translation id="7903859912536385558">estable (verificador de confianza)</translation>
@@ -6868,6 +6880,7 @@
 <translation id="8392364544846746346">Preguntar cuando un sitio quiera editar archivos o carpetas de tu dispositivo</translation>
 <translation id="8392451568018454956">Menú de opciones para <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8393511274964623038">Detener el complemento</translation>
+<translation id="839363317075970734">Detalles del dispositivo Bluetooth</translation>
 <translation id="8393700583063109961">Enviar mensaje</translation>
 <translation id="8397825320644530257">Desconectar un teléfono conectado</translation>
 <translation id="8398877366907290961">Continuar de todos modos</translation>
@@ -7118,6 +7131,7 @@
 <translation id="8681614230122836773">Chrome encontró software dañino en tu computadora</translation>
 <translation id="8682730193597992579"><ph name="PRINTER_NAME" /> está conectada y lista para usarse</translation>
 <translation id="8683081248374354009">Restablecer grupo</translation>
+<translation id="8683526617475118045">Beneficios</translation>
 <translation id="8688672835843460752">Disponible</translation>
 <translation id="8690129572193755009">Permitir que los sitios soliciten permiso para procesar protocolos</translation>
 <translation id="8695139659682234808">Agrega los controles parentales cuando finalices la configuración</translation>
@@ -7171,6 +7185,7 @@
 <translation id="8737685506611670901">Abrir vínculos de <ph name="PROTOCOL" /> en lugar de <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">Elige el idioma al que quieras traducir la página</translation>
+<translation id="8737916108453753541">Las páginas URL se comparten con Google para entender el comportamiento de navegación</translation>
 <translation id="8740247629089392745">Puedes pasarle esta Chromebook a <ph name="SUPERVISED_USER_NAME" />. La configuración está casi lista. Luego, podrán comenzar a explorar.</translation>
 <translation id="8741944563400125534">Guía de configuración de Accesibilidad con interruptores</translation>
 <translation id="8742998548129056176">Aquí se muestra información general sobre tu dispositivo y cómo lo usas (como el nivel de batería, la actividad de las apps y el sistema, y errores). Los datos se usarán para mejorar Android, y la información agregada también permitirá que las apps y los socios de Google, como los desarrolladores de Android, mejoren sus apps y productos.</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index f6ba24fb..cb5e6ac 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -446,6 +446,7 @@
 <translation id="1476088332184200792">Kopioi laitteelle</translation>
 <translation id="1476607407192946488">&amp;Kieliasetukset</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> ei salli älykortin poistamista.</translation>
+<translation id="1477654881618305065">Organisaatiosi ei salli sinun jakaa tätä sisältöä. Jos tarvitset apua, ota yhteyttä järjestelmänvalvojaasi.</translation>
 <translation id="1478340334823509079">Lisätiedot: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Asentaminen ei ole käytössä.</translation>
 <translation id="1480571698637441426">Jos haluat saada räätälöityjä vastauksia kysymyksiin, anna Assistantin käyttää näytön kuvakaappausta. Tämä saattaa sisältää tietoja toistettavista kappaleista tai videoista.</translation>
@@ -621,6 +622,7 @@
 <translation id="1643921258693943800">Laita Bluetooth ja Wi-Fi päälle, jotta voit käyttää lähijakamista</translation>
 <translation id="1644574205037202324">Historia</translation>
 <translation id="1645516838734033527">Jotta <ph name="DEVICE_TYPE" /> pysyy turvassa, Smart Lock edellyttää näytön lukitusta puhelimessa.</translation>
+<translation id="1646793251510634025">Tarkista haun ja selauksen optimoinnin asetukset</translation>
 <translation id="1646982517418478057">Salaa tämä varmenne antamalla salasana.</translation>
 <translation id="1648528859488547844">Käytä Wi-Fi- ja mobiiliverkkoja sijainnin määrittämiseen</translation>
 <translation id="164936512206786300">Poista Bluetooth-laitteen pari</translation>
@@ -1475,6 +1477,7 @@
 <translation id="2514326558286966059">Avaa lukitus entistä nopeammin sormenjäljellä</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">Määritä vielä yksi kytkin</translation>
+<translation id="251722524540674480">Vahvista käyttäjätunnuksesi</translation>
 <translation id="2517472476991765520">Etsi</translation>
 <translation id="2518024842978892609">Käyttää käyttöoikeusvarmenteita.</translation>
 <translation id="2519517390894391510">Varmenneprofiilin nimi</translation>
@@ -2179,6 +2182,7 @@
 <translation id="3288047731229977326">Kehittäjätilassa olevat laajennukset voivat vahingoittaa tietokonettasi. Jos et ole kehittäjä, poista kehittäjätilassa olevat laajennukset käytöstä varmuuden vuoksi.</translation>
 <translation id="3289668031376215426">Automaattiset isot kirjaimet</translation>
 <translation id="3289856944988573801">Tarkista päivitykset Ethernetin tai Wi-Fin kautta.</translation>
+<translation id="3291436823898732747">Parempi selaus, esimerkiksi ennen kirjoittamista näytettäviä ehdotuksia omniboxissa</translation>
 <translation id="3293644607209440645">Lähetä tämä sivu</translation>
 <translation id="32939749466444286">Linux-säilö ei käynnistynyt. Yritä uudelleen.</translation>
 <translation id="3294437725009624529">Vierailja</translation>
@@ -4211,6 +4215,7 @@
 <translation id="5505307013568720083">Muste lopussa</translation>
 <translation id="5505794066310932198">Commander päälle/pois</translation>
 <translation id="5507756662695126555">Kiistämättömyys</translation>
+<translation id="5507795078844206688">Avaamiesi sivujen URL-osoitteet, esim. https://www.google.com</translation>
 <translation id="5509693895992845810">T&amp;allenna nimellä...</translation>
 <translation id="5509914365760201064">Myöntäjä: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Käytä Googlen kuvaselityksiä</translation>
@@ -4527,6 +4532,7 @@
 <translation id="5869522115854928033">Tallennetut salasanat</translation>
 <translation id="5870086504539785141">Sulje käytettävyysvalikko</translation>
 <translation id="5870155679953074650">Levyn sivuvirheet</translation>
+<translation id="5875534259258494936">Näytön jakaminen on loppunut</translation>
 <translation id="5876576639916258720">Käynnissä…</translation>
 <translation id="5876851302954717356">Uusi välilehti oikealle</translation>
 <translation id="5877064549588274448">Kanava vaihdettiin. Ota muutokset käyttöön käynnistämällä laite uudelleen.</translation>
@@ -5386,6 +5392,7 @@
 <translation id="6812349420832218321">Tuotetta <ph name="PRODUCT_NAME" /> ei voi käynnistää pääkäyttäjätilassa.</translation>
 <translation id="6812841287760418429">Säilytä muutokset</translation>
 <translation id="6813907279658683733">Koko näyttö</translation>
+<translation id="6814033694018386318">Mitä jaat Googlen kanssa</translation>
 <translation id="6817174620439930047">Kysy, kun sivusto haluaa käyttää MIDI-laitteita järjestelmän omien viestien avulla (suositus)</translation>
 <translation id="6818198425579322765">Käännettävän sivun kieli</translation>
 <translation id="6818802132960437751">Sisäänrakennettu virustorjunta</translation>
@@ -5881,6 +5888,7 @@
 <translation id="7374376573160927383">USB-laitteiden valinnat</translation>
 <translation id="7374461526650987610">Protokollien käsittelijät</translation>
 <translation id="7375235221357833624">{0,plural, =1{Päivitä laite tunnin kuluessa}other{Päivitä laite # tunnin kuluessa}}</translation>
+<translation id="7376543451826039186">Nopeampaa selausta, esimerkiksi tietyn jatkosisällön oma-aloitteinen lataus nykyisen sivun perusteella</translation>
 <translation id="7376553024552204454">Korosta hiiren osoitinta, kun se liikkuu</translation>
 <translation id="737728204345822099">Tieto käynnistäsi tällä sivustolla voi tallentua suojausavaimeesi.</translation>
 <translation id="7377451353532943397">Estä edelleen tunnistimien käyttö</translation>
@@ -5938,6 +5946,7 @@
 <translation id="7427798576651127129">Puhelu laitteesta <ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">HID-laitteita ei löytynyt</translation>
 <translation id="7431991332293347422">Määritä, miten selaushistoria personoi Hakua ja muita</translation>
+<translation id="7432200167665670017">Järjestelmänvalvojasi on estänyt "<ph name="EXTENSION_NAME" />" – sovellustunnus <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">Aseta älykortti, niin <ph name="DEVICE_TYPE" /> on taas käytettävissä</translation>
 <translation id="7433957986129316853">Säilytä</translation>
 <translation id="7434509671034404296">Kehittäjille</translation>
@@ -5967,6 +5976,7 @@
 <translation id="7460045493116006516">Asentamasi nykyinen teema</translation>
 <translation id="7461924472993315131">Kiinnitä</translation>
 <translation id="746216226901520237">Ensi kerralla <ph name="DEVICE_TYPE" /> avataan lukituksesta puhelimellasi. Voit poistaa Smart Lockin käytöstä asetuksissa.</translation>
+<translation id="7464637891177137294">Tallenna se Google-tilillesi, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# avoin välilehti, laita välilehtirivi päälle tai pois päältä painamalla}other{# avointa välilehteä, laita välilehtirivi päälle tai pois päältä painamalla}}</translation>
 <translation id="7465635034594602553">Jotain meni pieleen. Odota muutama minuutti ja käynnistä <ph name="APP_NAME" /> uudelleen.</translation>
 <translation id="7465778193084373987">Netscape-varmenteen kumoamis-URL</translation>
@@ -6030,6 +6040,7 @@
 <translation id="7525625923260515951">Kuuntele valittu teksti</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 muu}other{{NUM_DOWNLOADS} muuta}}</translation>
 <translation id="7526989658317409655">Paikkamerkki</translation>
+<translation id="7527758104894292229">Päivitä se Google-tililläsi, <ph name="ACCOUNT" /></translation>
 <translation id="7529411698175791732">Tarkista internetyhteytesi. Jos ongelma jatkuu, kirjaudu ulos ja sitten takaisin sisään.</translation>
 <translation id="7529876053219658589">{0,plural, =1{Sulje vierasikkuna}other{Sulje vierasikkunat}}</translation>
 <translation id="7530016656428373557">Purkautumisnopeus watteina</translation>
@@ -6416,6 +6427,7 @@
 <translation id="7898725031477653577">Käännä aina</translation>
 <translation id="790040513076446191">Muokata tietosuojaan liittyviä asetuksia</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
+<translation id="7901914889562552258">Parempi Chrome sivutietoja mittaamalla</translation>
 <translation id="7903345046358933331">Tämä sivu ei enää vastaa. Voit odottaa sivun vastausta tai sulkea sen.</translation>
 <translation id="7903742244674067440">Olet tallentanut seuraavat varmenteen myöntäjät tunnistavat varmenteet</translation>
 <translation id="7903859912536385558">vakaa (luotettava testaaja)</translation>
@@ -6882,6 +6894,7 @@
 <translation id="8392364544846746346">Pyydä lupaa, kun sivusto haluaa muokata laitteen tiedostoja tai kansioita</translation>
 <translation id="8392451568018454956">Tilin <ph name="USER_EMAIL_ADDRESS" /> vaihtoehtovalikko</translation>
 <translation id="8393511274964623038">Pysäytä laajennus</translation>
+<translation id="839363317075970734">Bluetooth-laitteen tiedot</translation>
 <translation id="8393700583063109961">Lähetä viesti</translation>
 <translation id="8397825320644530257">Katkaise yhdistetyn puhelimen yhteys</translation>
 <translation id="8398877366907290961">Jatka silti</translation>
@@ -7132,6 +7145,7 @@
 <translation id="8681614230122836773">Chrome löysi tietokoneeltasi haitallisen ohjelmiston</translation>
 <translation id="8682730193597992579"><ph name="PRINTER_NAME" /> on yhdistetty ja valmiina</translation>
 <translation id="8683081248374354009">Nollaa ryhmä</translation>
+<translation id="8683526617475118045">Mitä saat käyttöösi</translation>
 <translation id="8688672835843460752">Saatavilla</translation>
 <translation id="8690129572193755009">Sivustot voivat pyytää lupaa käsitellä protokollia</translation>
 <translation id="8695139659682234808">Lisää lapsilukko käyttöönoton jälkeen</translation>
@@ -7185,6 +7199,7 @@
 <translation id="8737685506611670901">Avata <ph name="PROTOCOL" />-linkit palvelun <ph name="REPLACED_HANDLER_TITLE" /> sijaan.</translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">Valitse kieli, jolle sivu käännetään</translation>
+<translation id="8737916108453753541">URL-osoitteet jaetaan Googlen kanssa ja ne auttavat ymmärtämään selaustoimintaa</translation>
 <translation id="8740247629089392745"><ph name="SUPERVISED_USER_NAME" /> voi nyt saada tämän Chromebookin. Käyttöönotto on melkein valmis, pian on aika tutkia.</translation>
 <translation id="8741944563400125534">Switch Access ‑asennusopas</translation>
 <translation id="8742998548129056176">Nämä ovat yleisiä tietoja laitteestasi ja sen käytöstä (esim. akun varaustasosta, järjestelmän ja sovellusten toiminnasta sekä virheistä). Datan avulla Androidia parannetaan, ja koottua dataa käytetään Google-sovellusten, Android-kehittäjien tai muiden kumppanien sovellusten ja tuotteiden parantamiseen.</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 46210c4..104ec10 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -447,6 +447,7 @@
 <translation id="1476088332184200792">Kopyahin sa Iyong Device</translation>
 <translation id="1476607407192946488">&amp;Mga Setting ng Wika</translation>
 <translation id="1477446329585670721">Inaatasan ka ng <ph name="DOMAIN" /> na panatilihing nakalagay ang iyong smart card.</translation>
+<translation id="1477654881618305065">Hindi ka pinapayagan ng iyong organisasyon na ibahagi ang content na ito. Kung kailangan mo ng tulong, makipag-ugnayan sa iyong administrator.</translation>
 <translation id="1478340334823509079">Mga detalye: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Hindi naka-enable ang pag-install</translation>
 <translation id="1480571698637441426">Para makakuha ng mga iniangkop na sagot kagpag nagtatanong ka, payagan ang iyong Assistant na mag-access ng screenshot ng kung ano ang nasa screen mo. Puwedeng kasama rin dito ang impormasyon tungkol sa mga kanta o video na nagpe-play.</translation>
@@ -622,6 +623,7 @@
 <translation id="1643921258693943800">Para magamit ang Nearby Share, i-on Bluetooth at Wi-Fi</translation>
 <translation id="1644574205037202324">History</translation>
 <translation id="1645516838734033527">Upang panatilihing ligtas ang iyong <ph name="DEVICE_TYPE" />, kinakailangan ng Smart Lock ng lock ng screen sa telepono mo.</translation>
+<translation id="1646793251510634025">Suriin ang mga setting para sa pag-optimize ng paghahanap at pag-browse</translation>
 <translation id="1646982517418478057">Mangyaring maglagay ng password upang i-encrypt ang certificate na ito</translation>
 <translation id="1648528859488547844">Gumamit ng Wi‑Fi o mga mobile network upang matukoy ang lokasyon</translation>
 <translation id="164936512206786300">I-unpair ang Bluetooth device</translation>
@@ -1477,6 +1479,7 @@
 <translation id="2514326558286966059">Mas mabilis na mag-unlock gamit ang iyong fingerprint</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">Magtalaga ng isa pang switch</translation>
+<translation id="251722524540674480">Kumpirmahin ang iyong username</translation>
 <translation id="2517472476991765520">I-scan</translation>
 <translation id="2518024842978892609">Gamitin ang iyong mga client certificate</translation>
 <translation id="2519517390894391510">Pangalan ng Profile ng Certificate</translation>
@@ -2181,6 +2184,7 @@
 <translation id="3288047731229977326">Ang mga extension na tumatakbo sa developer mode ay maaaring makapinsala sa iyong computer. Kung hindi ka isang developer, dapat mong i-disable ang mga extension na tumatakbo sa developer mode upang manatiling ligtas.</translation>
 <translation id="3289668031376215426">Auto-capitalization</translation>
 <translation id="3289856944988573801">Upang tumingin ng mga update, mangyaring gumamit ng Ethernet o Wi-Fi.</translation>
+<translation id="3291436823898732747">Pinahusay na pag-browse: Halimbawa, mga suhestyon sa Omnibox bago ka magsimulang mag-type</translation>
 <translation id="3293644607209440645">Ipadala ang page na ito</translation>
 <translation id="32939749466444286">Hindi nalunsad ang Linux container. Pakisubukang muli.</translation>
 <translation id="3294437725009624529">Bisita</translation>
@@ -4216,6 +4220,7 @@
 <translation id="5505307013568720083">Wala nang ink</translation>
 <translation id="5505794066310932198">I-toggle ang Commander</translation>
 <translation id="5507756662695126555">Hindi makokontra</translation>
+<translation id="5507795078844206688">URL ng mga binibisita mong page, hal. https://www.google.com</translation>
 <translation id="5509693895992845810">I-save &amp;Bilang...</translation>
 <translation id="5509914365760201064">Nagbigay: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Kumuha ng Mga Paglalarawan ng Larawan mula sa Google</translation>
@@ -4532,6 +4537,7 @@
 <translation id="5869522115854928033">Mga naka-save na password</translation>
 <translation id="5870086504539785141">Isara ang menu ng accessibility</translation>
 <translation id="5870155679953074650">Mga hard fault</translation>
+<translation id="5875534259258494936">Nagtapos na ang pagbabahagi ng screen</translation>
 <translation id="5876576639916258720">Tumatakbo...</translation>
 <translation id="5876851302954717356">Bagong Tab sa Kanan</translation>
 <translation id="5877064549588274448">Binago ang channel. I-restart ang iyong device upang ilapat ang mga pagbabago.</translation>
@@ -5391,6 +5397,7 @@
 <translation id="6812349420832218321">Hindi mapatakbo ang <ph name="PRODUCT_NAME" /> bilang root.</translation>
 <translation id="6812841287760418429">Panatilihin ang mga pagbabago</translation>
 <translation id="6813907279658683733">Buong Screen</translation>
+<translation id="6814033694018386318">Ang binabahagi mo sa Google</translation>
 <translation id="6817174620439930047">Magtanong kapag gustong gumamit ng isang site ng mga eksklusibong mensahe ng system upang mag-access ng mga MIDI device (inirerekomenda)</translation>
 <translation id="6818198425579322765">Wika ng Page na Isasalin</translation>
 <translation id="6818802132960437751">Built-in na proteksyon laban sa virus</translation>
@@ -5886,6 +5893,7 @@
 <translation id="7374376573160927383">Pamahalaan ang mga USB device</translation>
 <translation id="7374461526650987610">Mga tagapangasiwa ng protocol</translation>
 <translation id="7375235221357833624">{0,plural, =1{I-update ang device sa loob ng isang oras}one{I-update ang device sa loob ng # oras}other{I-update ang device sa loob ng # na oras}}</translation>
+<translation id="7376543451826039186">Mas mabilis na pag-browse: Halimbawa, aktibong mag-load ng partikular na karagdagang content batay sa kasalukuyang page</translation>
 <translation id="7376553024552204454">I-highlight ang cursor ng mouse kapag gumagalaw ito</translation>
 <translation id="737728204345822099">Posibleng papanatilihin sa iyong security key ang tala ng pagbisita mo sa site na ito.</translation>
 <translation id="7377451353532943397">Patuloy na i-block ang access sa sensor</translation>
@@ -5943,6 +5951,7 @@
 <translation id="7427798576651127129">Tawag mula sa <ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">Walang nakitang HID device</translation>
 <translation id="7431991332293347422">Kontrolin kung paano ginagamit ang iyong history ng pag-browse para i-personalize ang Paghahanap at higit pa</translation>
+<translation id="7432200167665670017">Na-block ng iyong admin ang "<ph name="EXTENSION_NAME" />" - App ID <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">Maglagay ng smart card para mapanatili ang iyong <ph name="DEVICE_TYPE" /></translation>
 <translation id="7433957986129316853">Panatilihin ito</translation>
 <translation id="7434509671034404296">Bumubuo</translation>
@@ -5972,6 +5981,7 @@
 <translation id="7460045493116006516">Kasalukuyang temang na-install mo</translation>
 <translation id="7461924472993315131">I-pin</translation>
 <translation id="746216226901520237">Sa susunod, ia-unlock ng iyong telepono ang <ph name="DEVICE_TYPE" /> mo. Puwede mong i-off ang Smart Lock sa Mga Setting.</translation>
+<translation id="7464637891177137294">I-save ito sa iyong Google Account, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# bukas na tab, pindutin para i-toggle ang tab strip}one{# bukas na tab, pindutin para i-toggle ang tab strip}other{# na bukas na tab, pindutin para i-toggle ang tab strip}}</translation>
 <translation id="7465635034594602553">Nagkaproblema. Maghintay ng ilang minuto at patakbuhin ulit ang <ph name="APP_NAME" />.</translation>
 <translation id="7465778193084373987">URL ng Pagpapawalang-bisa ng Netscape Certificate</translation>
@@ -6035,6 +6045,7 @@
 <translation id="7525625923260515951">Pakinggan ang piniling text</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 pa}one{{NUM_DOWNLOADS} pa}other{{NUM_DOWNLOADS} pa}}</translation>
 <translation id="7526989658317409655">Placeholder</translation>
+<translation id="7527758104894292229">I-update ito sa iyong Google Account na <ph name="ACCOUNT" /></translation>
 <translation id="7529411698175791732">Suriin ang iyong koneksyon sa internet. Kung magpapatuloy ang problema, subukang mag-sign out at muling mag-sign in.</translation>
 <translation id="7529876053219658589">{0,plural, =1{Isara ang Bisita}one{Isara ang Bisita}other{Isara ang Bisita}}</translation>
 <translation id="7530016656428373557">Rate ng Pagdiskarga sa Watts</translation>
@@ -6422,6 +6433,7 @@
 <translation id="7898725031477653577">Palaging i-translate</translation>
 <translation id="790040513076446191">Manipulahin ang mga setting kaugnay ng privacy</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
+<translation id="7901914889562552258">Pinahusay na Chrome gamit ang mga sukatan ng page</translation>
 <translation id="7903345046358933331">Hindi na tumutugon ang page. Maaari mong hintaying tumugon ito o isara ito.</translation>
 <translation id="7903742244674067440">Mayroon kang mga certificate sa file na tutukoy sa mga certificate authority na ito</translation>
 <translation id="7903859912536385558">stable (trusted tester)</translation>
@@ -6888,6 +6900,7 @@
 <translation id="8392364544846746346">Itanong kapag gusto ng site na mag-edit ng mga file o folder sa iyong device</translation>
 <translation id="8392451568018454956">Menu ng mga pagpipilian para sa <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8393511274964623038">Ihinto ang plugin</translation>
+<translation id="839363317075970734">Mga detalye ng Bluetooth device</translation>
 <translation id="8393700583063109961">Ipadala ang mensahe</translation>
 <translation id="8397825320644530257">Idiskonekta ang nakakonektang telepono</translation>
 <translation id="8398877366907290961">Magpatuloy</translation>
@@ -7139,6 +7152,7 @@
 <translation id="8681614230122836773">May nakitang mapaminsalang software ang Chrome sa iyong computer</translation>
 <translation id="8682730193597992579">Nakakonekta na ang <ph name="PRINTER_NAME" /> at puwede nang gamitin</translation>
 <translation id="8683081248374354009">I-reset ang grupo</translation>
+<translation id="8683526617475118045">Ang makukuha mo</translation>
 <translation id="8688672835843460752">Available</translation>
 <translation id="8690129572193755009">Puwedeng hilingin ng mga site na mangasiwa ng mga protocol</translation>
 <translation id="8695139659682234808">Magdagdag ng parental controls pagkatapos mag-set up</translation>
@@ -7192,6 +7206,7 @@
 <translation id="8737685506611670901">Buksan ang mga link ng <ph name="PROTOCOL" /> sa halip na ang <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">Piliin ang wika kung saan ita-translate ang page</translation>
+<translation id="8737916108453753541">Ibinabahagi sa Google ang mga URL para maunawaan ang gawi sa pag-browse</translation>
 <translation id="8740247629089392745">Puwede mong ibigay ang Chromebook na ito kay <ph name="SUPERVISED_USER_NAME" />. Malapit nang matapos ang pag-set up, puwede nang mag-explore pagkatapos nito.</translation>
 <translation id="8741944563400125534">Gabay sa pag-set up ng Switch Access</translation>
 <translation id="8742998548129056176">Ito ay pangkalahatang impormasyon tungkol sa iyong device at kung paano mo ito ginagamit (gaya ng antas ng baterya, aktibidad ng system at app, at mga error). Gagamitin ang data para mapahusay ang Android, at makakatulong din ang ilang pinagsama-samang impormasyon sa mga app at partner ng Google, gaya ng mga developer ng Android, na mapahusay ang kanilang mga app at produkto.</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index 202959c..6601fa2 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -444,6 +444,7 @@
 <translation id="1476088332184200792">Copier vers votre appareil</translation>
 <translation id="1476607407192946488">Paramètres &amp;linguistiques</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> vous demande de laisser votre carte à puce insérée.</translation>
+<translation id="1477654881618305065">Votre organisation ne vous autorise pas à partager ce contenu. Si vous avez besoin d'aide, communiquez avec votre administrateur.</translation>
 <translation id="1478340334823509079">Détails : <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">L'installation n'est pas activée</translation>
 <translation id="1480571698637441426">Pour obtenir des réponses personnalisées à vos questions, autorisez l'Assistant à accéder à une capture de votre écran. Celle-ci peut contenir des renseignements sur les chansons ou les vidéos en cours de lecture.</translation>
@@ -619,6 +620,7 @@
 <translation id="1643921258693943800">Pour utiliser le partage à proximité, activez le Bluetooth et le Wi-Fi</translation>
 <translation id="1644574205037202324">Historique</translation>
 <translation id="1645516838734033527">Pour la sécurité de votre <ph name="DEVICE_TYPE" />, Smart Lock nécessite un verrouillage de l'écran de votre téléphone.</translation>
+<translation id="1646793251510634025">Passer en revue les paramètres relatifs à l'optimisation de la recherche et de la navigation</translation>
 <translation id="1646982517418478057">Veuillez entrer un mot de passe pour crypter ce certificat</translation>
 <translation id="1648528859488547844">Utiliser le Wi‑Fi, le Bluetooth ou les réseaux cellulaires pour déterminer l'emplacement</translation>
 <translation id="164936512206786300">Annuler l'association de l'appareil Bluetooth</translation>
@@ -1462,6 +1464,7 @@
 <translation id="2514326558286966059">Déverrouiller plus rapidement avec votre empreinte digitale</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">Attribuer un autre commutateur</translation>
+<translation id="251722524540674480">Confirmer votre nom d'utilisateur</translation>
 <translation id="2517472476991765520">Rechercher</translation>
 <translation id="2518024842978892609">Utiliser vos certificats clients</translation>
 <translation id="2519517390894391510">Nom de profil du certificat</translation>
@@ -2167,6 +2170,7 @@
 <translation id="3288047731229977326">Les extensions exécutées en mode développeur peuvent nuire à votre ordinateur. Si vous n'êtes pas un développeur, nous vous recommandons de désactiver celles-ci afin d'assurer la sécurité de votre ordinateur.</translation>
 <translation id="3289668031376215426">Majuscules automatiques</translation>
 <translation id="3289856944988573801">Pour rechercher des mises à jour, veuillez utiliser une connexion Ethernet ou Wi-Fi.</translation>
+<translation id="3291436823898732747">Amélioration de la navigation : par exemple, des suggestions dans l'omnibox avant que vous commenciez à entrer du texte</translation>
 <translation id="3293644607209440645">Envoyer cette page</translation>
 <translation id="32939749466444286">Le conteneur Linux n'a pas démarré. Veuillez réessayer.</translation>
 <translation id="3294437725009624529">Invité</translation>
@@ -4201,6 +4205,7 @@
 <translation id="5505307013568720083">À court d'encre</translation>
 <translation id="5505794066310932198">Activer ou désactiver Commander</translation>
 <translation id="5507756662695126555">Non-répudiation</translation>
+<translation id="5507795078844206688">URL des pages que vous visitez, p. ex. https://www.google.com</translation>
 <translation id="5509693895992845810">Enreg&amp;istrer sous...</translation>
 <translation id="5509914365760201064">Émetteur : <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Télécharger les descriptions d'image de Google</translation>
@@ -4517,6 +4522,7 @@
 <translation id="5869522115854928033">Mots de passe enregistrés</translation>
 <translation id="5870086504539785141">Fermer le menu d'accessibilité</translation>
 <translation id="5870155679953074650">Défaillances matérielles</translation>
+<translation id="5875534259258494936">Le partage d'écran est terminé</translation>
 <translation id="5876576639916258720">En cours d'exécution…</translation>
 <translation id="5876851302954717356">Nouvel onglet à droite</translation>
 <translation id="5877064549588274448">La version a été changée. Redémarrez votre appareil pour appliquer les modifications.</translation>
@@ -5376,6 +5382,7 @@
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> ne peut pas être exécuté en tant que « racine ».</translation>
 <translation id="6812841287760418429">Conserver les modifications</translation>
 <translation id="6813907279658683733">Plein écran</translation>
+<translation id="6814033694018386318">Ce que vous partagez avec Google</translation>
 <translation id="6817174620439930047">Demander une autorisation lorsqu'un site veut utiliser des messages exclusifs au système pour accéder aux appareils MIDI (recommandé)</translation>
 <translation id="6818198425579322765">Langue source</translation>
 <translation id="6818802132960437751">Protection antivirus intégrée</translation>
@@ -5871,6 +5878,7 @@
 <translation id="7374376573160927383">Gérer les appareils USB</translation>
 <translation id="7374461526650987610">Gestionnaires de protocoles</translation>
 <translation id="7375235221357833624">{0,plural, =1{Mettre à jour l'appareil d'ici une heure}one{Mettre à jour l'appareil d'ici # heure}other{Mettre à jour l'appareil d'ici # heures}}</translation>
+<translation id="7376543451826039186">Navigation plus rapide : par exemple, chargement proactif d'autres contenus particuliers en fonction de la page actuelle</translation>
 <translation id="7376553024552204454">Mettre le curseur de la souris en surbrillance lorsque vous le déplacez</translation>
 <translation id="737728204345822099">Une trace de votre visite sur ce site pourrait être enregistrée sur votre clé de sécurité.</translation>
 <translation id="7377451353532943397">Continuer de bloquer l'accès aux capteurs</translation>
@@ -5928,6 +5936,7 @@
 <translation id="7427798576651127129">Appel de <ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">Aucun appareil HID trouvé</translation>
 <translation id="7431991332293347422">Gérez la façon dont votre historique de navigation est utilisé pour personnaliser, entre autres, la recherche</translation>
+<translation id="7432200167665670017">Votre administrateur a bloqué « <ph name="EXTENSION_NAME" /> » – Identifiant de l'application <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">Insérez votre carte à puce pour continuer à utiliser votre <ph name="DEVICE_TYPE" /></translation>
 <translation id="7433957986129316853">Conserver</translation>
 <translation id="7434509671034404296">Concepteur</translation>
@@ -5957,6 +5966,7 @@
 <translation id="7460045493116006516">Le thème actuel que vous avez installé</translation>
 <translation id="7461924472993315131">NIP</translation>
 <translation id="746216226901520237">La prochaine fois, votre téléphone déverrouillera votre <ph name="DEVICE_TYPE" />. Vous pouvez désactiver Smart Lock dans le menu Paramètres.</translation>
+<translation id="7464637891177137294">Enregistrez-le dans votre compte Google, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# onglet ouvert; touchez pour basculer la bande d'onglets}one{# onglet ouvert; touchez pour basculer la bande d'onglets}other{# onglets ouverts; touchez pour basculer la bande d'onglets}}</translation>
 <translation id="7465635034594602553">Une erreur s'est produite. Veuillez patienter quelques minutes, puis exécuter <ph name="APP_NAME" /> de nouveau.</translation>
 <translation id="7465778193084373987">URL de révocation de certificat Netscape</translation>
@@ -6020,6 +6030,7 @@
 <translation id="7525625923260515951">Entendre le texte sélectionné</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 de plus}one{{NUM_DOWNLOADS} de plus}other{{NUM_DOWNLOADS} de plus}}</translation>
 <translation id="7526989658317409655">Espace réservé</translation>
+<translation id="7527758104894292229">Mettez-le à jour dans votre compte Google, <ph name="ACCOUNT" /></translation>
 <translation id="7529411698175791732">Vérifiez votre connexion Internet. Si le problème persiste, essayez de vous déconnecter et de vous reconnecter.</translation>
 <translation id="7529876053219658589">{0,plural, =1{Fermer la fenêtre d'invité}one{Fermer la fenêtre d'invité}other{Fermer les fenêtres d'invité}}</translation>
 <translation id="7530016656428373557">Taux de décharge en watts</translation>
@@ -6407,6 +6418,7 @@
 <translation id="7898725031477653577">Toujours traduire</translation>
 <translation id="790040513076446191">Modifier les paramètres de confidentialité</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
+<translation id="7901914889562552258">Amélioration de Chrome au moyen des mesures de pages</translation>
 <translation id="7903345046358933331">Cette page ne répond plus. Vous pouvez attendre qu'elle réponde ou la fermer.</translation>
 <translation id="7903742244674067440">Vous disposez de certificats qui identifient ces autorités de certification</translation>
 <translation id="7903859912536385558">stable (testeur approuvé)</translation>
@@ -6872,6 +6884,7 @@
 <translation id="8392364544846746346">Demander lorsqu'un site souhaite modifier des fichiers ou des dossiers sur votre appareil</translation>
 <translation id="8392451568018454956">Menu d'options pour <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8393511274964623038">Arrêter le plugiciel</translation>
+<translation id="839363317075970734">Détails relatifs à l'appareil Bluetooth</translation>
 <translation id="8393700583063109961">Envoyer un message</translation>
 <translation id="8397825320644530257">Déconnecter le téléphone connecté</translation>
 <translation id="8398877366907290961">Continuer</translation>
@@ -7122,6 +7135,7 @@
 <translation id="8681614230122836773">Chrome a trouvé des logiciels nuisibles sur votre ordinateur</translation>
 <translation id="8682730193597992579">L'imprimante <ph name="PRINTER_NAME" /> est connectée et prête à être utilisée</translation>
 <translation id="8683081248374354009">Réinitialiser le groupe</translation>
+<translation id="8683526617475118045">Ce que vous obtenez</translation>
 <translation id="8688672835843460752">Disponible</translation>
 <translation id="8690129572193755009">Les sites peuvent demander à gérer des protocoles</translation>
 <translation id="8695139659682234808">Ajouter des contrôles parentaux après la configuration</translation>
@@ -7175,6 +7189,7 @@
 <translation id="8737685506611670901">Ouvrir les liens <ph name="PROTOCOL" /> à la place de <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">Choisissez la langue dans laquelle traduire la page</translation>
+<translation id="8737916108453753541">Les URL sont partagées avec Google pour qu'elle comprenne le comportement de navigation</translation>
 <translation id="8740247629089392745">Vous pouvez remettre ce Chromebook à <ph name="SUPERVISED_USER_NAME" />. La configuration est presque terminée. Après cela, c'est l'heure d'explorer.</translation>
 <translation id="8741944563400125534">Guide de configuration de Switch Access</translation>
 <translation id="8742998548129056176">Il s'agit de données générales concernant votre appareil et l'usage que vous en faites (comme le niveau de la pile, l'activité système, l'activité des applications et les erreurs). Ces données seront utilisées pour améliorer Android, et certaines données collectées contribueront aussi à améliorer les applications Google et aideront nos partenaires, comme les développeurs Android, à améliorer leurs applications et leurs produits.</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index d55fb0d..3cf3ff9 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -446,6 +446,7 @@
 <translation id="1476088332184200792">Salin ke Perangkat Anda</translation>
 <translation id="1476607407192946488">&amp;Setelan Bahasa</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> mengharuskan Anda tetap memasang kartu smart.</translation>
+<translation id="1477654881618305065">Organisasi tidak mengizinkan Anda membagikan konten ini. Jika Anda perlu bantuan, hubungi administrator.</translation>
 <translation id="1478340334823509079">Detail: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Penginstalan tidak diaktifkan</translation>
 <translation id="1480571698637441426">Untuk mendapatkan respons yang disesuaikan saat Anda mengajukan pertanyaan, izinkan Asisten mengakses screenshot info di layar Anda. Ini juga dapat termasuk info tentang lagu atau video yang sedang diputar.</translation>
@@ -621,6 +622,7 @@
 <translation id="1643921258693943800">Untuk menggunakan Berbagi Langsung, aktifkan Bluetooth dan Wi-Fi</translation>
 <translation id="1644574205037202324">Histori</translation>
 <translation id="1645516838734033527">Agar <ph name="DEVICE_TYPE" /> tetap aman, Smart Lock memerlukan kunci layar pada ponsel Anda.</translation>
+<translation id="1646793251510634025">Tinjau setelan untuk pengoptimalan penelusuran dan penjelajahan</translation>
 <translation id="1646982517418478057">Masukkan sandi untuk mengenkripsi sertifikat ini</translation>
 <translation id="1648528859488547844">Gunakan Wi-Fi atau jaringan seluler untuk menentukan lokasi</translation>
 <translation id="164936512206786300">Lepaskan sambungan perangkat Bluetooth</translation>
@@ -1476,6 +1478,7 @@
 <translation id="2514326558286966059">Buka kunci lebih cepat dengan sidik jari</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">Tetapkan satu tombol lagi</translation>
+<translation id="251722524540674480">Konfirmasi nama pengguna Anda</translation>
 <translation id="2517472476991765520">Pindai</translation>
 <translation id="2518024842978892609">Gunakan sertifikat klien Anda</translation>
 <translation id="2519517390894391510">Nama Profil Sertifikat</translation>
@@ -2180,6 +2183,7 @@
 <translation id="3288047731229977326">Ekstensi yang berjalan dalam mode pengembang dapat membahayakan komputer Anda. Jika Anda bukan pengembang, Anda sebaiknya menonaktifkan ekstensi yang berjalan dalam mode pengembang ini agar tetap aman.</translation>
 <translation id="3289668031376215426">Kapitalisasi otomatis</translation>
 <translation id="3289856944988573801">Untuk memeriksa pembaruan, gunakan Ethernet atau Wi-Fi.</translation>
+<translation id="3291436823898732747">Peningkatan penjelajahan: Misalnya, saran di Omnibox sebelum Anda mulai mengetik</translation>
 <translation id="3293644607209440645">Kirim halaman ini</translation>
 <translation id="32939749466444286">Container Linux tidak dimulai. Harap coba lagi.</translation>
 <translation id="3294437725009624529">Tamu</translation>
@@ -2780,7 +2784,7 @@
 <translation id="3905761538810670789">Perbaiki aplikasi</translation>
 <translation id="3908393983276948098"><ph name="PLUGIN_NAME" /> sudah usang</translation>
 <translation id="3908501907586732282">Aktifkan ekstensi</translation>
-<translation id="3909701002594999354">Tampilkan Semua Kontrol</translation>
+<translation id="3909701002594999354">Tampilkan Semua &amp;Kontrol</translation>
 <translation id="3909791450649380159">Po&amp;tong</translation>
 <translation id="39103738135459590">Kode aktivasi</translation>
 <translation id="3911824782900911339">Halaman Tab Baru</translation>
@@ -4215,6 +4219,7 @@
 <translation id="5505307013568720083">Kehabisan tinta</translation>
 <translation id="5505794066310932198">Alihkan Commander</translation>
 <translation id="5507756662695126555">Non-repudiasi</translation>
+<translation id="5507795078844206688">URL halaman yang Anda buka, misalnya https://www.google.com</translation>
 <translation id="5509693895992845810">Simp&amp;an Sebagai...</translation>
 <translation id="5509914365760201064">Penerbit: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Dapatkan Deskripsi Gambar dari Google</translation>
@@ -4531,6 +4536,7 @@
 <translation id="5869522115854928033">Sandi tersimpan</translation>
 <translation id="5870086504539785141">Close accessibility menu (Tutup menu aksesibilitas)</translation>
 <translation id="5870155679953074650">Hard fault</translation>
+<translation id="5875534259258494936">Berbagi layar telah berakhir</translation>
 <translation id="5876576639916258720">Sedang berjalan ...</translation>
 <translation id="5876851302954717356">Tab Baru di Sebelah Kanan</translation>
 <translation id="5877064549588274448">Saluran diubah. Mulai ulang perangkat Anda untuk menerapkan perubahan.</translation>
@@ -5172,7 +5178,7 @@
 <translation id="657402800789773160">&amp;Muat Ulang Halaman Ini</translation>
 <translation id="6577284282025554716">Download dibatalkan: <ph name="FILE_NAME" /></translation>
 <translation id="657866106756413002">Ringkasan Kondisi Jaringan</translation>
-<translation id="6579369886355986318">Tampilkan semua kontrol</translation>
+<translation id="6579369886355986318">Tampilkan semua &amp;kontrol</translation>
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Konten desktop dibagikan</translation>
 <translation id="6580203076670148210">Kecepatan pemindaian</translation>
 <translation id="6582080224869403177">Reset <ph name="DEVICE_TYPE" /> untuk mengupgrade keamanan Anda.</translation>
@@ -5390,6 +5396,7 @@
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> tidak dapat dijalankan sebagai akar.</translation>
 <translation id="6812841287760418429">Simpan perubahan</translation>
 <translation id="6813907279658683733">Seluruh Layar</translation>
+<translation id="6814033694018386318">Yang Anda bagikan kepada Google</translation>
 <translation id="6817174620439930047">Tanyakan saat situs ingin menggunakan pesan eksklusif sistem untuk mengakses perangkat MIDI (disarankan)</translation>
 <translation id="6818198425579322765">Bahasa Asal Terjemahan Halaman</translation>
 <translation id="6818802132960437751">Fitur perlindungan bawaan terhadap virus</translation>
@@ -5885,6 +5892,7 @@
 <translation id="7374376573160927383">Kelola perangkat USB</translation>
 <translation id="7374461526650987610">Penangan protokol</translation>
 <translation id="7375235221357833624">{0,plural, =1{Update perangkat dalam 1 jam}other{Update perangkat dalam # jam}}</translation>
+<translation id="7376543451826039186">Penjelajahan yang lebih cepat: Misalnya, secara proaktif memuat konten tertentu lainnya berdasarkan halaman saat ini</translation>
 <translation id="7376553024552204454">Sorot kursor mouse saat kursor berpindah</translation>
 <translation id="737728204345822099">Data kunjungan Anda ke situs ini dapat disimpan di kunci keamanan.</translation>
 <translation id="7377451353532943397">Terus blokir akses sensor</translation>
@@ -5942,6 +5950,7 @@
 <translation id="7427798576651127129">Panggilan dari <ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">Tidak ditemukan perangkat HID</translation>
 <translation id="7431991332293347422">Kontrol cara histori browsing digunakan untuk mempersonalisasi Penelusuran dan lainnya</translation>
+<translation id="7432200167665670017">Admin Anda telah memblokir "<ph name="EXTENSION_NAME" />" - ID Aplikasi <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">Pasang kartu smart agar tetap menggunakan <ph name="DEVICE_TYPE" /></translation>
 <translation id="7433957986129316853">Simpan</translation>
 <translation id="7434509671034404296">Pengembang</translation>
@@ -5971,6 +5980,7 @@
 <translation id="7460045493116006516">Tema saat ini yang telah diinstal</translation>
 <translation id="7461924472993315131">Sematkan</translation>
 <translation id="746216226901520237">Saat digunakan lagi, ponsel Anda akan membuka kunci <ph name="DEVICE_TYPE" /> ini. Anda dapat menonaktifkan Smart Lock di Setelan.</translation>
+<translation id="7464637891177137294">Simpan di Akun Google Anda, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# tab terbuka, tekan untuk beralih tab setrip}other{# tab terbuka, tekan untuk beralih tab setrip}}</translation>
 <translation id="7465635034594602553">Terjadi error. Tunggu beberapa menit lalu jalankan <ph name="APP_NAME" /> lagi.</translation>
 <translation id="7465778193084373987">Netscape Certificate Revocation URL</translation>
@@ -6034,6 +6044,7 @@
 <translation id="7525625923260515951">Dengarkan teks yang dipilih</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 lainnya}other{{NUM_DOWNLOADS} lainnya}}</translation>
 <translation id="7526989658317409655">Placeholder</translation>
+<translation id="7527758104894292229">Perbarui di Akun Google Anda, <ph name="ACCOUNT" /></translation>
 <translation id="7529411698175791732">Periksa koneksi internet Anda. Jika masalah tetap berlanjut, coba logout lalu login lagi.</translation>
 <translation id="7529876053219658589">{0,plural, =1{Tutup Jendela Tamu}other{Tutup Jendela Tamu}}</translation>
 <translation id="7530016656428373557">Laju Penggunaan Daya dalam Watt</translation>
@@ -6421,6 +6432,7 @@
 <translation id="7898725031477653577">Selalu terjemahkan</translation>
 <translation id="790040513076446191">Memanipulasi setelan yang terkait privasi</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
+<translation id="7901914889562552258">Peningkatan Chrome menggunakan metrik halaman</translation>
 <translation id="7903345046358933331">Halaman ini tidak merespons. Anda dapat menunggu hingga halaman merespons atau menutupnya.</translation>
 <translation id="7903742244674067440">Anda memiliki sertifikat pada file yang mengidentifikasi otoritas sertifikat ini</translation>
 <translation id="7903859912536385558">stabil (penguji tepercaya)</translation>
@@ -6887,6 +6899,7 @@
 <translation id="8392364544846746346">Tanyakan saat situs ingin mengedit file atau folder di perangkat Anda</translation>
 <translation id="8392451568018454956">Menu opsi untuk <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8393511274964623038">Hentikan plugin</translation>
+<translation id="839363317075970734">Detail perangkat Bluetooth</translation>
 <translation id="8393700583063109961">Kirim pesan</translation>
 <translation id="8397825320644530257">Putuskan hubungan ponsel yang terhubung</translation>
 <translation id="8398877366907290961">Tetap lanjutkan</translation>
@@ -7137,6 +7150,7 @@
 <translation id="8681614230122836773">Chrome menemukan software berbahaya di komputer Anda</translation>
 <translation id="8682730193597992579"><ph name="PRINTER_NAME" /> terhubung dan siap digunakan</translation>
 <translation id="8683081248374354009">Reset grup</translation>
+<translation id="8683526617475118045">Yang Anda dapatkan</translation>
 <translation id="8688672835843460752">Tersedia</translation>
 <translation id="8690129572193755009">Situs dapat meminta untuk menangani protokol</translation>
 <translation id="8695139659682234808">Tambahkan kontrol orang tua setelah penyiapan selesai</translation>
@@ -7190,6 +7204,7 @@
 <translation id="8737685506611670901">Membuka link <ph name="PROTOCOL" /> sebagai ganti <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">Pilih bahasa target terjemahan halaman</translation>
+<translation id="8737916108453753541">URL dibagikan kepada Google untuk memahami perilaku penjelajahan</translation>
 <translation id="8740247629089392745">Anda dapat menyerahkan Chromebook ini ke <ph name="SUPERVISED_USER_NAME" />. Sebentar lagi penyiapan selesai, dan konten bisa segera dijelajahi.</translation>
 <translation id="8741944563400125534">Panduan penyiapan Tombol Akses</translation>
 <translation id="8742998548129056176">Ini adalah informasi umum tentang perangkat Anda dan cara Anda menggunakannya (seperti tingkat daya baterai, aktivitas sistem dan aplikasi, serta error). Data ini akan digunakan untuk menyempurnakan Android. Beberapa informasi gabungan juga akan membantu aplikasi dan partner Google, seperti developer Android, membuat aplikasi dan produk mereka menjadi lebih baik.</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index cfa2fc5..64b4e974 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -448,6 +448,7 @@
 <translation id="1476088332184200792">העתקה למכשיר שלך</translation>
 <translation id="1476607407192946488">הגד&amp;רות שפה</translation>
 <translation id="1477446329585670721">כדי לעבוד עם הדומיין <ph name="DOMAIN" />, צריך להשאיר את הכרטיס החכם בפנים.</translation>
+<translation id="1477654881618305065">בהתאם למדיניות הארגון שלך, אין לך אפשרות לשתף את התוכן הזה. לקבלת עזרה, צריך ליצור קשר עם מנהל המערכת.</translation>
 <translation id="1478340334823509079">פרטים: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">ההתקנה אינה מופעלת</translation>
 <translation id="1480571698637441426">‏כדי לקבל תשובות בהתאמה אישית לשאלות, צריך לתת ל-Assistant גישה לצילום של תוכן המסך. יכול להיות שהמידע יכלול גם פרטים על השירים או על הסרטונים שפועלים.</translation>
@@ -620,6 +621,7 @@
 <translation id="1643921258693943800">‏כדי להשתמש באפשרות 'שיתוף בקרבת מקום', יש להפעיל את Bluetooth ו-Wi-Fi</translation>
 <translation id="1644574205037202324">היסטוריה</translation>
 <translation id="1645516838734033527">‏כדי לשמור על הבטיחות של <ph name="DEVICE_TYPE" />, Smart Lock מחייב נעילת מסך בטלפון שלך.</translation>
+<translation id="1646793251510634025">בדיקת הגדרות האופטימיזציה של החיפוש והגלישה</translation>
 <translation id="1646982517418478057">יש להזין סיסמה כדי להצפין את האישור הזה</translation>
 <translation id="1648528859488547844">‏קביעת מיקום באמצעות Wi-Fi או רשתות סלולריות</translation>
 <translation id="164936512206786300">‏ביטול הצמדה של התקן Bluetooth</translation>
@@ -1475,6 +1477,7 @@
 <translation id="2514326558286966059">ניתן לבטל נעילה מהר יותר באמצעות טביעת האצבע</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">הקצאת מתג נוסף</translation>
+<translation id="251722524540674480">יש לאשר את שם המשתמש שלך</translation>
 <translation id="2517472476991765520">סריקה</translation>
 <translation id="2518024842978892609">שימוש באישורי הלקוח</translation>
 <translation id="2519517390894391510">שם פרופיל האישור</translation>
@@ -2180,6 +2183,7 @@
 <translation id="3288047731229977326">תוספים הרצים במצב מפתח יכולים להזיק למחשב שלך. אם אינך מפתח, עליך להשבית את התוספים הרצים במצב מפתח כדי לשמור על ביטחונך.</translation>
 <translation id="3289668031376215426">אותיות רישיות באופן אוטומטי</translation>
 <translation id="3289856944988573801">‏כדי לבדוק אם יש עדכונים, צריך להשתמש באתרנט או ב-Wi-Fi.</translation>
+<translation id="3291436823898732747">גלישה משופרת: למשל, הצעות יופיעו בסרגל הכתובות לפני שמתחילים להקליד.</translation>
 <translation id="3293644607209440645">שליחת הדף הזה</translation>
 <translation id="32939749466444286">‏הקונטיינר של Linux לא הופעל. צריך לנסות שוב.</translation>
 <translation id="3294437725009624529">אורח</translation>
@@ -4215,6 +4219,7 @@
 <translation id="5505307013568720083">הדיו נגמר</translation>
 <translation id="5505794066310932198">פקד החלפת מצבים</translation>
 <translation id="5507756662695126555">אי התכחשות</translation>
+<translation id="5507795078844206688">‏כתובת ה-URL של הדפים שאליהם נכנסים, לדוגמה: https://www.google.com</translation>
 <translation id="5509693895992845810">שמירה &amp;בתור...</translation>
 <translation id="5509914365760201064">מנפיק: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">‏קבלת תיאורי תמונות מ-Google</translation>
@@ -4531,6 +4536,7 @@
 <translation id="5869522115854928033">סיסמאות שמורות</translation>
 <translation id="5870086504539785141">סגירת תפריט הנגישות</translation>
 <translation id="5870155679953074650">שגיאות חמורות</translation>
+<translation id="5875534259258494936">שיתוף המסך הסתיים</translation>
 <translation id="5876576639916258720">התכונה פעילה…</translation>
 <translation id="5876851302954717356">כרטיסייה חדשה מצד שמאל</translation>
 <translation id="5877064549588274448">הערוץ שונה. יש להפעיל מחדש את המכשיר להחלת השינויים.</translation>
@@ -5390,6 +5396,7 @@
 <translation id="6812349420832218321">לא ניתן להפעיל את <ph name="PRODUCT_NAME" /> בתור בסיס.</translation>
 <translation id="6812841287760418429">השארת שינויים</translation>
 <translation id="6813907279658683733">כל המסך</translation>
+<translation id="6814033694018386318">‏מה משתפים עם Google</translation>
 <translation id="6817174620439930047">‏יש לשאול כשאתר רוצה להשתמש בהודעות בלעדיות של המערכת כדי לגשת להתקני MIDI (מומלץ)</translation>
 <translation id="6818198425579322765">שפת הדף שיש לתרגם</translation>
 <translation id="6818802132960437751">הגנה מובנית מפני וירוסים</translation>
@@ -5885,6 +5892,7 @@
 <translation id="7374376573160927383">‏ניהול התקני USB</translation>
 <translation id="7374461526650987610">תוכניות לטיפול בפרוטוקולים</translation>
 <translation id="7375235221357833624">{0,plural, =1{יש לעדכן את המכשיר בתוך שעה אחת}two{יש לעדכן את המכשיר בתוך # שעות}many{יש לעדכן את המכשיר בתוך # שעות}other{יש לעדכן את המכשיר בתוך # שעות}}</translation>
+<translation id="7376543451826039186">גלישה מהירה יותר: למשל, תוכן ספציפי נוסף ייטען באופן פרואקטיבי על סמך הדף הנוכחי.</translation>
 <translation id="7376553024552204454">הדגשת סמן העכבר כשהסמן בתנועה</translation>
 <translation id="737728204345822099">ייתכן שתיעוד של ביקורך באתר יישמר במפתח האבטחה שלך.</translation>
 <translation id="7377451353532943397">המשך חסימת הגישה לחיישנים</translation>
@@ -5942,6 +5950,7 @@
 <translation id="7427798576651127129">שיחה מ-<ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">‏לא נמצאו התקני HID</translation>
 <translation id="7431991332293347422">קביעת אופן השימוש בהיסטוריית הגלישה להתאמה אישית של החיפוש ועוד</translation>
+<translation id="7432200167665670017">מנהל המערכת חסם את "<ph name="EXTENSION_NAME" />" – מזהה האפליקציה <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">יש להכניס את הכרטיס החכם כדי להמשיך להשתמש ב-<ph name="DEVICE_TYPE" /> שלך</translation>
 <translation id="7433957986129316853">שמירת השינוי</translation>
 <translation id="7434509671034404296">למפתחים</translation>
@@ -5971,6 +5980,7 @@
 <translation id="7460045493116006516">העיצוב הנוכחי</translation>
 <translation id="7461924472993315131">הצמדה</translation>
 <translation id="746216226901520237">‏בפעם הבאה, הטלפון יבטל את הנעילה של <ph name="DEVICE_TYPE" />. אפשר להשבית את Smart Lock דרך ההגדרות.</translation>
+<translation id="7464637891177137294">‏היא תישמר בחשבון Google שלך, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{כרטיסייה פתוחה אחת. עליך ללחוץ כדי להחליף את המצב של שורת הכרטיסיות}two{# כרטיסיות פתוחות. עליך ללחוץ כדי להחליף את המצב של שורת הכרטיסיות}many{# כרטיסיות פתוחות. עליך ללחוץ כדי להחליף את המצב של שורת הכרטיסיות}other{# כרטיסיות פתוחות. עליך ללחוץ כדי להחליף את המצב של שורת הכרטיסיות}}</translation>
 <translation id="7465635034594602553">משהו השתבש. יש להמתין כמה דקות ולהפעיל את <ph name="APP_NAME" /> מחדש.</translation>
 <translation id="7465778193084373987">‏כתובת אתר לביטול אישור של Netscape</translation>
@@ -6034,6 +6044,7 @@
 <translation id="7525625923260515951">הקראת הטקסט שבחרת</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{עוד פריט אחד}two{עוד {NUM_DOWNLOADS} פריטים}many{עוד {NUM_DOWNLOADS} פריטים}other{עוד {NUM_DOWNLOADS} פריטים}}</translation>
 <translation id="7526989658317409655">Placeholder</translation>
+<translation id="7527758104894292229">‏היא תעודכן בחשבון Google שלך, <ph name="ACCOUNT" /></translation>
 <translation id="7529411698175791732">יש לבדוק את חיבור האינטרנט. אם הבעיה לא נפתרת, יש לנסות לצאת מהחשבון ולהיכנס אליו שוב.</translation>
 <translation id="7529876053219658589">{0,plural, =1{סגירת חלון האורח}two{סגירת חלונות האורח}many{סגירת חלונות האורח}other{סגירת חלונות האורח}}</translation>
 <translation id="7530016656428373557">שיעור פריקה בוואט</translation>
@@ -6420,6 +6431,7 @@
 <translation id="7898725031477653577">ברצוני לקבל תרגום תמיד</translation>
 <translation id="790040513076446191">לשנות הגדרות הקשורות לפרטיות</translation>
 <translation id="7901405293566323524">מרכז טלפוני</translation>
+<translation id="7901914889562552258">‏שיפרנו את Chrome באמצעות מדדי דפים.</translation>
 <translation id="7903345046358933331">הדף אינו מגיב. תוכל להמתין עד שיגיב או לסגור אותו.</translation>
 <translation id="7903742244674067440">יש לך אישורים בקובץ המזהים רשויות אישורים אלה</translation>
 <translation id="7903859912536385558">יציב (בודק נאמן)</translation>
@@ -6888,6 +6900,7 @@
 <translation id="8392364544846746346">תוצג שאלה כשאתר ירצה לערוך קבצים או תיקיות במכשיר שלך</translation>
 <translation id="8392451568018454956">תפריט אפשרויות עבור <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8393511274964623038">הפסקת הפלאגין</translation>
+<translation id="839363317075970734">‏פרטים על מכשיר Bluetooth</translation>
 <translation id="8393700583063109961">שליחת הודעה</translation>
 <translation id="8397825320644530257">ניתוק הטלפון המחובר</translation>
 <translation id="8398877366907290961">להמשיך בכל זאת</translation>
@@ -7138,6 +7151,7 @@
 <translation id="8681614230122836773">‏Chrome גילה תוכנות מזיקות במחשב שלך</translation>
 <translation id="8682730193597992579">המדפסת <ph name="PRINTER_NAME" /> מחוברת ומוכנה</translation>
 <translation id="8683081248374354009">איפוס הקבוצה</translation>
+<translation id="8683526617475118045">מה מקבלים</translation>
 <translation id="8688672835843460752">זמינות</translation>
 <translation id="8690129572193755009">אתרים יכולים לבקש הרשאה לטפל בפרוטוקולים</translation>
 <translation id="8695139659682234808">הוספה של בקרת הורים לאחר ההגדרה</translation>
@@ -7191,6 +7205,7 @@
 <translation id="8737685506611670901">פתיחת קישורי <ph name="PROTOCOL" /> במקום <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">בחירת השפה לתרגום הדף</translation>
+<translation id="8737916108453753541">‏כתובות ה-URL משותפות עם Google כדי להבין את התנהגות הגלישה.</translation>
 <translation id="8740247629089392745">‏אפשר להעביר את ה-Chromebook הזה אל <ph name="SUPERVISED_USER_NAME" />. ההתקנה כמעט הסתיימה. מיד ניתן יהיה לחקור ולהתנסות.</translation>
 <translation id="8741944563400125534">מדריך להגדרת גישה באמצעות מתג</translation>
 <translation id="8742998548129056176">‏זהו מידע כללי בנוגע למכשיר ולאופן השימוש בו (כמו רמת הסוללה, פעילות המערכת, פעילות באפליקציות ושגיאות). הנתונים ישמשו כדי לשפר את Android. חלק מהמידע הנצבר יעזור גם לשפר אפליקציות של Google וכן יעזור לשותפים של Google (למשל למפתחים של Android) לשפר את האפליקציות והמוצרים שלהם.</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index 5865831..9b702f3 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -446,6 +446,7 @@
 <translation id="1476088332184200792">ចម្លង​ទៅ​ឧបករណ៍​របស់អ្នក</translation>
 <translation id="1476607407192946488">&amp;ការកំណត់ភាសា</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> តម្រូវឱ្យ​អ្នក​បន្តដោត​កាតឆ្លាតវៃ​របស់អ្នក។</translation>
+<translation id="1477654881618305065">ស្ថាប័នរបស់អ្នក​មិនអនុញ្ញាតឱ្យអ្នកចែករំលែក​ខ្លឹមសារនេះ​ទេ។ ប្រសិនបើអ្នកត្រូវការជំនួយ សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។</translation>
 <translation id="1478340334823509079">ព័ត៌មានលំអិត៖ <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">មិន​បាន​បើក​ការដំឡើង​ទេ</translation>
 <translation id="1480571698637441426">ដើម្បីទទួលបាន​ចម្លើយដែល​ស្របនឹងអ្នក នៅពេលអ្នក​សួរសំណួរ សូមអនុញ្ញាតឱ្យ​ជំនួយការរបស់អ្នក​ចូលប្រើរូបថតអេក្រង់​នៃអ្វីដែលមាន​នៅលើអេក្រង់​របស់អ្នក។ ការចូលប្រើនេះ​អាចរួមបញ្ចូល​ព័ត៌មានអំពី​បទចម្រៀង ឬវីដេអូដែលកំពុងចាក់​ផងដែរ។</translation>
@@ -621,6 +622,7 @@
 <translation id="1643921258693943800">ដើម្បីប្រើការ​ចែករំលែកនៅ​ជិត សូមបើកប៊្លូធូស និង Wi-Fi</translation>
 <translation id="1644574205037202324">ប្រវត្តិ</translation>
 <translation id="1645516838734033527">ដើម្បីរក្សាសុវត្ថិភាព <ph name="DEVICE_TYPE" /> របស់អ្នក Smart Lock តម្រូវឲ្យ​ប្រើ​ការចាក់សោអេក្រង់នៅលើ​ទូរសព្ទរបស់អ្នក។</translation>
+<translation id="1646793251510634025">ពិនិត្យមើលការកំណត់ ដើម្បីបង្កើនប្រសិទ្ធភាពនៃការរុករក និងការស្វែងរក</translation>
 <translation id="1646982517418478057">សូមបញ្ចូលពាក្យសម្ងាត់ដើម្បីអ៊ិនគ្រីបវិញ្ញាបនបត្រនេះ</translation>
 <translation id="1648528859488547844">ប្រើ Wi‑Fi ឬ​បណ្តាញ​ទូរសព្ទចល័ត​ដើម្បីកំណត់​ទីតាំង</translation>
 <translation id="164936512206786300">ឈប់ផ្គូផ្គង​ឧបករណ៍​ប៊្លូធូស</translation>
@@ -1476,6 +1478,7 @@
 <translation id="2514326558286966059">ដោះសោរហ័សជាងមុនដោយប្រើស្នាម​ម្រាមដៃរបស់អ្នក</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">កំណត់ប៊ូតុងបិទបើកមួយទៀត</translation>
+<translation id="251722524540674480">បញ្ជាក់ឈ្មោះអ្នកប្រើប្រាស់របស់អ្នក</translation>
 <translation id="2517472476991765520">ស្កេន</translation>
 <translation id="2518024842978892609">ប្រើវិញ្ញាបនបត្រម៉ាស៊ីនកូនរបស់អ្នក</translation>
 <translation id="2519517390894391510">ឈ្មោះ​កម្រងព័ត៌មាន​វិញ្ញាបនបត្រ</translation>
@@ -2180,6 +2183,7 @@
 <translation id="3288047731229977326">កម្មវិធីបន្ថែមដែលដំណើរការនៅក្នុងរបៀបអ្នកអភិវឌ្ឈន៍អាចបង្កគ្រោះថ្នាក់ដល់កុំព្យូទ័ររបស់អ្នក។ ប្រសិនបើអ្នកមិនមែនជាអ្នកអភិវឌ្ឍន៍ អ្នកគួរតែបិទដំណើរការកម្មវិធីបន្ថែមទាំងនេះដែលដំណើរការនៅក្នុងរបៀបអ្នកអភិវឌ្ឍន៍ដើម្បីឲ្យមានសុវត្ថិភាព។</translation>
 <translation id="3289668031376215426">ការសរសេរជា​អក្សរធំស្វ័យប្រវត្តិ</translation>
 <translation id="3289856944988573801">ដើម្បីពិនិត្យរកការធ្វើបច្ចុប្បន្នភាព សូមប្រើខ្សែអ៊ីនធឺណិត ឬ Wi-Fi។</translation>
+<translation id="3291436823898732747">ការរុករកកាន់តែប្រសើរ៖ ឧទាហរណ៍ ការណែនាំបង្ហាញនៅក្នុងពហុប្រអប់ មុនពេលអ្នកចាប់ផ្ដើមវាយបញ្ចូល</translation>
 <translation id="3293644607209440645">ផ្ញើ​ទំព័រ​នេះ</translation>
 <translation id="32939749466444286">ទម្រង់ផ្ទុក Linux មិនបាន​ចាប់ផ្ដើម​ទេ។ សូម​ព្យាយាម​ម្ដងទៀត។</translation>
 <translation id="3294437725009624529">ភ្ញៀវ</translation>
@@ -4215,6 +4219,7 @@
 <translation id="5505307013568720083">អស់ទឹកថ្នាំ</translation>
 <translation id="5505794066310932198">បិទ/បើក​មុខងារបញ្ជា</translation>
 <translation id="5507756662695126555">ការមិនបដិសេធ</translation>
+<translation id="5507795078844206688">URL នៃទំព័រដែលអ្នកចូលមើល ឧ. https://www.google.com</translation>
 <translation id="5509693895992845810">រក្សាទុកជា...</translation>
 <translation id="5509914365760201064">អ្នកចេញផ្សាយ៖ <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">ទាញយក​ការពណ៌នា​​រូបភាពពី Google</translation>
@@ -4532,6 +4537,7 @@
 <translation id="5869522115854928033">ពាក្យសម្ងាត់ដែលបានរក្សាទុក</translation>
 <translation id="5870086504539785141">បិទម៉ឺនុយលទ្ធភាពប្រើប្រាស់</translation>
 <translation id="5870155679953074650">បញ្ហា​អង្គចងចាំ</translation>
+<translation id="5875534259258494936">ការ​បង្ហាញ​អេក្រង់បានបញ្ចប់</translation>
 <translation id="5876576639916258720">កំពុង​ដំណើរការ...</translation>
 <translation id="5876851302954717356">ផ្ទាំងថ្មី​ទៅខាង​ស្ដាំ</translation>
 <translation id="5877064549588274448">បានប្តូរបណ្តាញ។ ចាប់ផ្តើមឧបករណ៍របស់អ្នកឡើងវិញដើម្បីអនុវត្តការប្តូរ។</translation>
@@ -5391,6 +5397,7 @@
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> មិនអាចដំណើរការជាគោលទេ។</translation>
 <translation id="6812841287760418429">រក្សាការប្តូរ</translation>
 <translation id="6813907279658683733">អេក្រង់ទាំងមូល</translation>
+<translation id="6814033694018386318">អ្វីដែលអ្នកចែករំលែកជាមួយ Google</translation>
 <translation id="6817174620439930047">សួរ​នៅពេលដែល​ទំព័រ​ចង់ប្រើ​សារ​ផ្តាច់មុខ​សម្រាប់ប្រព័ន្ធ ដើម្បី​ចូលប្រើ​ឧបករណ៍ MIDI (បាន​ណែនាំ)</translation>
 <translation id="6818198425579322765">ភាសា​ទំព័រ​ដែលត្រូវ​បកប្រែ</translation>
 <translation id="6818802132960437751">ការការពារមេរោគដែលភ្ជាប់មកជាមួយ</translation>
@@ -5886,6 +5893,7 @@
 <translation id="7374376573160927383">គ្រប់គ្រងឧបករណ៍ USB</translation>
 <translation id="7374461526650987610">ឧបករណ៍ដោះស្រាយប្រូតូកូល</translation>
 <translation id="7375235221357833624">{0,plural, =1{ដំឡើងកំណែ​ឧបករណ៍​ក្នុងរយៈពេល​មួយ​ម៉ោង​ទៀត}other{ដំឡើងកំណែ​ឧបករណ៍​ក្នុងរយៈពេល # ម៉ោង​ទៀត}}</translation>
+<translation id="7376543451826039186">ការរុករកកាន់តែរហ័ស៖ ឧទាហរណ៍ ផ្ទុកខ្លឹមសារបន្ថែមជាក់លាក់យ៉ាងសកម្មជាមុន ដោយផ្អែកលើទំព័របច្ចុប្បន្ន</translation>
 <translation id="7376553024552204454">ហាយឡាយ៍ទស្សន៍ទ្រនិចកណ្តុរនៅពេលវារំកិល</translation>
 <translation id="737728204345822099">កំណត់ត្រា​ដែលអ្នក​ចូលមើលគេហទំព័រ​នេះអាច​ត្រូវបាន​រក្សាទុក​នៅក្នុង​សោសុវត្ថិភាព​របស់អ្នក។</translation>
 <translation id="7377451353532943397">បន្ត​ទប់ស្កាត់​ការចូលប្រើឧបករណ៍ចាប់​សញ្ញា</translation>
@@ -5943,6 +5951,7 @@
 <translation id="7427798576651127129">ហៅទូរសព្ទពី <ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">រកមិនឃើញ​ឧបករណ៍ HID ទេ</translation>
 <translation id="7431991332293347422">គ្រប់គ្រង​របៀបដែល​ប្រវត្តិរុករក​របស់អ្នក​ត្រូវបាន​ប្រើប្រាស់ ដើម្បីកំណត់ឱ្យ​ការស្វែងរក​ និងអ្វី​ៗ​ជាច្រើន​ទៀតស្របនឹង​អ្នក</translation>
+<translation id="7432200167665670017">អ្នកគ្រប់គ្រង​របស់អ្នក​បានទប់ស្កាត់ "<ph name="EXTENSION_NAME" />" - លេខសម្គាល់កម្មវិធី <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">ដោត​កាត​ឆ្លាតវៃ ដើម្បី​បន្តប្រើ <ph name="DEVICE_TYPE" /> របស់អ្នក</translation>
 <translation id="7433957986129316853">រក្សាទុកវា</translation>
 <translation id="7434509671034404296">អ្នកអភិវឌ្ឍន៍</translation>
@@ -5972,6 +5981,7 @@
 <translation id="7460045493116006516">រចនាប័ទ្ម​បច្ចុប្បន្នដែលអ្នក​បានដំឡើង</translation>
 <translation id="7461924472993315131">លេខសម្គាល់</translation>
 <translation id="746216226901520237">លើកក្រោយ ទូរសព្ទរបស់អ្នក​នឹងដោះសោ <ph name="DEVICE_TYPE" /> របស់អ្នក។ អ្នក​អាច​បិទ Smart Lock នៅក្នុង​ការកំណត់។</translation>
+<translation id="7464637891177137294">រក្សាទុកពាក្យសម្ងាត់នៅក្នុងគណនី Google របស់អ្នក, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{ផ្ទាំង​បើក # សូម​ចុច ដើម្បី​បិទ/បើក​របារ​ផ្ទាំង}other{ផ្ទាំង​បើក # សូម​ចុច ដើម្បី​បិទ/បើក​របារ​ផ្ទាំង}}</translation>
 <translation id="7465635034594602553">មានអ្វីមួយខុសប្រក្រតី។ សូមរង់ចាំ​មួយភ្លែត រួច​ដំណើរការ <ph name="APP_NAME" /> ម្ដងទៀត។</translation>
 <translation id="7465778193084373987">URL បញ្ឈប់សុពលភាពវិញ្ញាបនប័ត្រ Netscape</translation>
@@ -6035,6 +6045,7 @@
 <translation id="7525625923260515951">ស្តាប់អត្ថបទដែលបានជ្រើសរើស</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 ទៀត}other{{NUM_DOWNLOADS} ទៀត}}</translation>
 <translation id="7526989658317409655">ធាតុជំនួស</translation>
+<translation id="7527758104894292229">ធ្វើបច្ចុប្បន្នភាពពាក្យសម្ងាត់នៅក្នុងគណនី Google របស់អ្នក, <ph name="ACCOUNT" /></translation>
 <translation id="7529411698175791732">សូមពិនិត្យមើល​ការតភ្ជាប់​អ៊ីនធឺណិត​របស់អ្នក។ ប្រសិនបើ​បញ្ហានេះ​នៅតែ​បន្ត​កើតឡើង សូមសាកល្បង​ចាកចេញ​ពី​គណនី រួច​ចូលវិញ​ម្តងទៀត។</translation>
 <translation id="7529876053219658589">{0,plural, =1{បិទ​ផ្ទាំងភ្ញៀវ}other{បិទ​ផ្ទាំងភ្ញៀវ}}</translation>
 <translation id="7530016656428373557">កម្រិតទាញយកថាមពលជាវ៉ាត់</translation>
@@ -6422,6 +6433,7 @@
 <translation id="7898725031477653577">បកប្រែជានិច្ច</translation>
 <translation id="790040513076446191">គ្រប់គ្រងការកំណត់ទាក់ទងនឹងឯកជនភាព</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
+<translation id="7901914889562552258">Chrome ដំណើរការកាន់តែប្រសើរដោយប្រើមេទ្រិកទំព័រ</translation>
 <translation id="7903345046358933331">ទំព័រមិនមានការឆ្លើយតប។ អ្នកអាចរង់ចាំរហូតដល់ទំព័រនេះធ្វើការឆ្លើយតប ឬបិទទំព័រនោះចោល។</translation>
 <translation id="7903742244674067440">អ្នកមានវិញ្ញាបនបត្រនៅលើឯកសារដែលកំណត់អត្តសញ្ញាណអាជ្ញាធរវិញ្ញាបនបត្រទាំងនេះ</translation>
 <translation id="7903859912536385558">មានស្ថិរភាព (អ្នក​សាកល្បង​ដែល​ទុក​ចិត្ត)</translation>
@@ -6887,6 +6899,7 @@
 <translation id="8392364544846746346">សួរ​នៅពេល​គេហទំព័រ​ចង់កែឯកសារ ឬថត​នៅលើឧបករណ៍​របស់អ្នក</translation>
 <translation id="8392451568018454956">ម៉ឺនុយជម្រើសសម្រាប់ <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8393511274964623038">បញ្ឈប់កម្មវិធីជំនួយ</translation>
+<translation id="839363317075970734">ព័ត៌មានលម្អិតអំពីឧបករណ៍​ប៊្លូធូស</translation>
 <translation id="8393700583063109961">ផ្ញើ​សារ</translation>
 <translation id="8397825320644530257">ផ្ដាច់ទូរសព្ទដែលបានភ្ជាប់</translation>
 <translation id="8398877366907290961">បន្តទោះបីជាយ៉ាងណាក៏ដោយ</translation>
@@ -7137,6 +7150,7 @@
 <translation id="8681614230122836773">Chrome បានរកឃើញ​កម្មវិធី​បង្ក​គ្រោះថ្នាក់​នៅលើ​កុំព្យូទ័រ​របស់អ្នក</translation>
 <translation id="8682730193597992579"><ph name="PRINTER_NAME" /> ត្រូវបាន​ភ្ជាប់ និង​អាចប្រើ​បានហើយ</translation>
 <translation id="8683081248374354009">កំណត់​ក្រុមឡើងវិញ</translation>
+<translation id="8683526617475118045">អ្វីដែលអ្នកទទួលបាន</translation>
 <translation id="8688672835843460752">នៅសល់</translation>
 <translation id="8690129572193755009">គេហទំព័រ​អាចស្នើសុំ​ចាត់ចែង​ប្រូតូកូល</translation>
 <translation id="8695139659682234808">បញ្ចូលការគ្រប់គ្រងដោយមាតាបិតា បន្ទាប់ពីរៀបចំ</translation>
@@ -7190,6 +7204,7 @@
 <translation id="8737685506611670901">បើកតំណ <ph name="PROTOCOL" /> ជំនួសឲ្យ <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">ជ្រើសរើស​ភាសា​សម្រាប់​បកប្រែទំព័រ</translation>
+<translation id="8737916108453753541">URL ត្រូវបានចែករំលែកជាមួយ Google ដើម្បីយល់អំពីសកម្មភាពនៃការរុករក</translation>
 <translation id="8740247629089392745">អ្នកអាចឱ្យ Chromebook នេះទៅ <ph name="SUPERVISED_USER_NAME" />។ ការរៀបចំជិតរួចរាល់ហើយ បន្ទាប់មកជាពេលដែលត្រូវរុករក។</translation>
 <translation id="8741944563400125534">ការណែនាំ​អំពី​ការរៀបចំ​មុខងារប្រើឧបករណ៍ចុចសម្រាប់ជនពិការ</translation>
 <translation id="8742998548129056176">នេះគឺជា​ព័ត៌មាន​ទូទៅអំពី​ឧបករណ៍​របស់អ្នក និង​របៀបដែល​អ្នកប្រើឧបករណ៍​នេះ (ដូចជា​កម្រិតថ្ម សកម្មភាព​កម្មវិធី និងប្រព័ន្ធ ព្រមទាំងបញ្ហានានា)។ ទិន្នន័យនេះ​នឹងត្រូវ​បានប្រើប្រាស់ ដើម្បី​កែលម្អ Android ហើយព័ត៌មាន​ដែលបាន​ប្រមូល​មួយចំនួន​ក៏នឹងជួយ​ឱ្យកម្មវិធី និងដៃគូ Google ដូចជា​អ្នកអភិវឌ្ឍន៍ Android ធ្វើឱ្យ​កម្មវិធី និង​ផលិតផល​របស់​ពួកគេ​ប្រសើរ​ជាងមុន​ផងដែរ។</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index bb51b9d..4df9f1cb 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -446,6 +446,7 @@
 <translation id="1476088332184200792">기기로 복사</translation>
 <translation id="1476607407192946488">언어 설정(&amp;L)</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" />에서 스마트 카드를 삽입해 둘 것을 요청합니다.</translation>
+<translation id="1477654881618305065">조직에서 이 콘텐츠를 공유하도록 허용하지 않습니다. 도움이 필요하면 관리자에게 문의하세요.</translation>
 <translation id="1478340334823509079">세부정보: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">설치하도록 설정되어 있지 않습니다</translation>
 <translation id="1480571698637441426">질문할 때 나에게 맞는 답변을 듣고 싶다면 어시스턴트가 화면에 표시된 항목의 스크린샷에 액세스하도록 허용해 주세요. 여기에는 재생 중인 노래나 동영상에 관한 정보도 포함됩니다.</translation>
@@ -621,6 +622,7 @@
 <translation id="1643921258693943800">Nearby Share를 사용하려면 Bluetooth 및 Wi-Fi를 사용 설정하세요</translation>
 <translation id="1644574205037202324">방문 기록</translation>
 <translation id="1645516838734033527">Smart Lock을 사용하려면 <ph name="DEVICE_TYPE" />의 보안 유지를 위해 휴대전화에 화면 잠금을 설정해야 합니다.</translation>
+<translation id="1646793251510634025">검색 및 탐색 최적화 설정 검토</translation>
 <translation id="1646982517418478057">이 인증서를 암호화하려면 비밀번호를 입력하세요.</translation>
 <translation id="1648528859488547844">위치 파악에 Wi‑Fi 또는 모바일 네트워크 사용</translation>
 <translation id="164936512206786300">블루투스 기기 페어링 해제</translation>
@@ -1476,6 +1478,7 @@
 <translation id="2514326558286966059">지문으로 신속하게 잠금 해제</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">스위치 1개 추가 할당</translation>
+<translation id="251722524540674480">사용자 이름 확인</translation>
 <translation id="2517472476991765520">검색</translation>
 <translation id="2518024842978892609">클라이언트 인증서 사용</translation>
 <translation id="2519517390894391510">인증서 프로필 이름</translation>
@@ -2180,6 +2183,7 @@
 <translation id="3288047731229977326">개발자 모드로 실행 중인 확장 프로그램은 컴퓨터에 해를 줄 수 있습니다. 개발자가 아닌 경우 컴퓨터를 안전하게 사용하려면 개발자 모드로 실행 중인 확장 프로그램을 사용 중지해야 합니다.</translation>
 <translation id="3289668031376215426">자동 대문자화</translation>
 <translation id="3289856944988573801">업데이트를 확인하려면 이더넷 또는 Wi-Fi를 사용하세요.</translation>
+<translation id="3291436823898732747">개선된 탐색: 예를 들어, 사용자가 입력을 시작하기도 전에 검색주소창에 추천 항목이 표시됩니다.</translation>
 <translation id="3293644607209440645">이 페이지 전송</translation>
 <translation id="32939749466444286">Linux 컨테이너가 시작되지 않았습니다. 다시 시도해 주세요.</translation>
 <translation id="3294437725009624529">게스트</translation>
@@ -4212,6 +4216,7 @@
 <translation id="5505307013568720083">잉크 부족</translation>
 <translation id="5505794066310932198">Commander 전환</translation>
 <translation id="5507756662695126555">부인 방지</translation>
+<translation id="5507795078844206688">방문한 페이지의 URL(예: https://www.google.com)</translation>
 <translation id="5509693895992845810">다른 이름으로 저장(&amp;A)...</translation>
 <translation id="5509914365760201064">발행기관: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Google에서 이미지 설명 가져오기</translation>
@@ -4528,6 +4533,7 @@
 <translation id="5869522115854928033">저장된 비밀번호</translation>
 <translation id="5870086504539785141">접근성 메뉴 닫기</translation>
 <translation id="5870155679953074650">하드 결함</translation>
+<translation id="5875534259258494936">화면 공유 종료됨</translation>
 <translation id="5876576639916258720">실행 중...</translation>
 <translation id="5876851302954717356">오른쪽에 새 탭 열기</translation>
 <translation id="5877064549588274448">채널이 변경되었습니다. 변경사항을 적용하려면 기기를 다시 시작하세요.</translation>
@@ -5387,6 +5393,7 @@
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" />은(는) 루트로 실행할 수 없습니다.</translation>
 <translation id="6812841287760418429">변경사항 유지</translation>
 <translation id="6813907279658683733">전체 화면</translation>
+<translation id="6814033694018386318">Google과 공유되는 정보</translation>
 <translation id="6817174620439930047">사이트에서 시스템 전용 메시지를 사용하여 MIDI 기기에 액세스하려고 할 때 확인(권장)</translation>
 <translation id="6818198425579322765">페이지 번역 출발어</translation>
 <translation id="6818802132960437751">내장 바이러스 보호 기능</translation>
@@ -5882,6 +5889,7 @@
 <translation id="7374376573160927383">USB 기기 관리</translation>
 <translation id="7374461526650987610">프로토콜 핸들러</translation>
 <translation id="7375235221357833624">{0,plural, =1{1시간 내 기기 업데이트}other{#시간 내 기기 업데이트}}</translation>
+<translation id="7376543451826039186">더 빠른 탐색: 예를 들어, 현재 페이지를 기준으로 특정 추가 콘텐츠가 미리 로드됩니다.</translation>
 <translation id="7376553024552204454">이동 시 마우스 커서 강조표시</translation>
 <translation id="737728204345822099">이 사이트를 방문한 기록이 보안 키에 보관될 수 있습니다.</translation>
 <translation id="7377451353532943397">계속해서 센서 액세스 차단</translation>
@@ -5939,6 +5947,7 @@
 <translation id="7427798576651127129"><ph name="DEVICE_NAME" />에서 전화 걸기</translation>
 <translation id="7431719494109538750">HID 기기를 찾을 수 없음</translation>
 <translation id="7431991332293347422">검색 등을 맞춤설정하는 데 인터넷 방문 기록이 사용되는 방식 관리</translation>
+<translation id="7432200167665670017">관리자가 "<ph name="EXTENSION_NAME" />" 확장 프로그램(앱 ID: <ph name="EXTENSION_ID" />)을 차단함</translation>
 <translation id="7433708794692032816"><ph name="DEVICE_TYPE" /> 기기를 계속 사용하려면 스마트 카드 삽입</translation>
 <translation id="7433957986129316853">유지</translation>
 <translation id="7434509671034404296">개발자 정보</translation>
@@ -5968,6 +5977,7 @@
 <translation id="7460045493116006516">내가 설치한 현재 테마입니다.</translation>
 <translation id="7461924472993315131">고정</translation>
 <translation id="746216226901520237">다음번에는 휴대전화를 통해 <ph name="DEVICE_TYPE" />이 잠금 해제됩니다. 설정에서 Smart Lock을 사용 중지할 수 있습니다.</translation>
+<translation id="7464637891177137294">비밀번호를 Google 계정(<ph name="ACCOUNT" />)에 저장합니다.</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{열려 있는 탭 #개, 눌러서 탭 표시줄 표시/숨기기}other{열려 있는 탭 #개, 눌러서 탭 표시줄 표시/숨기기}}</translation>
 <translation id="7465635034594602553">문제가 발생했습니다. 잠시 후 <ph name="APP_NAME" /> 앱을 다시 실행해 주세요.</translation>
 <translation id="7465778193084373987">Netscape Certificate Revocation URL</translation>
@@ -6031,6 +6041,7 @@
 <translation id="7525625923260515951">선택한 텍스트 듣기</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{외 1개}other{외 {NUM_DOWNLOADS}개}}</translation>
 <translation id="7526989658317409655">자리표시자</translation>
+<translation id="7527758104894292229">Google 계정(<ph name="ACCOUNT" />)에서 비밀번호를 업데이트합니다.</translation>
 <translation id="7529411698175791732">인터넷 연결 상태를 확인하세요. 문제가 계속되면 로그아웃한 뒤 다시 로그인해보세요.</translation>
 <translation id="7529876053219658589">{0,plural, =1{게스트 창 닫기}other{게스트 창 닫기}}</translation>
 <translation id="7530016656428373557">방전율(와트)</translation>
@@ -6418,6 +6429,7 @@
 <translation id="7898725031477653577">항상 번역</translation>
 <translation id="790040513076446191">개인정보 보호 관련 설정 조정</translation>
 <translation id="7901405293566323524">휴대전화 허브</translation>
+<translation id="7901914889562552258">페이지 측정항목을 바탕으로 Chrome 성능 개선</translation>
 <translation id="7903345046358933331">페이지에서 응답이 없습니다. 페이지가 응답할 때까지 기다리거나 페이지를 닫으세요.</translation>
 <translation id="7903742244674067440">다음 인증기관을 식별하는 인증서가 등록되어 있습니다.</translation>
 <translation id="7903859912536385558">공개 버전(신뢰할 수 있는 테스터)</translation>
@@ -6884,6 +6896,7 @@
 <translation id="8392364544846746346">사이트에서 기기의 파일 또는 폴더를 수정하려는 경우 확인 메시지 표시</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" />의 옵션 메뉴</translation>
 <translation id="8393511274964623038">플러그인 중지</translation>
+<translation id="839363317075970734">블루투스 기기 세부정보</translation>
 <translation id="8393700583063109961">메시지 보내기</translation>
 <translation id="8397825320644530257">연결된 휴대전화 연결 해제</translation>
 <translation id="8398877366907290961">무시하고 계속하기</translation>
@@ -7134,6 +7147,7 @@
 <translation id="8681614230122836773">Chrome이 컴퓨터에서 유해한 소프트웨어를 발견했습니다.</translation>
 <translation id="8682730193597992579"><ph name="PRINTER_NAME" />이(가) 연결되었으며 사용 가능함</translation>
 <translation id="8683081248374354009">그룹 재설정</translation>
+<translation id="8683526617475118045">사용 설정했을 때의 이점</translation>
 <translation id="8688672835843460752">사용 가능</translation>
 <translation id="8690129572193755009">사이트에서 프로토콜 처리를 요청할 수 있음</translation>
 <translation id="8695139659682234808">설정 완료 후 자녀 보호 기능 추가</translation>
@@ -7187,6 +7201,7 @@
 <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> 대신 <ph name="PROTOCOL" /> 링크 열기</translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">페이지를 번역할 언어 선택</translation>
+<translation id="8737916108453753541">탐색 동작을 이해하기 위해 URL이 Google에 공유됩니다.</translation>
 <translation id="8740247629089392745">이 Chromebook을 <ph name="SUPERVISED_USER_NAME" />님에게 전달할 수 있습니다. 설정이 거의 끝났습니다. 기기를 살펴보세요.</translation>
 <translation id="8741944563400125534">스위치 제어 설정 가이드</translation>
 <translation id="8742998548129056176">기기 및 기기 사용 방식에 관한 일반적인 정보(배터리 수준, 시스템 및 앱 활동, 오류 등)입니다. 데이터는 Android를 개선하는 데 사용되며 일부 수집 정보는 Google 앱과 파트너(Android 개발자 등)가 앱 및 제품을 개선하는 데도 도움이 됩니다.</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 67dd524..44aa595b 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -446,6 +446,7 @@
 <translation id="1476088332184200792">Salin ke Peranti Anda</translation>
 <translation id="1476607407192946488">&amp;Tetapan Bahasa</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> menghendaki anda memastikan kad pintar anda tidak dikeluarkan.</translation>
+<translation id="1477654881618305065">Organisasi anda tidak membenarkan anda berkongsi kandungan ini. Hubungi pentadbir anda jika anda memerlukan bantuan.</translation>
 <translation id="1478340334823509079">Butiran: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Pemasangan tidak didayakan</translation>
 <translation id="1480571698637441426">Untuk mendapatkan respons yang disesuaikan apabila anda mengemukakan soalan, benarkan Assistant mengakses tangkapan skrin bagi paparan skrin anda. Paparan ini mungkin juga termasuk maklumat tentang lagu atau video yang sedang dimainkan.</translation>
@@ -621,6 +622,7 @@
 <translation id="1643921258693943800">Untuk menggunakan Kongsi Berdekatan, hidupkan Bluetooth dan Wi-Fi</translation>
 <translation id="1644574205037202324">Sejarah</translation>
 <translation id="1645516838734033527">Untuk memastikan <ph name="DEVICE_TYPE" /> anda selamat, Smart Lock memerlukan kunci skrin pada telefon anda.</translation>
+<translation id="1646793251510634025">Semak tetapan untuk pengoptimuman carian dan penyemakan imbas</translation>
 <translation id="1646982517418478057">Sila masukkan kata laluan untuk menyulitkan sijil ini</translation>
 <translation id="1648528859488547844">Gunakan Wi-Fi atau rangkaian mudah alih untuk menentukan lokasi</translation>
 <translation id="164936512206786300">Nyahgandingkan peranti Bluetooth</translation>
@@ -1476,6 +1478,7 @@
 <translation id="2514326558286966059">Buka kunci dengan lebih cepat menggunakan cap jari anda</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">Tetapkan satu suis lagi</translation>
+<translation id="251722524540674480">Sahkan nama pengguna anda</translation>
 <translation id="2517472476991765520">Imbas</translation>
 <translation id="2518024842978892609">Gunakan sijil pelanggan anda</translation>
 <translation id="2519517390894391510">Nama Profil Sijil</translation>
@@ -2180,6 +2183,7 @@
 <translation id="3288047731229977326">Sambungan yang dijalankan dalam mod pembangun boleh membahayakan komputer anda. Jika anda bukan pembangun, anda harus melumpuhkan sambungan yang dijalankan dalam mod pembangun ini supaya kekal selamat.</translation>
 <translation id="3289668031376215426">Autohuruf besar</translation>
 <translation id="3289856944988573801">Untuk menyemak kemas kini, sila gunakan Ethernet atau Wi-Fi.</translation>
+<translation id="3291436823898732747">Penyemakan imbas yang ditingkatkan: Sebagai contoh, cadangan dalam Kotak omni sebelum anda mula menaip</translation>
 <translation id="3293644607209440645">Hantar halaman ini</translation>
 <translation id="32939749466444286">Bekas Linux tidak dimulakan. Sila cuba lagi.</translation>
 <translation id="3294437725009624529">Tetamu</translation>
@@ -4215,6 +4219,7 @@
 <translation id="5505307013568720083">Kehabisan dakwat</translation>
 <translation id="5505794066310932198">Togol Commander</translation>
 <translation id="5507756662695126555">Bukan penolakan</translation>
+<translation id="5507795078844206688">URL halaman yang anda lawati, mis. https://www.google.com</translation>
 <translation id="5509693895992845810">Simpan &amp;Sebagai...</translation>
 <translation id="5509914365760201064">Pengeluar: <ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">Dapatkan Perihalan Imej daripada Google</translation>
@@ -4531,6 +4536,7 @@
 <translation id="5869522115854928033">Kata laluan disimpan</translation>
 <translation id="5870086504539785141">Tutup menu kebolehaksesan</translation>
 <translation id="5870155679953074650">Kesalahan keras</translation>
+<translation id="5875534259258494936">Perkongsian skrin telah tamat</translation>
 <translation id="5876576639916258720">Sedang dijalankan...</translation>
 <translation id="5876851302954717356">Tab Baharu ke Kanan</translation>
 <translation id="5877064549588274448">Saluran berubah. Mulakan semula peranti anda untuk menggunakan perubahan.</translation>
@@ -5390,6 +5396,7 @@
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> tidak dapat dijalankan sebagai akar.</translation>
 <translation id="6812841287760418429">Simpan perubahan</translation>
 <translation id="6813907279658683733">Seluruh Skrin</translation>
+<translation id="6814033694018386318">Perkara yang anda kongsi dengan Google</translation>
 <translation id="6817174620439930047">Tanya apabila tapak mahu menggunakan mesej eksklusif sistem untuk mengakses peranti MIDI (disyorkan)</translation>
 <translation id="6818198425579322765">Bahasa Halaman yang Hendak Diterjemahkan</translation>
 <translation id="6818802132960437751">Perlindungan virus terbina dalam</translation>
@@ -5885,6 +5892,7 @@
 <translation id="7374376573160927383">Urus peranti USB</translation>
 <translation id="7374461526650987610">Pengendali protokol</translation>
 <translation id="7375235221357833624">{0,plural, =1{Kemas kini peranti dalam masa sejam}other{Kemas kini peranti dalam masa # jam}}</translation>
+<translation id="7376543451826039186">Penyemakan imbas yang lebih cepat: Sebagai contoh, memuatkan kandungan lanjut tertentu secara proaktif berdasarkan halaman semasa</translation>
 <translation id="7376553024552204454">Serlahkan kursor tetikus semasa kursor bergerak</translation>
 <translation id="737728204345822099">Rekod lawatan anda ke laman ini mungkin disimpan pada kunci keselamatan anda.</translation>
 <translation id="7377451353532943397">Teruskan menyekat akses penderia</translation>
@@ -5942,6 +5950,7 @@
 <translation id="7427798576651127129">Panggilan daripada <ph name="DEVICE_NAME" /></translation>
 <translation id="7431719494109538750">Tiada peranti HID ditemui</translation>
 <translation id="7431991332293347422">Kawal cara sejarah penyemakan imbas anda digunakan untuk memperibadikan Carian dan pelbagai lagi</translation>
+<translation id="7432200167665670017">Pentadbir anda telah menyekat "<ph name="EXTENSION_NAME" />" - ID Apl <ph name="EXTENSION_ID" /></translation>
 <translation id="7433708794692032816">Masukkan kad pintar untuk terus menggunakan <ph name="DEVICE_TYPE" /> anda</translation>
 <translation id="7433957986129316853">Kekalkan</translation>
 <translation id="7434509671034404296">Pembangun</translation>
@@ -5971,6 +5980,7 @@
 <translation id="7460045493116006516">Tema semasa yang telah dipasang</translation>
 <translation id="7461924472993315131">Pin</translation>
 <translation id="746216226901520237">Selepas ini, telefon anda akan membuka kunci <ph name="DEVICE_TYPE" /> anda. Anda boleh mematikan Smart Lock dalam Tetapan.</translation>
+<translation id="7464637891177137294">Simpan pada Google Account anda, <ph name="ACCOUNT" /></translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# buka tab, tekan untuk menogol jalur tab}other{# buka tab, tekan untuk menogol jalur tab}}</translation>
 <translation id="7465635034594602553">Kesilapan telah berlaku. Sila tunggu beberapa minit dan jalankan <ph name="APP_NAME" /> sekali lagi.</translation>
 <translation id="7465778193084373987">URL Pembatalan Sijil Netscape</translation>
@@ -6034,6 +6044,7 @@
 <translation id="7525625923260515951">Dengar teks yang dipilih</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{1 lagi}other{{NUM_DOWNLOADS} lagi}}</translation>
 <translation id="7526989658317409655">Pemegang tempat</translation>
+<translation id="7527758104894292229">Kemas kini kata laluan dalam Google Account anda, <ph name="ACCOUNT" /></translation>
 <translation id="7529411698175791732">Semak sambungan Internet anda. Jika masalah ini masih berterusan, cuba log keluar dan log masuk semula.</translation>
 <translation id="7529876053219658589">{0,plural, =1{Tutup Tetamu}other{Tutup Tetamu}}</translation>
 <translation id="7530016656428373557">Kadar Nyahcas dalam Watt</translation>
@@ -6421,6 +6432,7 @@
 <translation id="7898725031477653577">Sentiasa terjemahkan</translation>
 <translation id="790040513076446191">Manipulasi tetapan yang berkaitan privasi</translation>
 <translation id="7901405293566323524">Hab Telefon</translation>
+<translation id="7901914889562552258">Chrome yang ditingkatkan menggunakan metrik halaman</translation>
 <translation id="7903345046358933331">Halaman tersebut menjadi tidak responsif. Anda boleh menunggu halaman menjadi responsif atau tutup halaman.</translation>
 <translation id="7903742244674067440">Anda mempunyai sijil pada fail yang mengenal pasti pihak berkuasa sijil ini</translation>
 <translation id="7903859912536385558">stabil (penguji yang dipercayai)</translation>
@@ -6888,6 +6900,7 @@
 <translation id="8392364544846746346">Tanya apabila tapak mahu mengedit fail atau folder pada peranti anda</translation>
 <translation id="8392451568018454956">Menu pilihan untuk <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8393511274964623038">Hentikan pemalam</translation>
+<translation id="839363317075970734">Butiran peranti Bluetooth</translation>
 <translation id="8393700583063109961">Hantar mesej</translation>
 <translation id="8397825320644530257">Putuskan sambungan telefon yang bersambung</translation>
 <translation id="8398877366907290961">Teruskan juga</translation>
@@ -7138,6 +7151,7 @@
 <translation id="8681614230122836773">Chrome menemukan perisian berbahaya pada komputer anda</translation>
 <translation id="8682730193597992579"><ph name="PRINTER_NAME" /> disambungkan dan sedia</translation>
 <translation id="8683081248374354009">Tetapkan semula kumpulan</translation>
+<translation id="8683526617475118045">Perkara yang anda dapat</translation>
 <translation id="8688672835843460752">Tersedia</translation>
 <translation id="8690129572193755009">Laman boleh meminta untuk mengendalikan protokol</translation>
 <translation id="8695139659682234808">Tambah kawalan ibu bapa selepas persediaan</translation>
@@ -7191,6 +7205,7 @@
 <translation id="8737685506611670901">Buka pautan <ph name="PROTOCOL" /> dan bukannya <ph name="REPLACED_HANDLER_TITLE" /></translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">Ketik bahasa sasaran untuk penterjemahan halaman tersebut</translation>
+<translation id="8737916108453753541">URL dikongsi dengan Google untuk memahami gelagat penyemakan imbas</translation>
 <translation id="8740247629089392745">Anda boleh menyerahkan Chromebook ini kepada <ph name="SUPERVISED_USER_NAME" />. Persediaan hampir selesai, kemudian tibalah masa untuk meneroka.</translation>
 <translation id="8741944563400125534">Panduan persediaan Akses Suis</translation>
 <translation id="8742998548129056176">Ini merupakan maklumat umum tentang peranti anda dan cara anda menggunakan peranti itu (seperti aras bateri, aktiviti sistem dan apl serta ralat). Data ini akan digunakan untuk menambah baik Android dan sesetengah maklumat teragregat juga dapat membantu apl Google dan rakan kongsi, seperti pembangun Android, memperbaik apl dan produk mereka.</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 3dedeae..7af42e1 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -2762,6 +2762,7 @@
 <translation id="3905761538810670789">Riparo aplikacionin</translation>
 <translation id="3908393983276948098"><ph name="PLUGIN_NAME" /> është i vjetruar</translation>
 <translation id="3908501907586732282">Aktivizo shtesën</translation>
+<translation id="3909701002594999354">Shfaq të gjitha &amp;kontrollet</translation>
 <translation id="3909791450649380159">Pri&amp;te</translation>
 <translation id="39103738135459590">Kodi i aktivizimit</translation>
 <translation id="3911824782900911339">Faqe "Skedë e re"</translation>
@@ -3499,6 +3500,7 @@
 <translation id="4733793249294335256">Vendndodhja</translation>
 <translation id="473546211690256853">Kjo llogari menaxhohet nga <ph name="DOMAIN" />.</translation>
 <translation id="4735803855089279419">Sistemi nuk arriti të përcaktonte identifikuesit e pajisjeve për këtë pajisje.</translation>
+<translation id="473581466100273252">Aktivizo/çaktivizo regjistrimet e mbyllura së fundi</translation>
 <translation id="4736292055110123391">Sinkronizo faqeshënuesit, fjalëkalimet, historikun tënd etj. në të gjitha pajisjet e tua</translation>
 <translation id="473775607612524610">Përditësoje</translation>
 <translation id="473936925429402449">Zgjedhur, elementi shtesë <ph name="CURRENT_ELEMENT" /> nga <ph name="TOTAL_ELEMENTS" /></translation>
@@ -5151,6 +5153,7 @@
 <translation id="657402800789773160">&amp;Ringarkoje këtë faqe</translation>
 <translation id="6577284282025554716">Shkarkimi u anulua: <ph name="FILE_NAME" /></translation>
 <translation id="657866106756413002">Pamje e çastit e fuqisë së rrjetit</translation>
+<translation id="6579369886355986318">Shfaq të gjitha &amp;kontrollet</translation>
 <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Përmbajtja e desktopit është ndarë</translation>
 <translation id="6580203076670148210">Shpejtësia e skanimit</translation>
 <translation id="6582080224869403177">Rivendose pajisjen tënde <ph name="DEVICE_TYPE" /> për të përmirësuar sigurinë.</translation>
@@ -5590,6 +5593,7 @@
 <translation id="7044124535091449260">Mëso më shumë për qasjen te sajti</translation>
 <translation id="7044606776288350625">Sinkronizo të dhënat</translation>
 <translation id="7047059339731138197">Zgjidh një sfond</translation>
+<translation id="7048457618657122233">Shpërndaje lidhjen te <ph name="SHARE_TARGET" /></translation>
 <translation id="7049293980323620022">Të mbahet skedari?</translation>
 <translation id="7052237160939977163">Dërgo të dhënat e gjurmimit të performancës</translation>
 <translation id="7053983685419859001">Bllokoje</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index 8e52f8c..ed27214f 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -446,6 +446,7 @@
 <translation id="1476088332184200792">複製至您的裝置</translation>
 <translation id="1476607407192946488">語言設定(&amp;L)</translation>
 <translation id="1477446329585670721"><ph name="DOMAIN" /> 需要您繼續插入智能卡。</translation>
+<translation id="1477654881618305065">您的機構不允許分享此內容。如果您需要協助,請與管理員聯絡。</translation>
 <translation id="1478340334823509079">詳情:<ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">未啟用安裝功能</translation>
 <translation id="1480571698637441426">如要在提問後取得更貼近需要的回覆,請允許「Google 助理」存取包含畫面上資料的螢幕截圖,這亦包括正在播放歌曲或影片的相關資料。</translation>
@@ -621,6 +622,7 @@
 <translation id="1643921258693943800">如要使用「咫尺共享」功能,請開啟藍牙和 Wi-Fi</translation>
 <translation id="1644574205037202324">記錄</translation>
 <translation id="1645516838734033527">為確保您的 <ph name="DEVICE_TYPE" /> 安全,Smart Lock 要求您的手機必須啟用螢幕鎖定功能。</translation>
+<translation id="1646793251510634025">查看搜尋和瀏覽優化設定</translation>
 <translation id="1646982517418478057">請輸入密碼以加密此憑證</translation>
 <translation id="1648528859488547844">使用 Wi‑Fi 或流動網絡確定位置</translation>
 <translation id="164936512206786300">取消配對藍牙裝置</translation>
@@ -1475,6 +1477,7 @@
 <translation id="2514326558286966059">指紋加快解鎖速度</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2515807442171220586">指派多一個開關</translation>
+<translation id="251722524540674480">確認您的使用者名稱</translation>
 <translation id="2517472476991765520">掃瞄</translation>
 <translation id="2518024842978892609">使用您的客戶憑證。</translation>
 <translation id="2519517390894391510">憑證設定檔名稱</translation>
@@ -2179,6 +2182,7 @@
 <translation id="3288047731229977326">在開發人員模式中執行擴充功能可能會損害您的電腦。如果您不是開發人員,最好在開發人員模式中停用這些擴充功能,以策安全。</translation>
 <translation id="3289668031376215426">自動大寫</translation>
 <translation id="3289856944988573801">如要檢查更新,請使用以太網絡或 Wi-Fi。</translation>
+<translation id="3291436823898732747">改善瀏覽體驗:例如,網址列會在您輸入文字前顯示建議</translation>
 <translation id="3293644607209440645">傳送此頁面</translation>
 <translation id="32939749466444286">Linux 容器無法啟動。請再試一次。</translation>
 <translation id="3294437725009624529">訪客</translation>
@@ -4214,6 +4218,7 @@
 <translation id="5505307013568720083">墨水用完</translation>
 <translation id="5505794066310932198">切換指令工具</translation>
 <translation id="5507756662695126555">不可否認性</translation>
+<translation id="5507795078844206688">您瀏覽的網頁網址,例如:https://www.google.com</translation>
 <translation id="5509693895992845810">另存為(&amp;A)…</translation>
 <translation id="5509914365760201064">發行者:<ph name="CERTIFICATE_AUTHORITY" /></translation>
 <translation id="5510775624736435856">從 Google 取得圖片說明</translation>
@@ -4530,6 +4535,7 @@
 <translation id="5869522115854928033">已儲存的密碼</translation>
 <translation id="5870086504539785141">關閉協助工具選單</translation>
 <translation id="5870155679953074650">嚴重錯誤</translation>
+<translation id="5875534259258494936">已終止分享螢幕畫面</translation>
 <translation id="5876576639916258720">正在執行…</translation>
 <translation id="5876851302954717356">在右側新增分頁</translation>
 <translation id="5877064549588274448">版本已變更。請重新啟動裝置以套用變更。</translation>
@@ -5389,6 +5395,7 @@
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> 無法以根使用者的身分執行。</translation>
 <translation id="6812841287760418429">保留變更</translation>
 <translation id="6813907279658683733">整個螢幕畫面</translation>
+<translation id="6814033694018386318">您與 Google 分享的資料</translation>
 <translation id="6817174620439930047">在網站要使用系統專有訊息存取 MIDI 裝置時詢問您 (建議)</translation>
 <translation id="6818198425579322765">要翻譯的網頁語言</translation>
 <translation id="6818802132960437751">內置防毒功能</translation>
@@ -5884,6 +5891,7 @@
 <translation id="7374376573160927383">管理 USB 裝置</translation>
 <translation id="7374461526650987610">通訊協定處理常式</translation>
 <translation id="7375235221357833624">{0,plural, =1{請在 1 小時內更新裝置}other{請在 # 小時內更新裝置}}</translation>
+<translation id="7376543451826039186">加快瀏覽速度:例如,系統會根據目前網頁主動載入特定的詳細內容</translation>
 <translation id="7376553024552204454">移動滑鼠時突顯滑鼠游標</translation>
 <translation id="737728204345822099">您的安全密鑰可能會保留您瀏覽此網站的記錄。</translation>
 <translation id="7377451353532943397">繼續封鎖感應器存取權</translation>
@@ -5941,6 +5949,7 @@
 <translation id="7427798576651127129">透過 <ph name="DEVICE_NAME" /> 撥打電話</translation>
 <translation id="7431719494109538750">找不到 HID 裝置</translation>
 <translation id="7431991332293347422">控制系統如何使用您的瀏覽記錄,為您提供個人化的搜尋內容和其他服務</translation>
+<translation id="7432200167665670017">管理員已封鎖「<ph name="EXTENSION_NAME" />」(應用程式 ID:<ph name="EXTENSION_ID" />)</translation>
 <translation id="7433708794692032816">插入智能卡才能繼續使用 <ph name="DEVICE_TYPE" /></translation>
 <translation id="7433957986129316853">保留</translation>
 <translation id="7434509671034404296">開發人員</translation>
@@ -5970,6 +5979,7 @@
 <translation id="7460045493116006516">您目前安裝的主題</translation>
 <translation id="7461924472993315131">Pin</translation>
 <translation id="746216226901520237">下次您便可使用手機來解鎖 <ph name="DEVICE_TYPE" />。您可在「設定」中停用 Smart Lock。</translation>
+<translation id="7464637891177137294">將密碼儲存在 Google 帳戶 (<ph name="ACCOUNT" />) 中</translation>
 <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{已開啟 # 個分頁,按下即可切換標籤列}other{已開啟 # 個分頁,按下即可切換標籤列}}</translation>
 <translation id="7465635034594602553">發生錯誤,請等候數分鐘,然後再次執行 <ph name="APP_NAME" />。</translation>
 <translation id="7465778193084373987">Netscape 憑證撤銷網址</translation>
@@ -6033,6 +6043,7 @@
 <translation id="7525625923260515951">聽取所選文字</translation>
 <translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{還有 1 項}other{還有 {NUM_DOWNLOADS} 項}}</translation>
 <translation id="7526989658317409655">佔位符</translation>
+<translation id="7527758104894292229">更新 Google 帳戶 (<ph name="ACCOUNT" />) 中的密碼</translation>
 <translation id="7529411698175791732">請檢查您的互聯網連線。如果問題持續,請嘗試登出,然後再次登入。</translation>
 <translation id="7529876053219658589">{0,plural, =1{關閉訪客視窗}other{關閉訪客視窗}}</translation>
 <translation id="7530016656428373557">放電速率 (瓦特)</translation>
@@ -6420,6 +6431,7 @@
 <translation id="7898725031477653577">永遠翻譯</translation>
 <translation id="790040513076446191">操控私隱權相關設定</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
+<translation id="7901914889562552258">根據網頁數據改善 Chrome</translation>
 <translation id="7903345046358933331">網頁沒有回應。您可以等待網頁回應或關閉網頁。</translation>
 <translation id="7903742244674067440">您的檔案具備可以識別這些憑證授權的憑證</translation>
 <translation id="7903859912536385558">穩定版 (可信任的測試人員)</translation>
@@ -6886,6 +6898,7 @@
 <translation id="8392364544846746346">網站必須先詢問您,才能編輯裝置上的檔案或資料夾</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> 的選項選單</translation>
 <translation id="8393511274964623038">停止外掛程式</translation>
+<translation id="839363317075970734">藍牙裝置詳情</translation>
 <translation id="8393700583063109961">傳送訊息</translation>
 <translation id="8397825320644530257">解除連接已連接的手機</translation>
 <translation id="8398877366907290961">仍要繼續</translation>
@@ -7136,6 +7149,7 @@
 <translation id="8681614230122836773">Chrome 在您的電腦上發現了有害軟件</translation>
 <translation id="8682730193597992579">已連接 <ph name="PRINTER_NAME" /> 並準備就緒</translation>
 <translation id="8683081248374354009">重設群組</translation>
+<translation id="8683526617475118045">本功能的優點</translation>
 <translation id="8688672835843460752">可用</translation>
 <translation id="8690129572193755009">網站可要求處理通訊協定</translation>
 <translation id="8695139659682234808">設定完成後新增家長監控設定</translation>
@@ -7189,6 +7203,7 @@
 <translation id="8737685506611670901">開啟<ph name="PROTOCOL" />連結 (而非 <ph name="REPLACED_HANDLER_TITLE" />)</translation>
 <translation id="8737709691285775803">Shill</translation>
 <translation id="8737914367566358838">揀要將網頁翻譯成邊種語言</translation>
+<translation id="8737916108453753541">系統會與 Google 分享網址,以便瞭解瀏覽行為</translation>
 <translation id="8740247629089392745">您可將此 Chromebook 交還給<ph name="SUPERVISED_USER_NAME" />。設定即將完成,現在可開始探索。</translation>
 <translation id="8741944563400125534">按鈕控制設定指南</translation>
 <translation id="8742998548129056176">這個選項會提供裝置的一般資料和使用情况 (例如電量、系統及應用程式活動,以及發生的錯誤)。這些資料將會用來改善 Android。部分彙整資料還能協助 Google 應用程式和合作夥伴 (例如 Android 開發人員) 改良應用程式和產品。</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index 8457166..3559dd2c 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -1240,6 +1240,11 @@
   <message name="IDS_SETTINGS_PRIVACY_MORE" desc="Label on the expansion button to show more privacy settings.">
     More
   </message>
+  <if expr="chromeos">
+    <message name="IDS_SETTINGS_SECURE_DNS_OPEN_CHROME_OS_SETTINGS_LABEL" desc="Label for the section that allow users to open Secure DNS settings in Chrome OS.">
+      Manage secure DNS in Chrome OS settings
+    </message>
+  </if>
 
   <!-- Privacy Sandbox -->
   <message name="IDS_SETTINGS_PRIVACY_SANDBOX_TITLE" desc="The title of the Privacy Sandbox page. 'Privacy Sandbox' is a noun phrase (title case).">
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SECURE_DNS_OPEN_CHROME_OS_SETTINGS_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SECURE_DNS_OPEN_CHROME_OS_SETTINGS_LABEL.png.sha1
new file mode 100644
index 0000000..5b6b9c7
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SECURE_DNS_OPEN_CHROME_OS_SETTINGS_LABEL.png.sha1
@@ -0,0 +1 @@
+fc6c685a43facdaefb08be1beed7493c6b952be2
\ No newline at end of file
diff --git a/chrome/browser/ash/app_mode/app_launch_utils.cc b/chrome/browser/ash/app_mode/app_launch_utils.cc
index 0367f53..0080fe4 100644
--- a/chrome/browser/ash/app_mode/app_launch_utils.cc
+++ b/chrome/browser/ash/app_mode/app_launch_utils.cc
@@ -51,6 +51,8 @@
       app_launcher_ = std::make_unique<WebKioskAppLauncher>(
           profile, this, *kiosk_app_id.account_id);
   }
+  AppLaunchManager(const AppLaunchManager&) = delete;
+  AppLaunchManager& operator=(const AppLaunchManager&) = delete;
 
   void Start() { app_launcher_->Initialize(); }
 
@@ -87,8 +89,6 @@
   bool IsShowingNetworkConfigScreen() const override { return false; }
 
   std::unique_ptr<KioskAppLauncher> app_launcher_;
-
-  DISALLOW_COPY_AND_ASSIGN(AppLaunchManager);
 };
 
 void LaunchAppOrDie(Profile* profile, const KioskAppId& kiosk_app_id) {
diff --git a/chrome/browser/ash/app_mode/app_session.cc b/chrome/browser/ash/app_mode/app_session.cc
index 3d972d3..92590e8 100644
--- a/chrome/browser/ash/app_mode/app_session.cc
+++ b/chrome/browser/ash/app_mode/app_session.cc
@@ -115,6 +115,8 @@
  public:
   explicit AppWindowHandler(AppSession* app_session)
       : app_session_(app_session) {}
+  AppWindowHandler(const AppWindowHandler&) = delete;
+  AppWindowHandler& operator=(const AppWindowHandler&) = delete;
   ~AppWindowHandler() override {}
 
   void Init(Profile* profile, const std::string& app_id) {
@@ -149,8 +151,6 @@
   AppWindowRegistry* window_registry_ = nullptr;
   std::string app_id_;
   bool app_window_created_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(AppWindowHandler);
 };
 
 class AppSession::BrowserWindowHandler : public BrowserListObserver {
@@ -159,6 +159,8 @@
       : app_session_(app_session), browser_(browser) {
     BrowserList::AddObserver(this);
   }
+  BrowserWindowHandler(const BrowserWindowHandler&) = delete;
+  BrowserWindowHandler& operator=(const BrowserWindowHandler&) = delete;
   ~BrowserWindowHandler() override { BrowserList::RemoveObserver(this); }
 
  private:
@@ -233,7 +235,6 @@
 
   AppSession* const app_session_;
   Browser* const browser_;
-  DISALLOW_COPY_AND_ASSIGN(BrowserWindowHandler);
 };
 
 AppSession::AppSession()
diff --git a/chrome/browser/ash/app_mode/app_session.h b/chrome/browser/ash/app_mode/app_session.h
index d23e974..6094c9e 100644
--- a/chrome/browser/ash/app_mode/app_session.h
+++ b/chrome/browser/ash/app_mode/app_session.h
@@ -31,6 +31,8 @@
 class AppSession : public KioskSessionPluginHandlerDelegate {
  public:
   AppSession();
+  AppSession(const AppSession&) = delete;
+  AppSession& operator=(const AppSession&) = delete;
   ~AppSession() override;
 
   // Initializes an app session.
@@ -82,8 +84,6 @@
   // Is called whenever a new browser creation was handled by the
   // BrowserWindowHandler.
   base::RepeatingClosure on_handle_browser_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(AppSession);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_data.h b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_data.h
index 8c170215..2058563 100644
--- a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_data.h
+++ b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_data.h
@@ -24,6 +24,8 @@
                   const std::string& intent,
                   const AccountId& account_id,
                   const std::string& name);
+  ArcKioskAppData(const ArcKioskAppData&) = delete;
+  ArcKioskAppData& operator=(const ArcKioskAppData&) = delete;
   ~ArcKioskAppData() override;
 
   const std::string& package_name() const { return package_name_; }
@@ -47,8 +49,6 @@
   const std::string package_name_;
   const std::string activity_;
   const std::string intent_;
-
-  DISALLOW_COPY_AND_ASSIGN(ArcKioskAppData);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_launcher.h b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_launcher.h
index 670a664..50298c29 100644
--- a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_launcher.h
+++ b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_launcher.h
@@ -35,7 +35,8 @@
                       ArcAppListPrefs* prefs,
                       const std::string& app_id,
                       Delegate* delegate);
-
+  ArcKioskAppLauncher(const ArcKioskAppLauncher&) = delete;
+  ArcKioskAppLauncher& operator=(const ArcKioskAppLauncher&) = delete;
   ~ArcKioskAppLauncher() override;
 
   // ArcAppListPrefs::Observer overrides.
@@ -65,8 +66,6 @@
   std::set<aura::Window*> windows_;
   // Not owning the delegate, delegate owns this class.
   Delegate* const delegate_;
-
-  DISALLOW_COPY_AND_ASSIGN(ArcKioskAppLauncher);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager.h b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager.h
index abd4b09..20a25c0 100644
--- a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager.h
+++ b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager.h
@@ -30,6 +30,8 @@
 
   static ArcKioskAppManager* Get();
   ArcKioskAppManager();
+  ArcKioskAppManager(const ArcKioskAppManager&) = delete;
+  ArcKioskAppManager& operator=(const ArcKioskAppManager&) = delete;
   ~ArcKioskAppManager() override;
 
   // Registers kiosk app entries in local state.
@@ -67,8 +69,6 @@
 
   std::vector<std::unique_ptr<ArcKioskAppData>> apps_;
   AccountId auto_launch_account_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(ArcKioskAppManager);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager_browsertest.cc b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager_browsertest.cc
index ff462bb..875ab54 100644
--- a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager_browsertest.cc
+++ b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_manager_browsertest.cc
@@ -38,7 +38,8 @@
       : manager_(manager), expected_notifications_(expected_notifications) {
     manager_->AddObserver(this);
   }
-
+  NotificationWaiter(const NotificationWaiter&) = delete;
+  NotificationWaiter& operator=(const NotificationWaiter&) = delete;
   ~NotificationWaiter() override { manager_->RemoveObserver(this); }
 
   void Wait() {
@@ -67,8 +68,6 @@
   ArcKioskAppManager* manager_;
   bool notification_received_ = false;
   int expected_notifications_;
-
-  DISALLOW_COPY_AND_ASSIGN(NotificationWaiter);
 };
 
 std::string GenerateAccountId(std::string package_name) {
@@ -80,6 +79,8 @@
 class ArcKioskAppManagerTest : public InProcessBrowserTest {
  public:
   ArcKioskAppManagerTest() : settings_helper_(false) {}
+  ArcKioskAppManagerTest(const ArcKioskAppManagerTest&) = delete;
+  ArcKioskAppManagerTest& operator=(const ArcKioskAppManagerTest&) = delete;
   ~ArcKioskAppManagerTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
@@ -141,9 +142,6 @@
  protected:
   ScopedCrosSettingsTestHelper settings_helper_;
   std::unique_ptr<FakeOwnerSettingsService> owner_settings_service_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ArcKioskAppManagerTest);
 };
 
 IN_PROC_BROWSER_TEST_F(ArcKioskAppManagerTest, Basic) {
diff --git a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service.h b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service.h
index a291120c..c2f71bad 100644
--- a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service.h
+++ b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service.h
@@ -94,6 +94,8 @@
 
  private:
   explicit ArcKioskAppService(Profile* profile);
+  ArcKioskAppService(const ArcKioskAppService&) = delete;
+  ArcKioskAppService& operator=(const ArcKioskAppService&) = delete;
   ~ArcKioskAppService() override;
 
   std::string GetAppId();
@@ -122,8 +124,6 @@
   bool compliance_report_received_ = false;
   // Keeps track whether the app is already launched
   std::unique_ptr<ArcKioskAppLauncher> app_launcher_;
-
-  DISALLOW_COPY_AND_ASSIGN(ArcKioskAppService);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service_factory.h b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service_factory.h
index 4778a9a..7b628b6 100644
--- a/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service_factory.h
+++ b/chrome/browser/ash/app_mode/arc/arc_kiosk_app_service_factory.h
@@ -27,13 +27,14 @@
   friend struct base::DefaultSingletonTraits<ArcKioskAppServiceFactory>;
 
   ArcKioskAppServiceFactory();
+  ArcKioskAppServiceFactory(const ArcKioskAppServiceFactory&) = delete;
+  ArcKioskAppServiceFactory& operator=(const ArcKioskAppServiceFactory&) =
+      delete;
   ~ArcKioskAppServiceFactory() override;
 
   // BrowserContextKeyedServiceFactory overrides.
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
-
-  DISALLOW_COPY_AND_ASSIGN(ArcKioskAppServiceFactory);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/certificate_manager_dialog.h b/chrome/browser/ash/app_mode/certificate_manager_dialog.h
index c642061..f4deb55 100644
--- a/chrome/browser/ash/app_mode/certificate_manager_dialog.h
+++ b/chrome/browser/ash/app_mode/certificate_manager_dialog.h
@@ -19,14 +19,13 @@
   CertificateManagerDialog(Profile* profile,
                            LoginWebDialog::Delegate* delegate,
                            gfx::NativeWindow window);
+  CertificateManagerDialog(const CertificateManagerDialog&) = delete;
+  CertificateManagerDialog& operator=(const CertificateManagerDialog&) = delete;
   ~CertificateManagerDialog() override;
 
   // ui::WebDialogDelegate
   std::u16string GetDialogTitle() const override;
   void GetDialogSize(gfx::Size* size) const override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(CertificateManagerDialog);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/fake_cws.h b/chrome/browser/ash/app_mode/fake_cws.h
index 8be7880..aceefd2 100644
--- a/chrome/browser/ash/app_mode/fake_cws.h
+++ b/chrome/browser/ash/app_mode/fake_cws.h
@@ -26,6 +26,8 @@
 class FakeCWS {
  public:
   FakeCWS();
+  FakeCWS(const FakeCWS&) = delete;
+  FakeCWS& operator=(const FakeCWS&) = delete;
   ~FakeCWS();
 
   // Initializes as CWS request handler and overrides app gallery command line
@@ -88,8 +90,6 @@
   // real Chrome Web Store and remove this scoped ignore.
   std::unique_ptr<extensions::ScopedIgnoreContentVerifierForTest>
       scoped_ignore_content_verifier_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeCWS);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_app_data.cc b/chrome/browser/ash/app_mode/kiosk_app_data.cc
index 244534791..35172d39 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_data.cc
+++ b/chrome/browser/ash/app_mode/kiosk_app_data.cc
@@ -85,6 +85,8 @@
         task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
             {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
              base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})) {}
+  CrxLoader(const CrxLoader&) = delete;
+  CrxLoader& operator=(const CrxLoader&) = delete;
 
   void Start() {
     task_runner_->PostTask(FROM_HERE,
@@ -179,8 +181,6 @@
   std::string name_;
   SkBitmap icon_;
   std::string required_platform_version_;
-
-  DISALLOW_COPY_AND_ASSIGN(CrxLoader);
 };
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -192,6 +192,8 @@
  public:
   explicit WebstoreDataParser(const base::WeakPtr<KioskAppData>& client)
       : client_(client) {}
+  WebstoreDataParser(const WebstoreDataParser&) = delete;
+  WebstoreDataParser& operator=(const WebstoreDataParser&) = delete;
 
   void Start(const std::string& app_id,
              const std::string& manifest,
@@ -251,8 +253,6 @@
   }
 
   base::WeakPtr<KioskAppData> client_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebstoreDataParser);
 };
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/browser/ash/app_mode/kiosk_app_data.h b/chrome/browser/ash/app_mode/kiosk_app_data.h
index e1d59b2..7e64e86 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_data.h
+++ b/chrome/browser/ash/app_mode/kiosk_app_data.h
@@ -54,6 +54,8 @@
                const AccountId& account_id,
                const GURL& update_url,
                const base::FilePath& cached_crx);
+  KioskAppData(const KioskAppData&) = delete;
+  KioskAppData& operator=(const KioskAppData&) = delete;
   ~KioskAppData() override;
 
   // Loads app data from cache. If there is no cached data, fetches it
@@ -157,8 +159,6 @@
   base::FilePath crx_file_;
 
   base::WeakPtrFactory<KioskAppData> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(KioskAppData);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_app_data_base.h b/chrome/browser/ash/app_mode/kiosk_app_data_base.h
index 12db924..f5b179c3 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_data_base.h
+++ b/chrome/browser/ash/app_mode/kiosk_app_data_base.h
@@ -42,6 +42,8 @@
   KioskAppDataBase(const std::string& dictionary_name,
                    const std::string& app_id,
                    const AccountId& account_id);
+  KioskAppDataBase(const KioskAppDataBase&) = delete;
+  KioskAppDataBase& operator=(const KioskAppDataBase&) = delete;
   ~KioskAppDataBase() override;
 
   // Helper to save name and icon to provided dictionary.
@@ -77,8 +79,6 @@
   const AccountId account_id_;
 
   base::FilePath icon_path_;
-
-  DISALLOW_COPY_AND_ASSIGN(KioskAppDataBase);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_app_external_loader.h b/chrome/browser/ash/app_mode/kiosk_app_external_loader.h
index 0b2fc15..8246148 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_external_loader.h
+++ b/chrome/browser/ash/app_mode/kiosk_app_external_loader.h
@@ -30,6 +30,8 @@
   enum class AppClass { kPrimary, kSecondary };
 
   explicit KioskAppExternalLoader(AppClass app_class);
+  KioskAppExternalLoader(const KioskAppExternalLoader&) = delete;
+  KioskAppExternalLoader& operator=(const KioskAppExternalLoader&) = delete;
 
   // extensions::ExternalLoader:
   void StartLoading() override;
@@ -58,8 +60,6 @@
   State state_ = State::kInitial;
 
   base::WeakPtrFactory<KioskAppExternalLoader> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(KioskAppExternalLoader);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_app_icon_loader.h b/chrome/browser/ash/app_mode/kiosk_app_icon_loader.h
index 7ea32ee..5b377b20 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_icon_loader.h
+++ b/chrome/browser/ash/app_mode/kiosk_app_icon_loader.h
@@ -34,7 +34,8 @@
       base::OnceCallback<void(absl::optional<gfx::ImageSkia> result)>;
 
   explicit KioskAppIconLoader(Delegate* delegate);
-
+  KioskAppIconLoader(const KioskAppIconLoader&) = delete;
+  KioskAppIconLoader& operator=(const KioskAppIconLoader&) = delete;
   ~KioskAppIconLoader();
 
   void Start(const base::FilePath& icon_path);
@@ -48,8 +49,6 @@
   gfx::ImageSkia icon_;
 
   base::WeakPtrFactory<KioskAppIconLoader> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(KioskAppIconLoader);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_app_manager.h b/chrome/browser/ash/app_mode/kiosk_app_manager.h
index 5dcd9fc..1b6d3a6 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_manager.h
+++ b/chrome/browser/ash/app_mode/kiosk_app_manager.h
@@ -259,6 +259,8 @@
   };
 
   KioskAppManager();
+  KioskAppManager(const KioskAppManager&) = delete;
+  KioskAppManager& operator=(const KioskAppManager&) = delete;
   ~KioskAppManager() override;
 
   // Stop all data loading and remove its dependency on CrosSettings.
@@ -337,8 +339,6 @@
 
   // Callback registered using SetSecondaryAppsLoaderPrefsChangedHandler().
   base::RepeatingClosure secondary_apps_changed_handler_;
-
-  DISALLOW_COPY_AND_ASSIGN(KioskAppManager);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_app_manager_base.h b/chrome/browser/ash/app_mode/kiosk_app_manager_base.h
index 85ae011d..8c2aedf 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_manager_base.h
+++ b/chrome/browser/ash/app_mode/kiosk_app_manager_base.h
@@ -51,6 +51,8 @@
   using AppList = std::vector<App>;
 
   KioskAppManagerBase();
+  KioskAppManagerBase(const KioskAppManagerBase&) = delete;
+  KioskAppManagerBase& operator=(const KioskAppManagerBase&) = delete;
   ~KioskAppManagerBase() override;
 
   // Depends on the app internal representation for the particular type of
@@ -103,7 +105,6 @@
   base::ObserverList<KioskAppManagerObserver, true>::Unchecked observers_;
 
   base::WeakPtrFactory<KioskAppManagerBase> weak_ptr_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(KioskAppManagerBase);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_app_manager_browsertest.cc b/chrome/browser/ash/app_mode/kiosk_app_manager_browsertest.cc
index 05a0d78..0aadc28 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_manager_browsertest.cc
+++ b/chrome/browser/ash/app_mode/kiosk_app_manager_browsertest.cc
@@ -129,7 +129,8 @@
       : manager_(manager), expected_data_change_(expected_data_change) {
     manager_->AddObserver(this);
   }
-
+  AppDataLoadWaiter(const AppDataLoadWaiter&) = delete;
+  AppDataLoadWaiter& operator=(const AppDataLoadWaiter&) = delete;
   ~AppDataLoadWaiter() override { manager_->RemoveObserver(this); }
 
   void Wait() {
@@ -187,14 +188,14 @@
   int data_change_count_ = 0;
   int expected_data_change_;
   int data_load_failure_count_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(AppDataLoadWaiter);
 };
 
 // A class to wait for ExternalCache to finish putting the extension crx.
 class ExternalCachePutWaiter {
  public:
   ExternalCachePutWaiter() {}
+  ExternalCachePutWaiter(const ExternalCachePutWaiter&) = delete;
+  ExternalCachePutWaiter& operator=(const ExternalCachePutWaiter&) = delete;
   ~ExternalCachePutWaiter() {}
 
   void Wait() {
@@ -217,8 +218,6 @@
   std::unique_ptr<base::RunLoop> run_loop_;
   bool quit_ = false;
   bool success_ = false;
-
-  DISALLOW_COPY_AND_ASSIGN(ExternalCachePutWaiter);
 };
 
 }  // namespace
@@ -229,6 +228,8 @@
       : settings_helper_(false),
         fake_cws_(new FakeCWS()),
         verifier_format_override_(crx_file::VerifierFormat::CRX3) {}
+  KioskAppManagerTest(const KioskAppManagerTest&) = delete;
+  KioskAppManagerTest& operator=(const KioskAppManagerTest&) = delete;
   ~KioskAppManagerTest() override {}
 
   // InProcessBrowserTest overrides:
@@ -465,8 +466,6 @@
   std::unique_ptr<FakeCWS> fake_cws_;
   extensions::SandboxedUnpacker::ScopedVerifierFormatOverrideForTest
       verifier_format_override_;
-
-  DISALLOW_COPY_AND_ASSIGN(KioskAppManagerTest);
 };
 
 IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, Basic) {
diff --git a/chrome/browser/ash/app_mode/kiosk_app_update_install_gate.h b/chrome/browser/ash/app_mode/kiosk_app_update_install_gate.h
index 7228abef..6dd3ee7a 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_update_install_gate.h
+++ b/chrome/browser/ash/app_mode/kiosk_app_update_install_gate.h
@@ -20,6 +20,9 @@
 class KioskAppUpdateInstallGate : public extensions::InstallGate {
  public:
   explicit KioskAppUpdateInstallGate(Profile* profile);
+  KioskAppUpdateInstallGate(const KioskAppUpdateInstallGate&) = delete;
+  KioskAppUpdateInstallGate& operator=(const KioskAppUpdateInstallGate&) =
+      delete;
   ~KioskAppUpdateInstallGate() override;
 
   // InstallGate:
@@ -29,8 +32,6 @@
  private:
   Profile* const profile_;
   extensions::ExtensionRegistry* const registry_;
-
-  DISALLOW_COPY_AND_ASSIGN(KioskAppUpdateInstallGate);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_app_update_service.h b/chrome/browser/ash/app_mode/kiosk_app_update_service.h
index 8d5efb1..73424dd 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_update_service.h
+++ b/chrome/browser/ash/app_mode/kiosk_app_update_service.h
@@ -38,6 +38,8 @@
   KioskAppUpdateService(
       Profile* profile,
       system::AutomaticRebootManager* automatic_reboot_manager);
+  KioskAppUpdateService(const KioskAppUpdateService&) = delete;
+  KioskAppUpdateService& operator=(const KioskAppUpdateService&) = delete;
   ~KioskAppUpdateService() override;
 
   void Init(const std::string& app_id);
@@ -71,8 +73,6 @@
   base::OneShotTimer restart_timer_;
 
   system::AutomaticRebootManager* automatic_reboot_manager_;  // Not owned.
-
-  DISALLOW_COPY_AND_ASSIGN(KioskAppUpdateService);
 };
 
 // Singleton that owns all KioskAppUpdateServices and associates them with
diff --git a/chrome/browser/ash/app_mode/kiosk_app_update_service_browsertest.cc b/chrome/browser/ash/app_mode/kiosk_app_update_service_browsertest.cc
index ce42a45..029b90f 100644
--- a/chrome/browser/ash/app_mode/kiosk_app_update_service_browsertest.cc
+++ b/chrome/browser/ash/app_mode/kiosk_app_update_service_browsertest.cc
@@ -72,7 +72,9 @@
       : app_(NULL),
         update_service_(NULL),
         automatic_reboot_manager_(NULL) {}
-
+  KioskAppUpdateServiceTest(const KioskAppUpdateServiceTest&) = delete;
+  KioskAppUpdateServiceTest& operator=(const KioskAppUpdateServiceTest&) =
+      delete;
   ~KioskAppUpdateServiceTest() override {}
 
   // extensions::PlatformAppBrowserTest overrides:
@@ -165,8 +167,6 @@
   KioskAppUpdateService* update_service_;  // Not owned.
   system::AutomaticRebootManager* automatic_reboot_manager_;  // Not owned.
   std::unique_ptr<base::RunLoop> run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(KioskAppUpdateServiceTest);
 };
 
 // Verifies that the app is notified a reboot is required when an app update
diff --git a/chrome/browser/ash/app_mode/kiosk_crash_restore_browsertest.cc b/chrome/browser/ash/app_mode/kiosk_crash_restore_browsertest.cc
index 5aca252..bf3d867 100644
--- a/chrome/browser/ash/app_mode/kiosk_crash_restore_browsertest.cc
+++ b/chrome/browser/ash/app_mode/kiosk_crash_restore_browsertest.cc
@@ -39,6 +39,8 @@
  public:
   KioskCrashRestoreTest()
       : owner_key_util_(new ownership::MockOwnerKeyUtil()) {}
+  KioskCrashRestoreTest(const KioskCrashRestoreTest&) = delete;
+  KioskCrashRestoreTest& operator=(const KioskCrashRestoreTest&) = delete;
 
   // chromeos::LocalStateMixin::Delegate:
   void SetUpLocalState() override { SetUpExistingKioskApp(); }
@@ -108,8 +110,6 @@
       &mixin_host_, embedded_test_server()};
   chromeos::KioskAppsMixin kiosk_apps_{&mixin_host_, embedded_test_server()};
   chromeos::LocalStateMixin local_state_mixin_{&mixin_host_, this};
-
-  DISALLOW_COPY_AND_ASSIGN(KioskCrashRestoreTest);
 };
 
 class ChromeKioskCrashRestoreTest : public KioskCrashRestoreTest {
diff --git a/chrome/browser/ash/app_mode/kiosk_external_update_validator.h b/chrome/browser/ash/app_mode/kiosk_external_update_validator.h
index e31eefc..27c3b69 100644
--- a/chrome/browser/ash/app_mode/kiosk_external_update_validator.h
+++ b/chrome/browser/ash/app_mode/kiosk_external_update_validator.h
@@ -44,6 +44,9 @@
       const extensions::CRXFileInfo& file,
       const base::FilePath& crx_unpack_dir,
       const base::WeakPtr<KioskExternalUpdateValidatorDelegate>& delegate);
+  KioskExternalUpdateValidator(const KioskExternalUpdateValidator&) = delete;
+  KioskExternalUpdateValidator& operator=(const KioskExternalUpdateValidator&) =
+      delete;
 
   // Starts validating the external crx file.
   void Start();
@@ -71,8 +74,6 @@
   const base::FilePath crx_unpack_dir_;
 
   base::WeakPtr<KioskExternalUpdateValidatorDelegate> delegate_;
-
-  DISALLOW_COPY_AND_ASSIGN(KioskExternalUpdateValidator);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_external_updater.h b/chrome/browser/ash/app_mode/kiosk_external_updater.h
index dfe06f0..ddfb4db 100644
--- a/chrome/browser/ash/app_mode/kiosk_external_updater.h
+++ b/chrome/browser/ash/app_mode/kiosk_external_updater.h
@@ -36,7 +36,8 @@
       const scoped_refptr<base::SequencedTaskRunner>& backend_task_runner,
       const base::FilePath& crx_cache_dir,
       const base::FilePath& crx_unpack_dir);
-
+  KioskExternalUpdater(const KioskExternalUpdater&) = delete;
+  KioskExternalUpdater& operator=(const KioskExternalUpdater&) = delete;
   ~KioskExternalUpdater() override;
 
  private:
@@ -142,8 +143,6 @@
   std::unique_ptr<KioskExternalUpdateNotification> notification_;
 
   base::WeakPtrFactory<KioskExternalUpdater> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(KioskExternalUpdater);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_mode_idle_app_name_notification.h b/chrome/browser/ash/app_mode/kiosk_mode_idle_app_name_notification.h
index 22e9c5c..10ddefb 100644
--- a/chrome/browser/ash/app_mode/kiosk_mode_idle_app_name_notification.h
+++ b/chrome/browser/ash/app_mode/kiosk_mode_idle_app_name_notification.h
@@ -26,6 +26,10 @@
   static void Shutdown();
 
   KioskModeIdleAppNameNotification();
+  KioskModeIdleAppNameNotification(const KioskModeIdleAppNameNotification&) =
+      delete;
+  KioskModeIdleAppNameNotification& operator=(
+      const KioskModeIdleAppNameNotification&) = delete;
   ~KioskModeIdleAppNameNotification() override;
 
  private:
@@ -54,8 +58,6 @@
 
   // The notification object which owns and shows the notification.
   std::unique_ptr<IdleAppNameNotificationView> notification_;
-
-  DISALLOW_COPY_AND_ASSIGN(KioskModeIdleAppNameNotification);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_profile_loader.cc b/chrome/browser/ash/app_mode/kiosk_profile_loader.cc
index d8e8645..7f7eafa 100644
--- a/chrome/browser/ash/app_mode/kiosk_profile_loader.cc
+++ b/chrome/browser/ash/app_mode/kiosk_profile_loader.cc
@@ -69,6 +69,8 @@
  public:
   explicit CryptohomedChecker(KioskProfileLoader* loader)
       : loader_(loader), retry_count_(0) {}
+  CryptohomedChecker(const CryptohomedChecker&) = delete;
+  CryptohomedChecker& operator=(const CryptohomedChecker&) = delete;
   ~CryptohomedChecker() {}
 
   void StartCheck() {
@@ -129,8 +131,6 @@
 
   KioskProfileLoader* loader_;
   int retry_count_;
-
-  DISALLOW_COPY_AND_ASSIGN(CryptohomedChecker);
 };
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/browser/ash/app_mode/kiosk_profile_loader.h b/chrome/browser/ash/app_mode/kiosk_profile_loader.h
index 64178d6..a04e9e3 100644
--- a/chrome/browser/ash/app_mode/kiosk_profile_loader.h
+++ b/chrome/browser/ash/app_mode/kiosk_profile_loader.h
@@ -43,7 +43,8 @@
   KioskProfileLoader(const AccountId& app_account_id,
                      KioskAppType app_type,
                      Delegate* delegate);
-
+  KioskProfileLoader(const KioskProfileLoader&) = delete;
+  KioskProfileLoader& operator=(const KioskProfileLoader&) = delete;
   ~KioskProfileLoader() override;
 
   // Starts profile load. Calls delegate on success or failure.
@@ -72,8 +73,6 @@
   int failed_mount_attempts_;
   std::unique_ptr<CryptohomedChecker> cryptohomed_checker_;
   std::unique_ptr<LoginPerformer> login_performer_;
-
-  DISALLOW_COPY_AND_ASSIGN(KioskProfileLoader);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/kiosk_session_plugin_handler.h b/chrome/browser/ash/app_mode/kiosk_session_plugin_handler.h
index d499598..a1bbe44 100644
--- a/chrome/browser/ash/app_mode/kiosk_session_plugin_handler.h
+++ b/chrome/browser/ash/app_mode/kiosk_session_plugin_handler.h
@@ -56,6 +56,9 @@
 
   explicit KioskSessionPluginHandler(
       KioskSessionPluginHandlerDelegate* delegate);
+  KioskSessionPluginHandler(const KioskSessionPluginHandler&) = delete;
+  KioskSessionPluginHandler& operator=(const KioskSessionPluginHandler&) =
+      delete;
   ~KioskSessionPluginHandler();
 
   void Observe(content::WebContents* contents);
@@ -69,8 +72,6 @@
 
   KioskSessionPluginHandlerDelegate* const delegate_;
   std::vector<std::unique_ptr<Observer>> watchers_;
-
-  DISALLOW_COPY_AND_ASSIGN(KioskSessionPluginHandler);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/startup_app_launcher.h b/chrome/browser/ash/app_mode/startup_app_launcher.h
index 3ac4f28..4cd54b65 100644
--- a/chrome/browser/ash/app_mode/startup_app_launcher.h
+++ b/chrome/browser/ash/app_mode/startup_app_launcher.h
@@ -38,7 +38,8 @@
   StartupAppLauncher(Profile* profile,
                      const std::string& app_id,
                      Delegate* delegate);
-
+  StartupAppLauncher(const StartupAppLauncher&) = delete;
+  StartupAppLauncher& operator=(const StartupAppLauncher&) = delete;
   ~StartupAppLauncher() override;
 
  private:
@@ -121,8 +122,6 @@
       install_observation_{this};
 
   base::WeakPtrFactory<StartupAppLauncher> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(StartupAppLauncher);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/startup_app_launcher_unittest.cc b/chrome/browser/ash/app_mode/startup_app_launcher_unittest.cc
index 3cafdf7..50155ef 100644
--- a/chrome/browser/ash/app_mode/startup_app_launcher_unittest.cc
+++ b/chrome/browser/ash/app_mode/startup_app_launcher_unittest.cc
@@ -82,6 +82,8 @@
 class TestAppLaunchDelegate : public StartupAppLauncher::Delegate {
  public:
   TestAppLaunchDelegate() = default;
+  TestAppLaunchDelegate(const TestAppLaunchDelegate&) = delete;
+  TestAppLaunchDelegate& operator=(const TestAppLaunchDelegate&) = delete;
   ~TestAppLaunchDelegate() override = default;
 
   const std::vector<LaunchState>& launch_state_changes() const {
@@ -155,8 +157,6 @@
 
   std::unique_ptr<base::RunLoop> run_loop_;
   std::set<LaunchState> waiting_for_launch_states_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestAppLaunchDelegate);
 };
 
 class AppLaunchTracker : public extensions::TestEventRouter::EventObserver {
@@ -166,6 +166,8 @@
       : app_id_(app_id), event_router_(event_router) {
     event_router->AddEventObserver(this);
   }
+  AppLaunchTracker(const AppLaunchTracker&) = delete;
+  AppLaunchTracker& operator=(const AppLaunchTracker&) = delete;
   ~AppLaunchTracker() override { event_router_->RemoveEventObserver(this); }
 
   int kiosk_launch_count() const { return kiosk_launch_count_; }
@@ -196,8 +198,6 @@
   const std::string app_id_;
   extensions::TestEventRouter* event_router_;
   int kiosk_launch_count_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(AppLaunchTracker);
 };
 
 // Simulates extension service behavior related to external extensions loading,
@@ -213,7 +213,8 @@
       : browser_context_(browser_context),
         extension_registry_(extension_registry),
         extension_service_(extension_service) {}
-
+  TestKioskLoaderVisitor(const TestKioskLoaderVisitor&) = delete;
+  TestKioskLoaderVisitor& operator=(const TestKioskLoaderVisitor&) = delete;
   ~TestKioskLoaderVisitor() override = default;
 
   const std::set<std::string>& pending_crx_files() const {
@@ -330,8 +331,6 @@
 
   std::set<std::string> pending_crx_files_;
   std::set<std::string> pending_update_urls_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestKioskLoaderVisitor);
 };
 
 }  // namespace
@@ -340,6 +339,8 @@
                                public KioskAppManager::Overrides {
  public:
   StartupAppLauncherTest() = default;
+  StartupAppLauncherTest(const StartupAppLauncherTest&) = delete;
+  StartupAppLauncherTest& operator=(const StartupAppLauncherTest&) = delete;
   ~StartupAppLauncherTest() override = default;
 
   // testing::Test:
@@ -588,8 +589,6 @@
   std::unique_ptr<extensions::ExternalProviderImpl> secondary_apps_provider_;
 
   std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_;
-
-  DISALLOW_COPY_AND_ASSIGN(StartupAppLauncherTest);
 };
 
 TEST_F(StartupAppLauncherTest, PrimaryAppLaunchFlow) {
diff --git a/chrome/browser/ash/app_mode/startup_app_launcher_update_checker.h b/chrome/browser/ash/app_mode/startup_app_launcher_update_checker.h
index bc214f7..dac88a3 100644
--- a/chrome/browser/ash/app_mode/startup_app_launcher_update_checker.h
+++ b/chrome/browser/ash/app_mode/startup_app_launcher_update_checker.h
@@ -21,6 +21,10 @@
 class StartupAppLauncherUpdateChecker : public content::NotificationObserver {
  public:
   explicit StartupAppLauncherUpdateChecker(Profile* profile);
+  StartupAppLauncherUpdateChecker(const StartupAppLauncherUpdateChecker&) =
+      delete;
+  StartupAppLauncherUpdateChecker& operator=(
+      const StartupAppLauncherUpdateChecker&) = delete;
   ~StartupAppLauncherUpdateChecker() override;
 
   using UpdateCheckCallback = base::OnceCallback<void(bool updates_found)>;
@@ -52,8 +56,6 @@
   content::NotificationRegistrar registrar_;
 
   base::WeakPtrFactory<StartupAppLauncherUpdateChecker> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(StartupAppLauncherUpdateChecker);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/test_kiosk_extension_builder.h b/chrome/browser/ash/app_mode/test_kiosk_extension_builder.h
index 3fd2549..b9f648a 100644
--- a/chrome/browser/ash/app_mode/test_kiosk_extension_builder.h
+++ b/chrome/browser/ash/app_mode/test_kiosk_extension_builder.h
@@ -24,6 +24,9 @@
  public:
   TestKioskExtensionBuilder(extensions::Manifest::Type type,
                             const std::string& extension_id);
+  TestKioskExtensionBuilder(const TestKioskExtensionBuilder&) = delete;
+  TestKioskExtensionBuilder& operator=(const TestKioskExtensionBuilder&) =
+      delete;
   ~TestKioskExtensionBuilder();
 
   const std::string& extension_id() const { return extension_id_; }
@@ -47,8 +50,6 @@
   bool offline_enabled_ = true;
   std::vector<extensions::SecondaryKioskAppInfo> secondary_extensions_;
   std::string version_ = "1.0";
-
-  DISALLOW_COPY_AND_ASSIGN(TestKioskExtensionBuilder);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_data.h b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_data.h
index 78e8889..506d1d4 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_data.h
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_data.h
@@ -36,7 +36,8 @@
                   const GURL url,
                   const std::string& title,
                   const GURL icon_url);
-
+  WebKioskAppData(const WebKioskAppData&) = delete;
+  WebKioskAppData& operator=(const WebKioskAppData&) = delete;
   ~WebKioskAppData() override;
 
   // Loads the locally cached data. Returns true on success.
@@ -77,8 +78,6 @@
   std::unique_ptr<IconFetcher> icon_fetcher_;
 
   base::WeakPtrFactory<WebKioskAppData> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(WebKioskAppData);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h
index 58177db..359cf4b 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_launcher.h
@@ -40,6 +40,8 @@
   WebKioskAppLauncher(Profile* profile,
                       Delegate* delegate,
                       const AccountId& account_id);
+  WebKioskAppLauncher(const WebKioskAppLauncher&) = delete;
+  WebKioskAppLauncher& operator=(const WebKioskAppLauncher&) = delete;
   ~WebKioskAppLauncher() override;
 
   // Replaces data retriever used for new WebAppInstallTask in tests.
@@ -83,7 +85,6 @@
   BrowserWindow* test_browser_window_ = nullptr;
 
   base::WeakPtrFactory<WebKioskAppLauncher> weak_ptr_factory_{this};
-  DISALLOW_COPY_AND_ASSIGN(WebKioskAppLauncher);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h
index de4b32e..df4fed1 100644
--- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h
+++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h
@@ -30,6 +30,8 @@
   // Will return the manager instance or will crash if it not yet initiazlied.
   static WebKioskAppManager* Get();
   WebKioskAppManager();
+  WebKioskAppManager(const WebKioskAppManager&) = delete;
+  WebKioskAppManager& operator=(const WebKioskAppManager&) = delete;
   ~WebKioskAppManager() override;
 
   // Registers kiosk app entries in local state.
@@ -67,8 +69,6 @@
 
   std::vector<std::unique_ptr<WebKioskAppData>> apps_;
   AccountId auto_launch_account_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebKioskAppManager);
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/full_restore/arc_ghost_window_shell_surface.cc b/chrome/browser/ash/full_restore/arc_ghost_window_shell_surface.cc
index 868306ef..a60c722 100644
--- a/chrome/browser/ash/full_restore/arc_ghost_window_shell_surface.cc
+++ b/chrome/browser/ash/full_restore/arc_ghost_window_shell_surface.cc
@@ -28,6 +28,7 @@
     int window_id,
     int64_t display_id,
     gfx::Rect bounds,
+    bool launch_as_minimized,
     absl::optional<gfx::Size> maximum_size,
     absl::optional<gfx::Size> minimum_size,
     absl::optional<std::u16string> title,
@@ -83,6 +84,13 @@
   // Relayout overlay.
   shell_surface->GetWidget()->LayoutRootViewIfNecessary();
 
+  // Change the minimized at the last operation, since we need create the window
+  // entity first and hide it on ash shelf.
+  if (launch_as_minimized) {
+    shell_surface->SetMinimized();
+    shell_surface->controller_surface()->Commit();
+  }
+
   return shell_surface;
 }
 
diff --git a/chrome/browser/ash/full_restore/arc_ghost_window_shell_surface.h b/chrome/browser/ash/full_restore/arc_ghost_window_shell_surface.h
index bf1fbc7c..9264338 100644
--- a/chrome/browser/ash/full_restore/arc_ghost_window_shell_surface.h
+++ b/chrome/browser/ash/full_restore/arc_ghost_window_shell_surface.h
@@ -21,6 +21,7 @@
     int window_id,
     int64_t display_id,
     gfx::Rect bounds,
+    bool launch_as_minimized,
     absl::optional<gfx::Size> maximum_size,
     absl::optional<gfx::Size> minimum_size,
     absl::optional<std::u16string> title,
diff --git a/chrome/browser/ash/full_restore/arc_window_handler.cc b/chrome/browser/ash/full_restore/arc_window_handler.cc
index d6942cc..745067b 100644
--- a/chrome/browser/ash/full_restore/arc_window_handler.cc
+++ b/chrome/browser/ash/full_restore/arc_window_handler.cc
@@ -97,7 +97,10 @@
       session_id,
       InitArcGhostWindow(
           this, app_id, session_id, restore_data->display_id.value(),
-          adjust_bounds, restore_data->maximum_size, restore_data->minimum_size,
+          adjust_bounds,
+          restore_data->window_state_type ==
+              chromeos::WindowStateType::kMinimized,
+          restore_data->maximum_size, restore_data->minimum_size,
           restore_data->title, restore_data->status_bar_color,
           base::BindRepeating(&ArcWindowHandler::CloseWindow,
                               weak_ptr_factory_.GetWeakPtr(), session_id)));
diff --git a/chrome/browser/ash/login/login_ui_browsertest.cc b/chrome/browser/ash/login/login_ui_browsertest.cc
index 1ba0efb..a820259 100644
--- a/chrome/browser/ash/login/login_ui_browsertest.cc
+++ b/chrome/browser/ash/login/login_ui_browsertest.cc
@@ -53,6 +53,9 @@
     prefs->SetBoolean(::prefs::kDeviceEnrollmentAutoStart, true);
     prefs->SetBoolean(::prefs::kDeviceEnrollmentCanExit, false);
   }
+
+ private:
+  LocalStateMixin local_state_mixin_{&mixin_host_, this};
 };
 
 // Tests that the default first screen is the welcome screen after OOBE
diff --git a/chrome/browser/ash/login/password_change_browsertest.cc b/chrome/browser/ash/login/password_change_browsertest.cc
index d420e07..4ddd6ed 100644
--- a/chrome/browser/ash/login/password_change_browsertest.cc
+++ b/chrome/browser/ash/login/password_change_browsertest.cc
@@ -19,8 +19,10 @@
 #include "chrome/browser/ash/login/session/user_session_manager.h"
 #include "chrome/browser/ash/login/session/user_session_manager_test_api.h"
 #include "chrome/browser/ash/login/signin/signin_error_notifier.h"
+#include "chrome/browser/ash/login/signin/token_handle_util.h"
 #include "chrome/browser/ash/login/signin_specifics.h"
 #include "chrome/browser/ash/login/test/js_checker.h"
+#include "chrome/browser/ash/login/test/local_state_mixin.h"
 #include "chrome/browser/ash/login/test/login_manager_mixin.h"
 #include "chrome/browser/ash/login/test/oobe_screen_waiter.h"
 #include "chrome/browser/ash/login/test/oobe_window_visibility_waiter.h"
@@ -41,9 +43,10 @@
 #include "components/user_manager/known_user.h"
 #include "components/user_manager/user_manager.h"
 #include "content/public/test/browser_test.h"
+#include "content/public/test/test_launcher.h"
 #include "content/public/test/test_utils.h"
 
-namespace chromeos {
+namespace ash {
 
 namespace {
 
@@ -530,4 +533,69 @@
   EXPECT_FALSE(TokenHandleUtil::ShouldObtainHandle(account_id_));
 }
 
-}  // namespace chromeos
+class IgnoreOldTokenTest
+    : public LoginManagerTest,
+      public chromeos::LocalStateMixin::Delegate,
+      public ::testing::WithParamInterface<bool> /* isManagedUser */ {
+ public:
+  IgnoreOldTokenTest() {
+    if (IsManagedUser())
+      login_mixin_.AppendManagedUsers(1);
+    else
+      login_mixin_.AppendRegularUsers(1);
+
+    account_id_ = login_mixin_.users()[0].account_id;
+  }
+
+  // chromeos::LocalStateMixin::Delegate:
+  void SetUpLocalState() override {
+    TokenHandleUtil::StoreTokenHandle(account_id_, kTokenHandle);
+
+    if (content::IsPreTest()) {
+      // Keep `TokenHandleRotated` flag to disable logic of neglecting not
+      // rotated token.
+      return;
+    }
+
+    user_manager::KnownUser known_user(g_browser_process->local_state());
+    // Emulate token was not rotated.
+    known_user.RemovePref(account_id_, "TokenHandleRotated");
+  }
+
+  // LoginManagerTest:
+  void SetUpInProcessBrowserTestFixture() override {
+    LoginManagerTest::SetUpInProcessBrowserTestFixture();
+    TokenHandleUtil::SetInvalidTokenForTesting(kTokenHandle);
+  }
+
+  void TearDownInProcessBrowserTestFixture() override {
+    TokenHandleUtil::SetInvalidTokenForTesting(nullptr);
+    LoginManagerTest::TearDownInProcessBrowserTestFixture();
+  }
+
+ protected:
+  bool IsManagedUser() const { return GetParam(); }
+
+  LoginManagerMixin login_mixin_{&mixin_host_};
+  AccountId account_id_;
+
+  chromeos::LocalStateMixin local_state_mixin_{&mixin_host_, this};
+};
+
+// Verify case when a user got token invalidated on a previous version and then
+// updated to the version when not rotated tokens are ignored for managed users.
+IN_PROC_BROWSER_TEST_P(IgnoreOldTokenTest, PRE_IgnoreNotRotated) {
+  ASSERT_TRUE(ash::LoginScreenTestApi::IsForcedOnlineSignin(account_id_));
+}
+
+// Old tokens should be ignored for managed users. Regular users should be
+// forced to go through online signin.
+IN_PROC_BROWSER_TEST_P(IgnoreOldTokenTest, IgnoreNotRotated) {
+  ASSERT_NE(ash::TokenHandleUtil::HasToken(account_id_), IsManagedUser());
+  ASSERT_NE(ash::LoginScreenTestApi::IsForcedOnlineSignin(account_id_),
+            IsManagedUser());
+}
+
+INSTANTIATE_TEST_SUITE_P(All, IgnoreOldTokenTest, testing::Bool());
+
+}  // namespace ash
diff --git a/chrome/browser/ash/login/signin/token_handle_util.cc b/chrome/browser/ash/login/signin/token_handle_util.cc
index edb84e42..4b5d8ed 100644
--- a/chrome/browser/ash/login/signin/token_handle_util.cc
+++ b/chrome/browser/ash/login/signin/token_handle_util.cc
@@ -8,6 +8,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/values.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/user_manager/known_user.h"
 #include "google_apis/gaia/gaia_oauth_client.h"
@@ -104,11 +105,19 @@
 
 // static
 bool TokenHandleUtil::HasToken(const AccountId& account_id) {
-  const base::DictionaryValue* dict = nullptr;
-  if (!user_manager::known_user::FindPrefs(account_id, &dict))
+  user_manager::KnownUser known_user(g_browser_process->local_state());
+  bool token_rotated = false;
+  known_user.GetBooleanPref(account_id, kTokenHandleRotated, &token_rotated);
+  if (!token_rotated && known_user.GetIsEnterpriseManaged(account_id)) {
+    // Ignore not rotated token starting from M94 for enterprise users to avoid
+    // blocking them on the login screen. Rotation started in M91.
+    ClearTokenHandle(account_id);
     return false;
-  auto* token = dict->FindStringPath(kTokenHandlePref);
-  return token && !token->empty();
+  }
+
+  std::string token;
+  return known_user.GetStringPref(account_id, kTokenHandlePref, &token) &&
+         !token.empty();
 }
 
 // static
@@ -179,13 +188,24 @@
 // static
 void TokenHandleUtil::StoreTokenHandle(const AccountId& account_id,
                                        const std::string& handle) {
-  user_manager::known_user::SetStringPref(account_id, kTokenHandlePref, handle);
-  user_manager::known_user::SetStringPref(account_id, kTokenHandleStatusPref,
-                                          kHandleStatusValid);
-  user_manager::known_user::SetBooleanPref(account_id, kTokenHandleRotated,
-                                           true);
-  user_manager::known_user::SetPref(account_id, kTokenHandleLastCheckedPref,
-                                    base::TimeToValue(base::Time::Now()));
+  user_manager::KnownUser known_user(g_browser_process->local_state());
+
+  known_user.SetStringPref(account_id, kTokenHandlePref, handle);
+  known_user.SetStringPref(account_id, kTokenHandleStatusPref,
+                           kHandleStatusValid);
+  known_user.SetBooleanPref(account_id, kTokenHandleRotated, true);
+  known_user.SetPref(account_id, kTokenHandleLastCheckedPref,
+                     base::TimeToValue(base::Time::Now()));
+}
+
+// static
+void TokenHandleUtil::ClearTokenHandle(const AccountId& account_id) {
+  user_manager::KnownUser known_user(g_browser_process->local_state());
+
+  known_user.RemovePref(account_id, kTokenHandlePref);
+  known_user.RemovePref(account_id, kTokenHandleStatusPref);
+  known_user.RemovePref(account_id, kTokenHandleRotated);
+  known_user.RemovePref(account_id, kTokenHandleLastCheckedPref);
 }
 
 // static
diff --git a/chrome/browser/ash/login/signin/token_handle_util.h b/chrome/browser/ash/login/signin/token_handle_util.h
index c691349d..2d59f7ff 100644
--- a/chrome/browser/ash/login/signin/token_handle_util.h
+++ b/chrome/browser/ash/login/signin/token_handle_util.h
@@ -58,6 +58,8 @@
   static void StoreTokenHandle(const AccountId& account_id,
                                const std::string& handle);
 
+  static void ClearTokenHandle(const AccountId& account_id);
+
   static void SetInvalidTokenForTesting(const char* token);
 
   static void SetLastCheckedPrefForTesting(const AccountId& account_id,
diff --git a/chrome/browser/ash/login/test/local_state_mixin.cc b/chrome/browser/ash/login/test/local_state_mixin.cc
index 95dd2a36f..a285d46 100644
--- a/chrome/browser/ash/login/test/local_state_mixin.cc
+++ b/chrome/browser/ash/login/test/local_state_mixin.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/chrome_browser_main_extra_parts.h"
 #include "components/user_manager/fake_user_manager.h"
 #include "components/user_manager/scoped_user_manager.h"
+#include "testing/gtest/include/gtest/gtest.h"
 
 namespace chromeos {
 
@@ -31,7 +32,7 @@
     auto user_manager = std::make_unique<user_manager::FakeUserManager>();
     user_manager->set_local_state(g_browser_process->local_state());
     user_manager::ScopedUserManager scoper(std::move(user_manager));
-    delegate_->SetUpLocalState();
+    delegate_->SetUpLocalStateBase();
   }
 
  private:
@@ -53,4 +54,14 @@
       ->AddParts(std::make_unique<TestMainExtraPart>(delegate_));
 }
 
+void LocalStateMixin::LocalStateMixin::Delegate::SetUpLocalStateBase() {
+  ASSERT_FALSE(setup_called_);
+  setup_called_ = true;
+  SetUpLocalState();
+}
+
+LocalStateMixin::LocalStateMixin::Delegate::~Delegate() {
+  EXPECT_TRUE(setup_called_) << "Forgot to use LocalStateMixin?";
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/ash/login/test/local_state_mixin.h b/chrome/browser/ash/login/test/local_state_mixin.h
index ec93cad..810acc2 100644
--- a/chrome/browser/ash/login/test/local_state_mixin.h
+++ b/chrome/browser/ash/login/test/local_state_mixin.h
@@ -14,8 +14,15 @@
  public:
   class Delegate {
    public:
+    void SetUpLocalStateBase();
+
+    ~Delegate();
+
+   private:
     // Implement this function to setup g_browser_process->local_state()
     virtual void SetUpLocalState() = 0;
+
+    bool setup_called_ = false;
   };
   LocalStateMixin(InProcessBrowserTestMixinHost* host, Delegate* delegate);
 
diff --git a/chrome/browser/ash/login/test/login_manager_mixin.cc b/chrome/browser/ash/login/test/login_manager_mixin.cc
index 5ee54ea..62ac553 100644
--- a/chrome/browser/ash/login/test/login_manager_mixin.cc
+++ b/chrome/browser/ash/login/test/login_manager_mixin.cc
@@ -10,6 +10,7 @@
 
 #include "base/command_line.h"
 #include "base/containers/contains.h"
+#include "base/strings/string_util.h"
 #include "chrome/browser/ash/login/existing_user_controller.h"
 #include "chrome/browser/ash/login/session/user_session_manager.h"
 #include "chrome/browser/ash/login/session/user_session_manager_test_api.h"
@@ -24,6 +25,7 @@
 #include "components/prefs/pref_service.h"
 #include "components/prefs/scoped_user_pref_update.h"
 #include "components/user_manager/known_user.h"
+#include "google_apis/gaia/gaia_auth_util.h"
 
 namespace chromeos {
 
@@ -125,6 +127,11 @@
           user.account_id,
           user_manager::ProfileRequiresPolicy::kPolicyRequired);
     }
+
+    if (base::EndsWith(kManagedDomain, gaia::ExtractDomainName(
+                                           user.account_id.GetUserEmail()))) {
+      user_manager::known_user::SetIsEnterpriseManaged(user.account_id, true);
+    }
   }
 
   StartupUtils::MarkOobeCompleted();
diff --git a/chrome/browser/ash/policy/dlp/dlp_content_manager_browsertest.cc b/chrome/browser/ash/policy/dlp/dlp_content_manager_browsertest.cc
index ad61cb6..bb0d940 100644
--- a/chrome/browser/ash/policy/dlp/dlp_content_manager_browsertest.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_content_manager_browsertest.cc
@@ -63,6 +63,8 @@
                                                 DlpRulesManager::Level::kBlock);
 const DlpContentRestrictionSet kPrintReported(DlpContentRestriction::kPrint,
                                               DlpRulesManager::Level::kReport);
+const DlpContentRestrictionSet kPrintWarn(DlpContentRestriction::kPrint,
+                                          DlpRulesManager::Level::kWarn);
 const DlpContentRestrictionSet kVideoCaptureRestricted(
     DlpContentRestriction::kVideoCapture,
     DlpRulesManager::Level::kBlock);
@@ -744,6 +746,25 @@
       display_service_tester.GetNotification(kPrintBlockedNotificationId));
 }
 
+IN_PROC_BROWSER_TEST_F(DlpContentManagerReportingBrowserTest, PrintingWarn) {
+  // Set up mock rules manager.
+  SetupDlpRulesManager();
+
+  ui_test_utils::NavigateToURL(browser(), GURL(kExampleUrl));
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+
+  EXPECT_FALSE(
+      helper_.GetContentManager()->ShouldWarnBeforePrinting(web_contents));
+
+  // Set up printing restriction.
+  helper_.ChangeConfidentiality(web_contents, kPrintWarn);
+
+  EXPECT_TRUE(
+      helper_.GetContentManager()->ShouldWarnBeforePrinting(web_contents));
+  EXPECT_FALSE(helper_.GetContentManager()->IsPrintingRestricted(web_contents));
+}
+
 class DlpContentManagerPolicyBrowserTest : public LoginPolicyTestBase {
  public:
   DlpContentManagerPolicyBrowserTest() = default;
diff --git a/chrome/browser/background/background_mode_manager_unittest.cc b/chrome/browser/background/background_mode_manager_unittest.cc
index 423f01c5..a7ef1a84 100644
--- a/chrome/browser/background/background_mode_manager_unittest.cc
+++ b/chrome/browser/background/background_mode_manager_unittest.cc
@@ -8,10 +8,10 @@
 
 #include <memory>
 #include <string>
+#include <utility>
 
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "base/macros.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_simple_task_runner.h"
@@ -57,6 +57,7 @@
 using testing::Exactly;
 using testing::InSequence;
 using testing::Mock;
+using testing::NiceMock;
 using testing::StrictMock;
 
 namespace {
@@ -74,12 +75,12 @@
  public:
   TestBackgroundModeManager(const base::CommandLine& command_line,
                             ProfileAttributesStorage* storage)
-      : StrictMock<BackgroundModeManager>(command_line, storage),
-        have_status_tray_(false),
-        has_shown_balloon_(false) {
+      : StrictMock<BackgroundModeManager>(command_line, storage) {
     ResumeBackgroundMode();
   }
-  ~TestBackgroundModeManager() override {}
+  TestBackgroundModeManager(TestBackgroundModeManager&) = delete;
+  TestBackgroundModeManager& operator=(TestBackgroundModeManager&) = delete;
+  ~TestBackgroundModeManager() override = default;
 
   MOCK_METHOD1(EnableLaunchOnStartup, void(bool should_launch));
 
@@ -96,15 +97,16 @@
 
  private:
   // Flags to track whether we have a status tray/have shown the balloon.
-  bool have_status_tray_;
-  bool has_shown_balloon_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestBackgroundModeManager);
+  bool have_status_tray_ = false;
+  bool has_shown_balloon_ = false;
 };
 
 class TestStatusIcon : public StatusIcon {
  public:
-  TestStatusIcon() {}
+  TestStatusIcon() = default;
+  TestStatusIcon(TestStatusIcon&) = delete;
+  TestStatusIcon& operator=(TestStatusIcon&) = delete;
+
   void SetImage(const gfx::ImageSkia& image) override {}
   void SetToolTip(const std::u16string& tool_tip) override {}
   void DisplayBalloon(const gfx::ImageSkia& icon,
@@ -112,9 +114,6 @@
                       const std::u16string& contents,
                       const message_center::NotifierId& notifier_id) override {}
   void UpdatePlatformContextMenu(StatusIconMenuModel* menu) override {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestStatusIcon);
 };
 
 void AssertBackgroundModeActive(const TestBackgroundModeManager& manager) {
@@ -138,7 +137,11 @@
                                     ProfileAttributesStorage* storage,
                                     bool enabled)
       : TestBackgroundModeManager(command_line, storage), enabled_(enabled) {}
-  ~AdvancedTestBackgroundModeManager() override {}
+  AdvancedTestBackgroundModeManager(AdvancedTestBackgroundModeManager&) =
+      delete;
+  AdvancedTestBackgroundModeManager& operator=(
+      AdvancedTestBackgroundModeManager&) = delete;
+  ~AdvancedTestBackgroundModeManager() override = default;
 
   // TestBackgroundModeManager:
   bool HasPersistentBackgroundClient() const override {
@@ -189,14 +192,14 @@
   };
   bool enabled_;
   std::map<const Profile*, AppCounts> profile_app_counts_;
-
-  DISALLOW_COPY_AND_ASSIGN(AdvancedTestBackgroundModeManager);
 };
 
 class BackgroundModeManagerTest : public testing::Test {
  public:
-  BackgroundModeManagerTest() {}
-  ~BackgroundModeManagerTest() override {}
+  BackgroundModeManagerTest() = default;
+  BackgroundModeManagerTest(BackgroundModeManagerTest&) = delete;
+  BackgroundModeManagerTest& operator=(BackgroundModeManagerTest&) = delete;
+  ~BackgroundModeManagerTest() override = default;
 
   void SetUp() override {
     command_line_ =
@@ -214,20 +217,21 @@
   content::BrowserTaskEnvironment task_environment_;
   std::unique_ptr<base::CommandLine> command_line_;
 
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 
   std::unique_ptr<TestingProfileManager> profile_manager_;
   // Test profile used by all tests - this is owned by profile_manager_.
   TestingProfile* profile_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(BackgroundModeManagerTest);
 };
 
 class BackgroundModeManagerWithExtensionsTest : public testing::Test {
  public:
-  BackgroundModeManagerWithExtensionsTest() {}
-  ~BackgroundModeManagerWithExtensionsTest() override {}
+  BackgroundModeManagerWithExtensionsTest() = default;
+  BackgroundModeManagerWithExtensionsTest(
+      BackgroundModeManagerWithExtensionsTest&) = delete;
+  BackgroundModeManagerWithExtensionsTest& operator=(
+      BackgroundModeManagerWithExtensionsTest&) = delete;
+  ~BackgroundModeManagerWithExtensionsTest() override = default;
 
   void SetUp() override {
     command_line_ =
@@ -316,8 +320,6 @@
   ash::ScopedCrosSettingsTestHelper cros_settings_test_helper_;
   ash::ScopedTestUserManager test_user_manager_;
 #endif
-
-  DISALLOW_COPY_AND_ASSIGN(BackgroundModeManagerWithExtensionsTest);
 };
 
 
@@ -832,15 +834,15 @@
   // CEO: Component Extenison with Options Menu Item
   // RE: Regular Extension Menu Item
   // REO: Regular Extension with Options Menu Item
-  EXPECT_FALSE(IsCommandEnabled(context_menu, 0)); // P1 - CE
-  EXPECT_TRUE(IsCommandEnabled(context_menu, 1));  // P1 - CEO
-  EXPECT_TRUE(IsCommandEnabled(context_menu, 2));  // P1 - RE
-  EXPECT_TRUE(IsCommandEnabled(context_menu, 3));  // P1 - REO
-  EXPECT_TRUE(IsCommandEnabled(context_menu, 4));  // P1
-  EXPECT_FALSE(IsCommandEnabled(context_menu, 5)); // P2 - CE
-  EXPECT_TRUE(IsCommandEnabled(context_menu, 6));  // P2 - RE
-  EXPECT_TRUE(IsCommandEnabled(context_menu, 7));  // P2 - REO
-  EXPECT_TRUE(IsCommandEnabled(context_menu, 8));  // P2
+  EXPECT_FALSE(IsCommandEnabled(context_menu, 0));  // P1 - CE
+  EXPECT_TRUE(IsCommandEnabled(context_menu, 1));   // P1 - CEO
+  EXPECT_TRUE(IsCommandEnabled(context_menu, 2));   // P1 - RE
+  EXPECT_TRUE(IsCommandEnabled(context_menu, 3));   // P1 - REO
+  EXPECT_TRUE(IsCommandEnabled(context_menu, 4));   // P1
+  EXPECT_FALSE(IsCommandEnabled(context_menu, 5));  // P2 - CE
+  EXPECT_TRUE(IsCommandEnabled(context_menu, 6));   // P2 - RE
+  EXPECT_TRUE(IsCommandEnabled(context_menu, 7));   // P2 - REO
+  EXPECT_TRUE(IsCommandEnabled(context_menu, 8));   // P2
 }
 
 TEST_F(BackgroundModeManagerWithExtensionsTest, BalloonDisplay) {
@@ -903,7 +905,7 @@
 
   // Upgrading an extension that has background should not reshow the balloon.
   {
-    // TODO: Fix crbug.com/438376 and remove these checks.
+    // TODO(crbug.com/438376): Fix crbug.com/438376 and remove these checks.
     InSequence expected_call_sequence;
     EXPECT_CALL(*manager_, EnableLaunchOnStartup(false)).Times(Exactly(1));
     EXPECT_CALL(*manager_, EnableLaunchOnStartup(true)).Times(Exactly(1));
diff --git a/chrome/browser/captive_portal/captive_portal_browsertest.cc b/chrome/browser/captive_portal/captive_portal_browsertest.cc
index 96cad052..8babee4c 100644
--- a/chrome/browser/captive_portal/captive_portal_browsertest.cc
+++ b/chrome/browser/captive_portal/captive_portal_browsertest.cc
@@ -25,6 +25,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
@@ -565,7 +566,6 @@
   // InProcessBrowserTest:
   void SetUpOnMainThread() override;
   void TearDownOnMainThread() override;
-  void SetUpCommandLine(base::CommandLine* command_line) override;
 
   // Called by |url_loader_interceptor_|.
   // It emulates captive portal behavior.
@@ -574,8 +574,7 @@
   // behind a captive portal.
   bool OnIntercept(content::URLLoaderInterceptor::RequestParams* params);
 
-  // Sets the captive portal checking preference.  Does not affect the command
-  // line flag, which is set in SetUpCommandLine.
+  // Sets the captive portal checking preference.
   void EnableCaptivePortalDetection(Profile* profile, bool enabled);
 
   // Enables or disables actual captive portal probes. Should only be called
@@ -924,6 +923,7 @@
   }
 
  protected:
+  base::test::ScopedFeatureList feature_list_;
   std::unique_ptr<content::URLLoaderInterceptor> url_loader_interceptor_;
   std::unique_ptr<base::RunLoop> run_loop_;
   // Only accessed on the UI thread.
@@ -949,6 +949,7 @@
       scoped_domain_(false),
 #endif
       browser_list_(BrowserList::GetInstance()) {
+  feature_list_.InitAndEnableFeature(kCaptivePortalInterstitial);
 }
 
 CaptivePortalBrowserTest::~CaptivePortalBrowserTest() = default;
@@ -1098,13 +1099,6 @@
   url_loader_interceptor_.reset();
 }
 
-void CaptivePortalBrowserTest::SetUpCommandLine(
-    base::CommandLine* command_line) {
-  // Enable finch experiment for captive portal interstitials.
-  command_line->AppendSwitchASCII(
-      switches::kForceFieldTrials, "CaptivePortalInterstitial/Enabled/");
-}
-
 void CaptivePortalBrowserTest::EnableCaptivePortalDetection(
     Profile* profile, bool enabled) {
   profile->GetPrefs()->SetBoolean(embedder_support::kAlternateErrorPagesEnabled,
diff --git a/chrome/browser/chrome_navigation_browsertest.cc b/chrome/browser/chrome_navigation_browsertest.cc
index d2f8ce6..da483e6 100644
--- a/chrome/browser/chrome_navigation_browsertest.cc
+++ b/chrome/browser/chrome_navigation_browsertest.cc
@@ -68,7 +68,6 @@
 #include "extensions/test/test_extension_dir.h"
 #include "google_apis/gaia/gaia_switches.h"
 #include "net/dns/mock_host_resolver.h"
-#include "net/test/spawned_test_server/spawned_test_server.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/network/public/cpp/features.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -1129,114 +1128,6 @@
       web_contents->GetMainFrame()->GetSiteInstance()));
 }
 
-// Helper class. Track one navigation and tell whether a response from the
-// server has been received or not. It is useful for discerning navigations
-// blocked after or before the request has been sent.
-class WillProcessResponseObserver : public content::WebContentsObserver {
- public:
-  explicit WillProcessResponseObserver(content::WebContents* web_contents,
-                                       const GURL& url)
-      : content::WebContentsObserver(web_contents), url_(url) {}
-  ~WillProcessResponseObserver() override {}
-
-  bool WillProcessResponseCalled() { return will_process_response_called_; }
-
- private:
-  GURL url_;
-  bool will_process_response_called_ = false;
-
-  // Is used to set |will_process_response_called_| to true when
-  // NavigationThrottle::WillProcessResponse() is called.
-  class WillProcessResponseObserverThrottle
-      : public content::NavigationThrottle {
-   public:
-    WillProcessResponseObserverThrottle(content::NavigationHandle* handle,
-                                        bool* will_process_response_called)
-        : NavigationThrottle(handle),
-          will_process_response_called_(will_process_response_called) {}
-
-    const char* GetNameForLogging() override {
-      return "WillProcessResponseObserverThrottle";
-    }
-
-   private:
-    bool* will_process_response_called_;
-    NavigationThrottle::ThrottleCheckResult WillProcessResponse() override {
-      *will_process_response_called_ = true;
-      return NavigationThrottle::PROCEED;
-    }
-  };
-
-  // WebContentsObserver
-  void DidStartNavigation(content::NavigationHandle* handle) override {
-    if (handle->GetURL() == url_) {
-      handle->RegisterThrottleForTesting(
-          std::make_unique<WillProcessResponseObserverThrottle>(
-              handle, &will_process_response_called_));
-    }
-  }
-};
-
-// In HTTP/HTTPS documents, check that no request with the "ftp:" scheme are
-// submitted to load an iframe.
-// See https://crbug.com/757809.
-// Note: This test couldn't be a content_browsertests, since there would be
-// no handler defined for the "ftp" protocol in
-// URLRequestJobFactoryImpl::protocol_handler_map_.
-IN_PROC_BROWSER_TEST_F(ChromeNavigationBrowserTest, BlockLegacySubresources) {
-  net::SpawnedTestServer ftp_server(net::SpawnedTestServer::TYPE_FTP,
-                                    GetChromeTestDataDir());
-  ASSERT_TRUE(ftp_server.Start());
-
-  GURL main_url_http(embedded_test_server()->GetURL("/iframe.html"));
-  GURL iframe_url_http(embedded_test_server()->GetURL("/simple.html"));
-  GURL iframe_url_ftp(ftp_server.GetURL("simple.html"));
-  GURL redirect_url(embedded_test_server()->GetURL("/server-redirect?"));
-
-  struct {
-    GURL main_url;
-    GURL iframe_url;
-    bool allowed;
-  } kTestCases[] = {
-      {main_url_http, iframe_url_http, true},
-      {main_url_http, iframe_url_ftp, false},
-  };
-  for (const auto& test_case : kTestCases) {
-    // Blocking the request should work, even after a redirect.
-    for (bool redirect : {false, true}) {
-      GURL iframe_url =
-          redirect ? GURL(redirect_url.spec() + test_case.iframe_url.spec())
-                   : test_case.iframe_url;
-      SCOPED_TRACE(::testing::Message()
-                   << std::endl
-                   << "- main_url = " << test_case.main_url << std::endl
-                   << "- iframe_url = " << iframe_url << std::endl);
-
-      ui_test_utils::NavigateToURL(browser(), test_case.main_url);
-      content::WebContents* web_contents =
-          browser()->tab_strip_model()->GetActiveWebContents();
-      content::NavigationHandleObserver navigation_handle_observer(web_contents,
-                                                                   iframe_url);
-      WillProcessResponseObserver will_process_response_observer(web_contents,
-                                                                 iframe_url);
-      EXPECT_TRUE(NavigateIframeToURL(web_contents, "test", iframe_url));
-
-      if (test_case.allowed) {
-        EXPECT_TRUE(will_process_response_observer.WillProcessResponseCalled());
-        EXPECT_FALSE(navigation_handle_observer.is_error());
-        EXPECT_EQ(test_case.iframe_url,
-                  navigation_handle_observer.last_committed_url());
-      } else {
-        EXPECT_FALSE(
-            will_process_response_observer.WillProcessResponseCalled());
-        EXPECT_TRUE(navigation_handle_observer.is_error());
-        EXPECT_EQ(net::ERR_ABORTED,
-                  navigation_handle_observer.net_error_code());
-      }
-    }
-  }
-}
-
 // Check that it's possible to navigate to a chrome scheme URL from a crashed
 // tab. See https://crbug.com/764641.
 IN_PROC_BROWSER_TEST_F(ChromeNavigationBrowserTest, ChromeSchemeNavFromSadTab) {
diff --git a/chrome/browser/content_creation/notes/internal/android/java/src/org/chromium/chrome/browser/content_creation/notes/NoteCreationDialog.java b/chrome/browser/content_creation/notes/internal/android/java/src/org/chromium/chrome/browser/content_creation/notes/NoteCreationDialog.java
index 396e263..a1c265e 100644
--- a/chrome/browser/content_creation/notes/internal/android/java/src/org/chromium/chrome/browser/content_creation/notes/NoteCreationDialog.java
+++ b/chrome/browser/content_creation/notes/internal/android/java/src/org/chromium/chrome/browser/content_creation/notes/NoteCreationDialog.java
@@ -97,17 +97,15 @@
         // There is a corner case where this function can be triggered by toggling the battery saver
         // state, resulting in all the variables being reset. The only way out is to destroy this
         // dialog to bring the user back to the web page.
-        if (getNoteViewAt(0) == null) {
+        if (mTitle == null) {
             onDestroyView();
             return;
         }
 
-        // Re-calculate the left/right paddings for first/last items.
-        setPadding(true, false, getNoteViewAt(0));
-
+        // Force recycler view to redraw to recalculate the left/right paddings for first/last
+        // items.
         RecyclerView noteCarousel = mContentView.findViewById(R.id.note_carousel);
-        int lastIndex = noteCarousel.getAdapter().getItemCount() - 1;
-        if (getNoteViewAt(lastIndex) != null) setPadding(false, true, getNoteViewAt(lastIndex));
+        noteCarousel.getAdapter().notifyDataSetChanged();
         centerCurrentNote();
     }
 
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index cd97609..4b51696 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -439,13 +439,13 @@
   },
   {
     "name": "autofill-use-improved-label-disambiguation",
-    "owners": [ "fhorschig" ],
-    "expiry_milestone": 90
+    "owners": [ "autofill-squad-muc@google.com" ],
+    "expiry_milestone": 98
   },
   {
     "name": "autofill-use-mobile-label-disambiguation",
-    "owners": [ "fhorschig" ],
-    "expiry_milestone": 90
+    "owners": [ "autofill-squad-muc@google.com" ],
+    "expiry_milestone": 98
   },
   {
     "name": "autofill-use-renderer-ids",
@@ -555,7 +555,7 @@
   {
     "name": "categorical-search",
     "owners": [ "tby", "thanhdng", "wrong" ],
-    "expiry_milestone": 96
+    "expiry_milestone": 100
   },
   {
     "name": "cct-incognito",
@@ -1254,8 +1254,8 @@
   },
   {
     "name": "edit-passwords-in-settings",
-    "owners": [ "fhorschig", "ioanap", "jdoerrie" ],
-    "expiry_milestone": 93
+    "owners": [ "fhorschig", "ioanap", "kazinova" ],
+    "expiry_milestone": 98
   },
   {
     "name": "elastic-overscroll",
@@ -1531,7 +1531,7 @@
   {
     "name": "enable-cros-action-recorder",
     "owners": [ "charleszhao", "tby" ],
-    "expiry_milestone": 93
+    "expiry_milestone": 96
   },
   {
     "name": "enable-cros-ime-assist-autocorrect",
@@ -2543,13 +2543,13 @@
   },
   {
     "name": "enable-suggested-files",
-    "owners": [ "edimitriadis", "tby", "wrong" ],
-    "expiry_milestone": 95
+    "owners": [ "wrong", "tby" ],
+    "expiry_milestone": 100
   },
   {
     "name": "enable-suggestions-with-substring-match",
-    "owners": [ "fhorschig" ],
-    "expiry_milestone": 90
+    "owners": [ "autofill-squad-muc@google.com" ],
+    "expiry_milestone": 98
   },
   {
     "name": "enable-surface-control",
@@ -3589,7 +3589,7 @@
   {
     "name": "launcher-search-normalization",
     "owners": ["wrong", "tby"],
-    "expiry_milestone": 95
+    "expiry_milestone": 96
   },
   {
     "name": "legacy-tls-enforced",
diff --git a/chrome/browser/media/history/media_history_browsertest.cc b/chrome/browser/media/history/media_history_browsertest.cc
index 0028cf48f..9386ad1 100644
--- a/chrome/browser/media/history/media_history_browsertest.cc
+++ b/chrome/browser/media/history/media_history_browsertest.cc
@@ -1175,7 +1175,6 @@
       : prerender_helper_(base::BindRepeating(
             &MediaHistoryForPrerenderBrowserTest::web_contents,
             base::Unretained(this))) {
-    feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
   }
 
   void SetUp() override {
diff --git a/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer_browsertest.cc
index 065c4b5..014a5bd 100644
--- a/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer_browsertest.cc
+++ b/chrome/browser/page_load_metrics/observers/prerender_page_load_metrics_observer_browsertest.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include "base/containers/contains.h"
-#include "base/test/scoped_feature_list.h"
 #include "chrome/browser/page_load_metrics/integration_tests/metric_integration_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/page_load_metrics/browser/observers/prerender_page_load_metrics_observer.h"
@@ -22,9 +21,7 @@
   PrerenderPageLoadMetricsObserverBrowserTest()
       : prerender_helper_(base::BindRepeating(
             &PrerenderPageLoadMetricsObserverBrowserTest::web_contents,
-            base::Unretained(this))) {
-    feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
-  }
+            base::Unretained(this))) {}
   ~PrerenderPageLoadMetricsObserverBrowserTest() override = default;
 
   void SetUp() override {
@@ -52,7 +49,6 @@
 
  protected:
   content::test::PrerenderTestHelper prerender_helper_;
-  base::test::ScopedFeatureList feature_list_;
 };
 
 IN_PROC_BROWSER_TEST_F(PrerenderPageLoadMetricsObserverBrowserTest,
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java
index ca88848..64d2442d 100644
--- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java
+++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java
@@ -8,7 +8,7 @@
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.base.task.PostTask;
 import org.chromium.base.task.TaskTraits;
-import org.chromium.components.sync.protocol.PasswordSpecificsData;
+import org.chromium.components.sync.protocol.ListPasswordsResult;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -45,7 +45,7 @@
             if (mNativeBackendBridge == 0) return;
             // TODO(crbug.com/1229654):Implement.
             PasswordStoreAndroidBackendBridgeImplJni.get().onCompleteWithLogins(
-                    mNativeBackendBridge, taskId, new PasswordSpecificsData[0]);
+                    mNativeBackendBridge, taskId, ListPasswordsResult.getDefaultInstance());
         });
     }
 
@@ -57,6 +57,6 @@
     @NativeMethods
     interface Natives {
         void onCompleteWithLogins(long nativePasswordStoreAndroidBackendBridgeImpl,
-                @TaskId int taskId, PasswordSpecificsData[] passwords);
+                @TaskId int taskId, ListPasswordsResult passwords);
     }
 }
diff --git a/chrome/browser/password_manager/android/password_store_android_backend_bridge_impl.cc b/chrome/browser/password_manager/android/password_store_android_backend_bridge_impl.cc
index 0388b4f..cecdf75 100644
--- a/chrome/browser/password_manager/android/password_store_android_backend_bridge_impl.cc
+++ b/chrome/browser/password_manager/android/password_store_android_backend_bridge_impl.cc
@@ -38,7 +38,7 @@
 void PasswordStoreAndroidBackendBridgeImpl::OnCompleteWithLogins(
     JNIEnv* env,
     jint task_id,
-    jobjectArray passwords) {
+    const base::android::JavaParamRef<jobject>& passwords) {
   DCHECK(consumer_);
   // TODO(crbug.com/1229650): Convert passwords to forms.
   consumer_->OnCompleteWithLogins(TaskId(task_id), {});
diff --git a/chrome/browser/password_manager/android/password_store_android_backend_bridge_impl.h b/chrome/browser/password_manager/android/password_store_android_backend_bridge_impl.h
index 560e795e..91bbe678 100644
--- a/chrome/browser/password_manager/android/password_store_android_backend_bridge_impl.h
+++ b/chrome/browser/password_manager/android/password_store_android_backend_bridge_impl.h
@@ -30,7 +30,10 @@
 
   // Called via JNI. Called when the api call with `task_id` finished and
   // provides the resulting `passwords`.
-  void OnCompleteWithLogins(JNIEnv* env, jint task_id, jobjectArray passwords);
+  void OnCompleteWithLogins(
+      JNIEnv* env,
+      jint task_id,
+      const base::android::JavaParamRef<jobject>& passwords);
 
  private:
   // Implements PasswordStoreAndroidBackendBridge interface.
diff --git a/chrome/browser/profiles/incognito_profile_containment_browsertest.cc b/chrome/browser/profiles/incognito_profile_containment_browsertest.cc
index 05a4a98..fea9d13 100644
--- a/chrome/browser/profiles/incognito_profile_containment_browsertest.cc
+++ b/chrome/browser/profiles/incognito_profile_containment_browsertest.cc
@@ -31,11 +31,16 @@
 // List of file or directory prefixes that are known to be modified during an
 // Incognito session.
 // TODO(http://crbug.com/1234755): Audit why these files are changed.
-constexpr std::array<const char*, 7> kAllowListForChangePrefix = {
+constexpr std::array<const char*, 7> kAllowListPrefixesForAllPlatforms = {
     "/Default/GCM Store/",      "/Default/Network Action Predictor",
     "/Default/PreferredApps",   "/Default/Reporting and NEL",
     "/Default/shared_proto_db", "/Default/Trust Tokens",
     "/GrShaderCache/GPUCache"};
+#if defined(OS_MAC)
+constexpr std::array<const char*, 4> kAllowListPrefixesForMac = {
+    "/Default/data_reduction_proxy_leveldb", "/Default/Preferences",
+    "/Default/Shortcuts", "/Default/Visited Links"};
+#endif
 
 // Structure that keeps data about a snapshotted file.
 struct FileData {
@@ -87,16 +92,9 @@
   return;
 }
 
-bool IsDiskModificationAllowed(const std::string& relative_file_path,
-                               const FileData& before,
-                               const FileData& after) {
-  // If allow-listed, ignore.
-  for (auto* prefix : kAllowListForChangePrefix) {
-    if (relative_file_path.find(prefix) == 0)
-      return true;
-  }
-  // TODO(http://crbug.com/1234755): Consider auditing files that are touched as
-  // well.
+bool IsFileModified(FileData& before, FileData& after) {
+  // TODO(http://crbug.com/1234755): Also consider auditing files that are
+  // touched or are unreadable.
   // If it was readable before, and is readable now, compare hash codes.
   if (before.file_hash_is_valid) {
     uint32_t hash_code;
@@ -109,7 +107,9 @@
   return false;
 }
 
-bool IsDiskStateModified(Snapshot& snapshot_before, Snapshot& snapshot_after) {
+bool IsDiskStateModified(Snapshot& snapshot_before,
+                         Snapshot& snapshot_after,
+                         std::set<const char*>& allow_list) {
   bool modified = false;
   // TODO(http://crbug.com/1234755): Consider deleted files as well. Currently
   // we only look for added and modified files, but file deletion is also
@@ -119,16 +119,22 @@
     bool is_new = (before == snapshot_before.end());
     if (is_new ||
         fd.second.last_modified_time != before->second.last_modified_time) {
+      // Ignore allow-listed paths.
+      if (std::any_of(allow_list.begin(), allow_list.end(),
+                      [&fd](const char* prefix) {
+                        return fd.first.find(prefix) == 0;
+                      })) {
+        continue;
+      }
+
       // If an empty file is added or modified, ignore for now.
       // TODO(http://crbug.com/1234755): Consider newly added empty files.
       if (!fd.second.size)
         continue;
 
-      // If modification of a file is allow-listed or data content is not
-      // changed, it can be ignored.
-      if (IsDiskModificationAllowed(fd.first, before->second, fd.second)) {
+      // If data content is not changed, it can be ignored.
+      if (IsFileModified(before->second, fd.second))
         continue;
-      }
 
       modified = true;
 
@@ -144,7 +150,14 @@
 
 class IncognitoProfileContainmentBrowserTest : public InProcessBrowserTest {
  public:
-  IncognitoProfileContainmentBrowserTest() = default;
+  IncognitoProfileContainmentBrowserTest()
+      : allow_list_(std::begin(kAllowListPrefixesForAllPlatforms),
+                    std::end(kAllowListPrefixesForAllPlatforms)) {
+#if defined(OS_MAC)
+    allow_list_.insert(std::begin(kAllowListPrefixesForMac),
+                       std::end(kAllowListPrefixesForMac));
+#endif
+  }
 
   void SetUpOnMainThread() override {
     InProcessBrowserTest::SetUpOnMainThread();
@@ -158,6 +171,9 @@
     InProcessBrowserTest::SetUpCommandLine(command_line);
     command_line->AppendSwitch(switches::kIncognito);
   }
+
+ protected:
+  std::set<const char*> allow_list_;
 };
 
 // TODO(http://crbug.com/1234755): There is a lot of clutter on Windows (and a
@@ -207,7 +223,8 @@
   // computed only if needed.
   Snapshot after_incognito;
   GetUserDirectorySnapshot(after_incognito, /*compute_file_hashes=*/false);
-  EXPECT_FALSE(IsDiskStateModified(before_incognito, after_incognito));
+  EXPECT_FALSE(
+      IsDiskStateModified(before_incognito, after_incognito, allow_list_));
 }
 
 // TODO(http://crbug.com/1234755): Add more complex naviagtions, triggering
diff --git a/chrome/browser/resources/chromeos/audio/BUILD.gn b/chrome/browser/resources/chromeos/audio/BUILD.gn
index 8144397..15ab4bf 100644
--- a/chrome/browser/resources/chromeos/audio/BUILD.gn
+++ b/chrome/browser/resources/chromeos/audio/BUILD.gn
@@ -10,6 +10,8 @@
   sources = [
     "audio.ts",
     "audio_broker.ts",
+    "device_page.ts",
+    "device_table.ts",
   ]
   outputs = [ "$target_gen_dir/{{source_file_part}}" ]
 }
@@ -21,7 +23,7 @@
 }
 
 ts_library("build_ts") {
-  deps = [ "//third_party/polymer/v3_0:library" ]
+  deps = [ "//ui/webui/resources:library" ]
   extra_deps = [
     ":copy_audio",
     ":copy_mojo",
@@ -33,6 +35,8 @@
     "audio_broker.ts",
     "audio.ts",
     "audio.mojom-webui.js",
+    "device_table.ts",
+    "device_page.ts",
   ]
 }
 
@@ -40,7 +44,10 @@
 
 generate_grd("build_grd") {
   deps = [ ":build_ts" ]
-  input_files = [ "audio.html" ]
+  input_files = [
+    "audio.html",
+    "audio.css",
+  ]
   input_files_base_dir = rebase_path(".", "//")
   manifest_files = [ "$target_gen_dir/tsconfig.manifest" ]
 
diff --git a/chrome/browser/resources/chromeos/audio/audio.css b/chrome/browser/resources/chromeos/audio/audio.css
new file mode 100644
index 0000000..98f1598
--- /dev/null
+++ b/chrome/browser/resources/chromeos/audio/audio.css
@@ -0,0 +1,24 @@
+/* Copyright 2021 The Chromium Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+:root {
+  --divider-border: 1px solid #bdbdbd;
+}
+
+table {
+  border-collapse: collapse;
+  width: 100%;
+}
+
+table th,
+table td {
+  border: var(--divider-border);
+  padding: 7px;
+}
+
+table th {
+  background-color: #f0f0f0;
+  font-weight: normal;
+}
diff --git a/chrome/browser/resources/chromeos/audio/audio.html b/chrome/browser/resources/chromeos/audio/audio.html
index 9d279b9..cfcd1b0 100644
--- a/chrome/browser/resources/chromeos/audio/audio.html
+++ b/chrome/browser/resources/chromeos/audio/audio.html
@@ -3,15 +3,28 @@
 <head>
   <meta charset="utf-8">
   <title>Audio Page</title>
+  <link rel = "stylesheet" href = "audio.css">
   <script type="module" src="audio.js"></script>
-  <style>
-    p {
-      white-space: pre-wrap;
-    }
-  </style>
 </head>
 <body>
-  <h1>Audio Page</h1>
-  <p>Welcome to the audio page!</p>
+  <section id="devices">
+    <div id = "deviceTable">
+    </div>
+  </section>
+  <template id="deviceTable-template">
+    <table>
+      <thead>
+        <tr>
+          <th data-field="nameForDisplay">Name</th>
+          <th data-field="deviceType">Device Type</th>
+          <th data-field="is_active">Is Active?</th>
+          <th data-field="volume">Volume/Gain</th>
+          <th data-field="is_muted">Is Muted?</th>
+        </tr>
+      </thead>
+      <tbody>
+      </tbody>
+    </table>
+  </template>
 </body>
 </html>
diff --git a/chrome/browser/resources/chromeos/audio/audio.ts b/chrome/browser/resources/chromeos/audio/audio.ts
index 7423680..2808cdc5 100644
--- a/chrome/browser/resources/chromeos/audio/audio.ts
+++ b/chrome/browser/resources/chromeos/audio/audio.ts
@@ -2,14 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {AudioBroker} from './audio_broker.js';
+import {DevicePage} from './device_page.js';
 
 function initialize() {
-  const handler = AudioBroker.getInstance().handler;
-  handler.getAudioDeviceInfo().then(({deviceName}) => {
-    console.log('mock device name output: ' + deviceName);
-  });
-  console.log('welcome to the audio page.');
+  DevicePage.getInstance();
 }
 
 document.addEventListener('DOMContentLoaded', initialize);
diff --git a/chrome/browser/resources/chromeos/audio/device_page.ts b/chrome/browser/resources/chromeos/audio/device_page.ts
new file mode 100644
index 0000000..4aa64d379
--- /dev/null
+++ b/chrome/browser/resources/chromeos/audio/device_page.ts
@@ -0,0 +1,51 @@
+import {$} from 'chrome://resources/js/util.m.js';
+
+import {DeviceData, PageCallbackRouter, PageHandlerRemote} from './audio.mojom-webui.js';
+import {AudioBroker} from './audio_broker.js';
+import {DeviceTable} from './device_table.js';
+
+export interface DeviceMap {
+  [id: number]: DeviceData;
+}
+
+export class DevicePage {
+  private deviceTable: DeviceTable;
+  private router: PageCallbackRouter;
+  private mojoHandler: PageHandlerRemote;
+  constructor() {
+    this.router = AudioBroker.getInstance().callbackRouter;
+    this.mojoHandler = AudioBroker.getInstance().handler;
+    this.deviceTable = new DeviceTable();
+    $('deviceTable').appendChild(this.deviceTable);
+    this.setUpAudioDevices();
+  }
+
+  setUpAudioDevices() {
+    this.router.updateDeviceInfo.addListener(this.updateDeviceInfo.bind(this));
+    this.router.updateDeviceVolume.addListener(
+        this.updateDeviceVolume.bind(this));
+    this.router.updateDeviceMute.addListener(this.updateDeviceMute.bind(this));
+    this.mojoHandler.getAudioDeviceInfo();
+  }
+
+  static getInstance() {
+    if (instance === null) {
+      instance = new DevicePage();
+    }
+    return instance;
+  }
+
+  updateDeviceInfo(devices: DeviceMap) {
+    this.deviceTable.setDevices(devices);
+  }
+
+  updateDeviceVolume(nodeId: number, volume: number) {
+    this.deviceTable.setDeviceVolume(nodeId, volume);
+  }
+
+  updateDeviceMute(nodeId: number, isMuted: boolean) {
+    this.deviceTable.setDeviceMuteState(nodeId, isMuted);
+  }
+}
+
+let instance: DevicePage|null = null;
diff --git a/chrome/browser/resources/chromeos/audio/device_table.ts b/chrome/browser/resources/chromeos/audio/device_table.ts
new file mode 100644
index 0000000..6a57606
--- /dev/null
+++ b/chrome/browser/resources/chromeos/audio/device_table.ts
@@ -0,0 +1,73 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {$} from 'chrome://resources/js/util.m.js';
+import {DeviceData} from './audio.mojom-webui.js';
+import {DeviceMap} from './device_page.js';
+
+export class DeviceTable extends HTMLTableElement {
+  private tbody: HTMLTableSectionElement;
+  private devices: DeviceMap;
+  constructor() {
+    super();
+    this.devices = {};
+    const clone = (<HTMLTemplateElement>$('deviceTable-template'))
+                      .content.cloneNode(true);
+    const thead = (<HTMLTableElement>clone).querySelector('thead');
+    this.appendChild(<HTMLTableSectionElement>thead);
+    this.tbody = this.createTBody();
+    this.appendChild(this.tbody);
+  }
+
+  setDevices(deviceMap: DeviceMap) {
+    this.devices = deviceMap;
+    this.redrawTable();
+  }
+
+  setDeviceVolume(nodeId: number, volume: number) {
+    if (nodeId in this.devices) {
+      (this.devices[nodeId] as DeviceData).volumeGainPercent = volume;
+      const row = <HTMLTableRowElement>$(String(nodeId));
+      if (row && row.cells[3]) {
+        row.cells[3].textContent = String(volume);
+      }
+    }
+  }
+
+  setDeviceMuteState(nodeId: number, isMuted: boolean) {
+    if (nodeId in this.devices) {
+      (this.devices[nodeId] as DeviceData).isMuted = isMuted;
+      const row = <HTMLTableRowElement>$(String(nodeId));
+      if (row && row.cells[4]) {
+        row.cells[4].textContent = String(isMuted);
+      }
+    }
+  }
+
+  redrawTable() {
+    this.removeChild(this.tbody);
+    this.tbody = this.createTBody();
+    this.appendChild(this.tbody);
+    for (const device of Object.values(this.devices)) {
+      this.addRow(device as DeviceData);
+    }
+  }
+
+  addRow(device: DeviceData) {
+    const newRow = this.tbody.insertRow(-1);
+    newRow.id = String(device.id);
+    const newName = newRow.insertCell(0);
+    const newType = newRow.insertCell(1);
+    const newActive = newRow.insertCell(2);
+    const newVolume = newRow.insertCell(3);
+    const newMuted = newRow.insertCell(4);
+    newName.appendChild(document.createTextNode(device.displayName));
+    newType.appendChild(document.createTextNode(device.type));
+    newActive.appendChild(document.createTextNode(String(device.isActive)));
+    newVolume.appendChild(
+        document.createTextNode(String(device.volumeGainPercent)));
+    newMuted.appendChild(document.createTextNode(String(device.isMuted)));
+  }
+}
+customElements.define('device-table', DeviceTable, {extends: 'table'});
diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resources/settings/BUILD.gn
index 0058fdd..81b60fa 100644
--- a/chrome/browser/resources/settings/BUILD.gn
+++ b/chrome/browser/resources/settings/BUILD.gn
@@ -759,6 +759,7 @@
     "privacy_page/privacy_review/privacy_review_msbb_fragment.js",
     "privacy_page/privacy_review/privacy_review_page.js",
     "privacy_page/privacy_review/privacy_review_two_state_setting_fragment.js",
+    "privacy_page/privacy_review_promo.js",
     "privacy_page/secure_dns_input.js",
     "privacy_page/secure_dns.js",
     "privacy_page/security_keys_bio_enroll_dialog.js",
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/BUILD.gn
index 3b271c14..0634f1b4 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/BUILD.gn
@@ -44,6 +44,7 @@
     "..:os_route.m",
     "../..:router",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+    "//ui/webui/resources/cr_components/chromeos/bluetooth:bluetooth_utils",
     "//ui/webui/resources/cr_components/chromeos/bluetooth:cros_bluetooth_config",
     "//ui/webui/resources/js:i18n_behavior.m",
   ]
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.html b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.html
index 9c73f17..47eebe9 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.html
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.html
@@ -5,19 +5,32 @@
 </style>
 <div id="bluetoothSummary" class="settings-box two-line first no-padding">
   <div class="link-wrapper" actionable on-click="onWrapperClick_">
-    <iron-icon id="bluetoothIcon" icon="cr:bluetooth">
+    <iron-icon id="statusIcon"
+        icon="[[getBluetoothStatusIconName_(
+          systemProperties.*, isBluetoothToggleOn_)]]">
     </iron-icon>
     <div id="bluetoothPageTitle"
         class="middle settings-box-text"
         aria-hidden="true">
       $i18n{bluetoothPageTitle}
+      <div class="secondary" id="bluetoothSecondaryLabel">
+        [[getSecondaryLabel_(
+          LabelType.DISPLAYED_TEXT, systemProperties.*, isBluetoothToggleOn_)]]
+      </div>
     </div>
-    <cr-icon-button id="iconButton"
-        class="subpage-arrow layout end"
-        on-click="onSubpageArrowClick_"
-        aria-labelledby="bluetoothPageTitle"
-        aria-roledescription="$i18n{subpageArrowRoleDescription}">
-    </cr-icon-button>
+    <template is="dom-if"
+        if="[[shouldShowSubpageArrow_(
+          systemProperties.*, isBluetoothToggleOn_)]]"
+        restamp>
+      <cr-icon-button id="arrowIconButton"
+          class="subpage-arrow layout end"
+          on-click="onSubpageArrowClick_"
+          aria-label="$i18n{bluetoothPageTitle}"
+          aria-description$="[[getSecondaryLabel_(
+            LabelType.A11Y, systemProperties.*, isBluetoothToggleOn)]]"
+          aria-roledescription="$i18n{subpageArrowRoleDescription}">
+      </cr-icon-button>
+    </template>
   </div>
   <div class="separator"></div>
   <cr-toggle id="enableBluetoothToggle"
@@ -28,13 +41,16 @@
   </cr-toggle>
 </div>
 
-<div id="pairNewDevice" class="settings-box no-padding">
-  <div id="pairNewDeviceLabel" class="middle settings-box-text"
-      aria-hidden="true">
-    $i18n{bluetoothPairNewDevice}
+<template is="dom-if" if="[[isBluetoothToggleOn_]]" restamp>
+  <div id="pairNewDevice" class="settings-box no-padding">
+    <div id="pairNewDeviceLabel" class="middle settings-box-text"
+        aria-hidden="true">
+      $i18n{bluetoothPairNewDevice}
+    </div>
+    <cr-icon-button id="pairNewDeviceBtn"
+        class="icon-pair-bluetooth layout end"
+        aria-labelledby="pairNewDeviceLabel">
+    </cr-icon-button>
   </div>
-  <cr-icon-button id="pairNewDeviceBtn"
-      class="icon-pair-bluetooth layout end"
-      aria-labelledby="pairNewDeviceLabel">
-  </cr-icon-button>
-</div>
+</template>
+
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.js b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.js
index 5a91a90b..e7b5e45 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.js
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_summary.js
@@ -13,6 +13,7 @@
 
 import {I18nBehavior, I18nBehaviorInterface} from '//resources/js/i18n_behavior.m.js';
 import {html, mixinBehaviors, PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {getDeviceName} from 'chrome://resources/cr_components/chromeos/bluetooth/bluetooth_utils.js';
 import {getBluetoothConfig} from 'chrome://resources/cr_components/chromeos/bluetooth/cros_bluetooth_config.js';
 
 import {loadTimeData} from '../../i18n_setup.js';
@@ -22,6 +23,16 @@
 const mojom = chromeos.bluetoothConfig.mojom;
 
 /**
+ * Refers to Bluetooth secondary text label, used to distinguish between
+ * accessibility string and UI text string.
+ * @enum {number}
+ */
+const LabelType = {
+  A11Y: 1,
+  DISPLAYED_TEXT: 2
+};
+
+/**
  * @constructor
  * @extends {PolymerElement}
  * @implements {I18nBehaviorInterface}
@@ -60,6 +71,12 @@
         type: Boolean,
         observer: 'onBluetoothToggleChanged_',
       },
+
+      /** @private */
+      LabelType: {
+        type: Object,
+        value: LabelType,
+      }
     };
   }
 
@@ -84,6 +101,9 @@
    * @private
    */
   isToggleDisabled_() {
+    if (!this.systemProperties) {
+      return false;
+    }
     // TODO(crbug.com/1010321): Add check for modification state when variable
     // is available.
     return this.systemProperties.systemState ===
@@ -91,6 +111,94 @@
   }
 
   /**
+   * @param {LabelType} labelType
+   * @return {string}
+   * @private
+   */
+  getSecondaryLabel_(labelType) {
+    if (!this.isBluetoothToggleOn_) {
+      return this.i18n('bluetoothSummaryPageOff');
+    }
+
+    const connectedDevices = this.getConnectedDevices_();
+
+    if (!connectedDevices.length) {
+      return this.i18n('bluetoothSummaryPageOn');
+    }
+
+    const isA11yLabel = labelType === LabelType.A11Y;
+    const firstConnectedDeviceName = getDeviceName(connectedDevices[0]);
+
+    if (connectedDevices.length === 1) {
+      return isA11yLabel ? this.i18n(
+                               'bluetoothSummaryPageConnectedA11yOneDevice',
+                               firstConnectedDeviceName) :
+                           firstConnectedDeviceName;
+    }
+
+    if (connectedDevices.length === 2) {
+      const secondConnectedDeviceName = getDeviceName(connectedDevices[1]);
+      return isA11yLabel ?
+          this.i18n(
+              'bluetoothSummaryPageConnectedA11yTwoDevices',
+              firstConnectedDeviceName, secondConnectedDeviceName) :
+          this.i18n(
+              'bluetoothSummaryPageTwoDevicesDescription',
+              firstConnectedDeviceName, secondConnectedDeviceName);
+    }
+
+    return isA11yLabel ?
+        this.i18n(
+            'bluetoothSummaryPageConnectedA11yTwoOrMoreDevices',
+            firstConnectedDeviceName, connectedDevices.length - 1) :
+        this.i18n(
+            'bluetoothSummaryPageTwoOrMoreDevicesDescription',
+            firstConnectedDeviceName, connectedDevices.length - 1);
+  }
+
+  /**
+   * @return {Array<?chromeos.bluetoothConfig.mojom.PairedBluetoothDeviceProperties>}
+   * @private
+   */
+  getConnectedDevices_() {
+    const pairedDevices = this.systemProperties.pairedDevices;
+    if (!pairedDevices) {
+      return [];
+    }
+
+    return pairedDevices.filter(
+        device => device.deviceProperties.connectionState ===
+            mojom.DeviceConnectionState.kConnected);
+  }
+
+  /**
+   * @return {string}
+   * @private
+   */
+  getBluetoothStatusIconName_() {
+    if (!this.isBluetoothToggleOn_) {
+      return 'os-settings:bluetooth-disabled';
+    }
+
+    if (this.getConnectedDevices_().length) {
+      return 'os-settings:bluetooth-connected';
+    }
+    return 'cr:bluetooth';
+  }
+
+  /**
+   * @return {boolean}
+   * @private
+   */
+  shouldShowSubpageArrow_() {
+    if (this.isToggleDisabled_()) {
+      return false;
+    }
+
+    return this.isBluetoothToggleOn_;
+  }
+
+  /**
    * @param {!Event} e
    * @private
    */
@@ -105,11 +213,18 @@
   }
 
   /** @private */
-  onWrapperClick_(e) {
-    e.stopPropagation();
-    // TODO(crbug.com/1010321): Check the state of Bluetooth properties
-    // before opening subpage. Only open if enable Bluetooth toggle is enabled
-    // and Bluetooth |systemState| is enabled.
+  onWrapperClick_() {
+    if (this.isToggleDisabled_()) {
+      return;
+    }
+
+    if (this.systemProperties.systemState ===
+            mojom.BluetoothSystemState.kDisabled ||
+        this.systemProperties.systemState ===
+            mojom.BluetoothSystemState.kDisabling) {
+      this.isBluetoothToggleOn_ = true;
+      return;
+    }
     this.navigateToBluetoothDevicesSubpage_();
   }
 }
diff --git a/chrome/browser/resources/settings/privacy_page/BUILD.gn b/chrome/browser/resources/settings/privacy_page/BUILD.gn
index 3eb3036..2828aa3 100644
--- a/chrome/browser/resources/settings/privacy_page/BUILD.gn
+++ b/chrome/browser/resources/settings/privacy_page/BUILD.gn
@@ -209,6 +209,7 @@
     ":privacy_page_browser_proxy",
     "..:i18n_setup",
     "..:metrics_browser_proxy",
+    "..:open_window_proxy",
     "..:route",
     "..:router",
     "../prefs:prefs_behavior",
diff --git a/chrome/browser/resources/settings/privacy_page/security_page.html b/chrome/browser/resources/settings/privacy_page/security_page.html
index d90b2ff..67022ee 100644
--- a/chrome/browser/resources/settings/privacy_page/security_page.html
+++ b/chrome/browser/resources/settings/privacy_page/security_page.html
@@ -166,6 +166,14 @@
     <template is="dom-if" if="[[showSecureDnsSetting_]]">
       <settings-secure-dns prefs="{{prefs}}"></settings-secure-dns>
     </template>
+<if expr="chromeos">
+    <template is="dom-if" if="[[showSecureDnsSettingLink_]]">
+        <cr-link-row id="openChromeOSSecureDnsSettings"
+            on-click="onOpenChromeOSSecureDnsSettingsClicked_"
+            label="$i18n{openChromeOSSecureDnsSettingsLabel}" external>
+        </cr-link-row>
+    </template>
+</if>
     <template is="dom-if" if="[[enableSecurityKeysSubpage_]]">
         <cr-link-row id="security-keys-subpage-trigger"
           class="hr"
diff --git a/chrome/browser/resources/settings/privacy_page/security_page.js b/chrome/browser/resources/settings/privacy_page/security_page.js
index 22287dc2..4fece041 100644
--- a/chrome/browser/resources/settings/privacy_page/security_page.js
+++ b/chrome/browser/resources/settings/privacy_page/security_page.js
@@ -21,6 +21,7 @@
 
 import {loadTimeData} from '../i18n_setup.js';
 import {MetricsBrowserProxy, MetricsBrowserProxyImpl, PrivacyElementInteractions, SafeBrowsingInteractions} from '../metrics_browser_proxy.js';
+import {OpenWindowProxyImpl} from '../open_window_proxy.js';
 import {PrefsBehavior, PrefsBehaviorInterface} from '../prefs/prefs_behavior.js';
 import {routes} from '../route.js';
 import {Route, RouteObserverMixin, RouteObserverMixinInterface, Router} from '../router.js';
@@ -95,6 +96,20 @@
         },
       },
 
+      // <if expr="chromeos">
+      /**
+       * Whether a link to secure DNS OS setting should be displayed.
+       * @private
+       */
+      showSecureDnsSettingLink_: {
+        type: Boolean,
+        readOnly: true,
+        value: function() {
+          return loadTimeData.getBoolean('showSecureDnsSettingLink');
+        },
+      },
+      // </if>
+
       /**
        * Valid safe browsing states.
        * @private
@@ -321,6 +336,15 @@
     this.recordActionOnExpandButtonClicked_(SafeBrowsingSetting.STANDARD);
   }
 
+  // <if expr="chromeos">
+  /** @private */
+  onOpenChromeOSSecureDnsSettingsClicked_() {
+    const path =
+        loadTimeData.getString('chromeOSPrivacyAndSecuritySectionPath');
+    OpenWindowProxyImpl.getInstance().openURL(`chrome://os-settings/${path}`);
+  }
+  // </if>
+
   /**
    * @param {!SafeBrowsingSetting} safeBrowsingSetting
    * @private
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/binary_fcm_service_unittest.cc b/chrome/browser/safe_browsing/cloud_content_scanning/binary_fcm_service_unittest.cc
index 7151f7f..60b7628 100644
--- a/chrome/browser/safe_browsing/cloud_content_scanning/binary_fcm_service_unittest.cc
+++ b/chrome/browser/safe_browsing/cloud_content_scanning/binary_fcm_service_unittest.cc
@@ -4,6 +4,11 @@
 
 #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_fcm_service.h"
 
+#include <memory>
+#include <set>
+#include <string>
+#include <utility>
+
 #include "base/base64.h"
 #include "base/callback_helpers.h"
 #include "base/notreached.h"
@@ -28,6 +33,7 @@
 namespace safe_browsing {
 
 using ::testing::Invoke;
+using ::testing::NiceMock;
 using ::testing::Return;
 
 namespace {
@@ -40,13 +46,12 @@
 class MockInstanceIDDriver : public instance_id::InstanceIDDriver {
  public:
   MockInstanceIDDriver() : InstanceIDDriver(/*gcm_driver=*/nullptr) {}
+  MockInstanceIDDriver(const MockInstanceIDDriver&) = delete;
+  MockInstanceIDDriver& operator=(const MockInstanceIDDriver&) = delete;
   ~MockInstanceIDDriver() override = default;
 
   MOCK_METHOD1(GetInstanceID,
                instance_id::InstanceID*(const std::string& app_id));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockInstanceIDDriver);
 };
 
 class MockInstanceID : public instance_id::InstanceID {
@@ -327,7 +332,7 @@
 }
 
 TEST_F(BinaryFCMServiceTest, UnregisterOneTokensOneCall) {
-  MockInstanceIDDriver driver;
+  NiceMock<MockInstanceIDDriver> driver;
   MockInstanceID instance_id;
   ON_CALL(driver, GetInstanceID).WillByDefault(Return(&instance_id));
   binary_fcm_service_.reset();
@@ -375,7 +380,7 @@
 }
 
 TEST_F(BinaryFCMServiceTest, UnregisterTwoTokensTwoCalls) {
-  MockInstanceIDDriver driver;
+  NiceMock<MockInstanceIDDriver> driver;
   MockInstanceID instance_id;
   ON_CALL(driver, GetInstanceID).WillByDefault(Return(&instance_id));
   binary_fcm_service_.reset();
@@ -430,7 +435,7 @@
 }
 
 TEST_F(BinaryFCMServiceTest, UnregisterTwoTokenConflict) {
-  MockInstanceIDDriver driver;
+  NiceMock<MockInstanceIDDriver> driver;
   MockInstanceID instance_id;
   ON_CALL(driver, GetInstanceID).WillByDefault(Return(&instance_id));
   binary_fcm_service_.reset();
@@ -491,7 +496,7 @@
 }
 
 TEST_F(BinaryFCMServiceTest, QueuesGetInstanceIDOnRetriableError) {
-  MockInstanceIDDriver driver;
+  NiceMock<MockInstanceIDDriver> driver;
   MockInstanceID instance_id;
   ON_CALL(driver, GetInstanceID).WillByDefault(Return(&instance_id));
   binary_fcm_service_.reset();
diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetMediator.java b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetMediator.java
index ea3957b..a6806cd 100644
--- a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetMediator.java
+++ b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetMediator.java
@@ -11,7 +11,6 @@
 
 import androidx.annotation.Nullable;
 
-import org.chromium.base.task.AsyncTask;
 import org.chromium.chrome.browser.signin.services.ProfileDataCache;
 import org.chromium.chrome.browser.signin.services.SigninMetricsUtils;
 import org.chromium.chrome.browser.signin.services.SigninPreferencesManager;
@@ -20,7 +19,6 @@
 import org.chromium.components.signin.AccountManagerFacadeProvider;
 import org.chromium.components.signin.AccountUtils;
 import org.chromium.components.signin.AccountsChangeObserver;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.base.GoogleServiceAuthError;
 import org.chromium.components.signin.base.GoogleServiceAuthError.State;
 import org.chromium.components.signin.metrics.AccountConsistencyPromoAction;
@@ -220,20 +218,7 @@
                     AccountConsistencyPromoAction.SIGNED_IN_WITH_NON_DEFAULT_ACCOUNT);
         }
         SigninPreferencesManager.getInstance().clearAccountPickerBottomSheetActiveDismissalCount();
-        new AsyncTask<String>() {
-            @Override
-            protected String doInBackground() {
-                return mAccountManagerFacade.getAccountGaiaId(mSelectedAccountName);
-            }
-
-            @Override
-            protected void onPostExecute(String accountGaiaId) {
-                CoreAccountInfo coreAccountInfo = CoreAccountInfo.createFromEmailAndGaiaId(
-                        mSelectedAccountName, accountGaiaId);
-                mAccountPickerDelegate.signIn(
-                        coreAccountInfo, AccountPickerBottomSheetMediator.this::onSigninFailed);
-            }
-        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+        mAccountPickerDelegate.signIn(mSelectedAccountName, this::onSigninFailed);
     }
 
     private void onSigninFailed(GoogleServiceAuthError error) {
diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetRenderTest.java b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetRenderTest.java
index 9f51ead..56492a7 100644
--- a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetRenderTest.java
+++ b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetRenderTest.java
@@ -41,7 +41,6 @@
 import org.chromium.chrome.test.util.browser.Features;
 import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.base.GoogleServiceAuthError;
 import org.chromium.components.signin.base.GoogleServiceAuthError.State;
 import org.chromium.components.signin.test.util.FakeAccountInfoService;
@@ -85,8 +84,8 @@
         public void onDismiss() {}
 
         @Override
-        public void signIn(CoreAccountInfo coreAccountInfo,
-                Callback<GoogleServiceAuthError> onSignInErrorCallback) {
+        public void signIn(
+                String accountEmail, Callback<GoogleServiceAuthError> onSignInErrorCallback) {
             if (mError != null) {
                 onSignInErrorCallback.onResult(mError);
             }
diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetTest.java b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetTest.java
index 0f289ed..01625b0 100644
--- a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetTest.java
+++ b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerBottomSheetTest.java
@@ -63,7 +63,6 @@
 import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule;
 import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
 import org.chromium.components.signin.AccountManagerFacadeProvider;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.base.GoogleServiceAuthError;
 import org.chromium.components.signin.base.GoogleServiceAuthError.State;
 import org.chromium.components.signin.metrics.AccountConsistencyPromoAction;
@@ -398,7 +397,7 @@
             return null;
         })
                 .when(mAccountPickerDelegateMock)
-                .signIn(eq(mAccountManagerTestRule.toCoreAccountInfo(TEST_EMAIL1)), any());
+                .signIn(eq(TEST_EMAIL1), any());
 
         buildAndShowCollapsedBottomSheet();
         clickContinueButtonAndWaitForErrorSheet();
@@ -420,7 +419,6 @@
         HistogramDelta accountConsistencyHistogram =
                 new HistogramDelta("Signin.AccountConsistencyPromoAction",
                         AccountConsistencyPromoAction.AUTH_ERROR_SHOWN);
-        CoreAccountInfo coreAccountInfo = mAccountManagerTestRule.toCoreAccountInfo(TEST_EMAIL1);
         // Throws an auth error during the sign-in action
         doAnswer(invocation -> {
             Callback<GoogleServiceAuthError> onSignInErrorCallback = invocation.getArgument(1);
@@ -429,7 +427,7 @@
             return null;
         })
                 .when(mAccountPickerDelegateMock)
-                .signIn(eq(coreAccountInfo), any());
+                .signIn(eq(TEST_EMAIL1), any());
 
         buildAndShowCollapsedBottomSheet();
         clickContinueButtonAndWaitForErrorSheet();
@@ -449,7 +447,6 @@
     @MediumTest
     public void testTryAgainButtonOnSignInGeneralErrorSheet() {
         mMockitoRule.strictness(Strictness.LENIENT);
-        CoreAccountInfo coreAccountInfo = mAccountManagerTestRule.toCoreAccountInfo(TEST_EMAIL1);
         // Throws a connection error during the sign-in action
         doAnswer(invocation -> {
             Callback<GoogleServiceAuthError> onSignInErrorCallback = invocation.getArgument(1);
@@ -457,11 +454,11 @@
             return null;
         })
                 .when(mAccountPickerDelegateMock)
-                .signIn(eq(coreAccountInfo), any());
+                .signIn(eq(TEST_EMAIL1), any());
 
         buildAndShowCollapsedBottomSheet();
         clickContinueButtonAndWaitForErrorSheet();
-        doNothing().when(mAccountPickerDelegateMock).signIn(eq(coreAccountInfo), any());
+        doNothing().when(mAccountPickerDelegateMock).signIn(eq(TEST_EMAIL1), any());
         // Clicking on the |Try again| button should perform the sign-in again and opens the sign-in
         // in progress page.
         clickContinueButtonAndCheckSignInInProgressSheet();
@@ -470,7 +467,6 @@
     @Test
     @MediumTest
     public void testSigninAgainButtonOnSigninAuthErrorSheet() {
-        CoreAccountInfo coreAccountInfo = mAccountManagerTestRule.toCoreAccountInfo(TEST_EMAIL1);
         // Throws an auth error during the sign-in action
         doAnswer(invocation -> {
             Callback<GoogleServiceAuthError> onSignInErrorCallback = invocation.getArgument(1);
@@ -479,7 +475,7 @@
             return null;
         })
                 .when(mAccountPickerDelegateMock)
-                .signIn(eq(coreAccountInfo), any());
+                .signIn(eq(TEST_EMAIL1), any());
 
         buildAndShowCollapsedBottomSheet();
         clickContinueButtonAndWaitForErrorSheet();
diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegate.java b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegate.java
index 05003244..f87d44f 100644
--- a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegate.java
+++ b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegate.java
@@ -5,7 +5,6 @@
 package org.chromium.chrome.browser.signin.ui.account_picker;
 
 import org.chromium.base.Callback;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.base.GoogleServiceAuthError;
 
 /**
@@ -20,8 +19,7 @@
     /**
      * Signs in the user with the given account.
      */
-    void signIn(CoreAccountInfo coreAccountInfo,
-            Callback<GoogleServiceAuthError> onSignInErrorCallback);
+    void signIn(String accountEmail, Callback<GoogleServiceAuthError> onSignInErrorCallback);
 
     /**
      * Adds account to device.
diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java
index b7cc4c14..d8c162c2 100644
--- a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java
+++ b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java
@@ -21,8 +21,8 @@
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.components.signin.AccountManagerFacadeProvider;
 import org.chromium.components.signin.AccountUtils;
-import org.chromium.components.signin.base.CoreAccountInfo;
 import org.chromium.components.signin.base.GoogleServiceAuthError;
+import org.chromium.components.signin.identitymanager.AccountInfoServiceProvider;
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.signin.identitymanager.IdentityManager;
 import org.chromium.components.signin.metrics.SignoutReason;
@@ -80,8 +80,8 @@
      * Signs the user into the given account.
      */
     @Override
-    public void signIn(CoreAccountInfo coreAccountInfo,
-            Callback<GoogleServiceAuthError> onSignInErrorCallback) {
+    public void signIn(
+            String accountEmail, Callback<GoogleServiceAuthError> onSignInErrorCallback) {
         if (mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN) != null) {
             // In case an error is fired because cookies are taking longer to generate than usual,
             // if user retries the sign-in from the error screen, we need to sign out the user
@@ -91,19 +91,21 @@
             mSigninManager.signOut(SignoutReason.ABORT_SIGNIN);
         }
         mOnSignInErrorCallback = onSignInErrorCallback;
-        mWebSigninBridge = mWebSigninBridgeFactory.create(
-                Profile.getLastUsedRegularProfile(), coreAccountInfo, this);
-        mSigninManager.signin(coreAccountInfo, new SigninManager.SignInCallback() {
-            @Override
-            public void onSignInComplete() {
-                // After the sign-in is finished in Chrome, we still need to wait for
-                // WebSigninBridge to be called to redirect to the continue url.
-            }
+        AccountInfoServiceProvider.get().getAccountInfoByEmail(accountEmail).then(accountInfo -> {
+            mWebSigninBridge = mWebSigninBridgeFactory.create(
+                    Profile.getLastUsedRegularProfile(), accountInfo, this);
+            mSigninManager.signin(accountInfo, new SigninManager.SignInCallback() {
+                @Override
+                public void onSignInComplete() {
+                    // After the sign-in is finished in Chrome, we still need to wait for
+                    // WebSigninBridge to be called to redirect to the continue url.
+                }
 
-            @Override
-            public void onSignInAborted() {
-                AccountPickerDelegateImpl.this.destroyWebSigninBridge();
-            }
+                @Override
+                public void onSignInAborted() {
+                    AccountPickerDelegateImpl.this.destroyWebSigninBridge();
+                }
+            });
         });
     }
 
diff --git a/chrome/browser/signin/ui/android/junit/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImplTest.java b/chrome/browser/signin/ui/android/junit/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImplTest.java
index 8b640db7..0302c62 100644
--- a/chrome/browser/signin/ui/android/junit/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImplTest.java
+++ b/chrome/browser/signin/ui/android/junit/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImplTest.java
@@ -45,6 +45,7 @@
 import org.chromium.components.signin.base.GoogleServiceAuthError;
 import org.chromium.components.signin.base.GoogleServiceAuthError.State;
 import org.chromium.components.signin.identitymanager.IdentityManager;
+import org.chromium.components.signin.test.util.FakeAccountInfoService;
 import org.chromium.components.signin.test.util.FakeAccountManagerFacade;
 import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.ui.base.WindowAndroid;
@@ -57,13 +58,14 @@
 @RunWith(BaseRobolectricTestRunner.class)
 public class AccountPickerDelegateImplTest {
     private static final String CONTINUE_URL = "https://test-continue-url.com";
+    private static final String TEST_EMAIL = "test.account@gmail.com";
 
     private final FakeAccountManagerFacade mFakeAccountManagerFacade =
             spy(new FakeAccountManagerFacade());
 
     @Rule
     public final AccountManagerTestRule mAccountManagerTestRule =
-            new AccountManagerTestRule(mFakeAccountManagerFacade);
+            new AccountManagerTestRule(mFakeAccountManagerFacade, new FakeAccountInfoService());
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule().strictness(Strictness.STRICT_STUBS);
@@ -109,8 +111,7 @@
                 .thenReturn(mIdentityManagerMock);
         when(IdentityServicesProvider.get().getSigninManager(any())).thenReturn(mSigninManagerMock);
 
-        mCoreAccountInfo =
-                mAccountManagerTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
+        mCoreAccountInfo = mAccountManagerTestRule.addAccount(TEST_EMAIL);
 
         mDelegate = new AccountPickerDelegateImpl(
                 mWindowAndroidMock, mTabMock, mWebSigninBridgeFactoryMock, CONTINUE_URL);
@@ -125,7 +126,7 @@
 
     @Test
     public void testSignInSucceeded() {
-        mDelegate.signIn(mCoreAccountInfo, error -> {});
+        mDelegate.signIn(TEST_EMAIL, error -> {});
         InOrder calledInOrder = inOrder(mWebSigninBridgeFactoryMock, mSigninManagerMock);
         calledInOrder.verify(mWebSigninBridgeFactoryMock)
                 .create(mProfileMock, mCoreAccountInfo, mDelegate);
@@ -145,7 +146,7 @@
         })
                 .when(mSigninManagerMock)
                 .signin(eq(mCoreAccountInfo), any());
-        mDelegate.signIn(mCoreAccountInfo, error -> {});
+        mDelegate.signIn(TEST_EMAIL, error -> {});
         verify(mWebSigninBridgeMock).destroy();
     }
 
@@ -154,10 +155,10 @@
         // In case an error is fired because cookies are taking longer to generate than usual,
         // if user retries the sign-in from the error screen, we need to sign out the user
         // first before signing in again.
-        mDelegate.signIn(mCoreAccountInfo, error -> {});
+        mDelegate.signIn(TEST_EMAIL, error -> {});
         when(mIdentityManagerMock.getPrimaryAccountInfo(anyInt())).thenReturn(mCoreAccountInfo);
 
-        mDelegate.signIn(mCoreAccountInfo, error -> {});
+        mDelegate.signIn(TEST_EMAIL, error -> {});
         InOrder calledInOrder = inOrder(mWebSigninBridgeMock, mSigninManagerMock,
                 mWebSigninBridgeFactoryMock, mSigninManagerMock);
         calledInOrder.verify(mWebSigninBridgeMock).destroy();
@@ -171,7 +172,7 @@
     public void testSignInFailedWithConnectionError() {
         Callback<GoogleServiceAuthError> mockCallback = mock(Callback.class);
         GoogleServiceAuthError error = new GoogleServiceAuthError(State.CONNECTION_FAILED);
-        mDelegate.signIn(mCoreAccountInfo, mockCallback);
+        mDelegate.signIn(TEST_EMAIL, mockCallback);
         mDelegate.onSigninFailed(error);
         verify(mockCallback).onResult(error);
         // WebSigninBridge should be kept alive in case cookies are taking longer to
@@ -183,10 +184,9 @@
     public void testUpdateCredentials() {
         mMockitoRule.strictness(Strictness.LENIENT);
         Callback<Boolean> callback = (isSuccess) -> {};
-        mDelegate.updateCredentials(AccountManagerTestRule.TEST_ACCOUNT_EMAIL, callback);
+        mDelegate.updateCredentials(TEST_EMAIL, callback);
         verify(mFakeAccountManagerFacade)
-                .updateCredentials(AccountUtils.createAccountFromName(
-                                           AccountManagerTestRule.TEST_ACCOUNT_EMAIL),
-                        mActivity, callback);
+                .updateCredentials(
+                        AccountUtils.createAccountFromName(TEST_EMAIL), mActivity, callback);
     }
 }
diff --git a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
index 186ae04a..1a7658b 100644
--- a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
+++ b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
@@ -2023,9 +2023,8 @@
     // Disable mixed content autoupgrading to allow mixed content to load and
     // test that mixed content is recorded correctly on the prerender navigation
     // entry.
-    scoped_feature_list_.InitWithFeatures(
-        {blink::features::kPrerender2},
-        {blink::features::kMixedContentAutoupgrade});
+    scoped_feature_list_.InitAndDisableFeature(
+        blink::features::kMixedContentAutoupgrade);
   }
   ~SecurityStateTabHelperPrerenderTest() override = default;
   SecurityStateTabHelperPrerenderTest(
diff --git a/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/UiUtilsUnitTest.java b/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/UiUtilsUnitTest.java
index 6897f68..1df3fb6 100644
--- a/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/UiUtilsUnitTest.java
+++ b/chrome/browser/ui/android/multiwindow/java/src/org/chromium/chrome/browser/multiwindow/UiUtilsUnitTest.java
@@ -81,6 +81,10 @@
                 mUiUtils.getItemTitle(mockInstance(57, 1, 1, true)));
         assertEquals("Instance with only incognito tabs has a wrong title", INCOGNITO,
                 mUiUtils.getItemTitle(mockInstance(57, 0, 1, true)));
+
+        // Incognito-selected, mixed tabs, killed task -> TITLE (use normal tab info)
+        assertEquals("Incognito-selected, mixed tab, killed task should show normal tab title",
+                TITLE, mUiUtils.getItemTitle(mockInstance(-1, 1, 1, true)));
     }
 
     @Test
@@ -149,6 +153,15 @@
                         normalTabCount);
 
         clearInvocations(mResources);
+
+        // Incognito-selected, mixed tabs, killed task -> # tabs
+        normalTabCount = 2;
+        incognitoTabCount = 2;
+        item = mockInstance(UiUtils.INVALID_TASK_ID, normalTabCount, incognitoTabCount, true);
+        mUiUtils.getItemDesc(item);
+        verify(mResources)
+                .getQuantityString(R.plurals.instance_switcher_tab_count_nonzero, normalTabCount,
+                        normalTabCount);
     }
 
     @Test
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
index a5ce2f5..6e44b34 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -2695,13 +2695,13 @@
         Signing in...
       </message>
       <message name="IDS_SIGNIN_ACCOUNT_PICKER_BOTTOM_SHEET_ERROR_TITLE" desc="The title of the account picker bottom sheet when something went wrong in the sign-in process">
-        Something went wrong
+        Can't sign in
       </message>
       <message name="IDS_SIGNIN_ACCOUNT_PICKER_GENERAL_ERROR_SUBTITLE" desc="The subtitle of the account picker bottom sheet when something went wrong in the sign-in process">
-        Chrome couldn’t verify your information
+        Something went wrong during sign-in
       </message>
       <message name="IDS_SIGNIN_ACCOUNT_PICKER_AUTH_ERROR_SUBTITLE" desc="The subtitle of the account picker bottom sheet when there is an authentication error with the credentials of the account selected.">
-        Sorry, we couldn’t validate your credentials
+        Your stored sign-in info might be out of date
       </message>
       <message name="IDS_SIGNIN_ACCOUNT_PICKER_DISMISS_BUTTON" desc="Dismiss button text of the account picker bottom sheet">
         Skip
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_AUTH_ERROR_SUBTITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_AUTH_ERROR_SUBTITLE.png.sha1
index 0886194..d47d32eb9 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_AUTH_ERROR_SUBTITLE.png.sha1
+++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_AUTH_ERROR_SUBTITLE.png.sha1
@@ -1 +1 @@
-0891305cb2dc15b6b5962c0ab5ba7b2de43c7470
\ No newline at end of file
+1bc7dfce3e2fbe9684b10a8cd69ee74b5f9d36a6
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_BOTTOM_SHEET_ERROR_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_BOTTOM_SHEET_ERROR_TITLE.png.sha1
index 3cfd606..db47213 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_BOTTOM_SHEET_ERROR_TITLE.png.sha1
+++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_BOTTOM_SHEET_ERROR_TITLE.png.sha1
@@ -1 +1 @@
-ea2c0d6dbe8fc4557e6dbfb40e2a1119d24421d6
\ No newline at end of file
+009072cc368499e3a676fc1f38233c62e444fb4c
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_GENERAL_ERROR_SUBTITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_GENERAL_ERROR_SUBTITLE.png.sha1
index 3cfd606..db47213 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_GENERAL_ERROR_SUBTITLE.png.sha1
+++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_ACCOUNT_PICKER_GENERAL_ERROR_SUBTITLE.png.sha1
@@ -1 +1 @@
-ea2c0d6dbe8fc4557e6dbfb40e2a1119d24421d6
\ No newline at end of file
+009072cc368499e3a676fc1f38233c62e444fb4c
\ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
index af67cb97..2c225cad 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">Səsinizlə sürətlə axtarın. Bu qısayolu redaktə etmək üçün toxunub saxlayın.</translation>
 <translation id="1028699632127661925"><ph name="DEVICE_NAME" /> cihazına göndərilir...</translation>
 <translation id="103269572468856066">Həmçinin bu saytlar və tətbiqlərdən data silinsin?</translation>
+<translation id="1034259925032978114">Pəncərə açıqdır</translation>
 <translation id="1036348656032585052">Deaktiv edin</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> əlavə edilir...</translation>
 <translation id="1045899828449635435">Bu saytlardan da data silinsin?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">Chrome’un ən güclü təhlükəsizlik səviyyəsini əldə edin</translation>
 <translation id="2200113223741723867">İstifadə datasının paylaşılmasını idarə edin</translation>
 <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> kimi davam edin</translation>
+<translation id="2230777942707397948">Boş pəncərə</translation>
 <translation id="2239812875700136898">"Kəşf edin" düyməsi üçün Seçimlərdən hekayələrinizi idarə edin</translation>
 <translation id="2259659629660284697">Parolları eksport edin...</translation>
 <translation id="2276696007612801991">Parollarınızı yoxlamaq üçün Google hesabınıza daxil olun</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Chrome’un əsas səhifəsi</translation>
 <translation id="3157842584138209013">Digər Seçimlər düyməsindən yadda saxladığınız data miqdarına baxın</translation>
 <translation id="3166827708714933426">Panel və pəncərə qısayolları</translation>
+<translation id="316694332262407393">Chrome artıq burada işləyir.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">Bitmək üzrədir!</translation>
 <translation id="3207960819495026254">Əlfəcinlənib</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">Vebdə güvənliyi artırmağa yardım edin</translation>
 <translation id="3602290021589620013">Önizləmə</translation>
 <translation id="3616113530831147358">Audio</translation>
+<translation id="3622349720008044802">Pəncərələri idarə edin</translation>
 <translation id="3631987586758005671"><ph name="DEVICE_NAME" /> ilə paylaşılır</translation>
 <translation id="3632295766818638029">Parolu görünən edin</translation>
 <translation id="363596933471559332">Saxlanmış kredensialları istifadə edərək vebsaytlara avtomatik daxil olun. Funksiya deaktiv olanda sayta hər dəfə girdiyinizdə doğrulama tələb olunacaq.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">Tərcümə ayarları</translation>
 <translation id="3738139272394829648">Axtarmaq üçün toxunun</translation>
 <translation id="3739899004075612870"><ph name="PRODUCT_NAME" /> məhsulunda əlfəcinlənib</translation>
+<translation id="3740525748616366977">Səsli axtarış bu cihazda əlçatan deyil</translation>
 <translation id="3749259744154402564">Dəstəklənmir</translation>
 <translation id="3771001275138982843">Güncəlləməni endirmək mümkün olmadı</translation>
 <translation id="3771033907050503522">Gizli Panellər</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">Təməl data, üstəgəl ziyarət etdiyiniz vebsaytlar və istifadə etdiyiniz tətbiqlər haqqında məlumat</translation>
 <translation id="3775705724665058594">Cihazlara göndərin</translation>
 <translation id="3778956594442850293">Əsas səhifə ekranına əlavə edildi</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 tab}other{# tab}}</translation>
 <translation id="3803784507854318295">Avto-oxutmanı idarə edin</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">İdarə edin</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">“</translation>
 <translation id="393697183122708255">Aktiv səsli axtarış əlçatan deyil</translation>
 <translation id="395377504920307820">Hesab olmadan istifadə edin</translation>
+<translation id="3958287878205277013">Cihazınızdan Anonim brauzer tarixçəsini təmizləmək üçün bütün Anonim tabları bağlayın.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome səhifəni cihaz onlayn olduqda yükləyəcək}other{Chrome səhifələri cihaz onlayn olduqda yükləyəcək}}</translation>
 <translation id="3962957115499249330">Bu endirmə Wi-Fi'da başlayanda bildiriş görəcəksiniz.</translation>
 <translation id="3963007978381181125">Google Pay'dəki ödəniş metodları və ünvanlar parol şifrələməsinə daxil deyil. Yalnız parolunuzu bilən şəxs şifrələnmiş datanı oxuya bilər. Google parolu əldə etmir və ya saxlamır. Parolu unutsanız və ya bu ayarı dəyişmək istəsəniz, sinxronizasiyanı sıfırlamalısınız. <ph name="BEGIN_LINK" />Ətraflı məlumat<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> linkində Google hesabınızın digər Google xidmətlərində axtarış və fəaliyyət kimi başqa formalı axtarış tarixçəsi ola bilər.</translation>
 <translation id="4532845899244822526">Qovluq seçin</translation>
 <translation id="4538018662093857852">Layt rejimini deaktiv edin</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> tab}other{<ph name="TAB_COUNT_MANY" /> tab, <ph name="TAB_COUNT_INCOGNITO" /> anonim}}</translation>
 <translation id="4550003330909367850">Parola burada baxmaq və ya kopyalamaq üçün cihazda ekran kilidi ayarlayın.</translation>
 <translation id="4554077758708533499">USB kabeli ilə qoşulub</translation>
 <translation id="4557685098773234337">Bura daha cəld giriş üçün bu səhifəni Əsas ekrana əlavə edin</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">Dəstəklənməyən Chrome nümunələrinin sayı.</translation>
 <translation id="4908869848243824489">Google Təkliflər</translation>
 <translation id="4910889077668685004">Ödəniş tətbiqləri</translation>
+<translation id="4912413785358399818">Tabı köçürün</translation>
 <translation id="4913161338056004800">Statistikanı sıfırlayın</translation>
 <translation id="4913169188695071480">Yeniləməni dayandırın</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# Səhifə}other{# Səhifə}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">İcazə verin</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Digər fəaliyyət formaları<ph name="END_LINK1" /> daxil olduğunuz zaman Google Hesabınızda saxlanıla bilər. İstənilən zaman onları silə bilərsiniz.</translation>
 <translation id="5061533557687621530">Hava durumunu yoxlamaq üçün mikrofona toxunun və "Bu gün hava necədir?" deyin</translation>
+<translation id="506254248375231072">Tab yoxdur</translation>
 <translation id="5087580092889165836">Kart əlavə edin</translation>
+<translation id="5091199029769593641">Tezliklə yeni tab açdığınız zaman <ph name="SITE_NAME" /> saytından hekayələri görəcəksiniz. İzlədiyiniz saytlar Google hesabınızda saxlanılır. Onları Təkliflər ayarlarında idarə edə bilərsiniz.</translation>
 <translation id="5091249083535528968">Artırılmış istifadə datası</translation>
 <translation id="509429900233858213">Xəta baş verdi.</translation>
 <translation id="510275257476243843">1 saat qaldı</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656"><ph name="PROVIDER" /> ilə</translation>
 <translation id="5456381639095306749">Endirmə səhifəsi</translation>
 <translation id="5458366071038729214">İzlədiyiniz saytları burada tapa bilərsiniz</translation>
+<translation id="5468068603361015296">Hər halda <ph name="FILE_NAME" /> faylını endirmək istəyirsiniz?</translation>
 <translation id="548278423535722844">Xəritə tətbiqində açın</translation>
 <translation id="5483197086164197190">Chrome'u araşdırın</translation>
 <translation id="5487521232677179737">Datanı silin</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">Müəllif hüquqları <ph name="YEAR" /> Google MMC. Bütün hüquqlar qorunur.</translation>
 <translation id="5810864297166300463">Veb Yardım</translation>
 <translation id="5814131985548525293">Başlamaq üçün bura yazın və ya səs ikonasına toxunun</translation>
+<translation id="5814749351757353073">Sevdiyiniz saytlardan xəbərdar olun</translation>
 <translation id="583281660410589416">Naməlum</translation>
 <translation id="5833984609253377421">Linki paylaşın</translation>
 <translation id="5834764604050996579">QR kodunu skanlamaq üçün Chrome'a kameranızdan istifadə imkanı verin</translation>
@@ -822,6 +835,7 @@
 <translation id="6221633008163990886">Parolları eksport etmək üçün kiliddən çıxarın</translation>
 <translation id="6232535412751077445">İzlənilməyin qadağan edilməsi o deməkdir ki, sorğu brauzer trafikinizə daxil ediləcək. İstənilən effekt saytın sorğuya cavab verməsindən və sorğunun necə anlaşılmasından asılıdır.  Məsələn, bəzi saytlar bu sorğuya ziyarət etdiyiniz saytlarda olmayan reklamları göstərməklə cavab verə bilər. Bir çox saytlar hələ də brauzinq datanızı toplayacaq və istifadə edəcək. Məqsədləri güvənliyin artırılması, kontent, xidmət, reklam, tövsiyə təqdim edilməsi və raport statistikasının yaradılması ola bilər.</translation>
 <translation id="624789221780392884">Yükləmə hazırdır</translation>
+<translation id="6264376385120300461">Hər bir halda endirin</translation>
 <translation id="6277522088822131679">Səhifə çap olunarkən problem oldu. Yenidən cəhd edin.</translation>
 <translation id="6278428485366576908">Tema</translation>
 <translation id="6292420053234093573">Chrome'u istifadə etməklə, <ph name="BEGIN_LINK1" />Google Xidmət Şərtləri<ph name="END_LINK1" /> və <ph name="BEGIN_LINK2" />Google Chrome və Chrome ƏS Əlavə Xidmət Şərtləri<ph name="END_LINK2" /> ilə razılaşırsınız.</translation>
@@ -879,10 +893,12 @@
 <translation id="6539092367496845964">Xəta baş verdi. Sonra cəhd edin.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{1 saat əvvəl yoxlanılıb}other{# saat əvvəl yoxlanılıb}}</translation>
 <translation id="6545017243486555795">Bütün Datanı Silin</translation>
+<translation id="6546511553472444032">Fayl zərərli ola bilər</translation>
 <translation id="6560414384669816528">Sogou ilə axtarış</translation>
 <translation id="656065428026159829">Daha çoxuna baxın</translation>
 <translation id="6565959834589222080">Wi-Fi əlçatan olduqda istifadə edilir</translation>
 <translation id="6566259936974865419">Chrome <ph name="GIGABYTES" /> GB qədər yaddaşa qənaət etdi</translation>
+<translation id="6569373978618239158">İndi yeni tab açdığınız zaman <ph name="SITE_NAME" /> saytından hekayələri görəcəksiniz. İzlədiyiniz saytlar Google hesabınızda saxlanılır. Onları Təkliflər ayarlarında idarə edə bilərsiniz.</translation>
 <translation id="6573096386450695060">Həmişə icazə verin</translation>
 <translation id="6573431926118603307">Başqa cihaz ilə Chrome'da açdığınız panellər burada görünəcək.</translation>
 <translation id="6583199322650523874">Cari səhifəni əlfəcin olaraq qeyd edin</translation>
@@ -948,6 +964,7 @@
 <translation id="696447261358045621">Anonim rejimdən çıxın</translation>
 <translation id="6979737339423435258">Hər zaman</translation>
 <translation id="6981982820502123353">Giriş İmkanı</translation>
+<translation id="6987047470128880212">Anonim bu cihazda əlçatan deyil</translation>
 <translation id="6989267951144302301">Endirilmədi</translation>
 <translation id="6995899638241819463">Data pozulması halında parolların ələ keçirilib-keçirilmədiyi bildirilir</translation>
 <translation id="7001056293070445572">Bu fayl böyükdür (<ph name="FILE_SIZE" />)</translation>
@@ -1025,6 +1042,7 @@
 <translation id="7482656565088326534">Önbaxış tabı</translation>
 <translation id="7484997419527351112">"Təkliflər" - deaktivdir</translation>
 <translation id="7485033510383818941">Lent məzmununu yeniləmək üçün səhifəni aşağı çəkin</translation>
+<translation id="749294055653435199">Google Linza bu cihazda əlçatan deyil</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (Güncəlləşib <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">yadda saxlanmış data</translation>
 <translation id="7498271377022651285">Xahiş edirik gözləyin ...</translation>
@@ -1126,6 +1144,7 @@
 <translation id="8037801708772278989">İndicə yoxlanılıb</translation>
 <translation id="8040831032425909005">Cəld Əməliyyat Axtarış Vidceti İkonası</translation>
 <translation id="804335162455518893">SD kart tapılmadı</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> anonim tab}other{<ph name="TAB_COUNT_NORMAL" /> anonim tab}}</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB əlçatandır</translation>
 <translation id="8058746566562539958">Yeni Chrome tabında açın</translation>
 <translation id="8063895661287329888">Əlfəcin əlavə etmək alınmadı.</translation>
@@ -1224,6 +1243,7 @@
 <translation id="8621068256433641644">telefon</translation>
 <translation id="8636825310635137004">Panelləri digər cihazlarınızdan əldə etmək üçün sinxronizasiyanı aktiv edin.</translation>
 <translation id="8641930654639604085">Böyüklər üçün olan saytları blok edin</translation>
+<translation id="864544049772947936">Pəncərələri idarə edin (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">Datanı Chrome Ayarlarından silə bilərsiniz</translation>
 <translation id="8656747343598256512">Google hesabınızla bu sayta və Chrome'a daxil olun. Sinxronlaşdırmanı daha sonra aktiv edə bilərsiniz.</translation>
 <translation id="8659579665266920523">Chrome ilə necə axtarış etməli</translation>
@@ -1312,6 +1332,7 @@
 <translation id="9219103736887031265">Şəkillər</translation>
 <translation id="926205370408745186">Digital Sağlamlıqdan Chrome fəaliyyətini silin</translation>
 <translation id="927968626442779827">Google Chrome'da Lite rejimindən istifadə edin</translation>
+<translation id="928550791203542716"><ph name="SITE_NAME" /> izlənilir</translation>
 <translation id="932327136139879170">Ev</translation>
 <translation id="938850635132480979">Xəta: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Parol daxil edin</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
index c252cb6c..116e6f17 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">Хуткі пошук з дапамогай галасавых каманд. Каб змяніць функцыю гэтай кнопкі, націсніце на яе і ўтрымлівайце.</translation>
 <translation id="1028699632127661925">Ідзе адпраўка на прыладу "<ph name="DEVICE_NAME" />"...</translation>
 <translation id="103269572468856066">Выдаліць і гэтыя даныя?</translation>
+<translation id="1034259925032978114">Акно адкрыта</translation>
 <translation id="1036348656032585052">Выключыць</translation>
 <translation id="1036727731225946849">Дадаецца <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Выдаліць і гэтыя даныя?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">Засцеражыце браўзер Chrome ад небяспек</translation>
 <translation id="2200113223741723867">Кіруйце наладамі абагульвання даных пра выкарыстанне</translation>
 <translation id="2227444325776770048">Працягнуць як <ph name="USER_FULL_NAME" /></translation>
+<translation id="2230777942707397948">Пустое акно</translation>
 <translation id="2239812875700136898">Кіруйце паказам артыкулаў з дапамогай кнопкі "Параметры рэкамендацый"</translation>
 <translation id="2259659629660284697">Экспарт пароляў…</translation>
 <translation id="2276696007612801991">Для праверкі пароляў увайдзіце ва Уліковы запіс Google</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Галоўная старонка Chrome</translation>
 <translation id="3157842584138209013">Глядзіце, колькі трафіка вы сэканомілі, з дапамогай кнопкі "Дадатковыя параметры"</translation>
 <translation id="3166827708714933426">Спалучэнні клавіш для працы з укладкамі і вокнамі</translation>
+<translation id="316694332262407393">Браўзер Chrome ужо запушчаны.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">Амаль гатова!</translation>
 <translation id="3207960819495026254">Дададзена ў закладкі</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">Павысіць бяспеку ў інтэрнэце</translation>
 <translation id="3602290021589620013">Перадпрагляд</translation>
 <translation id="3616113530831147358">Аўдыя</translation>
+<translation id="3622349720008044802">Кіраванне вокнамі</translation>
 <translation id="3631987586758005671">Абагульваецца з прыладай "<ph name="DEVICE_NAME" />"</translation>
 <translation id="3632295766818638029">Паказаць пароль</translation>
 <translation id="363596933471559332">Аўтаматычна ўваходзіць на вэб-сайты, выкарыстоўваючы захаваныя ўліковыя даныя. Калі функцыя выключана, кожны раз пры ўваходзе на вэб-сайт у вас будуць патрабаваць спраўджання.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">Налады перакладу</translation>
 <translation id="3738139272394829648">Пошук дотыкам</translation>
 <translation id="3739899004075612870">Закладка дададзена ў <ph name="PRODUCT_NAME" /></translation>
+<translation id="3740525748616366977">Галасавы пошук недаступны на гэтай прыладзе</translation>
 <translation id="3749259744154402564">Не падтрымлiваецца</translation>
 <translation id="3771001275138982843">Не ўдалося спампаваць абнаўленне</translation>
 <translation id="3771033907050503522">Укладкі інкогніта</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">Асноўныя даныя і інфармацыя пра вэб-сайты, якія вы наведваеце, і праграмы, якімі карыстаецеся</translation>
 <translation id="3775705724665058594">Адпраўка на вашы прылады</translation>
 <translation id="3778956594442850293">Дададзена на Галоўны экран</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 укладка}one{# укладка}few{# укладкі}many{# укладак}other{# укладкі}}</translation>
 <translation id="3803784507854318295">Кіраваць аўтапрайграваннем</translation>
 <translation id="3810838688059735925">Відэа</translation>
 <translation id="3810973564298564668">Кіраваць</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">"</translation>
 <translation id="393697183122708255">Уключаны галасавы пошук недаступны</translation>
 <translation id="395377504920307820">Выкарыстоўваць без уліковага запісу</translation>
+<translation id="3958287878205277013">Каб ачысціць гісторыю прагляду сайтаў у рэжыме інкогніта на прыладзе, закрыйце ўсе ўкладкі ў рэжыме інкогніта.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome загрузіць старонку па гатоўнасці}one{Chrome загрузіць старонкі па гатоўнасці}few{Chrome загрузіць старонкі па гатоўнасці}many{Chrome загрузіць старонкі па гатоўнасці}other{Chrome загрузіць старонкі па гатоўнасці}}</translation>
 <translation id="3962957115499249330">Як толькі па Wi-Fi пачнецца спампоўванне, вы пабачыце апавяшчэнне.</translation>
 <translation id="3963007978381181125">Шыфраванне фразы-пароля не распаўсюджваецца на спосабы аплаты і адрасы з Google Pay. Толькі карыстальнікі, якія ведаюць фразу-пароль, могуць чытаць вашы зашыфраваныя даныя. Google не атрымлівае і не захоўвае фразу-пароль. Калі вы не памятаеце фразу-пароль або хочаце змяніць гэту наладу, вам трэба скінуць сінхранізацыю. <ph name="BEGIN_LINK" />Даведацца больш<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 На сайце <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> могуць быць размешчаны іншыя формы гісторыі праглядаў сайтаў для вашага Уліковага запісу Google: напрыклад, пошукавыя запыты і дзеянні ў іншых сэрвісах Google.</translation>
 <translation id="4532845899244822526">Выберыце папку</translation>
 <translation id="4538018662093857852">Уключыць лёгкі рэжым</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> укладка}one{Укладак: <ph name="TAB_COUNT_MANY" /> (у рэжыме інкогніта: <ph name="TAB_COUNT_INCOGNITO" />)}few{Укладак: <ph name="TAB_COUNT_MANY" /> (у рэжыме інкогніта: <ph name="TAB_COUNT_INCOGNITO" />)}many{Укладак: <ph name="TAB_COUNT_MANY" /> (у рэжыме інкогніта: <ph name="TAB_COUNT_INCOGNITO" />)}other{Укладак: <ph name="TAB_COUNT_MANY" /> (у рэжыме інкогніта: <ph name="TAB_COUNT_INCOGNITO" />)}}</translation>
 <translation id="4550003330909367850">Каб праглядаць або капіраваць ваш пароль сюды, наладзьце на гэтай прыладзе блакіроўку экрана.</translation>
 <translation id="4554077758708533499">Падключана праз кабель USB</translation>
 <translation id="4557685098773234337">Каб пераходзіць на гэты сайт хутчэй, дадайце яго на галоўны экран</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">Недапушчальная колькасць версій Chrome.</translation>
 <translation id="4908869848243824489">Рэкамендацыі ад Google</translation>
 <translation id="4910889077668685004">Плацежныя праграмы</translation>
+<translation id="4912413785358399818">Перамясціць укладку</translation>
 <translation id="4913161338056004800">Скінуць статыстыку</translation>
 <translation id="4913169188695071480">Спыніць абнаўленне</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# старонка}one{# старонка}few{# старонкі}many{# старонак}other{# старонкі}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">Дазволіць</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Іншыя дзеянні<ph name="END_LINK1" /> могуць захоўвацца ва Уліковым запісе Google, у які вы ўвайшлі. Іх можна выдаліць у любы час.</translation>
 <translation id="5061533557687621530">Каб даведацца пра надвор'е, націсніце значок мікрафона і скажыце “What’s the weather today?” ("Якое сёння надвор'е?")</translation>
+<translation id="506254248375231072">Няма ўкладак</translation>
 <translation id="5087580092889165836">Дадаць картку</translation>
+<translation id="5091199029769593641">Неўзабаве пры адкрыцці новай укладкі вы будзеце бачыць гісторыі з сайта <ph name="SITE_NAME" />. Сайты, на якія вы падпісаны, захоўваюцца ў вашым Уліковым запісе Google. Кіраваць імі можна ў наладах Рэкамендацый.</translation>
 <translation id="5091249083535528968">Пашыраныя даныя пра выкарыстанне</translation>
 <translation id="509429900233858213">Адбылася памылка.</translation>
 <translation id="510275257476243843">Засталася 1 гадзіна</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">крыніца: <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">Спампаваць старонку</translation>
 <translation id="5458366071038729214">Тут будуць паказвацца сайты, на якія вы падпішацеся</translation>
+<translation id="5468068603361015296">Усё роўна спампаваць файл "<ph name="FILE_NAME" />"?</translation>
 <translation id="548278423535722844">Адкрыць у праграме карт</translation>
 <translation id="5483197086164197190">Навігацыя ў Chrome</translation>
 <translation id="5487521232677179737">Ачысціць даныя</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">© <ph name="YEAR" /> Google LLC. Усе правы абароненыя.</translation>
 <translation id="5810864297166300463">Дапамога пры рабоце ў інтэрнэце</translation>
 <translation id="5814131985548525293">Увядзіце тэкст тут або націсніце на значок мікрафона, каб пачаць пошук</translation>
+<translation id="5814749351757353073">Падпісвайцеся на любімыя сайты</translation>
 <translation id="583281660410589416">Невядома</translation>
 <translation id="5833984609253377421">Абагуліць спасылку</translation>
 <translation id="5834764604050996579">Каб сканіраваць QR-код, дазвольце браўзеру Chrome выкарыстоўваць камеру</translation>
@@ -824,6 +837,7 @@
 
 Напрыклад, некаторыя вэб-сайты могуць пачаць паказ неперсаналізаванай рэкламы. Многія сайты працягнуць збіраць і выкарыстоўваць даныя аб вашых дзеяннях у браўзеры, напрыклад для павышэння бяспекі, паказу змесціва, рэкламы і рэкамендацый або генерацыі статыстыкі для справаздач.</translation>
 <translation id="624789221780392884">Абнаўленне гатовае</translation>
+<translation id="6264376385120300461">Усё роўна спампаваць</translation>
 <translation id="6277522088822131679">Узнікла праблема з друкам старонкі. Паўтарыце спробу.</translation>
 <translation id="6278428485366576908">Тэма</translation>
 <translation id="6292420053234093573">Выкарыстоўваючы Chrome, вы згаджаецеся з <ph name="BEGIN_LINK1" />Умовамі выкарыстання Google<ph name="END_LINK1" /> і <ph name="BEGIN_LINK2" />Дадатковымі ўмовамі выкарыстання Google Chrome і Chrome OS<ph name="END_LINK2" />.</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">Нешта пайшло не так. Паўтарыце спробу пазней.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Праверка праводзілася гадзіну таму}one{Праверка праводзілася # гадзіну таму}few{Праверка праводзілася # гадзіны таму}many{Праверка праводзілася # гадзін таму}other{Праверка праводзілася # гадзіны таму}}</translation>
 <translation id="6545017243486555795">Ачысціць усе даныя</translation>
+<translation id="6546511553472444032">Файл можа быць шкодным</translation>
 <translation id="6560414384669816528">Пошук праз Sogou</translation>
 <translation id="656065428026159829">Яшчэ</translation>
 <translation id="6565959834589222080">Калі сетка Wi-Fi даступная, будзе выкарыстоўвацца яна</translation>
 <translation id="6566259936974865419">Chrome сэканоміў вам <ph name="GIGABYTES" /> ГБ</translation>
+<translation id="6569373978618239158">Цяпер пры адкрыцці новай укладкі вы будзеце бачыць гісторыі з сайта "<ph name="SITE_NAME" />". Сайты, на якія вы падпісаны, захоўваюцца ў вашым Уліковым запісе Google. Кіраваць імі можна ў наладах Рэкамендацый.</translation>
 <translation id="6573096386450695060">Заўсёды дазваляць</translation>
 <translation id="6573431926118603307">Тут з'явяцца ўкладкі, адкрытыя вамі ў браўзеры Chrome на іншых прыладах.</translation>
 <translation id="6583199322650523874">Дадаць бягучую старонку ў закладкі</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">Выйсці з рэжыму інкогніта</translation>
 <translation id="6979737339423435258">За ўвесь час</translation>
 <translation id="6981982820502123353">Спец. магчымасці</translation>
+<translation id="6987047470128880212">На гэтай прыладзе нельга адкрываць укладкі ў рэжыме інкогніта</translation>
 <translation id="6989267951144302301">Не ўдалося спампаваць</translation>
 <translation id="6995899638241819463">Папярэджваць мяне ў выпадку, калі пры ўцечцы даных былі раскрыты паролі</translation>
 <translation id="7001056293070445572">Гэта вялікі файл (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">Укладка перадпрагляду</translation>
 <translation id="7484997419527351112">Рэкамендацыі выключаны</translation>
 <translation id="7485033510383818941">Каб абнавіць змесціва стужкі, пацягніце старонку ўніз</translation>
+<translation id="749294055653435199">Google Аб'ектыў недаступны на гэтай прыладзе</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (абноўлена <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">эканомія трафіка</translation>
 <translation id="7498271377022651285">Пачакайце…</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">Праверка праводзілася толькі што</translation>
 <translation id="8040831032425909005">Значок віджэта Пошуку ў Хуткіх дзеяннях</translation>
 <translation id="804335162455518893">SD-карта не знойдзена</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> укладка ў рэжыме інкогніта}one{<ph name="TAB_COUNT_NORMAL" /> укладка ў рэжыме інкогніта}few{<ph name="TAB_COUNT_NORMAL" /> укладкі ў рэжыме інкогніта}many{<ph name="TAB_COUNT_NORMAL" /> укладак у рэжыме інкогніта}other{<ph name="TAB_COUNT_NORMAL" /> укладкі ў рэжыме інкогніта}}</translation>
 <translation id="8051695050440594747">Даступна <ph name="MEGABYTES" /> МБ</translation>
 <translation id="8058746566562539958">Адкрыць у новай укладцы Chrome</translation>
 <translation id="8063895661287329888">Не ўдалося дадаць закладку.</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">тэлефоне</translation>
 <translation id="8636825310635137004">Каб глядзець укладкі са сваіх іншых прылад, уключыце сінхранізацыю.</translation>
 <translation id="8641930654639604085">Спрабаваць блакіраваць сайты для дарослых</translation>
+<translation id="864544049772947936">Кіраваць вокнамі (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">Даныя можна выдаліць у наладах Chrome</translation>
 <translation id="8656747343598256512">Выканайце ўваход на гэты сайт і ў Chrome, выкарыстаўшы свой Уліковы запіс Google. Сінхранізацыю можна ўключыць пазней.</translation>
 <translation id="8659579665266920523">Як выконваць пошук праз Chrome</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">Відарысы</translation>
 <translation id="926205370408745186">Выдаліць дзеянні ў Chrome са службы лічбавага камфорту</translation>
 <translation id="927968626442779827">Выкарыстоўвайце Google Chrome, уключыўшы спрошчаны рэжым</translation>
+<translation id="928550791203542716"><ph name="SITE_NAME" />: вы падпісаны</translation>
 <translation id="932327136139879170">Галоўная старонка</translation>
 <translation id="938850635132480979">Памылка: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Увядзіце фразу-пароль</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
index adc16e112..25ddc97 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">Rychle vyhledávat hlasem. Pokud tuto zkratku chcete upravit, podržte ji.</translation>
 <translation id="1028699632127661925">Odesílání na zařízení <ph name="DEVICE_NAME" />...</translation>
 <translation id="103269572468856066">Vymazat data i z těchto webů a aplikací?</translation>
+<translation id="1034259925032978114">Okno je otevřené</translation>
 <translation id="1036348656032585052">Vypnout</translation>
 <translation id="1036727731225946849">Přidávání aplikace <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Vymazat data i z těchto webů?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">Aktivujte si v Chromu maximální zabezpečení</translation>
 <translation id="2200113223741723867">Správa sdílení údajů o využití</translation>
 <translation id="2227444325776770048">Pokračovat jako uživatel <ph name="USER_FULL_NAME" /></translation>
+<translation id="2230777942707397948">Prázdné okno</translation>
 <translation id="2239812875700136898">Pomocí tlačítka Možnosti funkce Objevit můžete ovládat, jaké příběhy se vám budou zobrazovat</translation>
 <translation id="2259659629660284697">Exportovat hesla…</translation>
 <translation id="2276696007612801991">Pokud chcete zkontrolovat hesla, přihlaste se k účtu Google</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Domovská stránka Chromu</translation>
 <translation id="3157842584138209013">Informace o množství uspořených dat zobrazíte pomocí tlačítka Další možnosti</translation>
 <translation id="3166827708714933426">Zkratky pro okna a karty</translation>
+<translation id="316694332262407393">Chrome už je spuštěný.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">Skoro hotovo.</translation>
 <translation id="3207960819495026254">Přidáno do záložek</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">Zlepšovat bezpečnost na webu</translation>
 <translation id="3602290021589620013">Náhled</translation>
 <translation id="3616113530831147358">Zvuk</translation>
+<translation id="3622349720008044802">Spravovat okna</translation>
 <translation id="3631987586758005671">Sdílení se zařízením <ph name="DEVICE_NAME" /></translation>
 <translation id="3632295766818638029">Zrušit maskování hesla</translation>
 <translation id="363596933471559332">Přihlašovat se na weby automaticky pomocí uložených identifikačních údajů. Když je tato funkce vypnutá, budete před každým přihlášením na web požádáni o ověření.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">Nastavení překladu</translation>
 <translation id="3738139272394829648">Vyhledání klepnutím</translation>
 <translation id="3739899004075612870">Přidáno do záložek (<ph name="PRODUCT_NAME" />)</translation>
+<translation id="3740525748616366977">Hlasové vyhledávání není v tomto zařízení k dispozici</translation>
 <translation id="3749259744154402564">Nepodporováno</translation>
 <translation id="3771001275138982843">Aktualizaci nelze stáhnout</translation>
 <translation id="3771033907050503522">Anonymní karty</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">Základní data plus informace o navštívených webech a používaných aplikacích</translation>
 <translation id="3775705724665058594">Odeslat na vaše zařízení</translation>
 <translation id="3778956594442850293">Přidáno na domovskou obrazovku</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 karta}few{# karty}many{# karty}other{# karet}}</translation>
 <translation id="3803784507854318295">Spravovat automatické přehrávání</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Spravovat</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">„</translation>
 <translation id="393697183122708255">Hlasové vyhledávání není k dispozici</translation>
 <translation id="395377504920307820">Používat bez účtu</translation>
+<translation id="3958287878205277013">Pokud ze zařízení chcete vymazat historii anonymního prohlížení, zavřete všechny anonymní karty.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome stránku načte, až bude připraven}few{Chrome stránky načte, až bude připraven}many{Chrome stránky načte, až bude připraven}other{Chrome stránky načte, až bude připraven}}</translation>
 <translation id="3962957115499249330">Až stahování začne (přes Wi-Fi), zobrazí se oznámení.</translation>
 <translation id="3963007978381181125">Šifrování pomocí heslové fráze se nevztahuje na platební metody a adresy ze služby Google Pay. Vaše šifrovaná data mohou číst pouze uživatelé, kteří mají vaši heslovou frázi. Heslová fráze se neodesílá do Googlu a není na Googlu uložena. Pokud ji zapomenete nebo toto nastavení budete chtít změnit, bude nutné synchronizaci resetovat. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 Na stránce <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> mohou být k dispozici další druhy historie prohlížení zaznamenané ve vašem účtu Google, například vyhledávací dotazy a aktivita z ostatních služeb Google.</translation>
 <translation id="4532845899244822526">Výběr složky</translation>
 <translation id="4538018662093857852">Zapnout zjednodušený režim</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> karta}few{<ph name="TAB_COUNT_MANY" /> karty, anonymní: <ph name="TAB_COUNT_INCOGNITO" />}many{<ph name="TAB_COUNT_MANY" /> karty, anonymní: <ph name="TAB_COUNT_INCOGNITO" />}other{<ph name="TAB_COUNT_MANY" /> karet, anonymní: <ph name="TAB_COUNT_INCOGNITO" />}}</translation>
 <translation id="4550003330909367850">Chcete-li zde zobrazovat či kopírovat hesla, nastavte v tomto zařízení zámek obrazovky.</translation>
 <translation id="4554077758708533499">Připojeno kabelem USB</translation>
 <translation id="4557685098773234337">Přidejte si stránku na plochu, abyste se na ni dostali rychleji</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">Nepodporovaný počet instancí Chromu.</translation>
 <translation id="4908869848243824489">Kanál Objevit od Googlu</translation>
 <translation id="4910889077668685004">Platební aplikace</translation>
+<translation id="4912413785358399818">Přesunout kartu</translation>
 <translation id="4913161338056004800">Obnovit statistiky</translation>
 <translation id="4913169188695071480">Zastavit obnovování</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# stránka}few{# stránky}many{# stránky}other{# stránek}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">Povolit</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Další typy aktivity<ph name="END_LINK1" /> se mohou ukládat do vašeho účtu Google, když jste přihlášeni. Můžete je kdykoli smazat.</translation>
 <translation id="5061533557687621530">Pokud chcete získat informace o počasí, klepněte na mikrofon a řekněte „Jaké je dnes počasí?“</translation>
+<translation id="506254248375231072">Žádné karty</translation>
 <translation id="5087580092889165836">Přidat kartu</translation>
+<translation id="5091199029769593641">Brzy se vám po otevření nové karty začnou zobrazovat články z webu <ph name="SITE_NAME" />. Weby, které sledujete, se ukládají do vašeho účtu Google. Můžete je spravovat v nastavení funkce Objevit.</translation>
 <translation id="5091249083535528968">Rozšířené údaje o využití</translation>
 <translation id="509429900233858213">Došlo k chybě.</translation>
 <translation id="510275257476243843">Zbývá: 1 h</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">(<ph name="PROVIDER" />)</translation>
 <translation id="5456381639095306749">Stáhnout stránku</translation>
 <translation id="5458366071038729214">Zde najdete weby, které sledujete</translation>
+<translation id="5468068603361015296">Chcete soubor <ph name="FILE_NAME" /> přesto stáhnout?</translation>
 <translation id="548278423535722844">Otevřít v mapové aplikaci</translation>
 <translation id="5483197086164197190">Navigace v Chromu</translation>
 <translation id="5487521232677179737">Vymazat data</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Všechna práva vyhrazena.</translation>
 <translation id="5810864297166300463">Asistence na webu</translation>
 <translation id="5814131985548525293">Začněte psát nebo klepněte na ikonu hlasového zadávání</translation>
+<translation id="5814749351757353073">Sledujte své oblíbené weby</translation>
 <translation id="583281660410589416">Neznámé</translation>
 <translation id="5833984609253377421">Sdílet odkaz</translation>
 <translation id="5834764604050996579">Pokud chcete naskenovat QR kód, umožněte Chromu používat kameru</translation>
@@ -824,6 +837,7 @@
 
 Některé weby mohou například na tento požadavek reagovat tak, že vám zobrazí reklamy, které nejsou založeny na ostatních navštívených webových stránkách. Řada webů bude i nadále shromažďovat vaše údaje o prohlížení a používat je například ke zlepšení zabezpečení, poskytování obsahu, reklam a doporučení a ke generování statistik pro přehledy.</translation>
 <translation id="624789221780392884">Je připravena aktualizace</translation>
+<translation id="6264376385120300461">Přesto stáhnout</translation>
 <translation id="6277522088822131679">Při tištění stránky došlo k problému. Zkuste to prosím znovu.</translation>
 <translation id="6278428485366576908">Motiv</translation>
 <translation id="6292420053234093573">Používáním Chromu vyjadřujete souhlas se <ph name="BEGIN_LINK1" />smluvními podmínkami společnosti Google<ph name="END_LINK1" /> a <ph name="BEGIN_LINK2" />doplňujícími smluvními podmínkami prohlížeče Chrome a systému Chrome OS<ph name="END_LINK2" />.</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">Něco se pokazilo. Zkuste to později.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Zkontrolováno před hodinou}few{Zkontrolováno před # hodinami}many{Zkontrolováno před # hodiny}other{Zkontrolováno před # hodinami}}</translation>
 <translation id="6545017243486555795">Vymazat všechna data</translation>
+<translation id="6546511553472444032">Soubor může být škodlivý</translation>
 <translation id="6560414384669816528">Vyhledávat pomocí Sogou</translation>
 <translation id="656065428026159829">Zobrazit další</translation>
 <translation id="6565959834589222080">Síť Wi-Fi se použije, když bude k dispozici</translation>
 <translation id="6566259936974865419">Chrome vám ušetřil <ph name="GIGABYTES" /> GB</translation>
+<translation id="6569373978618239158">Když od teď otevřete novou kartu, budou se zobrazovat články z webu <ph name="SITE_NAME" />. Weby, které sledujete, se ukládají do vašeho účtu Google. Můžete je spravovat v nastavení funkce Objevit.</translation>
 <translation id="6573096386450695060">Vždy povolit</translation>
 <translation id="6573431926118603307">Zde se objeví karty, které jste otevřeli v Chromu ve svých ostatních zařízeních.</translation>
 <translation id="6583199322650523874">Přidat aktuální stránku do záložek</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">Ukončit anonymní režim</translation>
 <translation id="6979737339423435258">Od počátku věků</translation>
 <translation id="6981982820502123353">Usnadnění</translation>
+<translation id="6987047470128880212">Na tomto zařízení není anonymní režim dostupný</translation>
 <translation id="6989267951144302301">Stažení se nezdařilo</translation>
 <translation id="6995899638241819463">Upozorňovat v případě vyzrazení hesel při porušení zabezpečení</translation>
 <translation id="7001056293070445572">Tento soubor je velký (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">Karta náhledu</translation>
 <translation id="7484997419527351112">Objevit – vypnuto</translation>
 <translation id="7485033510383818941">Obsah informačního kanálu obnovíte potáhnutím stránky dolů</translation>
+<translation id="749294055653435199">Funkce Google Lens v tomto zařízení není dostupná</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (aktualizováno <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">uspořená data</translation>
 <translation id="7498271377022651285">Čekejte prosím…</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">Zkontrolováno právě teď</translation>
 <translation id="8040831032425909005">Ikona widgetu Vyhledávání v sekci Rychlé akce</translation>
 <translation id="804335162455518893">SD karta nenalezena</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> anonymní karta}few{<ph name="TAB_COUNT_NORMAL" /> anonymní karty}many{<ph name="TAB_COUNT_NORMAL" /> anonymní karty}other{<ph name="TAB_COUNT_NORMAL" /> anonymních karet}}</translation>
 <translation id="8051695050440594747">K dispozici: <ph name="MEGABYTES" /> MB</translation>
 <translation id="8058746566562539958">Otevřít na nové kartě v Chromu</translation>
 <translation id="8063895661287329888">Přidání záložky se nezdařilo.</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">telefon</translation>
 <translation id="8636825310635137004">Chcete-li získat přístup ke kartám ze svých ostatních zařízení, zapněte synchronizaci.</translation>
 <translation id="8641930654639604085">Pokusit se blokovat weby pouze pro dospělé</translation>
+<translation id="864544049772947936">Spravovat okna (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">Data můžete vymazat v nastavení Chromu</translation>
 <translation id="8656747343598256512">Přihlaste se na tento web a do Chromu pomocí svého účtu Google. Synchronizaci můžete zapnout později.</translation>
 <translation id="8659579665266920523">Vyhledávání v Chromu</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">Obrázky</translation>
 <translation id="926205370408745186">Odstranit vaši aktivitu v Chromu z digitální rovnováhy</translation>
 <translation id="927968626442779827">Používejte v prohlížeči Google Chrome zjednodušený režim</translation>
+<translation id="928550791203542716">Sledujete <ph name="SITE_NAME" /></translation>
 <translation id="932327136139879170">Domovská stránka</translation>
 <translation id="938850635132480979">Chyba: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Zadat heslovou frázi</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
index fe548d2..a8433f6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">Haz una búsqueda rápida con la voz. Para editar este atajo, mantenlo presionado.</translation>
 <translation id="1028699632127661925">Enviando a <ph name="DEVICE_NAME" />…</translation>
 <translation id="103269572468856066">¿Borrar estos datos?</translation>
+<translation id="1034259925032978114">La ventana está abierta</translation>
 <translation id="1036348656032585052">Desactivar</translation>
 <translation id="1036727731225946849">Agregando <ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">¿Borrar estos datos?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">Obtén la seguridad más sólida de Chrome</translation>
 <translation id="2200113223741723867">Administrar cómo se comparten los datos de uso</translation>
 <translation id="2227444325776770048">Continuar como <ph name="USER_FULL_NAME" /></translation>
+<translation id="2230777942707397948">Ventana vacía</translation>
 <translation id="2239812875700136898">Controla tus historias desde las opciones del botón Descubre</translation>
 <translation id="2259659629660284697">Exportar contraseñas…</translation>
 <translation id="2276696007612801991">Para verificar las contraseñas, accede a tu Cuenta de Google</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Página principal de Chrome</translation>
 <translation id="3157842584138209013">Para ver cuántos datos redujiste, selecciona el botón Más opciones</translation>
 <translation id="3166827708714933426">Accesos directos a ventanas y pestañas</translation>
+<translation id="316694332262407393">Chrome ya se está ejecutando aquí.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">Ya casi terminas.</translation>
 <translation id="3207960819495026254">Agregada a favoritos</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">Ayuda a mejorar la seguridad en la Web</translation>
 <translation id="3602290021589620013">Vista previa</translation>
 <translation id="3616113530831147358">Audio</translation>
+<translation id="3622349720008044802">Administrar ventanas</translation>
 <translation id="3631987586758005671">Compartiendo con <ph name="DEVICE_NAME" /></translation>
 <translation id="3632295766818638029">Quitar máscara de la contraseña</translation>
 <translation id="363596933471559332">Permite acceder automáticamente a los sitios web con las credenciales almacenadas. Si la función está desactivada, siempre se solicitará verificación antes de acceder a un sitio web.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">Configuración de traducción</translation>
 <translation id="3738139272394829648">Tocar para buscar</translation>
 <translation id="3739899004075612870">Agregado a favoritos en <ph name="PRODUCT_NAME" /></translation>
+<translation id="3740525748616366977">La búsqueda por voz no está disponible en este dispositivo.</translation>
 <translation id="3749259744154402564">No se admite esa acción</translation>
 <translation id="3771001275138982843">No se pudo descargar la actualización</translation>
 <translation id="3771033907050503522">Pestañas de incógnito</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">Información básica y datos sobre los sitios web que visitas y las apps que usas</translation>
 <translation id="3775705724665058594">Enviar a tus dispositivos</translation>
 <translation id="3778956594442850293">Se agregó a la pantalla principal</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 pestaña}other{# pestañas}}</translation>
 <translation id="3803784507854318295">Administra la reproducción automática</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Administrar</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">"</translation>
 <translation id="393697183122708255">La búsqueda por voz no está habilitada</translation>
 <translation id="395377504920307820">Usar sin una cuenta</translation>
+<translation id="3958287878205277013">Para borrar del dispositivo el historial de navegación en modo Incógnito, cierra todas las pestañas de incógnito.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome cargará la página cuando esté lista}other{Chrome cargará las páginas cuando estén listas}}</translation>
 <translation id="3962957115499249330">Verás una notificación cuando esta descarga comience en la red Wi-Fi.</translation>
 <translation id="3963007978381181125">La encriptación de la frase de contraseña no incluye formas de pago ni direcciones de Google Pay. Solo las personas que tengan tu frase de contraseña pueden leer los datos encriptados. Google no envía ni almacena la frase de contraseña. Si la olvidas o quieres cambiar esta configuración, deberás restablecer la sincronización. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 Es posible que tu cuenta de Google tenga otros formularios de historial de navegación, como búsquedas y actividad de otros servicios de Google en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="4532845899244822526">Seleccionar carpeta</translation>
 <translation id="4538018662093857852">Activar el modo lite</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> pestaña}other{<ph name="TAB_COUNT_MANY" /> pestañas, <ph name="TAB_COUNT_INCOGNITO" /> de incógnito}}</translation>
 <translation id="4550003330909367850">Para ver o copiar tu contraseña aquí, establece un bloqueo de pantalla en este dispositivo.</translation>
 <translation id="4554077758708533499">Conectado con cable USB</translation>
 <translation id="4557685098773234337">Para acceder aquí más rápido, agrega esta página a la pantalla principal</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">Cantidad de instancias de Chrome no admitidas</translation>
 <translation id="4908869848243824489">Descubre de Google</translation>
 <translation id="4910889077668685004">Apps de pago</translation>
+<translation id="4912413785358399818">Mover pestaña</translation>
 <translation id="4913161338056004800">Restablecer estadísticas</translation>
 <translation id="4913169188695071480">Detener actualización</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# página}other{# páginas}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">Permitir</translation>
 <translation id="5054455334322721892">Es posible que se guarden <ph name="BEGIN_LINK1" />otras formas de actividad<ph name="END_LINK1" /> en tu Cuenta de Google cuando accedes. Podrás borrarlas en cualquier momento.</translation>
 <translation id="5061533557687621530">Para consultar el estado del tiempo, presiona el micrófono y di "¿Cómo está el clima hoy?".</translation>
+<translation id="506254248375231072">No hay pestañas</translation>
 <translation id="5087580092889165836">Agregar tarjeta</translation>
+<translation id="5091199029769593641">Pronto, cuando abras una nueva pestaña, verás historias de <ph name="SITE_NAME" />. Los sitios que sigues se guardan en tu Cuenta de Google. Puedes administrarlos en la configuración de Descubre.</translation>
 <translation id="5091249083535528968">Datos de uso extendidos</translation>
 <translation id="509429900233858213">Se ha producido un error.</translation>
 <translation id="510275257476243843">1 hora restante</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">con <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">Descargar página</translation>
 <translation id="5458366071038729214">Aquí encontrarás los sitios que sigues.</translation>
+<translation id="5468068603361015296">¿Quieres descargar <ph name="FILE_NAME" /> de todos modos?</translation>
 <translation id="548278423535722844">Abrir en una app de mapas</translation>
 <translation id="5483197086164197190">Navigate Chrome</translation>
 <translation id="5487521232677179737">Borrar datos</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Todos los derechos reservados.</translation>
 <translation id="5810864297166300463">Asistencia web</translation>
 <translation id="5814131985548525293">Escribe aquí o presiona el ícono de micrófono para comenzar</translation>
+<translation id="5814749351757353073">Mantente al tanto de tus sitios favoritos</translation>
 <translation id="583281660410589416">Desconocido</translation>
 <translation id="5833984609253377421">Compartir vínculo</translation>
 <translation id="5834764604050996579">Si quieres escanear un código QR, permite que Chrome use la cámara</translation>
@@ -824,6 +837,7 @@
 
 Por ejemplo, algunos sitios web pueden responder a la solicitud mediante anuncios que no están basados en otros sitios web que hayas visitado. Muchos sitios web seguirán recopilando y utilizando tus datos de navegación, por ejemplo, para mejorar la seguridad, proporcionar contenido, anuncios y recomendaciones, y generar estadísticas de informes.</translation>
 <translation id="624789221780392884">Actualización lista</translation>
+<translation id="6264376385120300461">Descargar de todos modos</translation>
 <translation id="6277522088822131679">Se produjo un error al imprimir la página. Vuelve a intentarlo.</translation>
 <translation id="6278428485366576908">Tema</translation>
 <translation id="6292420053234093573">Si usas Chrome, aceptas las <ph name="BEGIN_LINK1" />Condiciones del Servicio de Google<ph name="END_LINK1" /> y las <ph name="BEGIN_LINK2" />Condiciones del Servicio Adicionales de Google Chrome y el Sistema operativo Chrome<ph name="END_LINK2" />.</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">Se produjo un error; vuelve a intentarlo más tarde.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Se verificó hace 1 hora}other{Se verificó hace # horas}}</translation>
 <translation id="6545017243486555795">Borrar todos los datos</translation>
+<translation id="6546511553472444032">Es posible que el archivo sea dañino</translation>
 <translation id="6560414384669816528">Buscar con Sogou</translation>
 <translation id="656065428026159829">Ver más</translation>
 <translation id="6565959834589222080">Se utilizará Wi-Fi cuando esté disponible.</translation>
 <translation id="6566259936974865419">Chrome te permitió ahorrar <ph name="GIGABYTES" /> gigabytes</translation>
+<translation id="6569373978618239158">Ahora, cuando abras una nueva pestaña, verás historias de <ph name="SITE_NAME" />. Los sitios que sigues se guardan en tu Cuenta de Google. Puedes administrarlos en la configuración de Descubre.</translation>
 <translation id="6573096386450695060">Permitir siempre</translation>
 <translation id="6573431926118603307">Aquí aparecerán las pestañas que abriste en Chrome en tus otros dispositivos.</translation>
 <translation id="6583199322650523874">Agregar la página actual a favoritos</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">Salir del modo Incógnito</translation>
 <translation id="6979737339423435258">Todos</translation>
 <translation id="6981982820502123353">Accesibilidad</translation>
+<translation id="6987047470128880212">El modo Incógnito no está disponible en este dispositivo.</translation>
 <translation id="6989267951144302301">No se pudo descargar</translation>
 <translation id="6995899638241819463">Advertirme si quedan expuestas las contraseñas ante una violación de la seguridad de los datos</translation>
 <translation id="7001056293070445572">Este archivo es grande (<ph name="FILE_SIZE" />).</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">Pestaña de vista previa</translation>
 <translation id="7484997419527351112">Descubre (desactivado)</translation>
 <translation id="7485033510383818941">Para actualizar el contenido del feed, desliza el dedo hacia abajo en la página</translation>
+<translation id="749294055653435199">Google Lens no está disponible en este dispositivo.</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (actualización: <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">de datos ahorrados</translation>
 <translation id="7498271377022651285">Espera un momento…</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">Se verificó recién</translation>
 <translation id="8040831032425909005">Ícono del Widget de la Búsqueda de acción rápida</translation>
 <translation id="804335162455518893">No se encontró la tarjeta SD</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> pestaña de incógnito}other{<ph name="TAB_COUNT_NORMAL" /> pestañas de incógnito}}</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB disponibles</translation>
 <translation id="8058746566562539958">Abrir en una nueva pestaña de Chrome</translation>
 <translation id="8063895661287329888">Se produjo un error al agregar el marcador.</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">teléfono</translation>
 <translation id="8636825310635137004">Activa la sincronización para obtener las pestañas de tus otros dispositivos.</translation>
 <translation id="8641930654639604085">Tratar de bloquear los sitios para adultos</translation>
+<translation id="864544049772947936">Administrar ventanas (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">Puedes borrar los datos en la Configuración de Chrome</translation>
 <translation id="8656747343598256512">Accede a este sitio y a Chrome con tu Cuenta de Google. Puedes activar la sincronización más tarde.</translation>
 <translation id="8659579665266920523">Cómo realizar búsquedas en Chrome</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">Imágenes</translation>
 <translation id="926205370408745186">Quita tu actividad en Chrome de Bienestar digital</translation>
 <translation id="927968626442779827">Usa el modo lite en Google Chrome</translation>
+<translation id="928550791203542716">Siguiendo <ph name="SITE_NAME" /></translation>
 <translation id="932327136139879170">Página principal</translation>
 <translation id="938850635132480979">Error: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Ingresar frase de contraseña</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
index 0faddda..ffc134bb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">Hae nopeasti äänikomennoilla. Kosketa pikakuvaketta pitkään, niin voit muokata sitä.</translation>
 <translation id="1028699632127661925">Lähetetään: <ph name="DEVICE_NAME" /></translation>
 <translation id="103269572468856066">Poistetaanko data?</translation>
+<translation id="1034259925032978114">Ikkuna on auki</translation>
 <translation id="1036348656032585052">Poista käytöstä</translation>
 <translation id="1036727731225946849">Lisätään <ph name="WEBAPK_NAME" />…</translation>
 <translation id="1045899828449635435">Poistetaanko data?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">Ota Chromen tehokkain suojaus käyttöön</translation>
 <translation id="2200113223741723867">Valitse käyttödatan jakamisasetukset</translation>
 <translation id="2227444325776770048">Jatka tilillä <ph name="USER_FULL_NAME" /></translation>
+<translation id="2230777942707397948">Tyhjä ikkuna</translation>
 <translation id="2239812875700136898">Muuta juttujesi asetuksia Discover-asetuksissa</translation>
 <translation id="2259659629660284697">Vie salasanat…</translation>
 <translation id="2276696007612801991">Kirjaudu Google-tilillesi tarkistaaksesi salasanasi</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Chromen etusivu</translation>
 <translation id="3157842584138209013">Lisäasetukset-painiketta klikkaamalla voit katsoa, kuinka paljon dataa olet säästänyt.</translation>
 <translation id="3166827708714933426">Välilehti- ja ikkunapikanäppäimet</translation>
+<translation id="316694332262407393">Chrome on jo käynnissä täällä.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">Melkein valmista</translation>
 <translation id="3207960819495026254">Kirjanmerkeissä</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">Paranna verkon turvallisuutta</translation>
 <translation id="3602290021589620013">Esikatselu</translation>
 <translation id="3616113530831147358">Ääni</translation>
+<translation id="3622349720008044802">Hallitse ikkunoita</translation>
 <translation id="3631987586758005671">Jaetaan: <ph name="DEVICE_NAME" /></translation>
 <translation id="3632295766818638029">Paljasta salasana</translation>
 <translation id="363596933471559332">Kirjaudu automaattisesti verkkosivustoille käyttämällä tallennettuja kirjautumistietoja. Jos tämä toiminto ei ole käytössä, sinua pyydetään vahvistamaan kirjautuminen aina, kun kirjaudut sivustolle.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">Käännösasetukset</translation>
 <translation id="3738139272394829648">Koskettamalla hakeminen</translation>
 <translation id="3739899004075612870">Lisätty kirjanmerkkeihin: <ph name="PRODUCT_NAME" /></translation>
+<translation id="3740525748616366977">Puhehaku ei ole käytettävissä tällä laitteella</translation>
 <translation id="3749259744154402564">Ei tuettu</translation>
 <translation id="3771001275138982843">Päivityksen lataaminen epäonnistui</translation>
 <translation id="3771033907050503522">Incognito</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">Perustiedot sekä tiedot avaamistasi sivustoista ja käyttämistäsi sovelluksista</translation>
 <translation id="3775705724665058594">Lähetä laitteillesi</translation>
 <translation id="3778956594442850293">Lisätty aloitusnäytölle</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 välilehti}other{# välilehteä}}</translation>
 <translation id="3803784507854318295">Muuta automaattisen toiston asetuksia</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Hallinnoi</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">"</translation>
 <translation id="393697183122708255">Puhehaku ei ole käytössä</translation>
 <translation id="395377504920307820">Käytä ilman tiliä</translation>
+<translation id="3958287878205277013">Tyhjennä laitteen incognito-selaushistoria sulkemalla kaikki incognito-välilehdet.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome lataa sivusi, kun se on valmis}other{Chrome lataa sivusi, kun ne ovat valmiina}}</translation>
 <translation id="3962957115499249330">Näet ilmoituksen, kun tämä lataus alkaa Wi-Fin kautta.</translation>
 <translation id="3963007978381181125">Google Payn maksutapoja tai osoitteita ei salata tunnuslauseella. Salattua dataa voidaan lukea vain tunnuslauseesi avulla. Tunnuslausetta ei lähetetä Googlelle eikä Google tallenna sitä. Jos unohdat tunnuslauseesi tai haluat muokata tätä asetusta, synkronointi täytyy nollata. <ph name="BEGIN_LINK" />Lisätietoja<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 Google-tililläsi voi olla muita selaushistoriatietoja, kuten hakuja ja toimintaa muista Google-palveluista. Voit katsella tietoja osoitteessa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="4532845899244822526">Valitse kansio</translation>
 <translation id="4538018662093857852">Ota yksinkertaistettu tila käyttöön</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> välilehti}other{<ph name="TAB_COUNT_MANY" /> välilehteä, <ph name="TAB_COUNT_INCOGNITO" /> incognito}}</translation>
 <translation id="4550003330909367850">Aseta laitteelle näytön lukitus, niin voit nähdä ja kopioida salasanasi tässä.</translation>
 <translation id="4554077758708533499">Yhdistetty USB-johdolla</translation>
 <translation id="4557685098773234337">Lisää tämä sivu aloitusnäytölle, niin pääset tähän nopeammin</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">Chromen versioiden määrää ei tueta.</translation>
 <translation id="4908869848243824489">Google Discover</translation>
 <translation id="4910889077668685004">Maksusovellukset</translation>
+<translation id="4912413785358399818">Siirrä välilehti</translation>
 <translation id="4913161338056004800">Nollaa tilastot</translation>
 <translation id="4913169188695071480">Lopeta päivittäminen</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# sivu}other{# sivua}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">Salli</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Muita toimintoja<ph name="END_LINK1" /> voidaan tallentaa Google-tilillesi, kun olet kirjautuneena sisään. Voit poistaa niitä koska vain.</translation>
 <translation id="5061533557687621530">Jos haluat säätietoja, napauta mikrofonia ja sano "Millainen sää on tänään?"</translation>
+<translation id="506254248375231072">Ei välilehtiä</translation>
 <translation id="5087580092889165836">Lisää kortti</translation>
+<translation id="5091199029769593641">Näet pian tarinoita täältä avatessasi uuden välilehden: <ph name="SITE_NAME" />. Seuraamasi sivustot tallennetaan Google-tilillesi. Voit ylläpitää niitä Discoverin asetuksissa.</translation>
 <translation id="5091249083535528968">Laajennettu käyttödata</translation>
 <translation id="509429900233858213">Tapahtui virhe.</translation>
 <translation id="510275257476243843">1 tunti jäljellä</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">palvelulla <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">Lataa sivu</translation>
 <translation id="5458366071038729214">Löydät seuraamasi sivustot täältä</translation>
+<translation id="5468068603361015296">Ladataanko <ph name="FILE_NAME" /> silti?</translation>
 <translation id="548278423535722844">Avaa karttasovelluksessa</translation>
 <translation id="5483197086164197190">Chromessa siirtyminen</translation>
 <translation id="5487521232677179737">Poista tiedot</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Kaikki oikeudet pidätetään.</translation>
 <translation id="5810864297166300463">Verkkoapu</translation>
 <translation id="5814131985548525293">Kirjoita tähän tai aloita napauttamalla puhekuvaketta</translation>
+<translation id="5814749351757353073">Pysy ajan tasalla lempisivustojesi tapahtumista</translation>
 <translation id="583281660410589416">Tuntematon</translation>
 <translation id="5833984609253377421">Jaa linkki</translation>
 <translation id="5834764604050996579">Jos haluat lukea QR-koodin, anna Chromen käyttää kameraa</translation>
@@ -824,6 +837,7 @@
 
 Jotkin verkkosivustot voivat vastata tähän pyyntöön esimerkiksi näyttämällä sinulle mainoksia, jotka eivät perustu muihin vierailemiisi verkkosivustoihin. Monet sivustot keräävät ja käyttävät silti edelleen selaustietojasi – esimerkiksi turvallisuuden parantamiseen, sisällön, mainosten ja suositusten tarjoamiseen sekä raportointitilastojen luomiseen.</translation>
 <translation id="624789221780392884">Päivitys on valmis</translation>
+<translation id="6264376385120300461">Lataa silti</translation>
 <translation id="6277522088822131679">Sivua tulostettaessa tapahtui virhe. Yritä uudelleen.</translation>
 <translation id="6278428485366576908">Teema</translation>
 <translation id="6292420053234093573">Käyttämällä Chromea hyväksyt <ph name="BEGIN_LINK1" />Googlen käyttöehdot<ph name="END_LINK1" /> ja <ph name="BEGIN_LINK2" />Chromen ja Chrome-käyttöjärjestelmän lisäkäyttöehdot<ph name="END_LINK2" />.</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">Jotain meni vikaan. Yritä myöhemmin uudelleen.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Tarkistettu 1 tunti sitten}other{Tarkistettu # tuntia sitten}}</translation>
 <translation id="6545017243486555795">Poista kaikki tiedot</translation>
+<translation id="6546511553472444032">Tiedosto saattaa olla haitallinen</translation>
 <translation id="6560414384669816528">Käytä Sogouta</translation>
 <translation id="656065428026159829">Katso lisää</translation>
 <translation id="6565959834589222080">Wi-Fi-yhteyttä käytetään, kun se on saatavilla</translation>
 <translation id="6566259936974865419">Chrome on säästänyt <ph name="GIGABYTES" /> Gt tilaa</translation>
+<translation id="6569373978618239158">Näet nyt tarinoita täältä avatessasi uuden välilehden: <ph name="SITE_NAME" />. Seuraamasi sivustot tallennetaan Google-tilillesi. Voit ylläpitää niitä Discoverin asetuksissa.</translation>
 <translation id="6573096386450695060">Salli aina</translation>
 <translation id="6573431926118603307">Muilla laitteilla Chromessa avaamasi välilehdet näytetään täällä.</translation>
 <translation id="6583199322650523874">Lisää nykyinen sivu kirjanmerkkeihin</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">Poistu incognito-tilasta</translation>
 <translation id="6979737339423435258">Kaikki</translation>
 <translation id="6981982820502123353">Esteettömyys</translation>
+<translation id="6987047470128880212">Incognito ei ole käytettävissä tällä laitteella</translation>
 <translation id="6989267951144302301">Lataus epäonnistui</translation>
 <translation id="6995899638241819463">Varoita, jos salasanoja vaarantuu tietosuojaloukkauksessa</translation>
 <translation id="7001056293070445572">Tämä tiedosto on suuri (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">Esikatseluvälilehti</translation>
 <translation id="7484997419527351112">Discover – pois päältä</translation>
 <translation id="7485033510383818941">Voit päivittää fiidin sisällön vetämällä sivua alas</translation>
+<translation id="749294055653435199">Google Lens ei ole käytettävissä tällä laitteella.</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (päivitettiin <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">dataa säästetty</translation>
 <translation id="7498271377022651285">Odota…</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">Tarkistettu juuri äsken</translation>
 <translation id="8040831032425909005">Pikatoimintojen hakuwidgetin kuvake</translation>
 <translation id="804335162455518893">SD-korttia ei löydy</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> incognito-välilehti}other{<ph name="TAB_COUNT_NORMAL" /> incognito-välilehteä}}</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> Mt käytettävissä</translation>
 <translation id="8058746566562539958">Avaa, uusi Chrome-välilehti</translation>
 <translation id="8063895661287329888">Kirjanmerkin lisääminen epäonnistui.</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">puhelimella</translation>
 <translation id="8636825310635137004">Ota synkronointi käyttöön, niin voit käyttää välilehtiäsi kaikilla laitteilla.</translation>
 <translation id="8641930654639604085">Pyri estämään aikuisille tarkoitetut sivustot</translation>
+<translation id="864544049772947936">Ylläpidä ikkunoita (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">Voit tyhjentää datan Chromen asetuksissa</translation>
 <translation id="8656747343598256512">Kirjaudu tälle sivustolle ja Chromeen Google-tililläsi. Voit laittaa synkronoinnin päälle myöhemmin.</translation>
 <translation id="8659579665266920523">Miten haet Chromella</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">Kuvat</translation>
 <translation id="926205370408745186">Poista Chrome-toimintasi Digitaalisesta hyvinvoinnista</translation>
 <translation id="927968626442779827">Käytä Yksinkertaistettua tilaa Google Chromessa</translation>
+<translation id="928550791203542716"><ph name="SITE_NAME" /> seurannassa</translation>
 <translation id="932327136139879170">Etusivu</translation>
 <translation id="938850635132480979">(Virhe: <ph name="ERROR_CODE" />)</translation>
 <translation id="939598580284253335">Anna tunnuslause</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
index b573420..d95ebcb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">Mabilis na maghanap gamit ang iyong boses. Para i-edit ang shortcut na ito, pindutin ito nang matagal.</translation>
 <translation id="1028699632127661925">Ipinapadala sa <ph name="DEVICE_NAME" />...</translation>
 <translation id="103269572468856066">I-clear ang data sa mga site at app?</translation>
+<translation id="1034259925032978114">Bukas ang window</translation>
 <translation id="1036348656032585052">I-off</translation>
 <translation id="1036727731225946849">Idinaragdag ang <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">I-clear ang data sa mga site?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">Kunin ang pinakamahusay na seguridad ng Chrome</translation>
 <translation id="2200113223741723867">Pamahalaan ang pagbabahagi ng data ng paggamit</translation>
 <translation id="2227444325776770048">Magpatuloy bilang si <ph name="USER_FULL_NAME" /></translation>
+<translation id="2230777942707397948">Walang lamang window</translation>
 <translation id="2239812875700136898">Kontrolin ang iyong mga kuwento mula sa Mga Opsyon para sa button na I-discover</translation>
 <translation id="2259659629660284697">I-export ang mga password…</translation>
 <translation id="2276696007612801991">Mag-sign in sa iyong Google account para masuri ang mga password mo</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Homepage ng Chrome</translation>
 <translation id="3157842584138209013">Tingnan kung gaano karaming data ang iyong natipid sa button ng Higit Pang Opsyon</translation>
 <translation id="3166827708714933426">Mga shortcut ng tab at window</translation>
+<translation id="316694332262407393">Tumatakbo na ang Chrome dito.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">Halos tapos na!</translation>
 <translation id="3207960819495026254">Naka-bookmark</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">Pahusayin ang seguridad sa web</translation>
 <translation id="3602290021589620013">I-preview</translation>
 <translation id="3616113530831147358">Audio</translation>
+<translation id="3622349720008044802">Pamahalaan ang mga window</translation>
 <translation id="3631987586758005671">Ibinabahagi sa <ph name="DEVICE_NAME" /></translation>
 <translation id="3632295766818638029">I-unmask ang password</translation>
 <translation id="363596933471559332">Awtomatikong mag-sign in sa mga website gamit ang mga naka-store na kredensyal. Kapag naka-off ang feature, hihilingin sa iyong mag-verify sa tuwing magsa-sign in ka sa isang website.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">Mga setting ng pagsasalin</translation>
 <translation id="3738139272394829648">Pindutin upang Hanapin</translation>
 <translation id="3739899004075612870">Naka-bookmark sa <ph name="PRODUCT_NAME" /></translation>
+<translation id="3740525748616366977">Hindi available ang Paghahanap gamit ang boses sa device na ito</translation>
 <translation id="3749259744154402564">Hindi Sinusuportahan</translation>
 <translation id="3771001275138982843">Hindi ma-download ang update</translation>
 <translation id="3771033907050503522">Mga Tab na Incognito</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">Basic na data pati ang impormasyon tungkol sa mga website na iyong binibisita at ang mga app na ginagamit mo</translation>
 <translation id="3775705724665058594">Ipadala sa iyong mga device</translation>
 <translation id="3778956594442850293">Idinagdag sa Home screen</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 tab}one{# tab}other{# na tab}}</translation>
 <translation id="3803784507854318295">Pamahalaan ang autoplay</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Mamahala</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">“</translation>
 <translation id="393697183122708255">Walang available na naka-enable na paghahanap gamit ang boses</translation>
 <translation id="395377504920307820">Gamitin nang walang account</translation>
+<translation id="3958287878205277013">Para i-clear ang history ng pag-browse sa Incognito mula sa iyong device, isara ang lahat ng tab na Incognito.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Ilo-load ng Chrome ang iyong page kapag handa na}one{Ilo-load ng Chrome ang iyong mga page kapag handa na}other{Ilo-load ng Chrome ang iyong mga page kapag handa na}}</translation>
 <translation id="3962957115499249330">Makakakita ka ng notification kapag nagsimula na ang pag-download na ito sa Wi-Fi.</translation>
 <translation id="3963007978381181125">Hindi kasama sa pag-encrypt ng passphrase ang mga paraan ng pagbabayad at address mula sa Google Pay. Ang tao lang na may alam ng iyong passphrase ang makakabasa sa naka-encrypt mong data. Hindi ipinapadala sa Google ang passphrase at hindi nito ito sino-store. Kung makalimutan mo ang iyong passphrase o gusto mong baguhin ang setting na ito, kakailanganin mong i-reset ang pag-sync. <ph name="BEGIN_LINK" />Matuto pa<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 Maaaring may ibang uri ng history ng pag-browse ang iyong Google account tulad ng mga paghahanap at aktibidad mula sa iba pang serbisyo ng Google sa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="4532845899244822526">Pumili ng folder</translation>
 <translation id="4538018662093857852">I-on ang Lite mode</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> tab}one{<ph name="TAB_COUNT_MANY" /> tab, <ph name="TAB_COUNT_INCOGNITO" /> incognito}other{<ph name="TAB_COUNT_MANY" /> na tab, <ph name="TAB_COUNT_INCOGNITO" /> incognito}}</translation>
 <translation id="4550003330909367850">Upang tingnan o kopyahin ang iyong password dito, magtakda ng lock ng screen sa device na ito.</translation>
 <translation id="4554077758708533499">Nakakonekta gamit ang USB cable</translation>
 <translation id="4557685098773234337">Para mas mabilis na makapunta rito, idagdag ang page na ito sa iyong Home screen</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">Hindi sinusuportahang bilang ng mga instance ng Chrome.</translation>
 <translation id="4908869848243824489">Discover ng Google</translation>
 <translation id="4910889077668685004">Mga app sa pagbabayad</translation>
+<translation id="4912413785358399818">Ilipat ang tab</translation>
 <translation id="4913161338056004800">I-reset ang mga istatistika</translation>
 <translation id="4913169188695071480">Ihinto ang pag-refresh</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# Page}one{# Page}other{# na Page}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">Payagan</translation>
 <translation id="5054455334322721892">Posibleng ma-save sa iyong Google Account ang <ph name="BEGIN_LINK1" />iba pang anyo ng aktibidad<ph name="END_LINK1" /> kapag naka-sign in ka. Puwede mong i-delete ang mga ito anumang oras.</translation>
 <translation id="5061533557687621530">Para tingnan ang lagay ng panahon, i-tap ang mic at sabihing “Ano ang lagay ng panahon ngayon?”</translation>
+<translation id="506254248375231072">Walang tab</translation>
 <translation id="5087580092889165836">Magdagdag ng card</translation>
+<translation id="5091199029769593641">Hindi magtatagal at makakakita ka ng mga kuwento mula sa <ph name="SITE_NAME" /> kapag nagbukas ka ng bagong tab. Mase-save sa iyong Google account ang mga site na sinusubaybayan mo. Puwede mong pamahalaan ang mga ito sa mga setting ng Discover.</translation>
 <translation id="5091249083535528968">Pinalawak na data ng paggamit</translation>
 <translation id="509429900233858213">May naganap na error.</translation>
 <translation id="510275257476243843">1 oras na lang ang natitira</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">sa <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">I-download ang page</translation>
 <translation id="5458366071038729214">Makikita mo ang mga site na sinusubaybayan mo rito</translation>
+<translation id="5468068603361015296">Gusto mo bang i-download pa rin ang <ph name="FILE_NAME" />?</translation>
 <translation id="548278423535722844">Buksan sa app na mga mapa</translation>
 <translation id="5483197086164197190">Mag-navigate sa Chrome</translation>
 <translation id="5487521232677179737">I-clear ang data</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Nakalaan ang lahat ng karapatan.</translation>
 <translation id="5810864297166300463">Tulong sa Web</translation>
 <translation id="5814131985548525293">Mag-type dito o i-tap ang icon na boses para magsimula</translation>
+<translation id="5814749351757353073">Makipagsabayan sa mga paborito mong site</translation>
 <translation id="583281660410589416">Hindi-alam</translation>
 <translation id="5833984609253377421">Ibahagi ang link</translation>
 <translation id="5834764604050996579">Para mag-scan ng QR Code, payagang gamitin ng Chrome ang iyong camera</translation>
@@ -824,6 +837,7 @@
 
 Halimbawa, puwedeng tumugon ang ilang website sa kahilingang ito sa pamamagitan ng pagpapakita sa iyo ng mga ad na hindi ibinatay sa iba pang nabisita mo nang website. Kokolektahin at gagamitin pa rin ng maraming website ang iyong data sa pag-browse - halimbawa, para mapahusay ang seguridad, makapagpakita ng content, mga ad, at rekomendasyon, at makabuo ng mga istatistika sa pag-uulat.</translation>
 <translation id="624789221780392884">Handa na ang pag-update</translation>
+<translation id="6264376385120300461">I-download pa rin</translation>
 <translation id="6277522088822131679">Nagkaproblema sa pag-print sa pahina. Pakisubukang muli.</translation>
 <translation id="6278428485366576908">Tema</translation>
 <translation id="6292420053234093573">Sa pamamagitan ng paggamit sa Chrome, sumasang-ayon ka sa <ph name="BEGIN_LINK1" />Mga Tuntunin ng Serbisyo ng Google<ph name="END_LINK1" />, at sa <ph name="BEGIN_LINK2" />Mga Karagdagang Tuntunin ng Serbisyo ng Google Chrome at Chrome OS<ph name="END_LINK2" />.</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">Nagkaproblema. Subukan ulit sa ibang pagkakataon.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Nagsuri 1 oras ang nakalipas}one{Nagsuri # oras ang nakalipas}other{Nagsuri # na oras ang nakalipas}}</translation>
 <translation id="6545017243486555795">I-clear ang Lahat ng Data</translation>
+<translation id="6546511553472444032">Posibleng mapaminsala ang file</translation>
 <translation id="6560414384669816528">Maghanap gamit ang Sogou</translation>
 <translation id="656065428026159829">Tumingin pa</translation>
 <translation id="6565959834589222080">Ginagamit ang Wi-Fi kapag available</translation>
 <translation id="6566259936974865419">Nag-save ang Chrome ng <ph name="GIGABYTES" /> GB para sa iyo</translation>
+<translation id="6569373978618239158">Makakakita ka na ngayon ng mga kuwento mula sa <ph name="SITE_NAME" /> kapag nagbukas ka ng bagong tab. Mase-save sa iyong Google account ang mga site na sinusubaybayan mo. Puwede mong pamahalaan ang mga ito sa mga setting ng Discover.</translation>
 <translation id="6573096386450695060">Payagan sa lahat ng oras</translation>
 <translation id="6573431926118603307">Dito lalabas ang mga nabuksan mong tab sa Chrome sa iba mo pang mga device.</translation>
 <translation id="6583199322650523874">I-bookmark ang kasalukuyang page</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">Umalis sa Incognito mode?</translation>
 <translation id="6979737339423435258">Lahat ng oras</translation>
 <translation id="6981982820502123353">Accessibility</translation>
+<translation id="6987047470128880212">Hindi available ang Incognito sa device na ito.</translation>
 <translation id="6989267951144302301">Hindi ma-download</translation>
 <translation id="6995899638241819463">Balaan ka kung ma-expose ang mga password sa isang paglabag sa data</translation>
 <translation id="7001056293070445572">Malaki ang file na ito (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">Tab na preview</translation>
 <translation id="7484997419527351112">Discover - naka-off</translation>
 <translation id="7485033510383818941">Para i-refresh ang content ng feed, hilahin pababa ang page</translation>
+<translation id="749294055653435199">Hindi available ang Google Lens sa device na ito</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (Na-update <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">natipid na data</translation>
 <translation id="7498271377022651285">Mangyaring maghintay…</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">Kakasuri lang</translation>
 <translation id="8040831032425909005">Icon ng Search Widget para sa Mabilisang Pagkilos</translation>
 <translation id="804335162455518893">Hindi nakita ang SD card</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> tab na incognito}one{<ph name="TAB_COUNT_NORMAL" /> tab na incognito}other{<ph name="TAB_COUNT_NORMAL" /> na tab na incognito}}</translation>
 <translation id="8051695050440594747">Available ang <ph name="MEGABYTES" /> MB</translation>
 <translation id="8058746566562539958">Buksan sa bagong tab ng Chrome</translation>
 <translation id="8063895661287329888">Hindi naidagdag ang bookmark.</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">telepono</translation>
 <translation id="8636825310635137004">Upang makuha ang iyong mga tab mula sa iba mo pang mga device, i-on ang pag-sync.</translation>
 <translation id="8641930654639604085">Subukang i-block ang mga site na para sa mga nasa hustong gulang</translation>
+<translation id="864544049772947936">Pamahalaan ang mga window (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">Maaari mong i-clear ang data sa Mga Setting ng Chrome</translation>
 <translation id="8656747343598256512">Mag-sign in sa site na ito at sa Chrome gamit ang iyong Google Account. Puwede mong i-on ang pag-sync sa ibang pagkakataon.</translation>
 <translation id="8659579665266920523">Paano maghanap gamit ang Chrome</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">Mga Larawan</translation>
 <translation id="926205370408745186">Alisin sa Digital Wellness ang iyong aktibidad sa Chrome</translation>
 <translation id="927968626442779827">Gamitin ang Lite mode sa Google Chrome</translation>
+<translation id="928550791203542716">Sinusubaybayan ang <ph name="SITE_NAME" /></translation>
 <translation id="932327136139879170">Home</translation>
 <translation id="938850635132480979">Error: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Ilagay ang passphrase</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
index afdb71c..f131a6c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">Effectuez une recherche rapide à l'aide de commandes vocales. Pour modifier ce raccourci, maintenez le doigt sur celui-ci.</translation>
 <translation id="1028699632127661925">Envoi à <ph name="DEVICE_NAME" /> en cours…</translation>
 <translation id="103269572468856066">Supprimer aussi les données de ces sites et de ces applis?</translation>
+<translation id="1034259925032978114">La fenêtre est ouverte</translation>
 <translation id="1036348656032585052">Désactiver</translation>
 <translation id="1036727731225946849">Ajout de <ph name="WEBAPK_NAME" /> en cours…</translation>
 <translation id="1045899828449635435">Supprimer aussi les données de ces sites?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">Profitez de la sécurité la plus robuste de Chrome</translation>
 <translation id="2200113223741723867">Gérer le partage des données d'utilisation</translation>
 <translation id="2227444325776770048">Continuer comme <ph name="USER_FULL_NAME" /></translation>
+<translation id="2230777942707397948">Fenêtre vide</translation>
 <translation id="2239812875700136898">Gérez vos histoires à l'aide du bouton Options pour Découvertes</translation>
 <translation id="2259659629660284697">Exporter les mots de passe…</translation>
 <translation id="2276696007612801991">Connectez-vous à votre compte Google pour vérifier vos mots de passe</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Page d'accueil de Chrome</translation>
 <translation id="3157842584138209013">Affichez la quantité de données enregistrées à partir du bouton Plus d'options</translation>
 <translation id="3166827708714933426">Raccourcis relatifs aux onglets et aux fenêtres</translation>
+<translation id="316694332262407393">Chrome fonctionne déjà ici.</translation>
 <translation id="3169472444629675720">Découvrir</translation>
 <translation id="3205824638308738187">C'est presque fini!</translation>
 <translation id="3207960819495026254">Favori</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">Contribuer à la sécurité sur le Web</translation>
 <translation id="3602290021589620013">Aperçu</translation>
 <translation id="3616113530831147358">Audio</translation>
+<translation id="3622349720008044802">Gérer les fenêtres</translation>
 <translation id="3631987586758005671">Partage avec <ph name="DEVICE_NAME" /></translation>
 <translation id="3632295766818638029">Afficher le mot de passe</translation>
 <translation id="363596933471559332">Connexion automatique à des sites Web à l'aide d'authentifiants enregistrés. Lorsque la fonctionnalité est désactivée, une vérification est effectuée avant chaque connexion à un site Web.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">Paramètres de traduction</translation>
 <translation id="3738139272394829648">Appuyez pour rechercher</translation>
 <translation id="3739899004075612870">Ajouté aux favoris dans <ph name="PRODUCT_NAME" /></translation>
+<translation id="3740525748616366977">Cet appareil ne prend pas en charge la recherche vocale</translation>
 <translation id="3749259744154402564">Non compatible</translation>
 <translation id="3771001275138982843">Impossible de télécharger la mise à jour</translation>
 <translation id="3771033907050503522">Onglets nav. priv.</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">Des données de base et de l'information sur les sites Web que vous visitez et les applications que vous utilisez</translation>
 <translation id="3775705724665058594">Envoyer à vos appareils</translation>
 <translation id="3778956594442850293">Ajouté à l'écran d'accueil</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 onglet}one{# onglet}other{# onglets}}</translation>
 <translation id="3803784507854318295">Gérer la lecture automatique</translation>
 <translation id="3810838688059735925">Vidéo</translation>
 <translation id="3810973564298564668">Gérer</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">« </translation>
 <translation id="393697183122708255">Aucune recherche vocale activée</translation>
 <translation id="395377504920307820">Utiliser sans compte</translation>
+<translation id="3958287878205277013">Pour effacer l'historique de navigation privée de votre appareil, fermez tous les onglets de navigation privée.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome chargera la page lorsque l'appareil sera en ligne}one{Chrome chargera la page lorsque l'appareil sera en ligne}other{Chrome chargera les pages lorsque l'appareil sera en ligne}}</translation>
 <translation id="3962957115499249330">Vous recevrez une notification lorsque le téléchargement débutera sur Wi-Fi.</translation>
 <translation id="3963007978381181125">Le chiffrement par phrase de passe ne couvre pas les modes de paiement ni les adresses de Google Pay. Seule une personne connaissant votre phrase de passe peut lire vos données chiffrées. Google ne reçoit ni ne stocke la phrase de passe. Si vous l'oubliez ou souhaitez modifier ce paramètre, vous devrez réinitialiser la synchronisation. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 D'autres formes d'historique de navigation, telles que les recherches et l'activité d'autres services Google, peuvent exister sur votre compte Google à l'adresse <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="4532845899244822526">Sélectionner un dossier</translation>
 <translation id="4538018662093857852">Activer le mode simplifié</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> onglet}one{<ph name="TAB_COUNT_MANY" /> onglet, <ph name="TAB_COUNT_INCOGNITO" /> onglet de navigation privée}other{<ph name="TAB_COUNT_MANY" /> onglets, <ph name="TAB_COUNT_INCOGNITO" /> onglets de navigation privée}}</translation>
 <translation id="4550003330909367850">Pour afficher ou copier votre mot de passe ici, définissez le verrouillage d'écran sur cet appareil.</translation>
 <translation id="4554077758708533499">Connecté à l'aide d'un câble USB</translation>
 <translation id="4557685098773234337">Pour revenir plus rapidement sur cette page, ajoutez-la à votre écran d'accueil</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">Trop d'exécutions simultanées de Google Chrome.</translation>
 <translation id="4908869848243824489">Découvertes par Google</translation>
 <translation id="4910889077668685004">Applications de paiement</translation>
+<translation id="4912413785358399818">Déplacer l'onglet</translation>
 <translation id="4913161338056004800">Réinitialiser les statistiques</translation>
 <translation id="4913169188695071480">Arrêter l'actualisation</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# page}one{# page}other{# pages}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">Autoriser</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />D'autres formes d'activités<ph name="END_LINK1" /> peuvent être enregistrées dans votre compte Google lorsque vous êtes connecté. Vous pouvez les supprimer à tout moment.</translation>
 <translation id="5061533557687621530">Pour connaître la météo, touchez l'icône de micro et dites « Quel temps fait-il aujourd'hui? »</translation>
+<translation id="506254248375231072">Aucun onglet</translation>
 <translation id="5087580092889165836">Ajouter une carte</translation>
+<translation id="5091199029769593641">Vous verrez bientôt des histoires de <ph name="SITE_NAME" /> lorsque vous ouvrez un nouvel onglet. Les sites que vous suivez sont enregistrés dans votre compte Google. Vous pouvez les gérer dans les paramètres de Découvertes.</translation>
 <translation id="5091249083535528968">Données d'utilisation étendues</translation>
 <translation id="509429900233858213">Une erreur s'est produite.</translation>
 <translation id="510275257476243843">Il reste 1 heure</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">avec <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">Télécharger la page</translation>
 <translation id="5458366071038729214">Les sites que vous suivez s'afficheront ici</translation>
+<translation id="5468068603361015296">Voulez-vous quand même télécharger <ph name="FILE_NAME" />?</translation>
 <translation id="548278423535722844">Ouvrir dans l'application Maps</translation>
 <translation id="5483197086164197190">Naviguer dans Chrome</translation>
 <translation id="5487521232677179737">Effacer les données</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">© <ph name="YEAR" /> Google LLC. Tous droits réservés.</translation>
 <translation id="5810864297166300463">Assistance sur le Web</translation>
 <translation id="5814131985548525293">Entrez votre requête de recherche ou touchez l'icône du micro pour commencer</translation>
+<translation id="5814749351757353073">Suivez l'actualité de vos sites favoris</translation>
 <translation id="583281660410589416">Inconnu</translation>
 <translation id="5833984609253377421">Partager le lien</translation>
 <translation id="5834764604050996579">Pour numériser un code QR, autorisez Chrome à utiliser votre appareil photo</translation>
@@ -824,6 +837,7 @@
 
 Par exemple, certains sites Web peuvent répondre à cette demande en diffusant des annonces qui ne sont pas déterminées en fonction des autres sites Web que vous avez consultés. Toutefois, nombre d'entre eux recueillent et utilisent vos données de navigation afin, par exemple, d'améliorer la sécurité du contenu, les annonces et des recommandations, ou encore pour générer des rapports statistiques.</translation>
 <translation id="624789221780392884">Une mise à jour est prête à être installée</translation>
+<translation id="6264376385120300461">Télécharger quand même</translation>
 <translation id="6277522088822131679">Un problème est survenu lors de l'impression de la page. Veuillez réessayer.</translation>
 <translation id="6278428485366576908">Thème</translation>
 <translation id="6292420053234093573">En utilisant Chrome, vous acceptez les <ph name="BEGIN_LINK1" />conditions d'utilisation de Google<ph name="END_LINK1" /> et les <ph name="BEGIN_LINK2" />conditions d'utilisation supplémentaires pour Google Chrome et Chrome OS<ph name="END_LINK2" />.</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">Une erreur s'est produite. Réessayez plus tard.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Dernière vérification : il y a 1 heure}one{Dernière vérification : il y a # heure}other{Dernière vérification : il y a # heures}}</translation>
 <translation id="6545017243486555795">Effacer toutes les données</translation>
+<translation id="6546511553472444032">Le fichier peut être dangereux</translation>
 <translation id="6560414384669816528">Utiliser Sogou pour les recherches</translation>
 <translation id="656065428026159829">En voir plus</translation>
 <translation id="6565959834589222080">Le Wi-Fi est utilisé lorsque c'est possible</translation>
 <translation id="6566259936974865419">Chrome vous a fait économiser <ph name="GIGABYTES" /> Go</translation>
+<translation id="6569373978618239158">Vous verrez maintenant des histoires de <ph name="SITE_NAME" /> lorsque vous ouvrez un nouvel onglet. Les sites que vous suivez sont enregistrés dans votre compte Google. Vous pouvez les gérer dans les paramètres de Découvertes.</translation>
 <translation id="6573096386450695060">Toujours autoriser</translation>
 <translation id="6573431926118603307">Les onglets déjà ouverts dans Chrome sur vos autres appareils s'afficheront ici.</translation>
 <translation id="6583199322650523874">Ajouter la page actuelle aux favoris</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">Désactiver le mode de navigation privée</translation>
 <translation id="6979737339423435258">Toutes les périodes</translation>
 <translation id="6981982820502123353">Accessibilité</translation>
+<translation id="6987047470128880212">Cet appareil ne prend pas en charge la navigation privée</translation>
 <translation id="6989267951144302301">Échec du téléchargement</translation>
 <translation id="6995899638241819463">Vous envoyer un avertissement si des mots de passe sont exposés dans une violation de données</translation>
 <translation id="7001056293070445572">Fichier volumineux (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">Onglet d'aperçu</translation>
 <translation id="7484997419527351112">Fonctionnalité Découvertes désactivée</translation>
 <translation id="7485033510383818941">Pour actualiser le contenu du flux, tirez la page vers le bas</translation>
+<translation id="749294055653435199">Cet appareil ne prend pas en charge Lentille Google</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (mise à jour : <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">données enregistrées</translation>
 <translation id="7498271377022651285">Veuillez patienter...</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">Dernière vérification : à l'instant</translation>
 <translation id="8040831032425909005">Icône du widget de recherche Actions rapides</translation>
 <translation id="804335162455518893">Carte SD introuvable</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> onglet de navigation privée}one{<ph name="TAB_COUNT_NORMAL" /> onglet de navigation privée}other{<ph name="TAB_COUNT_NORMAL" /> onglets de navigation privée}}</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> Mo disponible(s)</translation>
 <translation id="8058746566562539958">Ouvrir ds nouvel onglet Chrome</translation>
 <translation id="8063895661287329888">Échec de l'ajout du favori.</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">téléphone</translation>
 <translation id="8636825310635137004">Pour synchroniser vos onglets sur vos autres appareils, activez la synchronisation.</translation>
 <translation id="8641930654639604085">Essayer de bloquer les sites pour adultes</translation>
+<translation id="864544049772947936">Gérer les fenêtres (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">Vous pouvez effacer les données dans les paramètres de Chrome</translation>
 <translation id="8656747343598256512">Connectez-vous à ce site et à Chrome à l'aide de votre compte Google. Vous pouvez activer la synchronisation plus tard.</translation>
 <translation id="8659579665266920523">Effectuer une recherche avec Chrome</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">Images</translation>
 <translation id="926205370408745186">Supprimer votre activité Chrome de Bien-être numérique</translation>
 <translation id="927968626442779827">Utilisez le mode simplifié dans Google Chrome</translation>
+<translation id="928550791203542716">Vous suivez <ph name="SITE_NAME" /></translation>
 <translation id="932327136139879170">Accueil</translation>
 <translation id="938850635132480979">Erreur : <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Entrer la phrase de passe</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
index 27d8e3b03..24080d4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">Telusuri dengan cepat menggunakan suara Anda. Sentuh lama untuk mengedit pintasan ini.</translation>
 <translation id="1028699632127661925">Mengirim ke <ph name="DEVICE_NAME" />...</translation>
 <translation id="103269572468856066">Hapus data dari situs dan aplikasi ini juga?</translation>
+<translation id="1034259925032978114">Jendela terbuka</translation>
 <translation id="1036348656032585052">Matikan</translation>
 <translation id="1036727731225946849">Menambahkan <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Hapus data dari situs ini juga?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">Dapatkan keamanan terkuat Chrome</translation>
 <translation id="2200113223741723867">Kelola pembagian data penggunaan</translation>
 <translation id="2227444325776770048">Lanjutkan sebagai <ph name="USER_FULL_NAME" /></translation>
+<translation id="2230777942707397948">Jendela kosong</translation>
 <translation id="2239812875700136898">Kontrol artikel Anda dengan tombol Opsi untuk Discover</translation>
 <translation id="2259659629660284697">Ekspor sandi…</translation>
 <translation id="2276696007612801991">Login ke Akun Google Anda untuk memeriksa sandi</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Halaman beranda Chrome</translation>
 <translation id="3157842584138209013">Lihat banyaknya kuota yang Anda hemat dari tombol Opsi Lainnya</translation>
 <translation id="3166827708714933426">Pintasan tab dan jendela</translation>
+<translation id="316694332262407393">Chrome sudah berjalan di sini.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">Hampir selesai!</translation>
 <translation id="3207960819495026254">Diberi bookmark</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">Bantu sempurnakan keamanan di web</translation>
 <translation id="3602290021589620013">Pratinjau</translation>
 <translation id="3616113530831147358">Audio</translation>
+<translation id="3622349720008044802">Kelola jendela</translation>
 <translation id="3631987586758005671">Membagikan ke <ph name="DEVICE_NAME" /></translation>
 <translation id="3632295766818638029">Tampilkan sandi</translation>
 <translation id="363596933471559332">Otomatis login ke situs web menggunakan kredensial yang tersimpan. Saat fitur dinonaktifkan, Anda akan dimintai verifikasi setiap kali hendak login ke situs web.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">Setelan penerjemahan</translation>
 <translation id="3738139272394829648">Sentuh untuk Menelusuri</translation>
 <translation id="3739899004075612870">Dibookmark di <ph name="PRODUCT_NAME" /></translation>
+<translation id="3740525748616366977">Penelusuran suara tidak tersedia di perangkat ini</translation>
 <translation id="3749259744154402564">Tidak Didukung</translation>
 <translation id="3771001275138982843">Tidak dapat mendownload update</translation>
 <translation id="3771033907050503522">Tab Samaran</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">Data dasar ditambah informasi tentang situs yang Anda kunjungi dan aplikasi yang Anda gunakan</translation>
 <translation id="3775705724665058594">Kirim ke perangkat Anda</translation>
 <translation id="3778956594442850293">Ditambahkan ke Layar utama</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 tab}other{# tab}}</translation>
 <translation id="3803784507854318295">Kelola putar otomatis</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Kelola</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">"</translation>
 <translation id="393697183122708255">Tidak ada penelusuran suara yang aktif</translation>
 <translation id="395377504920307820">Gunakan tanpa akun</translation>
+<translation id="3958287878205277013">Untuk menghapus histori penjelajahan mode Samaran dari perangkat Anda, tutup semua tab Samaran.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome akan memuat halaman Anda setelah siap}other{Chrome akan memuat halaman Anda setelah siap}}</translation>
 <translation id="3962957115499249330">Anda akan melihat notifikasi saat download ini dimulai melalui Wi-Fi.</translation>
 <translation id="3963007978381181125">Enkripsi frasa sandi tidak mencakup alamat dan metode pembayaran dari Google Pay. Hanya pengguna yang memiliki frasa sandi Anda yang dapat membaca data yang telah Anda enkripsi. Frasa sandi tidak dikirim atau disimpan oleh Google. Jika lupa frasa sandi Anda atau ingin mengubah setelan ini, Anda harus menyetel ulang sinkronisasi. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 Akun Google Anda mungkin memiliki bentuk histori penjelajahan lain seperti penelusuran dan aktivitas dari layanan Google lainnya di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="4532845899244822526">Pilih folder</translation>
 <translation id="4538018662093857852">Aktifkan Mode Ringan</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> tab}other{<ph name="TAB_COUNT_MANY" /> tab, <ph name="TAB_COUNT_INCOGNITO" /> samaran}}</translation>
 <translation id="4550003330909367850">Untuk melihat atau menyalin sandi di sini, setel kunci layar di perangkat ini.</translation>
 <translation id="4554077758708533499">Terhubung dengan kabel USB</translation>
 <translation id="4557685098773234337">Untuk membukanya lebih cepat, tambahkan halaman ini ke Layar utama</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">Jumlah kemunculan Chrome tidak didukung.</translation>
 <translation id="4908869848243824489">Discover oleh Google</translation>
 <translation id="4910889077668685004">Aplikasi pembayaran</translation>
+<translation id="4912413785358399818">Pindahkan tab</translation>
 <translation id="4913161338056004800">Reset statistik</translation>
 <translation id="4913169188695071480">Hentikan refresh</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# Halaman}other{# Halaman}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">Izinkan</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Bentuk aktivitas lainnya<ph name="END_LINK1" /> dapat disimpan di Akun Google Anda saat login. Anda dapat menghapusnya kapan saja.</translation>
 <translation id="5061533557687621530">Untuk memeriksa cuaca, ketuk mikrofon dan ucapkan “Bagaimana cuaca hari ini?”</translation>
+<translation id="506254248375231072">Tidak ada tab</translation>
 <translation id="5087580092889165836">Tambahkan kartu</translation>
+<translation id="5091199029769593641">Sebentar lagi, Anda akan melihat cerita dari <ph name="SITE_NAME" /> saat membuka tab baru. Situs yang Anda ikuti akan disimpan di Akun Google Anda. Anda dapat mengelolanya di setelan Discover.</translation>
 <translation id="5091249083535528968">Data penggunaan yang diperluas</translation>
 <translation id="509429900233858213">Terjadi kesalahan.</translation>
 <translation id="510275257476243843">1 jam lagi</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">dengan <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">Download halaman</translation>
 <translation id="5458366071038729214">Anda akan menemukan situs yang Anda ikuti di sini</translation>
+<translation id="5468068603361015296">Ingin tetap mendownload <ph name="FILE_NAME" />?</translation>
 <translation id="548278423535722844">Buka di aplikasi peta</translation>
 <translation id="5483197086164197190">Navigate Chrome</translation>
 <translation id="5487521232677179737">Hapus data</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">Hak cipta <ph name="YEAR" /> Google LLC. Semua hak dilindungi undang-undang.</translation>
 <translation id="5810864297166300463">Bantuan Web</translation>
 <translation id="5814131985548525293">Ketik di sini atau ketuk ikon suara untuk memulai</translation>
+<translation id="5814749351757353073">Ikuti kabar terbaru dari situs favorit Anda</translation>
 <translation id="583281660410589416">Tidak dikenal</translation>
 <translation id="5833984609253377421">Bagikan link</translation>
 <translation id="5834764604050996579">Untuk memindai Kode QR, izinkan Chrome menggunakan kamera Anda</translation>
@@ -824,6 +837,7 @@
 
 Misalnya, beberapa situs web mungkin menanggapi permintaan ini dengan menayangkan iklan yang tidak berdasarkan pada data kunjungan Anda ke situs web lainnya. Banyak situs web masih akan mengumpulkan dan menggunakan data penjelajahan Anda — misalnya, untuk meningkatkan keamanan, menyediakan konten, iklan, dan saran, serta untuk membuat statistik pelaporan.</translation>
 <translation id="624789221780392884">Pembaruan siap</translation>
+<translation id="6264376385120300461">Tetap download</translation>
 <translation id="6277522088822131679">Terjadi masalah saat mencetak halaman. Coba lagi.</translation>
 <translation id="6278428485366576908">Tema</translation>
 <translation id="6292420053234093573">Dengan menggunakan Chrome, Anda menyetujui <ph name="BEGIN_LINK1" />Persyaratan Layanan Google<ph name="END_LINK1" /> serta <ph name="BEGIN_LINK2" />Persyaratan Layanan Tambahan Google Chrome dan Chrome OS<ph name="END_LINK2" />.</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">Terjadi masalah. Coba lagi nanti.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Diperiksa 1 jam yang lalu}other{Diperiksa # jam yang lalu}}</translation>
 <translation id="6545017243486555795">Hapus Semua Data</translation>
+<translation id="6546511553472444032">File mungkin berbahaya</translation>
 <translation id="6560414384669816528">Menelusuri menggunakan Sogou</translation>
 <translation id="656065428026159829">Lihat lainnya</translation>
 <translation id="6565959834589222080">Wi-Fi akan digunakan jika tersedia</translation>
 <translation id="6566259936974865419">Chrome telah menghemat <ph name="GIGABYTES" /> GB</translation>
+<translation id="6569373978618239158">Anda sekarang akan melihat cerita dari <ph name="SITE_NAME" /> saat membuka tab baru. Situs yang Anda ikuti akan disimpan di Akun Google Anda. Anda dapat mengelolanya di setelan Discover.</translation>
 <translation id="6573096386450695060">Selalu izinkan</translation>
 <translation id="6573431926118603307">Tab yang telah dibuka di Chrome pada perangkat lainnya akan muncul di sini.</translation>
 <translation id="6583199322650523874">Membookmark halaman saat ini</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">Keluar dari mode Samaran</translation>
 <translation id="6979737339423435258">Semua</translation>
 <translation id="6981982820502123353">Aksesibilitas</translation>
+<translation id="6987047470128880212">Samaran tidak tersedia di perangkat ini</translation>
 <translation id="6989267951144302301">Tidak dapat mendownload</translation>
 <translation id="6995899638241819463">Berikan peringatan jika sandi Anda terekspos saat terjadi pelanggaran data</translation>
 <translation id="7001056293070445572">File ini berukuran besar (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">Tab pratinjau</translation>
 <translation id="7484997419527351112">Discover - nonaktif</translation>
 <translation id="7485033510383818941">Untuk memuat ulang konten feed, tarik halaman ke bawah</translation>
+<translation id="749294055653435199">Google Lens tidak tersedia di perangkat ini</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (Diperbarui <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">data dihemat</translation>
 <translation id="7498271377022651285">Harap tunggu...</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">Baru saja diperiksa</translation>
 <translation id="8040831032425909005">Ikon Widget Penelusuran Tindakan Cepat</translation>
 <translation id="804335162455518893">Kartu SD tidak ditemukan</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> tab samaran}other{<ph name="TAB_COUNT_NORMAL" /> tab samaran}}</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB tersedia</translation>
 <translation id="8058746566562539958">Buka di tab Chrome baru</translation>
 <translation id="8063895661287329888">Gagal menambahkan bookmark.</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">ponsel</translation>
 <translation id="8636825310635137004">Untuk mengakses tab Anda dari perangkat lainnya, aktifkan sinkronisasi.</translation>
 <translation id="8641930654639604085">Coba blokir situs dewasa</translation>
+<translation id="864544049772947936">Kelola jendela (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">Anda dapat menghapus data di Setelan Chrome</translation>
 <translation id="8656747343598256512">Login ke situs ini dan Chrome dengan Akun Google Anda. Anda dapat mengaktifkan sinkronisasi nanti.</translation>
 <translation id="8659579665266920523">Cara menelusuri dengan Chrome</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">Gambar</translation>
 <translation id="926205370408745186">Hapus aktivitas Chrome Anda dari Kesehatan Digital</translation>
 <translation id="927968626442779827">Gunakan Mode Ringan di Google Chrome</translation>
+<translation id="928550791203542716">Mengikuti <ph name="SITE_NAME" /></translation>
 <translation id="932327136139879170">Beranda</translation>
 <translation id="938850635132480979">Kesalahan: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Masukkan frasa sandi</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
index 8552c16f..c2d136db 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">חיפוש מהיר באמצעות הקול. ניתן לערוך את קיצור הדרך הזה בלחיצה ארוכה.</translation>
 <translation id="1028699632127661925">הכרטיסייה נשלחת אל <ph name="DEVICE_NAME" />...</translation>
 <translation id="103269572468856066">למחוק נתונים גם מהאתרים ומהאפליקציות האלה?</translation>
+<translation id="1034259925032978114">החלון פתוח</translation>
 <translation id="1036348656032585052">כיבוי</translation>
 <translation id="1036727731225946849">הוספת <ph name="WEBAPK_NAME" /> מתבצעת...</translation>
 <translation id="1045899828449635435">למחוק נתונים גם מהאתרים האלה?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">‏רוצה ליהנות מהאבטחה החזקה ביותר של Chrome?</translation>
 <translation id="2200113223741723867">ניהול השיתוף של נתוני השימוש במכשיר</translation>
 <translation id="2227444325776770048">המשך בשם <ph name="USER_FULL_NAME" /></translation>
+<translation id="2230777942707397948">חלון ריק</translation>
 <translation id="2239812875700136898">‏בעזרת הלחצן 'אפשרויות של Discover' ניתן לקבוע אילו מאמרים יוצגו</translation>
 <translation id="2259659629660284697">ייצוא סיסמאות…</translation>
 <translation id="2276696007612801991">‏יש להיכנס לחשבון Google כדי לבדוק את הסיסמאות שלך</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">‏דף הבית של Chrome</translation>
 <translation id="3157842584138209013">בעזרת הלחצן 'אפשרויות נוספות' אפשר לבדוק את החיסכון בצריכת נתונים</translation>
 <translation id="3166827708714933426">מקשי קיצור לכרטיסיות ולחלונות</translation>
+<translation id="316694332262407393">‏Chrome כבר פועל כאן.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">כמעט סיימת!</translation>
 <translation id="3207960819495026254">מסומן בסימנייה</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">סיוע לשיפור האבטחה באינטרנט</translation>
 <translation id="3602290021589620013">תצוגה מקדימה</translation>
 <translation id="3616113530831147358">אודיו</translation>
+<translation id="3622349720008044802">ניהול החלונות</translation>
 <translation id="3631987586758005671">השיתוף עם <ph name="DEVICE_NAME" /> מתבצע</translation>
 <translation id="3632295766818638029">חשוף סיסמה</translation>
 <translation id="363596933471559332">כניסה אוטומטית לאתרים באמצעות פרטי כניסה מאוחסנים. כשתכונה זו כבויה, יהיה עליך לבצע אימות לפני כל כניסה לאתר.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">הגדרות תרגום</translation>
 <translation id="3738139272394829648">חיפוש בנגיעה</translation>
 <translation id="3739899004075612870">נוסף לסימניות ב-<ph name="PRODUCT_NAME" /></translation>
+<translation id="3740525748616366977">חיפוש קולי לא זמין במכשיר הזה</translation>
 <translation id="3749259744154402564">הפעולה לא נתמכת</translation>
 <translation id="3771001275138982843">לא ניתן היה להוריד את העדכון</translation>
 <translation id="3771033907050503522">כרטיסיות אנונימיות</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">נתונים בסיסיים בנוסף למידע על האתרים שביקרת בהם והאפליקציות שהשתמשת בהן</translation>
 <translation id="3775705724665058594">שליחה אל המכשירים שלך</translation>
 <translation id="3778956594442850293">נוסף למסך דף הבית</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{כרטיסייה אחת}two{# כרטיסיות}many{# כרטיסיות}other{# כרטיסיות}}</translation>
 <translation id="3803784507854318295">ניהול ההפעלה האוטומטית</translation>
 <translation id="3810838688059735925">סרטון</translation>
 <translation id="3810973564298564668">ניהול</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">“</translation>
 <translation id="393697183122708255">חיפוש קולי מופעל לא זמין</translation>
 <translation id="395377504920307820">שימוש ללא חשבון</translation>
+<translation id="3958287878205277013">כדי למחוק את היסטוריית הגלישה במצב אנונימי מהמכשיר, סוגרים את כל הכרטיסיות של המצב האנונימי.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{‏Chrome יטען את הדף כשיהיה מוכן}two{‏Chrome יטען את הדפים כשיהיו מוכנים}many{‏Chrome יטען את הדפים כשיהיו מוכנים}other{‏Chrome יטען את הדפים כשיהיו מוכנים}}</translation>
 <translation id="3962957115499249330">‏תוצג לך התראה כשההורדה הזו תתחיל דרך Wi-Fi.</translation>
 <translation id="3963007978381181125">‏הצפנה באמצעות ביטוי סיסמה לא כוללת אמצעי תשלום וכתובות מ-Google Pay. רק מי שיודע את ביטוי הסיסמה שלך יכול לקרוא את הנתונים המוצפנים. ביטוי הסיסמה לא נשלח אל Google והיא אינה מאחסנת אותו. אם שוכחים את ביטוי הסיסמה או רוצים לשנות את ההגדרה הזו, צריך לאפס את הסנכרון. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 ייתכן שבכתובת <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> יש סוגים אחרים של היסטוריית גלישה בחשבון Google, כמו חיפושים ופעילות משירותי Google אחרים.</translation>
 <translation id="4532845899244822526">בחירת תיקייה</translation>
 <translation id="4538018662093857852">הפעלת מצב טעינה מהירה</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{כרטיסייה אחת (<ph name="TAB_COUNT_ONE" />)}two{<ph name="TAB_COUNT_MANY" /> כרטיסיות, <ph name="TAB_COUNT_INCOGNITO" /> כרטיסיות של מצב אנונימי}many{<ph name="TAB_COUNT_MANY" /> כרטיסיות, <ph name="TAB_COUNT_INCOGNITO" /> כרטיסיות של מצב אנונימי}other{<ph name="TAB_COUNT_MANY" /> כרטיסיות, <ph name="TAB_COUNT_INCOGNITO" /> כרטיסיות של מצב אנונימי}}</translation>
 <translation id="4550003330909367850">כדי להציג או להעתיק את הסיסמה יש להגדיר נעילת מסך במכשיר זה.</translation>
 <translation id="4554077758708533499">‏הטלפון מחובר באמצעות כבל USB</translation>
 <translation id="4557685098773234337">רוצה להגיע לכאן מהר יותר? ניתן להוסיף את הדף הזה למסך הבית</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">‏מספר בלתי נתמך של מופעי Chrome.</translation>
 <translation id="4908869848243824489">Discover by Google</translation>
 <translation id="4910889077668685004">אפליקציות תשלום</translation>
+<translation id="4912413785358399818">העברת הכרטיסייה</translation>
 <translation id="4913161338056004800">איפוס הנתונים הסטטיסטיים</translation>
 <translation id="4913169188695071480">הפסקת הרענון</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{דף אחד (#)}two{# דפים}many{# דפים}other{# דפים}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">זה בסדר</translation>
 <translation id="5054455334322721892">‏<ph name="BEGIN_LINK1" />סוגי פעילות אחרים<ph name="END_LINK1" /> יכולים להישמר בחשבון Google אחרי שנכנסים. אפשר למחוק אותם בכל שלב.</translation>
 <translation id="5061533557687621530">‏כדי לבדוק את תנאי מזג האוויר, יש להקיש על המיקרופון ולשאול “What’s the weather today?‎”</translation>
+<translation id="506254248375231072">אין כרטיסיות</translation>
 <translation id="5087580092889165836">הוספת כרטיס</translation>
+<translation id="5091199029769593641">‏בקרוב יוצגו סטוריז מהאתר <ph name="SITE_NAME" /> בפתיחת כרטיסייה חדשה. אתרים שנמצאים במעקב נשמרים בחשבון Google שלך. יש לך אפשרות לנהל אותם בהגדרות של Discover.</translation>
 <translation id="5091249083535528968">נתונים נוספים על השימוש במכשיר</translation>
 <translation id="509429900233858213">אירעה שגיאה.</translation>
 <translation id="510275257476243843">נותרה שעה אחת</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">עם <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">הורדת דף זה</translation>
 <translation id="5458366071038729214">כאן יוצגו האתרים שיתווספו למעקב</translation>
+<translation id="5468068603361015296">רוצה להוריד את <ph name="FILE_NAME" /> בכל זאת?</translation>
 <translation id="548278423535722844">פתיחה באפליקציית מפות</translation>
 <translation id="5483197086164197190">‏ניווט ב-Chrome</translation>
 <translation id="5487521232677179737">ניקוי נתונים</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">‏Copyright <ph name="YEAR" /> Google LLC.‎ כל הזכויות שמורות.</translation>
 <translation id="5810864297166300463">סיוע באינטרנט</translation>
 <translation id="5814131985548525293">כדי להתחיל, יש להקליד כאן או להקיש על סמל המיקרופון</translation>
+<translation id="5814749351757353073">עוקבים אחר אתרים שאוהבים</translation>
 <translation id="583281660410589416">לא ידוע</translation>
 <translation id="5833984609253377421">שיתוף קישור</translation>
 <translation id="5834764604050996579">‏כדי לסרוק קוד QR, מאשרים ל-Chrome להשתמש במצלמה</translation>
@@ -824,6 +837,7 @@
 
 לדוגמה, ייתכן שבתגובה לבקשה, אתרים מסוימים יציגו מודעות שאינן מבוססות על אתרים אחרים שבהם ביקרת. אתרים רבים ימשיכו לאסוף את נתוני הגלישה שלך ולהשתמש בהם, למשל כדי לשפר את האבטחה, כדי לספק תוכן, מודעות והמלצות וכדי ליצור נתונים סטטיסטיים לדיווח.</translation>
 <translation id="624789221780392884">העדכון מוכן</translation>
+<translation id="6264376385120300461">להוריד בכל זאת</translation>
 <translation id="6277522088822131679">אירעה בעיה בעת הדפסת הדף. יש לנסות שוב.</translation>
 <translation id="6278428485366576908">עיצוב</translation>
 <translation id="6292420053234093573">‏השימוש ב-Chrome מבטא הסכמה ל<ph name="BEGIN_LINK1" />תנאים ולהגבלות של Google<ph name="END_LINK1" /> ול<ph name="BEGIN_LINK2" />תנאים ולהגבלות הנוספים של Google Chrome ו-Chrome OS<ph name="END_LINK2" />.</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">משהו השתבש. יש לנסות שוב מאוחר יותר.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{התבצעה בדיקה לפני שעה אחת}two{התבצעה בדיקה לפני שעתיים}many{התבצעה בדיקה לפני # שעות}other{התבצעה בדיקה לפני # שעות}}</translation>
 <translation id="6545017243486555795">ניקוי כל הנתונים</translation>
+<translation id="6546511553472444032">הקובץ עלול להזיק</translation>
 <translation id="6560414384669816528">‏שימוש ב-Sogou לחיפוש</translation>
 <translation id="656065428026159829">אפשרויות נוספות</translation>
 <translation id="6565959834589222080">‏המכשיר יתחבר לרשת Wi-Fi כאשר תהיה זמינה</translation>
 <translation id="6566259936974865419">‏Chrome חסך לך ‎<ph name="GIGABYTES" /> GB</translation>
+<translation id="6569373978618239158">‏בפתיחת כרטיסייה חדשה, יוצגו לך סטוריז מהאתר <ph name="SITE_NAME" />. אתרים שנמצאים במעקב נשמרים בחשבון Google שלך. יש לך אפשרות לנהל אותם בהגדרות של Discover.</translation>
 <translation id="6573096386450695060">אני רוצה לאפשר תמיד</translation>
 <translation id="6573431926118603307">‏כרטיסיות שפתחת ב-Chrome במכשירים האחרים שלך יופיעו כאן.</translation>
 <translation id="6583199322650523874">סימון הדף הנוכחי בסימנייה</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">לצאת מהמצב האנונימי?</translation>
 <translation id="6979737339423435258">משחר ההיסטוריה</translation>
 <translation id="6981982820502123353">נגישות</translation>
+<translation id="6987047470128880212">מצב אנונימי לא זמין במכשיר הזה</translation>
 <translation id="6989267951144302301">ההורדה נכשלה</translation>
 <translation id="6995899638241819463">הצגת אזהרה אם סיסמאות נחשפות עקב פרצה באבטחת מידע</translation>
 <translation id="7001056293070445572">הקובץ הזה גדול (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">כרטיסיית תצוגה מקדימה</translation>
 <translation id="7484997419527351112">‏Discover – כבוי</translation>
 <translation id="7485033510383818941">כדי לרענן את התוכן בפיד, מושכים את הדף כלפי מטה</translation>
+<translation id="749294055653435199">‏Google Lens לא זמין במכשיר הזה</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (עודכן <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">חיסכון בחבילת הגלישה</translation>
 <translation id="7498271377022651285">נא להמתין…</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">התבצעה בדיקה עכשיו</translation>
 <translation id="8040831032425909005">סמל של ווידג'ט החיפוש בפעולות המהירות</translation>
 <translation id="804335162455518893">‏לא נמצא כרטיס SD</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{כרטיסייה אחת (<ph name="TAB_COUNT_ONE" />) של מצב אנונימי}two{<ph name="TAB_COUNT_NORMAL" /> כרטיסיות של מצב אנונימי}many{<ph name="TAB_COUNT_NORMAL" /> כרטיסיות של מצב אנונימי}other{<ph name="TAB_COUNT_NORMAL" /> כרטיסיות של מצב אנונימי}}</translation>
 <translation id="8051695050440594747">‏‎<ph name="MEGABYTES" />MB זמינים</translation>
 <translation id="8058746566562539958">‏פתיחה בכרטיסייה חדשה של Chrome</translation>
 <translation id="8063895661287329888">הוספת הסימנייה נכשלה.</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">טלפון</translation>
 <translation id="8636825310635137004">כדי לקבל את הכרטיסיות מהמכשירים האחרים שלך, יש להפעיל את הסנכרון.</translation>
 <translation id="8641930654639604085">יש לנסות לחסום אתרים שמכילים תוכן למבוגרים</translation>
+<translation id="864544049772947936">ניהול החלונות (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">‏אפשר לנקות את הנתונים דרך הגדרות Chrome.</translation>
 <translation id="8656747343598256512">‏יש להיכנס לאתר זה ול-Chrome באמצעות חשבון Google שלך. אפשר להפעיל את הסנכרון מאוחר יותר.</translation>
 <translation id="8659579665266920523">‏איך לחפש באמצעות Chrome</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">תמונות</translation>
 <translation id="926205370408745186">‏הסרת הפעילות שלך ב-Chrome מ'שימוש חכם בדיגיטל'.</translation>
 <translation id="927968626442779827">‏כדאי להשתמש במצב הטעינה המהירה ב-Google Chrome</translation>
+<translation id="928550791203542716">האתר <ph name="SITE_NAME" /> נמצא במעקב</translation>
 <translation id="932327136139879170">בית</translation>
 <translation id="938850635132480979">שגיאה: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">הזנת ביטוי סיסמה</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
index 5b9555b..318a4d8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">ស្វែងរកដោយប្រើសំឡេងរបស់អ្នកបានយ៉ាងរហ័ស។ ដើម្បីកែផ្លូវកាត់នេះ សូមចុចឱ្យជាប់។</translation>
 <translation id="1028699632127661925">កំពុងផ្ញើទៅ <ph name="DEVICE_NAME" />...</translation>
 <translation id="103269572468856066">សម្អាតទិន្នន័យពីគេហទំព័រ និងកម្មវិធីទាំងនេះផងដែរឬ?</translation>
+<translation id="1034259925032978114">វិនដូត្រូវបានបើក</translation>
 <translation id="1036348656032585052">បិទ</translation>
 <translation id="1036727731225946849">កំពុងបញ្ចូល <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">សម្អាតទិន្នន័យពីគេហទំព័រទាំងនេះផងដែរឬ?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">ទទួលបានសុវត្ថិភាពខ្លាំងបំផុតរបស់ Chrome</translation>
 <translation id="2200113223741723867">គ្រប់គ្រង​ការចែករំលែក​ទិន្នន័យប្រើប្រាស់</translation>
 <translation id="2227444325776770048">បន្តជា <ph name="USER_FULL_NAME" /></translation>
+<translation id="2230777942707397948">វិនដូទទេ</translation>
 <translation id="2239812875700136898">គ្រប់គ្រងអត្ថបទរបស់អ្នកពី "ជម្រើស" សម្រាប់ប៊ូតុង Discover</translation>
 <translation id="2259659629660284697">នាំ​ចេញ​ពាក្យ​សម្ងាត់…</translation>
 <translation id="2276696007612801991">ចូលគណនី Google របស់អ្នក ដើម្បីពិនិត្យ​ពាក្យសម្ងាត់​របស់អ្នក</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">ទំព័រដើម​របស់ Chrome</translation>
 <translation id="3157842584138209013">មើលចំនួនទិន្នន័យដែល​អ្នក​បានរក្សាទុក​ពីប៊ូតុង​ជម្រើសច្រើនទៀត</translation>
 <translation id="3166827708714933426">ផ្លូវកាត់ផ្ទាំង និងផ្ទាំងវិនដូ</translation>
+<translation id="316694332262407393">Chrome កំពុងដំណើរការនៅទីនេះហើយ។</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">ជិត​បញ្ចប់​ហើយ!</translation>
 <translation id="3207960819495026254">បានចំណាំ</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">ជួយ​ពង្រឹង​សុវត្ថិភាព​នៅលើ​អ៊ីនធឺណិត</translation>
 <translation id="3602290021589620013">ពិនិត្យមើល</translation>
 <translation id="3616113530831147358">សម្លេង</translation>
+<translation id="3622349720008044802">គ្រប់គ្រងវិនដូ</translation>
 <translation id="3631987586758005671">កំពុងចែករំលែកទៅ <ph name="DEVICE_NAME" /></translation>
 <translation id="3632295766818638029">បង្ហាញពាក្យសម្ងាត់</translation>
 <translation id="363596933471559332">ចូលគេហទំព័រដោយស្វ័យប្រវត្តិដោយប្រើព័ត៌មានអត្តសញ្ញាណដែលបានផ្ទុក។ នៅពេលដែលលក្ខណៈពិសេសនេះត្រូវបានបិទ អ្នកនឹងត្រូវបានស្នើឲ្យធ្វើការផ្ទៀងផ្ទាត់ រាល់ពេលដែលអ្នកចូលទៅកាន់គេហទំព័រណាមួយ។</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">ការកំណត់ការបកប្រែ</translation>
 <translation id="3738139272394829648">ប៉ះដើម្បីស្វែងរក</translation>
 <translation id="3739899004075612870">បាន​ដាក់​ចំណាំ​នៅ​ក្នុង <ph name="PRODUCT_NAME" /></translation>
+<translation id="3740525748616366977">មិនអាចប្រើការស្វែងរក​តាម​សំឡេង​នៅ​លើ​ឧបករណ៍​នេះ​បានទេ</translation>
 <translation id="3749259744154402564">មិន​ស្គាល់</translation>
 <translation id="3771001275138982843">មិនអាច​ទាញយក​កំណែថ្មី​បានទេ</translation>
 <translation id="3771033907050503522">ផ្ទាំងអនាមិក</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">ទិន្នន័យមូលដ្ឋាន​រួមជាមួយព័ត៌មាន​អំពីគេហទំព័រ​ដែលអ្នកចូលមើល និងកម្មវិធីដែល​អ្នកប្រើ</translation>
 <translation id="3775705724665058594">ផ្ញើ​ទៅ​ឧបករណ៍​របស់អ្នក</translation>
 <translation id="3778956594442850293">បាន​បញ្ចូលទៅ​អេក្រង់ដើម</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{ផ្ទាំង 1}other{ផ្ទាំង #}}</translation>
 <translation id="3803784507854318295">គ្រប់គ្រងការចាក់ស្វ័យប្រវត្តិ</translation>
 <translation id="3810838688059735925">វីដេអូ</translation>
 <translation id="3810973564298564668">គ្រប់គ្រង</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">“</translation>
 <translation id="393697183122708255">គ្មានការគាំទ្រការស្វែងរកដោយសម្លេងទេ</translation>
 <translation id="395377504920307820">ប្រើ​ដោយមិនចាំបាច់​មានគណនី</translation>
+<translation id="3958287878205277013">ដើម្បី​សម្អាតប្រវត្តិ​រុករក​តាមអ៊ីនធឺណិត​នៃមុខងារឯកជន​ចេញពី​ឧបករណ៍​របស់អ្នក សូមបិទ​ផ្ទាំងឯកជនទាំងអស់។</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome នឹងផ្ទុកទំព័រ​របស់អ្នក នៅពេលរួចរាល់}other{Chrome នឹងផ្ទុកទំព័រ​របស់អ្នក នៅពេលរួចរាល់}}</translation>
 <translation id="3962957115499249330">អ្នកនឹង​មើលឃើញ​ការជូនដំណឹង នៅពេលដែល​ការទាញយកនេះ​ចាប់ផ្ដើម​តាមរយៈ Wi-Fi។</translation>
 <translation id="3963007978381181125">ការ​អ៊ីនគ្រីបឃ្លា​សម្ងាត់​មិន​រួមបញ្ចូល​អាសយដ្ឋាន និងវិធី​បង់ប្រាក់​ពី Google Pay ទេ។ មានតែអ្នកដែលមានឃ្លាសម្ងាត់របស់អ្នកប៉ុណ្ណោះ ទើបអាចអានទិន្នន័យដែលបានអ៊ីនគ្រីបរបស់អ្នក។ ឃ្លាសម្ងាត់នេះមិនត្រូវបានផ្ញើ ឬផ្ទុកដោយ Google ទេ។ ប្រសិនបើអ្នកភ្លេចឃ្លាសម្ងាត់របស់អ្នក ឬចង់ផ្លាស់ប្ដូរ​ការកំណត់​នេះ​ អ្នក​នឹង​ត្រូវកំណត់​សមកាលកម្ម​ឡើងវិញ។ <ph name="BEGIN_LINK" />ស្វែងយល់បន្ថែម<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 គណនី Google របស់អ្នកអាចមានទម្រង់ប្រវត្តិរុករកផ្សេងទៀតដូចជា ការស្វែងរក និងសកម្មភាពពីសេវាកម្ម Google ផ្សេងទៀត​នៅ​ក្នុង <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ។</translation>
 <translation id="4532845899244822526">ជ្រើសរើសថតឯកសារ</translation>
 <translation id="4538018662093857852">បើក​មុខងារស្រាល</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{ផ្ទាំង <ph name="TAB_COUNT_ONE" />}other{ផ្ទាំង <ph name="TAB_COUNT_MANY" />, ឯកជន <ph name="TAB_COUNT_INCOGNITO" />}}</translation>
 <translation id="4550003330909367850">ដើម្បី​មើល ឬ​ចម្លង​ពាក្យសម្ងាត់​របស់អ្នក​នៅទី​នេះ សូម​កំណត់ការ​ចាក់សោ​អេក្រង់​នៅលើ​ឧបករណ៍​នេះ។</translation>
 <translation id="4554077758708533499">បានភ្ជាប់ជាមួយខ្សែ USB</translation>
 <translation id="4557685098773234337">ដើម្បីចូលមកទីនេះបានរហ័សជាងមុន សូមបញ្ចូលទំព័រនេះទៅក្នុងអេក្រង់ដើមរបស់អ្នក</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">លេខមិនគាំទ្ររបស់ Chrome instances។</translation>
 <translation id="4908869848243824489">Discover by Google</translation>
 <translation id="4910889077668685004">កម្មវិធី​បង់ប្រាក់</translation>
+<translation id="4912413785358399818">ផ្លាស់ទីផ្ទាំង</translation>
 <translation id="4913161338056004800">កំណត់​ស្ថិតិ​ឡើងវិញ</translation>
 <translation id="4913169188695071480">បញ្ឃប់ការផ្ទុក​ឡើងវិញ</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# ទំព័រ}other{# ទំព័រ}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">អនុញ្ញាត</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />ទម្រង់​ផ្សេងទៀត​នៃសកម្មភាព<ph name="END_LINK1" />អាចត្រូវបាន​រក្សាទុក​នៅក្នុង​គណនី Google របស់អ្នក នៅពេលអ្នក​ចូលគណនី។ អ្នកអាច​លុបវា​បានគ្រប់ពេល។</translation>
 <translation id="5061533557687621530">ដើម្បី​ពិនិត្យមើល​អាកាសធាតុ សូមចុច​មីក្រូហ្វូន រួចនិយាយថា “តើអាកាសធាតុ​នៅថ្ងៃនេះ​យ៉ាងម៉េចដែរ?”</translation>
+<translation id="506254248375231072">គ្មានផ្ទាំងទេ</translation>
 <translation id="5087580092889165836">បន្ថែមកាត</translation>
+<translation id="5091199029769593641">ក្នុងពេលឆាប់ៗនេះ អ្នកនឹងមើលឃើញអត្ថបទពី <ph name="SITE_NAME" /> នៅពេលអ្នកបើកផ្ទាំងថ្មី។ គេហទំព័រដែលអ្នកតាមដានត្រូវបានរក្សាទុកនៅក្នុងគណនី Google របស់អ្នក។ អ្នកអាចគ្រប់គ្រងគេហទំព័រទាំងនេះនៅក្នុងការកំណត់ Discover។</translation>
 <translation id="5091249083535528968">ទិន្នន័យប្រើប្រាស់​បន្ថែម</translation>
 <translation id="509429900233858213">កំហុសឆ្គងបានកើតឡើង។</translation>
 <translation id="510275257476243843">នៅសល់ 1 ម៉ោងទៀត</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">ជាមួយ <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">ទាញយកទំព័រ</translation>
 <translation id="5458366071038729214">អ្នកនឹងឃើញ​គេហទំព័រ​ដែលអ្នកតាមដាន​នៅទីនេះ</translation>
+<translation id="5468068603361015296">តើអ្នកចង់ទាញយក <ph name="FILE_NAME" /> មែនឬ?</translation>
 <translation id="548278423535722844">បើកនៅក្នុងកម្មវិធីផែនទី</translation>
 <translation id="5483197086164197190">រុករក Chrome</translation>
 <translation id="5487521232677179737">ជម្រះទិន្នន័យ</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">រក្សា​សិទ្ធិ <ph name="YEAR" /> Google LLC ។ រក្សាសិទ្ធិ​គ្រប់យ៉ាង។</translation>
 <translation id="5810864297166300463">ជំនួយ​នៅលើ​បណ្ដាញ</translation>
 <translation id="5814131985548525293">វាយបញ្ចូលត្រង់នេះ ឬចុចរូបមីក្រូហ្វូន ដើម្បីចាប់ផ្ដើម</translation>
+<translation id="5814749351757353073">តាមដានគេហទំព័រដែលអ្នកចូលចិត្ត</translation>
 <translation id="583281660410589416">មិនស្គាល់</translation>
 <translation id="5833984609253377421">ចែក​រំលែក​តំណ</translation>
 <translation id="5834764604050996579">ដើម្បី​ស្កេនកូដ QR សូមអនុញ្ញាត​ឱ្យ Chrome ប្រើ​កាមេរ៉ារបស់អ្នក</translation>
@@ -824,6 +837,7 @@
 
 ឧទាហរណ៍៖ គេហទំព័រមួយចំនួនអាចឆ្លើយតបទៅនឹងការស្នើសុំនេះដោយការបង្ហាញពាណិជ្ជកម្មដល់អ្នកដោយមិនផ្អែកលើគេហទំព័រផ្សេងទៀតដែលអ្នកបានចូលទៅកាន់។ គេហទំព័រជាច្រើននឹងនៅតែប្រមូល និងប្រើទិន្នន័យការរុករករបស់អ្នកដដែល។ ឧទាហរណ៍ដើម្បីពង្រឹងសុវត្ថិភាព ដើម្បីផ្តល់មាតិកា ពាណិជ្ជកម្ម និងការណែនាំនៅលើគេហទំព័ររបស់ពួកគេ និងដើម្បីបង្កើតស្ថិតិរបាយការណ៍។</translation>
 <translation id="624789221780392884">ការធ្វើបច្ចុប្បន្នភាពរួចរាល់ក្នុងការចាប់ផ្តើម</translation>
+<translation id="6264376385120300461">មិនអីទេ ទាញយកចុះ</translation>
 <translation id="6277522088822131679">មានបញ្ហាក្នុងការបោះពុម្ពទំព័រ។ សូមព្យាយាមម្តងទៀត។</translation>
 <translation id="6278428485366576908">ធីម</translation>
 <translation id="6292420053234093573">ប្រសិនបើប្រើ Chrome មានន័យថាអ្នកយល់ព្រមតាម<ph name="BEGIN_LINK1" />លក្ខខណ្ឌប្រើប្រាស់ Google<ph name="END_LINK1" /> និង<ph name="BEGIN_LINK2" />លក្ខខណ្ឌប្រើប្រាស់បន្ថែមរបស់ Google Chrome និង Chrome OS<ph name="END_LINK2" />។</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">មានអ្វីមួយខុសប្រក្រតី។ សូមព្យាយាមម្តង​ទៀតនៅ​ពេលក្រោយ។</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{បានពិនិត្យមើល​កាលពី 1 ម៉ោងមុន}other{បានពិនិត្យមើល​កាលពី # ម៉ោងមុន}}</translation>
 <translation id="6545017243486555795">ជម្រះទិន្នន័យទាំងអស់</translation>
+<translation id="6546511553472444032">ឯកសារនេះអាចមានគ្រោះថ្នាក់</translation>
 <translation id="6560414384669816528">ស្វែងរកដោយប្រើ Sogou</translation>
 <translation id="656065428026159829">មើលច្រើនទៀត</translation>
 <translation id="6565959834589222080">ប្រើ Wi-Fi នៅពេលដែលអាចប្រើបាន</translation>
 <translation id="6566259936974865419">Chrome សន្សំឲ្យអ្នកបាន <ph name="GIGABYTES" /> GB</translation>
+<translation id="6569373978618239158">ឥឡូវនេះ អ្នកនឹងមើលឃើញអត្ថបទពី <ph name="SITE_NAME" /> នៅពេលអ្នកបើកផ្ទាំងថ្មី។ គេហទំព័រដែលអ្នកតាមដានត្រូវបានរក្សាទុកនៅក្នុងគណនី Google របស់អ្នក។ អ្នកអាចគ្រប់គ្រងគេហទំព័រទាំងនេះនៅក្នុងការកំណត់ Discover។</translation>
 <translation id="6573096386450695060">អនុញ្ញាត​ជា​និច្ច</translation>
 <translation id="6573431926118603307">ផ្ទាំងដែលអ្នកបានបើកនៅក្នុង Chrome នៅលើឧបករណ៍ផ្សេងទៀតរបស់អ្នកនឹងបង្ហាញនៅទីនេះ</translation>
 <translation id="6583199322650523874">ចំណាំទំព័របច្ចុប្បន្ននេះ</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">ចាកចេញពី​មុខងារ​ឯកជន</translation>
 <translation id="6979737339423435258">គ្រប់​ពេល</translation>
 <translation id="6981982820502123353">លទ្ធភាពប្រើប្រាស់</translation>
+<translation id="6987047470128880212">មិនអាចប្រើមុខងារឯកជន​នៅលើឧបករណ៍​នេះបានទេ</translation>
 <translation id="6989267951144302301">មិន​អាច​ទាញ​យកបាន​ទេ</translation>
 <translation id="6995899638241819463">ទទួលបាន​ការព្រមាន ប្រសិនបើ​ពាក្យសម្ងាត់​​បែកធ្លាយ​នៅក្នុង​ការបំពាន​ទិន្នន័យ</translation>
 <translation id="7001056293070445572">ឯកសារនេះ​មានទំហំធំ (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">ផ្ទាំងមើលសាកល្បង</translation>
 <translation id="7484997419527351112">Discover - បានបិទ</translation>
 <translation id="7485033510383818941">ដើម្បីផ្ទុក​ខ្លឹមសារព័ត៌មាន​ឡើងវិញ សូមទាញ​ទំព័រចុះ</translation>
+<translation id="749294055653435199">មិនអាចប្រើ Google Lens នៅលើឧបករណ៍នេះបានទេ</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (បានធ្វើបច្ចុប្បន្នភាព <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">ទិន្នន័យ​ដែលសន្សំបាន</translation>
 <translation id="7498271377022651285">សូមរង់ចាំ...</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">ទើបបាន​ពិនិត្យមើល​អម្បាញ់មិញ</translation>
 <translation id="8040831032425909005">រូបធាតុ​ក្រាហ្វិកកម្មវិធីស្វែងរកសកម្មភាពរហ័ស</translation>
 <translation id="804335162455518893">រកមិន​ឃើញកាត SD ទេ</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{ផ្ទាំងឯកជន <ph name="TAB_COUNT_ONE" />}other{ផ្ទាំងឯកជន <ph name="TAB_COUNT_NORMAL" />}}</translation>
 <translation id="8051695050440594747">ទំនេរ <ph name="MEGABYTES" /> MB</translation>
 <translation id="8058746566562539958">បើក​នៅក្នុង​ផ្ទាំង​ថ្មី​របស់ Chrome</translation>
 <translation id="8063895661287329888">បានបរាជ័យក្នុងការបន្ថែមចំណាំ</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">ទូរសព្ទ</translation>
 <translation id="8636825310635137004">ដើម្បីទទួលបានផ្ទាំងរបស់អ្នកពីឧបករណ៍ផ្សេងទៀតរបស់អ្នក សូមបើកការធ្វើសមកាលកម្ម</translation>
 <translation id="8641930654639604085">ព្យាយាម​រារាំង​ទំព័រ​សម្រាប់​មនុស្ស​ធំ</translation>
+<translation id="864544049772947936">គ្រប់គ្រងវិនដូ (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">អ្នកអាច​សម្អាតទិន្នន័យ​នៅក្នុងការកំណត់ Chrome</translation>
 <translation id="8656747343598256512">ចូលគេហទំព័រនេះ និង Chrome ដោយប្រើគណនី Google របស់អ្នក។ អ្នក​អាចបើកសមកាលកម្ម​នៅពេលក្រោយ។</translation>
 <translation id="8659579665266920523">របៀបស្វែងរកដោយប្រើ Chrome</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">រូបភាព</translation>
 <translation id="926205370408745186">លុបស​កម្មភាព Chrome របស់អ្នកពី​សុខុមាលភាព​ឌីជីថល</translation>
 <translation id="927968626442779827">ប្រើមុខងារស្រាល​នៅលើ Google Chrome</translation>
+<translation id="928550791203542716">កំពុងតាមដាន <ph name="SITE_NAME" /></translation>
 <translation id="932327136139879170">ទំព័រដើម</translation>
 <translation id="938850635132480979">កំហុស៖ <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">បញ្ចូលឃ្លាសម្ងាត់</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
index 9f0ef173..7eb6b4c5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">음성으로 빠르게 검색합니다. 바로가기를 수정하려면 길게 터치하세요.</translation>
 <translation id="1028699632127661925"><ph name="DEVICE_NAME" />에 보내는 중...</translation>
 <translation id="103269572468856066">아래 사이트 및 앱의 데이터도 삭제하시겠습니까?</translation>
+<translation id="1034259925032978114">창이 열려 있습니다.</translation>
 <translation id="1036348656032585052">사용 중지</translation>
 <translation id="1036727731225946849"><ph name="WEBAPK_NAME" /> 추가 중...</translation>
 <translation id="1045899828449635435">아래 사이트의 데이터도 삭제하시겠습니까?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">Chrome의 가장 강력한 보안 기능 사용하기</translation>
 <translation id="2200113223741723867">사용 데이터 공유 관리</translation>
 <translation id="2227444325776770048"><ph name="USER_FULL_NAME" />(으)로 계속</translation>
+<translation id="2230777942707397948">빈 창</translation>
 <translation id="2239812875700136898">디스커버 버튼 옵션으로 새 탭 페이지에 표시될 뉴스를 관리하세요</translation>
 <translation id="2259659629660284697">비밀번호 내보내기...</translation>
 <translation id="2276696007612801991">비밀번호를 확인하려면 Google 계정에 로그인하세요.</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Chrome 홈페이지</translation>
 <translation id="3157842584138209013">추가 옵션 버튼에서 저장한 데이터의 양을 확인해보세요.</translation>
 <translation id="3166827708714933426">탭 및 창 단축키</translation>
+<translation id="316694332262407393">Chrome이 이미 실행 중입니다.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3205824638308738187">거의 완료되었습니다.</translation>
 <translation id="3207960819495026254">북마크에 추가됨</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">웹 보안 개선에 참여</translation>
 <translation id="3602290021589620013">미리보기</translation>
 <translation id="3616113530831147358">오디오</translation>
+<translation id="3622349720008044802">창 관리</translation>
 <translation id="3631987586758005671"><ph name="DEVICE_NAME" />에 공유하는 중</translation>
 <translation id="3632295766818638029">비밀번호 공개</translation>
 <translation id="363596933471559332">저장된 사용자 인증 정보를 사용하여 자동으로 웹사이트에 로그인합니다. 이 기능이 꺼져 있는 경우에는 웹사이트에 로그인할 때마다 인증 요청 메시지가 표시됩니다.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">번역 설정</translation>
 <translation id="3738139272394829648">터치하여 검색</translation>
 <translation id="3739899004075612870"><ph name="PRODUCT_NAME" /> 북마크에 추가됨</translation>
+<translation id="3740525748616366977">이 기기에서는 음성 검색을 사용할 수 없습니다.</translation>
 <translation id="3749259744154402564">지원되지 않음</translation>
 <translation id="3771001275138982843">업데이트를 다운로드할 수 없음</translation>
 <translation id="3771033907050503522">시크릿 탭</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">기본 데이터, 방문한 웹사이트 및 사용한 앱에 관한 정보</translation>
 <translation id="3775705724665058594">기기로 전송</translation>
 <translation id="3778956594442850293">홈 화면에 추가됨</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{탭 1개}other{탭 #개}}</translation>
 <translation id="3803784507854318295">자동 재생 관리</translation>
 <translation id="3810838688059735925">동영상</translation>
 <translation id="3810973564298564668">관리</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">“</translation>
 <translation id="393697183122708255">사용 가능한 음성 검색이 없습니다.</translation>
 <translation id="395377504920307820">계정 없이 사용</translation>
+<translation id="3958287878205277013">기기에서 시크릿 모드 방문 기록을 삭제하려면 모든 시크릿 탭을 닫으세요.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{준비가 완료되면 Chrome에서 페이지를 로드합니다.}other{준비가 완료되면 Chrome에서 페이지를 로드합니다.}}</translation>
 <translation id="3962957115499249330">Wi-Fi를 통해 다운로드가 시작되면 알림이 표시됩니다.</translation>
 <translation id="3963007978381181125">Google Pay 결제 수단 및 주소는 암호로 암호화되지 않습니다. 암호를 아는 사람만 암호화된 데이터를 읽을 수 있습니다. 암호는 Google로 전송되거나 Google에 저장되지 않습니다. 암호가 기억나지 않거나 이 설정을 변경하려면 동기화를 재설정해야 합니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />에서 검색이나 기타 Google 서비스에서의 활동 등 내 Google 계정에 있는 다른 형식의 탐색 기록을 확인할 수 있습니다.</translation>
 <translation id="4532845899244822526">폴더 선택</translation>
 <translation id="4538018662093857852">라이트 모드 켜기</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{탭 <ph name="TAB_COUNT_ONE" />개}other{탭 <ph name="TAB_COUNT_MANY" />개(시크릿 탭 <ph name="TAB_COUNT_INCOGNITO" />개)}}</translation>
 <translation id="4550003330909367850">여기에서 비밀번호를 보거나 복사하려면 이 기기에 화면 잠금을 설정하세요.</translation>
 <translation id="4554077758708533499">USB 케이블로 연결됨</translation>
 <translation id="4557685098773234337">신속하게 여기를 방문하려면 이 페이지를 홈 화면에 추가하세요.</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">지원되지 않는 Chrome 인스턴스 수입니다.</translation>
 <translation id="4908869848243824489">Google 디스커버</translation>
 <translation id="4910889077668685004">결제 앱</translation>
+<translation id="4912413785358399818">탭 이동</translation>
 <translation id="4913161338056004800">통계 재설정</translation>
 <translation id="4913169188695071480">새로고침 중지</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{#페이지}other{#페이지}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">허용</translation>
 <translation id="5054455334322721892">로그인할 경우 <ph name="BEGIN_LINK1" />다른 활동 형식<ph name="END_LINK1" />이 Google 계정에 저장될 수 있습니다. 이러한 데이터는 언제든지 삭제할 수 있습니다.</translation>
 <translation id="5061533557687621530">날씨를 확인하려면 마이크를 탭하고 "오늘 날씨 어때?"라고 말하세요.</translation>
+<translation id="506254248375231072">탭 없음</translation>
 <translation id="5087580092889165836">카드 추가</translation>
+<translation id="5091199029769593641">곧 새 탭을 열 때 <ph name="SITE_NAME" /> 스토리가 표시됩니다. 내가 팔로우하는 사이트는 Google 계정에 저장되며 디스커버 설정에서 관리할 수 있습니다.</translation>
 <translation id="5091249083535528968">확장된 사용 데이터</translation>
 <translation id="509429900233858213">오류가 발생했습니다.</translation>
 <translation id="510275257476243843">1시간 남음</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">제공업체: <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">다운로드 페이지</translation>
 <translation id="5458366071038729214">팔로우하는 사이트가 여기에 표시됩니다</translation>
+<translation id="5468068603361015296">그래도 <ph name="FILE_NAME" /> 파일을 다운로드하시겠습니까?</translation>
 <translation id="548278423535722844">지도 앱에서 열기</translation>
 <translation id="5483197086164197190">Chrome 탐색하기</translation>
 <translation id="5487521232677179737">인터넷 사용 기록 삭제</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. All rights reserved.</translation>
 <translation id="5810864297166300463">웹 어시스턴트</translation>
 <translation id="5814131985548525293">여기에 입력하거나 음성 아이콘을 탭하여 시작</translation>
+<translation id="5814749351757353073">즐겨 찾는 사이트의 최신 소식 확인하기</translation>
 <translation id="583281660410589416">알 수 없음</translation>
 <translation id="5833984609253377421">링크 공유</translation>
 <translation id="5834764604050996579">QR 코드를 스캔하려면 Chrome에서 카메라를 사용하도록 허용하세요.</translation>
@@ -824,6 +837,7 @@
 
 예를 들어 어떤 웹사이트는 사용자가 방문한 다른 웹사이트를 기반으로 하지 않는 광고를 표시하여 이 요청에 응답할 수 있습니다. 그러나 대부분의 웹사이트에서는 보안을 개선하거나 웹사이트에 콘텐츠, 광고, 권장사항 등을 제공하거나 보고서 통계를 생성하기 위해 사용자의 인터넷 사용 기록을 계속 수집하고 사용합니다.</translation>
 <translation id="624789221780392884">업데이트 준비 완료</translation>
+<translation id="6264376385120300461">무시하고 다운로드</translation>
 <translation id="6277522088822131679">페이지를 인쇄하는 중에 문제가 발생했습니다. 다시 시도해 주세요.</translation>
 <translation id="6278428485366576908">테마</translation>
 <translation id="6292420053234093573">Chrome을 사용하면 <ph name="BEGIN_LINK1" />Google 서비스 약관<ph name="END_LINK1" />과 <ph name="BEGIN_LINK2" />Chrome 및 Chrome OS 추가 서비스 약관<ph name="END_LINK2" />에 동의하는 것으로 간주됩니다.</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">문제가 발생했습니다. 나중에 다시 시도해 보세요.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{1시간 전에 확인됨}other{#시간 전에 확인됨}}</translation>
 <translation id="6545017243486555795">모든 데이터 삭제</translation>
+<translation id="6546511553472444032">유해한 파일일 수도 있음</translation>
 <translation id="6560414384669816528">Sogou로 검색</translation>
 <translation id="656065428026159829">더보기</translation>
 <translation id="6565959834589222080">가능한 경우 Wi-Fi가 사용됨</translation>
 <translation id="6566259936974865419">Chrome을 통해 <ph name="GIGABYTES" />GB를 절약했습니다.</translation>
+<translation id="6569373978618239158">이제 새 탭을 열 때 <ph name="SITE_NAME" /> 스토리가 표시됩니다. 내가 팔로우하는 사이트는 Google 계정에 저장되며 디스커버 설정에서 관리할 수 있습니다.</translation>
 <translation id="6573096386450695060">항상 허용</translation>
 <translation id="6573431926118603307">다른 기기의 Chrome에서 연 탭이 여기에 표시됩니다.</translation>
 <translation id="6583199322650523874">현재 페이지 북마크</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">시크릿 모드 종료</translation>
 <translation id="6979737339423435258">전체 기간</translation>
 <translation id="6981982820502123353">접근성</translation>
+<translation id="6987047470128880212">이 기기에서는 시크릿 모드를 사용할 수 없습니다.</translation>
 <translation id="6989267951144302301">다운로드할 수 없음</translation>
 <translation id="6995899638241819463">데이터 유출로 인해 비밀번호가 노출된 경우 알림</translation>
 <translation id="7001056293070445572">파일이 너무 큼(<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">미리보기 탭</translation>
 <translation id="7484997419527351112">디스커버 - 사용 안함</translation>
 <translation id="7485033510383818941">피드 콘텐츠를 새로고침하려면 페이지를 아래로 당기세요</translation>
+<translation id="749294055653435199">이 기기에서는 Google 렌즈를 사용할 수 없습니다.</translation>
 <translation id="7493994139787901920"><ph name="VERSION" />(<ph name="TIME_SINCE_UPDATE" />에 업데이트됨)</translation>
 <translation id="7494974237137038751">데이터 절약됨</translation>
 <translation id="7498271377022651285">잠시 기다려 주세요…</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">조금 전에 확인됨</translation>
 <translation id="8040831032425909005">빠른 작업 및 검색 위젯 아이콘</translation>
 <translation id="804335162455518893">SD 카드가 없음</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{시크릿 탭 <ph name="TAB_COUNT_ONE" />개}other{시크릿 탭 <ph name="TAB_COUNT_NORMAL" />개}}</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" />MB 사용 가능</translation>
 <translation id="8058746566562539958">새 Chrome 탭에서 열기</translation>
 <translation id="8063895661287329888">북마크를 추가하지 못했습니다.</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">스마트폰</translation>
 <translation id="8636825310635137004">다른 기기에서 탭을 가져오려면 동기화를 사용 설정하세요.</translation>
 <translation id="8641930654639604085">성인용 사이트 차단 시도</translation>
+<translation id="864544049772947936">창 관리(<ph name="INSTANCE_COUNTS" />개)</translation>
 <translation id="8655129584991699539">Chrome 설정에서 데이터를 삭제할 수 있습니다.</translation>
 <translation id="8656747343598256512">Google 계정으로 이 사이트 및 Chrome에 로그인합니다. 나중에 동기화를 사용 설정할 수 있습니다.</translation>
 <translation id="8659579665266920523">Chrome으로 검색하는 방법</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">이미지</translation>
 <translation id="926205370408745186">디지털 웰빙에서 Chrome 활동 삭제</translation>
 <translation id="927968626442779827">Chrome에서 라이트 모드를 사용하세요.</translation>
+<translation id="928550791203542716"><ph name="SITE_NAME" /> 사이트를 팔로우했습니다.</translation>
 <translation id="932327136139879170">홈</translation>
 <translation id="938850635132480979">오류: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">암호 입력</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
index 6f522a39..aac16f5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">Cari menggunakan suara anda dengan pantas. Untuk mengedit pintasan ini, sentuh dan tahan.</translation>
 <translation id="1028699632127661925">Menghantar ke <ph name="DEVICE_NAME" />...</translation>
 <translation id="103269572468856066">Kosongkan data?</translation>
+<translation id="1034259925032978114">Tetingkap dibuka</translation>
 <translation id="1036348656032585052">Matikan</translation>
 <translation id="1036727731225946849">Menambahkan <ph name="WEBAPK_NAME" />...</translation>
 <translation id="1045899828449635435">Kosongkan data?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">Dapatkan keselamatan Chrome yang paling kukuh</translation>
 <translation id="2200113223741723867">Urus perkongsian data penggunaan</translation>
 <translation id="2227444325776770048">Teruskan sebagai <ph name="USER_FULL_NAME" /></translation>
+<translation id="2230777942707397948">Tetingkap kosong</translation>
 <translation id="2239812875700136898">Kawal cerita anda daripada butang Pilihan untuk Discover</translation>
 <translation id="2259659629660284697">Eksport kata laluan…</translation>
 <translation id="2276696007612801991">Log masuk ke akaun Google anda untuk menyemak kata laluan anda</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Halaman utama Chrome</translation>
 <translation id="3157842584138209013">Lihat jumlah data yang dapat dijimatkan daripada butang Lagi Pilihan</translation>
 <translation id="3166827708714933426">Pintasan tab dan tetingkap</translation>
+<translation id="316694332262407393">Chrome sudah pun berjalan di sini.</translation>
 <translation id="3169472444629675720">Temui</translation>
 <translation id="3205824638308738187">Hampir selesai!</translation>
 <translation id="3207960819495026254">Ditandai halaman</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">Tingkatkan keselamatan pada web</translation>
 <translation id="3602290021589620013">Pratonton</translation>
 <translation id="3616113530831147358">Audio</translation>
+<translation id="3622349720008044802">Urus tetingkap</translation>
 <translation id="3631987586758005671">Berkongsi ke <ph name="DEVICE_NAME" /></translation>
 <translation id="3632295766818638029">Buka topeng kata laluan</translation>
 <translation id="363596933471559332">Log masuk secara automatik ke tapak web menggunakan bukti kelayakan yang disimpan. Apabila ciri ini dimatikan, anda akan diminta memberikan pengesahan setiap kali sebelum log masuk ke tapak web.</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">Tetapan terjemahan</translation>
 <translation id="3738139272394829648">Sentuh untuk Cari</translation>
 <translation id="3739899004075612870">Ditandai halaman dalam <ph name="PRODUCT_NAME" /></translation>
+<translation id="3740525748616366977">Carian suara tidak tersedia pada peranti ini</translation>
 <translation id="3749259744154402564">Tidak disokong</translation>
 <translation id="3771001275138982843">Tidak dapat memuat turun kemas kini</translation>
 <translation id="3771033907050503522">Tab Inkognito</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">Data asas ditambah maklumat tentang tapak web yang anda lawati dan apl yang anda gunakan</translation>
 <translation id="3775705724665058594">Hantar ke peranti anda</translation>
 <translation id="3778956594442850293">Ditambahkan pada Skrin utama</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 tab}other{# tab}}</translation>
 <translation id="3803784507854318295">Urus automain</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Urus</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">“</translation>
 <translation id="393697183122708255">Tiada carian suara yg didayakan tersedia</translation>
 <translation id="395377504920307820">Gunakan tanpa akaun</translation>
+<translation id="3958287878205277013">Untuk mengosongkan sejarah penyemakan imbas Inkognito daripada peranti anda, tutup semua tab Inkognito.</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome akan memuatkan halaman anda apabila sudah sedia}other{Chrome akan memuatkan halaman anda apabila sudah sedia}}</translation>
 <translation id="3962957115499249330">Anda akan melihat pemberitahuan apabila muat turun ini dimulakan pada Wi-Fi.</translation>
 <translation id="3963007978381181125">Penyulitan ungkapan laluan tidak termasuk kaedah pembayaran dan alamat daripada Google Pay. Hanya orang yang mempunyai ungkapan laluan anda boleh membaca data anda yang disulitkan. Ungkapan laluan tidak dihantar atau disimpan oleh Google. Jika anda terlupa ungkapan laluan atau ingin menukar tetapan ini, anda perlu menetapkan semula penyegerakan. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 Akaun Google anda mungkin mempunyai sejarah penyemakan imbas dalam bentuk lain seperti carian dan aktiviti daripada perkhidmatan Google yang lain di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="4532845899244822526">Pilih folder</translation>
 <translation id="4538018662093857852">Hidupkan mod Ringkas</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> tab}other{<ph name="TAB_COUNT_MANY" /> tab, <ph name="TAB_COUNT_INCOGNITO" /> inkognito}}</translation>
 <translation id="4550003330909367850">Untuk melihat atau menyalin kata laluan anda di sini, tetapkan kunci skrin pada peranti ini.</translation>
 <translation id="4554077758708533499">Disambungkan menggunakan kabel USB</translation>
 <translation id="4557685098773234337">Untuk melawati halaman ini dengan lebih cepat, tambahkan halaman ini pada skrin Utama anda</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">Bilangan kejadian Chrome tidak disokong.</translation>
 <translation id="4908869848243824489">Discover oleh Google</translation>
 <translation id="4910889077668685004">Apl pembayaran</translation>
+<translation id="4912413785358399818">Alihkan tab</translation>
 <translation id="4913161338056004800">Tetapkan semula perangkaan</translation>
 <translation id="4913169188695071480">Berhenti memuat semula</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# Halaman}other{# Halaman}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">Benarkan</translation>
 <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Bentuk aktiviti lain<ph name="END_LINK1" /> mungkin disimpan dalam Akaun Google anda semasa anda dilog masuk. Anda boleh memadamkan data tersebut pada bila-bila masa.</translation>
 <translation id="5061533557687621530">Untuk menyemak cuaca, ketik mikrofon dan sebut “Bagaimanakah cuaca hari ini?”</translation>
+<translation id="506254248375231072">Tiada tab</translation>
 <translation id="5087580092889165836">Tambah kad</translation>
+<translation id="5091199029769593641">Tidak lama lagi, anda akan melihat cerita daripada <ph name="SITE_NAME" /> apabila anda membuka tab baharu. Laman yang anda ikuti disimpan pada akaun Google anda. Anda boleh mengurus laman tersebut dalam tetapan Discover.</translation>
 <translation id="5091249083535528968">Data penggunaan lanjutan</translation>
 <translation id="509429900233858213">Ralat telah berlaku.</translation>
 <translation id="510275257476243843">1 jam lagi</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">dengan <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">Muat turun halaman</translation>
 <translation id="5458366071038729214">Anda akan menemukan laman yang anda ikuti di sini</translation>
+<translation id="5468068603361015296">Adakah anda mahu memuat turun <ph name="FILE_NAME" /> juga?</translation>
 <translation id="548278423535722844">Buka dalam apl peta</translation>
 <translation id="5483197086164197190">Navigasi Chrome</translation>
 <translation id="5487521232677179737">Kosongkan data</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">Hak Cipta <ph name="YEAR" /> Google LLC. Hak cipta terpelihara.</translation>
 <translation id="5810864297166300463">Bantuan Web</translation>
 <translation id="5814131985548525293">Ketik di sini atau ketik ikon suara untuk bermula</translation>
+<translation id="5814749351757353073">Ikuti perkembangan laman kegemaran anda</translation>
 <translation id="583281660410589416">Tidak diketahui</translation>
 <translation id="5833984609253377421">Kongsi pautan</translation>
 <translation id="5834764604050996579">Untuk mengimbas Kod QR, benarkan Chrome menggunakan kamera anda</translation>
@@ -824,6 +837,7 @@
 
 Sebagai contoh, sesetengah tapak web mungkin memberi respons kepada permintaan ini dengan memaparkan iklan yang tidak berdasarkan tapak web lain yang anda lawati. Pelbagai tapak web masih akan mengumpul dan menggunakan data penyemakan imbas anda — contohnya, untuk meningkatkan keselamatan, untuk menyediakan kandungan, iklan dan cadangan serta untuk menjana statistik pelaporan.</translation>
 <translation id="624789221780392884">Kemaskini bersedia</translation>
+<translation id="6264376385120300461">Muat turun juga</translation>
 <translation id="6277522088822131679">Terdapat masalah semasa mencetak halaman. Sila cuba sekali lagi.</translation>
 <translation id="6278428485366576908">Tema</translation>
 <translation id="6292420053234093573">Dengan menggunakan Chrome, anda bersetuju menerima <ph name="BEGIN_LINK1" />Syarat Perkhidmatan Google<ph name="END_LINK1" /> dan <ph name="BEGIN_LINK2" />Syarat Perkhidmatan Tambahan Google Chrome dan OS Chrome<ph name="END_LINK2" />.</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">Kesilapan telah berlaku. Cuba sebentar lagi.</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Disemak 1 jam yang lalu}other{Disemak # yang lalu}}</translation>
 <translation id="6545017243486555795">Hapuskan Semua Data</translation>
+<translation id="6546511553472444032">Fail mungkin berbahaya</translation>
 <translation id="6560414384669816528">Cari dengan Sogou</translation>
 <translation id="656065428026159829">Lihat lagi</translation>
 <translation id="6565959834589222080">Wi-Fi akan digunakan apabila tersedia</translation>
 <translation id="6566259936974865419">Chrome telah menjimatkan data anda sebanyak <ph name="GIGABYTES" /> GB</translation>
+<translation id="6569373978618239158">Kini anda akan melihat cerita daripada <ph name="SITE_NAME" /> apabila anda membuka tab baharu. Laman yang anda ikuti disimpan pada akaun Google anda. Anda boleh mengurus laman tersebut dalam tetapan Discover.</translation>
 <translation id="6573096386450695060">Sentiasa benarkan</translation>
 <translation id="6573431926118603307">Tab yang telah anda buka dalam Chrome pada peranti anda yang lain akan dipaparkan di sini.</translation>
 <translation id="6583199322650523874">Tandai halaman semasa</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">Tinggalkan mod Inkognito</translation>
 <translation id="6979737339423435258">Sepanjang masa</translation>
 <translation id="6981982820502123353">Kebolehcapaian</translation>
+<translation id="6987047470128880212">Inkognito tidak tersedia pada peranti ini</translation>
 <translation id="6989267951144302301">Tidak dapat memuat turun</translation>
 <translation id="6995899638241819463">Beri amaran kepada anda jika kata laluan terdedah dalam pelanggaran data</translation>
 <translation id="7001056293070445572">Fail ini besar (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">Tab pratonton</translation>
 <translation id="7484997419527351112">Discover - dimatikan</translation>
 <translation id="7485033510383818941">Untuk memuat semula kandungan suapan, tarik halaman ke bawah</translation>
+<translation id="749294055653435199">Google Lens tidak tersedia pada peranti ini</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (Dikemas kini <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">data disimpan</translation>
 <translation id="7498271377022651285">Sila tunggu…</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">Disemak sebentar tadi</translation>
 <translation id="8040831032425909005">Ikon Widget Carian Tindakan Pantas</translation>
 <translation id="804335162455518893">Kad SD tidak ditemui</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> tab inkognito}other{<ph name="TAB_COUNT_NORMAL" /> tab inkognito}}</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB tersedia</translation>
 <translation id="8058746566562539958">Buka dalam tab Chrome baharu</translation>
 <translation id="8063895661287329888">Gagal menambah penanda halaman.</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">telefon</translation>
 <translation id="8636825310635137004">Hidupkan penyegerakan untuk mendapatkan tab daripada peranti anda yang lain.</translation>
 <translation id="8641930654639604085">Cuba menyekat tapak dewasa</translation>
+<translation id="864544049772947936">Urus tetingkap (<ph name="INSTANCE_COUNTS" />)</translation>
 <translation id="8655129584991699539">Anda boleh mengosongkan data dalam Tetapan Chrome</translation>
 <translation id="8656747343598256512">Log masuk ke tapak ini dan Chrome menggunakan Akaun Google anda. Anda boleh menghidupkan penyegerakan kemudian.</translation>
 <translation id="8659579665266920523">Cara mencari menggunakan Chrome</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">Imej</translation>
 <translation id="926205370408745186">Alih keluar aktiviti Chrome anda daripada Kesejahteraan Digital</translation>
 <translation id="927968626442779827">Gunakan mod Ringkas pada Google Chrome</translation>
+<translation id="928550791203542716">Mengikuti <ph name="SITE_NAME" /></translation>
 <translation id="932327136139879170">Laman Utama</translation>
 <translation id="938850635132480979">Ralat: <ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">Masukkan frasa laluan</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
index 1cc5f54d..79a133ae 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
@@ -222,6 +222,7 @@
 <translation id="2433507940547922241">Pamja</translation>
 <translation id="2435457462613246316">Shfaq fjalëkalimin</translation>
 <translation id="2450083983707403292">Dëshiron që të fillosh ta shkarkosh <ph name="FILE_NAME" /> përsëri?</translation>
+<translation id="2450209325949418501">Mund të shikosh statusin e shkarkimit në njoftimet e tua</translation>
 <translation id="2450907520913474542">Mëso për temat në sajtet e uebit pa u larguar nga faqja. "Trokit për të kërkuar" dërgon një fjalë dhe kontekstin e saj rrethues te "Kërko në Google", duke sjellë përkufizime, fotografi, rezultate kërkimi dhe detaje të tjera.
 
 Prek dhe mbaj shtypur një fjalë për ta kërkuar. Për të përsosur kërkimin, zgjidh më shumë ose më pak fjalë. Për ta modifikuar kërkimin, hape panelin, trokit tek ikona për ta hapur në një skedë të re dhe bëj ndryshimet në kutinë e kërkimit.</translation>
@@ -392,6 +393,7 @@
 Privacy Sandbox ruan vitalitetin e uebit të hapur duke krijuar mënyra më të mira për të kryer këto shërbime, pa prishur sajtet dhe duke parandaluar njëkohësisht që të mos gjurmohesh fshehtas nëpër ueb.
 
 Privacy Sandbox është ende në zhvillim aktiv dhe ofrohet në rajone të caktuara. Për momentin, sajtet mund të provojnë Privacy Sandbox ndërkohë që vazhdojnë të përdorin teknologjitë aktuale të uebit, si p.sh. kukit e palëve të treta. <ph name="BEGIN_LINK" />Mëso më shumë<ph name="END_LINK" /></translation>
+<translation id="3469665409713263828">{FILE_COUNT,plural, =1{1 shkarkim i planifikuar}other{# shkarkime të planifikuara}}</translation>
 <translation id="3478363558367712427">Mund të zgjedhësh motorin tënd të kërkimit</translation>
 <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Mëso më shumë<ph name="END_LINK" /> mbi përmbajtjen e sugjeruar</translation>
 <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
@@ -653,6 +655,7 @@
 <translation id="5199929503336119739">Profili i punës</translation>
 <translation id="5201464744567315552">Do të shikosh një njoftim kur ky shkarkim të fillojë në <ph name="TIME" />.</translation>
 <translation id="5204967432542742771">Fut fjalëkalimin</translation>
+<translation id="5206168361184759344">{FILE_COUNT,plural, =1{Po shkarkohet skedari…}other{Po shkarkohen # skedarë…}}</translation>
 <translation id="5210286577605176222">Kalo te skeda e mëparshme</translation>
 <translation id="5210365745912300556">Mbyll skedën</translation>
 <translation id="5213672942202814946">Përdor kërkimin me zë</translation>
@@ -813,6 +816,7 @@
 <translation id="6159729262978459665">Pastron historikun nga të gjitha pajisjet e sinkronizuara.</translation>
 <translation id="6186394685773237175">Nuk u gjetën fjalëkalime të komprometuara</translation>
 <translation id="6192907950379606605">Merr përshkrimet e imazheve</translation>
+<translation id="6203593061661911168">Shkarkimi do të fillojë kur të jesh në Wi-Fi</translation>
 <translation id="6210748933810148297">Nuk je <ph name="EMAIL" />?</translation>
 <translation id="6211386937064921208">Po shikon paraprakisht këtë faqe</translation>
 <translation id="6221633008163990886">Shkyç për të eksportuar fjalëkalimet e tua</translation>
@@ -869,6 +873,7 @@
 <translation id="6489610539826642779">Lista e leximit <ph name="BEGIN_NEW" />E re<ph name="END_NEW" /></translation>
 <translation id="6490496612063106490">Lidhja për te teksti i theksuar</translation>
 <translation id="6496823230996795692">Për të përdorur <ph name="APP_NAME" /> për herë të parë, lidhu me internetin.</translation>
+<translation id="650224091954855786">{FILE_COUNT,plural, =1{Skedar i shkarkuar}other{# shkarkime të përfunduara}}</translation>
 <translation id="6508722015517270189">Rinis Chrome</translation>
 <translation id="6527303717912515753">Ndaj</translation>
 <translation id="6532866250404780454">Sajtet që viziton në Chrome nuk do të shfaqen. Të gjithë kohëmatësit e sajtit do të fshihen.</translation>
@@ -1063,6 +1068,7 @@
 <translation id="7707922173985738739">Përdor të dhënat celulare</translation>
 <translation id="7725024127233776428">Faqet që shënon shfaqen këtu</translation>
 <translation id="7757787379047923882">Teksti u nda nga <ph name="DEVICE_NAME" /></translation>
+<translation id="7760558538939385512">(<ph name="MEGABYTES" />)\n<ph name="URL" /></translation>
 <translation id="7761849928583394409">Zgjidh datën dhe orën</translation>
 <translation id="7762668264895820836">Karta SD <ph name="SD_CARD_NUMBER" /></translation>
 <translation id="7764225426217299476">Shto adresë</translation>
@@ -1259,6 +1265,7 @@
 <translation id="8912362522468806198">Llogaria e Google</translation>
 <translation id="8920114477895755567">Po pret detajet e prindërve.</translation>
 <translation id="8922289737868596582">Shkarko faqet nga butoni "Më shumë opsione" për t'i përdorur ato jashtë linje</translation>
+<translation id="892496902842311796"><ph name="LANG" /> është gati</translation>
 <translation id="8928626432984354940">Lista e dosjeve të faqeshënuesve e hapur në gjysmë lartësi</translation>
 <translation id="8937267401510745927">Për të të ndihmuar të përfundosh detyrat, Google do të marrë URL-të dhe përmbajtjet e sajteve ku ti përdor "Asistentin", si dhe informacionet që dërgon nëpërmjet "Asistentit". Këto informacione mund të ruhen në "Llogarinë tënde të Google". "Asistentin" mund ta çaktivizosh te cilësimet e Chrome.</translation>
 <translation id="8937772741022875483">Dëshiron të heqësh aktivitetin tënd të Chrome nga "Mirëqenia dixhitale"?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
index 89ab3ba..67bdbfc 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -4,6 +4,7 @@
 <translation id="1016498331642356377">透過語音快速搜尋。如要編輯此捷徑,請按住捷徑按鈕。</translation>
 <translation id="1028699632127661925">正在傳送至 <ph name="DEVICE_NAME" />…</translation>
 <translation id="103269572468856066">要一併清除這些網站和應用程式的資料嗎?</translation>
+<translation id="1034259925032978114">視窗已開啟</translation>
 <translation id="1036348656032585052">停用</translation>
 <translation id="1036727731225946849">正在新增「<ph name="WEBAPK_NAME" />」…</translation>
 <translation id="1045899828449635435">要一併清除這些網站的資料嗎?</translation>
@@ -187,6 +188,7 @@
 <translation id="2195339740518523951">取得 Chrome 最強大的安全防護</translation>
 <translation id="2200113223741723867">管理使用情況資料分享設定</translation>
 <translation id="2227444325776770048">以<ph name="USER_FULL_NAME" />的身分繼續</translation>
+<translation id="2230777942707397948">空白視窗</translation>
 <translation id="2239812875700136898">按一下 [探索的選項] 按鈕來控制您的報導</translation>
 <translation id="2259659629660284697">匯出密碼…</translation>
 <translation id="2276696007612801991">登入 Google 帳戶以檢查密碼</translation>
@@ -338,6 +340,7 @@
 <translation id="314939179385989105">Chrome 首頁</translation>
 <translation id="3157842584138209013">只要㩒一下 [更多選項] 按鈕,就可以翻查慳咗嘅數據用量</translation>
 <translation id="3166827708714933426">分頁和視窗快速鍵</translation>
+<translation id="316694332262407393">Chrome 已在此執行中。</translation>
 <translation id="3169472444629675720">探索</translation>
 <translation id="3205824638308738187">即將完成!</translation>
 <translation id="3207960819495026254">已加入書籤</translation>
@@ -416,6 +419,7 @@
 <translation id="3587596251841506391">協助改善網絡安全</translation>
 <translation id="3602290021589620013">預覽</translation>
 <translation id="3616113530831147358">音效檔案</translation>
+<translation id="3622349720008044802">管理視窗</translation>
 <translation id="3631987586758005671">正在分享至 <ph name="DEVICE_NAME" /></translation>
 <translation id="3632295766818638029">顯示密碼</translation>
 <translation id="363596933471559332">使用儲存的憑證自動登入網站。關閉功能時,每次登入網站之前都會要求您驗證。</translation>
@@ -431,6 +435,7 @@
 <translation id="3737319253362202215">翻譯設定</translation>
 <translation id="3738139272394829648">輕觸搜尋</translation>
 <translation id="3739899004075612870">已在 <ph name="PRODUCT_NAME" /> 中新增書籤</translation>
+<translation id="3740525748616366977">這部裝置不支援語音搜尋功能</translation>
 <translation id="3749259744154402564">不支援</translation>
 <translation id="3771001275138982843">無法下載更新</translation>
 <translation id="3771033907050503522">無痕式分頁</translation>
@@ -439,6 +444,7 @@
 <translation id="3773856050682458546">基本資料,以及您瀏覽的網站和所用應用程式的資料</translation>
 <translation id="3775705724665058594">傳送至您的裝置</translation>
 <translation id="3778956594442850293">已新增至主畫面</translation>
+<translation id="3791957072666773229">{TAB_COUNT,plural, =1{1 個分頁}other{# 個分頁}}</translation>
 <translation id="3803784507854318295">管理自動播放方式</translation>
 <translation id="3810838688059735925">影片</translation>
 <translation id="3810973564298564668">管理</translation>
@@ -459,6 +465,7 @@
 <translation id="3934366560681368531">「</translation>
 <translation id="393697183122708255">沒有可用的語音搜尋功能</translation>
 <translation id="395377504920307820">使用時不登入帳戶</translation>
+<translation id="3958287878205277013">如要清除裝置上的無痕瀏覽記錄,請關閉所有無痕式分頁。</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome 準備就緒後將載入您的網頁}other{Chrome 準備就緒後將載入您的網頁}}</translation>
 <translation id="3962957115499249330">透過 Wi-Fi 開始下載時,系統會顯示通知。</translation>
 <translation id="3963007978381181125">密碼短語加密的資料不包括 Google Pay 的付款方法和地址。只有知道您密碼短語的使用者,才能讀取已加密的資料。系統不會將密碼短語傳送給 Google,Google 也不會儲存您的密碼短語。如果您忘記自己的密碼短語,或希望變更這項設定,則必須重設同步功能。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
@@ -544,6 +551,7 @@
 不過,您仍可前往 <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> 存取 Google 帳戶中保存的其他各種瀏覽紀錄,例如在其他 Google 服務中的搜尋和活動紀錄。</translation>
 <translation id="4532845899244822526">選擇資料夾</translation>
 <translation id="4538018662093857852">開啟精簡模式</translation>
+<translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> 個分頁}other{<ph name="TAB_COUNT_MANY" /> 個分頁、<ph name="TAB_COUNT_INCOGNITO" /> 個無痕式分頁}}</translation>
 <translation id="4550003330909367850">如要在此查看或複製您的密碼,請為此裝置設定螢幕鎖定功能。</translation>
 <translation id="4554077758708533499">已使用 USB 連接線連接</translation>
 <translation id="4557685098773234337">如要迅速開啟此網頁,請將此網頁新增至主畫面</translation>
@@ -609,6 +617,7 @@
 <translation id="4885273946141277891">Chrome 實例的數量已超出上限。</translation>
 <translation id="4908869848243824489">Google 探索</translation>
 <translation id="4910889077668685004">付款應用程式</translation>
+<translation id="4912413785358399818">移動分頁</translation>
 <translation id="4913161338056004800">重設統計資料</translation>
 <translation id="4913169188695071480">停止重新整理</translation>
 <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# 個網頁}other{# 個網頁}}</translation>
@@ -634,7 +643,9 @@
 <translation id="5039804452771397117">允許</translation>
 <translation id="5054455334322721892">在您登入後,<ph name="BEGIN_LINK1" />其他形式的活動<ph name="END_LINK1" />可能會儲存至您的 Google 帳戶。您可以隨時刪除這些資料。</translation>
 <translation id="5061533557687621530">如要查看天氣,請輕按麥克風圖示,然後說「今日天氣點呀?」</translation>
+<translation id="506254248375231072">沒有分頁</translation>
 <translation id="5087580092889165836">加入新卡</translation>
+<translation id="5091199029769593641">不久後,您將會在開啟新分頁時看到 <ph name="SITE_NAME" /> 的內容。您追蹤的網站會儲存在 Google 帳戶中。您可在「探索」設定中管理已儲存的網站。</translation>
 <translation id="5091249083535528968">延伸使用情況資料</translation>
 <translation id="509429900233858213">發生錯誤。</translation>
 <translation id="510275257476243843">尚餘 1 小時</translation>
@@ -694,6 +705,7 @@
 <translation id="5454166040603940656">與 <ph name="PROVIDER" /></translation>
 <translation id="5456381639095306749">下載網頁</translation>
 <translation id="5458366071038729214">您可在此找到您追蹤的網站</translation>
+<translation id="5468068603361015296">仍要下載「<ph name="FILE_NAME" />」嗎?</translation>
 <translation id="548278423535722844">在地圖應用程式中開啟</translation>
 <translation id="5483197086164197190">導覽 Chrome</translation>
 <translation id="5487521232677179737">清除資料</translation>
@@ -750,6 +762,7 @@
 <translation id="5810288467834065221">版權所有 <ph name="YEAR" /> Google LLC。保留所有權利。</translation>
 <translation id="5810864297166300463">網絡協助</translation>
 <translation id="5814131985548525293">在此處輸入或輕按麥克風圖示以開始搜尋</translation>
+<translation id="5814749351757353073">緊貼最喜愛網站的最新動態</translation>
 <translation id="583281660410589416">不明</translation>
 <translation id="5833984609253377421">分享連結</translation>
 <translation id="5834764604050996579">如要掃瞄 QR 碼,請允許 Chrome 使用攝錄機</translation>
@@ -824,6 +837,7 @@
 
 舉例來說,部分網站可能會在顯示廣告時,選擇不根據您所瀏覽的網站記錄來顯示廣告。許多網站仍會收集您的瀏覽資料,並將這些資料用於下列目的:提高網站安全性、在網站上提供相關的內容、廣告和推薦項目,以及產生報告統計資料。</translation>
 <translation id="624789221780392884">可執行更新</translation>
+<translation id="6264376385120300461">仍要下載</translation>
 <translation id="6277522088822131679">列印網頁時發生問題,請再試一次。</translation>
 <translation id="6278428485366576908">主題背景</translation>
 <translation id="6292420053234093573">使用 Chrome 即表示您同意《<ph name="BEGIN_LINK1" />Google 服務條款<ph name="END_LINK1" />》以及 <ph name="BEGIN_LINK2" />Google Chrome 和 Chrome 作業系統的《附加服務條款》<ph name="END_LINK2" />。</translation>
@@ -881,10 +895,12 @@
 <translation id="6539092367496845964">發生錯誤,請稍後再試。</translation>
 <translation id="6541983376925655882">{NUM_HOURS,plural, =1{曾在 1 小時前檢查}other{曾在 # 小時前檢查}}</translation>
 <translation id="6545017243486555795">清除所有資料</translation>
+<translation id="6546511553472444032">檔案可能有害</translation>
 <translation id="6560414384669816528">使用「搜狗」搜尋內容</translation>
 <translation id="656065428026159829">查看更多</translation>
 <translation id="6565959834589222080">有可用的 Wi-Fi 時使用 Wi-Fi</translation>
 <translation id="6566259936974865419">Chrome 已為您節省 <ph name="GIGABYTES" /> GB</translation>
+<translation id="6569373978618239158">您將會在開啟新分頁時看到「<ph name="SITE_NAME" />」的內容。您追蹤的網站會儲存在 Google 帳戶中。您可在「探索」設定中管理已儲存的網站。</translation>
 <translation id="6573096386450695060">一律允許</translation>
 <translation id="6573431926118603307">您在其他裝置上開啟的 Chrome 分頁會在這裡顯示。</translation>
 <translation id="6583199322650523874">將目前的網頁加入書籤</translation>
@@ -950,6 +966,7 @@
 <translation id="696447261358045621">退出無痕模式</translation>
 <translation id="6979737339423435258">所有時間</translation>
 <translation id="6981982820502123353">協助工具</translation>
+<translation id="6987047470128880212">這部裝置不支援無式痕分頁</translation>
 <translation id="6989267951144302301">無法下載</translation>
 <translation id="6995899638241819463">密碼因資料外洩而被洩露時接收警告</translation>
 <translation id="7001056293070445572">此檔案體積很大 (<ph name="FILE_SIZE" />)</translation>
@@ -1027,6 +1044,7 @@
 <translation id="7482656565088326534">預覽分頁</translation>
 <translation id="7484997419527351112">探索 - 關閉</translation>
 <translation id="7485033510383818941">如要重新整理資訊提供內容,請將頁面往下拉</translation>
+<translation id="749294055653435199">這部裝置不支援「Google 智能鏡頭」</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (上次更新: <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">已節省的數據用量</translation>
 <translation id="7498271377022651285">請稍候…</translation>
@@ -1128,6 +1146,7 @@
 <translation id="8037801708772278989">剛檢查過</translation>
 <translation id="8040831032425909005">快速操作與搜尋小工具的圖示</translation>
 <translation id="804335162455518893">找不到 SD 卡</translation>
+<translation id="8048533522416101084">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> 個無痕式分頁}other{<ph name="TAB_COUNT_NORMAL" /> 個無痕式分頁}}</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB 可用空間</translation>
 <translation id="8058746566562539958">在 Chrome 新分頁中開啟</translation>
 <translation id="8063895661287329888">無法加入書籤。</translation>
@@ -1226,6 +1245,7 @@
 <translation id="8621068256433641644">手機</translation>
 <translation id="8636825310635137004">如要取得其他裝置上的分頁,請開啟同步處理功能。</translation>
 <translation id="8641930654639604085">嘗試封鎖成人網站</translation>
+<translation id="864544049772947936">管理視窗 (<ph name="INSTANCE_COUNTS" /> 個)</translation>
 <translation id="8655129584991699539">您可以在 Chrome 設定中清除資料</translation>
 <translation id="8656747343598256512">使用您的 Google 帳戶登入此網站和 Chrome。您可稍後再開啟同步功能。</translation>
 <translation id="8659579665266920523">如何使用 Chrome 搜尋</translation>
@@ -1314,6 +1334,7 @@
 <translation id="9219103736887031265">圖片</translation>
 <translation id="926205370408745186">從「健康數碼生活」中移除您的 Chrome 活動記錄</translation>
 <translation id="927968626442779827">使用 Google Chrome 的「精簡模式」</translation>
+<translation id="928550791203542716">正在追蹤「<ph name="SITE_NAME" />」</translation>
 <translation id="932327136139879170">首頁</translation>
 <translation id="938850635132480979">錯誤:<ph name="ERROR_CODE" /></translation>
 <translation id="939598580284253335">請輸入複雜密碼</translation>
diff --git a/chrome/browser/ui/javascript_dialogs/javascript_dialog_browsertest.cc b/chrome/browser/ui/javascript_dialogs/javascript_dialog_browsertest.cc
index 12b2ee6..e9161cb 100644
--- a/chrome/browser/ui/javascript_dialogs/javascript_dialog_browsertest.cc
+++ b/chrome/browser/ui/javascript_dialogs/javascript_dialog_browsertest.cc
@@ -383,9 +383,7 @@
   JavaScriptDialogForPrerenderTest()
       : prerender_helper_(
             base::BindRepeating(&JavaScriptDialogForPrerenderTest::web_contents,
-                                base::Unretained(this))) {
-    feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
-  }
+                                base::Unretained(this))) {}
 
   void SetUp() override {
     prerender_helper_.SetUp(embedded_test_server());
@@ -402,7 +400,6 @@
  protected:
   content::WebContents* web_contents_ = nullptr;
   content::test::PrerenderTestHelper prerender_helper_;
-  base::test::ScopedFeatureList feature_list_;
 };
 
 IN_PROC_BROWSER_TEST_F(JavaScriptDialogForPrerenderTest, NoDismissalDialog) {
diff --git a/chrome/browser/ui/passwords/settings/password_manager_porter.cc b/chrome/browser/ui/passwords/settings/password_manager_porter.cc
index 408879a..a741fc8d 100644
--- a/chrome/browser/ui/passwords/settings/password_manager_porter.cc
+++ b/chrome/browser/ui/passwords/settings/password_manager_porter.cc
@@ -23,7 +23,7 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/password_manager/core/browser/export/password_manager_exporter.h"
 #include "components/password_manager/core/browser/import/csv_password_sequence.h"
-#include "components/password_manager/core/browser/password_store.h"
+#include "components/password_manager/core/browser/password_store_interface.h"
 #include "components/strings/grit/components_strings.h"
 #include "content/public/browser/web_contents.h"
 #include "net/base/filename_util.h"
@@ -95,9 +95,9 @@
   if (result != password_manager::PasswordImporter::SUCCESS)
     return;
 
-  scoped_refptr<password_manager::PasswordStore> store(
-      PasswordStoreFactory::GetForProfile(profile_,
-                                          ServiceAccessType::EXPLICIT_ACCESS));
+  scoped_refptr<password_manager::PasswordStoreInterface> store(
+      PasswordStoreFactory::GetInterfaceForProfile(
+          profile_, ServiceAccessType::EXPLICIT_ACCESS));
   for (const auto& pwd : seq) {
     if (store)
       store->AddLogin(pwd.ParseValid());
diff --git a/chrome/browser/ui/passwords/settings/password_manager_porter_unittest.cc b/chrome/browser/ui/passwords/settings/password_manager_porter_unittest.cc
index 97ae760..aacf9dd 100644
--- a/chrome/browser/ui/passwords/settings/password_manager_porter_unittest.cc
+++ b/chrome/browser/ui/passwords/settings/password_manager_porter_unittest.cc
@@ -313,9 +313,9 @@
       base::BindRepeating(
           &password_manager::BuildPasswordStore<
               content::BrowserContext, password_manager::TestPasswordStore>));
-  scoped_refptr<password_manager::PasswordStore> store(
-      PasswordStoreFactory::GetForProfile(profile.get(),
-                                          ServiceAccessType::EXPLICIT_ACCESS));
+  scoped_refptr<password_manager::PasswordStoreInterface> store(
+      PasswordStoreFactory::GetInterfaceForProfile(
+          profile.get(), ServiceAccessType::EXPLICIT_ACCESS));
   auto* test_password_store =
       static_cast<password_manager::TestPasswordStore*>(store.get());
 
diff --git a/chrome/browser/ui/passwords/settings/password_manager_presenter.h b/chrome/browser/ui/passwords/settings/password_manager_presenter.h
index 59d48f12..626a00c 100644
--- a/chrome/browser/ui/passwords/settings/password_manager_presenter.h
+++ b/chrome/browser/ui/passwords/settings/password_manager_presenter.h
@@ -16,8 +16,8 @@
 #include "base/callback_forward.h"
 #include "base/macros.h"
 #include "build/build_config.h"
-#include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/browser/password_store_consumer.h"
+#include "components/password_manager/core/browser/password_store_interface.h"
 #include "components/password_manager/core/browser/ui/credential_provider_interface.h"
 #include "components/password_manager/core/browser/ui/plaintext_reason.h"
 #include "components/prefs/pref_member.h"
diff --git a/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc b/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc
index 356ade5..52ef69a 100644
--- a/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc
+++ b/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc
@@ -73,7 +73,7 @@
 // Ensures that all previously-started operations in the store have completed.
 class PasswordStoreWaiter : public password_manager::PasswordStoreConsumer {
  public:
-  explicit PasswordStoreWaiter(password_manager::PasswordStore* store);
+  explicit PasswordStoreWaiter(password_manager::PasswordStoreInterface* store);
   ~PasswordStoreWaiter() override = default;
 
   PasswordStoreWaiter(const PasswordStoreWaiter&) = delete;
@@ -87,7 +87,7 @@
 };
 
 PasswordStoreWaiter::PasswordStoreWaiter(
-    password_manager::PasswordStore* store) {
+    password_manager::PasswordStoreInterface* store) {
   store->GetAllLoginsWithAffiliationAndBrandingInformation(this);
   run_loop_.Run();
 }
@@ -103,12 +103,12 @@
   MockPasswordManagerClient() = default;
   ~MockPasswordManagerClient() override = default;
 
-  MOCK_METHOD(password_manager::PasswordStore*,
-              GetProfilePasswordStore,
+  MOCK_METHOD(password_manager::PasswordStoreInterface*,
+              GetProfilePasswordStoreInterface,
               (),
               (const override));
-  MOCK_METHOD(password_manager::PasswordStore*,
-              GetAccountPasswordStore,
+  MOCK_METHOD(password_manager::PasswordStoreInterface*,
+              GetAccountPasswordStoreInterface,
               (),
               (const override));
 };
@@ -126,7 +126,7 @@
 }
 
 password_manager::PasswordForm AddPasswordToStore(
-    password_manager::PasswordStore* store,
+    password_manager::PasswordStoreInterface* store,
     const GURL& url,
     base::StringPiece username,
     base::StringPiece password) {
@@ -484,9 +484,9 @@
       : PasswordManagerPresenterTest(/*with_account_store=*/true) {
     ON_CALL(*(client_.GetPasswordFeatureManager()), IsOptedInForAccountStorage)
         .WillByDefault(Return(true));
-    ON_CALL(client_, GetProfilePasswordStore)
+    ON_CALL(client_, GetProfilePasswordStoreInterface)
         .WillByDefault(Return(profile_store()));
-    ON_CALL(client_, GetAccountPasswordStore)
+    ON_CALL(client_, GetAccountPasswordStoreInterface)
         .WillByDefault(Return(account_store()));
   }
   password_manager::PasswordManagerClient* client() { return &client_; }
diff --git a/chrome/browser/ui/tab_ui_helper_browsertest.cc b/chrome/browser/ui/tab_ui_helper_browsertest.cc
index 506ae976..6a62f812 100644
--- a/chrome/browser/ui/tab_ui_helper_browsertest.cc
+++ b/chrome/browser/ui/tab_ui_helper_browsertest.cc
@@ -26,7 +26,6 @@
       const TabUIHelperWithPrerenderingTest&) = delete;
 
   void SetUp() override {
-    feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
     prerender_test_helper_.SetUp(embedded_test_server());
     InProcessBrowserTest::SetUp();
   }
@@ -46,7 +45,6 @@
 
  private:
   content::test::PrerenderTestHelper prerender_test_helper_;
-  base::test::ScopedFeatureList feature_list_;
 };
 
 IN_PROC_BROWSER_TEST_F(TabUIHelperWithPrerenderingTest,
diff --git a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc
index ae36169..24d7c1f 100644
--- a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc
@@ -1655,7 +1655,6 @@
       const SafetyTipPageInfoBubbleViewPrerenderBrowserTest&) = delete;
 
   void SetUp() override {
-    scoped_feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
     reputation::InitializeSafetyTipConfig();
     prerender_helper_.SetUp(embedded_test_server());
     InProcessBrowserTest::SetUp();
@@ -1675,7 +1674,6 @@
  private:
   content::WebContents* web_contents_ = nullptr;
   content::test::PrerenderTestHelper prerender_helper_;
-  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 // Tests that ReputationWebContentsObserver only checks heuristics when the
diff --git a/chrome/browser/ui/views/payments/payment_request_payment_app_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_payment_app_browsertest.cc
index f30c316..eac1609 100644
--- a/chrome/browser/ui/views/payments/payment_request_payment_app_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_payment_app_browsertest.cc
@@ -390,8 +390,12 @@
   }
 }
 
+// Sheriff 2021-08-10: Disabling due to flakiness.
+// https://crbug.com/1238273
+//
 // Test https://bobpay.com can not be used by https://alicepay.com
-IN_PROC_BROWSER_TEST_F(PaymentRequestPaymentAppTest, CanNotPayWithBobPay) {
+IN_PROC_BROWSER_TEST_F(PaymentRequestPaymentAppTest,
+                       DISABLED_CanNotPayWithBobPay) {
   InstallAlicePayForMethod("https://bobpay.com");
 
   {
diff --git a/chrome/browser/ui/webui/chromeos/audio/audio.mojom b/chrome/browser/ui/webui/chromeos/audio/audio.mojom
index b5460eb..2718ff4 100644
--- a/chrome/browser/ui/webui/chromeos/audio/audio.mojom
+++ b/chrome/browser/ui/webui/chromeos/audio/audio.mojom
@@ -4,24 +4,41 @@
 
 module audio.mojom;
 
-// Interface for creating page handler
+struct DeviceData {
+  // String for the device type.
+  string type;
+  uint64 id;
+  string display_name;
+  bool is_active;
+  bool is_input;
+  int32 volume_gain_percent;
+  bool is_muted;
+};
+
+// Interface for creating page handler.
 interface PageHandlerFactory {
     // Creates a page handler to update and respond to requests or
-    // audio device information
+    // audio device information.
     CreatePageHandler(pending_remote<Page> page,
                       pending_receiver<PageHandler> handler);
 };
 
-// Interface for browser-side handler
+// Interface for browser-side handler.
 // Respond to calls from the WebUI page.
 interface PageHandler {
-    // Request to get audio device information from the browser side
-    GetAudioDeviceInfo() => (string device_name);
+    // Request to get audio device information from the browser side.
+    GetAudioDeviceInfo();
 };
 
-// Interface for the WebUI page
-// Respond to calls from the browser end
+// Interface for the WebUI page.
+// Respond to calls from the browser end.
 interface Page {
-    // Updates the page with new audio device information
-    UpdateDeviceInfo(string device_name);
+    // Updates the page with new audio device information.
+    UpdateDeviceInfo(map<uint64, DeviceData> devices);
+
+    // Updates device volume.
+    UpdateDeviceVolume(uint64 node_id, int32 volume);
+
+    // Updates device mute state.
+    UpdateDeviceMute(uint64 node_id, bool is_muted);
 };
diff --git a/chrome/browser/ui/webui/chromeos/audio/audio_handler.cc b/chrome/browser/ui/webui/chromeos/audio/audio_handler.cc
index 679126e9..ceec01e 100644
--- a/chrome/browser/ui/webui/chromeos/audio/audio_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/audio/audio_handler.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include <string>
+#include <tuple>
 #include <utility>
 
 #include "chrome/browser/ui/webui/chromeos/audio/audio_handler.h"
@@ -12,14 +13,91 @@
 AudioHandler::AudioHandler(
     mojo::PendingReceiver<audio::mojom::PageHandler> receiver,
     mojo::PendingRemote<audio::mojom::Page> page)
-    : page_(std::move(page)), receiver_(this, std::move(receiver)) {}
+    : page_(std::move(page)), receiver_(this, std::move(receiver)) {
+  observation_.Observe(CrasAudioHandler::Get());
+}
 
 AudioHandler::~AudioHandler() = default;
 
-void AudioHandler::GetAudioDeviceInfo(
-    audio::mojom::PageHandler::GetAudioDeviceInfoCallback callback) {
-  const std::string mock_device_name = "mock";
-  std::move(callback).Run(mock_device_name);
+void AudioHandler::GetAudioDeviceInfo() {
+  UpdateAudioDeviceInfo();
+}
+
+void AudioHandler::OnAudioNodesChanged() {
+  UpdateAudioDeviceInfo();
+}
+
+void AudioHandler::OnOutputNodeVolumeChanged(uint64_t node_id, int volume) {
+  page_->UpdateDeviceVolume(node_id, volume);
+}
+
+void AudioHandler::OnInputNodeGainChanged(uint64_t node_id, int gain) {
+  page_->UpdateDeviceVolume(node_id, gain);
+}
+
+void AudioHandler::OnOutputMuteChanged(bool mute) {
+  const uint64_t output_id =
+      ash::CrasAudioHandler::Get()->GetPrimaryActiveOutputNode();
+  page_->UpdateDeviceMute(output_id, mute);
+}
+
+void AudioHandler::OnInputMuteChanged(bool mute) {
+  const uint64_t input_id =
+      ash::CrasAudioHandler::Get()->GetPrimaryActiveInputNode();
+  page_->UpdateDeviceMute(input_id, mute);
+}
+
+void AudioHandler::OnInputMutedByMicrophoneMuteSwitchChanged(bool mute) {
+  const uint64_t input_id =
+      ash::CrasAudioHandler::Get()->GetPrimaryActiveInputNode();
+  page_->UpdateDeviceMute(input_id, mute);
+}
+
+void AudioHandler::OnActiveOutputNodeChanged() {
+  UpdateAudioDeviceInfo();
+}
+
+void AudioHandler::OnActiveInputNodeChanged() {
+  UpdateAudioDeviceInfo();
+}
+
+void AudioHandler::UpdateAudioDeviceInfo() {
+  ash::AudioDeviceList devices;
+  ash::CrasAudioHandler::Get()->GetAudioDevices(&devices);
+  base::flat_map<uint64_t, audio::mojom::DeviceDataPtr> device_map;
+
+  for (ash::AudioDeviceList::const_iterator it = devices.begin();
+       it != devices.end(); ++it) {
+    device_map[it->id] = CreateDeviceData(&(*it));
+  }
+  page_->UpdateDeviceInfo(std::move(device_map));
+}
+
+audio::mojom::DeviceDataPtr AudioHandler::CreateDeviceData(
+    const ash::AudioDevice* item) const {
+  auto device_data = audio::mojom::DeviceData::New();
+
+  device_data->type = item->GetTypeString(item->type);
+  device_data->id = item->id;
+  device_data->display_name = item->display_name;
+  device_data->is_active = item->active;
+  device_data->is_input = item->is_input;
+  std::tie(device_data->volume_gain_percent, device_data->is_muted) =
+      GetDeviceVolGain(item->id, item->is_input);
+  return device_data;
+}
+
+std::tuple<int, bool> AudioHandler::GetDeviceVolGain(uint64_t id,
+                                                     bool is_input) const {
+  if (is_input) {
+    return std::make_tuple(
+        ash::CrasAudioHandler::Get()->GetInputGainPercentForDevice(id),
+        ash::CrasAudioHandler::Get()->IsInputMutedForDevice(id));
+  } else {
+    return std::make_tuple(
+        ash::CrasAudioHandler::Get()->GetOutputVolumePercentForDevice(id),
+        ash::CrasAudioHandler::Get()->IsOutputMutedForDevice(id));
+  }
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/audio/audio_handler.h b/chrome/browser/ui/webui/chromeos/audio/audio_handler.h
index 99ce62c..43b3fe6 100644
--- a/chrome/browser/ui/webui/chromeos/audio/audio_handler.h
+++ b/chrome/browser/ui/webui/chromeos/audio/audio_handler.h
@@ -5,6 +5,11 @@
 #ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_AUDIO_AUDIO_HANDLER_H_
 #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_AUDIO_AUDIO_HANDLER_H_
 
+#include <tuple>
+
+#include "ash/components/audio/audio_device.h"
+#include "ash/components/audio/cras_audio_handler.h"
+#include "base/scoped_observation.h"
 #include "chrome/browser/ui/webui/chromeos/audio/audio.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -13,7 +18,8 @@
 
 namespace chromeos {
 
-class AudioHandler : public audio::mojom::PageHandler {
+class AudioHandler : public audio::mojom::PageHandler,
+                     public ash::CrasAudioHandler::AudioObserver {
  public:
   AudioHandler(mojo::PendingReceiver<audio::mojom::PageHandler> receiver,
                mojo::PendingRemote<audio::mojom::Page> page);
@@ -21,9 +27,38 @@
   AudioHandler& operator=(const AudioHandler&) = delete;
   ~AudioHandler() override;
 
-  void GetAudioDeviceInfo(GetAudioDeviceInfoCallback callback) override;
+  void GetAudioDeviceInfo() override;
+
+  void OnAudioNodesChanged() override;
+
+  void OnOutputNodeVolumeChanged(uint64_t node_id, int volume) override;
+
+  void OnInputNodeGainChanged(uint64_t node_id, int gain) override;
+
+  void OnOutputMuteChanged(bool mute) override;
+
+  void OnInputMuteChanged(bool mute) override;
+
+  void OnInputMutedByMicrophoneMuteSwitchChanged(bool mute) override;
+
+  void OnActiveOutputNodeChanged() override;
+
+  void OnActiveInputNodeChanged() override;
 
  private:
+  void UpdateAudioDeviceInfo();
+
+  base::ScopedObservation<ash::CrasAudioHandler,
+                          AudioObserver,
+                          &ash::CrasAudioHandler::AddAudioObserver,
+                          &ash::CrasAudioHandler::RemoveAudioObserver>
+      observation_{this};
+
+  audio::mojom::DeviceDataPtr CreateDeviceData(
+      const ash::AudioDevice* item) const;
+
+  std::tuple<int, bool> GetDeviceVolGain(uint64_t id, bool is_input) const;
+
   mojo::Remote<audio::mojom::Page> page_;
   mojo::Receiver<audio::mojom::PageHandler> receiver_;
 };
diff --git a/chrome/browser/ui/webui/chromeos/audio/audio_ui.h b/chrome/browser/ui/webui/chromeos/audio/audio_ui.h
index 4c9dc82..a0fdbe2 100644
--- a/chrome/browser/ui/webui/chromeos/audio/audio_ui.h
+++ b/chrome/browser/ui/webui/chromeos/audio/audio_ui.h
@@ -5,6 +5,8 @@
 #ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_AUDIO_AUDIO_UI_H_
 #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_AUDIO_AUDIO_UI_H_
 
+#include <memory>
+
 #include "chrome/browser/ui/webui/chromeos/audio/audio.mojom.h"
 #include "chrome/browser/ui/webui/chromeos/audio/audio_handler.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
@@ -27,7 +29,6 @@
       mojo::PendingReceiver<audio::mojom::PageHandlerFactory> receiver);
 
  private:
-  // audio::mojom::PageHandlerFactory
   void CreatePageHandler(
       mojo::PendingRemote<audio::mojom::Page> page,
       mojo::PendingReceiver<audio::mojom::PageHandler> receiver) override;
diff --git a/chrome/browser/ui/webui/settings/chromeos/bluetooth_section.cc b/chrome/browser/ui/webui/settings/chromeos/bluetooth_section.cc
index 6846230..5dc3310 100644
--- a/chrome/browser/ui/webui/settings/chromeos/bluetooth_section.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/bluetooth_section.cc
@@ -192,6 +192,18 @@
       {"bluetoothNoDevicesFound", IDS_SETTINGS_BLUETOOTH_NO_DEVICES_FOUND},
       {"bluetoothNotConnected", IDS_SETTINGS_BLUETOOTH_NOT_CONNECTED},
       {"bluetoothPageTitle", IDS_SETTINGS_BLUETOOTH},
+      {"bluetoothSummaryPageConnectedA11yOneDevice",
+       IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_ONE_DEVICE},
+      {"bluetoothSummaryPageConnectedA11yTwoDevices",
+       IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_TWO_DEVICES},
+      {"bluetoothSummaryPageConnectedA11yTwoOrMoreDevices",
+       IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_CONNECTED_A11Y_TWO_OR_MORE_DEVICES},
+      {"bluetoothSummaryPageTwoOrMoreDevicesDescription",
+       IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_TWO_OR_MORE_DEVICES_DESCRIPTION},
+      {"bluetoothSummaryPageTwoDevicesDescription",
+       IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_TWO_DEVICES_DESCRIPTION},
+      {"bluetoothSummaryPageOff", IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_OFF},
+      {"bluetoothSummaryPageOn", IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_ON},
       {"bluetoothPairDevicePageTitle",
        IDS_SETTINGS_BLUETOOTH_PAIR_DEVICE_TITLE},
       {"bluetoothRemove", IDS_SETTINGS_BLUETOOTH_REMOVE},
diff --git a/chrome/browser/ui/webui/settings/chromeos/privacy_section.cc b/chrome/browser/ui/webui/settings/chromeos/privacy_section.cc
index f039aeb..135272c 100644
--- a/chrome/browser/ui/webui/settings/chromeos/privacy_section.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/privacy_section.cc
@@ -275,6 +275,7 @@
                           chromeos::features::IsPciguardUiEnabled());
 
   html_source->AddBoolean("showSecureDnsSetting", IsSecureDnsAvailable());
+  html_source->AddBoolean("showSecureDnsOsSettingLink", false);
 
   ::settings::AddPersonalizationOptionsStrings(html_source);
   ::settings::AddSecureDnsStrings(html_source);
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index 0c5fd2d..c773004a 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1343,117 +1343,124 @@
   AddSyncPageStrings(html_source);
 }
 
-bool IsSecureDnsAvailable() {
-  return
+bool ShouldLinkSecureDnsOsSettings() {
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-      (!base::FeatureList::IsEnabled(chromeos::features::kEnableDnsProxy) ||
-       !base::FeatureList::IsEnabled(::features::kDnsProxyEnableDOH)) &&
+  return base::FeatureList::IsEnabled(chromeos::features::kEnableDnsProxy) &&
+         base::FeatureList::IsEnabled(::features::kDnsProxyEnableDOH);
+#else
+  return false;
 #endif
-      features::kDnsOverHttpsShowUiParam.Get();
+}
+
+bool IsSecureDnsAvailable() {
+  return features::kDnsOverHttpsShowUiParam.Get();
 }
 
 void AddPrivacyStrings(content::WebUIDataSource* html_source,
                        Profile* profile) {
   static constexpr webui::LocalizedString kLocalizedStrings[] = {
-      {"privacyPageTitle", IDS_SETTINGS_PRIVACY},
-      {"privacyPageMore", IDS_SETTINGS_PRIVACY_MORE},
-      {"doNotTrack", IDS_SETTINGS_ENABLE_DO_NOT_TRACK},
-      {"doNotTrackDialogTitle", IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TITLE},
-      // TODO(crbug.com/1062607): This string is no longer used. Remove.
-      {"permissionsPageTitle", IDS_SETTINGS_PERMISSIONS},
-      {"permissionsPageDescription", IDS_SETTINGS_PERMISSIONS_DESCRIPTION},
-      {"securityPageTitle", IDS_SETTINGS_SECURITY},
-      {"securityPageDescription", IDS_SETTINGS_SECURITY_DESCRIPTION},
-      {"advancedProtectionProgramTitle",
-       IDS_SETTINGS_ADVANCED_PROTECTION_PROGRAM},
-      {"advancedProtectionProgramDesc",
-       IDS_SETTINGS_ADVANCED_PROTECTION_PROGRAM_DESC},
-      {"httpsOnlyModeTitle", IDS_SETTINGS_HTTPS_ONLY_MODE},
-      {"httpsOnlyModeDescription", IDS_SETTINGS_HTTPS_ONLY_MODE_DESCRIPTION},
-      {"manageCertificates", IDS_SETTINGS_MANAGE_CERTIFICATES},
-      {"manageCertificatesDescription",
-       IDS_SETTINGS_MANAGE_CERTIFICATES_DESCRIPTION},
-      {"contentSettings", IDS_SETTINGS_CONTENT_SETTINGS},
-      {"siteSettings", IDS_SETTINGS_SITE_SETTINGS},
-      {"siteSettingsDescription", IDS_SETTINGS_SITE_SETTINGS_DESCRIPTION},
-      {"clearData", IDS_SETTINGS_CLEAR_DATA},
-      {"clearingData", IDS_SETTINGS_CLEARING_DATA},
-      {"clearedData", IDS_SETTINGS_CLEARED_DATA},
-      {"clearBrowsingData", IDS_SETTINGS_CLEAR_BROWSING_DATA},
-      {"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION},
-      {"titleAndCount", IDS_SETTINGS_TITLE_AND_COUNT},
-      {"safeBrowsingEnableExtendedReporting",
-       IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING},
-      {"safeBrowsingEnableExtendedReportingDesc",
-       IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING_DESC},
-      {"safeBrowsingEnhanced", IDS_SETTINGS_SAFEBROWSING_ENHANCED},
-      {"safeBrowsingEnhancedDesc", IDS_SETTINGS_SAFEBROWSING_ENHANCED_DESC},
-      {"safeBrowsingEnhancedExpandA11yLabel",
-       IDS_SETTINGS_SAFEBROWSING_ENHANCED_EXPAND_ACCESSIBILITY_LABEL},
-      {"safeBrowsingEnhancedBulOne",
-       IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_ONE},
-      {"safeBrowsingEnhancedBulTwo",
-       IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_TWO},
-      {"safeBrowsingEnhancedBulThree",
-       IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_THREE},
-      {"safeBrowsingEnhancedBulFour",
-       IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_FOUR},
-      {"safeBrowsingEnhancedBulFive",
-       IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_FIVE},
-      {"safeBrowsingStandard", IDS_SETTINGS_SAFEBROWSING_STANDARD},
-      {"safeBrowsingStandardDesc", IDS_SETTINGS_SAFEBROWSING_STANDARD_DESC},
-      {"safeBrowsingStandardExpandA11yLabel",
-       IDS_SETTINGS_SAFEBROWSING_STANDARD_EXPAND_ACCESSIBILITY_LABEL},
-      {"safeBrowsingStandardBulOne",
-       IDS_SETTINGS_SAFEBROWSING_STANDARD_BULLET_ONE},
-      {"safeBrowsingStandardBulTwo",
-       IDS_SETTINGS_SAFEBROWSING_STANDARD_BULLET_TWO},
-      {"safeBrowsingStandardReportingLabel",
-       IDS_SETTINGS_SAFEBROWSING_STANDARD_HELP_IMPROVE},
-      {"safeBrowsingNone", IDS_SETTINGS_SAFEBROWSING_NONE},
-      {"safeBrowsingNoneDesc", IDS_SETTINGS_SAFEBROWSING_NONE_DESC},
-      {"safeBrowsingDisableDialog",
-       IDS_SETTINGS_SAFEBROWSING_DISABLE_DIALOG_TITLE},
-      {"safeBrowsingDisableDialogDesc",
-       IDS_SETTINGS_SAFEBROWSING_DISABLE_DIALOG_DESC},
-      {"safeBrowsingDisableDialogConfirm",
-       IDS_SETTINGS_SAFEBROWSING_DISABLE_DIALOG_CONFIRM},
-      {"safeBrowsingEnableProtection",
-       IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION},
-      {"safeBrowsingEnableProtectionDesc",
-       IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION_DESC},
-      {"safeBrowsingSectionLabel", IDS_SETTINGS_SAFEBROWSING_SECTION_LABEL},
-      {"syncAndGoogleServicesPrivacyDescription",
-       IDS_SETTINGS_SYNC_AND_GOOGLE_SERVICES_PRIVACY_DESC_UNIFIED_CONSENT},
-      {"urlKeyedAnonymizedDataCollection",
-       IDS_SETTINGS_ENABLE_URL_KEYED_ANONYMIZED_DATA_COLLECTION},
-      {"urlKeyedAnonymizedDataCollectionDesc",
-       IDS_SETTINGS_ENABLE_URL_KEYED_ANONYMIZED_DATA_COLLECTION_DESC},
-      {"noRecentPermissions", IDS_SETTINGS_RECENT_PERMISSIONS_NO_CHANGES},
-      {"recentPermissionAllowedOneItem",
-       IDS_SETTINGS_RECENT_PERMISSIONS_ALLOWED_ONE_ITEM},
-      {"recentPermissionAllowedTwoItems",
-       IDS_SETTINGS_RECENT_PERMISSIONS_ALLOWED_TWO_ITEMS},
-      {"recentPermissionAllowedMoreThanTwoItems",
-       IDS_SETTINGS_RECENT_PERMISSIONS_ALLOWED_MORE_THAN_TWO_ITEMS},
-      {"recentPermissionAutoBlockedOneItem",
-       IDS_SETTINGS_RECENT_PERMISSIONS_AUTOMATICALLY_BLOCKED_ONE_ITEM},
-      {"recentPermissionAutoBlockedTwoItems",
-       IDS_SETTINGS_RECENT_PERMISSIONS_AUTOMATICALLY_BLOCKED_TWO_ITEMS},
-      {"recentPermissionAutoBlockedMoreThanTwoItems",
-       IDS_SETTINGS_RECENT_PERMISSIONS_AUTOMATICALLY_BLOCKED_MORE_THAN_TWO_ITEMS},
-      {"recentPermissionBlockedOneItem",
-       IDS_SETTINGS_RECENT_PERMISSIONS_BLOCKED_ONE_ITEM},
-      {"recentPermissionBlockedTwoItems",
-       IDS_SETTINGS_RECENT_PERMISSIONS_BLOCKED_TWO_ITEMS},
-      {"recentPermissionBlockedMoreThanTwoItems",
-       IDS_SETTINGS_RECENT_PERMISSIONS_BLOCKED_MORE_THAN_TWO_ITEMS},
-      {"networkPredictionEnabled",
-       IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_LABEL},
-      {"networkPredictionEnabledDesc",
-       IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_DESC},
-      {"networkPredictionEnabledDescCookiesPage",
-       IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_DESC_COOKIES_PAGE},
+    {"privacyPageTitle", IDS_SETTINGS_PRIVACY},
+    {"privacyPageMore", IDS_SETTINGS_PRIVACY_MORE},
+    {"doNotTrack", IDS_SETTINGS_ENABLE_DO_NOT_TRACK},
+    {"doNotTrackDialogTitle", IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TITLE},
+    // TODO(crbug.com/1062607): This string is no longer used. Remove.
+    {"permissionsPageTitle", IDS_SETTINGS_PERMISSIONS},
+    {"permissionsPageDescription", IDS_SETTINGS_PERMISSIONS_DESCRIPTION},
+    {"securityPageTitle", IDS_SETTINGS_SECURITY},
+    {"securityPageDescription", IDS_SETTINGS_SECURITY_DESCRIPTION},
+    {"advancedProtectionProgramTitle",
+     IDS_SETTINGS_ADVANCED_PROTECTION_PROGRAM},
+    {"advancedProtectionProgramDesc",
+     IDS_SETTINGS_ADVANCED_PROTECTION_PROGRAM_DESC},
+    {"httpsOnlyModeTitle", IDS_SETTINGS_HTTPS_ONLY_MODE},
+    {"httpsOnlyModeDescription", IDS_SETTINGS_HTTPS_ONLY_MODE_DESCRIPTION},
+    {"manageCertificates", IDS_SETTINGS_MANAGE_CERTIFICATES},
+    {"manageCertificatesDescription",
+     IDS_SETTINGS_MANAGE_CERTIFICATES_DESCRIPTION},
+    {"contentSettings", IDS_SETTINGS_CONTENT_SETTINGS},
+    {"siteSettings", IDS_SETTINGS_SITE_SETTINGS},
+    {"siteSettingsDescription", IDS_SETTINGS_SITE_SETTINGS_DESCRIPTION},
+    {"clearData", IDS_SETTINGS_CLEAR_DATA},
+    {"clearingData", IDS_SETTINGS_CLEARING_DATA},
+    {"clearedData", IDS_SETTINGS_CLEARED_DATA},
+    {"clearBrowsingData", IDS_SETTINGS_CLEAR_BROWSING_DATA},
+    {"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION},
+    {"titleAndCount", IDS_SETTINGS_TITLE_AND_COUNT},
+    {"safeBrowsingEnableExtendedReporting",
+     IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING},
+    {"safeBrowsingEnableExtendedReportingDesc",
+     IDS_SETTINGS_SAFEBROWSING_ENABLE_REPORTING_DESC},
+    {"safeBrowsingEnhanced", IDS_SETTINGS_SAFEBROWSING_ENHANCED},
+    {"safeBrowsingEnhancedDesc", IDS_SETTINGS_SAFEBROWSING_ENHANCED_DESC},
+    {"safeBrowsingEnhancedExpandA11yLabel",
+     IDS_SETTINGS_SAFEBROWSING_ENHANCED_EXPAND_ACCESSIBILITY_LABEL},
+    {"safeBrowsingEnhancedBulOne",
+     IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_ONE},
+    {"safeBrowsingEnhancedBulTwo",
+     IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_TWO},
+    {"safeBrowsingEnhancedBulThree",
+     IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_THREE},
+    {"safeBrowsingEnhancedBulFour",
+     IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_FOUR},
+    {"safeBrowsingEnhancedBulFive",
+     IDS_SETTINGS_SAFEBROWSING_ENHANCED_BULLET_FIVE},
+    {"safeBrowsingStandard", IDS_SETTINGS_SAFEBROWSING_STANDARD},
+    {"safeBrowsingStandardDesc", IDS_SETTINGS_SAFEBROWSING_STANDARD_DESC},
+    {"safeBrowsingStandardExpandA11yLabel",
+     IDS_SETTINGS_SAFEBROWSING_STANDARD_EXPAND_ACCESSIBILITY_LABEL},
+    {"safeBrowsingStandardBulOne",
+     IDS_SETTINGS_SAFEBROWSING_STANDARD_BULLET_ONE},
+    {"safeBrowsingStandardBulTwo",
+     IDS_SETTINGS_SAFEBROWSING_STANDARD_BULLET_TWO},
+    {"safeBrowsingStandardReportingLabel",
+     IDS_SETTINGS_SAFEBROWSING_STANDARD_HELP_IMPROVE},
+    {"safeBrowsingNone", IDS_SETTINGS_SAFEBROWSING_NONE},
+    {"safeBrowsingNoneDesc", IDS_SETTINGS_SAFEBROWSING_NONE_DESC},
+    {"safeBrowsingDisableDialog",
+     IDS_SETTINGS_SAFEBROWSING_DISABLE_DIALOG_TITLE},
+    {"safeBrowsingDisableDialogDesc",
+     IDS_SETTINGS_SAFEBROWSING_DISABLE_DIALOG_DESC},
+    {"safeBrowsingDisableDialogConfirm",
+     IDS_SETTINGS_SAFEBROWSING_DISABLE_DIALOG_CONFIRM},
+    {"safeBrowsingEnableProtection",
+     IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION},
+    {"safeBrowsingEnableProtectionDesc",
+     IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION_DESC},
+    {"safeBrowsingSectionLabel", IDS_SETTINGS_SAFEBROWSING_SECTION_LABEL},
+    {"syncAndGoogleServicesPrivacyDescription",
+     IDS_SETTINGS_SYNC_AND_GOOGLE_SERVICES_PRIVACY_DESC_UNIFIED_CONSENT},
+    {"urlKeyedAnonymizedDataCollection",
+     IDS_SETTINGS_ENABLE_URL_KEYED_ANONYMIZED_DATA_COLLECTION},
+    {"urlKeyedAnonymizedDataCollectionDesc",
+     IDS_SETTINGS_ENABLE_URL_KEYED_ANONYMIZED_DATA_COLLECTION_DESC},
+    {"noRecentPermissions", IDS_SETTINGS_RECENT_PERMISSIONS_NO_CHANGES},
+    {"recentPermissionAllowedOneItem",
+     IDS_SETTINGS_RECENT_PERMISSIONS_ALLOWED_ONE_ITEM},
+    {"recentPermissionAllowedTwoItems",
+     IDS_SETTINGS_RECENT_PERMISSIONS_ALLOWED_TWO_ITEMS},
+    {"recentPermissionAllowedMoreThanTwoItems",
+     IDS_SETTINGS_RECENT_PERMISSIONS_ALLOWED_MORE_THAN_TWO_ITEMS},
+    {"recentPermissionAutoBlockedOneItem",
+     IDS_SETTINGS_RECENT_PERMISSIONS_AUTOMATICALLY_BLOCKED_ONE_ITEM},
+    {"recentPermissionAutoBlockedTwoItems",
+     IDS_SETTINGS_RECENT_PERMISSIONS_AUTOMATICALLY_BLOCKED_TWO_ITEMS},
+    {"recentPermissionAutoBlockedMoreThanTwoItems",
+     IDS_SETTINGS_RECENT_PERMISSIONS_AUTOMATICALLY_BLOCKED_MORE_THAN_TWO_ITEMS},
+    {"recentPermissionBlockedOneItem",
+     IDS_SETTINGS_RECENT_PERMISSIONS_BLOCKED_ONE_ITEM},
+    {"recentPermissionBlockedTwoItems",
+     IDS_SETTINGS_RECENT_PERMISSIONS_BLOCKED_TWO_ITEMS},
+    {"recentPermissionBlockedMoreThanTwoItems",
+     IDS_SETTINGS_RECENT_PERMISSIONS_BLOCKED_MORE_THAN_TWO_ITEMS},
+    {"networkPredictionEnabled", IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_LABEL},
+    {"networkPredictionEnabledDesc",
+     IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_DESC},
+    {"networkPredictionEnabledDescCookiesPage",
+     IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_DESC_COOKIES_PAGE},
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+    {"openChromeOSSecureDnsSettingsLabel",
+     IDS_SETTINGS_SECURE_DNS_OPEN_CHROME_OS_SETTINGS_LABEL},
+#endif
   };
   html_source->AddLocalizedStrings(kLocalizedStrings);
 
@@ -1481,7 +1488,17 @@
       "driveSuggestAvailable",
       base::FeatureList::IsEnabled(omnibox::kDocumentProvider));
 
-  html_source->AddBoolean("showSecureDnsSetting", IsSecureDnsAvailable());
+  bool show_secure_dns = IsSecureDnsAvailable();
+  bool link_secure_dns = ShouldLinkSecureDnsOsSettings();
+  html_source->AddBoolean("showSecureDnsSetting",
+                          show_secure_dns && !link_secure_dns);
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  html_source->AddBoolean("showSecureDnsSettingLink",
+                          show_secure_dns && link_secure_dns);
+  html_source->AddString(
+      "chromeOSPrivacyAndSecuritySectionPath",
+      chromeos::settings::mojom::kPrivacyAndSecuritySectionPath);
+#endif
 
   html_source->AddBoolean(
       "showHttpsOnlyModeSetting",
diff --git a/chrome/browser/web_applications/components/web_app_constants.h b/chrome/browser/web_applications/components/web_app_constants.h
index 0cb59da..0acd2d1 100644
--- a/chrome/browser/web_applications/components/web_app_constants.h
+++ b/chrome/browser/web_applications/components/web_app_constants.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "components/services/app_service/public/mojom/types.mojom-forward.h"
+#include "third_party/blink/public/common/manifest/manifest.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
 
 namespace web_app {
@@ -211,14 +212,17 @@
 
 // The operation mode for Run on OS Login.
 enum class RunOnOsLoginMode {
+  kMinValue = 0,
+
   // kNotRun: The web app will not run during OS login.
-  kNotRun = 0,
+  kNotRun = kMinValue,
   // kWindowed: The web app will run during OS login and will be launched as
   // normal window. This is also the default launch mode for web apps.
   kWindowed = 1,
   // kMinimized: The web app will run during OS login and will be launched as a
   // minimized window.
   kMinimized = 2,
+  kMaxValue = kMinimized,
 };
 
 // Command line parameter representing RunOnOsLoginMode::kWindowed.
@@ -276,6 +280,8 @@
   kNoUpdate = 2,
 };
 
+using LaunchHandler = blink::Manifest::LaunchHandler;
+
 }  // namespace web_app
 
 #endif  // CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_CONSTANTS_H_
diff --git a/chrome/browser/web_applications/proto/BUILD.gn b/chrome/browser/web_applications/proto/BUILD.gn
index f9ba942..82965c8 100644
--- a/chrome/browser/web_applications/proto/BUILD.gn
+++ b/chrome/browser/web_applications/proto/BUILD.gn
@@ -8,6 +8,7 @@
   proto_in_dir = "//"
   sources = [
     "web_app.proto",
+    "web_app_launch_handler.proto",
     "web_app_share_target.proto",
   ]
   link_deps = [
diff --git a/chrome/browser/web_applications/proto/web_app.proto b/chrome/browser/web_applications/proto/web_app.proto
index 932c709..91d1e269 100644
--- a/chrome/browser/web_applications/proto/web_app.proto
+++ b/chrome/browser/web_applications/proto/web_app.proto
@@ -5,6 +5,7 @@
 syntax = "proto2";
 
 import "components/sync/protocol/web_app_specifics.proto";
+import "chrome/browser/web_applications/proto/web_app_launch_handler.proto";
 import "chrome/browser/web_applications/proto/web_app_share_target.proto";
 import "chrome/browser/web_applications/system_web_apps/system_web_app_data.proto";
 
@@ -222,4 +223,6 @@
   // url. This list is checked to see if we can bypass the permission dialog
   // when launching the web app.
   repeated string approved_launch_protocols = 37;
+
+  optional LaunchHandlerProto launch_handler = 38;
 }
diff --git a/chrome/browser/web_applications/proto/web_app_launch_handler.proto b/chrome/browser/web_applications/proto/web_app_launch_handler.proto
new file mode 100644
index 0000000..425f27f8
--- /dev/null
+++ b/chrome/browser/web_applications/proto/web_app_launch_handler.proto
@@ -0,0 +1,30 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+syntax = "proto2";
+
+option optimize_for = LITE_RUNTIME;
+
+package web_app;
+
+// A proto representing the "launch_handler" manifest field.
+// This mirrors ManifestLaunchHandler in:
+// third_party/blink/public/mojom/manifest/manifest.mojom
+message LaunchHandlerProto {
+  enum RouteTo {
+    UNSPECIFIED_ROUTE = 0;
+    AUTO = 1;
+    NEW_CLIENT = 2;
+    EXISTING_CLIENT = 3;
+  }
+
+  enum NavigateExistingClient {
+    UNSPECIFIED_NAVIGATE = 0;
+    ALWAYS = 1;
+    NEVER = 2;
+  }
+
+  optional RouteTo route_to = 1;
+  optional NavigateExistingClient navigate_existing_client = 2;
+}
diff --git a/chrome/browser/web_applications/test/web_app_test_utils.cc b/chrome/browser/web_applications/test/web_app_test_utils.cc
index b4c9eee..e593493 100644
--- a/chrome/browser/web_applications/test/web_app_test_utils.cc
+++ b/chrome/browser/web_applications/test/web_app_test_utils.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/web_applications/components/web_app_utils.h"
 #include "chrome/browser/web_applications/components/web_application_info.h"
 #include "components/services/app_service/public/cpp/url_handler_info.h"
+#include "third_party/blink/public/common/manifest/manifest.h"
 #include "url/gurl.h"
 
 namespace web_app {
@@ -33,6 +34,14 @@
 
   bool next_bool() { return next_uint() & 1u; }
 
+  template <typename T>
+  T next_enum() {
+    constexpr uint32_t min = static_cast<uint32_t>(T::kMinValue);
+    constexpr uint32_t max = static_cast<uint32_t>(T::kMaxValue);
+    static_assert(min <= max, "min cannot be greater than max");
+    return static_cast<T>(min + next_uint(max - min));
+  }
+
  private:
   std::default_random_engine generator_;
   std::uniform_int_distribution<uint32_t> distribution_;
@@ -129,11 +138,6 @@
   return url_handlers;
 }
 
-blink::mojom::CaptureLinks CreateRandomCaptureLinks(uint32_t suffix) {
-  return static_cast<blink::mojom::CaptureLinks>(
-      suffix % static_cast<uint32_t>(blink::mojom::CaptureLinks::kMaxValue));
-}
-
 std::vector<WebApplicationShortcutsMenuItemInfo>
 CreateRandomShortcutsMenuItemInfos(const GURL& scope, RandomHelper& random) {
   const uint32_t suffix = random.next_uint();
@@ -302,10 +306,7 @@
   if (random.next_bool())
     app->SetLaunchQueryParams(base::NumberToString(random.next_uint()));
 
-  const RunOnOsLoginMode run_on_os_login_modes[3] = {
-      RunOnOsLoginMode::kNotRun, RunOnOsLoginMode::kWindowed,
-      RunOnOsLoginMode::kMinimized};
-  app->SetRunOnOsLoginMode(run_on_os_login_modes[random.next_uint(3)]);
+  app->SetRunOnOsLoginMode(random.next_enum<RunOnOsLoginMode>());
 
   const SquareSizePx size = 256;
   const int num_icons = random.next_uint(10);
@@ -346,7 +347,7 @@
     app->SetNoteTakingNewNoteUrl(
         scope.Resolve("new_note" + base::NumberToString(random.next_uint())));
   }
-  app->SetCaptureLinks(CreateRandomCaptureLinks(random.next_uint()));
+  app->SetCaptureLinks(random.next_enum<blink::mojom::CaptureLinks>());
 
   const int num_additional_search_terms = random.next_uint(8);
   std::vector<std::string> additional_search_terms(num_additional_search_terms);
@@ -373,6 +374,25 @@
 
   app->SetStorageIsolated(random.next_bool());
 
+  app->SetFileHandlerPermissionBlocked(false);
+
+  app->SetWindowControlsOverlayEnabled(false);
+
+  WebApp::SyncFallbackData sync_fallback_data;
+  sync_fallback_data.name = "Sync" + name;
+  sync_fallback_data.theme_color = synced_theme_color;
+  sync_fallback_data.scope = app->scope();
+  sync_fallback_data.icon_infos = app->icon_infos();
+  app->SetSyncFallbackData(std::move(sync_fallback_data));
+
+  if (random.next_bool()) {
+    LaunchHandler launch_handler;
+    launch_handler.route_to = random.next_enum<LaunchHandler::RouteTo>();
+    launch_handler.navigate_existing_client =
+        random.next_enum<LaunchHandler::NavigateExistingClient>();
+    app->SetLaunchHandler(launch_handler);
+  }
+
   // `random` should not be used after the chromeos block if the result
   // is expected to be deterministic across cros and non-cros builds.
   if (IsChromeOsDataMandatory()) {
@@ -385,17 +405,6 @@
     app->SetWebAppChromeOsData(std::move(chromeos_data));
   }
 
-  app->SetFileHandlerPermissionBlocked(false);
-
-  app->SetWindowControlsOverlayEnabled(false);
-
-  WebApp::SyncFallbackData sync_fallback_data;
-  sync_fallback_data.name = "Sync" + name;
-  sync_fallback_data.theme_color = synced_theme_color;
-  sync_fallback_data.scope = app->scope();
-  sync_fallback_data.icon_infos = app->icon_infos();
-  app->SetSyncFallbackData(std::move(sync_fallback_data));
-
   return app;
 }
 
diff --git a/chrome/browser/web_applications/web_app.cc b/chrome/browser/web_applications/web_app.cc
index 57f290d..fb6400c 100644
--- a/chrome/browser/web_applications/web_app.cc
+++ b/chrome/browser/web_applications/web_app.cc
@@ -19,6 +19,7 @@
 #include "chrome/browser/web_applications/components/web_app_utils.h"
 #include "components/sync/base/time.h"
 #include "third_party/blink/public/common/manifest/manifest_util.h"
+#include "third_party/blink/public/mojom/manifest/manifest.mojom.h"
 #include "ui/gfx/color_utils.h"
 
 namespace {
@@ -319,6 +320,10 @@
   is_storage_isolated_ = is_storage_isolated;
 }
 
+void WebApp::SetLaunchHandler(absl::optional<LaunchHandler> launch_handler) {
+  launch_handler_ = std::move(launch_handler);
+}
+
 WebApp::ClientData::ClientData() = default;
 
 WebApp::ClientData::~ClientData() = default;
@@ -404,7 +409,8 @@
         app.client_data_.system_web_app_data,
         app.file_handler_permission_blocked_,
         app.window_controls_overlay_enabled_,
-        app.is_storage_isolated_
+        app.is_storage_isolated_,
+        app.launch_handler_
         // clang-format on
     );
   };
@@ -518,6 +524,18 @@
 
   root.SetStringKey("last_launch_time", ConvertToString(last_launch_time_));
 
+  if (launch_handler_) {
+    base::Value& launch_handler_json = *root.SetKey(
+        "launch_handler", base::Value(base::Value::Type::DICTIONARY));
+    launch_handler_json.SetStringKey(
+        "route_to", ConvertToString(launch_handler_->route_to));
+    launch_handler_json.SetStringKey(
+        "navigate_existing_client",
+        ConvertToString(launch_handler_->navigate_existing_client));
+  } else {
+    root.SetKey("launch_handler", base::Value());
+  }
+
   root.SetKey("launch_query_params", ConvertOptional(launch_query_params_));
 
   root.SetKey("manifest_id", ConvertOptional(manifest_id_));
diff --git a/chrome/browser/web_applications/web_app.h b/chrome/browser/web_applications/web_app.h
index 970148d..3b6802c 100644
--- a/chrome/browser/web_applications/web_app.h
+++ b/chrome/browser/web_applications/web_app.h
@@ -211,6 +211,10 @@
 
   bool IsStorageIsolated() const { return is_storage_isolated_; }
 
+  const absl::optional<LaunchHandler>& launch_handler() const {
+    return launch_handler_;
+  }
+
   // A Web App can be installed from multiple sources simultaneously. Installs
   // add a source to the app. Uninstalls remove a source from the app.
   void AddSource(Source::Type source);
@@ -274,6 +278,7 @@
   void SetFileHandlerPermissionBlocked(bool permission_blocked);
   void SetWindowControlsOverlayEnabled(bool enabled);
   void SetStorageIsolated(bool is_storage_isolated);
+  void SetLaunchHandler(absl::optional<LaunchHandler> launch_handler);
 
   // For logging and debug purposes.
   bool operator==(const WebApp&) const;
@@ -339,6 +344,7 @@
   bool file_handler_permission_blocked_ = false;
   bool window_controls_overlay_enabled_ = false;
   bool is_storage_isolated_ = false;
+  absl::optional<LaunchHandler> launch_handler_;
   // New fields must be added to:
   //  - |operator==|
   //  - AsDebugValue()
diff --git a/chrome/browser/web_applications/web_app_database.cc b/chrome/browser/web_applications/web_app_database.cc
index d1b346fd..2efcedf 100644
--- a/chrome/browser/web_applications/web_app_database.cc
+++ b/chrome/browser/web_applications/web_app_database.cc
@@ -30,7 +30,9 @@
 #include "components/sync/model/metadata_batch.h"
 #include "components/sync/model/metadata_change_list.h"
 #include "components/sync/model/model_error.h"
+#include "third_party/blink/public/common/manifest/manifest.h"
 #include "third_party/blink/public/mojom/manifest/capture_links.mojom.h"
+#include "third_party/blink/public/mojom/manifest/manifest.mojom.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
@@ -101,6 +103,55 @@
   }
 }
 
+LaunchHandler::RouteTo ProtoToLaunchHandlerRouteTo(
+    const LaunchHandlerProto::RouteTo& route_to) {
+  switch (route_to) {
+    case LaunchHandlerProto_RouteTo_UNSPECIFIED_ROUTE:
+    case LaunchHandlerProto_RouteTo_AUTO:
+      return LaunchHandler::RouteTo::kAuto;
+    case LaunchHandlerProto_RouteTo_NEW_CLIENT:
+      return LaunchHandler::RouteTo::kNewClient;
+    case LaunchHandlerProto_RouteTo_EXISTING_CLIENT:
+      return LaunchHandler::RouteTo::kExistingClient;
+  }
+}
+
+LaunchHandlerProto::RouteTo LaunchHandlerRouteToToProto(
+    const LaunchHandler::RouteTo& route_to) {
+  switch (route_to) {
+    case LaunchHandler::RouteTo::kAuto:
+      return LaunchHandlerProto_RouteTo_AUTO;
+    case LaunchHandler::RouteTo::kNewClient:
+      return LaunchHandlerProto_RouteTo_NEW_CLIENT;
+    case LaunchHandler::RouteTo::kExistingClient:
+      return LaunchHandlerProto_RouteTo_EXISTING_CLIENT;
+  }
+}
+
+LaunchHandler::NavigateExistingClient
+ProtoToLaunchHandlerNavigateExistingClient(
+    const LaunchHandlerProto::NavigateExistingClient&
+        navigate_existing_client) {
+  switch (navigate_existing_client) {
+    case LaunchHandlerProto_NavigateExistingClient_UNSPECIFIED_NAVIGATE:
+    case LaunchHandlerProto_NavigateExistingClient_ALWAYS:
+      return LaunchHandler::NavigateExistingClient::kAlways;
+    case LaunchHandlerProto_NavigateExistingClient_NEVER:
+      return LaunchHandler::NavigateExistingClient::kNever;
+  }
+}
+
+LaunchHandlerProto::NavigateExistingClient
+LaunchHandlerNavigateExistingClientToProto(
+    const LaunchHandler::NavigateExistingClient& navigate_existing_client) {
+  switch (navigate_existing_client) {
+    case LaunchHandler::NavigateExistingClient::kAlways:
+      return LaunchHandlerProto_NavigateExistingClient_ALWAYS;
+    case LaunchHandler::NavigateExistingClient::kNever:
+      return LaunchHandlerProto_NavigateExistingClient_NEVER;
+  }
+}
+
 }  // anonymous namespace
 
 WebAppDatabase::WebAppDatabase(AbstractWebAppDatabaseFactory* database_factory,
@@ -401,6 +452,17 @@
       web_app.window_controls_overlay_enabled());
 
   local_data->set_is_storage_isolated(web_app.IsStorageIsolated());
+
+  if (web_app.launch_handler()) {
+    LaunchHandlerProto& launch_handler_proto =
+        *local_data->mutable_launch_handler();
+    launch_handler_proto.set_route_to(
+        LaunchHandlerRouteToToProto(web_app.launch_handler()->route_to));
+    launch_handler_proto.set_navigate_existing_client(
+        LaunchHandlerNavigateExistingClientToProto(
+            web_app.launch_handler()->navigate_existing_client));
+  }
+
   return local_data;
 }
 
@@ -823,7 +885,25 @@
     web_app->SetWindowControlsOverlayEnabled(
         local_data.window_controls_overlay_enabled());
   }
+
   web_app->SetStorageIsolated(local_data.is_storage_isolated());
+
+  if (local_data.has_launch_handler()) {
+    LaunchHandler launch_handler;
+    const LaunchHandlerProto& launch_handler_proto =
+        local_data.launch_handler();
+    if (launch_handler_proto.has_route_to()) {
+      launch_handler.route_to =
+          ProtoToLaunchHandlerRouteTo(launch_handler_proto.route_to());
+    }
+    if (launch_handler_proto.has_navigate_existing_client()) {
+      launch_handler.navigate_existing_client =
+          ProtoToLaunchHandlerNavigateExistingClient(
+              launch_handler_proto.navigate_existing_client());
+    }
+    web_app->SetLaunchHandler(std::move(launch_handler));
+  }
+
   return web_app;
 }
 
diff --git a/chrome/browser/web_applications/web_app_unittest.cc b/chrome/browser/web_applications/web_app_unittest.cc
index bb0653f7..b64ccb7 100644
--- a/chrome/browser/web_applications/web_app_unittest.cc
+++ b/chrome/browser/web_applications/web_app_unittest.cc
@@ -182,6 +182,7 @@
    "is_uninstalling": false,
    "last_badging_time": "1601-01-01 00:00:00.000 UTC",
    "last_launch_time": "1601-01-01 00:00:00.000 UTC",
+   "launch_handler": null,
    "launch_query_params": null,
    "manifest_id": null,
    "manifest_url": "",
@@ -305,13 +306,17 @@
       "url": "https://example.com/icon3011162902"
    } ],
    "install_time": "1970-01-09 06:11:52.363 UTC",
-   "is_generated_icon": false,
    "is_from_sync_and_pending_installation": false,
+   "is_generated_icon": false,
    "is_locally_installed": true,
    "is_storage_isolated": false,
    "is_uninstalling": false,
    "last_badging_time": "1970-01-12 14:48:29.918 UTC",
    "last_launch_time": "1970-01-02 16:03:30.110 UTC",
+   "launch_handler": {
+      "navigate_existing_client": "kAlways",
+      "route_to": "kNewClient"
+   },
    "launch_query_params": "3248422070",
    "manifest_id": null,
    "manifest_url": "https://example.com/manifest1234.json",
@@ -332,7 +337,7 @@
       "protocol": "web+test244307314",
       "url": "https://example.com/244307314"
    } ],
-   "run_on_os_login_mode": "minimized",
+   "run_on_os_login_mode": "windowed",
    "scope": "https://example.com/scope1234/",
    "share_target": null,
    "shortcuts_menu_item_infos": [ {
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
index 415537cb..7f54ebf 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
@@ -53,7 +53,12 @@
     }
 
     public AccountManagerTestRule(@NonNull FakeAccountInfoService fakeAccountInfoService) {
-        mFakeAccountManagerFacade = new FakeAccountManagerFacade();
+        this(new FakeAccountManagerFacade(), fakeAccountInfoService);
+    }
+
+    public AccountManagerTestRule(@NonNull FakeAccountManagerFacade fakeAccountManagerFacade,
+            @NonNull FakeAccountInfoService fakeAccountInfoService) {
+        mFakeAccountManagerFacade = fakeAccountManagerFacade;
         mFakeAccountInfoService = fakeAccountInfoService;
     }
 
diff --git a/chrome/test/data/webui/settings/chromeos/fake_bluetooth_config.js b/chrome/test/data/webui/settings/chromeos/fake_bluetooth_config.js
index c363697..e5d5c5bb 100644
--- a/chrome/test/data/webui/settings/chromeos/fake_bluetooth_config.js
+++ b/chrome/test/data/webui/settings/chromeos/fake_bluetooth_config.js
@@ -5,6 +5,7 @@
 // TODO(crbug.com/1010321): Use cros_bluetooth_config.mojom-webui.js instead
 // as non-module JS is deprecated.
 import 'chrome://resources/mojo/chromeos/services/bluetooth_config/public/mojom/cros_bluetooth_config.mojom-lite.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
 
 /**
  * @fileoverview Fake implementation of CrosBluetoothConfig for testing.
@@ -98,10 +99,45 @@
   }
 
   /**
+   * Adds a list of devices to the current list of paired devices in
+   * |systemProperties|.
+   * @param {Array<?chromeos.bluetoothConfig.mojom.PairedBluetoothDeviceProperties>}
+   *     devices
+   */
+  appendToPairedDeviceList(devices) {
+    if (devices.length === 0) {
+      return;
+    }
+
+    this.systemProperties_.pairedDevices =
+        this.systemProperties_.pairedDevices.concat(devices);
+    this.notifyObserversPropertiesUpdated_();
+  }
+
+  /**
+   * Removes a |device| from the list of paired devices in |systemProperties|.
+   * @param {chromeos.bluetoothConfig.mojom.PairedBluetoothDeviceProperties}
+   *     device
+   */
+  removePairedDevice(device) {
+    const foundDeviceIndex = this.systemProperties_.pairedDevices.findIndex(
+        pairedDevice =>
+            pairedDevice.deviceProperties.id === device.deviceProperties.id);
+
+    assert(
+        foundDeviceIndex !== -1, `Device with id: ${device.deviceProperties.id}
+            was not found.`);
+
+    this.systemProperties_.pairedDevices.splice(foundDeviceIndex, 1);
+    this.notifyObserversPropertiesUpdated_();
+  }
+
+  /**
    * @private
    * Notifies the observer list that systemProperties_ has changed.
    */
   notifyObserversPropertiesUpdated_() {
-    this.observers_.forEach(o => o.onPropertiesUpdated(this.systemProperties_));
+    this.observers_.forEach(
+        o => o.onPropertiesUpdated({...this.systemProperties_}));
   }
 }
\ No newline at end of file
diff --git a/chrome/test/data/webui/settings/chromeos/os_bluetooth_summary_tests.js b/chrome/test/data/webui/settings/chromeos/os_bluetooth_summary_tests.js
index 0e4c63d..57a03fb 100644
--- a/chrome/test/data/webui/settings/chromeos/os_bluetooth_summary_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/os_bluetooth_summary_tests.js
@@ -12,6 +12,7 @@
 // #import {assertTrue} from '../../../chai_assert.js';
 // #import {FakeBluetoothConfig} from './fake_bluetooth_config.m.js';
 // #import {setBluetoothConfigForTesting} from 'chrome://resources/cr_components/chromeos/bluetooth/cros_bluetooth_config.js';
+// #import {stringToMojoString16, mojoString16ToString} from 'chrome://resources/cr_components/chromeos/bluetooth/bluetooth_utils.js';
 // clang-format on
 
 suite('OsBluetoothSummaryTest', function() {
@@ -26,7 +27,12 @@
    */
   let propertiesObserver;
 
+  /** @type {!chromeos.bluetoothConfig.mojom} */
+  let mojom;
+
   setup(function() {
+    mojom = chromeos.bluetoothConfig.mojom;
+
     bluetoothConfig = new FakeBluetoothConfig();
     setBluetoothConfigForTesting(bluetoothConfig);
     bluetoothSummary = document.createElement('os-settings-bluetooth-summary');
@@ -52,7 +58,9 @@
   }
 
   test('Route to Bluetooth devices subpage', async function() {
-    const iconButton = bluetoothSummary.$$('#iconButton');
+    bluetoothConfig.setBluetoothEnabledState(/*enabled=*/ true);
+    await flushAsync();
+    const iconButton = bluetoothSummary.$$('#arrowIconButton');
     assertTrue(!!iconButton);
     iconButton.click();
 
@@ -101,4 +109,108 @@
     await flushAsync();
     assertTrue(enableBluetoothToggle.disabled);
   });
+
+  test('UI states test', async function() {
+    // Simulate device state is disabled.
+    const bluetoothSecondaryLabel =
+        bluetoothSummary.$$('#bluetoothSecondaryLabel');
+    const getBluetoothArrowIconBtn = () =>
+        bluetoothSummary.$$('#arrowIconButton');
+    const getBluetoothStatusIcon = () => bluetoothSummary.$$('#statusIcon');
+
+    assertFalse(!!getBluetoothArrowIconBtn());
+    assertTrue(!!getBluetoothStatusIcon());
+    assertTrue(!!bluetoothSecondaryLabel);
+    let label = bluetoothSecondaryLabel.textContent.trim();
+
+    assertEquals(bluetoothSummary.i18n('bluetoothSummaryPageOff'), label);
+    assertEquals(
+        'os-settings:bluetooth-disabled', getBluetoothStatusIcon().icon);
+
+    bluetoothConfig.setBluetoothEnabledState(/*enabled=*/ true);
+    await flushAsync();
+
+    assertTrue(!!getBluetoothArrowIconBtn());
+    // Bluetooth Icon should be default because no devices are connected.
+    assertEquals('cr:bluetooth', getBluetoothStatusIcon().icon);
+
+    const device1 = {
+      deviceProperties: {
+        id: '123456789',
+        publicName: stringToMojoString16('BeatsX'),
+        deviceType: mojom.DeviceType.kComputer,
+        audioCapability: mojom.AudioOutputCapability.kNotCapableOfAudio,
+        connectionState: mojom.DeviceConnectionState.kConnected,
+      },
+      nickname: 'device1'
+    };
+
+    const device2 = {
+      deviceProperties: {
+        id: '987654321',
+        publicName: stringToMojoString16('MX master 3'),
+        deviceType: mojom.DeviceType.kComputer,
+        audioCapability: mojom.AudioOutputCapability.kNotCapableOfAudio,
+        connectionState: mojom.DeviceConnectionState.kConnected,
+      },
+    };
+
+    const device3 = {
+      deviceProperties: {
+        id: '456789',
+        publicName: stringToMojoString16('Radio head'),
+        deviceType: mojom.DeviceType.kMouse,
+        audioCapability: mojom.AudioOutputCapability.kNotCapableOfAudio,
+        connectionState: mojom.DeviceConnectionState.kConnected,
+      },
+      nickname: 'device3'
+    };
+
+    const mockPairedBluetoothDeviceProperties = [
+      device1,
+      device2,
+      device3,
+    ];
+
+    // Simulate 3 connected devices.
+    bluetoothConfig.appendToPairedDeviceList(
+        mockPairedBluetoothDeviceProperties);
+    await flushAsync();
+
+    assertEquals(
+        'os-settings:bluetooth-connected', getBluetoothStatusIcon().icon);
+
+    label = bluetoothSecondaryLabel.textContent.trim();
+    assertEquals(
+        bluetoothSummary.i18n(
+            'bluetoothSummaryPageTwoOrMoreDevicesDescription', device1.nickname,
+            mockPairedBluetoothDeviceProperties.length - 1),
+        label);
+
+    // Simulate 2 connected devices.
+    bluetoothConfig.removePairedDevice(device3);
+    await flushAsync();
+
+    label = bluetoothSecondaryLabel.textContent.trim();
+    assertEquals(
+        bluetoothSummary.i18n(
+            'bluetoothSummaryPageTwoDevicesDescription', device1.nickname,
+            mojoString16ToString(device2.deviceProperties.publicName)),
+        label);
+
+    // Simulate a single connected device.
+    bluetoothConfig.removePairedDevice(device2);
+    await flushAsync();
+
+    label = bluetoothSecondaryLabel.textContent.trim();
+    assertEquals(device1.nickname, label);
+
+    /// Simulate no connected device.
+    bluetoothConfig.removePairedDevice(device1);
+    await flushAsync();
+
+    label = bluetoothSecondaryLabel.textContent.trim();
+    assertEquals(bluetoothSummary.i18n('bluetoothSummaryPageOn'), label);
+    assertEquals('cr:bluetooth', getBluetoothStatusIcon().icon);
+  });
 });
\ No newline at end of file
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera/video_encoder_options.js b/chromeos/components/camera_app_ui/resources/js/views/camera/video_encoder_options.js
index 87ff81e..fae1060 100644
--- a/chromeos/components/camera_app_ui/resources/js/views/camera/video_encoder_options.js
+++ b/chromeos/components/camera_app_ui/resources/js/views/camera/video_encoder_options.js
@@ -175,9 +175,10 @@
     // bitrate with multiplier 2. Limits multiplier up to 15 for confining
     // result video size.
     const max = Math.min(Math.floor(maxBitrate / resolution.area), 15);
-    this.bitrateMultiplierInput_.max = max;
+    this.bitrateMultiplierInput_.max = max.toString();
     this.bitrateMultiplierInput_.value =
-        this.bitrateMultiplierInput_.valueAsNumber || Math.min(max, 2);
+        (this.bitrateMultiplierInput_.valueAsNumber || Math.min(max, 2))
+            .toString();
     this.updateBitrate_();
     this.bitrateSlider_.hidden = false;
   }
@@ -200,7 +201,7 @@
     for (const profile of Object.values(h264.Profile)) {
       const tpl = util.instantiateTemplate('#video-profile-option-template');
       const option = dom.getFrom(tpl, 'option', HTMLOptionElement);
-      option.value = profile;
+      option.value = profile.toString();
       option.textContent = h264.getProfileName(profile);
       this.videoProfile_.appendChild(option);
     }
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_sq.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_sq.xtb
index 717004d..67f90abd 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_sq.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_sq.xtb
@@ -118,6 +118,7 @@
 <translation id="8828441885228359828">Rifillo regjistrimin</translation>
 <translation id="8870695351537079478">Regjistrimi nuk mund të fillojë</translation>
 <translation id="8903921497873541725">Zmadho</translation>
+<translation id="9045010116236796332">Vendos të gjitha anët e dokumentit brenda kuadrit</translation>
 <translation id="9045155556724273246">10 sekonda</translation>
 <translation id="945522503751344254">Dërgo komente</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_az.xtb b/chromeos/strings/chromeos_strings_az.xtb
index 1379aaa..cceba99 100644
--- a/chromeos/strings/chromeos_strings_az.xtb
+++ b/chromeos/strings/chromeos_strings_az.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">Fayllarım</translation>
 <translation id="3199982728237701504">Sənəd Bəsləyici (İki tərəfli)</translation>
 <translation id="3226405216343213872">Skanerlər axtarılır</translation>
+<translation id="3228433892370472777">Defolt bağlantı</translation>
 <translation id="3246869037381808805">1 gündən köhnə çap işləri silinəcək</translation>
 <translation id="3268178239013324452">Alınmadı - Qapı açıqdır</translation>
 <translation id="3283504360622356314">{0,plural, =1{Faylı redaktə edin}other{Faylları redaktə edin}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">Gərginlik</translation>
 <translation id="4917385247580444890">Güclü</translation>
 <translation id="4917889632206600977">Dayanıb - Kağız yoxdur</translation>
+<translation id="491836528011451486">Sənədinizi skanerin üzərinə qoyun və skanlamaq və <ph name="CURRENT_PAGE" /> səhifəsini əvəzləmək üçün "Yenidən skanlayın" seçin.</translation>
 <translation id="4921665434385737356"><ph name="NUM_SECONDS" /> saniyədə <ph name="RATE" /> şarj edilib.</translation>
 <translation id="4932733599132424254">Tarix</translation>
 <translation id="498186245079027698">Skaneri yoxlayın və yenidən cəhd edin. Skan edilmiş faylları saxlamaq üçün diskdə kifayət qədər yer olduğuna əmin olun.</translation>
@@ -330,6 +332,7 @@
 <translation id="7177485034254901881">Bu <ph name="DEVICE_TYPE" /> <ph name="MANAGER" /> tərəfindən idarə olunur. Administratorlar cihazı məsafədən konfiqurasiya edə bilər.</translation>
 <translation id="7180611975245234373">Yeniləyin</translation>
 <translation id="7216409898977639127">Mobil provayder</translation>
+<translation id="7257889006063274246"><ph name="CURRENT_PAGE" /> saylı səhifəni silmək istədiyinizə əminsiniz?</translation>
 <translation id="7271040990581020067">Skaner hazırda istifadə olunur. Sonra cəhd edin.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">Divar kağızı kolleksiyaları</translation>
diff --git a/chromeos/strings/chromeos_strings_be.xtb b/chromeos/strings/chromeos_strings_be.xtb
index 71ea58a..982b158 100644
--- a/chromeos/strings/chromeos_strings_be.xtb
+++ b/chromeos/strings/chromeos_strings_be.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">Мае файлы</translation>
 <translation id="3199982728237701504">Прылада для падачы дакументаў (абодвума бакамі)</translation>
 <translation id="3226405216343213872">Ідзе пошук сканераў</translation>
+<translation id="3228433892370472777">Стандартнае падключэнне</translation>
 <translation id="3246869037381808805">Заданні друку, старэйшыя за 1 дзень, будуць выдалены</translation>
 <translation id="3268178239013324452">Збой: дзверцы прынтара адкрыты</translation>
 <translation id="3283504360622356314">{0,plural, =1{Змяніць файл}one{Змяніць файлы}few{Змяніць файлы}many{Змяніць файлы}other{Змяніць файлы}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">Нагрузка</translation>
 <translation id="4917385247580444890">Моцны</translation>
 <translation id="4917889632206600977">Спынена: скончылася папера</translation>
+<translation id="491836528011451486">Каб адсканіраваць і замяніць старонку <ph name="CURRENT_PAGE" />, палажыце дакумент у сканер і націсніце "Сканіраваць паўторна".</translation>
 <translation id="4921665434385737356">Зараджана: <ph name="RATE" /> за <ph name="NUM_SECONDS" /> с.</translation>
 <translation id="4932733599132424254">Дата</translation>
 <translation id="498186245079027698">Праверце сканер і паўтарыце спробу. Упэўніцеся, што на прыладзе дастаткова месца для захавання файлаў адсканіраваных відарысаў.</translation>
@@ -297,6 +299,7 @@
 <translation id="65587193855025101">Планшэтны сканер</translation>
 <translation id="6564646048574748301">Збой: прынтар недаступны</translation>
 <translation id="6574762126505704998">Запоўніць</translation>
+<translation id="6575134580692778371">Не наладжана</translation>
 <translation id="6579235177984085399">Адкрыйце для сябе новыя інструменты для дызайну і рысавання</translation>
 <translation id="6596816719288285829">IP-адрас</translation>
 <translation id="6603230386432466813">Узнікла праблема з падключэннем?</translation>
@@ -330,6 +333,7 @@
 <translation id="7177485034254901881">Гэтай прыладай <ph name="DEVICE_TYPE" /> кіруе <ph name="MANAGER" />. Адміністратары могуць аддалена задаваць налады прылады.</translation>
 <translation id="7180611975245234373">Абнавіць</translation>
 <translation id="7216409898977639127">Сотавы аператар</translation>
+<translation id="7257889006063274246">Сапраўды выдаліць старонку <ph name="CURRENT_PAGE" />?</translation>
 <translation id="7271040990581020067">Сканер зараз выкарыстоўваецца. Паўтарыце спробу пазней.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">Калекцыі шпалер</translation>
diff --git a/chromeos/strings/chromeos_strings_cs.xtb b/chromeos/strings/chromeos_strings_cs.xtb
index 31dd431..3c2ee6a 100644
--- a/chromeos/strings/chromeos_strings_cs.xtb
+++ b/chromeos/strings/chromeos_strings_cs.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">Moje soubory</translation>
 <translation id="3199982728237701504">Podavač dokumentů (oboustranných)</translation>
 <translation id="3226405216343213872">Vyhledávání skenerů</translation>
+<translation id="3228433892370472777">Výchozí připojení</translation>
 <translation id="3246869037381808805">Tiskové úlohy starší než 1 den budou odstraněny</translation>
 <translation id="3268178239013324452">Tisk selhal – jsou otevřená dvířka</translation>
 <translation id="3283504360622356314">{0,plural, =1{Upravit soubor}few{Upravit soubory}many{Upravit soubory}other{Upravit soubory}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">Zátěž</translation>
 <translation id="4917385247580444890">Silný</translation>
 <translation id="4917889632206600977">Zastaveno – došel papír</translation>
+<translation id="491836528011451486">Pokud chcete stránku <ph name="CURRENT_PAGE" /> naskenovat a nahradit, umístěte dokument na skener a vyberte Hledat znovu.</translation>
 <translation id="4921665434385737356">Nabito na <ph name="RATE" /> za <ph name="NUM_SECONDS" /> s.</translation>
 <translation id="4932733599132424254">Datum</translation>
 <translation id="498186245079027698">Zkontrolujte skener a zkuste to znovu. Zkontrolujte, zda máte dostatek místního úložného prostoru k ukládání naskenovaných souborů.</translation>
@@ -331,6 +333,7 @@
 <translation id="7177485034254901881">Toto zařízení <ph name="DEVICE_TYPE" /> spravuje doména <ph name="MANAGER" />. Administrátoři mohou zařízení vzdáleně konfigurovat.</translation>
 <translation id="7180611975245234373">Obnovit</translation>
 <translation id="7216409898977639127">Poskytovatel mobilních dat</translation>
+<translation id="7257889006063274246">Opravdu chcete stránku <ph name="CURRENT_PAGE" /> odstranit?</translation>
 <translation id="7271040990581020067">Skener je aktuálně používán. Zkuste to znovu později.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">Sbírky tapet</translation>
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index 2adf2562..f53995a 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">Mis archivos</translation>
 <translation id="3199982728237701504">Alimentador de documentos (dos caras)</translation>
 <translation id="3226405216343213872">Buscando escáneres</translation>
+<translation id="3228433892370472777">Conexión predeterminada</translation>
 <translation id="3246869037381808805">Se quitarán los trabajos de impresión que tengan más de 1 día</translation>
 <translation id="3268178239013324452">Error: La tapa está abierta</translation>
 <translation id="3283504360622356314">{0,plural, =1{Editar archivo}other{Editar archivos}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">Esfuerzo</translation>
 <translation id="4917385247580444890">Fuerte</translation>
 <translation id="4917889632206600977">Se detuvo: no hay papel</translation>
+<translation id="491836528011451486">Coloca el documento en el escáner y selecciona Escanear de nuevo para escanear y volver a colocar la página <ph name="CURRENT_PAGE" />.</translation>
 <translation id="4921665434385737356">Se cargó <ph name="RATE" /> en <ph name="NUM_SECONDS" /> segundos.</translation>
 <translation id="4932733599132424254">Fecha</translation>
 <translation id="498186245079027698">Revisa el escáner y vuelve a intentarlo. Asegúrate de que haya espacio suficiente en el almacenamiento local para guardar los archivos escaneados.</translation>
@@ -331,6 +333,7 @@
 <translation id="7177485034254901881"><ph name="MANAGER" /> administra el dispositivo <ph name="DEVICE_TYPE" />. Los administradores pueden configurarlo de forma remota.</translation>
 <translation id="7180611975245234373">Actualizar</translation>
 <translation id="7216409898977639127">Proveedor de red celular</translation>
+<translation id="7257889006063274246">¿Confirmas que quieres quitar la página <ph name="CURRENT_PAGE" />?</translation>
 <translation id="7271040990581020067">El escáner está en uso. Vuelve a intentarlo más tarde.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">Colecciones de fondo de pantalla</translation>
diff --git a/chromeos/strings/chromeos_strings_fi.xtb b/chromeos/strings/chromeos_strings_fi.xtb
index 45352f1..2ee65eb2 100644
--- a/chromeos/strings/chromeos_strings_fi.xtb
+++ b/chromeos/strings/chromeos_strings_fi.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">Omat tiedostot</translation>
 <translation id="3199982728237701504">Syöttölaite (kaksipuolinen)</translation>
 <translation id="3226405216343213872">Haetaan skannereita</translation>
+<translation id="3228433892370472777">Oletusyhteys</translation>
 <translation id="3246869037381808805">Yli päivän vanhat tulostustyöt poistetaan</translation>
 <translation id="3268178239013324452">Epäonnistui – Luukku auki</translation>
 <translation id="3283504360622356314">{0,plural, =1{Muokkaa tiedostoa}other{Muokkaa tiedostoja}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">Rasitus</translation>
 <translation id="4917385247580444890">Vahva</translation>
 <translation id="4917889632206600977">Pysähtynyt – Paperi loppu</translation>
+<translation id="491836528011451486">Laita dokumenttisi skanneriin ja valitse Skannaa uudelleen, jos haluat skannata ja korvata sivun <ph name="CURRENT_PAGE" />.</translation>
 <translation id="4921665434385737356"><ph name="RATE" /> ladattiin <ph name="NUM_SECONDS" /> sekunnissa.</translation>
 <translation id="4932733599132424254">Päiväys</translation>
 <translation id="498186245079027698">Tarkista skanneri ja yritä uudelleen. Varmista, että paikallinen tallennustila riittää skannattujen tiedostojen tallentamiseen.</translation>
@@ -331,6 +333,7 @@
 <translation id="7177485034254901881"><ph name="MANAGER" /> ylläpitää tätä: <ph name="DEVICE_TYPE" />. Järjestelmänvalvojat voivat määrittää laitteen etänä.</translation>
 <translation id="7180611975245234373">Päivitä</translation>
 <translation id="7216409898977639127">Mobiilioperaattori</translation>
+<translation id="7257889006063274246">Haluatko varmasti poistaa sivun <ph name="CURRENT_PAGE" />?</translation>
 <translation id="7271040990581020067">Skanneri on tällä hetkellä käytössä. Yritä myöhemmin uudelleen.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">Taustakuvakokoelmat</translation>
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb
index 612caca..60d1188 100644
--- a/chromeos/strings/chromeos_strings_fil.xtb
+++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">Aking mga file</translation>
 <translation id="3199982728237701504">Document Feeder (Dalawang bahagi)</translation>
 <translation id="3226405216343213872">Naghahanap ng mga scanner</translation>
+<translation id="3228433892370472777">Default na koneksyon</translation>
 <translation id="3246869037381808805">Aalisin ang mga pag-print na lampas 1 araw na</translation>
 <translation id="3268178239013324452">Hindi na-print - Nakabukas ang takip</translation>
 <translation id="3283504360622356314">{0,plural, =1{I-edit ang file}one{I-edit ang mga file}other{I-edit ang mga file}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">Stress</translation>
 <translation id="4917385247580444890">Malakas</translation>
 <translation id="4917889632206600977">Huminto - Wala nang papel</translation>
+<translation id="491836528011451486">Ilagay ang iyong dokumento sa scanner at piliin ang I-scan ulit para i-scan at palitan ang page <ph name="CURRENT_PAGE" />.</translation>
 <translation id="4921665434385737356">Na-charge nang <ph name="RATE" /> sa loob ng <ph name="NUM_SECONDS" /> (na) segundo.</translation>
 <translation id="4932733599132424254">Petsa</translation>
 <translation id="498186245079027698">Suriin ang scanner at subukan ulit. Tiyaking may sapat na lokal na space para mag-save ng mga na-scan na file.</translation>
@@ -331,6 +333,7 @@
 <translation id="7177485034254901881">Pinapamahalaan ng <ph name="MANAGER" /> ang <ph name="DEVICE_TYPE" /> na ito. Puwedeng i-configure ng mga administrator ang device sa remote na paraan.</translation>
 <translation id="7180611975245234373">I-refresh</translation>
 <translation id="7216409898977639127">Cellular provider</translation>
+<translation id="7257889006063274246">Sigurado ka bang gusto mong alisin ang page na <ph name="CURRENT_PAGE" />?</translation>
 <translation id="7271040990581020067">Kasalukuyang ginagamit ang scanner. Subukan ulit sa ibang pagkakataon.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">Mga Koleksyon ng Wallpaper</translation>
diff --git a/chromeos/strings/chromeos_strings_fr-CA.xtb b/chromeos/strings/chromeos_strings_fr-CA.xtb
index 9969c53..2ba2285 100644
--- a/chromeos/strings/chromeos_strings_fr-CA.xtb
+++ b/chromeos/strings/chromeos_strings_fr-CA.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">Mes fichiers</translation>
 <translation id="3199982728237701504">Chargeur de document (recto verso)</translation>
 <translation id="3226405216343213872">Recherche de numériseurs en cours…</translation>
+<translation id="3228433892370472777">Connexion par défaut</translation>
 <translation id="3246869037381808805">Les tâches d'impression de plus d'un jour seront retirées</translation>
 <translation id="3268178239013324452">Échec : porte de l'imprimante ouverte</translation>
 <translation id="3283504360622356314">{0,plural, =1{Modifier le fichier}one{Modifier le fichier}other{Modifier les fichiers}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">Stress</translation>
 <translation id="4917385247580444890">Fort</translation>
 <translation id="4917889632206600977">Tâche arrêtée : à court de papier</translation>
+<translation id="491836528011451486">Placez votre document sur le numériseur, puis sélectionnez Numériser de nouveau pour numériser la page <ph name="CURRENT_PAGE" /> et la remplacer.</translation>
 <translation id="4921665434385737356">L'appareil s'est rechargé de <ph name="RATE" /> en <ph name="NUM_SECONDS" /> secondes.</translation>
 <translation id="4932733599132424254">Date</translation>
 <translation id="498186245079027698">Vérifiez le numériseur et réessayez. Assurez-vous qu'il y a suffisamment d'espace local pour enregistrer les fichiers numérisés.</translation>
@@ -331,6 +333,7 @@
 <translation id="7177485034254901881">Ce <ph name="DEVICE_TYPE" /> est géré par <ph name="MANAGER" />. Les administrateurs peuvent configurer l'appareil à distance.</translation>
 <translation id="7180611975245234373">Actualiser</translation>
 <translation id="7216409898977639127">Fournisseur cellulaire</translation>
+<translation id="7257889006063274246">Voulez-vous vraiment retirer la page <ph name="CURRENT_PAGE" />?</translation>
 <translation id="7271040990581020067">Le numériseur est en cours d'utilisation. Réessayez plus tard.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" /> sur <ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">Collections de fonds d'écran</translation>
diff --git a/chromeos/strings/chromeos_strings_id.xtb b/chromeos/strings/chromeos_strings_id.xtb
index 342b599..e228724 100644
--- a/chromeos/strings/chromeos_strings_id.xtb
+++ b/chromeos/strings/chromeos_strings_id.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">File saya</translation>
 <translation id="3199982728237701504">Pengumpan Dokumen (Dua Sisi)</translation>
 <translation id="3226405216343213872">Mencari pemindai</translation>
+<translation id="3228433892370472777">Koneksi default</translation>
 <translation id="3246869037381808805">Tugas pencetakan yang sudah lebih dari 1 hari akan dihapus</translation>
 <translation id="3268178239013324452">Gagal - Tutup terbuka</translation>
 <translation id="3283504360622356314">{0,plural, =1{Edit file}other{Edit file}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">Tegangan</translation>
 <translation id="4917385247580444890">Kuat</translation>
 <translation id="4917889632206600977">Dihentikan - Kertas habis</translation>
+<translation id="491836528011451486">Letakkan dokumen Anda pada pemindai, lalu pilih Pindai ulang untuk memindai dan mengganti halaman <ph name="CURRENT_PAGE" />.</translation>
 <translation id="4921665434385737356">Terisi <ph name="RATE" /> dalam <ph name="NUM_SECONDS" /> detik.</translation>
 <translation id="4932733599132424254">Tanggal</translation>
 <translation id="498186245079027698">Periksa pemindai, lalu coba lagi. Pastikan terdapat cukup ruang penyimpanan lokal untuk menyimpan file hasil pemindaian.</translation>
@@ -331,6 +333,7 @@
 <translation id="7177485034254901881"><ph name="DEVICE_TYPE" /> ini dikelola oleh <ph name="MANAGER" />. Administrator dapat mengonfigurasi perangkat dari jarak jauh.</translation>
 <translation id="7180611975245234373">Perbarui</translation>
 <translation id="7216409898977639127">Operator seluler</translation>
+<translation id="7257889006063274246">Yakin ingin menghapus halaman <ph name="CURRENT_PAGE" />?</translation>
 <translation id="7271040990581020067">Pemindai sedang digunakan. Coba lagi nanti.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">Koleksi Wallpaper</translation>
diff --git a/chromeos/strings/chromeos_strings_iw.xtb b/chromeos/strings/chromeos_strings_iw.xtb
index 44a5ee7..34dfc18a 100644
--- a/chromeos/strings/chromeos_strings_iw.xtb
+++ b/chromeos/strings/chromeos_strings_iw.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">הקבצים שלי</translation>
 <translation id="3199982728237701504">הכנסת מסמכים (שני צדדים)</translation>
 <translation id="3226405216343213872">מתבצע חיפוש אחר סורקים</translation>
+<translation id="3228433892370472777">החיבור המוגדר כברירת מחדל</translation>
 <translation id="3246869037381808805">משימות הדפסה בנות יותר מיום אחד יוסרו</translation>
 <translation id="3268178239013324452">נכשלה – דלת המדפסת פתוחה</translation>
 <translation id="3283504360622356314">{0,plural, =1{עריכת הקובץ}two{עריכת הקבצים}many{עריכת הקבצים}other{עריכת הקבצים}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">בדיקת עומסים</translation>
 <translation id="4917385247580444890">חזק</translation>
 <translation id="4917889632206600977">הפסיקה – הנייר נגמר</translation>
+<translation id="491836528011451486">מציבים את המסמך על הסורק ולוחצים על 'סריקה מחדש' כדי לסרוק ולהחליף את דף <ph name="CURRENT_PAGE" />.</translation>
 <translation id="4921665434385737356">התבצעה טעינה של <ph name="RATE" /> ב-<ph name="NUM_SECONDS" /> שניות.</translation>
 <translation id="4932733599132424254">תאריך</translation>
 <translation id="498186245079027698">יש לבדוק את הסורק ולנסות שוב. חשוב לוודא שיש במכשיר מספיק מקום לשמור את הקבצים הסרוקים.</translation>
@@ -331,6 +333,7 @@
 <translation id="7177485034254901881">מכשיר <ph name="DEVICE_TYPE" /> זה מנוהל על ידי <ph name="MANAGER" />. מנהלי מערכת עשויים להגדיר את המכשיר הזה מרחוק.</translation>
 <translation id="7180611975245234373">רענון</translation>
 <translation id="7216409898977639127">ספק שירות סלולרי</translation>
+<translation id="7257889006063274246">בחרת להסיר את דף <ph name="CURRENT_PAGE" />. להמשיך?</translation>
 <translation id="7271040990581020067">הסורק נמצא בשימוש כרגע. יש לנסות שוב מאוחר יותר.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">אוספים של טפטים</translation>
diff --git a/chromeos/strings/chromeos_strings_km.xtb b/chromeos/strings/chromeos_strings_km.xtb
index a1ded6a..2d0b6a2 100644
--- a/chromeos/strings/chromeos_strings_km.xtb
+++ b/chromeos/strings/chromeos_strings_km.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">ឯកសារ​របស់ខ្ញុំ​</translation>
 <translation id="3199982728237701504">ឧបករណ៍​បញ្ចូល​ឯកសារ (សងខាង)</translation>
 <translation id="3226405216343213872">កំពុងរកមើលម៉ាស៊ីនស្កេន</translation>
+<translation id="3228433892370472777">ការ​តភ្ជាប់លំនាំដើម</translation>
 <translation id="3246869037381808805">កិច្ចការបោះពុម្ពដែលចាស់ជាង 1 ថ្ងៃនឹងត្រូវលុបចេញ</translation>
 <translation id="3268178239013324452">មិនបានសម្រេច - ​​​ទ្វារចំហ</translation>
 <translation id="3283504360622356314">{0,plural, =1{កែ​ឯកសារ}other{កែ​ឯកសារ}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">ស្ត្រេស</translation>
 <translation id="4917385247580444890">ខ្លាំង</translation>
 <translation id="4917889632206600977">បានឈប់ - អស់​ក្រដាស</translation>
+<translation id="491836528011451486">ដាក់ឯកសាររបស់អ្នកនៅលើម៉ាស៊ីនស្កេន រួចជ្រើសរើស "ស្កេនឡើងវិញ" ដើម្បីស្កេន និងជំនួសទំព័រទី <ph name="CURRENT_PAGE" />។</translation>
 <translation id="4921665434385737356">បានសាកថ្ម <ph name="RATE" /> ក្នុងរយៈពេល <ph name="NUM_SECONDS" /> វិនាទី។</translation>
 <translation id="4932733599132424254">កាលបរិច្ឆេទ</translation>
 <translation id="498186245079027698">ពិនិត្យមើល​កម្មវិធីស្កេន រួចព្យាយាមម្ដងទៀត។ ត្រូវប្រាកដថា មានទំហំផ្ទុក​ក្នុងឧបករណ៍​គ្រប់គ្រាន់ ដើម្បីរក្សាទុក​ឯកសារដែលបានស្កេន។</translation>
@@ -330,6 +332,7 @@
 <translation id="7177485034254901881"><ph name="DEVICE_TYPE" /> នេះស្ថិតក្រោម​ការគ្រប់គ្រងរបស់ <ph name="MANAGER" />។ អ្នកគ្រប់គ្រង​អាចកំណត់រចនាសម្ព័ន្ធ​ឧបករណ៍​នេះពីចម្ងាយបាន។</translation>
 <translation id="7180611975245234373">ធ្វើឲ្យថ្មីឡើងវិញ…</translation>
 <translation id="7216409898977639127">ក្រុមហ៊ុន​ផ្តល់សេវា​ទូរសព្ទ</translation>
+<translation id="7257889006063274246">តើអ្នក​ពិតជាចង់​លុបទំព័រទី <ph name="CURRENT_PAGE" /> មែនឬ?</translation>
 <translation id="7271040990581020067">បច្ចុប្បន្ននេះ ម៉ាស៊ីនស្កេន​កំពុងស្ថិតក្នុង​ការប្រើប្រាស់។ សូមព្យាយាមម្ដងទៀតនៅពេលក្រោយ។</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">បណ្ដុំ​ផ្ទាំងរូបភាព</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb
index 1a9f30d..3dbeb92 100644
--- a/chromeos/strings/chromeos_strings_ko.xtb
+++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">내 파일</translation>
 <translation id="3199982728237701504">서류 급지(양면)</translation>
 <translation id="3226405216343213872">스캐너 검색 중</translation>
+<translation id="3228433892370472777">기본 연결</translation>
 <translation id="3246869037381808805">1일 이상 경과한 인쇄 작업은 삭제됩니다.</translation>
 <translation id="3268178239013324452">실패 - 덮개 열림</translation>
 <translation id="3283504360622356314">{0,plural, =1{파일 수정}other{파일 수정}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">스트레스</translation>
 <translation id="4917385247580444890">강함</translation>
 <translation id="4917889632206600977">중지됨 - 용지 부족</translation>
+<translation id="491836528011451486"><ph name="CURRENT_PAGE" />페이지를 교체하려면 스캐너에 문서를 올리고 다시 스캔을 선택하여 스캔하세요.</translation>
 <translation id="4921665434385737356"><ph name="NUM_SECONDS" />초 동안 <ph name="RATE" /> 충전했습니다.</translation>
 <translation id="4932733599132424254">날짜</translation>
 <translation id="498186245079027698">스캐너를 확인한 후 다시 시도해 보세요. 스캔된 파일을 저장하기에 공간이 충분한지 확인합니다.</translation>
@@ -331,6 +333,7 @@
 <translation id="7177485034254901881">이 <ph name="DEVICE_TYPE" />은(는) <ph name="MANAGER" />에서 관리합니다. 관리자가 기기를 원격으로 구성할 수 있습니다.</translation>
 <translation id="7180611975245234373">새로고침</translation>
 <translation id="7216409898977639127">이동통신사</translation>
+<translation id="7257889006063274246"><ph name="CURRENT_PAGE" /> 페이지를 삭제하시겠습니까?</translation>
 <translation id="7271040990581020067">현재 스캐너를 사용하고 있습니다. 나중에 다시 시도해 주세요.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">배경화면 컬렉션</translation>
diff --git a/chromeos/strings/chromeos_strings_ms.xtb b/chromeos/strings/chromeos_strings_ms.xtb
index 8b80551..e967524 100644
--- a/chromeos/strings/chromeos_strings_ms.xtb
+++ b/chromeos/strings/chromeos_strings_ms.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">Fail saya</translation>
 <translation id="3199982728237701504">Penyuap Dokumen (Dwisisi)</translation>
 <translation id="3226405216343213872">Mencari pengimbas</translation>
+<translation id="3228433892370472777">Sambungan lalai</translation>
 <translation id="3246869037381808805">Tugas cetak yang melebihi 1 hari akan dialih keluar</translation>
 <translation id="3268178239013324452">Gagal - Pintu terbuka</translation>
 <translation id="3283504360622356314">{0,plural, =1{Edit fail}other{Edit fail}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">Tekanan</translation>
 <translation id="4917385247580444890">Kuat</translation>
 <translation id="4917889632206600977">Dihentikan - Kehabisan kertas</translation>
+<translation id="491836528011451486">Letakkan dokumen anda di atas pengimbas dan pilih Imbas semula untuk mengimbas dan menggantikan halaman <ph name="CURRENT_PAGE" />.</translation>
 <translation id="4921665434385737356">Dicas <ph name="RATE" /> dalam masa <ph name="NUM_SECONDS" /> saat.</translation>
 <translation id="4932733599132424254">Tarikh</translation>
 <translation id="498186245079027698">Periksa pengimbas dan cuba lagi. Pastikan terdapat ruang setempat yang mencukupi untuk menyimpan fail yang diimbas.</translation>
@@ -331,6 +333,7 @@
 <translation id="7177485034254901881"><ph name="DEVICE_TYPE" /> ini diurus oleh <ph name="MANAGER" />. Pentadbir boleh mengkonfigurasikan peranti dari jauh.</translation>
 <translation id="7180611975245234373">Muat semula</translation>
 <translation id="7216409898977639127">Penyedia selular</translation>
+<translation id="7257889006063274246">Adakah anda pasti mahu mengalih keluar halaman <ph name="CURRENT_PAGE" />?</translation>
 <translation id="7271040990581020067">Pengimbas sedang digunakan. Cuba lagi nanti.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">Koleksi Kertas Dinding</translation>
diff --git a/chromeos/strings/chromeos_strings_sq.xtb b/chromeos/strings/chromeos_strings_sq.xtb
index 2911d45..a294659 100644
--- a/chromeos/strings/chromeos_strings_sq.xtb
+++ b/chromeos/strings/chromeos_strings_sq.xtb
@@ -124,6 +124,7 @@
 <translation id="3595596368722241419">Bateria është plot</translation>
 <translation id="360565022852130722">Rrjeti Wi-Fi është i siguruar me protokollin e dobët WEP 802.1x</translation>
 <translation id="3689839747745352263">Testi <ph name="TEST_NAME" /></translation>
+<translation id="3708186454126126312">Të lidhura më parë</translation>
 <translation id="373232531963562220">{PAGE_NUMBER,plural, =0{Riskano faqen}=1{Riskano faqen {PAGE_NUMBER}}other{Riskano faqen {PAGE_NUMBER}}}</translation>
 <translation id="3740976234706877572"><ph name="AVERAGE_SCORE" /> ★ (<ph name="AGGREGATED_COUNT" /> komente)</translation>
 <translation id="3748026146096797577">Nuk është i lidhur</translation>
@@ -415,6 +416,7 @@
 <translation id="8798441408945964110">Emri i ofruesit</translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
 <translation id="8818152010000655963">Imazhi i sfondit</translation>
+<translation id="8834539327799336565">Të lidhur aktualisht</translation>
 <translation id="8845001906332463065">Kërko ndihmë</translation>
 <translation id="8868741746785112895">GUID</translation>
 <translation id="8881098542468797602">Testi u krye me sukses</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb
index ef4af7f..e399e93 100644
--- a/chromeos/strings/chromeos_strings_zh-HK.xtb
+++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -102,6 +102,7 @@
 <translation id="3188257591659621405">我的檔案</translation>
 <translation id="3199982728237701504">文件送紙器 (雙面)</translation>
 <translation id="3226405216343213872">正在尋找掃瞄器</translation>
+<translation id="3228433892370472777">預設連線</translation>
 <translation id="3246869037381808805">超過 1 天前的列印工作將被移除</translation>
 <translation id="3268178239013324452">失敗 - 機蓋未關</translation>
 <translation id="3283504360622356314">{0,plural, =1{編輯檔案}other{編輯檔案}}</translation>
@@ -200,6 +201,7 @@
 <translation id="4891842000192098784">壓力</translation>
 <translation id="4917385247580444890">強</translation>
 <translation id="4917889632206600977">已停止 - 紙張已用完</translation>
+<translation id="491836528011451486">將文件放到掃瞄器上並選取 [重新掃瞄],即可掃瞄並取代第 <ph name="CURRENT_PAGE" /> 頁。</translation>
 <translation id="4921665434385737356">已在 <ph name="NUM_SECONDS" /> 秒內充電 <ph name="RATE" />。</translation>
 <translation id="4932733599132424254">日期</translation>
 <translation id="498186245079027698">請檢查掃瞄器,然後再試一次。請確保本機有足夠空間儲存已掃瞄的檔案。</translation>
@@ -331,6 +333,7 @@
 <translation id="7177485034254901881">此 <ph name="DEVICE_TYPE" /> 由 <ph name="MANAGER" /> 管理。管理員可能會遠端設定裝置。</translation>
 <translation id="7180611975245234373">重新整理</translation>
 <translation id="7216409898977639127">流動服務供應商</translation>
+<translation id="7257889006063274246">確定要移除第 <ph name="CURRENT_PAGE" /> 頁嗎?</translation>
 <translation id="7271040990581020067">掃瞄器目前正在使用中,請稍後再試。</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7287310195820267359">桌布收藏</translation>
diff --git a/components/arc/mojom/intent_helper.mojom b/components/arc/mojom/intent_helper.mojom
index bab75a7..b8a379c 100644
--- a/components/arc/mojom/intent_helper.mojom
+++ b/components/arc/mojom/intent_helper.mojom
@@ -211,6 +211,7 @@
   string type;
 
   // Human readable name for the file.
+  // TODO(crbug.com/1238215): Use BaseName instead, when available.
   string name;
 
   // Size of the file in bytes.
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
index eb78ec6..ff1b395 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
@@ -69,6 +69,7 @@
 <translation id="2687403674020088961">Blloko të gjitha kukit (nuk rekomandohet)</translation>
 <translation id="2704606927547763573">Kopjuar</translation>
 <translation id="2717722538473713889">Adresat e email-it</translation>
+<translation id="2785051990912111074">Kjo zgjedhje do të pastrojë kukit për <ph name="WEBSITE" /></translation>
 <translation id="2822354292072154809">Je i sigurt që dëshiron t'i rivendosësh të gjitha lejet e sajtit për <ph name="CHOSEN_OBJECT_NAME" />?</translation>
 <translation id="2870560284913253234">Sajti</translation>
 <translation id="2874939134665556319">Kënga e mëparshme</translation>
@@ -138,6 +139,7 @@
 <translation id="4976702386844183910">Vizituar së fundi më <ph name="DATE" /></translation>
 <translation id="4994033804516042629">Nuk u gjet asnjë kontakt</translation>
 <translation id="4996978546172906250">Ndaje nëpërmjet</translation>
+<translation id="5014906230196386306">Të pastrohen kukit?</translation>
 <translation id="5039804452771397117">Lejo</translation>
 <translation id="5048398596102334565">Lejoju faqeve të të hapin sensorët e lëvizjes (rekomandohet)</translation>
 <translation id="5050380848339752099">Ky sajt është gati për të ndarë informacione me një aplikacion jashtë modalitetit "të fshehtë".</translation>
@@ -157,6 +159,7 @@
 <translation id="5354152178998424783">Kjo do të pastrojë <ph name="DATASIZE" /> të dhëna dhe kuki të ruajtura nga sajtet.</translation>
 <translation id="5394307150471348411">{DETAIL_COUNT,plural, =1{(+ 1 tjetër)}other{(+ # të tjerë)}}</translation>
 <translation id="5403592356182871684">Emrat</translation>
+<translation id="5438097262470833822">Kjo zgjedhje do të rivendosë autorizimet për <ph name="WEBSITE" /></translation>
 <translation id="5489227211564503167">Koha e kaluar: <ph name="ELAPSED_TIME" /> nga <ph name="TOTAL_TIME" />.</translation>
 <translation id="5494752089476963479">Blloko reklamat në sajtet që shfaqin reklama ndërhyrëse ose mashtruese</translation>
 <translation id="5502860503640766021"><ph name="PERMISSION_1" /> është lejuar, <ph name="PERMISSION_2" /> është bllokuar</translation>
@@ -213,6 +216,7 @@
 <translation id="6689172468748959065">Fotografitë e profilit</translation>
 <translation id="6697925417670533197">Shkarkimet aktive</translation>
 <translation id="6746124502594467657">Lëviz poshtë</translation>
+<translation id="6749077623962119521">Të rivendosen lejet?</translation>
 <translation id="6766622839693428701">Rrëshqit shpejt poshtë për ta mbyllur.</translation>
 <translation id="6790428901817661496">Luaj</translation>
 <translation id="6818926723028410516">Zgjidh artikujt</translation>
diff --git a/components/content_settings/browser/page_specific_content_settings_unittest.cc b/components/content_settings/browser/page_specific_content_settings_unittest.cc
index 3b2e9ee..7273c50a 100644
--- a/components/content_settings/browser/page_specific_content_settings_unittest.cc
+++ b/components/content_settings/browser/page_specific_content_settings_unittest.cc
@@ -482,10 +482,12 @@
     : public PageSpecificContentSettingsTest {
  public:
   PageSpecificContentSettingsWithPrerenderTest() {
-    std::map<std::string, std::string> parameters;
-    parameters["implementation"] = "mparch";
-    feature_list_.InitAndEnableFeatureWithParameters(
-        blink::features::kPrerender2, parameters);
+    // Enable prerendering with no physical memory requirement so the test can
+    // run on any bot.
+    feature_list_.InitWithFeaturesAndParameters(
+        {{blink::features::kPrerender2,
+          {{blink::features::kPrerender2MemoryThresholdParamName, "0"}}}},
+        {});
   }
   ~PageSpecificContentSettingsWithPrerenderTest() override = default;
 
diff --git a/components/download/public/common/download_file_factory.h b/components/download/public/common/download_file_factory.h
index 9be4ced1..0985cae 100644
--- a/components/download/public/common/download_file_factory.h
+++ b/components/download/public/common/download_file_factory.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_DOWNLOAD_PUBLIC_COMMON_DOWNLOAD_FILE_FACTORY_H_
 
 #include <memory>
-#include <vector>
 
 #include "base/files/file.h"
 #include "base/files/file_path.h"
diff --git a/components/feedback/redaction_tool.cc b/components/feedback/redaction_tool.cc
index 06d82ad..0e771ccd 100644
--- a/components/feedback/redaction_tool.cc
+++ b/components/feedback/redaction_tool.cc
@@ -4,8 +4,8 @@
 
 #include "components/feedback/redaction_tool.h"
 
-#include <memory>
 #include <utility>
+#include <vector>
 
 #include "base/files/file_path.h"
 #include "base/strings/strcat.h"
diff --git a/components/feedback/redaction_tool.h b/components/feedback/redaction_tool.h
index 7159caa..39469ca 100644
--- a/components/feedback/redaction_tool.h
+++ b/components/feedback/redaction_tool.h
@@ -8,7 +8,6 @@
 #include <map>
 #include <memory>
 #include <string>
-#include <vector>
 
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
diff --git a/components/flags_ui/flags_state.cc b/components/flags_ui/flags_state.cc
index 60a71c8..cb762942 100644
--- a/components/flags_ui/flags_state.cc
+++ b/components/flags_ui/flags_state.cc
@@ -789,6 +789,9 @@
     std::map<std::string, SwitchEntry>* name_to_switch_map) const {
   GetSanitizedEnabledFlagsForCurrentPlatform(flags_storage, enabled_entries);
 
+  if (enabled_entries->empty())
+    return;
+
   for (const FeatureEntry& entry : feature_entries_) {
     switch (entry.type) {
       case FeatureEntry::SINGLE_VALUE:
diff --git a/components/flags_ui/flags_state.h b/components/flags_ui/flags_state.h
index 610ff779..507cda7 100644
--- a/components/flags_ui/flags_state.h
+++ b/components/flags_ui/flags_state.h
@@ -218,6 +218,7 @@
   // from |flags_storage|. On output, |enabled_entries| will contain the
   // internal names of enabled flags and |name_to_switch_map| will contain
   // information on how they map to command-line flags or features.
+  // When |enabled_entries| is empty |name_to_switch_map| won't be filled.
   void GenerateFlagsToSwitchesMapping(
       FlagsStorage* flags_storage,
       std::set<std::string>* enabled_entries,
diff --git a/components/media_router/browser/issue_manager.h b/components/media_router/browser/issue_manager.h
index 8e3d84f5..bd3143f 100644
--- a/components/media_router/browser/issue_manager.h
+++ b/components/media_router/browser/issue_manager.h
@@ -9,7 +9,6 @@
 
 #include <map>
 #include <memory>
-#include <vector>
 
 #include "base/cancelable_callback.h"
 #include "base/containers/small_map.h"
diff --git a/components/media_router/browser/issue_manager_unittest.cc b/components/media_router/browser/issue_manager_unittest.cc
index fbab66e..7f17673f 100644
--- a/components/media_router/browser/issue_manager_unittest.cc
+++ b/components/media_router/browser/issue_manager_unittest.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include <string>
-#include <vector>
 
 #include "base/macros.h"
 #include "base/test/task_environment.h"
diff --git a/components/media_router/browser/media_router_dialog_controller_unittest.cc b/components/media_router/browser/media_router_dialog_controller_unittest.cc
index 725a970..3f8c03b 100644
--- a/components/media_router/browser/media_router_dialog_controller_unittest.cc
+++ b/components/media_router/browser/media_router_dialog_controller_unittest.cc
@@ -5,7 +5,6 @@
 #include "components/media_router/browser/media_router_dialog_controller.h"
 
 #include <memory>
-#include <vector>
 
 #include "base/bind.h"
 #include "build/build_config.h"
diff --git a/components/media_router/browser/presentation/local_presentation_manager_unittest.cc b/components/media_router/browser/presentation/local_presentation_manager_unittest.cc
index 393ef44..f3c0b32 100644
--- a/components/media_router/browser/presentation/local_presentation_manager_unittest.cc
+++ b/components/media_router/browser/presentation/local_presentation_manager_unittest.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include <utility>
-#include <vector>
 
 #include "base/bind.h"
 #include "base/containers/contains.h"
diff --git a/components/password_manager/core/browser/BUILD.gn b/components/password_manager/core/browser/BUILD.gn
index 82e78f6..11d4924 100644
--- a/components/password_manager/core/browser/BUILD.gn
+++ b/components/password_manager/core/browser/BUILD.gn
@@ -98,8 +98,6 @@
     "http_password_store_migrator.h",
     "import/password_importer.cc",
     "import/password_importer.h",
-    "insecure_credentials_consumer.cc",
-    "insecure_credentials_consumer.h",
     "insecure_credentials_helper.cc",
     "insecure_credentials_helper.h",
     "insecure_credentials_table.cc",
diff --git a/components/password_manager/core/browser/hsts_query_unittest.cc b/components/password_manager/core/browser/hsts_query_unittest.cc
index b4707b61d..fe038f5 100644
--- a/components/password_manager/core/browser/hsts_query_unittest.cc
+++ b/components/password_manager/core/browser/hsts_query_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "components/password_manager/core/browser/password_manager_test_utils.h"
 #include "mojo/public/cpp/bindings/remote.h"
+#include "net/http/transport_security_state.h"
 #include "net/url_request/url_request_test_util.h"
 #include "services/network/network_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/password_manager/core/browser/http_auth_manager_unittest.cc b/components/password_manager/core/browser/http_auth_manager_unittest.cc
index 0fcc4e3c..75d0697 100644
--- a/components/password_manager/core/browser/http_auth_manager_unittest.cc
+++ b/components/password_manager/core/browser/http_auth_manager_unittest.cc
@@ -18,13 +18,13 @@
 #include "components/autofill/core/common/form_field_data.h"
 #include "components/password_manager/core/browser/form_fetcher_impl.h"
 #include "components/password_manager/core/browser/http_auth_manager_impl.h"
-#include "components/password_manager/core/browser/mock_password_store.h"
+#include "components/password_manager/core/browser/mock_password_store_interface.h"
 #include "components/password_manager/core/browser/mock_smart_bubble_stats_store.h"
 #include "components/password_manager/core/browser/password_form_manager.h"
 #include "components/password_manager/core/browser/password_form_manager_for_ui.h"
 #include "components/password_manager/core/browser/password_manager_driver.h"
-#include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/browser/password_store_consumer.h"
+#include "components/password_manager/core/browser/password_store_interface.h"
 #include "components/password_manager/core/browser/stub_password_manager_client.h"
 #include "components/password_manager/core/common/password_manager_features.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -47,13 +47,24 @@
 
 class MockPasswordManagerClient : public StubPasswordManagerClient {
  public:
-  MOCK_CONST_METHOD1(IsSavingAndFillingEnabled, bool(const GURL&));
-  MOCK_CONST_METHOD1(IsFillingEnabled, bool(const GURL&));
-  MOCK_METHOD2(AutofillHttpAuth,
-               void(const PasswordForm&, const PasswordFormManagerForUI*));
-  MOCK_CONST_METHOD0(GetProfilePasswordStore, PasswordStore*());
-  MOCK_CONST_METHOD0(GetAccountPasswordStore, PasswordStore*());
-  MOCK_METHOD0(PromptUserToSaveOrUpdatePasswordPtr, void());
+  MOCK_METHOD(bool,
+              IsSavingAndFillingEnabled,
+              (const GURL&),
+              (const, override));
+  MOCK_METHOD(bool, IsFillingEnabled, (const GURL&), (const, override));
+  MOCK_METHOD(void,
+              AutofillHttpAuth,
+              (const PasswordForm&, const PasswordFormManagerForUI*),
+              (override));
+  MOCK_METHOD(PasswordStoreInterface*,
+              GetProfilePasswordStoreInterface,
+              (),
+              (const, override));
+  MOCK_METHOD(PasswordStoreInterface*,
+              GetAccountPasswordStoreInterface,
+              (),
+              (const, override));
+  MOCK_METHOD(void, PromptUserToSaveOrUpdatePasswordPtr, (), ());
 
   // Workaround for std::unique_ptr<> lacking a copy constructor.
   bool PromptUserToSaveOrUpdatePassword(
@@ -88,13 +99,11 @@
 
  protected:
   void SetUp() override {
-    store_ = new testing::StrictMock<MockPasswordStore>;
-    ASSERT_TRUE(store_->Init(/*prefs=*/nullptr));
+    store_ = new testing::StrictMock<MockPasswordStoreInterface>;
 
     if (base::FeatureList::IsEnabled(
             features::kEnablePasswordsAccountStorage)) {
-      account_store_ = new testing::NiceMock<MockPasswordStore>;
-      ASSERT_TRUE(account_store_->Init(/*prefs=*/nullptr));
+      account_store_ = new testing::NiceMock<MockPasswordStoreInterface>;
 
       // Most tests don't really need the account store, but it'll still get
       // queried by MultiStoreFormFetcher, so it needs to return something to
@@ -106,9 +115,9 @@
               WithArg<1>(InvokeEmptyConsumerWithForms(account_store_.get())));
     }
 
-    ON_CALL(client_, GetProfilePasswordStore())
+    ON_CALL(client_, GetProfilePasswordStoreInterface())
         .WillByDefault(Return(store_.get()));
-    ON_CALL(client_, GetAccountPasswordStore())
+    ON_CALL(client_, GetAccountPasswordStoreInterface())
         .WillByDefault(Return(account_store_.get()));
     EXPECT_CALL(*store_, GetSmartBubbleStatsStore)
         .WillRepeatedly(Return(&smart_bubble_stats_store_));
@@ -122,20 +131,11 @@
             Invoke(httpauth_manager_.get(), &HttpAuthManagerImpl::Autofill));
   }
 
-  void TearDown() override {
-    if (account_store_) {
-      account_store_->ShutdownOnUIThread();
-      account_store_ = nullptr;
-    }
-    store_->ShutdownOnUIThread();
-    store_ = nullptr;
-  }
-
   HttpAuthManagerImpl* httpauth_manager() { return httpauth_manager_.get(); }
 
   base::test::TaskEnvironment task_environment_;
-  scoped_refptr<MockPasswordStore> store_;
-  scoped_refptr<MockPasswordStore> account_store_;
+  scoped_refptr<MockPasswordStoreInterface> store_;
+  scoped_refptr<MockPasswordStoreInterface> account_store_;
   testing::NiceMock<MockPasswordManagerClient> client_;
   testing::NiceMock<MockSmartBubbleStatsStore> smart_bubble_stats_store_;
   std::unique_ptr<HttpAuthManagerImpl> httpauth_manager_;
diff --git a/components/password_manager/core/browser/http_credentials_cleaner.cc b/components/password_manager/core/browser/http_credentials_cleaner.cc
index bcbcc6b7..05193a22 100644
--- a/components/password_manager/core/browser/http_credentials_cleaner.cc
+++ b/components/password_manager/core/browser/http_credentials_cleaner.cc
@@ -17,7 +17,7 @@
 namespace password_manager {
 
 HttpCredentialCleaner::HttpCredentialCleaner(
-    scoped_refptr<PasswordStore> store,
+    scoped_refptr<PasswordStoreInterface> store,
     base::RepeatingCallback<network::mojom::NetworkContext*()>
         network_context_getter,
     PrefService* prefs)
diff --git a/components/password_manager/core/browser/http_credentials_cleaner.h b/components/password_manager/core/browser/http_credentials_cleaner.h
index 64ffaf84..2ee35c88 100644
--- a/components/password_manager/core/browser/http_credentials_cleaner.h
+++ b/components/password_manager/core/browser/http_credentials_cleaner.h
@@ -30,7 +30,7 @@
 
 namespace password_manager {
 
-class PasswordStore;
+class PasswordStoreInterface;
 
 // This class is responsible for removing obsolete HTTP credentials that can
 // safely be deleted and reporting metrics about HTTP to HTTPS migration. This
@@ -60,7 +60,7 @@
   // A preference from |prefs| is used to set the last time (in seconds) when
   // the cleaning was performed.
   HttpCredentialCleaner(
-      scoped_refptr<PasswordStore> store,
+      scoped_refptr<PasswordStoreInterface> store,
       base::RepeatingCallback<network::mojom::NetworkContext*()>
           network_context_getter,
       PrefService* prefs);
@@ -98,7 +98,7 @@
   void SetPrefIfDone();
 
   // Clean-up is performed on |store_|.
-  scoped_refptr<PasswordStore> store_;
+  scoped_refptr<PasswordStoreInterface> store_;
 
   // Needed to create HSTS request.
   base::RepeatingCallback<network::mojom::NetworkContext*()>
diff --git a/components/password_manager/core/browser/insecure_credentials_consumer.cc b/components/password_manager/core/browser/insecure_credentials_consumer.cc
deleted file mode 100644
index 5458670..0000000
--- a/components/password_manager/core/browser/insecure_credentials_consumer.cc
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/password_manager/core/browser/insecure_credentials_consumer.h"
-
-#include "components/password_manager/core/browser/insecure_credentials_table.h"
-
-namespace password_manager {
-
-InsecureCredentialsConsumer::InsecureCredentialsConsumer() = default;
-
-InsecureCredentialsConsumer::~InsecureCredentialsConsumer() = default;
-
-void InsecureCredentialsConsumer::OnGetInsecureCredentialsFrom(
-    PasswordStore* store,
-    std::vector<InsecureCredential> insecure_credentials) {
-  OnGetInsecureCredentials(std::move(insecure_credentials));
-}
-
-}  // namespace password_manager
diff --git a/components/password_manager/core/browser/insecure_credentials_consumer.h b/components/password_manager/core/browser/insecure_credentials_consumer.h
deleted file mode 100644
index 1b1ea522..0000000
--- a/components/password_manager/core/browser/insecure_credentials_consumer.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_INSECURE_CREDENTIALS_CONSUMER_H_
-#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_INSECURE_CREDENTIALS_CONSUMER_H_
-
-#include <vector>
-
-#include "base/task/cancelable_task_tracker.h"
-#include "components/password_manager/core/browser/insecure_credentials_table.h"
-
-namespace password_manager {
-
-class PasswordStore;
-
-// Reads information associated with insecure credentials history from the
-// PasswordStore. Reads are done asynchronously on a separate thread. It
-// provides the virtual callback method, which is guaranteed to be executed on
-// this (the UI) thread. It also provides the base::CancelableTaskTracker
-// member, which cancels any outstanding tasks upon destruction.
-class InsecureCredentialsConsumer {
- public:
-  InsecureCredentialsConsumer();
-
-  // Called when the GetAllInsecureCredentials() request is finished, with
-  // the associated |insecure_credentials|.
-  virtual void OnGetInsecureCredentials(
-      std::vector<InsecureCredential> insecure_credentials) = 0;
-
-  // Like OnGetInsecureCredentials(), but also receives the originating
-  // PasswordStore as a parameter. This is useful for consumers that query
-  // both the profile-scoped and the account-scoped store. The default
-  // implementation simply calls OnGetInsecureCredentials(), so consumers
-  // that don't care about the store can just ignore this.
-  virtual void OnGetInsecureCredentialsFrom(
-      PasswordStore* store,
-      std::vector<InsecureCredential> insecure_credentials);
-
-  // The base::CancelableTaskTracker can be used for cancelling the tasks
-  // associated with the consumer.
-  base::CancelableTaskTracker* cancelable_task_tracker() {
-    return &cancelable_task_tracker_;
-  }
-
-  base::WeakPtr<InsecureCredentialsConsumer> GetWeakPtr() {
-    return weak_ptr_factory_.GetWeakPtr();
-  }
-
- protected:
-  virtual ~InsecureCredentialsConsumer();
-
- private:
-  base::CancelableTaskTracker cancelable_task_tracker_;
-  base::WeakPtrFactory<InsecureCredentialsConsumer> weak_ptr_factory_{this};
-};
-
-}  // namespace password_manager
-
-#endif  // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_INSECURE_CREDENTIALS_CONSUMER_H_
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index f06016a6..4efe18b 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -975,7 +975,7 @@
     logger->LogSuccessfulSubmissionIndicatorEvent(submission_event);
 
   bool able_to_save_passwords =
-      client_->GetProfilePasswordStore()->IsAbleToSavePasswords();
+      client_->GetProfilePasswordStoreInterface()->IsAbleToSavePasswords();
   UMA_HISTOGRAM_BOOLEAN("PasswordManager.AbleToSavePasswordsOnSuccessfulLogin",
                         able_to_save_passwords);
   if (!able_to_save_passwords)
@@ -1284,7 +1284,7 @@
   if (!form_manager->is_submitted())
     return;
 
-  if (!client_->GetProfilePasswordStore()->IsAbleToSavePasswords() ||
+  if (!client_->GetProfilePasswordStoreInterface()->IsAbleToSavePasswords() ||
       !client_->IsSavingAndFillingEnabled(form_data.url) ||
       ShouldBlockPasswordForSameOriginButDifferentScheme(form_data.url)) {
     return;
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index c548712..842b143 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -33,14 +33,14 @@
 #include "components/password_manager/core/browser/leak_detection/leak_detection_check_factory.h"
 #include "components/password_manager/core/browser/leak_detection/mock_leak_detection_check_factory.h"
 #include "components/password_manager/core/browser/mock_password_reuse_manager.h"
-#include "components/password_manager/core/browser/mock_password_store.h"
+#include "components/password_manager/core/browser/mock_password_store_interface.h"
 #include "components/password_manager/core/browser/mock_smart_bubble_stats_store.h"
 #include "components/password_manager/core/browser/password_autofill_manager.h"
 #include "components/password_manager/core/browser/password_bubble_experiment.h"
 #include "components/password_manager/core/browser/password_form_manager.h"
 #include "components/password_manager/core/browser/password_form_manager_for_ui.h"
 #include "components/password_manager/core/browser/password_manager_driver.h"
-#include "components/password_manager/core/browser/password_store.h"
+#include "components/password_manager/core/browser/password_store_interface.h"
 #include "components/password_manager/core/browser/statistics_table.h"
 #include "components/password_manager/core/browser/stub_credentials_filter.h"
 #include "components/password_manager/core/browser/stub_password_manager_client.h"
@@ -162,8 +162,14 @@
               AutofillHttpAuth,
               (const PasswordForm&, const PasswordFormManagerForUI*),
               (override));
-  MOCK_METHOD(PasswordStore*, GetProfilePasswordStore, (), (const, override));
-  MOCK_METHOD(PasswordStore*, GetAccountPasswordStore, (), (const, override));
+  MOCK_METHOD(PasswordStoreInterface*,
+              GetProfilePasswordStoreInterface,
+              (),
+              (const, override));
+  MOCK_METHOD(PasswordStoreInterface*,
+              GetAccountPasswordStoreInterface,
+              (),
+              (const, override));
   MOCK_METHOD(PasswordReuseManager*,
               GetPasswordReuseManager,
               (),
@@ -369,10 +375,9 @@
 
  protected:
   void SetUp() override {
-    store_ = new MockPasswordStore;
-    ASSERT_TRUE(store_->Init(/*prefs=*/nullptr));
+    store_ = new MockPasswordStoreInterface;
 
-    ON_CALL(client_, GetProfilePasswordStore())
+    ON_CALL(client_, GetProfilePasswordStoreInterface())
         .WillByDefault(Return(store_.get()));
 
     ON_CALL(*store_, GetSmartBubbleStatsStore)
@@ -380,10 +385,9 @@
 
     if (base::FeatureList::IsEnabled(
             features::kEnablePasswordsAccountStorage)) {
-      account_store_ = new MockPasswordStore;
-      ASSERT_TRUE(account_store_->Init(/*prefs=*/nullptr));
+      account_store_ = new MockPasswordStoreInterface;
 
-      ON_CALL(client_, GetAccountPasswordStore())
+      ON_CALL(client_, GetAccountPasswordStoreInterface())
           .WillByDefault(Return(account_store_.get()));
 
       // Most tests don't really need the account store, but it'll still get
@@ -625,8 +629,8 @@
 
   const GURL test_url_{"https://www.example.com"};
   base::test::SingleThreadTaskEnvironment task_environment_;
-  scoped_refptr<MockPasswordStore> store_;
-  scoped_refptr<MockPasswordStore> account_store_;
+  scoped_refptr<MockPasswordStoreInterface> store_;
+  scoped_refptr<MockPasswordStoreInterface> account_store_;
   MockPasswordReuseManager reuse_manager_;
   testing::NiceMock<MockPasswordManagerClient> client_;
   MockPasswordManagerDriver driver_;
diff --git a/components/password_manager/core/browser/password_manager_util.cc b/components/password_manager/core/browser/password_manager_util.cc
index bddec038..b8690e8 100644
--- a/components/password_manager/core/browser/password_manager_util.cc
+++ b/components/password_manager/core/browser/password_manager_util.cc
@@ -170,7 +170,7 @@
 // created.
 void RemoveUselessCredentials(
     password_manager::CredentialsCleanerRunner* cleaning_tasks_runner,
-    scoped_refptr<password_manager::PasswordStore> store,
+    scoped_refptr<password_manager::PasswordStoreInterface> store,
     PrefService* prefs,
     base::TimeDelta delay,
     base::RepeatingCallback<network::mojom::NetworkContext*()>
diff --git a/components/password_manager/core/browser/password_manager_util.h b/components/password_manager/core/browser/password_manager_util.h
index 3d7c8bb..ae051d2 100644
--- a/components/password_manager/core/browser/password_manager_util.h
+++ b/components/password_manager/core/browser/password_manager_util.h
@@ -14,7 +14,7 @@
 #include "components/device_reauth/biometric_authenticator.h"
 #include "components/password_manager/core/browser/password_form.h"
 #include "components/password_manager/core/browser/password_manager_client.h"
-#include "components/password_manager/core/browser/password_store.h"
+#include "components/password_manager/core/browser/password_store_interface.h"
 #include "ui/gfx/native_widget_types.h"
 
 namespace network {
@@ -87,7 +87,7 @@
 // and it can also be null for some unittests.
 void RemoveUselessCredentials(
     password_manager::CredentialsCleanerRunner* cleaning_tasks_runner,
-    scoped_refptr<password_manager::PasswordStore> store,
+    scoped_refptr<password_manager::PasswordStoreInterface> store,
     PrefService* prefs,
     base::TimeDelta delay,
     base::RepeatingCallback<network::mojom::NetworkContext*()>
diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc
index 2fce65f..2a25346 100644
--- a/components/password_manager/core/browser/password_store.cc
+++ b/components/password_manager/core/browser/password_store.cc
@@ -31,8 +31,6 @@
 #include "components/autofill/core/common/form_data.h"
 #include "components/password_manager/core/browser/android_affiliation/affiliated_match_helper.h"
 #include "components/password_manager/core/browser/get_logins_with_affiliations_request_handler.h"
-#include "components/password_manager/core/browser/insecure_credentials_consumer.h"
-#include "components/password_manager/core/browser/insecure_credentials_table.h"
 #include "components/password_manager/core/browser/password_form.h"
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
 #include "components/password_manager/core/browser/password_manager_util.h"
@@ -380,16 +378,6 @@
   LOG(ERROR) << "Called function without implementation: " << __func__;
 }
 
-void PasswordStore::InvokeAndNotifyAboutInsecureCredentialsChange(
-    base::OnceCallback<PasswordStoreChangeList()> callback) {
-  DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
-  PasswordStoreChangeList changes = std::move(callback).Run();
-  main_task_runner_->PostTask(
-      FROM_HERE,
-      base::BindOnce(&PasswordStore::NotifyLoginsChangedOnMainSequence, this,
-                     changes));
-}
-
 void PasswordStore::OnInitCompleted(bool success) {
   DCHECK(main_task_runner_->RunsTasksInCurrentSequence());
   init_status_ = success ? InitStatus::kSuccess : InitStatus::kFailure;
@@ -411,15 +399,6 @@
   }
 }
 
-void PasswordStore::PostInsecureCredentialsTaskAndReplyToConsumerWithResult(
-    InsecureCredentialsConsumer* consumer,
-    InsecureCredentialsTask task) {
-  consumer->cancelable_task_tracker()->PostTaskAndReplyWithResult(
-      background_task_runner_.get(), FROM_HERE, std::move(task),
-      base::BindOnce(&InsecureCredentialsConsumer::OnGetInsecureCredentialsFrom,
-                     consumer->GetWeakPtr(), base::RetainedRef(this)));
-}
-
 void PasswordStore::UnblocklistInternal(
     base::OnceClosure completion,
     std::vector<std::unique_ptr<PasswordForm>> forms) {
diff --git a/components/password_manager/core/browser/password_store.h b/components/password_manager/core/browser/password_store.h
index 71457db..87ce642 100644
--- a/components/password_manager/core/browser/password_store.h
+++ b/components/password_manager/core/browser/password_store.h
@@ -48,8 +48,6 @@
 
 class AffiliatedMatchHelper;
 class PasswordStoreConsumer;
-class InsecureCredentialsConsumer;
-class PasswordStoreConsumer;
 
 // Partial, cross-platform implementation for storing form passwords.
 // The login request/manipulation API is not threadsafe and must be used
@@ -168,13 +166,6 @@
                                  bool custom_passphrase_sync_enabled,
                                  BulkCheckDone bulk_check_done);
 
-
-  // Invokes callback and notifies observers if there was a change to the list
-  // of insecure passwords. It also informs Sync about the updated password
-  // forms to sync up the changes about insecure credentials.
-  void InvokeAndNotifyAboutInsecureCredentialsChange(
-      base::OnceCallback<PasswordStoreChangeList()> callback);
-
   scoped_refptr<base::SequencedTaskRunner> main_task_runner() const {
     return main_task_runner_;
   }
@@ -201,13 +192,6 @@
   void NotifyLoginsChangedOnMainSequence(
       const PasswordStoreChangeList& changes);
 
-  // Schedules the given |task| to be run on the PasswordStore's TaskRunner.
-  // Invokes |consumer|->OnGetInsecureCredentials() on the caller's thread
-  // with the result.
-  void PostInsecureCredentialsTaskAndReplyToConsumerWithResult(
-      InsecureCredentialsConsumer* consumer,
-      InsecureCredentialsTask task);
-
   // The following methods notify observers that the password store may have
   // been modified via NotifyLoginsChangedOnMainSequence(). Note that there is
   // no guarantee that the called method will actually modify the password store
diff --git a/components/password_manager/core/browser/password_store_unittest.cc b/components/password_manager/core/browser/password_store_unittest.cc
index 01c420b..51a0194 100644
--- a/components/password_manager/core/browser/password_store_unittest.cc
+++ b/components/password_manager/core/browser/password_store_unittest.cc
@@ -26,7 +26,6 @@
 #include "components/password_manager/core/browser/android_affiliation/android_affiliation_service.h"
 #include "components/password_manager/core/browser/android_affiliation/mock_affiliated_match_helper.h"
 #include "components/password_manager/core/browser/form_parsing/form_parser.h"
-#include "components/password_manager/core/browser/insecure_credentials_consumer.h"
 #include "components/password_manager/core/browser/password_form.h"
 #include "components/password_manager/core/browser/password_manager_test_utils.h"
 #include "components/password_manager/core/browser/password_reuse_detector.h"
@@ -91,16 +90,6 @@
 constexpr const char kTestAndroidIconURL2[] = "https://example.com/icon_2.png";
 constexpr const time_t kTestLastUsageTime = 1546300800;  // 00:00 Jan 1 2019 UTC
 
-class MockInsecureCredentialsConsumer : public InsecureCredentialsConsumer {
- public:
-  MockInsecureCredentialsConsumer() = default;
-
-  MOCK_METHOD1(OnGetInsecureCredentials, void(std::vector<InsecureCredential>));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockInsecureCredentialsConsumer);
-};
-
 class MockPasswordStoreConsumer : public PasswordStoreConsumer {
  public:
   MockPasswordStoreConsumer() = default;
@@ -498,7 +487,6 @@
   store->AddLogin(*test_form);
   WaitForPasswordStore();
 
-  MockInsecureCredentialsConsumer consumer;
   kTestCredential.password_value = u"password_value_2";
   std::unique_ptr<PasswordForm> test_form_2(
       FillPasswordFormWithData(kTestCredential));
diff --git a/components/permissions/permission_uma_util.cc b/components/permissions/permission_uma_util.cc
index 04dc41a..f990d07b 100644
--- a/components/permissions/permission_uma_util.cc
+++ b/components/permissions/permission_uma_util.cc
@@ -857,10 +857,29 @@
   std::string permission_string =
       GetPermissionRequestString(GetUmaValueForRequestType(
           ContentSettingsTypeToRequestType(permission_type)));
+  auto transition = GetAutoDSEPermissionRevertedTransition(
+      backed_up_setting, effective_setting, end_state_setting);
   base::UmaHistogramEnumeration(
       "Permissions.DSE.AutoPermissionRevertTransition." + permission_string,
-      GetAutoDSEPermissionRevertedTransition(
-          backed_up_setting, effective_setting, end_state_setting));
+      transition);
+
+  if (transition == AutoDSEPermissionRevertTransition::INVALID_END_STATE) {
+    base::UmaHistogramEnumeration(
+        "Permissions.DSE.InvalidAutoPermissionRevertTransition."
+        "BackedUpSetting." +
+            permission_string,
+        backed_up_setting, CONTENT_SETTING_NUM_SETTINGS);
+    base::UmaHistogramEnumeration(
+        "Permissions.DSE.InvalidAutoPermissionRevertTransition."
+        "EffectiveSetting." +
+            permission_string,
+        effective_setting, CONTENT_SETTING_NUM_SETTINGS);
+    base::UmaHistogramEnumeration(
+        "Permissions.DSE.InvalidAutoPermissionRevertTransition."
+        "EndStateSetting." +
+            permission_string,
+        end_state_setting, CONTENT_SETTING_NUM_SETTINGS);
+  }
 }
 
 // static
diff --git a/components/permissions/permission_uma_util_unittest.cc b/components/permissions/permission_uma_util_unittest.cc
index f8ed456..2a49c7f 100644
--- a/components/permissions/permission_uma_util_unittest.cc
+++ b/components/permissions/permission_uma_util_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/content_settings/core/common/content_settings_pattern.h"
+#include "components/content_settings/core/common/content_settings_types.h"
 #include "components/permissions/test/test_permissions_client.h"
 #include "content/public/test/browser_task_environment.h"
 #include "content/public/test/test_browser_context.h"
@@ -140,10 +141,10 @@
 // Test that the appropriate UMA metrics have been recorded when the DSE is
 // disabled.
 TEST_F(PermissionUmaUtilTest, MetricsAreRecordedWhenAutoDSEPermissionReverted) {
-  constexpr char kNotificationsHistogram[] =
-      "Permissions.DSE.AutoPermissionRevertTransition.Notifications";
-  constexpr char kGeolocationHistogram[] =
-      "Permissions.DSE.AutoPermissionRevertTransition.Geolocation";
+  const std::string kTransitionHistogramPrefix =
+      "Permissions.DSE.AutoPermissionRevertTransition.";
+  const std::string kInvalidTransitionHistogramPrefix =
+      "Permissions.DSE.InvalidAutoPermissionRevertTransition.";
 
   constexpr struct {
     ContentSetting backed_up_setting;
@@ -181,23 +182,44 @@
   for (const auto& test : kTests) {
     for (const auto type : {ContentSettingsType::NOTIFICATIONS,
                             ContentSettingsType::GEOLOCATION}) {
+      const std::string type_string = type == ContentSettingsType::NOTIFICATIONS
+                                          ? "Notifications"
+                                          : "Geolocation";
       base::HistogramTester histograms;
       PermissionUmaUtil::RecordAutoDSEPermissionReverted(
           type, test.backed_up_setting, test.effective_setting,
           test.end_state_setting);
 
       // Test that the expected samples are recorded in histograms.
-      for (auto sample = static_cast<int>(
-               permissions::AutoDSEPermissionRevertTransition::NO_DECISION_ASK);
-           sample <
-           static_cast<int>(
-               permissions::AutoDSEPermissionRevertTransition::kMaxValue);
-           ++sample) {
-        histograms.ExpectBucketCount(
-            type == ContentSettingsType::NOTIFICATIONS ? kNotificationsHistogram
-                                                       : kGeolocationHistogram,
-            sample,
-            static_cast<int>(test.expected_transition) == sample ? 1 : 0);
+      histograms.ExpectBucketCount(kTransitionHistogramPrefix + type_string,
+                                   test.expected_transition, 1);
+      histograms.ExpectTotalCount(kTransitionHistogramPrefix + type_string, 1);
+
+      if (test.expected_transition ==
+          permissions::AutoDSEPermissionRevertTransition::INVALID_END_STATE) {
+        // If INVALID_END_STATE is recorded, there should be more histograms.
+        const std::string backed_up_histogram =
+            kInvalidTransitionHistogramPrefix + "BackedUpSetting." +
+            type_string;
+        const std::string effective_histogram =
+            kInvalidTransitionHistogramPrefix + "EffectiveSetting." +
+            type_string;
+        const std::string end_state_histogram =
+            kInvalidTransitionHistogramPrefix + "EndStateSetting." +
+            type_string;
+        histograms.ExpectBucketCount(backed_up_histogram,
+                                     test.backed_up_setting, 1);
+        histograms.ExpectBucketCount(effective_histogram,
+                                     test.effective_setting, 1);
+        histograms.ExpectBucketCount(end_state_histogram,
+                                     test.end_state_setting, 1);
+        histograms.ExpectTotalCount(backed_up_histogram, 1);
+        histograms.ExpectTotalCount(effective_histogram, 1);
+        histograms.ExpectTotalCount(end_state_histogram, 1);
+      } else {
+        EXPECT_EQ(base::HistogramTester::CountsMap(),
+                  histograms.GetTotalCountsForPrefix(
+                      "Permissions.DSE.InvalidAutoPermissionRevertTransition"));
       }
     }
   }
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index 508d342..feb9ca9 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -93,6 +93,7 @@
 <translation id="1096105751829466145">Penyedia penelusuran default</translation>
 <translation id="1099282607296956954">Aktifkan Isolasi Situs untuk setiap situs</translation>
 <translation id="1105572260329131950">Gunakan ikon default untuk koneksi aman</translation>
+<translation id="1110426799149444997">Nonaktifkan penelusuran region <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
 <translation id="1117535567637097036">Penanganan protokol yang disetel melalui kebijakan ini tidak digunakan ketika menangani maksud Android.</translation>
 <translation id="1118093128235245168">Izinkan situs meminta pengguna memberikan akses ke perangkat USB yang tersambung</translation>
 <translation id="111910763555783249">Setelan notifikasi</translation>
@@ -351,6 +352,7 @@
       Jika kebijakan tidak disetel, <ph name="PRODUCT_NAME" /> akan mencoba mendeteksi apakah server ada di intranet. Setelah itu, barulah permintaan IWA akan direspons. Jika server dideteksi sebagai intranet, <ph name="PRODUCT_NAME" /> akan mengabaikan permintaan IWA darinya.
 
       Catatan: Pisahkan beberapa nama server dengan koma. Karakter pengganti, <ph name="WILDCARD_VALUE" />, diizinkan.</translation>
+<translation id="1488724823347505879">Mengaktifkan berbagi dari aplikasi Android ke aplikasi Web</translation>
 <translation id="1495817006535797003">Jika kebijakan disetel, setiap asal bernama dalam daftar yang dipisahkan koma akan menjalankan prosesnya sendiri, dan mengisolasi asal yang diberi nama berdasarkan subdomain. Misalnya, menentukan https://example.com/ akan mengisolasi https://foo.example.com/ sebagai bagian dari situs https://example.com/.  Perhatikan bahwa Android mengisolasi situs sensitif tertentu secara default mulai <ph name="PRODUCT_NAME" /> versi 77, dan kebijakan ini memperluas mode tersebut untuk mengisolasi asal tambahan tertentu.
 
       Jika kebijakan disetel ke Nonaktif, semua bentuk isolasi situs akan dinonaktifkan, termasuk isolasi situs sensitif dan uji coba kolom IsolateOriginsAndroid, SitePerProcessAndroid, dan mode isolasi situs lainnya. Pengguna masih dapat mengaktifkan IsolateOrigins secara manual melalui tanda command line.
@@ -730,6 +732,7 @@
       Sebelum peluncuran, kebijakan perusahaan ini tidak akan berlaku. Setelah peluncuran, ketika kebijakan perusahaan ini diaktifkan, kebijakan perujuk default Chrome akan disetel ke nilai sebelumnya, yaitu no-referrer-when-downgrade.
 
       Kebijakan perusahaan ini dinonaktifkan secara default.</translation>
+<translation id="1960416154405676350">Aktifkan penelusuran region <ph name="GOOGLE_LENS_PRODUCT_NAME" />.</translation>
 <translation id="1962273523772270623">Mengizinkan pengumpulan log aktivitas WebRTC dari layanan Google</translation>
 <translation id="1962864958436828230">Menyetel batas ukuran minimal untuk batasan papan klip pencegahan kebocoran data</translation>
 <translation id="1964634611280150550">Mode samaran dinonaktifkan</translation>
@@ -1541,6 +1544,7 @@
 <translation id="288448261660192095">Jika disetel ke Aktif, perangkat input dan output fisik host akses jarak jauh akan dinonaktifkan selama koneksi jarak jauh berlangsung.
 
       Jika kebijakan disetel ke Nonaktif atau tidak disetel, pengguna lokal dan jarak jauh akan diizinkan untuk berinteraksi dengan host saat host dibagikan.</translation>
+<translation id="2884765974461416016">Nonaktifkan berbagi Aplikasi Android ke Aplikasi Web.</translation>
 <translation id="2886215882246310669">Mengontrol apakah <ph name="PRODUCT_OS_NAME" /> mengizinkan akun pengguna Family Link baru ditambahkan ke perangkat atau tidak.
       Kebijakan ini hanya berguna jika digunakan bersama <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />. Ini akan mengizinkan akun Family Link ditambahkan ke akun yang ditentukan dalam daftar yang diizinkan.
       Kebijakan ini tidak memengaruhi perilaku kebijakan login lainnya. Biasanya, ini tidak akan berpengaruh jika:
@@ -3755,6 +3759,7 @@
       Jika Anda menyetel kebijakan, pengguna tidak dapat mengubahnya di <ph name="PRODUCT_NAME" />. Jika tidak disetel, pengguna dapat memilih apakah akan membuka PDF secara eksternal atau tidak.</translation>
 <translation id="570062449808736508">Jika kebijakan ini disetel ke string yang tidak kosong, WebView akan membaca batasan URL dari penyedia konten dengan nama otoritas yang diberikan.</translation>
 <translation id="5708969689202733975">Mengonfigurasi mode buka kunci cepat yang diizinkan</translation>
+<translation id="5714563837055244378">Aktifkan berbagi Aplikasi Android ke Aplikasi Web.</translation>
 <translation id="5715617256528927547">Menyetel kebijakan akan menentukan masa berlaku cache Objek Kebijakan Grup (GPO) dalam hitungan jam. GPO dengan durasi maksimum dapat digunakan kembali sebelum didownload ulang. Daripada mendownload ulang GPO pada setiap pengambilan kebijakan, sistem akan menggunakan kembali GPO yang di-cache selama versinya tidak berubah.
 
       Menyetel kebijakan ke 0 akan menonaktifkan penyimpanan GPO ke cache. Hal ini akan meningkatkan beban server karena GPO didownload ulang pada setiap pengambilan kebijakan, meskipun GPO tidak berubah.
@@ -4924,6 +4929,9 @@
 <translation id="710003290625031750">Deskripsi skema yang diluaskan:</translation>
 <translation id="7101550508196914704">Jangan tampilkan pintasan aplikasi di kolom bookmark</translation>
 <translation id="7109384070286741861">Nonaktifkan CECPQ2</translation>
+<translation id="7122626777103192518">Jika kebijakan disetel ke Benar (True), berbagi teks/file dari aplikasi Android ke Aplikasi Web yang didukung akan diizinkan, menggunakan sistem berbagi Android bawaan.
+      Jika diaktifkan, kebijakan ini akan mengirimkan metadata untuk Aplikasi Web terinstal ke Google guna membuat dan menginstal aplikasi Android stub.
+      Jika kebijakan disetel ke Salah (False), fungsi ini akan dinonaktifkan.</translation>
 <translation id="7126716959063786004">Aktifkan proses diakhiri di Pengelola Tugas</translation>
 <translation id="7126928806195745404">Setelan JavaScript</translation>
 <translation id="7127892035367404455">Rollback ke versi target</translation>
@@ -5473,6 +5481,7 @@
       Kebijakan ini hanya dapat disetel dari <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.</translation>
 <translation id="7816326058023670173">Rahasia dibagikan antara perangkat anak dan orang tua.</translation>
 <translation id="7818131573217430250">Menyetel status default mode kontras tinggi di layar masuk</translation>
+<translation id="7821864705813933283">Mengizinkan item menu penelusuran region <ph name="GOOGLE_LENS_PRODUCT_NAME" /> ditampilkan di menu konteks jika didukung.</translation>
 <translation id="7823902813460802031">Jika kebijakan ini disetel ke Aktif, <ph name="PRODUCT_OS_NAME" /> akan menghentikan perangkat beralih ke mode Developer.
 
        Jika kebijakan ini disetel ke Nonaktif atau tidak disetel, mode Developer akan tersedia untuk perangkat.</translation>
@@ -5751,6 +5760,7 @@
 <translation id="8238421250255592181">Tanda boolean menunjukkan apakah keyboard virtual dapat memberikan pelengkapan otomatis.</translation>
 <translation id="8244171102276095471">Mengaktifkan paket penyandian RC4 di TLS</translation>
 <translation id="8244525275280476362">Penundaan mengambil maksimum setelah kebijakan invalidasi</translation>
+<translation id="8245574649143980200">Jika kebijakan tidak disetel atau disetel ke Aktif, pengguna akan diizinkan melihat dan menggunakan item menu penelusuran region <ph name="GOOGLE_LENS_PRODUCT_NAME" /> di menu konteks. Jika kebijakan disetel ke Nonaktif, pengguna tidak akan dapat melihat item menu penelusuran region <ph name="GOOGLE_LENS_PRODUCT_NAME" /> di menu konteks saat penelusuran region <ph name="GOOGLE_LENS_PRODUCT_NAME" /> didukung.</translation>
 <translation id="82530263956734297">ID Ekstensi yang dikeluarkan dari daftar yang tidak diizinkan</translation>
 <translation id="8256688113167012935">Mengontrol nama akun yang ditampilkan <ph name="PRODUCT_OS_NAME" /> di layar masuk untuk akun lokal perangkat yang sesuai.
 
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 8743a35..a3185675 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -93,6 +93,7 @@
 <translation id="1096105751829466145">기본 검색 공급자</translation>
 <translation id="1099282607296956954">모든 사이트에 사이트 격리 사용 설정</translation>
 <translation id="1105572260329131950">보안 연결일 경우 기본 아이콘 표시</translation>
+<translation id="1110426799149444997"><ph name="GOOGLE_LENS_PRODUCT_NAME" /> 영역 검색을 사용 중지합니다.</translation>
 <translation id="1117535567637097036">Android 인텐트를 처리할 때 이 정책을 통해 설정된 프로토콜 핸들러는 사용되지 않습니다.</translation>
 <translation id="1118093128235245168">사이트에서 사용자에게 연결된 USB 기기의 액세스 권한을 부여할지 묻도록 허용합니다.</translation>
 <translation id="111910763555783249">알림 설정</translation>
@@ -352,6 +353,7 @@
       정책을 설정하지 않으면 <ph name="PRODUCT_NAME" />에서 서버가 인트라넷에 있는지 감지합니다. 그런 다음에만 IWA 요청에 응답합니다. 서버가 인터넷으로 감지되면 <ph name="PRODUCT_NAME" />에서 서버의 IWA 요청을 무시합니다.
 
       참고: 서로 다른 서버 이름은 쉼표로 구분하세요. 와일드 카드(<ph name="WILDCARD_VALUE" />)를 사용할 수 있습니다.</translation>
+<translation id="1488724823347505879">Android 앱에서 웹 앱으로의 공유를 사용 설정합니다.</translation>
 <translation id="1495817006535797003">이 정책을 설정하면 쉼표로 구분된 목록에서 이름이 지정된 각 출처가 자체 프로세스로 작동하며 하위 도메인으로 이름이 지정된 출처는 격리됩니다. 예를 들어 https://example.com/을 지정하면 https://foo.example.com/도 https://example.com/ 사이트의 일부로 격리됩니다.  Android에서는 <ph name="PRODUCT_NAME" /> 버전 77부터 기본적으로 특정 민감한 사이트가 격리됩니다. 이 정책을 설정하면 이 기본적인 격리 모드가 특정 출처를 추가로 격리하도록 확장됩니다.
 
       정책을 사용 중지로 설정하면 모든 형태의 사이트 격리가 중단됩니다. 여기에는 민감한 사이트의 격리와 IsolateOriginsAndroid, SitePerProcessAndroid 및 기타 사이트 격리 모드의 공개 실험도 포함됩니다. 사용자는 계속해서 명령줄 플래그를 통해 IsolateOrigins를 직접 사용 설정할 수 있습니다.
@@ -727,6 +729,7 @@
       출시 전에는 이 기업 정책이 적용되지 않습니다. 출시 후 정책을 사용 설정하면 Chrome의 기본 리퍼러 정책이 이전 값인 no-referrer-when-downgrade로 설정됩니다.
 
       이 기업 정책은 기본적으로 사용 중지되어 있습니다.</translation>
+<translation id="1960416154405676350"><ph name="GOOGLE_LENS_PRODUCT_NAME" /> 영역 검색을 사용 설정합니다.</translation>
 <translation id="1962273523772270623">Google 서비스의 WebRTC 이벤트 로그 수집 허용</translation>
 <translation id="1962864958436828230">데이터 유출 방지를 위한 클립보드 제한용 최소 크기 한도 설정</translation>
 <translation id="1964634611280150550">시크릿 모드 사용이 중지됨</translation>
@@ -1537,6 +1540,7 @@
 <translation id="288448261660192095">정책을 사용 설정하면 원격 연결 중에 원격 액세스 호스트의 물리적 입력과 출력 기기가 사용 중지됩니다.
 
       정책을 사용 중지하거나 설정하지 않으면 로컬 및 원격 사용자 모두 공유 중에 호스트와 상호작용할 수 있습니다.</translation>
+<translation id="2884765974461416016">Android 앱에서 웹 앱으로의 공유를 사용 중지합니다.</translation>
 <translation id="2886215882246310669"><ph name="PRODUCT_OS_NAME" />에서 새로운 Family Link 사용자 계정이 기기에 추가되도록 허용할지 선택합니다.
       이 정책은 <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />와 결합해서 사용할 때만 유용합니다. 이 정책은 허용 목록에서 정의된 계정에 Family Link 계정을 추가적으로 허용합니다.
       다른 로그인 정책의 동작에는 영향을 주지 않습니다. 특히 다음과 같은 경우 어떠한 영향도 주지 않습니다.
@@ -3742,6 +3746,7 @@
       정책을 설정하면 사용자가 <ph name="PRODUCT_NAME" />에서 정책을 변경할 수 없습니다. 설정하지 않으면 사용자가 외부에서 PDF를 열지를 선택할 수 있습니다.</translation>
 <translation id="570062449808736508">웹 제한 권한 정책이 비어있지 않은 문자열로 설정된 경우 WebView는 주어진 권한 이름으로 콘텐츠 제공업체로부터 URL 제한을 읽습니다.</translation>
 <translation id="5708969689202733975">허용된 빠른 잠금 해제 모드를 설정합니다.</translation>
+<translation id="5714563837055244378">Android에서 웹 앱 공유를 사용 설정합니다.</translation>
 <translation id="5715617256528927547">정책을 설정하면 그룹 정책 객체(GPO)의 전체 기간을 시간 단위로 지정합니다. 이는 GPO가 다시 다운로드되기 전에 다시 사용될 수 있는 최대 기간을 의미합니다. 정책을 가져올 때마다 GPO를 다시 다운로드하는 대신 시스템에서 캐시된 GPO를 재사용(버전이 바뀌지 않는다는 전제하에) 합니다.
 
       정책을 0으로 설정하면 GPO 캐시가 사용 중지됩니다. 이렇게 하면 GPO가 바뀌지 않더라도 정책을 가져올 때마다 GPO가 다시 다운로드되어 서버 로드가 증가합니다.
@@ -4911,6 +4916,9 @@
 <translation id="710003290625031750">확장된 스키마 설명:</translation>
 <translation id="7101550508196914704">북마크바에 앱 바로가기 표시 안함</translation>
 <translation id="7109384070286741861">CECPQ2 사용 중지</translation>
+<translation id="7122626777103192518">정책을 True로 설정하면 내장된 Android 공유 시스템을 사용해 Android 앱에서 지원되는 웹 앱으로 텍스트 및 파일을 공유할 수 있습니다.
+      사용 설정하면 설치된 웹 앱의 메타데이터가 Google에 전송되어 shim Android 앱이 생성 및 설치됩니다.
+      False로 설정하면 기능이 사용 중지됩니다.</translation>
 <translation id="7126716959063786004">작업 관리자의 종료 프로세스 사용</translation>
 <translation id="7126928806195745404">자바스크립트 설정</translation>
 <translation id="7127892035367404455">대상 버전으로 롤백</translation>
@@ -5463,6 +5471,7 @@
       이 정책은 <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />에서만 설정할 수 있습니다.</translation>
 <translation id="7816326058023670173">자녀와 부모 기기 간에 공유된 보안 비밀입니다.</translation>
 <translation id="7818131573217430250">로그인 화면에서 고대비 모드의 기본 상태를 설정</translation>
+<translation id="7821864705813933283">지원되는 경우 <ph name="GOOGLE_LENS_PRODUCT_NAME" /> 영역 검색 메뉴 항목이 컨텍스트 메뉴에 표시되도록 허용합니다.</translation>
 <translation id="7823902813460802031">이 정책을 사용으로 설정하면 <ph name="PRODUCT_OS_NAME" />에서 기기가 개발자 모드로 전환되지 못하게 합니다.
 
        사용 안함으로 설정하거나 설정하지 않으면 기기에서 계속 개발자 모드를 사용할 수 있습니다.</translation>
@@ -5746,6 +5755,7 @@
 <translation id="8238421250255592181">터치 키보드가 자동 완성을 지원할 수 있는지 나타내는 부울 플래그입니다.</translation>
 <translation id="8244171102276095471">TLS에서 RC4 암호화 기술을 사용 설정합니다.</translation>
 <translation id="8244525275280476362">정책 무효화 후 최대 가져오기 지연</translation>
+<translation id="8245574649143980200">정책을 설정하지 않거나 사용 설정하면 사용자가 컨텍스트 메뉴에서 <ph name="GOOGLE_LENS_PRODUCT_NAME" /> 영역 검색을 보고 사용할 수 있습니다. 사용 중지하면 <ph name="GOOGLE_LENS_PRODUCT_NAME" /> 영역 검색이 지원되는 경우에도 컨텍스트 메뉴에 <ph name="GOOGLE_LENS_PRODUCT_NAME" /> 영역 검색 메뉴 항목이 표시되지 않습니다.</translation>
 <translation id="82530263956734297">차단 목록에서 제외할 확장 프로그램 ID</translation>
 <translation id="8256688113167012935">계정 이름 <ph name="PRODUCT_OS_NAME" />을(를) 해당 기기 로컬 계정의 로그인 화면에 표시할 것인지 제어합니다.
 
diff --git a/components/services/app_service/public/mojom/types.mojom b/components/services/app_service/public/mojom/types.mojom
index f740a40..ee2dbcc 100644
--- a/components/services/app_service/public/mojom/types.mojom
+++ b/components/services/app_service/public/mojom/types.mojom
@@ -354,6 +354,7 @@
   // difficult or expensive.
 
   string? mime_type;  // File MIME type.
+  // TODO(crbug.com/1238215): Use BaseName instead, when available.
   string? file_name;  // Human readable file name, including extension. Should
                       // not contain path separators.
   uint64 file_size;   // File size in bytes.
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb
index 41e7aab..55bbcaf 100644
--- a/components/strings/components_strings_az.xtb
+++ b/components/strings/components_strings_az.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">Saytlar yaxınlıqdakı Bluetooth cihazlarını aşkarlamaq üçün icazə istəyə bilər</translation>
 <translation id="1426410128494586442">Bəli</translation>
 <translation id="1428146450423315676">Yığıcı 7</translation>
+<translation id="1428729058023778569">Bu sayt HTTPS-i dəstəkləmədiyinə görə bu xəbərdarlığı görürsünüz. <ph name="BEGIN_LEARN_MORE_LINK" />Ətraflı məlumat<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">Çap edin</translation>
 <translation id="1436185428532214179">Saytlar cihazınızdakı faylları və qovluqları redaktə etmək üçün icazə istəyə bilər</translation>
 <translation id="1442386063175183758">Sağ küncə qatlayın</translation>
@@ -647,6 +648,7 @@
 <translation id="3282497668470633863">Kart üzərindəki adı daxil edin</translation>
 <translation id="3286372614333682499">portret</translation>
 <translation id="3287510313208355388">Onlayn olarkən endirin</translation>
+<translation id="3288238092761586174"><ph name="URL" /> ödənişinizi doğrulamaq üçün əlavə addımlar atmalı ola bilər</translation>
 <translation id="3293642807462928945"><ph name="POLICY_NAME" /> siyasəti haqqında ətraflı məlumat əldə edin</translation>
 <translation id="3295444047715739395">Parollarınıza Chrome ayarlarında baxın və idarə edin</translation>
 <translation id="3303855915957856445">Heç bir axtarış nəticəsi tapılmadı</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb
index 17d3fa0..a0aaddbb7 100644
--- a/components/strings/components_strings_be.xtb
+++ b/components/strings/components_strings_be.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">Сайт можа запытваць дазвол выяўляць прылады з Bluetooth паблізу</translation>
 <translation id="1426410128494586442">Так</translation>
 <translation id="1428146450423315676">Укладчык 7</translation>
+<translation id="1428729058023778569">Гэта папярэджанне паказана вам, бо дадзены сайт не падтрымлівае HTTPS. <ph name="BEGIN_LEARN_MORE_LINK" />Даведацца больш<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">Друк</translation>
 <translation id="1436185428532214179">Сайт можа запытваць дазвол на змяненне файлаў або папак на прыладзе</translation>
 <translation id="1442386063175183758">Згіб "вароты" справа</translation>
@@ -649,6 +650,7 @@
 <translation id="3282497668470633863">Дадайце імя, указанае на картцы</translation>
 <translation id="3286372614333682499">кніжная</translation>
 <translation id="3287510313208355388">Спампаваць пры падключэнні да інтэрнэту</translation>
+<translation id="3288238092761586174">Каб спраўдзіць ваш плацеж, сайту <ph name="URL" /> можа спатрэбіцца выканаць дадатковыя дзеянні</translation>
 <translation id="3293642807462928945">Даведацца больш пра палітыку "<ph name="POLICY_NAME" />"</translation>
 <translation id="3295444047715739395">Праглядаць свае паролі і кіраваць імі ў наладах Chrome</translation>
 <translation id="3303855915957856445">Няма вынікаў пошуку</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 358f5a1..b20e2d65 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">Může žádat o objevování zařízení Bluetooth v okolí</translation>
 <translation id="1426410128494586442">Ano</translation>
 <translation id="1428146450423315676">Stohovač 7</translation>
+<translation id="1428729058023778569">Toto varování se vám zobrazuje, protože tento web nepodporuje protokol HTTPS. <ph name="BEGIN_LEARN_MORE_LINK" />Další informace<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">Tisk</translation>
 <translation id="1436185428532214179">Může žádat o úpravu souborů a složek v zařízení</translation>
 <translation id="1442386063175183758">Pravé otevírací přeložení</translation>
@@ -642,6 +643,7 @@
 <translation id="3282497668470633863">Přidání jména na kartě</translation>
 <translation id="3286372614333682499">na výšku</translation>
 <translation id="3287510313208355388">Stáhnout, až bude zařízení online</translation>
+<translation id="3288238092761586174"><ph name="URL" /> zřejmě bude muset vaši platbu ověřit pomocí dodatečných kroků</translation>
 <translation id="3293642807462928945">Další informace o zásadě <ph name="POLICY_NAME" /></translation>
 <translation id="3295444047715739395">Zobrazte a spravujte svá hesla v nastavení Chromu</translation>
 <translation id="3303855915957856445">Nebyly nalezeny žádné výsledky</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 98efccc..fb02fff 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">Puede solicitar permiso para establecer conexión con dispositivos Bluetooth cercanos</translation>
 <translation id="1426410128494586442">Sí</translation>
 <translation id="1428146450423315676">Apilador 7</translation>
+<translation id="1428729058023778569">Se muestra esta advertencia porque este sitio no admite HTTPS. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">Imprimir</translation>
 <translation id="1436185428532214179">Puede solicitar permiso para editar archivos y carpetas del dispositivo</translation>
 <translation id="1442386063175183758">Plegado en ventana a la derecha</translation>
@@ -646,6 +647,7 @@
 <translation id="3282497668470633863">Agregar el nombre en la tarjeta</translation>
 <translation id="3286372614333682499">vertical</translation>
 <translation id="3287510313208355388">Descargar cuando haya conexión</translation>
+<translation id="3288238092761586174">Es posible que <ph name="URL" /> deba realizar pasos adicionales para verificar tu pago.</translation>
 <translation id="3293642807462928945">Más información sobre la política <ph name="POLICY_NAME" /></translation>
 <translation id="3295444047715739395">Consulta y administra tus contraseñas en la configuración de Chrome</translation>
 <translation id="3303855915957856445">No se encontraron resultados en la búsqueda</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index a95866928..05371e7 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">Saa pyytää lupaa löytää lähellä olevat Bluetooth-laitteet</translation>
 <translation id="1426410128494586442">Kyllä</translation>
 <translation id="1428146450423315676">Pinoaja 7</translation>
+<translation id="1428729058023778569">Näet tämän varoituksen, koska sivusto ei tue HTTPS:ää. <ph name="BEGIN_LEARN_MORE_LINK" />Lue lisää<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">Tulosta</translation>
 <translation id="1436185428532214179">Saa pyytää lupaa muokata laitteen tiedostoja ja kansioita</translation>
 <translation id="1442386063175183758">Oikeanpuoleinen lehtitaite</translation>
@@ -650,6 +651,7 @@
 <translation id="3282497668470633863">Lisää kortissa oleva nimi</translation>
 <translation id="3286372614333682499">pystysuunta</translation>
 <translation id="3287510313208355388">Lataa, kun verkkoyhteys on muodostettu</translation>
+<translation id="3288238092761586174"><ph name="URL" /> saattaa vaatia lisävaiheita maksun vahvistamiseksi</translation>
 <translation id="3293642807462928945">Lisätietoja käytännöstä: <ph name="POLICY_NAME" /></translation>
 <translation id="3295444047715739395">Katso ja hallinnoi salasanojasi Chromen asetuksissa</translation>
 <translation id="3303855915957856445">Ei hakutuloksia</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index 393f3c7..8253863 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">Puwedeng hilinging tumuklas ng mga Bluetooth device na nasa malapit</translation>
 <translation id="1426410128494586442">Oo</translation>
 <translation id="1428146450423315676">Stacker 7</translation>
+<translation id="1428729058023778569">Nakikita mo ang babalang ito dahil hindi sinusuportahan ng site na ito ang HTTPS. <ph name="BEGIN_LEARN_MORE_LINK" />Matuto pa<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">I-print</translation>
 <translation id="1436185428532214179">Puwedeng hilinging mag-edit ng mga file at folder sa iyong device</translation>
 <translation id="1442386063175183758">Right gate fold</translation>
@@ -649,6 +650,7 @@
 <translation id="3282497668470633863">Magdagdag ng pangalan sa card</translation>
 <translation id="3286372614333682499">portrait</translation>
 <translation id="3287510313208355388">I-download kapag online</translation>
+<translation id="3288238092761586174">Posibleng kailanganin ng <ph name="URL" /> na magsagawa ng mga karagdagang hakbang para ma-verify ang iyong pagbabayad</translation>
 <translation id="3293642807462928945">Matuto pa tungkol sa patakarang <ph name="POLICY_NAME" /></translation>
 <translation id="3295444047715739395">Tingnan at pamahalaan ang iyong mga password sa mga setting ng Chrome</translation>
 <translation id="3303855915957856445">Walang nakitang resulta ng paghahanap</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index 4059bcd..1e5f73e 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">Les sites peuvent demander à découvrir les appareils Bluetooth à proximité</translation>
 <translation id="1426410128494586442">Oui</translation>
 <translation id="1428146450423315676">Empileur 7</translation>
+<translation id="1428729058023778569">Cette mise en garde s'affiche parce que ce site ne prend pas en charge le protocole HTTPS. <ph name="BEGIN_LEARN_MORE_LINK" />En savoir plus<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">Imprimer</translation>
 <translation id="1436185428532214179">Les sites peuvent demander à modifier les fichiers et les dossiers de votre appareil</translation>
 <translation id="1442386063175183758">Pli du volet droit</translation>
@@ -645,6 +646,7 @@
 <translation id="3282497668470633863">Ajouter le nom sur la carte</translation>
 <translation id="3286372614333682499">portrait</translation>
 <translation id="3287510313208355388">Télécharger en ligne</translation>
+<translation id="3288238092761586174"><ph name="URL" /> pourrait devoir prendre des mesures supplémentaires pour vérifier votre paiement</translation>
 <translation id="3293642807462928945">En savoir plus sur la politique <ph name="POLICY_NAME" /></translation>
 <translation id="3295444047715739395">Affichez et gérez vos mots de passe dans les paramètres de Chrome</translation>
 <translation id="3303855915957856445">Aucun résultat de recherche n'a été trouvé</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index f4ff1d6f..71eaa13 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">Dapat meminta untuk menemukan perangkat Bluetooth di sekitar</translation>
 <translation id="1426410128494586442">Ya</translation>
 <translation id="1428146450423315676">Tempat kertas 7</translation>
+<translation id="1428729058023778569">Anda melihat peringatan ini karena situs ini tidak mendukung HTTPS. <ph name="BEGIN_LEARN_MORE_LINK" />Pelajari lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">Cetak</translation>
 <translation id="1436185428532214179">Dapat meminta untuk mengedit file dan folder di perangkat Anda</translation>
 <translation id="1442386063175183758">Lipatan format gate di kanan</translation>
@@ -645,6 +646,7 @@
 <translation id="3282497668470633863">Tambahkan nama di kartu</translation>
 <translation id="3286372614333682499">potret</translation>
 <translation id="3287510313208355388">Download saat online</translation>
+<translation id="3288238092761586174"><ph name="URL" /> mungkin perlu melakukan langkah tambahan untuk memverifikasi pembayaran Anda</translation>
 <translation id="3293642807462928945">Pelajari lebih lanjut tentang kebijakan <ph name="POLICY_NAME" /></translation>
 <translation id="3295444047715739395">Lihat dan kelola sandi Anda di setelan Chrome</translation>
 <translation id="3303855915957856445">Hasil penelusuran tidak ditemukan</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index f742d24..86d525e 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">‏האתר יכול לבקש הרשאה לחפש מכשירי Bluetooth בקרבת מקום</translation>
 <translation id="1426410128494586442">כן</translation>
 <translation id="1428146450423315676">מערים 7</translation>
+<translation id="1428729058023778569">‏האזהרה הזו מוצגת לך כי האתר הזה לא תומך ב-HTTPS. <ph name="BEGIN_LEARN_MORE_LINK" />מידע נוסף<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">הדפסה</translation>
 <translation id="1436185428532214179">האתר יכול לבקש הרשאה לערוך קבצים ותיקיות במכשיר</translation>
 <translation id="1442386063175183758">כנף ימנית בקיפול</translation>
@@ -649,6 +650,7 @@
 <translation id="3282497668470633863">הוספה של השם המופיע בכרטיס</translation>
 <translation id="3286372614333682499">לאורך</translation>
 <translation id="3287510313208355388">להורדה אחרי התחברות לרשת</translation>
+<translation id="3288238092761586174">ייתכן שיידרשו שלבים נוספים לאימות התשלום שלך על ידי <ph name="URL" /></translation>
 <translation id="3293642807462928945">מידע נוסף על המדיניות <ph name="POLICY_NAME" /></translation>
 <translation id="3295444047715739395">‏הצגה וניהול של הסיסמאות שלך בהגדרות Chrome</translation>
 <translation id="3303855915957856445">לא נמצאו תוצאות חיפוש</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb
index d67a357..609fa06 100644
--- a/components/strings/components_strings_km.xtb
+++ b/components/strings/components_strings_km.xtb
@@ -140,6 +140,7 @@
 <translation id="1422930527989633628">អាចស្នើសុំ​ស្វែងរក​ឧបករណ៍​ប៊្លូធូស​ដែលនៅជិត</translation>
 <translation id="1426410128494586442">បាទ/ចាស</translation>
 <translation id="1428146450423315676">ទម្រគំនរទី 7</translation>
+<translation id="1428729058023778569">អ្នកមើលឃើញ​ការព្រមាននេះ ដោយសារ​គេហទំព័រនេះ​មិនស្គាល់ HTTPS ទេ។ <ph name="BEGIN_LEARN_MORE_LINK" />ស្វែងយល់បន្ថែម<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">បោះពុម្ព</translation>
 <translation id="1436185428532214179">អាចស្នើសុំ​កែឯកសារ និងថត​នៅក្នុងឧបករណ៍​របស់អ្នក</translation>
 <translation id="1442386063175183758">បត់ភ្ជិត​ផ្ទាំង​ខាងស្ដាំ</translation>
@@ -652,6 +653,7 @@
 <translation id="3282497668470633863">បញ្ចូលឈ្មោះលើកាត</translation>
 <translation id="3286372614333682499">បញ្ឈរ​</translation>
 <translation id="3287510313208355388">ទាញយក​នៅ​ពេលមាន​អ៊ីនធឺណិត</translation>
+<translation id="3288238092761586174"><ph name="URL" /> អាចត្រូវអនុវត្ត​ជំហានបន្ថែម ដើម្បីផ្ទៀងផ្ទាត់​ការបង់ប្រាក់​របស់អ្នក</translation>
 <translation id="3293642807462928945">ស្វែង​យល់បន្ថែម​អំពី​គោលការណ៍ <ph name="POLICY_NAME" /></translation>
 <translation id="3295444047715739395">មើល និងគ្រប់គ្រង​ពាក្យសម្ងាត់របស់អ្នក​នៅក្នុងការកំណត់ Chrome</translation>
 <translation id="3303855915957856445">រកមិនឃើញលទ្ធផលស្វែងរកទេ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index cd10f0a..7ad2eb9 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">주변 블루투스 기기를 조회하도록 요청할 수 있음</translation>
 <translation id="1426410128494586442">예</translation>
 <translation id="1428146450423315676">스태커 7</translation>
+<translation id="1428729058023778569">이 사이트에서 HTTPS를 지원하지 않기 때문에 경고가 표시되었습니다. <ph name="BEGIN_LEARN_MORE_LINK" />자세히 알아보기<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">인쇄</translation>
 <translation id="1436185428532214179">기기의 파일 및 폴더 수정을 요청할 수 있음</translation>
 <translation id="1442386063175183758">오른쪽 게이트 폴드</translation>
@@ -645,6 +646,7 @@
 <translation id="3282497668470633863">카드 명의 추가</translation>
 <translation id="3286372614333682499">세로 모드</translation>
 <translation id="3287510313208355388">온라인 상태일 때 다운로드</translation>
+<translation id="3288238092761586174">결제 인증을 위해 <ph name="URL" />에서 추가 단계를 진행해야 할 수 있습니다.</translation>
 <translation id="3293642807462928945"><ph name="POLICY_NAME" /> 정책에 관해 자세히 알아보기</translation>
 <translation id="3295444047715739395">Chrome 설정에서 비밀번호를 확인하고 관리하세요.</translation>
 <translation id="3303855915957856445">검색결과 없음</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 29dba6ec..0cb5504 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">Boleh meminta untuk menemukan peranti Bluetooth berdekatan</translation>
 <translation id="1426410128494586442">Ya</translation>
 <translation id="1428146450423315676">Petak 7</translation>
+<translation id="1428729058023778569">Anda melihat amaran ini kerana laman ini tidak menyokong HTTPS. <ph name="BEGIN_LEARN_MORE_LINK" />Ketahui lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">Cetak</translation>
 <translation id="1436185428532214179">Boleh meminta untuk mengedit fail dan folder pada peranti anda</translation>
 <translation id="1442386063175183758">Lipatan pintu kanan</translation>
@@ -649,6 +650,7 @@
 <translation id="3282497668470633863">Tambahkan nama pada kad</translation>
 <translation id="3286372614333682499">potret</translation>
 <translation id="3287510313208355388">Muat turun semasa dalam talian</translation>
+<translation id="3288238092761586174"><ph name="URL" /> mungkin perlu mengambil langkah tambahan untuk mengesahkan pembayaran anda</translation>
 <translation id="3293642807462928945">Ketahui lebih lanjut tentang dasar <ph name="POLICY_NAME" /></translation>
 <translation id="3295444047715739395">Lihat dan urus kata laluan anda dalam tetapan Chrome</translation>
 <translation id="3303855915957856445">Tiada hasil carian ditemui</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb
index 46f49e9..259b772 100644
--- a/components/strings/components_strings_sq.xtb
+++ b/components/strings/components_strings_sq.xtb
@@ -1008,8 +1008,10 @@
 <translation id="4451135742916150903">Mund të kërkojë të lidhet me pajisjet HID</translation>
 <translation id="4460315069258617173">Lejohet derisa të mbyllësh skedat për këtë faqe</translation>
 <translation id="4464826014807964867">Sajtet e uebit me informacione nga organizata jote</translation>
+<translation id="4465818729556336129">Ky dokument është konfidencial dhe printimi nuk këshillohet nga administratori yt.</translation>
 <translation id="4476953670630786061">Ky formular nuk është i sigurt. Plotësimi automatik është çaktivizuar.</translation>
 <translation id="4477350412780666475">Kënga tjetër</translation>
+<translation id="4481394504112738036">Skedar konfidencial</translation>
 <translation id="4482953324121162758">Ky sajt nuk do të përkthehet.</translation>
 <translation id="4490717597759821841">A7</translation>
 <translation id="449126573531210296">Enkripto fjalëkalimet e sinkronizuara me "Llogarinë tënde të Google"</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb
index a9ce57e..8041aa2 100644
--- a/components/strings/components_strings_zh-HK.xtb
+++ b/components/strings/components_strings_zh-HK.xtb
@@ -139,6 +139,7 @@
 <translation id="1422930527989633628">可要求探索附近的藍牙裝置</translation>
 <translation id="1426410128494586442">是</translation>
 <translation id="1428146450423315676">堆疊器 7</translation>
+<translation id="1428729058023778569">此網站不支援 HTTPS,因此瀏覽器顯示此警告訊息。<ph name="BEGIN_LEARN_MORE_LINK" />瞭解詳情<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="1430915738399379752">列印</translation>
 <translation id="1436185428532214179">可要求編輯裝置中的檔案和資料夾</translation>
 <translation id="1442386063175183758">右半邊對摺</translation>
@@ -645,6 +646,7 @@
 <translation id="3282497668470633863">新增持卡人姓名</translation>
 <translation id="3286372614333682499">直向</translation>
 <translation id="3287510313208355388">上網時下載</translation>
+<translation id="3288238092761586174"><ph name="URL" /> 可能需要採取其他步驟,才能驗證付款方式</translation>
 <translation id="3293642807462928945">進一步瞭解 <ph name="POLICY_NAME" /> 政策</translation>
 <translation id="3295444047715739395">在 Chrome 設定中查看和管理密碼</translation>
 <translation id="3303855915957856445">找不到任何搜尋結果</translation>
diff --git a/components/sync/protocol/list_passwords_result.proto b/components/sync/protocol/list_passwords_result.proto
new file mode 100644
index 0000000..79f9b154
--- /dev/null
+++ b/components/sync/protocol/list_passwords_result.proto
@@ -0,0 +1,24 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// If you change or add any fields in this file, update proto_visitors.h and
+// potentially proto_enum_conversions.{h, cc}.
+
+syntax = "proto2";
+
+package sync_pb;
+
+option java_multiple_files = true;
+option java_package = "org.chromium.components.sync.protocol";
+
+option optimize_for = LITE_RUNTIME;
+
+import "components/sync/protocol/password_with_local_data.proto";
+
+// Response to a request sent to Google Mobile Services to request a list of
+// passwords.
+message ListPasswordsResult {
+  // The list of password entries and corresponding additional info.
+  repeated PasswordWithLocalData password_data = 1;
+}
diff --git a/components/sync/protocol/password_with_local_data.proto b/components/sync/protocol/password_with_local_data.proto
new file mode 100644
index 0000000..009a243
--- /dev/null
+++ b/components/sync/protocol/password_with_local_data.proto
@@ -0,0 +1,33 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// If you change or add any fields in this file, update proto_visitors.h and
+// potentially proto_enum_conversions.{h, cc}.
+
+syntax = "proto2";
+
+package sync_pb;
+
+option java_multiple_files = true;
+option java_package = "org.chromium.components.sync.protocol";
+
+option optimize_for = LITE_RUNTIME;
+
+import "components/sync/protocol/password_specifics.proto";
+
+// Wrapper for a set of credentials that consists of (possibly) synced password
+// data and local data that is exclusively read and modified by Chrome.
+message PasswordWithLocalData {
+  // A potentially synced set of credentials.
+  optional PasswordSpecificsData password_specifics_data = 1;
+
+  // Local data that is related to the `password_specifics_data`. Although it is
+  // stored close to the `password_specifics_data`, it always stays local to the
+  // device the password is stored on and is never synced. The provider does not
+  // read or modify it -- only Chrome does.
+  // This data will for example contain `FormData` or device-specific properties
+  // like `PasswordForm::skip_zero_click` that prevents a credential to be used
+  // for Credential Management requests on this device.
+  optional bytes local_chrome_data = 2;
+}
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h
index d2318ff..e687c1a 100644
--- a/components/sync/protocol/proto_visitors.h
+++ b/components/sync/protocol/proto_visitors.h
@@ -21,12 +21,14 @@
 #include "components/sync/protocol/extension_setting_specifics.pb.h"
 #include "components/sync/protocol/extension_specifics.pb.h"
 #include "components/sync/protocol/history_delete_directive_specifics.pb.h"
+#include "components/sync/protocol/list_passwords_result.pb.h"
 #include "components/sync/protocol/model_type_state.pb.h"
 #include "components/sync/protocol/nigori_local_data.pb.h"
 #include "components/sync/protocol/nigori_specifics.pb.h"
 #include "components/sync/protocol/os_preference_specifics.pb.h"
 #include "components/sync/protocol/os_priority_preference_specifics.pb.h"
 #include "components/sync/protocol/password_specifics.pb.h"
+#include "components/sync/protocol/password_with_local_data.pb.h"
 #include "components/sync/protocol/persisted_entity_data.pb.h"
 #include "components/sync/protocol/preference_specifics.pb.h"
 #include "components/sync/protocol/printer_specifics.pb.h"
@@ -67,8 +69,8 @@
 // implements various customizations.
 
 #define VISIT_(Kind, field) \
-  if (proto.has_##field()) \
-    visitor.Visit##Kind(proto, #field, proto.field())
+  if (proto.has_##field())  \
+  visitor.Visit##Kind(proto, #field, proto.field())
 
 // Generic version, calls visitor.Visit(). Handles almost everything except
 // for special cases below.
@@ -86,8 +88,7 @@
 
 // Repeated fields are always present, so there are no 'has_<field>' methods.
 // This macro unconditionally calls visitor.Visit().
-#define VISIT_REP(field) \
-  visitor.Visit(proto, #field, proto.field());
+#define VISIT_REP(field) visitor.Visit(proto, #field, proto.field());
 
 #define VISIT_PROTO_FIELDS(proto) \
   template <class V>              \
@@ -576,6 +577,10 @@
   VISIT(size);
 }
 
+VISIT_PROTO_FIELDS(const sync_pb::ListPasswordsResult& proto) {
+  VISIT_REP(password_data);
+}
+
 VISIT_PROTO_FIELDS(const sync_pb::ManagedUserSettingSpecifics& proto) {
   VISIT(name);
   VISIT(value);
@@ -700,6 +705,11 @@
   VISIT(client_only_encrypted_data);
 }
 
+VISIT_PROTO_FIELDS(const sync_pb::PasswordWithLocalData& proto) {
+  VISIT(password_specifics_data);
+  VISIT_BYTES(local_chrome_data);
+}
+
 VISIT_PROTO_FIELDS(const sync_pb::PasswordSpecificsData& proto) {
   VISIT(scheme);
   VISIT(signon_realm);
diff --git a/components/sync/protocol/protocol_sources.gni b/components/sync/protocol/protocol_sources.gni
index b5ea425..5e136c9e 100644
--- a/components/sync/protocol/protocol_sources.gni
+++ b/components/sync/protocol/protocol_sources.gni
@@ -29,6 +29,7 @@
   "get_updates_caller_info",
   "history_delete_directive_specifics",
   "history_status",
+  "list_passwords_result",
   "local_trusted_vault",
   "loopback_server",
   "managed_user_setting_specifics",
@@ -41,6 +42,7 @@
   "os_preference_specifics",
   "os_priority_preference_specifics",
   "password_specifics",
+  "password_with_local_data",
   "persisted_entity_data",
   "preference_specifics",
   "printer_specifics",
diff --git a/components/sync/trusted_vault/fake_security_domains_server.cc b/components/sync/trusted_vault/fake_security_domains_server.cc
index b11a6f9..7ca5e24 100644
--- a/components/sync/trusted_vault/fake_security_domains_server.cc
+++ b/components/sync/trusted_vault/fake_security_domains_server.cc
@@ -5,6 +5,7 @@
 #include "components/sync/trusted_vault/fake_security_domains_server.h"
 
 #include "base/base64url.h"
+#include "base/logging.h"
 #include "base/rand_util.h"
 #include "components/sync/trusted_vault/proto_string_bytes_conversion.h"
 #include "components/sync/trusted_vault/securebox.h"
diff --git a/components/viz/common/transition_utils.cc b/components/viz/common/transition_utils.cc
index 1918a5e..6a66cff3 100644
--- a/components/viz/common/transition_utils.cc
+++ b/components/viz/common/transition_utils.cc
@@ -4,7 +4,6 @@
 
 #include "components/viz/common/transition_utils.h"
 
-#include <vector>
 
 #include "components/viz/common/quads/compositor_render_pass.h"
 #include "components/viz/common/quads/compositor_render_pass_draw_quad.h"
diff --git a/components/viz/host/host_display_client.h b/components/viz/host/host_display_client.h
index 5e260e1..94c5293d 100644
--- a/components/viz/host/host_display_client.h
+++ b/components/viz/host/host_display_client.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_VIZ_HOST_HOST_DISPLAY_CLIENT_H_
 
 #include <memory>
-#include <vector>
 
 #include "base/macros.h"
 #include "base/single_thread_task_runner.h"
diff --git a/components/viz/service/display/overlay_processor_interface.cc b/components/viz/service/display/overlay_processor_interface.cc
index 04047055..b8362073 100644
--- a/components/viz/service/display/overlay_processor_interface.cc
+++ b/components/viz/service/display/overlay_processor_interface.cc
@@ -5,7 +5,6 @@
 #include "components/viz/service/display/overlay_processor_interface.h"
 
 #include <utility>
-#include <vector>
 
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
diff --git a/components/viz/service/display/resolved_frame_data.cc b/components/viz/service/display/resolved_frame_data.cc
index b34a16b..0b818b8 100644
--- a/components/viz/service/display/resolved_frame_data.cc
+++ b/components/viz/service/display/resolved_frame_data.cc
@@ -83,9 +83,10 @@
       remapped_id = render_pass_id_generator.GenerateNextId();
     }
     resolved_pass.remapped_id = remapped_id;
+    resolved_pass.is_root = i == num_render_pass - 1;
 
     bool add_quad_damage_to_root_damage_rect =
-        i == num_render_pass - 1 && render_pass->has_per_quad_damage;
+        resolved_pass.is_root && render_pass->has_per_quad_damage;
 
     // Loop through the quads, remapping resource ids and storing them.
     auto& draw_quads = resolved_passes_[i].draw_quads;
diff --git a/components/viz/service/display/resolved_frame_data.h b/components/viz/service/display/resolved_frame_data.h
index 840d9c7e..17bee767 100644
--- a/components/viz/service/display/resolved_frame_data.h
+++ b/components/viz/service/display/resolved_frame_data.h
@@ -40,8 +40,9 @@
   ResolvedPassData(ResolvedPassData&& other);
   ResolvedPassData& operator=(ResolvedPassData&& other);
 
-  CompositorRenderPass* render_pass;
+  CompositorRenderPass* render_pass = nullptr;
   AggregatedRenderPassId remapped_id;
+  bool is_root = false;
   std::vector<ResolvedQuadData> draw_quads;
 };
 
diff --git a/components/viz/service/display/resolved_frame_data_unittest.cc b/components/viz/service/display/resolved_frame_data_unittest.cc
index b2344c1c..73b41396 100644
--- a/components/viz/service/display/resolved_frame_data_unittest.cc
+++ b/components/viz/service/display/resolved_frame_data_unittest.cc
@@ -6,7 +6,6 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
 #include "components/viz/common/quads/compositor_render_pass.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
diff --git a/components/viz/service/display/software_renderer.h b/components/viz/service/display/software_renderer.h
index 2cb8940..3e123cd 100644
--- a/components/viz/service/display/software_renderer.h
+++ b/components/viz/service/display/software_renderer.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_VIZ_SERVICE_DISPLAY_SOFTWARE_RENDERER_H_
 
 #include <memory>
-#include <vector>
 
 #include "base/macros.h"
 #include "build/build_config.h"
diff --git a/components/viz/service/display/surface_aggregator.cc b/components/viz/service/display/surface_aggregator.cc
index 70f9a9b5..9b2cf23 100644
--- a/components/viz/service/display/surface_aggregator.cc
+++ b/components/viz/service/display/surface_aggregator.cc
@@ -230,6 +230,7 @@
   // This is the set of Surfaces that were referenced by another Surface, but
   // not included in a SurfaceDrawQuad.
   base::flat_set<SurfaceId> undrawn_surfaces;
+  bool video_capture_enabled = false;
   bool may_contain_video = false;
   bool frame_sinks_changed = false;
   gfx::ContentColorUsage content_color_usage = gfx::ContentColorUsage::kSRGB;
@@ -259,8 +260,7 @@
   auto it = surface_id_to_resource_child_id_.find(surface->surface_id());
   if (it == surface_id_to_resource_child_id_.end()) {
     int child_id = provider_->CreateChild(
-        base::BindRepeating(&SurfaceAggregator::UnrefResources,
-                            surface->client()),
+        base::BindRepeating(&SurfaceClient::UnrefResources, surface->client()),
         surface->surface_id());
     surface_id_to_resource_child_id_[surface->surface_id()] = child_id;
     return child_id;
@@ -463,14 +463,6 @@
          moved_pixel_passes_.count(id);
 }
 
-// static
-void SurfaceAggregator::UnrefResources(
-    base::WeakPtr<SurfaceClient> surface_client,
-    std::vector<ReturnedResource> resources) {
-  if (surface_client)
-    surface_client->UnrefResources(std::move(resources));
-}
-
 bool SurfaceAggregator::CanPotentiallyMergePass(
     const SurfaceDrawQuad& surface_quad) {
   const SharedQuadState* sqs = surface_quad.shared_quad_state;
@@ -1286,10 +1278,8 @@
   }
 
   bool apply_surface_transform_to_root_pass = true;
-  for (size_t i = 0; i < source_pass_list.size(); ++i) {
-    const auto& source = *source_pass_list[i];
-    const auto& resolved_pass = resolved_frame.GetRenderPassDataByIndex(i);
-    const bool is_root_pass = (i == source_pass_list.size() - 1);
+  for (auto& resolved_pass : resolved_frame.GetResolvedPasses()) {
+    const auto& source = *resolved_pass.render_pass;
 
     size_t sqs_size = source.shared_quad_state_list.size();
     size_t dq_size = source.quad_list.size();
@@ -1300,7 +1290,7 @@
     // We add an additional render pass for the transform if the root render
     // pass has any copy requests.
     apply_surface_transform_to_root_pass =
-        is_root_pass &&
+        resolved_pass.is_root &&
         (copy_pass->copy_requests.empty() || surface_transform.IsIdentity());
 
     gfx::Rect output_rect = source.output_rect;
@@ -1326,7 +1316,7 @@
         source.has_transparent_background, source.cache_render_pass,
         source.has_damage_from_contributing_content, source.generate_mipmap);
 
-    if (needs_surface_damage_rect_list_ && is_root_pass) {
+    if (needs_surface_damage_rect_list_ && resolved_pass.is_root) {
       AddSurfaceDamageToDamageList(
           /*default_damage_rect=*/gfx::Rect(), surface_transform,
           /*clip_rect=*/{}, copy_pass.get(), &resolved_frame);
@@ -1378,7 +1368,7 @@
     const gfx::Rect& damage_from_parent,
     const gfx::Transform& target_to_root_transform,
     bool in_moved_pixel_rp,
-    PrewalkResult* result) {
+    PrewalkResult& result) {
   const CompositorRenderPass& render_pass = *resolved_pass.render_pass;
 
   if (render_pass.backdrop_filters.HasFilterThatMovesPixels()) {
@@ -1413,9 +1403,7 @@
   // at this point). |damage_rect| has damage from all quads below the current
   // iterated quad, and can be used to determine if there's any intersection
   // with the current quad when needed.
-  for (QuadList::ConstReverseIterator it = render_pass.quad_list.rbegin();
-       it != render_pass.quad_list.rend(); ++it) {
-    const DrawQuad* quad = *it;
+  for (const DrawQuad* quad : base::Reversed(render_pass.quad_list)) {
     gfx::Rect quad_damage_rect;
     if (quad->material == DrawQuad::Material::kSurfaceContent) {
       const auto* surface_quad = SurfaceDrawQuad::MaterialCast(quad);
@@ -1631,23 +1619,24 @@
     AggregatedRenderPassId parent_pass_id,
     bool will_draw,
     const gfx::Rect& damage_from_parent,
-    PrewalkResult* result) {
+    PrewalkResult& result) {
   Surface* surface = resolved_frame.surface();
   DCHECK(surface->HasActiveFrame());
 
   if (referenced_surfaces_.count(surface->surface_id()))
     return gfx::Rect();
 
-  result->frame_sinks_changed |= CheckFrameSinksChanged(surface);
+  result.frame_sinks_changed |= CheckFrameSinksChanged(surface);
 
   if (!resolved_frame.is_valid())
     return gfx::Rect();
   ++stats_->prewalked_surface_count;
 
-  auto remapped_root_pass_id =
-      resolved_frame.GetRootRenderPassData().remapped_id;
-  if (parent_pass_id)
-    render_pass_dependencies_[parent_pass_id].insert(remapped_root_pass_id);
+  auto& root_resolved_pass = resolved_frame.GetRootRenderPassData();
+  if (parent_pass_id) {
+    render_pass_dependencies_[parent_pass_id].insert(
+        root_resolved_pass.remapped_id);
+  }
 
   gfx::Rect damage_rect = DamageRectForSurface(resolved_frame, true);
 
@@ -1656,8 +1645,8 @@
   referenced_surfaces_.insert(surface->surface_id());
 
   damage_rect.Union(PrewalkRenderPass(
-      resolved_frame, resolved_frame.GetRootRenderPassData(), will_draw,
-      damage_from_parent, gfx::Transform(), in_moved_pixel_rp, result));
+      resolved_frame, root_resolved_pass, will_draw, damage_from_parent,
+      gfx::Transform(), in_moved_pixel_rp, result));
 
   if (!damage_rect.IsEmpty()) {
     auto damage_rect_surface_space = damage_rect;
@@ -1686,7 +1675,7 @@
   // them too.
   surface->TakeCopyOutputRequestsFromClient();
   if (surface->IsVideoCaptureOnFromClient())
-    video_capture_enabled_ = true;
+    result.video_capture_enabled = true;
 
   if (de_jelly_enabled_ && surface->HasUndrawnActiveFrame())
     new_surfaces_.insert(surface->surface_id());
@@ -1706,7 +1695,7 @@
 
   for (const SurfaceId& surface_id : surface->active_referenced_surfaces()) {
     if (!contained_surfaces_.count(surface_id)) {
-      result->undrawn_surfaces.insert(surface_id);
+      result.undrawn_surfaces.insert(surface_id);
       const ResolvedFrameData* undrawn_surface = GetResolvedFrame(surface_id);
       if (undrawn_surface) {
         PrewalkSurface(*undrawn_surface, false, AggregatedRenderPassId(),
@@ -1726,9 +1715,9 @@
 
   referenced_surfaces_.erase(surface->surface_id());
   if (!damage_rect.IsEmpty() && frame.metadata.may_contain_video)
-    result->may_contain_video = true;
-  result->content_color_usage =
-      std::max(result->content_color_usage, frame.metadata.content_color_usage);
+    result.may_contain_video = true;
+  result.content_color_usage =
+      std::max(result.content_color_usage, frame.metadata.content_color_usage);
 
   return damage_rect;
 }
@@ -1851,7 +1840,7 @@
   gfx::Rect prewalk_damage_rect = PrewalkSurface(
       resolved_frame, /*in_moved_pixel_rp=*/false,
       /*parent_pass=*/AggregatedRenderPassId(),
-      /*will_draw=*/true, /*damage_from_parent=*/gfx::Rect(), &prewalk_result);
+      /*will_draw=*/true, /*damage_from_parent=*/gfx::Rect(), prewalk_result);
   stats_->prewalk_time = prewalk_timer.Elapsed();
 
   root_damage_rect_ = prewalk_damage_rect;
@@ -1877,7 +1866,7 @@
   PropagateCopyRequestPasses();
   has_copy_requests_ = !copy_request_passes_.empty();
   frame.has_copy_requests = has_copy_requests_;
-  frame.video_capture_enabled = video_capture_enabled_;
+  frame.video_capture_enabled = prewalk_result.video_capture_enabled;
   frame.may_contain_video = prewalk_result.may_contain_video;
   frame.content_color_usage = prewalk_result.content_color_usage;
 
@@ -1989,7 +1978,6 @@
   resolved_surface_ranges_.clear();
   contained_surfaces_.clear();
   contained_frame_sinks_.clear();
-  video_capture_enabled_ = false;
 
   // Delete resolved frame data that wasn't used this frame.
   base::EraseIf(resolved_frames_, [](auto& entry) {
diff --git a/components/viz/service/display/surface_aggregator.h b/components/viz/service/display/surface_aggregator.h
index 348ebdca..3fc39812 100644
--- a/components/viz/service/display/surface_aggregator.h
+++ b/components/viz/service/display/surface_aggregator.h
@@ -31,7 +31,6 @@
 namespace viz {
 class DisplayResourceProvider;
 class Surface;
-class SurfaceClient;
 class SurfaceDrawQuad;
 class SurfaceManager;
 
@@ -208,7 +207,7 @@
                               const gfx::Rect& damage_from_parent,
                               const gfx::Transform& target_to_root_transform,
                               bool in_moved_pixel_rp,
-                              PrewalkResult* result);
+                              PrewalkResult& result);
 
   // Walk the Surface tree from |resolved_frame|. Validate the resources of the
   // current surface and its descendants, check if there are any copy requests,
@@ -218,7 +217,7 @@
                            AggregatedRenderPassId parent_pass,
                            bool will_draw,
                            const gfx::Rect& damage_from_parent,
-                           PrewalkResult* result);
+                           PrewalkResult& result);
 
   // Processes a new resolved CompositorFrame. This declares all of the
   // transferable resources plus what resources that are used in the
@@ -281,9 +280,6 @@
 
   bool IsRootSurface(const Surface* surface) const;
 
-  static void UnrefResources(base::WeakPtr<SurfaceClient> surface_client,
-                             std::vector<ReturnedResource> resources);
-
   // This method transforms the delegated ink metadata to be in the root target
   // space, so that it can eventually be drawn onto the back buffer in the
   // correct position. It should only ever be called when a frame contains
@@ -476,9 +472,6 @@
   // by FindQuadWithOverlayDamage().
   bool current_zero_damage_rect_is_not_recorded_ = false;
 
-  // Indicates whether video capture has been enabled for this frame.
-  bool video_capture_enabled_ = false;
-
   // Persistent storage for ResolvedFrameData.
   std::map<Surface*, ResolvedFrameData> resolved_frames_;
 
diff --git a/components/viz/service/display_embedder/skia_output_device_x11.h b/components/viz/service/display_embedder/skia_output_device_x11.h
index cfe01fc2..0e1805f 100644
--- a/components/viz/service/display_embedder/skia_output_device_x11.h
+++ b/components/viz/service/display_embedder/skia_output_device_x11.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_SKIA_OUTPUT_DEVICE_X11_H_
 
 #include <memory>
-#include <vector>
 
 #include "base/macros.h"
 #include "base/types/pass_key.h"
diff --git a/components/viz/service/display_embedder/skia_output_surface_dependency.h b/components/viz/service/display_embedder/skia_output_surface_dependency.h
index be04adf..e23d981bb 100644
--- a/components/viz/service/display_embedder/skia_output_surface_dependency.h
+++ b/components/viz/service/display_embedder/skia_output_surface_dependency.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_SKIA_OUTPUT_SURFACE_DEPENDENCY_H_
 
 #include <memory>
-#include <vector>
 
 #include "base/callback.h"
 #include "base/callback_helpers.h"
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_unittest.cc b/components/viz/service/display_embedder/skia_output_surface_impl_unittest.cc
index 610d7eeb..1567f10 100644
--- a/components/viz/service/display_embedder/skia_output_surface_impl_unittest.cc
+++ b/components/viz/service/display_embedder/skia_output_surface_impl_unittest.cc
@@ -6,7 +6,6 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
diff --git a/components/viz/service/main/viz_main_impl.h b/components/viz/service/main/viz_main_impl.h
index cf85e8c..0c5ac02 100644
--- a/components/viz/service/main/viz_main_impl.h
+++ b/components/viz/service/main/viz_main_impl.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_VIZ_SERVICE_MAIN_VIZ_MAIN_IMPL_H_
 
 #include <memory>
-#include <vector>
 
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread.h"
diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc
index fa3a62d0..6023c52 100644
--- a/content/browser/devtools/protocol/network_handler.cc
+++ b/content/browser/devtools/protocol/network_handler.cc
@@ -2720,7 +2720,7 @@
 }  // namespace
 
 void NetworkHandler::LoadNetworkResource(
-    const String& frame_id,
+    Maybe<protocol::String> maybe_frame_id,
     const String& url,
     std::unique_ptr<protocol::Network::LoadNetworkResourceOptions> options,
     std::unique_ptr<LoadNetworkResourceCallback> callback) {
@@ -2746,8 +2746,13 @@
 
   mojo::Remote<network::mojom::URLLoaderFactory> url_loader_factory;
   if (host_) {
-    FrameTreeNode* node =
-        FrameTreeNodeFromDevToolsFrameToken(host_->frame_tree_node(), frame_id);
+    if (!maybe_frame_id.isJust()) {
+      callback->sendFailure(Response::InvalidParams(
+          "Parameter frameId must be provided for frame targets"));
+      return;
+    }
+    FrameTreeNode* node = FrameTreeNodeFromDevToolsFrameToken(
+        host_->frame_tree_node(), maybe_frame_id.fromJust());
     RenderFrameHostImpl* frame = node ? node->current_frame_host() : nullptr;
     if (!frame) {
       callback->sendFailure(Response::InvalidParams("Frame not found"));
diff --git a/content/browser/devtools/protocol/network_handler.h b/content/browser/devtools/protocol/network_handler.h
index de9b51e..6bf7522b 100644
--- a/content/browser/devtools/protocol/network_handler.h
+++ b/content/browser/devtools/protocol/network_handler.h
@@ -257,7 +257,7 @@
       const std::string& cookie_line);
 
   void LoadNetworkResource(
-      const String& frameId,
+      Maybe<content::protocol::String> frameId,
       const String& url,
       std::unique_ptr<protocol::Network::LoadNetworkResourceOptions> options,
       std::unique_ptr<LoadNetworkResourceCallback> callback) override;
diff --git a/content/browser/form_controls_browsertest.cc b/content/browser/form_controls_browsertest.cc
index 8087ab1e..8f17228f 100644
--- a/content/browser/form_controls_browsertest.cc
+++ b/content/browser/form_controls_browsertest.cc
@@ -155,7 +155,7 @@
   }
 };
 
-IN_PROC_BROWSER_TEST_F(FormControlsBrowserTest, Checkbox) {
+IN_PROC_BROWSER_TEST_F(FormControlsBrowserTest, DISABLED_Checkbox) {
   if (SkipTestForOldAndroidVersions())
     return;
 
diff --git a/content/browser/prerender/prerender_browsertest.cc b/content/browser/prerender/prerender_browsertest.cc
index c5fb520..e7659966 100644
--- a/content/browser/prerender/prerender_browsertest.cc
+++ b/content/browser/prerender/prerender_browsertest.cc
@@ -2757,23 +2757,38 @@
 
 // End: Tests for feature restrictions in prerendered pages ====================
 
+// Tests prerendering for low-end devices.
+class PrerenderLowMemoryBrowserTest : public PrerenderBrowserTest {
+ public:
+  PrerenderLowMemoryBrowserTest() {
+    // Set the value of memory threshold more than the physical memory.  The
+    // test will expect that prerendering does not occur.
+    std::string memory_threshold =
+        base::NumberToString(base::SysInfo::AmountOfPhysicalMemoryMB() + 1);
+    feature_list_.InitWithFeaturesAndParameters(
+        {{blink::features::kPrerender2,
+          {{blink::features::kPrerender2MemoryThresholdParamName,
+            memory_threshold}}}},
+        {});
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
 // Tests that prerendering doesn't run for low-end devices.
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, LowEndDevice) {
+IN_PROC_BROWSER_TEST_F(PrerenderLowMemoryBrowserTest, NoPrerender) {
   base::HistogramTester histogram_tester;
   const GURL kInitialUrl = GetUrl("/empty.html");
   const GURL kPrerenderingUrl = GetUrl("/empty.html?prerender");
 
-  // Set low-end device mode.
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      switches::kEnableLowEndDeviceMode);
-
   // Attempt to prerender.
   test::PrerenderHostRegistryObserver observer(*web_contents_impl());
   ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl));
   AddPrerenderAsync(kPrerenderingUrl);
+  observer.WaitForTrigger(kPrerenderingUrl);
 
   // It should fail.
-  observer.WaitForTrigger(kPrerenderingUrl);
   EXPECT_FALSE(HasHostForUrl(kPrerenderingUrl));
   histogram_tester.ExpectUniqueSample(
       "Prerender.Experimental.PrerenderHostFinalStatus",
diff --git a/content/browser/prerender/prerender_host_registry.cc b/content/browser/prerender/prerender_host_registry.cc
index 8a02633..7d6f4ab 100644
--- a/content/browser/prerender/prerender_host_registry.cc
+++ b/content/browser/prerender/prerender_host_registry.cc
@@ -8,11 +8,13 @@
 #include "base/check.h"
 #include "base/containers/contains.h"
 #include "base/feature_list.h"
+#include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/system/sys_info.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/trace_event/common/trace_event_common.h"
 #include "base/trace_event/trace_conversion_helper.h"
+#include "build/build_config.h"
 #include "content/browser/prerender/prerender_metrics.h"
 #include "content/browser/renderer_host/frame_tree_node.h"
 #include "content/browser/renderer_host/navigation_request.h"
@@ -22,6 +24,29 @@
 
 namespace content {
 
+namespace {
+
+bool DeviceHasEnoughMemoryForPrerender() {
+  // Use the same default threshold as the back/forward cache. See comments in
+  // DeviceHasEnoughMemoryForBackForwardCache().
+  static constexpr int kDefaultMemoryThresholdMb =
+#if defined(OS_ANDROID)
+      1700;
+#else
+      0;
+#endif
+
+  // The default is overridable by field trial param.
+  int memory_threshold_mb = base::GetFieldTrialParamByFeatureAsInt(
+      blink::features::kPrerender2,
+      blink::features::kPrerender2MemoryThresholdParamName,
+      kDefaultMemoryThresholdMb);
+
+  return base::SysInfo::AmountOfPhysicalMemoryMB() > memory_threshold_mb;
+}
+
+}  // namespace
+
 PrerenderHostRegistry::PrerenderHostRegistry() {
   DCHECK(blink::features::IsPrerender2Enabled());
 }
@@ -61,8 +86,8 @@
 
   // Don't prerender on low-end devices.
   // TODO(https://crbug.com/1176120): Fallback to NoStatePrefetch
-  // if the memory requirements are different.
-  if (base::SysInfo::IsLowEndDevice()) {
+  // since the memory requirements are different.
+  if (!DeviceHasEnoughMemoryForPrerender()) {
     base::UmaHistogramEnumeration(
         "Prerender.Experimental.PrerenderHostFinalStatus",
         PrerenderHost::FinalStatus::kLowEndDevice);
diff --git a/content/browser/prerender/prerender_host_registry_unittest.cc b/content/browser/prerender/prerender_host_registry_unittest.cc
index 8a02800..c89676c 100644
--- a/content/browser/prerender/prerender_host_registry_unittest.cc
+++ b/content/browser/prerender/prerender_host_registry_unittest.cc
@@ -136,18 +136,16 @@
 
 class PrerenderHostRegistryTest : public RenderViewHostImplTestHarness {
  public:
-  PrerenderHostRegistryTest() = default;
+  PrerenderHostRegistryTest() {
+    // Enable prerendering with no physical memory requirement so the test can
+    // run on any bot.
+    scoped_feature_list_.InitWithFeaturesAndParameters(
+        {{blink::features::kPrerender2,
+          {{blink::features::kPrerender2MemoryThresholdParamName, "0"}}}},
+        {});
+  }
   ~PrerenderHostRegistryTest() override = default;
 
-  void SetUp() override {
-    scoped_feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
-    RenderViewHostImplTestHarness::SetUp();
-  }
-
-  void TearDown() override {
-    RenderViewHostImplTestHarness::TearDown();
-  }
-
   std::unique_ptr<TestWebContents> CreateWebContents(const GURL& url) {
     std::unique_ptr<TestWebContents> web_contents(TestWebContents::Create(
         GetBrowserContext(), SiteInstanceImpl::Create(GetBrowserContext())));
diff --git a/content/browser/prerender/prerender_host_unittest.cc b/content/browser/prerender/prerender_host_unittest.cc
index 1632c73..0ed3496 100644
--- a/content/browser/prerender/prerender_host_unittest.cc
+++ b/content/browser/prerender/prerender_host_unittest.cc
@@ -109,7 +109,12 @@
 class PrerenderHostTest : public RenderViewHostImplTestHarness {
  public:
   PrerenderHostTest() {
-    scoped_feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
+    // Enable prerendering with no physical memory requirement so the test can
+    // run on any bot.
+    scoped_feature_list_.InitWithFeaturesAndParameters(
+        {{blink::features::kPrerender2,
+          {{blink::features::kPrerender2MemoryThresholdParamName, "0"}}}},
+        {});
   }
 
   ~PrerenderHostTest() override = default;
diff --git a/content/browser/prerender/prerender_origin_trial_browsertest.cc b/content/browser/prerender/prerender_origin_trial_browsertest.cc
index 1c4b7d0..aead06b 100644
--- a/content/browser/prerender/prerender_origin_trial_browsertest.cc
+++ b/content/browser/prerender/prerender_origin_trial_browsertest.cc
@@ -102,7 +102,12 @@
         feature_list_.InitAndDisableFeature(blink::features::kPrerender2);
         break;
       case FeatureEnabledType::kEnabled:
-        feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
+        // Enable prerendering with no physical memory requirement so the test
+        // can run on any bot.
+        feature_list_.InitWithFeaturesAndParameters(
+            {{blink::features::kPrerender2,
+              {{blink::features::kPrerender2MemoryThresholdParamName, "0"}}}},
+            {});
         break;
       case FeatureEnabledType::kDefault:
         break;
@@ -304,7 +309,7 @@
 // Check the availability of Prerender 2 related APIs on a page with a valid
 // Origin Trial token. The following table shows the expected availability:
 // (The expected availability on the prerendered page should be same as the
-// availability on a page without a valid Oritin Trial token listed above.)
+// availability on a page without a valid Origin Trial token listed above.)
 //                |    blink::features::kPrerender2   |
 //                | disabled  | enabled   | default   |
 // ---------------|-----------|-----------|-----------|
diff --git a/content/browser/screen_orientation/screen_orientation_browsertest.cc b/content/browser/screen_orientation/screen_orientation_browsertest.cc
index 91cfc6d..071f6d0 100644
--- a/content/browser/screen_orientation/screen_orientation_browsertest.cc
+++ b/content/browser/screen_orientation/screen_orientation_browsertest.cc
@@ -7,7 +7,6 @@
 #include "base/command_line.h"
 #include "base/macros.h"
 #include "base/strings/stringprintf.h"
-#include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "content/browser/prerender/prerender_host_registry.h"
@@ -432,7 +431,6 @@
       : prerender_helper_(base::BindRepeating(
             &ScreenOrientationLockForPrerenderBrowserTest::web_contents,
             base::Unretained(this))) {
-    feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
   }
 
   // ScreenOrientationBrowserTest:
@@ -445,7 +443,6 @@
 
  protected:
   test::PrerenderTestHelper prerender_helper_;
-  base::test::ScopedFeatureList feature_list_;
 };
 
 class FakeScreenOrientationDelegate : public ScreenOrientationDelegate {
diff --git a/content/browser/speculation_rules/speculation_host_impl_unittest.cc b/content/browser/speculation_rules/speculation_host_impl_unittest.cc
index 5124c013..31de369c 100644
--- a/content/browser/speculation_rules/speculation_host_impl_unittest.cc
+++ b/content/browser/speculation_rules/speculation_host_impl_unittest.cc
@@ -30,7 +30,12 @@
 class SpeculationHostImplTest : public RenderViewHostImplTestHarness {
  public:
   SpeculationHostImplTest() {
-    scoped_feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
+    // Enable prerendering with no physical memory requirement so the test can
+    // run on any bot.
+    scoped_feature_list_.InitWithFeaturesAndParameters(
+        {{blink::features::kPrerender2,
+          {{blink::features::kPrerender2MemoryThresholdParamName, "0"}}}},
+        {});
   }
 
   void SetUp() override {
diff --git a/content/public/test/prerender_test_util.cc b/content/public/test/prerender_test_util.cc
index 6d521be..c19e99bb 100644
--- a/content/public/test/prerender_test_util.cc
+++ b/content/public/test/prerender_test_util.cc
@@ -224,7 +224,12 @@
 
 PrerenderTestHelper::PrerenderTestHelper(const WebContents::Getter& fn)
     : get_web_contents_fn_(fn) {
-  feature_list_.InitAndEnableFeature(blink::features::kPrerender2);
+  // Enable prerendering with no physical memory requirement so the test can run
+  // on any bot.
+  feature_list_.InitWithFeaturesAndParameters(
+      {{blink::features::kPrerender2,
+        {{blink::features::kPrerender2MemoryThresholdParamName, "0"}}}},
+      {});
 }
 
 PrerenderTestHelper::~PrerenderTestHelper() = default;
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
index 116e7d1..8a57662b 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">Bəzi addonlar Chromium'da xətaya səbəb olur. Lütfən, sistemdən silin:</translation>
 <translation id="2178608107313874732">Chromium hazırda kameranızı istifadə edə bilməz</translation>
 <translation id="2195025571279539885">Növbəti dəfə Chromium'un bu saytdakı <ph name="LANGUAGE_NAME" /> səhifələrini tərcümə etməyini istəyirsiniz?</translation>
+<translation id="2450140762465183767">İndi istənilən vaxt mesajlar, sənədlər və digər tətbiqlərdə keçidlərə toxunduqda Chromium'u istifadə edə bilərsiniz.</translation>
+<translation id="2478931088402984578"><ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" /> seçin</translation>
 <translation id="2567507405773541360">Sadə, etibarlı və həmişəkindən daha sürətli bir Chromium ilə daha çox iş görün</translation>
 <translation id="2590893390871230428">Chromium Datasını Sinxronizasiya Edin</translation>
 <translation id="2650312721222849884">Chromium istifadə etdiyiniz hər yerdən tabları görmək üçün sinxronizasiyanı aktiv edin</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">Hesabdan çıxdığınız zaman Chromium heç bir yeni datanı Google Hesabınızla sinxronizasiya edilməyəcək. Daha əvvəl sinxronizasiya edilmiş data hesabda qalır.</translation>
 <translation id="9022552996538154597">Chromium'a daxil olun</translation>
 <translation id="9089354809943900324">Chromium'un vaxtı keçib</translation>
+<translation id="9110075932708282655">Defolt olaraq Chromium istifadə edin</translation>
 <translation id="921174536258924340">Chromium bütün parolları yoxlaya bilmədi. Sabah yenidən cəhd edin və ya <ph name="BEGIN_LINK" />Google Hesabınızda parolları yoxlayın.<ph name="END_LINK" /></translation>
 <translation id="985602178874221306">Chromium Müəllifləri</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb
index 503f790..27f55b6 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">Некаторыя дадатковыя кампаненты выклікаюць збой у браўзеры Chromium. Выдаліце іх:</translation>
 <translation id="2178608107313874732">Chromium не ўдалося атрымаць доступ да камеры</translation>
 <translation id="2195025571279539885">Ці хочаце, каб Chromium наступны раз прапаноўваў перакласці старонкі гэтага сайта на наступнай мове: <ph name="LANGUAGE_NAME" />?</translation>
+<translation id="2450140762465183767">Цяпер вы можаце выкарыстоўваць Chromium кожны раз, калі адкрываеце спасылкі ў паведамленнях, дакументах або іншых праграмах.</translation>
+<translation id="2478931088402984578">Выберыце <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" />.</translation>
 <translation id="2567507405773541360">Паспявайце больш дзякуючы простаму, абароненаму і яшчэ хутчэйшаму браўзеру Chromium</translation>
 <translation id="2590893390871230428">Сінхранізацыя даных Chromium</translation>
 <translation id="2650312721222849884">Каб мець доступ да сваіх укладак з усіх прылад, на якіх вы выкарыстоўваеце Chromium, уключыце сінхранізацыю</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">Калі вы выйдзеце з Уліковага запісу Google, Chromium перастане сінхранізаваць з ім новыя даныя. Даныя, сінхранізаваныя раней, застануцца ва ўліковым запісе.</translation>
 <translation id="9022552996538154597">Увайдзіце ў Chromium</translation>
 <translation id="9089354809943900324">Chromium састарэў</translation>
+<translation id="9110075932708282655">Выкарыстоўвайце Chromium стандартна</translation>
 <translation id="921174536258924340">Браўзеру Chromium не ўдалося праверыць усе паролі. Паўтарыце спробу заўтра або <ph name="BEGIN_LINK" />праверце паролі ва Уліковым запісе Google<ph name="END_LINK" />.</translation>
 <translation id="985602178874221306">Аўтары Chromium</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb
index d84012d..0abd76e 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb
@@ -21,6 +21,8 @@
 <translation id="2168108852149185974">Některé doplňky způsobují selhání prohlížeče Chromium. Prosím odinstalujte:</translation>
 <translation id="2178608107313874732">Chromium teď nemůže použít fotoaparát</translation>
 <translation id="2195025571279539885">Chcete, aby prohlížeč Chromium příště pro stránky v jazyce <ph name="LANGUAGE_NAME" /> z tohoto webu nabízel překlad?</translation>
+<translation id="2450140762465183767">Nyní můžete Chromium použít pokaždé, když klepnete na odkazy ve zprávách, dokumentech a ostatních aplikacích.</translation>
+<translation id="2478931088402984578">Vyberte <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" /></translation>
 <translation id="2567507405773541360">S prohlížečem Chromium toho stihnete víc – je jednoduchý, bezpečný a rychlejší než kdy dřív</translation>
 <translation id="2590893390871230428">Synchronizovat data prohlížeče Chromium</translation>
 <translation id="2650312721222849884">Chcete-li mít své karty k dispozici všude, kde používáte Chromium, zapněte synchronizaci</translation>
@@ -99,6 +101,7 @@
 <translation id="894437814105052438">Když se odhlásíte, Chromium do vašeho účtu Google nebude synchronizovat žádná nová data. Dříve synchronizovaná data v účtu zůstanou.</translation>
 <translation id="9022552996538154597">Přihlásit se do prohlížeče Chromium</translation>
 <translation id="9089354809943900324">Prohlížeč Chromium je zastaralý</translation>
+<translation id="9110075932708282655">Používejte ve výchozím nastavení Chromium</translation>
 <translation id="921174536258924340">Chromiu se nepodařilo zkontrolovat všechna hesla. Zkuste to znovu zítra, případně <ph name="BEGIN_LINK" />hesla zkontrolujte v účtu Google<ph name="END_LINK" />.</translation>
 <translation id="985602178874221306">Autoři prohlížeče Chromium</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
index 74d87a15..dbff4f3 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">Algunos complementos causan fallos en Chromium. Desinstala los siguientes elementos:</translation>
 <translation id="2178608107313874732">Chromium no puede usar tu cámara ahora</translation>
 <translation id="2195025571279539885">¿Quieres que Google Chrome te ofrezca traducir las páginas de este sitio que estén en <ph name="LANGUAGE_NAME" /> la próxima vez?</translation>
+<translation id="2450140762465183767">Ahora puedes usar Chromium cada vez que presionas vínculos que aparecen en mensajes, documentos u otras apps.</translation>
+<translation id="2478931088402984578">Selecciona <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" />.</translation>
 <translation id="2567507405773541360">Realiza más tareas con una versión de Chromium más simple, segura y rápida que nunca</translation>
 <translation id="2590893390871230428">Sincronizar tus datos de Chromium</translation>
 <translation id="2650312721222849884">Para ver tus pestañas donde sea que uses Chromium, activa la sincronización</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">Si sales de la cuenta, Chromium no sincronizará ningún dato nuevo con tu Cuenta de Google. Los datos sincronizados anteriormente permanecerán en la cuenta.</translation>
 <translation id="9022552996538154597">Iniciar sesión en Chromium</translation>
 <translation id="9089354809943900324">Chromium no actualizado</translation>
+<translation id="9110075932708282655">Usa Chromium de forma predeterminada</translation>
 <translation id="921174536258924340">Chromium no pudo revisar todas las contraseñas. Vuelve a intentarlo mañana o <ph name="BEGIN_LINK" />revisa las contraseñas guardadas en tu Cuenta de Google.<ph name="END_LINK" /></translation>
 <translation id="985602178874221306">Los creadores de Chromium</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
index dd3b77e0..1273122a6 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">Jokin laajennus kaataa Chromiumin. Poista seuraavat:</translation>
 <translation id="2178608107313874732">Chromium ei voi käyttää kameraa tällä hetkellä.</translation>
 <translation id="2195025571279539885">Haluatko Chromiumin ehdottavan sivuston kielellä <ph name="LANGUAGE_NAME" /> kirjoitettujen sivujen kääntämistä seuraavalla kerralla?</translation>
+<translation id="2450140762465183767">Voit nyt käyttää Chromiumia aina, kun napautat linkkejä viesteissä, dokumenteissa ja muissa sovelluksissa.</translation>
+<translation id="2478931088402984578">Valitse <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" /></translation>
 <translation id="2567507405773541360">Helppokäyttöisellä, turvallisella ja entistäkin nopeammalla Chromiumilla saat enemmän aikaan</translation>
 <translation id="2590893390871230428">Synkronoi Chromium-datasi</translation>
 <translation id="2650312721222849884">Laita synkronointi päälle, niin voit nähdä Chromium-välilehtesi missä tahansa</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">Kun kirjaudut ulos, Chromium ei synkronoi uutta dataa Google-tilillesi. Aiemmin synkronoitu data säilytetään tilillä.</translation>
 <translation id="9022552996538154597">Kirjaudu sisään Chromiumiin</translation>
 <translation id="9089354809943900324">Chromium on vanhentunut</translation>
+<translation id="9110075932708282655">Käytä oletuksena Chromiumia</translation>
 <translation id="921174536258924340">Chromium ei voinut tarkistaa kaikkia salasanoja. Yritä uudelleen huomenna tai <ph name="BEGIN_LINK" />tarkista salasanat Google-tililtä<ph name="END_LINK" />.</translation>
 <translation id="985602178874221306">The Chromium Authors</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb
index ce34d6e..ae6fb4d 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">Nagiging dahilan ng pag-crash ng Chromium ang ilang add-on. Paki-uninstall.</translation>
 <translation id="2178608107313874732">Di magamit ng Chromium ang camera mo ngayon</translation>
 <translation id="2195025571279539885">Gusto mo bang mag-alok ang Chromium na isalin ang mga <ph name="LANGUAGE_NAME" /> page mula sa site na ito sa susunod na pagkakataon?</translation>
+<translation id="2450140762465183767">Magagamit mo na ngayon ang Chromium sa tuwing magta-tap ka ng mga link sa mga mensahe, dokumento, at iba pang app.</translation>
+<translation id="2478931088402984578">Piliin ang <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" /></translation>
 <translation id="2567507405773541360">Makagawa ng mas maraming bagay gamit ang simple, secure, at mas mabilis na ngayong Chromium</translation>
 <translation id="2590893390871230428">I-sync ang Iyong Data sa Chromium</translation>
 <translation id="2650312721222849884">Para makita ang iyong mga tab sa kahit saan ka man gumagamit ng Chromium, i-on ang pag-sync</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">Kapag nag-sign out ka, hindi magsi-sync ang Chromium ng anumang bagong data sa iyong Google Account. Mananatili sa account ang data na dati nang na-sync.</translation>
 <translation id="9022552996538154597">Mag-sign in sa Chromium</translation>
 <translation id="9089354809943900324">Luma na ang Chromium</translation>
+<translation id="9110075932708282655">Gamitin ang Chromium bilang Default</translation>
 <translation id="921174536258924340">Hindi masuri ng Chromium ang lahat ng password. Subukan ulit bukas o <ph name="BEGIN_LINK" />suriin ang mga password sa iyong Google Account.<ph name="END_LINK" /></translation>
 <translation id="985602178874221306">Ang Mga May-akda ng Chromium</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
index bb31efe..f0a008e 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">Certains modules complémentaires provoquent le plantage de Chromium. Veuillez désinstaller :</translation>
 <translation id="2178608107313874732">Chromium ne peut pas utiliser votre appareil photo pour le moment</translation>
 <translation id="2195025571279539885">Souhaitez-vous que Chromium vous propose de traduire les pages de ce site rédigées en <ph name="LANGUAGE_NAME" /> lors de votre prochaine visite?</translation>
+<translation id="2450140762465183767">Vous pouvez maintenant utiliser Chromium chaque fois que vous touchez des liens dans des messages, des documents et des applications.</translation>
+<translation id="2478931088402984578">Sélectionnez <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" /></translation>
 <translation id="2567507405773541360">Faites-en plus avec le navigateur Chromium : simple, sécuritaire et plus rapide que jamais</translation>
 <translation id="2590893390871230428">Synchroniser vos données Chromium</translation>
 <translation id="2650312721222849884">Pour voir vos onglets partout où vous utilisez Chromium, activez la synchronisation</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">Lorsque vous vous déconnectez, Chromium ne synchronise aucune nouvelle donnée avec votre compte Google. Les données précédemment synchronisées demeurent dans le compte.</translation>
 <translation id="9022552996538154597">Connexion à Chromium</translation>
 <translation id="9089354809943900324">Chromium n'est pas à jour</translation>
+<translation id="9110075932708282655">Utilisez Chromium par défaut</translation>
 <translation id="921174536258924340">Chromium n'a pas pu vérifier tous les mots de passe. Réessayez demain ou <ph name="BEGIN_LINK" />vérifiez les mots de passe dans votre compte Google<ph name="END_LINK" />.</translation>
 <translation id="985602178874221306">Les auteurs de Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
index 147a74b3..52890f6 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">Beberapa add-on menyebabkan Chromium mogok. Uninstal:</translation>
 <translation id="2178608107313874732">Chromium saat ini tidak dapat menggunakan kamera</translation>
 <translation id="2195025571279539885">Ingin Chromium menawarkan untuk menerjemahkan halaman berbahasa <ph name="LANGUAGE_NAME" /> dari situs ini saat Anda mengunjunginya lagi?</translation>
+<translation id="2450140762465183767">Anda sekarang dapat menggunakan Chromium kapan saja dengan mengetuk link di pesan, dokumen, dan aplikasi lainnya.</translation>
+<translation id="2478931088402984578">Pilih <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" /></translation>
 <translation id="2567507405773541360">Tingkatkan produktivitas dengan Chromium yang lebih praktis, aman, dan cepat</translation>
 <translation id="2590893390871230428">Sinkronkan Data Chromium Anda</translation>
 <translation id="2650312721222849884">Untuk melihat tab Chromium Anda dari perangkat lain, aktifkan sinkronisasi</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">Jika Anda logout, Chromium tidak akan menyinkronkan data baru apa pun ke Akun Google Anda. Data yang sebelumnya disinkronkan tetap tersimpan di akun.</translation>
 <translation id="9022552996538154597">Login ke Chromium</translation>
 <translation id="9089354809943900324">Chromium terlalu lawas</translation>
+<translation id="9110075932708282655">Gunakan Chromium secara Default</translation>
 <translation id="921174536258924340">Chromium tidak dapat memeriksa semua sandi. Coba lagi besok atau <ph name="BEGIN_LINK" />periksa sandi di Akun Google Anda<ph name="END_LINK" />.</translation>
 <translation id="985602178874221306">Pengarang Chromium</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
index 4c5ba227..e8ee7fb 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">‏תוספים מסוימים גורמים ל-Chromium לקרוס. יש להסיר אותם:</translation>
 <translation id="2178608107313874732">‏Chromium לא יכול להשתמש עכשיו במצלמה</translation>
 <translation id="2195025571279539885">‏רוצה ש-Chromium יציע בפעם הבאה לתרגם דפים ב<ph name="LANGUAGE_NAME" /> מאתר זה?</translation>
+<translation id="2450140762465183767">‏עכשיו משתמשים ב-Chromium בכל פעם שמקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation>
+<translation id="2478931088402984578">‏בוחרים באפשרות<ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" />.</translation>
 <translation id="2567507405773541360">‏Chromium מאפשר לך להספיק יותר באופן פשוט, מאובטח ומהיר מאי פעם</translation>
 <translation id="2590893390871230428">‏סנכרון נתוני Chromium שלך</translation>
 <translation id="2650312721222849884">‏כדי לראות את הכרטיסיות שלך מכל מקום שבו פתחת את Chromium יש להפעיל את הסנכרון</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">‏לאחר היציאה מהחשבון, לא יתבצע סנכרון של נתונים חדשים מ-Chromium בחשבון Google שלך. נתונים שסונכרנו בעבר יישארו בחשבון.</translation>
 <translation id="9022552996538154597">‏כניסה אל Chromium</translation>
 <translation id="9089354809943900324">‏Chromium אינו מעודכן</translation>
+<translation id="9110075932708282655">‏שימוש ב-Chromium כברירת מחדל</translation>
 <translation id="921174536258924340">‏Chromium לא הצליח לבדוק את כל הסיסמאות. אפשר לנסות שוב מחר או <ph name="BEGIN_LINK" />לבדוק את הסיסמאות בחשבון Google.<ph name="END_LINK" /></translation>
 <translation id="985602178874221306">‏מחברי Chromium</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb
index 26e8151..1dbfa71 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">កម្មវិធីបន្ថែមមួយចំនួនអាចធ្វើឲ្យ Chromium គាំង។ សូមលុបការដំឡើង៖</translation>
 <translation id="2178608107313874732">Chromium មិនអាចប្រើកាមេរ៉ារបស់អ្នកបានទេឥឡូវនេះ</translation>
 <translation id="2195025571279539885">តើអ្នកចង់ឲ្យ Chromium ផ្តល់ជូននូវការបកប្រែទំព័រ <ph name="LANGUAGE_NAME" /> ចេញពីគេហទំព័រនេះដែរឬទេនៅពេលក្រោយ?</translation>
+<translation id="2450140762465183767">ឥឡូវនេះ អ្នកអាចប្រើ Chromium រាល់ពេល​ដែលអ្នកចុចលើតំណនៅក្នុងសារ ឯកសារ និងកម្មវិធីផ្សេងទៀត។</translation>
+<translation id="2478931088402984578">ជ្រើសរើស <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" /></translation>
 <translation id="2567507405773541360">បំពេញកិច្ចការបាន​កាន់តែច្រើន​ដោយប្រើ Chromium ដ៏សាមញ្ញ មានសុវត្ថិភាព និងលឿនជាង​ពេលណា​ទាំងអស់</translation>
 <translation id="2590893390871230428">ធ្វើសមកាលកម្ម​ទិន្នន័យ Chromium របស់អ្នក</translation>
 <translation id="2650312721222849884">ដើម្បី​អាចមើលឃើញ​ផ្ទាំង​របស់អ្នក​ពី​ឧបករណ៍ទាំងឡាយ​ដែលអ្នក​ប្រើ Chromium សូមបើក​សមកាលកម្ម</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">នៅពេលអ្នក​ចេញពីគណនី Chromium នឹងមិនធ្វើ​សមកាលកម្ម​ទិន្នន័យថ្មី​ទៅគណនី Google របស់អ្នកទេ។ ទិន្នន័យ​ដែលបានធ្វើសមកាលកម្មពីមុន​បន្តស្ថិតនៅក្នុងគណនី។</translation>
 <translation id="9022552996538154597">ចូលទៅ Chromium</translation>
 <translation id="9089354809943900324">Chromium ហួសសម័យហើយ</translation>
+<translation id="9110075932708282655">ប្រើ Chromium តាម​លំនាំដើម</translation>
 <translation id="921174536258924340">Chromium មិនអាចពិនិត្យពាក្យសម្ងាត់ទាំងអស់បានទេ។ សូមព្យាយាមម្ដងទៀតនៅថ្ងៃស្អែក ឬ<ph name="BEGIN_LINK" />ពិនិត្យពាក្យសម្ងាត់នៅក្នុងគណនី Google របស់អ្នក។<ph name="END_LINK" /></translation>
 <translation id="985602178874221306">ផលិតករ Chromium</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
index e51bd07..d8868b7 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">일부 부가기능이 Chromium의 비정상 종료를 유발합니다. 다음을 제거하세요.</translation>
 <translation id="2178608107313874732">지금 Chromium에서 카메라를 사용할 수 없습니다.</translation>
 <translation id="2195025571279539885">다음에 Chromium에서 이 사이트의 <ph name="LANGUAGE_NAME" /> 페이지를 번역하시겠습니까?</translation>
+<translation id="2450140762465183767">이제 언제든 메시지, 문서 및 다른 앱에서 링크를 탭하여 Chromium을 사용할 수 있습니다</translation>
+<translation id="2478931088402984578"><ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" />을 선택합니다.</translation>
 <translation id="2567507405773541360">더욱 심플하고 안전하며 그 어느 때보다도 빠른 Chromium을 더욱 다양하게 활용하세요</translation>
 <translation id="2590893390871230428">Chromium 데이터 동기화</translation>
 <translation id="2650312721222849884">Chromium을 사용하는 어느 곳에서나 탭을 확인하려면 동기화를 사용 설정하세요.</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">로그아웃하면 Chromium에서 더 이상 새로운 데이터를 내 Google 계정에 동기화하지 않습니다. 이전에 동기화된 데이터는 계정에 그대로 유지됩니다.</translation>
 <translation id="9022552996538154597">Chromium에 로그인</translation>
 <translation id="9089354809943900324">Chromium이 이전 버전임</translation>
+<translation id="9110075932708282655">Chromium을 기본 브라우저로 사용</translation>
 <translation id="921174536258924340">Chromium에서 일부 비밀번호를 확인할 수 없습니다. 내일 다시 시도하거나 <ph name="BEGIN_LINK" />Google 계정에서 비밀번호를 확인<ph name="END_LINK" />하세요.</translation>
 <translation id="985602178874221306">The Chromium Authors</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
index 67fe9916..89996d4f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">Beberapa alat tambah menyebabkan Chromium ranap. Sila nyahpasang:</translation>
 <translation id="2178608107313874732">Chromium tidak dapat menggunakan kamera anda sekarang</translation>
 <translation id="2195025571279539885">Adakah anda mahu Chromium menawarkan halaman <ph name="LANGUAGE_NAME" /> dari tapak ini diterjemahkan pada masa akan datang?</translation>
+<translation id="2450140762465183767">Kini anda boleh menggunakan Chromium pada bila-bila masa anda mengetik pautan dalam mesej, dokumen dan apl lain.</translation>
+<translation id="2478931088402984578">Pilih <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" /></translation>
 <translation id="2567507405773541360">Selesaikan lebih banyak tugas dengan Chromium yang mudah, selamat dan lebih pantas berbanding dahulu</translation>
 <translation id="2590893390871230428">Segerakkan Data Chromium Anda</translation>
 <translation id="2650312721222849884">Untuk melihat tab anda daripada mana-mana tempat anda menggunakan Chromium, hidupkan penyegerakan</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">Apabila anda log keluar, Chromium tidak akan menyegerakkan sebarang data baharu ke Akaun Google anda. Data yang disegerakkan sebelumnya akan dikekalkan dalam akaun.</translation>
 <translation id="9022552996538154597">Log masuk ke Chromium</translation>
 <translation id="9089354809943900324">Chromium sudah usang</translation>
+<translation id="9110075932708282655">Gunakan Chromium secara Lalai</translation>
 <translation id="921174536258924340">Chromium tidak dapat menyemak semua kata laluan. Cuba lagi esok atau <ph name="BEGIN_LINK" />semak kata laluan dalam Akaun Google anda.<ph name="END_LINK" /></translation>
 <translation id="985602178874221306">Pengarang Chromium</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
index 2bf3543..e4dfaf1 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
@@ -72,6 +72,7 @@
 <translation id="7018284295775193585">Chromium nuk mund të përditësohet</translation>
 <translation id="7045244423563602563">Bëje Chromium tëndin</translation>
 <translation id="7099326575020694068">Chromium nuk mund ta përdorë kamerën tënde në modalitetin e "Pamjes së ndarë"</translation>
+<translation id="7108914401277488191">Realizo më shumë me Chromium</translation>
 <translation id="7118091470949186573">Tani mund të përdorësh Chromium sa herë që troket te lidhjet në mesazhe, dokumente dhe aplikacione të tjera.</translation>
 <translation id="7208566199746267865">Chromium të kursen kohë duke i sjellë llogaritë e tua në ueb. Mund të shtosh ose heqësh llogari te "Cilësimet".</translation>
 <translation id="725427773388857052">Chromium mund të të ndihmojë të qëndrosh i sigurt nga nxjerrjet e paautorizuara të të dhënave, faqet e pasigurta të internetit etj.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
index 06ad231..7757d42f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
@@ -22,6 +22,8 @@
 <translation id="2168108852149185974">部份外掛程式造成 Chromium 當機。請解除安裝以下程式:</translation>
 <translation id="2178608107313874732">Chromium 目前無法使用您的相機</translation>
 <translation id="2195025571279539885">您希望 Chromium 將來翻譯此網站的<ph name="LANGUAGE_NAME" />頁面嗎?</translation>
+<translation id="2450140762465183767">您現在只要在訊息、文件或其他應用程式中輕按連結,即可使用 Chromium。</translation>
+<translation id="2478931088402984578">選取 [Chromium]<ph name="BEGIN_BOLD" /><ph name="END_BOLD" /></translation>
 <translation id="2567507405773541360">Chromium 比以前更簡便、安全而快速,讓您事半功倍</translation>
 <translation id="2590893390871230428">同步處理 Chromium 資料</translation>
 <translation id="2650312721222849884">如要在任何使用 Chromium 的裝置上查看分頁,請開啟同步處理功能</translation>
@@ -100,6 +102,7 @@
 <translation id="894437814105052438">登出時,Chromium 將不會同步任何新資料至您的 Google 帳戶。不過,先前已同步處理的資料仍會保存在帳戶中。</translation>
 <translation id="9022552996538154597">登入 Chromium</translation>
 <translation id="9089354809943900324">Chromium 版本過舊</translation>
+<translation id="9110075932708282655">預設為使用 Chromium</translation>
 <translation id="921174536258924340">Chromium 無法檢查所有密碼。請明天再試,或<ph name="BEGIN_LINK" />檢查 Google 帳戶中的密碼<ph name="END_LINK" />。</translation>
 <translation id="985602178874221306">The Chromium Authors</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
index 6f4b0224..aef9b28 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome bütün parolları yoxlaya bilmədi. Sabah yenidən cəhd edin.</translation>
 <translation id="2869959624320573933">Chrome'a daxil olun</translation>
 <translation id="2919738076569633423">Chrome istifadə etməklə, <ph name="BEGIN_LINK_TOS" />Xidmət Şərtləri<ph name="END_LINK_TOS" /> ilə razılaşırsınız.</translation>
+<translation id="2957447865124070833"><ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" /> seçin</translation>
 <translation id="3030414234702425231"><ph name="SIGNOUT_MANAGED_DOMAIN" /> tərəfindən idarə edilən hesabdan çıxdığınıza görə Chrome datası bu cihazdan silinəcək. Datanız Google Hesabında qalacaq.</translation>
 <translation id="3167189358072330585">Hesabınız Google Chrome üzərində işləmir. Domen administratorunuzla əlaqə saxlayın, və ya adi Google Hesab girişi istifadə edin.</translation>
 <translation id="3173834708294760622">Google Chrome Səhifəsi</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">Digər tətbiqlərdə istənilən vaxt keçidlərə toxunduqda Chrome açılsın</translation>
 <translation id="5854621639439811139">Chrome məsləhəti. Geri, İrəli və Axtarış kimi bəzi düymələr hazırda ekranın aşağısında yerləşir.</translation>
 <translation id="5876773482963502140">Chrome'un məkanınızı bilməsinə icazə versəniz, Chrome onu icazə verdiyiniz saytlara göndərir. Yaxınlıqdakı mağazalar və ya xəbərlər kimi sizə göstərəcək yerli məlumatlar olduqda saytlar məkanınızı tələb edə bilər.</translation>
+<translation id="6054613632208573261">Defolt olaraq Chrome istifadə edin</translation>
 <translation id="6063091872902370735">Chrome girişinə icazə verin</translation>
 <translation id="6181930887571472871">Chrome'a keçin</translation>
 <translation id="6238746320622508509">Chrome'un Anonim tabları kilidləməsinə icazə verin.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Chrome'a xoş gəlmisiniz</translation>
 <translation id="7662994914830945754">Chrome istifadə etdiyiniz hər yerdən tabları görmək üçün daxil olun və sinxronizasiyanı aktiv edin</translation>
 <translation id="766361182512894255">Parolunuz data pozulması zamanı ələ keçirilib. Chrome parolunuzu indi dəyişməyi məsləhət görür.</translation>
+<translation id="7693590760643069321">İndi istənilən vaxt mesajlar, sənədlər və digər tətbiqlərdə keçidlərə toxunduqda Chrome'u istifadə edə bilərsiniz.</translation>
 <translation id="7698568245838009292">Chrome kameraya daxil olmaq istəyir</translation>
 <translation id="7855730255114109580">Google Chrome güncəldir</translation>
 <translation id="8022947259858476807">Defolt olaraq keçidləri açmaq, vidcetlərdən axtarış etmək və digər tətbiqlərdə parolları avtomatik doldurmaq üçün Chrome istifadə edin</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb
index d2346561..d6e8ca50 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Браўзеру Chrome не ўдалося праверыць усе паролі. Паўтарыце спробу заўтра.</translation>
 <translation id="2869959624320573933">Увайдзіце ў Chrome</translation>
 <translation id="2919738076569633423">Карыстаючыся Chrome, вы згаджаецеся з <ph name="BEGIN_LINK_TOS" />Умовамі выкарыстання<ph name="END_LINK_TOS" />.</translation>
+<translation id="2957447865124070833">Выберыце <ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" />.</translation>
 <translation id="3030414234702425231">Даныя Chrome будуць выдалены з гэтай прылады, паколькі вы выходзіце з уліковага запісу, якім кіруе <ph name="SIGNOUT_MANAGED_DOMAIN" />. Вашы даныя застануцца ва Уліковым запісе Google.</translation>
 <translation id="3167189358072330585">Ваш уліковы запіс у браўзеры Google Chrome не працуе. Звярніцеся да адміністратара дамена або выкарыстайце для ўваходу звычайны Уліковы запіс Google.</translation>
 <translation id="3173834708294760622">Старонка Google Chrome</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">Адкрывайце спасылкі ў браўзеры Chrome, націскаючы на іх у іншых праграмах</translation>
 <translation id="5854621639439811139">Падказка Chrome. Цяпер некаторыя кнопкі знаходзяцца ўнізе экрана, напрыклад "Назад", "Уперад", "Пошук".</translation>
 <translation id="5876773482963502140">Калі вы дазволіце браўзеру Chrome атрымліваць інфармацыю пра ваша месцазнаходжанне, ён будзе адпраўляць яе адобраным вамі сайтам. Сайты могуць запытваць ваша месцазнаходжанне для паказу мясцовай інфармацыі (напрыклад, навін або звестак пра крамы паблізу).</translation>
+<translation id="6054613632208573261">Выкарыстоўвайце Chrome стандартна</translation>
 <translation id="6063091872902370735">Дазволіць уваход у Chrome</translation>
 <translation id="6181930887571472871">Пераходзьце на Chrome</translation>
 <translation id="6238746320622508509">Дазвольце Chrome блакіраваць укладкі ў рэжыме інкогніта.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Вас вітае Chrome</translation>
 <translation id="7662994914830945754">Каб мець доступ да сваіх укладак з усіх прылад, на якіх вы выкарыстоўваеце Chrome, увайдзіце на іх ва ўліковы запіс і ўключыце сінхранізацыю</translation>
 <translation id="766361182512894255">Пры ўцечцы даных быў раскрыты ваш пароль. Chrome рэкамендуе неадкладна змяніць яго.</translation>
+<translation id="7693590760643069321">Цяпер вы можаце выкарыстоўваць Chrome кожны раз, калі адкрываеце спасылкі ў паведамленнях, дакументах або іншых праграмах.</translation>
 <translation id="7698568245838009292">Chrome запытвае доступ да камеры</translation>
 <translation id="7855730255114109580">Google Chrome абноўлены да апошняй версіі</translation>
 <translation id="8022947259858476807">Зрабіце Chrome стандартным браўзерам, каб адкрываць спасылкі, шукаць інфармацыю праз віджэты і аўтаматычна запаўняць паролі ў іншых праграмах</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb
index f7b6c7b..ac31265 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chromu se nepodařilo zkontrolovat všechna hesla. Zkuste to znovu zítra.</translation>
 <translation id="2869959624320573933">Přihlaste se do Chromu</translation>
 <translation id="2919738076569633423">Používáním Chromu vyjadřujete souhlas se <ph name="BEGIN_LINK_TOS" />smluvními podmínkami<ph name="END_LINK_TOS" />.</translation>
+<translation id="2957447865124070833">Vyberte <ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" /></translation>
 <translation id="3030414234702425231">Protože se odhlašujete z účtu spravovaného doménou <ph name="SIGNOUT_MANAGED_DOMAIN" />, vaše data prohlížeče Chrome z tohoto zařízení budou smazána. V účtu Google vám zůstanou.</translation>
 <translation id="3167189358072330585">Váš účet v prohlížeči Google Chrome nefunguje. Kontaktujte administrátora domény nebo se přihlaste pomocí běžného účtu Google.</translation>
 <translation id="3173834708294760622">Stránka prohlížeče Google Chrome</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">Otevřít Chrome při každém klepnutí na odkaz v jiné aplikaci</translation>
 <translation id="5854621639439811139">Tip pro Chrome. Některá tlačítka, například Zpět, Vpřed a Hledat, jsou teď v dolní části obrazovky.</translation>
 <translation id="5876773482963502140">Když Chromu povolíte přístup k poloze, bude ji odesílat webům, u kterých to povolíte. Weby o vaši polohu mohou žádat, pokud pro vás mají místní informace, například seznamy obchodů v okolí nebo místní zprávy.</translation>
+<translation id="6054613632208573261">Používejte Chrome ve výchozím nastavení</translation>
 <translation id="6063091872902370735">Povolit přihlášení do Chromu</translation>
 <translation id="6181930887571472871">Přepnout na Chrome</translation>
 <translation id="6238746320622508509">Nechat Chrome zamykat anonymní karty.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Vítá vás Chrome</translation>
 <translation id="7662994914830945754">Chcete-li mít své karty k dispozici všude, kde používáte Chrome, přihlaste se a zapněte synchronizaci</translation>
 <translation id="766361182512894255">Vaše heslo bylo vyzrazeno při porušení zabezpečení údajů. Chrome doporučuje heslo okamžitě změnit.</translation>
+<translation id="7693590760643069321">Nyní můžete Chrome použít pokaždé, když klepnete na odkazy ve zprávách, dokumentech a ostatních aplikacích.</translation>
 <translation id="7698568245838009292">Chrome potřebuje přístup k fotoaparátu</translation>
 <translation id="7855730255114109580">Google Chrome je aktuální</translation>
 <translation id="8022947259858476807">Používejte Chrome jako výchozí prohlížeč k otevírání odkazů, vyhledávání z widgetů a automatickému vyplňování hesel v jiných aplikacích</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
index afeee85..aae3348d 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome no pudo revisar todas las contraseñas. Vuelve a intentarlo mañana.</translation>
 <translation id="2869959624320573933">Acceder a Chrome</translation>
 <translation id="2919738076569633423">Si usas Chrome, aceptas las <ph name="BEGIN_LINK_TOS" />Condiciones del Servicio<ph name="END_LINK_TOS" />.</translation>
+<translation id="2957447865124070833">Selecciona <ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" />.</translation>
 <translation id="3030414234702425231">Como estás saliendo de una cuenta que administra <ph name="SIGNOUT_MANAGED_DOMAIN" />, tus datos de Chrome se borrarán de este dispositivo, pero permanecerán en tu Cuenta de Google.</translation>
 <translation id="3167189358072330585">Tu cuenta no funciona en Google Chrome. Comunícate con tu administrador de dominio o utiliza una cuenta común de Google para acceder.</translation>
 <translation id="3173834708294760622">Página de Google Chrome</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">Abre Chrome cada vez que presiones vínculos en otras apps</translation>
 <translation id="5854621639439811139">Sugerencia de Chrome: Algunos botones ahora están en la parte inferior de la pantalla, como Retroceder, Avanzar y Buscar.</translation>
 <translation id="5876773482963502140">Si permites que Chrome conozca tu ubicación, la enviará a los sitios que permitas. Es posible que los sitios soliciten tu ubicación cuando tienen información local para mostrarte, como noticias o tiendas cercanas.</translation>
+<translation id="6054613632208573261">Usa Chrome de forma predeterminada</translation>
 <translation id="6063091872902370735">Permitir el acceso a Chrome</translation>
 <translation id="6181930887571472871">Cambia a Chrome</translation>
 <translation id="6238746320622508509">Permite que Chrome bloquee tus pestañas de incógnito.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Te damos la bienvenida a Chrome</translation>
 <translation id="7662994914830945754">Para ver tus pestañas donde sea que uses Chrome, accede a tu cuenta y activa la sincronización</translation>
 <translation id="766361182512894255">Tu contraseña quedó expuesta en una violación de la seguridad de los datos. Chrome te recomienda cambiarla ahora.</translation>
+<translation id="7693590760643069321">Ahora puedes usar Chrome cada vez que presionas vínculos que aparecen en mensajes, documentos u otras apps.</translation>
 <translation id="7698568245838009292">Chrome quiere acceder a la cámara</translation>
 <translation id="7855730255114109580">Google Chrome está actualizado</translation>
 <translation id="8022947259858476807">Usa Chrome como tu navegador predeterminado para abrir vínculos, realizar búsquedas desde widgets y autocompletar contraseñas en otras apps</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
index 9839f6a..035bbbf 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome ei voinut tarkistaa kaikkia salasanoja. Yritä uudelleen huomenna.</translation>
 <translation id="2869959624320573933">Kirjaudu Chromeen</translation>
 <translation id="2919738076569633423">Käyttämällä Chromea hyväksyt <ph name="BEGIN_LINK_TOS" />käyttöehdot<ph name="END_LINK_TOS" />.</translation>
+<translation id="2957447865124070833">Valitse <ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" /></translation>
 <translation id="3030414234702425231">Koska kirjaudut ulos verkkotunnuksen <ph name="SIGNOUT_MANAGED_DOMAIN" /> ylläpitämältä tililtä, Chrome-datasi poistetaan tältä laitteelta. Se säilyy edelleen Google-tililläsi.</translation>
 <translation id="3167189358072330585">Tilisi ei toimi Google Chromen kanssa. Ota yhteyttä verkkotunnuksesi järjestelmänvalvojaan tai kirjaudu sisään tavallisella Google-tilillä.</translation>
 <translation id="3173834708294760622">Google Chrome ‑sivu</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">Avaa Chrome, kun napautat linkkejä muissa sovelluksissa</translation>
 <translation id="5854621639439811139">Chrome-vinkki: Takaisin, Seuraava, Haku ja jotkin muut painikkeet löytyvät nyt näytön alareunasta.</translation>
 <translation id="5876773482963502140">Jos Chrome saa nähdä sijaintisi, sijainti lähetetään sivustoille, jotka sallit. Sivustot voivat kysyä sijaintiasi, jos niillä on sinulle paikallisia tietoja, esim. uutisia tai lähistöllä olevia kauppoja.</translation>
+<translation id="6054613632208573261">Käytä oletuksena Chromea</translation>
 <translation id="6063091872902370735">Salli Chrome-kirjautuminen</translation>
 <translation id="6181930887571472871">Vaihda Chromeen</translation>
 <translation id="6238746320622508509">Anna Chromen lukita incognito-välilehtesi.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Tervetuloa Chromeen</translation>
 <translation id="7662994914830945754">Kirjaudu sisään ja laita synkronointi päälle, jotta voit nähdä Chrome-välilehtesi missä tahansa</translation>
 <translation id="766361182512894255">Salasanasi vaarantui tietosuojaloukkauksessa. Chrome suosittelee salasanan vaihtamista välittömästi.</translation>
+<translation id="7693590760643069321">Voit nyt käyttää Chromea aina, kun napautat linkkejä viesteissä, dokumenteissa tai muissa sovelluksissa.</translation>
 <translation id="7698568245838009292">Chrome pyytää kameran käyttöoikeutta</translation>
 <translation id="7855730255114109580">Google Chrome on ajan tasalla</translation>
 <translation id="8022947259858476807">Käytä Chromea oletuksena ja avaa linkkejä, hae widgeteistä ja täytä salasanoja automaattisesti muissa sovelluksissa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb
index a1cbc0d..9b72dc1 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Hindi masuri ng Chrome ang lahat ng password. Subukan ulit bukas.</translation>
 <translation id="2869959624320573933">Mag-sign In sa Chrome</translation>
 <translation id="2919738076569633423">Sa paggamit ng Chrome, sumasang-ayon ka sa <ph name="BEGIN_LINK_TOS" />Mga Tuntunin ng Serbisyo<ph name="END_LINK_TOS" />.</translation>
+<translation id="2957447865124070833">Piliin ang <ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" /></translation>
 <translation id="3030414234702425231">Dahil magsa-sign out ka sa account na pinapamahalaan ng <ph name="SIGNOUT_MANAGED_DOMAIN" />, made-delete ang iyong data sa Chrome sa device na ito. Mananatili ang data mo sa iyong Google Account.</translation>
 <translation id="3167189358072330585">Hindi gumagana ang iyong account sa Google Chrome. Mangyaring makipag-ugnayan sa iyong administrator ng domain o gumamit ng regular na Google Account upang mag-sign in.</translation>
 <translation id="3173834708294760622">Page ng Google Chrome</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">Buksan ang Chrome sa tuwing magta-tap ka sa mga link sa iba pang app</translation>
 <translation id="5854621639439811139">Tip sa Chrome. Nasa ibaba na ng iyong screen ang ilang button, tulad ng Bumalik, Susunod, at Maghanap.</translation>
 <translation id="5876773482963502140">Kung papayagan mo ang Chrome na alamin ang iyong lokasyon, ipapadala ito ng Chrome sa anumang site na papayagan mo. Posibleng hingin ng mga site ang iyong lokasyon kapag may lokal na impormasyong ipapakita sa iyo ang mga ito, tulad ng mga shop sa malapit o balita.</translation>
+<translation id="6054613632208573261">Gamitin ang Chrome bilang Default</translation>
 <translation id="6063091872902370735">Payagan ang Pag-sign In sa Chrome</translation>
 <translation id="6181930887571472871">Lumipat sa Chrome</translation>
 <translation id="6238746320622508509">Payagan ang Chrome na i-lock ang iyong mga tab na Incognito.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Welcome sa Chrome</translation>
 <translation id="7662994914830945754">Para makita ang iyong mga tab sa kahit saan ka man gumagamit ng Chrome, mag-sign in at i-on ang pag-sync</translation>
 <translation id="766361182512894255">Na-expose ang password mo sa isang paglabag sa data. Inirerekomenda ng Chromium na palitan ang password ngayon.</translation>
+<translation id="7693590760643069321">Magagamit mo na ang Chrome sa tuwing magta-tap ka ng mga link sa mga mensahe, dokumento, at iba pang app.</translation>
 <translation id="7698568245838009292">Gustong I-access ng Chrome ang Camera</translation>
 <translation id="7855730255114109580">Napapanahon ang Google Chrome</translation>
 <translation id="8022947259858476807">Gamitin ang Chrome bilang default para magbukas ng mga link, maghanap mula sa mga widget, at mag-autofill ng mga password sa iba pang app</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
index 38f1f24..7e649b9 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome n'a pas pu vérifier tous les mots de passe. Réessayez demain.</translation>
 <translation id="2869959624320573933">Connectez-vous à Chrome</translation>
 <translation id="2919738076569633423">En utilisant Chrome, vous acceptez les <ph name="BEGIN_LINK_TOS" />conditions d'utilisation<ph name="END_LINK_TOS" />.</translation>
+<translation id="2957447865124070833">Sélectionnez <ph name="BEGIN_BOLD" />Chromium<ph name="END_BOLD" /></translation>
 <translation id="3030414234702425231">Puisque vous vous déconnectez d'un compte géré par <ph name="SIGNOUT_MANAGED_DOMAIN" />, vos données Chrome seront supprimées de cet appareil. Toutefois, vos données resteront dans votre compte Google.</translation>
 <translation id="3167189358072330585">Votre compte n'est pas compatible avec Google Chrome. Veuillez communiquer avec l'administrateur de votre domaine ou utiliser un compte Google ordinaire pour vous connecter.</translation>
 <translation id="3173834708294760622">Page Google Chrome</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">Ouvrez Chrome chaque fois que vous touchez des liens dans d'autres applications</translation>
 <translation id="5854621639439811139">Conseil pour Chrome. Certains boutons se trouvent désormais en bas de votre écran, tels que Précédent, Suivant et Rechercher.</translation>
 <translation id="5876773482963502140">Si vous l'autorisez à connaître votre position, Chrome la communique à tous les sites que vous autorisez. Les sites peuvent vous demander votre position lorsqu'ils ont de l'information locale à vous présenter, comme des magasins à proximité ou des actualités.</translation>
+<translation id="6054613632208573261">Utiliser Chrome par défaut</translation>
 <translation id="6063091872902370735">Autoriser la connexion dans Chrome</translation>
 <translation id="6181930887571472871">Passer à Chrome</translation>
 <translation id="6238746320622508509">Chrome peut verrouiller vos onglets de navigation privée.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Bienvenue dans Google Chrome</translation>
 <translation id="7662994914830945754">Pour voir vos onglets partout où vous utilisez Chrome, connectez-vous et activez la synchronisation</translation>
 <translation id="766361182512894255">Votre mot de passe a été exposé dans une violation de données. Chromium vous recommande de modifier ce mot de passe maintenant.</translation>
+<translation id="7693590760643069321">Vous pouvez maintenant utiliser Chrome chaque fois que vous touchez des liens dans des messages, des documents et des applications.</translation>
 <translation id="7698568245838009292">Chrome souhaite accéder à l'appareil photo</translation>
 <translation id="7855730255114109580">Google Chrome est à jour</translation>
 <translation id="8022947259858476807">Utilisez Chrome par défaut pour ouvrir des liens, faire des recherches dans des widgets et entrer automatiquement des mots de passe dans d'autres applications</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
index 0d75ae4..b6181cf5 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome tidak dapat memeriksa semua sandi. Coba lagi besok.</translation>
 <translation id="2869959624320573933">Login ke Chrome</translation>
 <translation id="2919738076569633423">Dengan menggunakan Chrome, Anda menyetujui <ph name="BEGIN_LINK_TOS" />Persyaratan Layanan<ph name="END_LINK_TOS" />.</translation>
+<translation id="2957447865124070833">Pilih <ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" /></translation>
 <translation id="3030414234702425231">Karena Anda logout dari akun yang dikelola oleh <ph name="SIGNOUT_MANAGED_DOMAIN" />, data Chrome Anda akan dihapus dari perangkat ini. Data Anda akan tetap tersedia di Akun Google Anda.</translation>
 <translation id="3167189358072330585">Akun Anda tidak berfungsi di Google Chrome. Harap hubungi administrator domain atau gunakan Akun Google biasa untuk masuk.</translation>
 <translation id="3173834708294760622">Halaman Google Chrome</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">Membuka Chrome setiap kali Anda mengetuk link di aplikasi lainnya</translation>
 <translation id="5854621639439811139">Tips Chrome. Beberapa tombol sekarang terdapat di bagian bawah layar, seperti Kembali, Teruskan, dan Telusuri.</translation>
 <translation id="5876773482963502140">Jika Anda mengizinkan Chrome mengetahui lokasi, Chrome akan mengirimkannya ke situs apa pun yang diizinkan. Situs mungkin meminta lokasi Anda saat mereka memiliki info lokal untuk ditampilkan, seperti toko terdekat atau berita.</translation>
+<translation id="6054613632208573261">Gunakan Chrome secara Default</translation>
 <translation id="6063091872902370735">Izinkan Login Chrome</translation>
 <translation id="6181930887571472871">Beralih ke Chrome</translation>
 <translation id="6238746320622508509">Izinkan Chrome mengunci tab Samaran Anda.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Selamat Datang di Chrome</translation>
 <translation id="7662994914830945754">Untuk melihat tab Chrome Anda dari perangkat lain, login dan aktifkan sinkronisasi</translation>
 <translation id="766361182512894255">Sandi Anda terekspos saat terjadi pelanggaran data. Chrome merekomendasikan untuk mengubah sandi sekarang.</translation>
+<translation id="7693590760643069321">Anda sekarang dapat menggunakan Chrome kapan saja dengan mengetuk link di pesan, dokumen, dan aplikasi lainnya.</translation>
 <translation id="7698568245838009292">Chrome Ingin Mengakses Kamera</translation>
 <translation id="7855730255114109580">Ini adalah Google Chrome versi terbaru</translation>
 <translation id="8022947259858476807">Gunakan Chrome secara default untuk membuka link, menelusuri dari widget, dan mengisi otomatis sandi di aplikasi lainnya</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
index 1eacfe5..28bb0bb 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">‏Chrome לא הצליח לבדוק את כל הסיסמאות. אפשר לנסות שוב מחר.</translation>
 <translation id="2869959624320573933">‏כניסה ל-Chrome</translation>
 <translation id="2919738076569633423">‏השימוש ב-Chrome מהווה הסכמה ל<ph name="BEGIN_LINK_TOS" />תנאים ולהגבלות<ph name="END_LINK_TOS" />.</translation>
+<translation id="2957447865124070833">‏בוחרים באפשרות <ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" />.</translation>
 <translation id="3030414234702425231">‏יציאה מחשבון שמנוהל על ידי <ph name="SIGNOUT_MANAGED_DOMAIN" /> תגרום למחיקת נתוני Chrome שלך מהמכשיר הזה. הנתונים האלה יישארו בחשבון Google שלך.</translation>
 <translation id="3167189358072330585">‏החשבון שלך לא פועל ב-Google Chrome. יש לפנות אל מנהל הדומיין או להשתמש בחשבון Google רגיל כדי להיכנס לחשבון.</translation>
 <translation id="3173834708294760622">‏דף Google Chrome</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">‏Chrome ייפתח בכל פעם שתתבצע הקשה על קישור באפליקציות אחרות</translation>
 <translation id="5854621639439811139">‏טיפ למשתמשי Chrome. חלק מהלחצנים נמצאים עכשיו בחלק התחתון של המסך, כמו 'הקודם', 'קדימה' ו'חיפוש'.</translation>
 <translation id="5876773482963502140">‏אם מאפשרים ל-Chrome לדעת את המיקום, Chrome יכול לשלוח את המידע הזה לאתרים שנתת להם הרשאה. אתרים עשויים לבקש את המיקום שלך כאשר יש להם מידע מקומי להציג לך, כמו חדשות או חנויות קרובות.</translation>
+<translation id="6054613632208573261">‏שימוש ב-Chrome כברירת מחדל</translation>
 <translation id="6063091872902370735">‏התרת כניסה אל Chrome</translation>
 <translation id="6181930887571472871">‏לעבור ל-Chrome?</translation>
 <translation id="6238746320622508509">‏כרטיסיות מצב אנונימי יינעלו באמצעות Chrome.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">‏ברוך בואך אל Chrome</translation>
 <translation id="7662994914830945754">‏כדי לראות את הכרטיסיות שלך מכל מקום שבו פתחת את Chrome יש להיכנס לחשבון ולהפעיל את הסנכרון</translation>
 <translation id="766361182512894255">‏הסיסמה שלך נחשפה בעקבות פרצה באבטחת מידע. ההמלצה של Chrome היא לשנות את הסיסמה עכשיו.</translation>
+<translation id="7693590760643069321">‏עכשיו משתמשים ב-Chrome בכל פעם שמקישים על קישורים בהודעות, במסמכים ובאפליקציות אחרות.</translation>
 <translation id="7698568245838009292">‏ל-Chrome דרושה גישה למצלמה</translation>
 <translation id="7855730255114109580">‏Google Chrome מעודכן</translation>
 <translation id="8022947259858476807">‏כדאי להגדיר את Chrome כדפדפן ברירת המחדל כדי לפתוח קישורים, לחפש מווידג'טים ולבצע מילוי אוטומטי של סיסמאות באפליקציות אחרות</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb
index a6e47a5..ef87da1 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome មិនអាចពិនិត្យពាក្យសម្ងាត់ទាំងអស់បានទេ។ សូម​ព្យាយាម​ម្ដងទៀតនៅថ្ងៃស្អែក។</translation>
 <translation id="2869959624320573933">ចូល Chrome</translation>
 <translation id="2919738076569633423">ប្រសិនបើ​ប្រើ Chrome មានន័យថា​អ្នក​យល់ព្រម​តាម<ph name="BEGIN_LINK_TOS" />លក្ខខណ្ឌ​ប្រើប្រាស់<ph name="END_LINK_TOS" />។</translation>
+<translation id="2957447865124070833">ជ្រើសរើស <ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" /></translation>
 <translation id="3030414234702425231">ដោយសារ​អ្នកកំពុងចាក​ចេញពីគណនី​ដែលបានគ្រប់គ្រង​ដោយ <ph name="SIGNOUT_MANAGED_DOMAIN" /> ទិន្នន័យ Chrome ​របស់អ្នកនឹង​ត្រូវបានលុបចេញ​ពីឧបករណ៍នេះ។ ​ទិន្នន័យរបស់អ្នកនឹង​នៅតែស្ថិត​នៅក្នុងគណនី Google ​របស់អ្នកដដែល។</translation>
 <translation id="3167189358072330585">គណនីរបស់អ្នកមិនដំណើរការនៅលើ Google Chrome ទេ។ សូមទាក់ទងអ្នកគ្រប់គ្រងដែនរបស់អ្នក ឫប្រើគណនី Google ធម្មតាដើម្បីចូល។</translation>
 <translation id="3173834708294760622">ទំព័រ Google Chrome</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">បើក Chrome រាល់ពេល​ដែលអ្នកចុចលើ​តំណនៅក្នុងកម្មវិធី​ផ្សេងទៀត</translation>
 <translation id="5854621639439811139">គន្លឹះ​ប្រើប្រាស់ Chrome ។ ឥឡូវនេះ ប៊ូតុង​​មួយ​ចំនួនដូចជា ប៊ូតុង​ថយក្រោយ ប៊ូតុងទៅមុខ និងប៊ូតុង​ស្វែងរក ​​ស្ថិត​នៅផ្នែក​ខាងក្រោម​អេក្រង់​របស់អ្នក​។</translation>
 <translation id="5876773482963502140">ប្រសិនបើអ្នក​អនុញ្ញាតឱ្យ Chrome ស្គាល់ទីតាំង​របស់អ្នក Chrome ផ្ញើទីតាំងនេះទៅគេហទំព័រ​ ដែលអ្នកអនុញ្ញាត។ គេហទំព័រ​អាចស្នើសុំទីតាំង​របស់អ្នក នៅពេលគេហទំព័រ​ទាំងនោះ​មានព័ត៌មានក្នុងស្រុក ដើម្បីបង្ហាញ​អ្នកដូចជា ហាងនៅជិតៗ ឬព័ត៌មាន​ជាដើម។</translation>
+<translation id="6054613632208573261">ប្រើ Chrome តាម​លំនាំដើម</translation>
 <translation id="6063091872902370735">អនុញ្ញាត​ការចូល Chrome</translation>
 <translation id="6181930887571472871">ប្ដូរទៅ Chrome</translation>
 <translation id="6238746320622508509">អនុញ្ញាតឱ្យ Chrome ចាក់សោផ្ទាំងឯកជនរបស់អ្នក។</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">ស្វាគមន៍មកកាន់ Chrome</translation>
 <translation id="7662994914830945754">ដើម្បី​អាចមើលឃើញ​ផ្ទាំង​របស់អ្នក​ពី​ឧបករណ៍ទាំងឡាយ​ដែលអ្នក​ប្រើ Chrome សូមចូល​គណនី រួច​បើក​សមកាលកម្ម</translation>
 <translation id="766361182512894255">​ពាក្យសម្ងាត់​របស់អ្នកត្រូវបានបញ្ចេញនៅក្នុង​ការបែកធ្លាយ​ទិន្នន័យ។ Chrome សូមណែនាំ​ឱ្យប្ដូរ​ពាក្យសម្ងាត់​ឥឡូវនេះ។</translation>
+<translation id="7693590760643069321">ឥឡូវនេះ អ្នកអាចប្រើ Chrome រាល់ពេលដែល​អ្នកចុចលើតំណ​នៅក្នុងសារ ឯកសារ និងកម្មវិធី​ផ្សេងទៀត។</translation>
 <translation id="7698568245838009292">Chrome ចង់ចូលប្រើ​កាមេរ៉ា</translation>
 <translation id="7855730255114109580">Google Chrome នេះជា​កំណែថ្មី​ហើយ</translation>
 <translation id="8022947259858476807">ប្រើ Chrome តាមលំនាំដើម ដើម្បីបើកតំណ ស្វែងរក​ពីធាតុក្រាហ្វិក និងបំពេញ​ពាក្យសម្ងាត់ដោយស្វ័យ​ប្រវត្តិនៅក្នុងកម្មវិធី​ផ្សេងទៀត</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
index a93f8b9..1550f31 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome에서 일부 비밀번호를 확인할 수 없습니다. 내일 다시 시도해 보세요.</translation>
 <translation id="2869959624320573933">Chrome에 로그인</translation>
 <translation id="2919738076569633423">Chrome을 사용하면 <ph name="BEGIN_LINK_TOS" />서비스 약관<ph name="END_LINK_TOS" />에 동의하게 됩니다.</translation>
+<translation id="2957447865124070833"><ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" />을 선택합니다.</translation>
 <translation id="3030414234702425231"><ph name="SIGNOUT_MANAGED_DOMAIN" />에서 관리하는 계정에서 로그아웃하면 Chrome 데이터가 기기에서 삭제됩니다. Google 계정에 저장된 데이터는 그대로 유지됩니다.</translation>
 <translation id="3167189358072330585">계정이 Chrome에서 작동하지 않습니다. 도메인 관리자에게 문의하거나 일반 Google 계정으로 로그인하세요.</translation>
 <translation id="3173834708294760622">Chrome 페이지</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">다른 앱에서 링크를 탭할 때마다 Chrome을 엽니다.</translation>
 <translation id="5854621639439811139">Chrome 도움말. 뒤로, 앞으로, 검색과 같은 일부 버튼이 화면 하단으로 이동했습니다.</translation>
 <translation id="5876773482963502140">위치 정보 사용을 허용하면 Chrome이 권한이 부여된 사이트에 위치 정보를 전송합니다. 근처 상점 또는 뉴스와 같이 표시할 지역 정보가 있는 경우 사이트에서 위치를 요청할 수 있습니다.</translation>
+<translation id="6054613632208573261">Chrome을 기본 브라우저로 사용</translation>
 <translation id="6063091872902370735">Chrome 로그인 허용</translation>
 <translation id="6181930887571472871">Chrome으로 전환</translation>
 <translation id="6238746320622508509">Chrome에서 시크릿 탭을 잠그도록 허용합니다.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Chrome에 오신 것을 환영합니다</translation>
 <translation id="7662994914830945754">Chrome을 사용하는 어느 곳에서나 탭을 확인하려면 로그인한 후 동기화를 사용 설정하세요.</translation>
 <translation id="766361182512894255">정보 유출로 인해 비밀번호가 노출되었습니다. 지금 바로 비밀번호를 변경하시기 바랍니다.</translation>
+<translation id="7693590760643069321">이제 언제든 메시지, 문서 및 다른 앱에서 링크를 탭하여 Chrome을 사용할 수 있습니다.</translation>
 <translation id="7698568245838009292">Chrome에서 카메라에 액세스하려고 함</translation>
 <translation id="7855730255114109580">Chrome이 최신 버전입니다.</translation>
 <translation id="8022947259858476807">Chrome을 다른 앱에서 링크를 열고, 위젯에서 검색하고, 비밀번호를 자동 완성할 기본값으로 사용합니다.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
index 550de6f..c30b6f4 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome tidak dapat menyemak semua kata laluan. Cuba lagi esok.</translation>
 <translation id="2869959624320573933">Log Masuk ke Chrome</translation>
 <translation id="2919738076569633423">Dengan menggunakan Chrome, anda bersetuju untuk menerima <ph name="BEGIN_LINK_TOS" />Syarat Perkhidmatan<ph name="END_LINK_TOS" />.</translation>
+<translation id="2957447865124070833">Pilih <ph name="BEGIN_BOLD" />Chrome<ph name="END_BOLD" /></translation>
 <translation id="3030414234702425231">Oleh sebab anda log keluar daripada akaun yang diurus oleh <ph name="SIGNOUT_MANAGED_DOMAIN" />, data Chrome anda akan dipadamkan daripada peranti ini. Data anda akan kekal dalam Akaun Google anda.</translation>
 <translation id="3167189358072330585">Akaun anda tidak berfungsi pada Google Chrome. Sila hubungi pentadbir domain anda atau gunakan Akaun Google biasa untuk log masuk.</translation>
 <translation id="3173834708294760622">Halaman Google Chrome</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">Buka Chrome pada bila-bila masa anda mengetik pautan dalam apl lain</translation>
 <translation id="5854621639439811139">Petua Chrome. Sesetengah butang kini terletak di bahagian bawah skrin anda, seperti Kembali, Ke Hadapan dan Carian.</translation>
 <translation id="5876773482963502140">Jika anda membenarkan Chrome mengetahui lokasi anda, Chrome akan menghantar maklumat itu kepada mana-mana laman yang anda benarkan. Laman mungkin meminta lokasi anda apabila laman itu mempunyai maklumat setempat untuk ditunjukkan kepada anda, seperti kedai atau berita berdekatan.</translation>
+<translation id="6054613632208573261">Gunakan Chrome secara Lalai</translation>
 <translation id="6063091872902370735">Benarkan Log Masuk Chrome</translation>
 <translation id="6181930887571472871">Beralih kepada Chrome</translation>
 <translation id="6238746320622508509">Biarkan Chrome mengunci tab Inkognito anda.</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">Selamat Datang ke Chrome</translation>
 <translation id="7662994914830945754">Untuk melihat tab anda daripada mana-mana tempat anda menggunakan Chrome, log masuk dan hidupkan penyegerakan</translation>
 <translation id="766361182512894255">Kata laluan anda terdedah dalam suatu pelanggaran data. Chrome mengesyorkan supaya kata laluan ditukar sekarang.</translation>
+<translation id="7693590760643069321">Kini anda boleh menggunakan Chrome pada bila-bila masa anda mengetik pautan dalam mesej, dokumen dan apl lain.</translation>
 <translation id="7698568245838009292">Chrome Ingin Mengakses Kamera Anda</translation>
 <translation id="7855730255114109580">Google Chrome adalah yang terkini</translation>
 <translation id="8022947259858476807">Gunakan Chrome secara lalai untuk membuka pautan, mencari daripada widget dan melengkapkan kata laluan secara automatik dalam apl lain</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
index 3612b4a..a9f70b588 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
@@ -11,6 +11,7 @@
 <translation id="1759842336958782510">Chrome</translation>
 <translation id="1812249337131447686">Ndihmo në përmirësimin e Chrome duke i dërguar statistikat e përdorimit dhe raportet e ndërprerjeve aksidentale te Google</translation>
 <translation id="1917964099031477364">Kjo llogari dhe të dhënat e paruajtura do të hiqen nga Chrome dhe nga aplikacionet e tjera në këtë pajisje.</translation>
+<translation id="1968388653333775699">Realizo më shumë me Chrome</translation>
 <translation id="2009224836393115614">Chrome nuk mund t'i kontrollonte fjalëkalimet e tua. Provo të kontrollosh lidhjen e internetit.</translation>
 <translation id="2147651015520127414">Chrome verifikoi që <ph name="ISSUER" /> ka lëshuar certifikatën e këtij sajti të uebit.</translation>
 <translation id="2199719347983604670">Të dhënat nga "Sinkronizimi i Chrome"</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
index 1964bcd9..9e33ed63 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
@@ -28,6 +28,7 @@
 <translation id="2732745070297234559">Chrome 無法檢查所有密碼。請明天再試。</translation>
 <translation id="2869959624320573933">登入 Chrome</translation>
 <translation id="2919738076569633423">使用 Chrome 即表示您同意《<ph name="BEGIN_LINK_TOS" />服務條款<ph name="END_LINK_TOS" />》。</translation>
+<translation id="2957447865124070833">選取 [Chrome]<ph name="BEGIN_BOLD" /><ph name="END_BOLD" /></translation>
 <translation id="3030414234702425231">由於您即將登出由 <ph name="SIGNOUT_MANAGED_DOMAIN" /> 管理的帳戶,系統將刪除您在此裝置上的 Chrome 資料,但這些資料仍會保留在您的 Google 帳戶中。</translation>
 <translation id="3167189358072330585">您的帳戶不適用於 Google Chrome。請聯絡網域管理員,或使用一般的 Google 帳戶登入。</translation>
 <translation id="3173834708294760622">Google Chrome 頁面</translation>
@@ -61,6 +62,7 @@
 <translation id="5716154293141027663">在您輕按其他應用程式內的連結時開啟 Chrome</translation>
 <translation id="5854621639439811139">Chrome 提示。而家,有啲掣會喺螢幕底部,例如 [上一頁]、[下一頁] 同埋 [搜尋]。</translation>
 <translation id="5876773482963502140">如果您允許 Chrome 存取您的位置,Chrome 會將位置資料傳送至您允許的任何網站。當網站向您提供附近商家或新聞等本地資訊時,可能會要求您提供位置。</translation>
+<translation id="6054613632208573261">預設為使用 Chrome</translation>
 <translation id="6063091872902370735">允許登入 Chrome</translation>
 <translation id="6181930887571472871">切換至 Chrome</translation>
 <translation id="6238746320622508509">讓 Chrome 鎖定您的無痕式分頁。</translation>
@@ -86,6 +88,7 @@
 <translation id="7626032353295482388">歡迎使用 Chrome</translation>
 <translation id="7662994914830945754">如要在任何使用 Chrome 的裝置上查看分頁,請登入並開啟同步功能</translation>
 <translation id="766361182512894255">您的密碼因資料外洩而被洩露。Chrome 建議立即變更密碼。</translation>
+<translation id="7693590760643069321">您現在只要在訊息、文件或其他應用程式中輕按連結,即可使用 Chrome。</translation>
 <translation id="7698568245838009292">Chrome 要求存取相機</translation>
 <translation id="7855730255114109580">Google Chrome 已是最新版本</translation>
 <translation id="8022947259858476807">預設使用 Chrome 來開啟連結、從小工具搜尋,以及在其他應用程式中自動填入密碼</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb
index 91067de..e84ba4e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">İlkin Sinxronizasiyanın ayarlanması tamamlanmadı</translation>
 <translation id="2843803966603263712">Tərcümə Ayarlarını Sıfırlayın</translation>
+<translation id="2848086008667475748">Ayarlarda Defolt edin…</translation>
 <translation id="2858204748079866344">Chrome məxfiliyi qorumaq üçün parolu bu sahədə avtomatik doldurmayacaq.</translation>
 <translation id="285960592395650245">Endirməyə Yenidən cəhd edin</translation>
 <translation id="2870560284913253234">Sayt</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">Həmişə göstərin</translation>
 <translation id="418156467088430727">Oflayn versiyaya yeni tabda baxın</translation>
 <translation id="4181841719683918333">Dillər</translation>
+<translation id="4237377247299956313"><ph name="BEGIN_BOLD" />Defolt Brauzer Tətbiqi<ph name="END_BOLD" /> seçiminə toxunun</translation>
 <translation id="424315890655130736">Parol sözü daxil edin</translation>
 <translation id="4263576668337963058">Əlçatan səhifə fəaliyyətlərini göstərin</translation>
 <translation id="4267380167363222949">Növbəti Tab</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">QR kod Axtarışı</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4389019817280890563">Dili dəyişmək üçün toxunun.</translation>
+<translation id="4442550905108052454"><ph name="BEGIN_BOLD" />Ayarları<ph name="END_BOLD" /> açın</translation>
 <translation id="4454246407045105932">Dil Əlavə Edin</translation>
 <translation id="4469418912670346607">Quraşdırmağa davam edin</translation>
 <translation id="4474494258097106883">iPhone'unuz üçün hazırlanıb</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb
index 3716939..2da95fa0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Першапачатковая наладка сінхранізацыі не завершана</translation>
 <translation id="2843803966603263712">Скін. нал. перакл.</translation>
+<translation id="2848086008667475748">Зрабіць браўзер стандартным у Наладах…</translation>
 <translation id="2858204748079866344">У мэтах аховы вашай прыватнасці Chrome не будзе выкарыстоўваць аўтазапаўненне ў полі пароля.</translation>
 <translation id="285960592395650245">Паўтарыць спампоўванне</translation>
 <translation id="2870560284913253234">Сайт</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">Заўсёды паказваць</translation>
 <translation id="418156467088430727">Паказаць пазасеткавую версію ў новай укладцы</translation>
 <translation id="4181841719683918333">Мовы</translation>
+<translation id="4237377247299956313">Націсніце <ph name="BEGIN_BOLD" />Стандартны браўзер<ph name="END_BOLD" />.</translation>
 <translation id="424315890655130736">Увядз. фразу-пароль</translation>
 <translation id="4263576668337963058">Паказаць даступныя дзеянні са старонкай</translation>
 <translation id="4267380167363222949">Наступная ўкладка</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">Пошук па QR-кодзе</translation>
 <translation id="4378154925671717803">Тэлефон</translation>
 <translation id="4389019817280890563">Каб змяніць мову, націсніце.</translation>
+<translation id="4442550905108052454">Адкрыйце <ph name="BEGIN_BOLD" />Налады<ph name="END_BOLD" />.</translation>
 <translation id="4454246407045105932">Дадаванне мовы</translation>
 <translation id="4469418912670346607">Працягнуць наладку</translation>
 <translation id="4474494258097106883">Распрацавана для iPhone</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index c584c14..115c1b8 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Počáteční nastavení synchronizace nebylo dokončeno</translation>
 <translation id="2843803966603263712">Obnovit nastavení Překladače</translation>
+<translation id="2848086008667475748">Nastavit jako výchozí v Nastavení…</translation>
 <translation id="2858204748079866344">Aby Chrome chránil vaše soukromí, nebude do tohoto pole automaticky vyplňovat heslo.</translation>
 <translation id="285960592395650245">Znovu stáhnout</translation>
 <translation id="2870560284913253234">Stránky</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">Vždy zobrazovat</translation>
 <translation id="418156467088430727">Zobrazit offline verzi na nové kartě</translation>
 <translation id="4181841719683918333">Jazyky</translation>
+<translation id="4237377247299956313">Klepněte na <ph name="BEGIN_BOLD" />Výchozí prohlížeč<ph name="END_BOLD" /></translation>
 <translation id="424315890655130736">Zadání heslové fráze</translation>
 <translation id="4263576668337963058">Zobrazit dostupné akce stránky</translation>
 <translation id="4267380167363222949">Další karta</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">Hledání QR kódu</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4389019817280890563">Klepnutím změníte jazyk</translation>
+<translation id="4442550905108052454">Otevřete <ph name="BEGIN_BOLD" />Nastavení<ph name="END_BOLD" /></translation>
 <translation id="4454246407045105932">Přidat jazyk</translation>
 <translation id="4469418912670346607">Pokračovat v nastavování</translation>
 <translation id="4474494258097106883">Vytvořeno pro iPhone</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
index 428f1e11..a6770c6e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">No se completó la configuración de sincronización inicial</translation>
 <translation id="2843803966603263712">Restablecer</translation>
+<translation id="2848086008667475748">Establecer como predeterminado en Configuración…</translation>
 <translation id="2858204748079866344">Para proteger tu privacidad, Chrome no completará de forma automática tu contraseña en este campo.</translation>
 <translation id="285960592395650245">Volver a descargar</translation>
 <translation id="2870560284913253234">Sitio</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">Mostrar siempre</translation>
 <translation id="418156467088430727">Ver la versión sin conexión en una nueva pestaña</translation>
 <translation id="4181841719683918333">Idiomas</translation>
+<translation id="4237377247299956313">Presiona <ph name="BEGIN_BOLD" />App de navegador predeterminada<ph name="END_BOLD" />.</translation>
 <translation id="424315890655130736">Ingresar frase de contraseña</translation>
 <translation id="4263576668337963058">Mostrar las acciones de página disponibles</translation>
 <translation id="4267380167363222949">Siguiente pestaña</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">Búsqueda mediante código QR</translation>
 <translation id="4378154925671717803">Teléfono</translation>
 <translation id="4389019817280890563">Presiona aquí para cambiar el idioma.</translation>
+<translation id="4442550905108052454">Abre la <ph name="BEGIN_BOLD" />Configuración<ph name="END_BOLD" />.</translation>
 <translation id="4454246407045105932">Agregar idioma</translation>
 <translation id="4469418912670346607">Continuar con la configuración</translation>
 <translation id="4474494258097106883">Diseñado para tu iPhone</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index fd9f151..348733c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Alkuperäinen synkronoinnin määritys ei valmis</translation>
 <translation id="2843803966603263712">Nollaa käännösasetukset</translation>
+<translation id="2848086008667475748">Muuta oletusselaimeksi asetuksissa…</translation>
 <translation id="2858204748079866344">Tietojesi suojaamiseksi Chrome ei täytä salasanaasi automaattisesti tähän kenttään.</translation>
 <translation id="285960592395650245">Yritä latausta uudelleen</translation>
 <translation id="2870560284913253234">Sivusto</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">Näytä aina</translation>
 <translation id="418156467088430727">Näytä offline-versio uudella välilehdellä</translation>
 <translation id="4181841719683918333">Kielet</translation>
+<translation id="4237377247299956313">Valitse <ph name="BEGIN_BOLD" />Oletusselainsovellus<ph name="END_BOLD" /></translation>
 <translation id="424315890655130736">Anna tunnuslause</translation>
 <translation id="4263576668337963058">Näytä käytettävissä olevat sivutoiminnot</translation>
 <translation id="4267380167363222949">Seuraava välilehti</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">QR-koodihaku</translation>
 <translation id="4378154925671717803">Puhelin</translation>
 <translation id="4389019817280890563">Vaihda kieltä napauttamalla.</translation>
+<translation id="4442550905108052454">Avaa <ph name="BEGIN_BOLD" />Asetukset<ph name="END_BOLD" /></translation>
 <translation id="4454246407045105932">Lisää kieli</translation>
 <translation id="4469418912670346607">Jatka käyttöönottoa</translation>
 <translation id="4474494258097106883">Suunniteltu iPhonelle</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
index 948c555..8390761 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Hindi Natapos ang Pag-set Up ng Unang Pag-sync</translation>
 <translation id="2843803966603263712">I-reset ang Mga Setting ng Pagsasalin</translation>
+<translation id="2848086008667475748">Gawing Default sa Mga Setting…</translation>
 <translation id="2858204748079866344">Para protektahan ang iyong privacy, hindi io-autofill ng Chrome ang password mo sa field na ito.</translation>
 <translation id="285960592395650245">Subukan Muli ang Download</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">Palaging ipakita</translation>
 <translation id="418156467088430727">Tingnan ang Offline na Bersyon sa Bagong Tab</translation>
 <translation id="4181841719683918333">Mga Wika</translation>
+<translation id="4237377247299956313">I-tap ang <ph name="BEGIN_BOLD" />Default na Browser App<ph name="END_BOLD" /></translation>
 <translation id="424315890655130736">Ilagay ang Passphrase</translation>
 <translation id="4263576668337963058">Ipakita ang mga available na pagkilos sa page</translation>
 <translation id="4267380167363222949">Susunod na Tab</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">Paghahanap ng QR code</translation>
 <translation id="4378154925671717803">Telepono</translation>
 <translation id="4389019817280890563">I-tap para baguhin ang wika.</translation>
+<translation id="4442550905108052454">Buksan ang <ph name="BEGIN_BOLD" />Mga Setting<ph name="END_BOLD" /></translation>
 <translation id="4454246407045105932">Magdagdag ng Wika</translation>
 <translation id="4469418912670346607">Ituloy ang Pag-set up</translation>
 <translation id="4474494258097106883">Ginawa Para sa Iyong iPhone</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
index e4b3a69..c909675 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">La configuration initiale de la synchronisation n'est pas terminée</translation>
 <translation id="2843803966603263712">Réinit. param. Traduction</translation>
+<translation id="2848086008667475748">Définir par défaut dans Paramètres…</translation>
 <translation id="2858204748079866344">Afin de protéger votre confidentialité, Chrome ne remplira pas automatiquement ce champ avec votre mot de passe.</translation>
 <translation id="285960592395650245">Réessayer téléchargement</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">Toujours afficher</translation>
 <translation id="418156467088430727">Afficher la version hors ligne dans un nouvel onglet</translation>
 <translation id="4181841719683918333">Langues</translation>
+<translation id="4237377247299956313">Touchez <ph name="BEGIN_BOLD" />Navigateur par défaut<ph name="END_BOLD" /></translation>
 <translation id="424315890655130736">Entrer la phrase de passe</translation>
 <translation id="4263576668337963058">Afficher les actions de page proposées</translation>
 <translation id="4267380167363222949">Onglet suivant</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">Recherche de code QR</translation>
 <translation id="4378154925671717803">Numéro de téléphone</translation>
 <translation id="4389019817280890563">Toucher pour changer la langue.</translation>
+<translation id="4442550905108052454">Ouvrez <ph name="BEGIN_BOLD" />Paramètres<ph name="END_BOLD" /></translation>
 <translation id="4454246407045105932">Ajouter une langue</translation>
 <translation id="4469418912670346607">Poursuivre la configuration</translation>
 <translation id="4474494258097106883">Conçu pour votre iPhone</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index b188618..7be60c0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Penyiapan Sinkronisasi Awal Belum Selesai</translation>
 <translation id="2843803966603263712">Reset Setelan Terjemahan</translation>
+<translation id="2848086008667475748">Jadikan Default di Setelan …</translation>
 <translation id="2858204748079866344">Untuk melindungi privasi Anda, Chrome tidak akan melakukan IsiOtomatis sandi di kolom ini.</translation>
 <translation id="285960592395650245">Coba Download Lagi</translation>
 <translation id="2870560284913253234">Situs</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">Selalu tampilkan</translation>
 <translation id="418156467088430727">Tampilkan Versi Offline di Tab Baru</translation>
 <translation id="4181841719683918333">Bahasa</translation>
+<translation id="4237377247299956313">Ketuk <ph name="BEGIN_BOLD" />Aplikasi Browser Default<ph name="END_BOLD" /></translation>
 <translation id="424315890655130736">Masukkan Frasa Sandi</translation>
 <translation id="4263576668337963058">Tampilkan tindakan halaman yang tersedia</translation>
 <translation id="4267380167363222949">Tab Berikutnya</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">Telusuri kode QR</translation>
 <translation id="4378154925671717803">Ponsel</translation>
 <translation id="4389019817280890563">Ketuk untuk mengubah bahasa.</translation>
+<translation id="4442550905108052454">Buka <ph name="BEGIN_BOLD" />Setelan<ph name="END_BOLD" /></translation>
 <translation id="4454246407045105932">Tambahkan Bahasa</translation>
 <translation id="4469418912670346607">Lanjutkan Penyiapan</translation>
 <translation id="4474494258097106883">Dibuat untuk iPhone Anda</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
index fd8e853..eb446e9a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">ההגדרה הראשונית של הסנכרון לא הושלמה</translation>
 <translation id="2843803966603263712">‏איפוס ההגדרות של Google Translate</translation>
+<translation id="2848086008667475748">להגדרה כברירת מחדל ב'הגדרות'…</translation>
 <translation id="2858204748079866344">‏כדי לשמור על הפרטיות שלך, מערכת Chrome לא ממלאת באופן אוטומטי את הסיסמה שלך בשדה הזה.</translation>
 <translation id="285960592395650245">יש לנסות להוריד שוב</translation>
 <translation id="2870560284913253234">אתר</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">להציג תמיד</translation>
 <translation id="418156467088430727">הצגת גרסה אופליין בכרטיסייה חדשה</translation>
 <translation id="4181841719683918333">שפות</translation>
+<translation id="4237377247299956313">מקישים על <ph name="BEGIN_BOLD" />אפליקציית הדפדפן שמוגדרת כברירת מחדל<ph name="END_BOLD" />.</translation>
 <translation id="424315890655130736">הזנת ביטוי סיסמה</translation>
 <translation id="4263576668337963058">הצגה של פעולות זמינות בדף</translation>
 <translation id="4267380167363222949">הכרטיסייה הבאה</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">‏חיפוש של קוד QR</translation>
 <translation id="4378154925671717803">טלפון</translation>
 <translation id="4389019817280890563">צריך להקיש לשינוי שפה</translation>
+<translation id="4442550905108052454">פותחים את ה<ph name="BEGIN_BOLD" />הגדרות<ph name="END_BOLD" />.</translation>
 <translation id="4454246407045105932">הוספת שפה</translation>
 <translation id="4469418912670346607">להמשך ההגדרה</translation>
 <translation id="4474494258097106883">‏מותאם ל-iPhone שלך</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb
index cbc05d6..7f530a2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">ការរៀបចំសមកាលកម្ម​ដំបូង​មិនបាន​បញ្ចប់​ទេ</translation>
 <translation id="2843803966603263712">កំណត់ការកំណត់បកប្រែឡើងវិញ</translation>
+<translation id="2848086008667475748">កំណត់ជាលំនាំដើមនៅក្នុងការកំណត់…</translation>
 <translation id="2858204748079866344">ដើម្បី​ការពារ​ឯកជនភាព​របស់អ្នក Chrome នឹងមិន​បំពេញពាក្យសម្ងាត់​របស់អ្នក​ដោយស្វ័យប្រវត្តិ​នៅក្នុងកន្លែង​បញ្ចូលនេះទេ។</translation>
 <translation id="285960592395650245">ព្យាយាមទាញយកម្តងទៀត</translation>
 <translation id="2870560284913253234">គេហទំព័រ</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">បង្ហាញជានិច្ច</translation>
 <translation id="418156467088430727">មើល​កំណែ​គ្មាន​អ៊ីនធឺណិត​ក្នុង​ផ្ទាំងថ្មី</translation>
 <translation id="4181841719683918333">ភាសា</translation>
+<translation id="4237377247299956313">ចុច<ph name="BEGIN_BOLD" />កម្មវិធីរុករកតាមអ៊ីនធឺណិត​លំនាំដើម<ph name="END_BOLD" /></translation>
 <translation id="424315890655130736">បញ្ចូលឃ្លាសម្ងាត់</translation>
 <translation id="4263576668337963058">បង្ហាញ​សកម្មភាព​ទំព័រ​ដែលមាន</translation>
 <translation id="4267380167363222949">ផ្ទាំងបន្ទាប់</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">ស្វែងរក​កូដ QR</translation>
 <translation id="4378154925671717803">ទូរស័ព្ទ</translation>
 <translation id="4389019817280890563">ចុចដើម្បី​ប្ដូរភាសា។</translation>
+<translation id="4442550905108052454">បើក<ph name="BEGIN_BOLD" />ការកំណត់<ph name="END_BOLD" /></translation>
 <translation id="4454246407045105932">បញ្ចូល​ភាសា</translation>
 <translation id="4469418912670346607">បន្តរៀបចំ</translation>
 <translation id="4474494258097106883">បង្កើតឡើង​សម្រាប់ iPhone របស់អ្នក</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
index 16e9ad8..e8ab7c2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">초기 동기화 설정이 완료되지 않음</translation>
 <translation id="2843803966603263712">번역 설정 재설정</translation>
+<translation id="2848086008667475748">설정에서 기본 브라우저로 지정…</translation>
 <translation id="2858204748079866344">Chrome에서는 개인정보 보호를 위해 이 입력란의 비밀번호를 자동 완성하지 않습니다.</translation>
 <translation id="285960592395650245">다운로드 다시 시도</translation>
 <translation id="2870560284913253234">사이트</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">항상 표시</translation>
 <translation id="418156467088430727">새 탭에서 오프라인 버전 보기</translation>
 <translation id="4181841719683918333">언어</translation>
+<translation id="4237377247299956313"><ph name="BEGIN_BOLD" />Default Browser App(기본 브라우저 앱)<ph name="END_BOLD" />을 탭합니다.</translation>
 <translation id="424315890655130736">암호 입력</translation>
 <translation id="4263576668337963058">사용 가능한 페이지 작업 표시</translation>
 <translation id="4267380167363222949">다음 탭</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">QR 코드 검색</translation>
 <translation id="4378154925671717803">전화기</translation>
 <translation id="4389019817280890563">언어를 변경하려면 탭하세요.</translation>
+<translation id="4442550905108052454"><ph name="BEGIN_BOLD" />Settings(설정)<ph name="END_BOLD" />를 엽니다.</translation>
 <translation id="4454246407045105932">언어 추가</translation>
 <translation id="4469418912670346607">설정 계속하기</translation>
 <translation id="4474494258097106883">iPhone을 위한 웹브라우저</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
index 524ca37a..3deb29cc 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Persediaan Penyegerakan Permulaan Belum Selesai</translation>
 <translation id="2843803966603263712">Tetapkan semula tetapan terjemahan</translation>
+<translation id="2848086008667475748">Jadikan Lalai dalam Tetapan…</translation>
 <translation id="2858204748079866344">Untuk melindungi privasi anda, Chrome tidak akan mengisi kata laluan anda ke dalam medan ini secara automatik.</translation>
 <translation id="285960592395650245">Cuba Semula Muat Turun</translation>
 <translation id="2870560284913253234">Tapak</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">Sentiasa paparkan</translation>
 <translation id="418156467088430727">Lihat Versi Luar Talian di Tab Baharu</translation>
 <translation id="4181841719683918333">Bahasa</translation>
+<translation id="4237377247299956313">Ketik <ph name="BEGIN_BOLD" />Apl Penyemak Imbas Lalai<ph name="END_BOLD" /></translation>
 <translation id="424315890655130736">Masukkan Ungkapan Laluan</translation>
 <translation id="4263576668337963058">Tunjukkan tindakan halaman yang tersedia</translation>
 <translation id="4267380167363222949">Tab Seterusnya</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">Carian kod QR</translation>
 <translation id="4378154925671717803">Telefon</translation>
 <translation id="4389019817280890563">Ketik untuk menukar bahasa.</translation>
+<translation id="4442550905108052454">Buka <ph name="BEGIN_BOLD" />Tetapan<ph name="END_BOLD" /></translation>
 <translation id="4454246407045105932">Tambahkan Bahasa</translation>
 <translation id="4469418912670346607">Teruskan Persediaan</translation>
 <translation id="4474494258097106883">Dibina untuk iPhone Anda</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
index 5c773a54..ed8471b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -284,6 +284,7 @@
 <translation id="3691593122358196899">Faqeshënuesi u shtua te <ph name="FOLDER_TITLE" /></translation>
 <translation id="3709582977625132201">Shëno si të palexuar</translation>
 <translation id="3740397331642243698">Hap URL-të e futura në Google Chrome në modalitetin "i fshehtë".</translation>
+<translation id="3762232513783804601">Krijuar për iPad tënd</translation>
 <translation id="3771033907050503522">Skedat "e fshehura"</translation>
 <translation id="3775743491439407556">Sinkronizimi nuk po punon</translation>
 <translation id="3779810277399252432">Nuk ka lidhje interneti.</translation>
@@ -340,6 +341,7 @@
 <translation id="4389019817280890563">Trokit për ta ndryshuar gjuhën.</translation>
 <translation id="4454246407045105932">Shto gjuhën</translation>
 <translation id="4469418912670346607">Vazhdo konfigurimin</translation>
+<translation id="4474494258097106883">Krijuar për iPhone tënd</translation>
 <translation id="4476574785019001431">Cilësimet</translation>
 <translation id="4496373720959965247">Shto skeda dhe ndërro faqet</translation>
 <translation id="4502566650163919158">Kontrollo tani</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
index 3d41fa2..0dadcf2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -185,6 +185,7 @@
 <translation id="2834956026595107950"><ph name="TITLE" />,<ph name="STATE" />,<ph name="URL" /></translation>
 <translation id="2840687315230832938">未完成初始同步處理設定</translation>
 <translation id="2843803966603263712">重設翻譯設定</translation>
+<translation id="2848086008667475748">在「設定」中設定為「預設」…</translation>
 <translation id="2858204748079866344">為保障您的私隱,Chrome 不會在此欄位自動填入您的密碼。</translation>
 <translation id="285960592395650245">重新嘗試下載</translation>
 <translation id="2870560284913253234">網站</translation>
@@ -324,6 +325,7 @@
 <translation id="4172051516777682613">永遠顯示</translation>
 <translation id="418156467088430727">在新分頁中查看離線版本</translation>
 <translation id="4181841719683918333">語言</translation>
+<translation id="4237377247299956313">輕按 [預設瀏覽器應用程式]<ph name="BEGIN_BOLD" /><ph name="END_BOLD" /></translation>
 <translation id="424315890655130736">輸入密碼短語</translation>
 <translation id="4263576668337963058">顯示可用的網頁動作</translation>
 <translation id="4267380167363222949">下一個分頁</translation>
@@ -339,6 +341,7 @@
 <translation id="4375040482473363939">二維條碼搜尋</translation>
 <translation id="4378154925671717803">電話號碼</translation>
 <translation id="4389019817280890563">輕按即可變更語言。</translation>
+<translation id="4442550905108052454">開啟「設定」<ph name="BEGIN_BOLD" /><ph name="END_BOLD" /></translation>
 <translation id="4454246407045105932">新增語言</translation>
 <translation id="4469418912670346607">繼續設定</translation>
 <translation id="4474494258097106883">專為 iPhone 而設</translation>
diff --git a/ios/chrome/browser/metrics/ukm_egtest.mm b/ios/chrome/browser/metrics/ukm_egtest.mm
index bfc66f22..0a405a1 100644
--- a/ios/chrome/browser/metrics/ukm_egtest.mm
+++ b/ios/chrome/browser/metrics/ukm_egtest.mm
@@ -93,12 +93,6 @@
   [super tearDown];
 }
 
-- (AppLaunchConfiguration)appConfigurationForTestCase {
-  AppLaunchConfiguration config;
-  config.features_disabled.push_back(signin::kMobileIdentityConsistency);
-  return config;
-}
-
 #pragma mark - Helpers
 
 // Waits for a new incognito tab to be opened.
diff --git a/ios/chrome/browser/signin/BUILD.gn b/ios/chrome/browser/signin/BUILD.gn
index 02eab0ac..14ff068 100644
--- a/ios/chrome/browser/signin/BUILD.gn
+++ b/ios/chrome/browser/signin/BUILD.gn
@@ -43,6 +43,8 @@
     "ios_chrome_signin_status_metrics_provider_delegate.h",
     "pattern_account_restriction.h",
     "pattern_account_restriction.mm",
+    "resized_avatar_cache.h",
+    "resized_avatar_cache.mm",
     "signin_browser_state_info_updater.h",
     "signin_browser_state_info_updater.mm",
     "signin_browser_state_info_updater_factory.h",
@@ -82,12 +84,15 @@
     "//ios/chrome/browser/reading_list:reading_list_remover",
     "//ios/chrome/browser/ui/authentication/signin:signin_headers",
     "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/table_view/cells:cells_constants",
+    "//ios/chrome/browser/ui/util",
     "//ios/chrome/browser/webdata_services",
     "//ios/chrome/common",
     "//ios/net",
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/signin",
     "//ios/public/provider/chrome/browser/signin:signin_error_api",
+    "//ios/public/provider/chrome/browser/signin:signin_resources_api",
     "//ios/web/common",
     "//ios/web/common:web_view_creation_util",
     "//net",
diff --git a/ios/chrome/browser/signin/chrome_account_manager_service.h b/ios/chrome/browser/signin/chrome_account_manager_service.h
index 2b43471..1f63cff 100644
--- a/ios/chrome/browser/signin/chrome_account_manager_service.h
+++ b/ios/chrome/browser/signin/chrome_account_manager_service.h
@@ -11,12 +11,14 @@
 #include "base/strings/string_piece.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/prefs/pref_change_registrar.h"
+#include "ios/chrome/browser/signin/constants.h"
 #import "ios/chrome/browser/signin/pattern_account_restriction.h"
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
 #include "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
 
 class PrefService;
+@class ResizedAvatarCache;
 
 // Service that provides Chrome identities.
 class ChromeAccountManagerService : public KeyedService,
@@ -73,6 +75,12 @@
   // Returns the first ChromeIdentity object.
   ChromeIdentity* GetDefaultIdentity() const;
 
+  // Returns the identity avatar. If the avatar is not available, it is fetched
+  // in background (a notification will be received when it will be available),
+  // and the default avatar is returned (see |Observer::OnIdentityChanged()|).
+  UIImage* GetIdentityAvatarWithIdentity(ChromeIdentity* identity,
+                                         IdentityAvatarSize size);
+
   // KeyedService implementation.
   void Shutdown() override;
 
@@ -95,6 +103,10 @@
   // pref_service_ is null, no identity will be filtered.
   void UpdateRestriction();
 
+  // Returns a ResizedAvatarCache based on |avatar_size|.
+  ResizedAvatarCache* GetAvatarCacheForIdentityAvatarSize(
+      IdentityAvatarSize avatar_size);
+
   // Used to retrieve restricted patterns.
   PrefService* pref_service_ = nullptr;
   // Used to filter ChromeIdentities.
@@ -109,6 +121,13 @@
   base::ScopedObservation<ios::ChromeBrowserProvider,
                           ios::ChromeBrowserProvider::Observer>
       browser_provider_observation_{this};
+
+  // ResizedAvatarCache for IdentityAvatarSize::TableViewIcon.
+  ResizedAvatarCache* default_table_view_avatar_cache_;
+  // ResizedAvatarCache for IdentityAvatarSize::SmallSize.
+  ResizedAvatarCache* small_size_avatar_cache_;
+  // ResizedAvatarCache for IdentityAvatarSize::DefaultLarge.
+  ResizedAvatarCache* default_large_avatar_cache_;
 };
 
 #endif  // IOS_CHROME_BROWSER_SIGNIN_CHROME_ACCOUNT_MANAGER_SERVICE_H_
diff --git a/ios/chrome/browser/signin/chrome_account_manager_service.mm b/ios/chrome/browser/signin/chrome_account_manager_service.mm
index 4a4edead..12d43f8 100644
--- a/ios/chrome/browser/signin/chrome_account_manager_service.mm
+++ b/ios/chrome/browser/signin/chrome_account_manager_service.mm
@@ -9,8 +9,12 @@
 #include "components/prefs/pref_service.h"
 #include "components/signin/public/base/signin_pref_names.h"
 #include "ios/chrome/browser/application_context.h"
+#import "ios/chrome/browser/signin/resized_avatar_cache.h"
+#import "ios/chrome/browser/ui/util/ui_util.h"
+#import "ios/chrome/browser/ui/util/uikit_ui_util.h"
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #include "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
+#import "ios/public/provider/chrome/browser/signin/signin_resources_api.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -217,12 +221,13 @@
   return helper.default_identity();
 }
 
-void ChromeAccountManagerService::UpdateRestriction() {
-  restriction_ = PatternAccountRestrictionFromPreference(pref_service_);
-  // We want to notify the user that the account list has been updated. This
-  // might provide notifications with no changes (if the new restriction doesn't
-  // change the account list).
-  OnIdentityListChanged(/* need_user_approval */ true);
+UIImage* ChromeAccountManagerService::GetIdentityAvatarWithIdentity(
+    ChromeIdentity* identity,
+    IdentityAvatarSize avatar_size) {
+  ResizedAvatarCache* avatar_cache =
+      GetAvatarCacheForIdentityAvatarSize(avatar_size);
+  DCHECK(avatar_cache);
+  return [avatar_cache resizedAvatarForIdentity:identity];
 }
 
 void ChromeAccountManagerService::Shutdown() {
@@ -265,3 +270,34 @@
   DCHECK(!identity_service_observation_.IsObserving());
   browser_provider_observation_.Reset();
 }
+
+void ChromeAccountManagerService::UpdateRestriction() {
+  restriction_ = PatternAccountRestrictionFromPreference(pref_service_);
+  // We want to notify the user that the account list has been updated. This
+  // might provide notifications with no changes (if the new restriction doesn't
+  // change the account list).
+  OnIdentityListChanged(/* need_user_approval */ true);
+}
+
+ResizedAvatarCache*
+ChromeAccountManagerService::GetAvatarCacheForIdentityAvatarSize(
+    IdentityAvatarSize avatar_size) {
+  ResizedAvatarCache* __strong* avatar_cache = nil;
+  switch (avatar_size) {
+    case IdentityAvatarSize::TableViewIcon:
+      avatar_cache = &default_table_view_avatar_cache_;
+      break;
+    case IdentityAvatarSize::SmallSize:
+      avatar_cache = &small_size_avatar_cache_;
+      break;
+    case IdentityAvatarSize::DefaultLarge:
+      avatar_cache = &default_large_avatar_cache_;
+      break;
+  }
+  DCHECK(avatar_cache);
+  if (!*avatar_cache) {
+    *avatar_cache =
+        [[ResizedAvatarCache alloc] initWithIdentityAvatarSize:avatar_size];
+  }
+  return *avatar_cache;
+}
diff --git a/ios/chrome/browser/signin/constants.h b/ios/chrome/browser/signin/constants.h
index d9f51dc..2ed73cf6 100644
--- a/ios/chrome/browser/signin/constants.h
+++ b/ios/chrome/browser/signin/constants.h
@@ -36,6 +36,17 @@
   POST_SIGNIN_ACTION_START_SYNC,
 } PostSignInAction;
 
+// Enum for identity avatar size. See GetSizeForIdentityAvatarSize() to convert
+// the enum value to point.
+enum class IdentityAvatarSize {
+  // 30 pt.
+  TableViewIcon,
+  // 32 pt.
+  SmallSize,
+  // 40 pt.
+  DefaultLarge,
+};
+
 namespace signin_ui {
 
 // Completion callback for a sign-in operation.
diff --git a/ios/chrome/browser/ui/authentication/resized_avatar_cache.h b/ios/chrome/browser/signin/resized_avatar_cache.h
similarity index 64%
rename from ios/chrome/browser/ui/authentication/resized_avatar_cache.h
rename to ios/chrome/browser/signin/resized_avatar_cache.h
index 2a5c2b8..e7679aa 100644
--- a/ios/chrome/browser/ui/authentication/resized_avatar_cache.h
+++ b/ios/chrome/browser/signin/resized_avatar_cache.h
@@ -2,11 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_RESIZED_AVATAR_CACHE_H_
-#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_RESIZED_AVATAR_CACHE_H_
+#ifndef IOS_CHROME_BROWSER_SIGNIN_RESIZED_AVATAR_CACHE_H_
+#define IOS_CHROME_BROWSER_SIGNIN_RESIZED_AVATAR_CACHE_H_
 
 #import <UIKit/UIKit.h>
 
+#include "ios/chrome/browser/signin/constants.h"
+
 @class ChromeIdentity;
 @class UIImage;
 
@@ -16,13 +18,8 @@
 // Initializes a new object with width and height of resized avatar.
 - (instancetype)initWithSize:(CGSize)size NS_DESIGNATED_INITIALIZER;
 
-// Initializes a new object with the default-large size. This is used on the
-// identity chooser for example.
-- (instancetype)initWithDefaultLarge;
-
-// Initializes a new object with the default size for table views. This is used
-// on the cells in Settings for example.
-- (instancetype)initWithDefaultTableView;
+// Initializes a new object based on |IdentityAvatarSize|.
+- (instancetype)initWithIdentityAvatarSize:(IdentityAvatarSize)avatarSize;
 
 - (instancetype)init NS_UNAVAILABLE;
 
@@ -34,4 +31,4 @@
 - (UIImage*)resizedAvatarForIdentity:(ChromeIdentity*)identity;
 @end
 
-#endif  // IOS_CHROME_BROWSER_UI_AUTHENTICATION_RESIZED_AVATAR_CACHE_H_
+#endif  // IOS_CHROME_BROWSER_SIGNIN_RESIZED_AVATAR_CACHE_H_
diff --git a/ios/chrome/browser/ui/authentication/resized_avatar_cache.mm b/ios/chrome/browser/signin/resized_avatar_cache.mm
similarity index 80%
rename from ios/chrome/browser/ui/authentication/resized_avatar_cache.mm
rename to ios/chrome/browser/signin/resized_avatar_cache.mm
index 7cea5f2..664090c 100644
--- a/ios/chrome/browser/ui/authentication/resized_avatar_cache.mm
+++ b/ios/chrome/browser/signin/resized_avatar_cache.mm
@@ -2,10 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
+#import "ios/chrome/browser/signin/resized_avatar_cache.h"
 
-#import "ios/chrome/browser/ui/authentication/authentication_constants.h"
-#import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h"
+#import "ios/chrome/browser/signin/signin_util.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
@@ -40,14 +39,9 @@
   return self;
 }
 
-- (instancetype)initWithDefaultLarge {
-  return [self initWithSize:CGSizeMake(kAccountProfilePhotoDimension,
-                                       kAccountProfilePhotoDimension)];
-}
-
-- (instancetype)initWithDefaultTableView {
-  return [self initWithSize:CGSizeMake(kTableViewIconImageSize,
-                                       kTableViewIconImageSize)];
+- (instancetype)initWithIdentityAvatarSize:(IdentityAvatarSize)avatarSize {
+  CGSize size = GetSizeForIdentityAvatarSize(avatarSize);
+  return [self initWithSize:size];
 }
 
 - (UIImage*)resizedAvatarForIdentity:(ChromeIdentity*)identity {
diff --git a/ios/chrome/browser/signin/signin_util.h b/ios/chrome/browser/signin/signin_util.h
index 4a5b9dc1..ad872ff 100644
--- a/ios/chrome/browser/signin/signin_util.h
+++ b/ios/chrome/browser/signin/signin_util.h
@@ -5,11 +5,13 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_SIGNIN_UTIL_H_
 #define IOS_CHROME_BROWSER_SIGNIN_SIGNIN_UTIL_H_
 
-#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
 
 #include <set>
 #include <string>
 
+#include "ios/chrome/browser/signin/constants.h"
+
 @class ChromeIdentity;
 
 // Returns an NSArray of |scopes| as NSStrings.
@@ -21,4 +23,7 @@
 // should not be handled.
 bool ShouldHandleSigninError(NSError* error);
 
+// Returns CGSize based on |IdentityAvatarSize|.
+CGSize GetSizeForIdentityAvatarSize(IdentityAvatarSize avatar_size);
+
 #endif  // IOS_CHROME_BROWSER_SIGNIN_SIGNIN_UTIL_H_
diff --git a/ios/chrome/browser/signin/signin_util.mm b/ios/chrome/browser/signin/signin_util.mm
index 2075dee..526e2c834 100644
--- a/ios/chrome/browser/signin/signin_util.mm
+++ b/ios/chrome/browser/signin/signin_util.mm
@@ -25,3 +25,20 @@
   return ios::provider::GetSigninErrorCategory(error) !=
          ios::provider::SigninErrorCategory::kUserCancellationError;
 }
+
+CGSize GetSizeForIdentityAvatarSize(IdentityAvatarSize avatar_size) {
+  CGFloat size = 0;
+  switch (avatar_size) {
+    case IdentityAvatarSize::TableViewIcon:
+      size = 30.;
+      break;
+    case IdentityAvatarSize::SmallSize:
+      size = 32.;
+      break;
+    case IdentityAvatarSize::DefaultLarge:
+      size = 40.;
+      break;
+  }
+  DCHECK_NE(size, 0);
+  return CGSizeMake(size, size);
+}
diff --git a/ios/chrome/browser/ui/authentication/BUILD.gn b/ios/chrome/browser/ui/authentication/BUILD.gn
index eb75d01..5f4e2381 100644
--- a/ios/chrome/browser/ui/authentication/BUILD.gn
+++ b/ios/chrome/browser/ui/authentication/BUILD.gn
@@ -16,8 +16,6 @@
     "authentication_ui_util.mm",
     "re_signin_infobar_delegate.h",
     "re_signin_infobar_delegate.mm",
-    "resized_avatar_cache.h",
-    "resized_avatar_cache.mm",
     "signed_in_accounts_view_controller.h",
     "signed_in_accounts_view_controller.mm",
     "signin_notification_infobar_delegate.h",
@@ -58,7 +56,6 @@
     "//ios/chrome/browser/ui/infobars/resources:infobar_warning",
     "//ios/chrome/browser/ui/settings:settings_root",
     "//ios/chrome/browser/ui/signin:signin_presenter",
-    "//ios/chrome/browser/ui/table_view/cells:cells_constants",
     "//ios/chrome/browser/ui/util",
     "//ios/chrome/browser/unified_consent",
     "//ios/chrome/browser/web_state_list",
diff --git a/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm b/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm
index d9ce5b0..34acf520 100644
--- a/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm
+++ b/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm
@@ -17,7 +17,6 @@
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_observer_bridge.h"
 #include "ios/chrome/browser/signin/identity_manager_factory.h"
-#import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_account_item.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_controller.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
@@ -66,7 +65,6 @@
   ChromeBrowserState* _browserState;  // Weak.
   std::unique_ptr<ChromeAccountManagerServiceObserverBridge>
       _accountManagerServiceObserver;
-  ResizedAvatarCache* _avatarCache;
 
   // Enable lookup of item corresponding to a given identity GAIA ID string.
   NSDictionary<NSString*, CollectionViewItem*>* _identityMap;
@@ -85,7 +83,6 @@
       [super initWithLayout:layout style:CollectionViewControllerStyleDefault];
   if (self) {
     _browserState = browserState;
-    _avatarCache = [[ResizedAvatarCache alloc] initWithDefaultLarge];
     _accountManagerService =
         ChromeAccountManagerServiceFactory::GetForBrowserState(_browserState);
     _accountManagerServiceObserver.reset(
@@ -150,7 +147,8 @@
 
 - (void)updateAccountItem:(CollectionViewAccountItem*)item
              withIdentity:(ChromeIdentity*)identity {
-  item.image = [_avatarCache resizedAvatarForIdentity:identity];
+  item.image = self.accountManagerService->GetIdentityAvatarWithIdentity(
+      identity, IdentityAvatarSize::DefaultLarge);
   item.text = [identity userFullName];
   item.detailText = [identity userEmail];
   item.chromeIdentity = identity;
diff --git a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm
index 4f6f52b..9ebccfd 100644
--- a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm
@@ -30,7 +30,7 @@
 #endif
 
 using chrome_test_util::GoogleServicesSettingsView;
-using chrome_test_util::GoogleServicesSettingsButton;
+using chrome_test_util::GoogleSyncSettingsButton;
 using chrome_test_util::PrimarySignInButton;
 using chrome_test_util::SettingsDoneButton;
 using chrome_test_util::SettingsLink;
@@ -54,12 +54,6 @@
 
 @implementation AdvancedSettingsSigninTestCase
 
-- (AppLaunchConfiguration)appConfigurationForTestCase {
-  AppLaunchConfiguration config;
-  config.features_enabled.push_back(signin::kMobileIdentityConsistency);
-  return config;
-}
-
 - (void)setUp {
   [super setUp];
 
@@ -112,7 +106,7 @@
   [BookmarkEarlGrey setupStandardBookmarks];
 
   // Sign out and clear data from Sync settings.
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleSyncSettingsButton()];
   [[[EarlGrey selectElementWithMatcher:
                   grey_accessibilityLabel(l10n_util::GetNSString(
                       IDS_IOS_OPTIONS_ACCOUNTS_SIGN_OUT_TURN_OFF_SYNC))]
@@ -158,7 +152,7 @@
   [BookmarkEarlGrey setupStandardBookmarks];
 
   // Sign out and keep data from Sync settings.
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleSyncSettingsButton()];
   [[[EarlGrey selectElementWithMatcher:
                   grey_accessibilityLabel(l10n_util::GetNSString(
                       IDS_IOS_OPTIONS_ACCOUNTS_SIGN_OUT_TURN_OFF_SYNC))]
@@ -216,10 +210,13 @@
   // Test the user is signed in.
   [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
 
-  // Test the sync error message is visible.
-  [[EarlGrey selectElementWithMatcher:GoogleServicesSettingsButton()]
+  // Give the Sync state a chance to finish UI updates.
+  [ChromeEarlGrey
+      waitForSufficientlyVisibleElementWithMatcher:GoogleSyncSettingsButton()];
+  [[EarlGrey selectElementWithMatcher:GoogleSyncSettingsButton()]
       performAction:grey_tap()];
 
+  // Test the sync error message is visible.
   ConditionBlock condition = ^{
     NSError* error = nil;
     [[EarlGrey
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm
index fe85d1f..8c407f6 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm
@@ -6,7 +6,6 @@
 
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_observer_bridge.h"
-#import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
 #import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h"
 #import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h"
 #import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
@@ -22,7 +21,6 @@
       _accountManagerServiceObserver;
 }
 
-@property(nonatomic, strong) ResizedAvatarCache* avatarCache;
 // Configurators based on ChromeIdentity list.
 @property(nonatomic, strong) NSArray* sortedIdentityItemConfigurators;
 // Account manager service to retrieve Chrome identities.
@@ -41,7 +39,6 @@
     _accountManagerServiceObserver =
         std::make_unique<ChromeAccountManagerServiceObserverBridge>(
             self, _accountManagerService);
-    _avatarCache = [[ResizedAvatarCache alloc] initWithDefaultLarge];
     _selectedIdentity = selectedIdentity;
     [self loadIdentityItemConfigurators];
   }
@@ -108,7 +105,9 @@
   configurator.gaiaID = identity.gaiaID;
   configurator.name = identity.userFullName;
   configurator.email = identity.userEmail;
-  configurator.avatar = [self.avatarCache resizedAvatarForIdentity:identity];
+  configurator.avatar =
+      self.accountManagerService->GetIdentityAvatarWithIdentity(
+          identity, IdentityAvatarSize::DefaultLarge);
   configurator.selected = [identity isEqual:self.selectedIdentity];
 }
 
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.mm b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.mm
index c70e405..5bdb9a6 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.mm
@@ -6,7 +6,6 @@
 
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_observer_bridge.h"
-#import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
 #import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h"
 #import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
 
@@ -21,7 +20,6 @@
 }
 
 @property(nonatomic, strong) UIImage* avatar;
-@property(nonatomic, strong) ResizedAvatarCache* avatarCache;
 @property(nonatomic, assign) ChromeAccountManagerService* accountManagerService;
 
 @end
@@ -36,7 +34,6 @@
     _accountManagerServiceObserver =
         std::make_unique<ChromeAccountManagerServiceObserverBridge>(
             self, _accountManagerService);
-    _avatarCache = [[ResizedAvatarCache alloc] initWithDefaultLarge];
   }
   return self;
 }
@@ -92,8 +89,8 @@
   [self.consumer updateWithFullName:self.selectedIdentity.userFullName
                           givenName:self.selectedIdentity.userGivenName
                               email:self.selectedIdentity.userEmail];
-  UIImage* avatar =
-      [self.avatarCache resizedAvatarForIdentity:self.selectedIdentity];
+  UIImage* avatar = self.accountManagerService->GetIdentityAvatarWithIdentity(
+      self.selectedIdentity, IdentityAvatarSize::TableViewIcon);
   [self.consumer updateUserAvatar:avatar];
 }
 
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_mice_egtest.mm b/ios/chrome/browser/ui/authentication/signin/signin_coordinator_mice_egtest.mm
index 99cf994..dca0f8f9 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_mice_egtest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator_mice_egtest.mm
@@ -28,6 +28,7 @@
 
 using chrome_test_util::ButtonWithAccessibilityLabelId;
 using chrome_test_util::ButtonWithAccessibilityLabel;
+using chrome_test_util::GoogleServicesSettingsButton;
 using chrome_test_util::PrimarySignInButton;
 using chrome_test_util::SettingsAccountButton;
 using chrome_test_util::SettingsDoneButton;
@@ -255,6 +256,9 @@
   [ChromeEarlGreyUI tapSettingsMenuButton:PrimarySignInButton()];
   [SigninEarlGreyUI tapSigninConfirmationDialog];
 
+  // Give the Sync state a chance to finish UI updates.
+  [ChromeEarlGrey waitForSufficientlyVisibleElementWithMatcher:
+                      GoogleServicesSettingsButton()];
   [[EarlGrey
       selectElementWithMatcher:
           grey_allOf(grey_accessibilityValue(l10n_util::GetNSString(
diff --git a/ios/chrome/browser/ui/authentication/signin_matchers.h b/ios/chrome/browser/ui/authentication/signin_matchers.h
index 41016e7f..555d247 100644
--- a/ios/chrome/browser/ui/authentication/signin_matchers.h
+++ b/ios/chrome/browser/ui/authentication/signin_matchers.h
@@ -20,6 +20,10 @@
 // Returns a matcher for the skip button in the web sign-in consistency dialog.
 id<GREYMatcher> WebSigninSkipButtonMatcher();
 
+// Returns matcher for the Google Sync Settings button on the main Settings
+// screen.
+id<GREYMatcher> GoogleSyncSettingsButton();
+
 }  // namespace chrome_test_util
 
 #endif  // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_MATCHERS_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_matchers.mm b/ios/chrome/browser/ui/authentication/signin_matchers.mm
index b08b6c4a..fa83a305 100644
--- a/ios/chrome/browser/ui/authentication/signin_matchers.mm
+++ b/ios/chrome/browser/ui/authentication/signin_matchers.mm
@@ -6,6 +6,7 @@
 
 #import "ios/chrome/browser/ui/authentication/signin/signin_constants.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h"
+#import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h"
 #import "ios/testing/earl_grey/earl_grey_test.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -30,4 +31,10 @@
       grey_sufficientlyVisible(), nil);
 }
 
+id<GREYMatcher> GoogleSyncSettingsButton() {
+  return grey_allOf(
+      grey_kindOfClass([UITableViewCell class]), grey_sufficientlyVisible(),
+      grey_accessibilityID(kSettingsGoogleSyncAndServicesCellId), nil);
+}
+
 }  // namespace chrome_test_util
diff --git a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator.mm b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator.mm
index ba3a433..76cc8df 100644
--- a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator.mm
+++ b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator.mm
@@ -23,8 +23,6 @@
 // Unified consent view controller.
 @property(nonatomic, weak)
     UnifiedConsentViewController* unifiedConsentViewController;
-// Image for the selected identity avatar.
-@property(nonatomic, strong) UIImage* selectedIdentityAvatar;
 // NO until the mediator is started.
 @property(nonatomic, assign) BOOL started;
 // Authentication service for identities.
@@ -36,11 +34,6 @@
 
 @implementation UnifiedConsentMediator
 
-@synthesize selectedIdentityAvatar = _selectedIdentityAvatar;
-@synthesize selectedIdentity = _selectedIdentity;
-@synthesize unifiedConsentViewController = _unifiedConsentViewController;
-@synthesize started = _started;
-
 - (instancetype)initWithUnifiedConsentViewController:
                     (UnifiedConsentViewController*)viewController
                                authenticationService:
@@ -93,7 +86,6 @@
   // nil is allowed only if there is no other identity.
   DCHECK(selectedIdentity || !self.accountManagerService->HasIdentities());
   _selectedIdentity = selectedIdentity;
-  self.selectedIdentityAvatar = nil;
   [self updateViewController];
 }
 
@@ -114,42 +106,30 @@
   // The UI should not be updated before the view is loaded.
   if (!self.started)
     return;
+  if (!self.accountManagerService)
+    return;
+
   if (self.selectedIdentity) {
     [self.unifiedConsentViewController
         updateIdentityButtonControlWithUserFullName:self.selectedIdentity
                                                         .userFullName
                                               email:self.selectedIdentity
                                                         .userEmail];
+    UIImage* avatar = self.accountManagerService->GetIdentityAvatarWithIdentity(
+        self.selectedIdentity, IdentityAvatarSize::DefaultLarge);
+    DCHECK(avatar);
     [self.unifiedConsentViewController
-        updateIdentityButtonControlWithAvatar:self.selectedIdentityAvatar];
-    ChromeIdentity* selectedIdentity = self.selectedIdentity;
-    __weak UnifiedConsentMediator* weakSelf = self;
-    ios::GetChromeBrowserProvider()
-        .GetChromeIdentityService()
-        ->GetAvatarForIdentity(selectedIdentity, ^(UIImage* identityAvatar) {
-          if (weakSelf.selectedIdentity != selectedIdentity)
-            return;
-          [weakSelf identityAvatarUpdated:identityAvatar];
-        });
+        updateIdentityButtonControlWithAvatar:avatar];
   } else {
     [self.unifiedConsentViewController hideIdentityButtonControl];
   }
 }
 
-- (void)identityAvatarUpdated:(UIImage*)identityAvatar {
-  if (_selectedIdentityAvatar == identityAvatar)
-    return;
-  _selectedIdentityAvatar = identityAvatar;
-  [self.unifiedConsentViewController
-      updateIdentityButtonControlWithAvatar:self.selectedIdentityAvatar];
-}
-
 #pragma mark - ChromeAccountManagerServiceObserver
 
 - (void)identityListChanged {
-  if (!self.accountManagerService) {
+  if (!self.accountManagerService)
     return;
-  }
 
   if (!self.selectedIdentity ||
       !self.accountManagerService->IsValidIdentity(self.selectedIdentity)) {
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
index 2a0d32d..ef06edb 100644
--- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn
+++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -72,7 +72,6 @@
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/activity_services",
     "//ios/chrome/browser/ui/alert_coordinator",
-    "//ios/chrome/browser/ui/authentication",
     "//ios/chrome/browser/ui/collection_view/cells",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/content_suggestions:content_suggestions_constant",
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
index 427124f..086542c 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
@@ -9,6 +9,7 @@
 #include "base/ios/ios_util.h"
 #include "base/mac/foundation_util.h"
 #include "base/metrics/user_metrics.h"
+#import "base/strings/sys_string_conversions.h"
 #include "components/signin/public/base/account_consistency_method.h"
 #include "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
@@ -750,6 +751,10 @@
 
 - (void)updateAccountImage:(UIImage*)image {
   self.identityDiscButton.hidden = !image;
+  DCHECK(image == nil ||
+         (image.size.width == ntp_home::kIdentityAvatarDimension &&
+          image.size.height == ntp_home::kIdentityAvatarDimension))
+      << base::SysNSStringToUTF8([image description]);
   [self.identityDiscButton setImage:image forState:UIControlStateNormal];
   self.identityDiscButton.imageView.layer.cornerRadius = image.size.width / 2;
   self.identityDiscButton.imageView.layer.masksToBounds = YES;
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.h b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.h
index 69201c0..ae4584b 100644
--- a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.h
+++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.h
@@ -27,6 +27,7 @@
 class AuthenticationService;
 class Browser;
 @protocol BrowserCommands;
+class ChromeAccountManagerService;
 @protocol ContentSuggestionsCollectionControlling;
 @class ContentSuggestionsHeaderSynchronizer;
 @class ContentSuggestionsMediator;
@@ -51,14 +52,15 @@
                ContentSuggestionsGestureCommands,
                ContentSuggestionsHeaderViewControllerDelegate>
 
-- (instancetype)initWithWebState:(web::WebState*)webState
-              templateURLService:(TemplateURLService*)templateURLService
-                       URLLoader:(UrlLoadingBrowserAgent*)URLLoader
-                     authService:(AuthenticationService*)authService
-                 identityManager:(signin::IdentityManager*)identityManager
-                      logoVendor:(id<LogoVendor>)logoVendor
-         voiceSearchAvailability:
-             (VoiceSearchAvailability*)voiceSearchAvailability
+- (instancetype)
+           initWithWebState:(web::WebState*)webState
+         templateURLService:(TemplateURLService*)templateURLService
+                  URLLoader:(UrlLoadingBrowserAgent*)URLLoader
+                authService:(AuthenticationService*)authService
+            identityManager:(signin::IdentityManager*)identityManager
+      accountManagerService:(ChromeAccountManagerService*)accountManagerService
+                 logoVendor:(id<LogoVendor>)logoVendor
+    voiceSearchAvailability:(VoiceSearchAvailability*)voiceSearchAvailability
     NS_DESIGNATED_INITIALIZER;
 
 - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm
index 8f7bbc49..f0c86c6 100644
--- a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm
+++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm
@@ -22,8 +22,9 @@
 #import "ios/chrome/browser/policy/policy_util.h"
 #import "ios/chrome/browser/search_engines/search_engine_observer_bridge.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service_observer_bridge.h"
 #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h"
-#import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/browser_commands.h"
 #import "ios/chrome/browser/ui/commands/omnibox_commands.h"
@@ -43,7 +44,6 @@
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller_audience.h"
 #import "ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.h"
-#import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h"
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_consumer.h"
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_metrics.h"
 #import "ios/chrome/browser/ui/content_suggestions/user_account_image_update_delegate.h"
@@ -90,10 +90,13 @@
     "https://support.google.com/chrome/?p=ios_new_tab&ios=1";
 }  // namespace
 
-@interface NTPHomeMediator () <CRWWebStateObserver,
+@interface NTPHomeMediator () <ChromeAccountManagerServiceObserver,
+                               CRWWebStateObserver,
                                IdentityManagerObserverBridgeDelegate,
                                SearchEngineObserving,
                                VoiceSearchAvailabilityObserver> {
+  std::unique_ptr<ChromeAccountManagerServiceObserverBridge>
+      _accountManagerServiceObserver;
   std::unique_ptr<web::WebStateObserverBridge> _webStateObserver;
   // Listen for default search engine changes.
   std::unique_ptr<SearchEngineObserverBridge> _searchEngineObserver;
@@ -104,6 +107,7 @@
   UrlLoadingBrowserAgent* _URLLoader;
 }
 
+@property(nonatomic, assign) ChromeAccountManagerService* accountManagerService;
 @property(nonatomic, strong) AlertCoordinator* alertCoordinator;
 // TemplateURL used to get the search engine.
 @property(nonatomic, assign) TemplateURLService* templateURLService;
@@ -117,27 +121,30 @@
 @property(nonatomic, assign) web::WebState* webState;
 // This is the object that knows how to update the Identity Disc UI.
 @property(nonatomic, weak) id<UserAccountImageUpdateDelegate> imageUpdater;
-// Cache for the avatar image.
-@property(nonatomic, strong) ResizedAvatarCache* avatarCache;
 
 @end
 
 @implementation NTPHomeMediator
 
-- (instancetype)initWithWebState:(web::WebState*)webState
-              templateURLService:(TemplateURLService*)templateURLService
-                       URLLoader:(UrlLoadingBrowserAgent*)URLLoader
-                     authService:(AuthenticationService*)authService
-                 identityManager:(signin::IdentityManager*)identityManager
-                      logoVendor:(id<LogoVendor>)logoVendor
-         voiceSearchAvailability:
-             (VoiceSearchAvailability*)voiceSearchAvailability {
+- (instancetype)
+           initWithWebState:(web::WebState*)webState
+         templateURLService:(TemplateURLService*)templateURLService
+                  URLLoader:(UrlLoadingBrowserAgent*)URLLoader
+                authService:(AuthenticationService*)authService
+            identityManager:(signin::IdentityManager*)identityManager
+      accountManagerService:(ChromeAccountManagerService*)accountManagerService
+                 logoVendor:(id<LogoVendor>)logoVendor
+    voiceSearchAvailability:(VoiceSearchAvailability*)voiceSearchAvailability {
   self = [super init];
   if (self) {
     _webState = webState;
     _templateURLService = templateURLService;
     _URLLoader = URLLoader;
     _authService = authService;
+    _accountManagerService = accountManagerService;
+    _accountManagerServiceObserver =
+        std::make_unique<ChromeAccountManagerServiceObserverBridge>(
+            self, _accountManagerService);
     _identityObserverBridge.reset(
         new signin::IdentityManagerObserverBridge(identityManager, self));
     // Listen for default search engine changes.
@@ -145,10 +152,6 @@
         self, self.templateURLService);
     _logoVendor = logoVendor;
     _voiceSearchAvailability = voiceSearchAvailability;
-    // TODO(crbug.com/965962): Check if it is possible to unified this size.
-    _avatarCache = [[ResizedAvatarCache alloc]
-        initWithSize:CGSizeMake(ntp_home::kIdentityAvatarDimension,
-                                ntp_home::kIdentityAvatarDimension)];
   }
   return self;
 }
@@ -192,6 +195,8 @@
     _voiceSearchAvailability = nullptr;
   }
   _identityObserverBridge.reset();
+  _accountManagerServiceObserver.reset();
+  self.accountManagerService = nil;
 }
 
 - (void)locationBarDidBecomeFirstResponder {
@@ -550,6 +555,12 @@
   [self showMostVisitedUndoForURL:item.URL];
 }
 
+#pragma mark - ChromeAccountManagerServiceObserver
+
+- (void)identityChanged:(ChromeIdentity*)identity {
+  [self updateAccountImage];
+}
+
 #pragma mark - ContentSuggestionsHeaderViewControllerDelegate
 
 - (BOOL)isContextMenuVisible {
@@ -747,7 +758,8 @@
       self.authService->GetPrimaryIdentity(signin::ConsentLevel::kSignin);
   if (identity) {
     // Only show an avatar if the user is signed in.
-    image = [self.avatarCache resizedAvatarForIdentity:identity];
+    image = self.accountManagerService->GetIdentityAvatarWithIdentity(
+        identity, IdentityAvatarSize::SmallSize);
   }
   [self.imageUpdater updateAccountImage:image];
 }
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator_unittest.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator_unittest.mm
index efcfc449..b79cfd4 100644
--- a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator_unittest.mm
@@ -15,6 +15,7 @@
 #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #include "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service_fake.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #include "ios/chrome/browser/signin/identity_manager_factory.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_controller.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
@@ -80,6 +81,9 @@
             chrome_browser_state_.get()));
     identity_manager_ =
         IdentityManagerFactory::GetForBrowserState(chrome_browser_state_.get());
+    ChromeAccountManagerService* accountManagerService =
+        ChromeAccountManagerServiceFactory::GetForBrowserState(
+            chrome_browser_state_.get());
     mediator_ = [[NTPHomeMediator alloc]
                initWithWebState:fake_web_state_.get()
              templateURLService:ios::TemplateURLServiceFactory::
@@ -88,6 +92,7 @@
                       URLLoader:url_loader_
                     authService:auth_service_
                 identityManager:identity_manager_
+          accountManagerService:accountManagerService
                      logoVendor:logo_vendor_
         voiceSearchAvailability:&voice_availability_];
     mediator_.suggestionsService =
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
index cdcf6b8..1738932 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
@@ -21,6 +21,7 @@
 #import "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
+#import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/identity_manager_factory.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/browser_commands.h"
@@ -206,6 +207,9 @@
                                   self.browser->GetBrowserState())
               identityManager:IdentityManagerFactory::GetForBrowserState(
                                   self.browser->GetBrowserState())
+        accountManagerService:ChromeAccountManagerServiceFactory::
+                                  GetForBrowserState(
+                                      self.browser->GetBrowserState())
                    logoVendor:ios::GetChromeBrowserProvider().CreateLogoVendor(
                                   self.browser, self.webState)
       voiceSearchAvailability:&_voiceSearchAvailability];
diff --git a/ios/chrome/browser/ui/settings/google_services/BUILD.gn b/ios/chrome/browser/ui/settings/google_services/BUILD.gn
index d8992f4..305a898 100644
--- a/ios/chrome/browser/ui/settings/google_services/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/google_services/BUILD.gn
@@ -137,9 +137,7 @@
   testonly = true
   sources = [
     "accounts_table_egtest.mm",
-    "accounts_table_mice_egtest.mm",
     "google_services_settings_egtest.mm",
-    "google_services_settings_mice_egtest.mm",
   ]
   deps = [
     ":eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/settings/google_services/accounts_table_egtest.mm b/ios/chrome/browser/ui/settings/google_services/accounts_table_egtest.mm
index 8c44f63d..438fd2a 100644
--- a/ios/chrome/browser/ui/settings/google_services/accounts_table_egtest.mm
+++ b/ios/chrome/browser/ui/settings/google_services/accounts_table_egtest.mm
@@ -24,8 +24,10 @@
 #error "This file requires ARC support."
 #endif
 
+using chrome_test_util::Omnibox;
 using chrome_test_util::PrimarySignInButton;
 using chrome_test_util::SettingsAccountButton;
+using chrome_test_util::SettingsCollectionView;
 using chrome_test_util::SettingsDoneButton;
 using chrome_test_util::SignOutAccountsButton;
 
@@ -36,10 +38,10 @@
 }
 
 // Integration tests using the Account Settings screen.
-@interface AccountCollectionsTestCase : WebHttpServerChromeTestCase
+@interface AccountsTableTestCase : WebHttpServerChromeTestCase
 @end
 
-@implementation AccountCollectionsTestCase
+@implementation AccountsTableTestCase
 
 - (void)tearDown {
   [ChromeEarlGrey waitForBookmarksToFinishLoading];
@@ -60,13 +62,6 @@
       @"No bookmarks should exist before tests start.");
 }
 
-- (AppLaunchConfiguration)appConfigurationForTestCase {
-  AppLaunchConfiguration config;
-  config.features_disabled.push_back(signin::kMobileIdentityConsistency);
-  config.features_disabled.push_back(signin::kSimplifySignOutIOS);
-  return config;
-}
-
 // Tests that the Sync and Account Settings screen are correctly popped if the
 // signed in account is removed.
 - (void)testSignInPopUpAccountOnSyncSettings {
@@ -227,7 +222,8 @@
   [BookmarkEarlGrey setupStandardBookmarks];
 
   // Sign out.
-  [SigninEarlGreyUI signOut];
+  [SigninEarlGreyUI
+      signOutWithConfirmationChoice:SignOutConfirmationChoiceKeepData];
 
   // Open the Bookmarks screen on the Tools menu.
   [BookmarkEarlGreyUI openBookmarks];
@@ -251,7 +247,8 @@
   [BookmarkEarlGrey setupStandardBookmarks];
 
   // Sign out.
-  [SigninEarlGreyUI signOutAndClearDataFromDevice];
+  [SigninEarlGreyUI
+      signOutWithConfirmationChoice:SignOutConfirmationChoiceClearData];
 
   // Open the Bookmarks screen on the Tools menu.
   [BookmarkEarlGreyUI openBookmarks];
@@ -273,7 +270,8 @@
   [BookmarkEarlGrey setupStandardBookmarks];
 
   // Sign out.
-  [SigninEarlGreyUI signOutAndClearDataFromDevice];
+  [SigninEarlGreyUI
+      signOutWithConfirmationChoice:SignOutConfirmationChoiceClearData];
 
   // Open the Bookmarks screen on the Tools menu.
   [BookmarkEarlGreyUI openBookmarks];
@@ -294,7 +292,8 @@
 
   [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity1];
   [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity1];
-  [SigninEarlGreyUI signOutAndClearDataFromDevice];
+  [SigninEarlGreyUI
+      signOutWithConfirmationChoice:SignOutConfirmationChoiceClearData];
 
   [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity2];
   [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity2];
@@ -329,4 +328,191 @@
       performAction:grey_tap()];
 }
 
+// Tests that users data is cleared out when the signed in account disappear and
+// it is a managed account. Regression test for crbug.com/1208381.
+- (void)testsManagedAccountRemovedFromAnotherGoogleApp {
+  // Sign In |fakeManagedIdentity|.
+  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeManagedIdentity];
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
+
+  // Add a bookmark after sync is initialized.
+  [ChromeEarlGrey waitForSyncInitialized:YES syncTimeout:kSyncOperationTimeout];
+  [ChromeEarlGrey waitForBookmarksToFinishLoading];
+  [BookmarkEarlGrey setupStandardBookmarks];
+
+  // Simulate that the user remove their primary account from another Google
+  // app.
+  [SigninEarlGrey forgetFakeIdentity:fakeIdentity];
+  [ChromeEarlGreyUI waitForAppToIdle];
+
+  // Open the Bookmarks screen on the Tools menu.
+  [BookmarkEarlGreyUI openBookmarks];
+
+  // Assert that there are no bookmarks. The empty background appears in the
+  // root directory if the leaf folders are empty.
+  [BookmarkEarlGreyUI verifyEmptyBackgroundAppears];
+}
+
+// Tests to open the sign-out confirmation dialog, and then remove the primary
+// account while the dialog is still opened.
+- (void)testRemovePrimaryAccountWhileSignOutConfirmation {
+  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
+  [SigninEarlGrey addFakeIdentity:fakeIdentity];
+
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
+
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:SettingsAccountButton()];
+
+  // Opens the sign out confirmation dialog.
+  [ChromeEarlGreyUI
+      tapAccountsMenuButton:chrome_test_util::SignOutAccountsButton()];
+  // Wait until the sheet is fully presented before removing the identity.
+  [ChromeEarlGreyUI waitForAppToIdle];
+  // Remove the primary accounts.
+  [SigninEarlGrey forgetFakeIdentity:fakeIdentity];
+  [ChromeEarlGreyUI waitForAppToIdle];
+  [SigninEarlGreyUI
+      verifySigninPromoVisibleWithMode:SigninPromoViewModeNoAccounts
+                           closeButton:YES];
+
+  // Closes the settings.
+  [[EarlGrey selectElementWithMatcher:SettingsCollectionView()]
+      assertWithMatcher:grey_notNil()];
+  [SigninEarlGrey verifySignedOut];
+}
+
+// Tests to open the sign-out confirmation dialog, and then remove a secondary
+// account while the dialog is still opened.
+- (void)testRemoveSecondaryAccountWhileSignOutConfirmation {
+  FakeChromeIdentity* fakeIdentity1 = [SigninEarlGrey fakeIdentity1];
+  FakeChromeIdentity* fakeIdentity2 = [SigninEarlGrey fakeIdentity2];
+  [SigninEarlGrey addFakeIdentity:fakeIdentity1];
+  [SigninEarlGrey addFakeIdentity:fakeIdentity2];
+
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity1];
+
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:SettingsAccountButton()];
+
+  // Opens the sign out confirmation dialog.
+  [ChromeEarlGreyUI
+      tapAccountsMenuButton:chrome_test_util::SignOutAccountsButton()];
+  // Remove the primary accounts.
+  [SigninEarlGrey forgetFakeIdentity:fakeIdentity2];
+  [ChromeEarlGreyUI waitForAppToIdle];
+  [[[EarlGrey
+      selectElementWithMatcher:grey_anyOf(chrome_test_util::CancelButton(),
+                                          SignOutAccountsButton(), nil)]
+      atIndex:1] performAction:grey_tap()];
+
+  // Closes the settings.
+  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
+      performAction:grey_tap()];
+  // Verifies we are still signed in.
+  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity1];
+}
+
+// Tests to open the sign-out confirmation dialog, and then open an external
+// URL.
+- (void)testInterruptDuringSignOutConfirmation {
+  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
+  [SigninEarlGrey addFakeIdentity:fakeIdentity];
+
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
+
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:SettingsAccountButton()];
+
+  // Opens the sign out confirmation dialog.
+  [ChromeEarlGreyUI
+      tapAccountsMenuButton:chrome_test_util::SignOutAccountsButton()];
+  // Wait until the sheet is fully presented before to opening an external URL.
+  [ChromeEarlGreyUI waitForAppToIdle];
+  // Open the URL as if it was opened from another app.
+  [ChromeEarlGrey simulateExternalAppURLOpening];
+  // Verifies that the user is signed in and Settings have been dismissed.
+  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
+  [ChromeEarlGrey
+      waitForMatcher:chrome_test_util::OmniboxContainingText("example.com")];
+}
+
+// Tests that opening and closing the sign-out confirmation dialog does
+// not affect the user's sign-in state.
+- (void)testDismissSignOutConfirmationTwice {
+  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
+  [SigninEarlGrey addFakeIdentity:fakeIdentity];
+
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
+
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:SettingsAccountButton()];
+
+  // Opens the sign out confirmation dialog.
+  [ChromeEarlGreyUI
+      tapAccountsMenuButton:chrome_test_util::SignOutAccountsButton()];
+  [ChromeEarlGreyUI waitForAppToIdle];
+
+  // Close the dialog.
+  [[[EarlGrey
+      selectElementWithMatcher:grey_anyOf(chrome_test_util::CancelButton(),
+                                          SignOutAccountsButton(), nil)]
+      atIndex:1] performAction:grey_tap()];
+
+  // Opens the sign out confirmation dialog.
+  [ChromeEarlGreyUI
+      tapAccountsMenuButton:chrome_test_util::SignOutAccountsButton()];
+
+  // Close the dialog.
+  [[[EarlGrey
+      selectElementWithMatcher:grey_anyOf(chrome_test_util::CancelButton(),
+                                          SignOutAccountsButton(), nil)]
+      atIndex:1] performAction:grey_tap()];
+
+  // Verify that the user is still signed in.
+  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
+}
+
+// Tests to sign out with a non managed account without syncing.
+- (void)testSignOutWithNonManagedAccountFromNoneSyncingAccount {
+  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
+  [SigninEarlGrey addFakeIdentity:fakeIdentity];
+
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity enableSync:NO];
+
+  // Add a bookmark.
+  [BookmarkEarlGrey setupStandardBookmarks];
+
+  // Sign out.
+  [SigninEarlGreyUI
+      signOutWithConfirmationChoice:SignOutConfirmationChoiceNotSyncing];
+
+  // Open the Bookmarks screen on the Tools menu.
+  [BookmarkEarlGreyUI openBookmarks];
+  [BookmarkEarlGreyUI openMobileBookmarks];
+
+  // Assert that the empty state background is absent.
+  [BookmarkEarlGreyUI verifyEmptyBackgroundIsAbsent];
+}
+
+// Tests to sign out with a managed account without syncing.
+- (void)testSignOutWithManagedAccountFromNoneSyncingAccount {
+  // Sign In |fakeManagedIdentity|.
+  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeManagedIdentity];
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity enableSync:NO];
+
+  [BookmarkEarlGrey setupStandardBookmarks];
+
+  // Sign out.
+  [SigninEarlGreyUI
+      signOutWithConfirmationChoice:SignOutConfirmationChoiceNotSyncing];
+
+  // Open the Bookmarks screen on the Tools menu.
+  [BookmarkEarlGreyUI openBookmarks];
+  [BookmarkEarlGreyUI openMobileBookmarks];
+
+  // Assert that the empty state background is absent.
+  [BookmarkEarlGreyUI verifyEmptyBackgroundIsAbsent];
+}
+
 @end
diff --git a/ios/chrome/browser/ui/settings/google_services/accounts_table_mice_egtest.mm b/ios/chrome/browser/ui/settings/google_services/accounts_table_mice_egtest.mm
deleted file mode 100644
index fe60456..0000000
--- a/ios/chrome/browser/ui/settings/google_services/accounts_table_mice_egtest.mm
+++ /dev/null
@@ -1,369 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import <UIKit/UIKit.h>
-
-#import "components/signin/ios/browser/features.h"
-#include "components/signin/public/base/account_consistency_method.h"
-#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h"
-#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h"
-#import "ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.h"
-#import "ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_ui.h"
-#import "ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller_constants.h"
-#import "ios/chrome/grit/ios_strings.h"
-#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
-#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
-#import "ios/chrome/test/earl_grey/chrome_matchers.h"
-#import "ios/chrome/test/earl_grey/web_http_server_chrome_test_case.h"
-#import "ios/public/provider/chrome/browser/signin/fake_chrome_identity.h"
-#import "ios/testing/earl_grey/earl_grey_test.h"
-#import "ui/base/l10n/l10n_util.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-using chrome_test_util::Omnibox;
-using chrome_test_util::PrimarySignInButton;
-using chrome_test_util::SettingsAccountButton;
-using chrome_test_util::SettingsCollectionView;
-using chrome_test_util::SettingsDoneButton;
-using chrome_test_util::SignOutAccountsButton;
-
-namespace {
-
-// Constant for timeout while waiting for asynchronous sync operations.
-const NSTimeInterval kSyncOperationTimeout = 10.0;
-}
-
-// Integration tests using the Account Settings screen.
-@interface AccountTableMiceTestCase : WebHttpServerChromeTestCase
-@end
-
-@implementation AccountTableMiceTestCase
-
-- (void)setUp {
-  [super setUp];
-
-  [ChromeEarlGrey waitForBookmarksToFinishLoading];
-  [ChromeEarlGrey clearBookmarks];
-  GREYAssertEqual(
-      [ChromeEarlGrey numberOfSyncEntitiesWithType:syncer::BOOKMARKS], 0,
-      @"No bookmarks should exist before tests start.");
-}
-
-- (void)tearDown {
-  [ChromeEarlGrey waitForBookmarksToFinishLoading];
-  [ChromeEarlGrey clearBookmarks];
-  [BookmarkEarlGrey clearBookmarksPositionCache];
-
-  [ChromeEarlGrey clearSyncServerData];
-  [super tearDown];
-}
-
-- (AppLaunchConfiguration)appConfigurationForTestCase {
-  AppLaunchConfiguration config;
-  config.features_enabled.push_back(signin::kSimplifySignOutIOS);
-  config.features_enabled.push_back(signin::kMobileIdentityConsistency);
-  return config;
-}
-
-// Tests that selecting sign-out from a non-managed account keeps the user's
-// synced data.
-// TODO(crbug.com/1166148) This test needs to be moved back into
-// accounts_table_egtest.mm once kSimplifySignOutIOS is removed.
-- (void)testSignOutFromNonManagedAccountKeepsData {
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-
-  // Sign In |fakeIdentity|.
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-
-  // Add a bookmark after sync is initialized.
-  [ChromeEarlGrey waitForSyncInitialized:YES syncTimeout:kSyncOperationTimeout];
-  [ChromeEarlGrey waitForBookmarksToFinishLoading];
-  [BookmarkEarlGrey setupStandardBookmarks];
-
-  // Sign out.
-  [SigninEarlGreyUI
-      signOutWithConfirmationChoice:SignOutConfirmationChoiceKeepData];
-
-  // Open the Bookmarks screen on the Tools menu.
-  [BookmarkEarlGreyUI openBookmarks];
-  [BookmarkEarlGreyUI openMobileBookmarks];
-
-  // Assert that the empty state background is absent.
-  [BookmarkEarlGreyUI verifyEmptyBackgroundIsAbsent];
-}
-
-// Tests that selecting sign-out and clear data from a non-managed user account
-// clears the user's synced data.
-// TODO(crbug.com/1166148) This test needs to be moved back into
-// accounts_table_egtest.mm once kSimplifySignOutIOS is removed.
-- (void)testSignOutAndClearDataFromNonManagedAccountClearsData {
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-
-  // Sign In |fakeIdentity|.
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-
-  // Add a bookmark after sync is initialized.
-  [ChromeEarlGrey waitForSyncInitialized:YES syncTimeout:kSyncOperationTimeout];
-  [ChromeEarlGrey waitForBookmarksToFinishLoading];
-  [BookmarkEarlGrey setupStandardBookmarks];
-
-  // Sign out.
-  [SigninEarlGreyUI
-      signOutWithConfirmationChoice:SignOutConfirmationChoiceClearData];
-
-  // Open the Bookmarks screen on the Tools menu.
-  [BookmarkEarlGreyUI openBookmarks];
-
-  // Assert that there are no bookmarks. The empty background appears in the
-  // root directory if the leaf folders are empty.
-  [BookmarkEarlGreyUI verifyEmptyBackgroundAppears];
-}
-
-// Tests that signing out from a managed user account clears the user's data.
-// TODO(crbug.com/1166148) This test needs to be moved back into
-// accounts_table_egtest.mm once kSimplifySignOutIOS is removed.
-- (void)testsSignOutFromManagedAccount {
-  // Sign In |fakeManagedIdentity|.
-  [SigninEarlGreyUI
-      signinWithFakeIdentity:[SigninEarlGrey fakeManagedIdentity]];
-
-  // Add a bookmark after sync is initialized.
-  [ChromeEarlGrey waitForSyncInitialized:YES syncTimeout:kSyncOperationTimeout];
-  [ChromeEarlGrey waitForBookmarksToFinishLoading];
-  [BookmarkEarlGrey setupStandardBookmarks];
-
-  // Sign out.
-  [SigninEarlGreyUI
-      signOutWithConfirmationChoice:SignOutConfirmationChoiceClearData];
-
-  // Open the Bookmarks screen on the Tools menu.
-  [BookmarkEarlGreyUI openBookmarks];
-
-  // Assert that there are no bookmarks. The empty background appears in the
-  // root directory if the leaf folders are empty.
-  [BookmarkEarlGreyUI verifyEmptyBackgroundAppears];
-}
-
-// Tests that users data is cleared out when the signed in account disappear and
-// it is a managed account.
-// See crbug.com/1208381
-- (void)testsManagedAccountRemovedFromAnotherGoogleApp {
-  // Sign In |fakeManagedIdentity|.
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeManagedIdentity];
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-
-  // Add a bookmark after sync is initialized.
-  [ChromeEarlGrey waitForSyncInitialized:YES syncTimeout:kSyncOperationTimeout];
-  [ChromeEarlGrey waitForBookmarksToFinishLoading];
-  [BookmarkEarlGrey setupStandardBookmarks];
-
-  // Simulate that the user remove their primary account from another Google
-  // app.
-  [SigninEarlGrey forgetFakeIdentity:fakeIdentity];
-  [ChromeEarlGreyUI waitForAppToIdle];
-
-  // Open the Bookmarks screen on the Tools menu.
-  [BookmarkEarlGreyUI openBookmarks];
-
-  // Assert that there are no bookmarks. The empty background appears in the
-  // root directory if the leaf folders are empty.
-  [BookmarkEarlGreyUI verifyEmptyBackgroundAppears];
-}
-
-// Tests that given two accounts A and B that are available on the device -
-// signing in and out from account A, then signing in to account B, properly
-// identifies the user with account B.
-// TODO(crbug.com/1166148) This test needs to be moved back into
-// accounts_table_egtest.mm once kSimplifySignOutIOS is removed.
-- (void)testSwitchingAccountsWithClearedData {
-  FakeChromeIdentity* fakeIdentity1 = [SigninEarlGrey fakeIdentity1];
-  FakeChromeIdentity* fakeIdentity2 = [SigninEarlGrey fakeIdentity2];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity1];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity2];
-
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity1];
-  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity1];
-  [SigninEarlGreyUI
-      signOutWithConfirmationChoice:SignOutConfirmationChoiceClearData];
-
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity2];
-  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity2];
-}
-
-// Tests to open the sign-out confirmation dialog, and then remove the primary
-// account while the dialog is still opened.
-// TODO(crbug.com/1166148) This test needs to be moved back into
-// accounts_table_egtest.mm once kSimplifySignOutIOS is removed.
-- (void)testRemovePrimaryAccountWhileSignOutConfirmation {
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity];
-
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:SettingsAccountButton()];
-
-  // Opens the sign out confirmation dialog.
-  [ChromeEarlGreyUI
-      tapAccountsMenuButton:chrome_test_util::SignOutAccountsButton()];
-  // Wait until the sheet is fully presented before removing the identity.
-  [ChromeEarlGreyUI waitForAppToIdle];
-  // Remove the primary accounts.
-  [SigninEarlGrey forgetFakeIdentity:fakeIdentity];
-  [ChromeEarlGreyUI waitForAppToIdle];
-  [SigninEarlGreyUI
-      verifySigninPromoVisibleWithMode:SigninPromoViewModeNoAccounts
-                           closeButton:YES];
-
-  // Closes the settings.
-  [[EarlGrey selectElementWithMatcher:SettingsCollectionView()]
-      assertWithMatcher:grey_notNil()];
-  [SigninEarlGrey verifySignedOut];
-}
-
-// Tests to open the sign-out confirmation dialog, and then remove a secondary
-// account while the dialog is still opened.
-// TODO(crbug.com/1166148) This test needs to be moved back into
-// accounts_table_egtest.mm once kSimplifySignOutIOS is removed.
-- (void)testRemoveSecondaryAccountWhileSignOutConfirmation {
-  FakeChromeIdentity* fakeIdentity1 = [SigninEarlGrey fakeIdentity1];
-  FakeChromeIdentity* fakeIdentity2 = [SigninEarlGrey fakeIdentity2];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity1];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity2];
-
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity1];
-
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:SettingsAccountButton()];
-
-  // Opens the sign out confirmation dialog.
-  [ChromeEarlGreyUI
-      tapAccountsMenuButton:chrome_test_util::SignOutAccountsButton()];
-  // Remove the primary accounts.
-  [SigninEarlGrey forgetFakeIdentity:fakeIdentity2];
-  [ChromeEarlGreyUI waitForAppToIdle];
-  [[[EarlGrey
-      selectElementWithMatcher:grey_anyOf(chrome_test_util::CancelButton(),
-                                          SignOutAccountsButton(), nil)]
-      atIndex:1] performAction:grey_tap()];
-
-  // Closes the settings.
-  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
-      performAction:grey_tap()];
-  // Verifies we are still signed in.
-  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity1];
-}
-
-// Tests to open the sign-out confirmation dialog, and then open an external
-// URL.
-// TODO(crbug.com/1166148) This test needs to be moved back into
-// accounts_table_egtest.mm once kSimplifySignOutIOS is removed.
-- (void)testInterruptDuringSignOutConfirmation {
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity];
-
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:SettingsAccountButton()];
-
-  // Opens the sign out confirmation dialog.
-  [ChromeEarlGreyUI
-      tapAccountsMenuButton:chrome_test_util::SignOutAccountsButton()];
-  // Wait until the sheet is fully presented before to opening an external URL.
-  [ChromeEarlGreyUI waitForAppToIdle];
-  // Open the URL as if it was opened from another app.
-  [ChromeEarlGrey simulateExternalAppURLOpening];
-  // Verifies that the user is signed in and Settings have been dismissed.
-  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
-  [ChromeEarlGrey
-      waitForMatcher:chrome_test_util::OmniboxContainingText("example.com")];
-}
-
-// Tests that opening and closing the sign-out confirmation dialog does
-// not affect the user's sign-in state.
-- (void)testDismissSignOutConfirmationTwice {
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity];
-
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:SettingsAccountButton()];
-
-  // Opens the sign out confirmation dialog.
-  [ChromeEarlGreyUI
-      tapAccountsMenuButton:chrome_test_util::SignOutAccountsButton()];
-  [ChromeEarlGreyUI waitForAppToIdle];
-
-  // Close the dialog.
-  [[[EarlGrey
-      selectElementWithMatcher:grey_anyOf(chrome_test_util::CancelButton(),
-                                          SignOutAccountsButton(), nil)]
-      atIndex:1] performAction:grey_tap()];
-
-  // Opens the sign out confirmation dialog.
-  [ChromeEarlGreyUI
-      tapAccountsMenuButton:chrome_test_util::SignOutAccountsButton()];
-
-  // Close the dialog.
-  [[[EarlGrey
-      selectElementWithMatcher:grey_anyOf(chrome_test_util::CancelButton(),
-                                          SignOutAccountsButton(), nil)]
-      atIndex:1] performAction:grey_tap()];
-
-  // Verify that the user is still signed in.
-  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
-}
-
-// Tests to sign out with a non managed account without syncing.
-// TODO(crbug.com/1166148) This test needs to be moved back into
-// accounts_table_egtest.mm once kSimplifySignOutIOS is removed.
-- (void)testSignOutWithNonManagedAccountFromNoneSyncingAccount {
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity];
-
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity enableSync:NO];
-
-  // Add a bookmark.
-  [BookmarkEarlGrey setupStandardBookmarks];
-
-  // Sign out.
-  [SigninEarlGreyUI
-      signOutWithConfirmationChoice:SignOutConfirmationChoiceNotSyncing];
-
-  // Open the Bookmarks screen on the Tools menu.
-  [BookmarkEarlGreyUI openBookmarks];
-  [BookmarkEarlGreyUI openMobileBookmarks];
-
-  // Assert that the empty state background is absent.
-  [BookmarkEarlGreyUI verifyEmptyBackgroundIsAbsent];
-}
-
-// Tests to sign out with a managed account without syncing.
-// TODO(crbug.com/1166148) This test needs to be moved back into
-// accounts_table_egtest.mm once kSimplifySignOutIOS is removed.
-- (void)testSignOutWithManagedAccountFromNoneSyncingAccount {
-  // Sign In |fakeManagedIdentity|.
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeManagedIdentity];
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity enableSync:NO];
-
-  [BookmarkEarlGrey setupStandardBookmarks];
-
-  // Sign out.
-  [SigninEarlGreyUI
-      signOutWithConfirmationChoice:SignOutConfirmationChoiceNotSyncing];
-
-  // Open the Bookmarks screen on the Tools menu.
-  [BookmarkEarlGreyUI openBookmarks];
-  [BookmarkEarlGreyUI openMobileBookmarks];
-
-  // Assert that the empty state background is absent.
-  [BookmarkEarlGreyUI verifyEmptyBackgroundIsAbsent];
-}
-
-@end
diff --git a/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm b/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm
index 3d603fe..b2dc5f7c 100644
--- a/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm
@@ -28,7 +28,6 @@
 #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h"
 #import "ios/chrome/browser/ui/authentication/authentication_ui_util.h"
 #import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h"
-#import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
 #import "ios/chrome/browser/ui/authentication/signout_action_sheet_coordinator.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/open_new_tab_command.h"
@@ -107,7 +106,6 @@
   // Whether the view controller is currently being dismissed and new dismiss
   // requests should be ignored.
   BOOL _isBeingDismissed;
-  ResizedAvatarCache* _avatarCache;
 
   // Enable lookup of item corresponding to a given identity GAIA ID string.
   NSDictionary<NSString*, TableViewItem*>* _identityMap;
@@ -159,7 +157,6 @@
             IdentityManagerFactory::GetForBrowserState(
                 _browser->GetBrowserState()),
             self);
-    _avatarCache = [[ResizedAvatarCache alloc] initWithDefaultTableView];
     _accountManagerServiceObserver =
         std::make_unique<ChromeAccountManagerServiceObserverBridge>(
             self, _accountManagerService);
@@ -359,7 +356,8 @@
 
 - (void)updateAccountItem:(TableViewAccountItem*)item
              withIdentity:(ChromeIdentity*)identity {
-  item.image = [_avatarCache resizedAvatarForIdentity:identity];
+  item.image = self.accountManagerService->GetIdentityAvatarWithIdentity(
+      identity, IdentityAvatarSize::TableViewIcon);
   item.text = identity.userEmail;
   item.chromeIdentity = identity;
   item.accessibilityIdentifier = identity.userEmail;
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_egtest.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_egtest.mm
index bc3ce228..d5899c2 100644
--- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_egtest.mm
+++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_egtest.mm
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #import "base/strings/sys_string_conversions.h"
+#import "base/test/ios/wait_util.h"
 #include "components/password_manager/core/common/password_manager_pref_names.h"
 #import "components/policy/core/common/policy_loader_ios_constants.h"
 #import "components/policy/policy_constants.h"
@@ -13,9 +14,12 @@
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h"
 #import "ios/chrome/browser/ui/authentication/signin_matchers.h"
+#import "ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.h"
+#import "ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_ui.h"
 #import "ios/chrome/browser/ui/settings/google_services/google_services_settings_app_interface.h"
 #import "ios/chrome/browser/ui/settings/google_services/google_services_settings_constants.h"
 #import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_constants.h"
+#include "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h"
 #include "ios/chrome/grit/ios_chromium_strings.h"
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/chrome/test/earl_grey/chrome_actions.h"
@@ -23,6 +27,7 @@
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
+#import "ios/chrome/test/earl_grey/web_http_server_chrome_test_case.h"
 #import "ios/testing/earl_grey/app_launch_manager.h"
 #import "ios/testing/earl_grey/earl_grey_test.h"
 #import "ui/base/l10n/l10n_util.h"
@@ -31,22 +36,33 @@
 #error "This file requires ARC support."
 #endif
 
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++98-compat-extra-semi"
-GREY_STUB_CLASS_IN_APP_MAIN_QUEUE(GoogleServicesSettingsAppInterface);
-#pragma clang diagnostic pop
-
-using l10n_util::GetNSString;
-using chrome_test_util::AddAccountButton;
+using base::test::ios::kWaitForActionTimeout;
+using chrome_test_util::BookmarkHomeDoneButton;
 using chrome_test_util::ButtonWithAccessibilityLabelId;
 using chrome_test_util::GoogleServicesSettingsButton;
+using chrome_test_util::PrimarySignInButton;
 using chrome_test_util::SettingsDoneButton;
-using chrome_test_util::SettingsLink;
 using chrome_test_util::SettingsMenuBackButton;
-using chrome_test_util::SyncSettingsConfirmButton;
+using l10n_util::GetNSString;
+
+namespace {
+
+// Dismisses the sign-out dialog.
+void DismissSignOut() {
+  if ([ChromeEarlGrey isIPadIdiom]) {
+    // Tap the tools menu to dismiss the popover.
+    [[EarlGrey selectElementWithMatcher:chrome_test_util::ToolsMenuButton()]
+        performAction:grey_tap()];
+  } else {
+    [[EarlGrey selectElementWithMatcher:chrome_test_util::CancelButton()]
+        performAction:grey_tap()];
+  }
+}
+
+}  // namespace
 
 // Integration tests using the Google services settings screen.
-@interface GoogleServicesSettingsTestCase : ChromeTestCase
+@interface GoogleServicesSettingsTestCase : WebHttpServerChromeTestCase
 
 @property(nonatomic, strong) id<GREYMatcher> scrollViewMatcher;
 
@@ -54,10 +70,17 @@
 
 @implementation GoogleServicesSettingsTestCase
 
-- (AppLaunchConfiguration)appConfigurationForTestCase {
-  AppLaunchConfiguration config;
-  config.features_disabled.push_back(signin::kMobileIdentityConsistency);
-  return config;
+- (void)setUp {
+  [super setUp];
+
+  [ChromeEarlGrey waitForBookmarksToFinishLoading];
+  [ChromeEarlGrey clearBookmarks];
+}
+
+- (void)tearDown {
+  [super tearDown];
+  [ChromeEarlGrey clearBookmarks];
+  [BookmarkEarlGrey clearBookmarksPositionCache];
 }
 
 // Opens the Google services settings view, and closes it.
@@ -80,103 +103,6 @@
   [self assertNonPersonalizedServices];
 }
 
-// Tests that the Google Services settings reloads without crashing when the
-// primary account is removed.
-// Regression test for crbug.com/1033901
-- (void)testRemovePrimaryAccount {
-  // Signin.
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-  // Open "Google Services" settings.
-  [self openGoogleServicesSettings];
-  // Remove the primary account.
-  [SigninEarlGrey forgetFakeIdentity:fakeIdentity];
-  // Assert the UI has been reloaded by testing for the signin cell being
-  // visible.
-  id<GREYMatcher> signinCellMatcher =
-      [self cellMatcherWithTitleID:IDS_IOS_SIGN_IN_TO_CHROME_SETTING_TITLE
-                      detailTextID:
-                          IDS_IOS_GOOGLE_SERVICES_SETTINGS_SIGN_IN_DETAIL_TEXT];
-  [[EarlGrey selectElementWithMatcher:signinCellMatcher]
-      assertWithMatcher:grey_notNil()];
-  // Close settings.
-  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
-      performAction:grey_tap()];
-}
-
-// Tests the following steps:
-//  + Opens sign-in from Google services
-//  + Taps on the settings link to open the advanced sign-in settings
-//  + Opens "Data from Chromium sync" to interrupt sign-in
-- (void)testInterruptSigninFromGoogleServicesSettings {
-  [GoogleServicesSettingsAppInterface
-      blockAllNavigationRequestsForCurrentWebState];
-  // Add default identity.
-  [self setTearDownHandler:^{
-    [GoogleServicesSettingsAppInterface
-        unblockAllNavigationRequestsForCurrentWebState];
-  }];
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity];
-  // Open "Google Services" settings.
-  [self openGoogleServicesSettings];
-  // Open sign-in.
-  id<GREYMatcher> signinCellMatcher =
-      [self cellMatcherWithTitleID:IDS_IOS_SIGN_IN_TO_CHROME_SETTING_TITLE
-                      detailTextID:
-                          IDS_IOS_GOOGLE_SERVICES_SETTINGS_SIGN_IN_DETAIL_TEXT];
-  [[EarlGrey selectElementWithMatcher:signinCellMatcher]
-      performAction:grey_tap()];
-  // Open Settings link.
-  [[EarlGrey selectElementWithMatcher:SettingsLink()] performAction:grey_tap()];
-  // Open "Manage Sync" settings.
-  id<GREYMatcher> manageSyncMatcher =
-      [self cellMatcherWithTitleID:IDS_IOS_MANAGE_SYNC_SETTINGS_TITLE
-                      detailTextID:0];
-  [[EarlGrey selectElementWithMatcher:manageSyncMatcher]
-      performAction:grey_tap()];
-  // Open "Data from Chrome sync".
-  id<GREYMatcher> manageSyncScrollViewMatcher =
-      grey_accessibilityID(kManageSyncTableViewAccessibilityIdentifier);
-  id<GREYMatcher> dataFromChromeSyncMatcher = [self
-      cellMatcherWithTitleID:IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_TITLE
-                detailTextID:
-                    IDS_IOS_MANAGE_SYNC_DATA_FROM_CHROME_SYNC_DESCRIPTION];
-  [[self elementInteractionWithGreyMatcher:dataFromChromeSyncMatcher
-                         scrollViewMatcher:manageSyncScrollViewMatcher]
-      performAction:grey_tap()];
-  // Needs to wait until the sign-in dialog is fully dismissed to continue.
-  [ChromeEarlGreyUI waitForAppToIdle];
-  [self openGoogleServicesSettings];
-  // Verify the sync is not confirmed yet.
-  [self assertCellWithTitleID:IDS_IOS_SYNC_SETUP_NOT_CONFIRMED_TITLE
-                 detailTextID:IDS_IOS_SYNC_SETTINGS_NOT_CONFIRMED_DESCRIPTION];
-}
-
-// Opens the SSO add account view, from the Google services settings.
-// See: crbug.com/1076843
-- (void)testOpenSSOAddAccount {
-  // Signin.
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-  // Open "Google Services" settings.
-  [self openGoogleServicesSettings];
-  // Open account list view.
-  [[EarlGrey
-      selectElementWithMatcher:grey_accessibilityID(
-                                   kAccountListItemAccessibilityIdentifier)]
-      performAction:grey_tap()];
-  // Open sso add account view.
-  [[EarlGrey selectElementWithMatcher:AddAccountButton()]
-      performAction:grey_tap()];
-  // Close it.
-  [[EarlGrey selectElementWithMatcher:
-                 ButtonWithAccessibilityLabelId(
-                     IDS_IOS_ACCOUNT_CONSISTENCY_SETUP_SKIP_BUTTON)]
-      performAction:grey_tap()];
-  [ChromeEarlGreyUI waitForAppToIdle];
-}
-
 // Tests that the Safe Browsing toggle reflects the current value of the
 // Safe Browsing preference, and updating the toggle also updates the
 // preference.
@@ -285,80 +211,291 @@
       @"Failed to toggle-on password leak checks");
 }
 
-// Tests the following steps:
-//  + Opens sign-in from Google services
-//  + Taps on the settings link to open the advanced sign-in settings
-//  + Opens "Manage Sync" twice
-// The "Manage Sync" should not be disabled when closing "Manage Sync" view.
-- (void)testOpenManageSyncSettings {
+// Tests that disabling the "Allow Chrome sign-in" > "Sign out" option blocks
+// the user from signing in to Chrome through the promo sign-in until it is
+// re-enabled.
+- (void)testToggleAllowChromeSigninWithPromoSignin {
+  // User is signed-in only
   FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity];
-
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI
-      tapSettingsMenuButton:chrome_test_util::PrimarySignInButton()];
-  [[EarlGrey selectElementWithMatcher:SettingsLink()] performAction:grey_tap()];
-  // Open "Manage Sync" settings.
-  id<GREYMatcher> manageSyncMatcher =
-      [self cellMatcherWithTitleID:IDS_IOS_MANAGE_SYNC_SETTINGS_TITLE
-                      detailTextID:0];
-  [[EarlGrey selectElementWithMatcher:manageSyncMatcher]
-      performAction:grey_tap()];
-
-  id<GREYMatcher> backButtonMatcher =
-      grey_allOf(SettingsMenuBackButton(),
-                 grey_descendant(grey_kindOfClass([UIImageView class])), nil);
-  // Back to the Google services settings view.
-  [[EarlGrey selectElementWithMatcher:backButtonMatcher]
-      performAction:grey_tap()];
-  // Open "Manage Sync" settings, again.
-  [[EarlGrey selectElementWithMatcher:manageSyncMatcher]
-      performAction:grey_tap()];
-  // Back to the Google services settings view.
-  [[EarlGrey selectElementWithMatcher:backButtonMatcher]
-      performAction:grey_tap()];
-
-  // Close the advance settings.
-  [[EarlGrey selectElementWithMatcher:SyncSettingsConfirmButton()]
-      performAction:grey_tap()];
-
-  // Test the user is signed in.
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity enableSync:NO];
   [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
+
+  // Turn off "Allow Chrome Sign-in" with sign out option.
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/YES,
+                                   /*enabled=*/YES)]
+      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
+  [[EarlGrey
+      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
+                                   IDS_IOS_SIGNOUT_DIALOG_SIGN_OUT_BUTTON)]
+      performAction:grey_tap()];
+
+  // Verify that sign-in is disabled.
+  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
+      performAction:grey_tap()];
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityID(kSettingsSignInCellId)]
+      assertWithMatcher:grey_notVisible()];
+
+  // Verify signed out.
+  [SigninEarlGrey verifySignedOut];
+  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
+      performAction:grey_tap()];
+
+  // Turn on "Allow Chrome Sign-in" feature.
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/NO,
+                                   /*enabled=*/YES)]
+      performAction:chrome_test_util::TurnSettingsSwitchOn(YES)];
+
+  // Verify that the user is signed out and sign-in is enabled.
+  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:PrimarySignInButton()]
+      assertWithMatcher:grey_sufficientlyVisible()];
 }
 
-// Tests that the sign-in button can't be used when sign-in is disabled.
-- (void)testSigninDisabledByPolicy {
-  // Disable browser sign-in.
-  [self setUpSigninDisabledEnterprisePolicy];
-  [ChromeEarlGrey setBoolValue:NO forUserPref:prefs::kSigninAllowedByPolicy];
+// Tests that disabling the "Allow Chrome sign-in" > "Clear Data" option blocks
+// the user from signing in to Chrome through the promo sign-in until it is
+// re-enabled.
+- (void)testToggleAllowChromeSigninWithPromoSigninClearData {
+  // User is signed-in and syncing.
+  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
+  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
 
-  // Open Google services settings and verify the sign-in cell shows the
-  // "sign-in disabled" text.
-  [self openGoogleServicesSettings];
-  id<GREYMatcher> signinMatcher =
-      [self cellMatcherWithTitleID:IDS_IOS_SIGN_IN_TO_CHROME_SETTING_TITLE
-                      detailTextID:IDS_IOS_SETTINGS_SIGNIN_DISABLED];
-  [[EarlGrey selectElementWithMatcher:signinMatcher]
+  // Add a bookmark after sync is initialized.
+  [ChromeEarlGrey waitForSyncInitialized:YES syncTimeout:kWaitForActionTimeout];
+  [ChromeEarlGrey waitForBookmarksToFinishLoading];
+  [BookmarkEarlGrey setupStandardBookmarks];
+
+  // Turn off "Allow Chrome Sign-in" feature with Clear Data option.
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/YES,
+                                   /*enabled=*/YES)]
+      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
+  [[EarlGrey
+      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
+                                   IDS_IOS_SIGNOUT_DIALOG_SIGN_OUT_BUTTON)]
+      performAction:grey_tap()];
+  [[EarlGrey
+      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
+                                   IDS_IOS_SIGNOUT_DIALOG_CLEAR_DATA_BUTTON)]
+      performAction:grey_tap()];
+
+  // Verify that sign-in is disabled.
+  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
+      performAction:grey_tap()];
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityID(kSettingsSignInCellId)]
+      assertWithMatcher:grey_notVisible()];
+
+  // Verify signed out.
+  [SigninEarlGrey verifySignedOut];
+  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
+      performAction:grey_tap()];
+
+  // Verify bookmarks are cleared.
+  [BookmarkEarlGreyUI openBookmarks];
+  [BookmarkEarlGreyUI verifyEmptyBackgroundAppears];
+  [[EarlGrey selectElementWithMatcher:BookmarkHomeDoneButton()]
+      performAction:grey_tap()];
+
+  // Turn on "Allow Chrome Sign-in" feature.
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/NO,
+                                   /*enabled=*/YES)]
+      performAction:chrome_test_util::TurnSettingsSwitchOn(YES)];
+
+  // Verify that the user is signed out and sign-in is enabled.
+  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:PrimarySignInButton()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+}
+
+// Tests that disabling the "Allow Chrome sign-in" > "Keep Data" option blocks
+// the user from signing in to Chrome through the promo sign-in until it is
+// re-enabled.
+- (void)testToggleAllowChromeSigninWithPromoSigninKeepData {
+  // User is signed-in and syncing.
+  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
+  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
+
+  // Add a bookmark after sync is initialized.
+  [ChromeEarlGrey waitForSyncInitialized:YES syncTimeout:kWaitForActionTimeout];
+  [ChromeEarlGrey waitForBookmarksToFinishLoading];
+  [BookmarkEarlGrey setupStandardBookmarks];
+
+  // Turn off "Allow Chrome Sign-in" feature with Keep Data option.
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/YES,
+                                   /*enabled=*/YES)]
+      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
+  [[EarlGrey
+      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
+                                   IDS_IOS_SIGNOUT_DIALOG_SIGN_OUT_BUTTON)]
+      performAction:grey_tap()];
+  [[EarlGrey
+      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
+                                   IDS_IOS_SIGNOUT_DIALOG_KEEP_DATA_BUTTON)]
+      performAction:grey_tap()];
+
+  // Verify that sign-in is disabled.
+  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
+      performAction:grey_tap()];
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityID(kSettingsSignInCellId)]
+      assertWithMatcher:grey_notVisible()];
+
+  // Verify signed out.
+  [SigninEarlGrey verifySignedOut];
+  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
+      performAction:grey_tap()];
+
+  // Verify bookmarks are available.
+  [BookmarkEarlGreyUI openBookmarks];
+  [BookmarkEarlGreyUI verifyEmptyBackgroundIsAbsent];
+  [[EarlGrey selectElementWithMatcher:BookmarkHomeDoneButton()]
+      performAction:grey_tap()];
+
+  // Turn on "Allow Chrome Sign-in" feature.
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/NO,
+                                   /*enabled=*/YES)]
+      performAction:chrome_test_util::TurnSettingsSwitchOn(YES)];
+
+  // Verify that the user is signed out and sign-in is enabled.
+  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:PrimarySignInButton()]
+      assertWithMatcher:grey_sufficientlyVisible()];
+}
+
+// Tests that disabling the "Allow Chrome sign-in" option blocks the user
+// from signing in to Chrome through the default sign-in until it is re-enabled.
+- (void)testToggleAllowChromeSigninWithDefaultSignin {
+  [ChromeEarlGreyUI openSettingsMenu];
+  // Close the sign-in promo.
+  [[EarlGrey
+      selectElementWithMatcher:grey_allOf(grey_accessibilityID(
+                                              kSigninPromoCloseButtonId),
+                                          grey_sufficientlyVisible(), nil)]
+      performAction:grey_tap()];
+  [SigninEarlGreyUI verifySigninPromoNotVisible];
+
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+
+  // Turn off "Allow Chrome Sign-in" feature.
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/YES,
+                                   /*enabled=*/YES)]
+      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
+
+  // Verify that the user is signed out and sign-in is disabled.
+  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
+      performAction:grey_tap()];
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityID(kSettingsSignInCellId)]
+      assertWithMatcher:grey_notVisible()];
+  [SigninEarlGrey verifySignedOut];
+
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+
+  // Turn on "Allow Chrome Sign-in" feature.
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/NO,
+                                   /*enabled=*/YES)]
+      performAction:chrome_test_util::TurnSettingsSwitchOn(YES)];
+
+  // Verify that the user is signed out and sign-in is enabled.
+  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
+      performAction:grey_tap()];
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityID(kSettingsSignInCellId)]
+      assertWithMatcher:grey_sufficientlyVisible()];
+}
+
+// Tests that canceling the "Allow Chrome sign-in" option does not change the
+// user's sign-in state.
+- (void)testCancelAllowChromeSignin {
+  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
+  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
+  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
+
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
+
+  // Turn off "Allow Chrome Sign-in" feature.
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/YES,
+                                   /*enabled=*/YES)]
+      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
+
+  // Dismiss the sign-out dialog.
+  DismissSignOut();
+
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/YES,
+                                   /*enabled=*/YES)]
       assertWithMatcher:grey_sufficientlyVisible()];
 
-  // Attempt to tap the sign-in cell.
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGrey addFakeIdentity:fakeIdentity];
+  // Turn off "Allow Chrome Sign-in" feature.
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/YES,
+                                   /*enabled=*/YES)]
+      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
 
-  [[EarlGrey selectElementWithMatcher:signinMatcher] performAction:grey_tap()];
+  // Select "sign out" option then dismiss the sign-out dialog.
+  [[EarlGrey
+      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
+                                   IDS_IOS_SIGNOUT_DIALOG_SIGN_OUT_BUTTON)]
+      performAction:grey_tap()];
+  DismissSignOut();
 
-  // Verify the sync view isn't showing.
-  id<GREYMatcher> syncTitleMatcher = grey_allOf(
-      grey_accessibilityLabel(
-          GetNSString(IDS_IOS_ACCOUNT_UNIFIED_CONSENT_SYNC_TITLE)),
-      grey_kindOfClass([UILabel class]), grey_sufficientlyVisible(), nil);
-  [[EarlGrey selectElementWithMatcher:syncTitleMatcher]
-      assertWithMatcher:grey_nil()];
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAllowSigninItemAccessibilityIdentifier,
+                                   /*is_toggled_on=*/YES,
+                                   /*enabled=*/YES)]
+      assertWithMatcher:grey_sufficientlyVisible()];
 
-  // Prefs clean-up.
-  [ChromeEarlGrey setBoolValue:YES forUserPref:prefs::kSigninAllowedByPolicy];
-  [[NSUserDefaults standardUserDefaults]
-      removeObjectForKey:kPolicyLoaderIOSConfigurationKey];
+  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
 }
 
 #pragma mark - Helpers
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
index f93122c3..7f634e0 100644
--- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
+++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
@@ -25,7 +25,6 @@
 #include "ios/chrome/browser/sync/sync_observer_bridge.h"
 #import "ios/chrome/browser/ui/authentication/authentication_constants.h"
 #import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h"
-#import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
 #import "ios/chrome/browser/ui/authentication/signin/signin_utils.h"
 #import "ios/chrome/browser/ui/settings/cells/account_sign_in_item.h"
 #import "ios/chrome/browser/ui/settings/cells/settings_image_detail_text_item.h"
@@ -38,7 +37,6 @@
 #import "ios/chrome/browser/ui/settings/sync/utils/sync_util.h"
 #import "ios/chrome/browser/ui/settings/utils/observable_boolean.h"
 #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h"
-#import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_image_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
@@ -138,9 +136,6 @@
 @property(nonatomic, assign, readonly) BOOL shouldDisplaySync;
 // Sync setup service.
 @property(nonatomic, assign, readonly) SyncSetupService* syncSetupService;
-// ** Identity section.
-// Avatar cache.
-@property(nonatomic, strong) ResizedAvatarCache* resizedAvatarCache;
 // Account item.
 @property(nonatomic, strong) TableViewAccountItem* accountItem;
 // ** Sync section.
@@ -243,7 +238,6 @@
                    prefName:unified_consent::prefs::
                                 kUrlKeyedAnonymizedDataCollectionEnabled];
     _anonymizedDataCollectionPreference.observer = self;
-    _resizedAvatarCache = [[ResizedAvatarCache alloc] initWithDefaultTableView];
     _accountManagerService = accountManagerService;
   }
   return self;
@@ -326,7 +320,8 @@
       self.authService->GetPrimaryIdentity(signin::ConsentLevel::kSignin);
   DCHECK(identity);
   self.accountItem.image =
-      [self.resizedAvatarCache resizedAvatarForIdentity:identity];
+      self.accountManagerService->GetIdentityAvatarWithIdentity(
+          identity, IdentityAvatarSize::TableViewIcon);
   self.accountItem.text = identity.userFullName;
   if (self.mode == GoogleServicesSettingsModeAdvancedSigninSettings ||
       self.isSyncSettingsConfirmed) {
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mice_egtest.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mice_egtest.mm
deleted file mode 100644
index db21ba9..0000000
--- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mice_egtest.mm
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "base/test/ios/wait_util.h"
-#include "components/signin/public/base/account_consistency_method.h"
-#include "components/signin/public/base/signin_pref_names.h"
-#include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h"
-#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h"
-#import "ios/chrome/browser/ui/bookmarks/bookmark_earl_grey.h"
-#import "ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_ui.h"
-#import "ios/chrome/browser/ui/settings/google_services/google_services_settings_constants.h"
-#include "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h"
-#include "ios/chrome/grit/ios_chromium_strings.h"
-#include "ios/chrome/grit/ios_strings.h"
-#import "ios/chrome/test/earl_grey/chrome_actions.h"
-#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
-#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
-#import "ios/chrome/test/earl_grey/chrome_matchers.h"
-#import "ios/chrome/test/earl_grey/chrome_test_case.h"
-#import "ios/chrome/test/earl_grey/web_http_server_chrome_test_case.h"
-#import "ios/testing/earl_grey/earl_grey_test.h"
-#import "ui/base/l10n/l10n_util.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-using base::test::ios::kWaitForActionTimeout;
-using chrome_test_util::BookmarkHomeDoneButton;
-using chrome_test_util::ButtonWithAccessibilityLabelId;
-using chrome_test_util::PrimarySignInButton;
-using chrome_test_util::SettingsDoneButton;
-using chrome_test_util::SettingsMenuBackButton;
-using chrome_test_util::StaticTextWithAccessibilityLabelId;
-using l10n_util::GetNSString;
-
-namespace {
-// Matcher for Google Services Settings page.
-id<GREYMatcher> GoogleServicesSettingsButton() {
-  return grey_allOf(grey_kindOfClass([UITableViewCell class]),
-                    grey_sufficientlyVisible(),
-                    grey_accessibilityID(kSettingsGoogleServicesCellId), nil);
-}
-
-// Dismisses the sign-out dialog.
-void DismissSignOut() {
-  if ([ChromeEarlGrey isIPadIdiom]) {
-    // Tap the tools menu to dismiss the popover.
-    [[EarlGrey selectElementWithMatcher:chrome_test_util::ToolsMenuButton()]
-        performAction:grey_tap()];
-  } else {
-    [[EarlGrey selectElementWithMatcher:chrome_test_util::CancelButton()]
-        performAction:grey_tap()];
-  }
-}
-
-}  // namespace
-
-// Integration tests using the Google services settings screen with
-// |kMobileIdentityConsistency| enabled.
-@interface GoogleServicesSettingsMICETestCase : WebHttpServerChromeTestCase
-@end
-
-@implementation GoogleServicesSettingsMICETestCase
-
-- (AppLaunchConfiguration)appConfigurationForTestCase {
-  AppLaunchConfiguration config;
-  config.features_enabled.push_back(signin::kMobileIdentityConsistency);
-  return config;
-}
-
-- (void)setUp {
-  [super setUp];
-
-  [ChromeEarlGrey waitForBookmarksToFinishLoading];
-  [ChromeEarlGrey clearBookmarks];
-}
-
-- (void)tearDown {
-  [super tearDown];
-  [ChromeEarlGrey clearBookmarks];
-  [BookmarkEarlGrey clearBookmarksPositionCache];
-}
-
-// Tests that disabling the "Allow Chrome sign-in" > "Sign out" option blocks
-// the user from signing in to Chrome through the promo sign-in until it is
-// re-enabled.
-- (void)testToggleAllowChromeSigninWithPromoSignin {
-  // User is signed-in only
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity enableSync:NO];
-  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
-
-  // Turn off "Allow Chrome Sign-in" with sign out option.
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/YES,
-                                   /*enabled=*/YES)]
-      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
-  [[EarlGrey
-      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
-                                   IDS_IOS_SIGNOUT_DIALOG_SIGN_OUT_BUTTON)]
-      performAction:grey_tap()];
-
-  // Verify that sign-in is disabled.
-  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
-      performAction:grey_tap()];
-  [[EarlGrey
-      selectElementWithMatcher:grey_accessibilityID(kSettingsSignInCellId)]
-      assertWithMatcher:grey_notVisible()];
-
-  // Verify signed out.
-  [SigninEarlGrey verifySignedOut];
-  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
-      performAction:grey_tap()];
-
-  // Turn on "Allow Chrome Sign-in" feature.
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/NO,
-                                   /*enabled=*/YES)]
-      performAction:chrome_test_util::TurnSettingsSwitchOn(YES)];
-
-  // Verify that the user is signed out and sign-in is enabled.
-  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
-      performAction:grey_tap()];
-  [[EarlGrey selectElementWithMatcher:PrimarySignInButton()]
-      assertWithMatcher:grey_sufficientlyVisible()];
-}
-
-// Tests that disabling the "Allow Chrome sign-in" > "Clear Data" option blocks
-// the user from signing in to Chrome through the promo sign-in until it is
-// re-enabled.
-- (void)testToggleAllowChromeSigninWithPromoSigninClearData {
-  // User is signed-in and syncing.
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
-
-  // Add a bookmark after sync is initialized.
-  [ChromeEarlGrey waitForSyncInitialized:YES syncTimeout:kWaitForActionTimeout];
-  [ChromeEarlGrey waitForBookmarksToFinishLoading];
-  [BookmarkEarlGrey setupStandardBookmarks];
-
-  // Turn off "Allow Chrome Sign-in" feature with Clear Data option.
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/YES,
-                                   /*enabled=*/YES)]
-      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
-  [[EarlGrey
-      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
-                                   IDS_IOS_SIGNOUT_DIALOG_SIGN_OUT_BUTTON)]
-      performAction:grey_tap()];
-  [[EarlGrey
-      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
-                                   IDS_IOS_SIGNOUT_DIALOG_CLEAR_DATA_BUTTON)]
-      performAction:grey_tap()];
-
-  // Verify that sign-in is disabled.
-  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
-      performAction:grey_tap()];
-  [[EarlGrey
-      selectElementWithMatcher:grey_accessibilityID(kSettingsSignInCellId)]
-      assertWithMatcher:grey_notVisible()];
-
-  // Verify signed out.
-  [SigninEarlGrey verifySignedOut];
-  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
-      performAction:grey_tap()];
-
-  // Verify bookmarks are cleared.
-  [BookmarkEarlGreyUI openBookmarks];
-  [BookmarkEarlGreyUI verifyEmptyBackgroundAppears];
-  [[EarlGrey selectElementWithMatcher:BookmarkHomeDoneButton()]
-      performAction:grey_tap()];
-
-  // Turn on "Allow Chrome Sign-in" feature.
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/NO,
-                                   /*enabled=*/YES)]
-      performAction:chrome_test_util::TurnSettingsSwitchOn(YES)];
-
-  // Verify that the user is signed out and sign-in is enabled.
-  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
-      performAction:grey_tap()];
-  [[EarlGrey selectElementWithMatcher:PrimarySignInButton()]
-      assertWithMatcher:grey_sufficientlyVisible()];
-}
-
-// Tests that disabling the "Allow Chrome sign-in" > "Keep Data" option blocks
-// the user from signing in to Chrome through the promo sign-in until it is
-// re-enabled.
-- (void)testToggleAllowChromeSigninWithPromoSigninKeepData {
-  // User is signed-in and syncing.
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
-
-  // Add a bookmark after sync is initialized.
-  [ChromeEarlGrey waitForSyncInitialized:YES syncTimeout:kWaitForActionTimeout];
-  [ChromeEarlGrey waitForBookmarksToFinishLoading];
-  [BookmarkEarlGrey setupStandardBookmarks];
-
-  // Turn off "Allow Chrome Sign-in" feature with Keep Data option.
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/YES,
-                                   /*enabled=*/YES)]
-      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
-  [[EarlGrey
-      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
-                                   IDS_IOS_SIGNOUT_DIALOG_SIGN_OUT_BUTTON)]
-      performAction:grey_tap()];
-  [[EarlGrey
-      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
-                                   IDS_IOS_SIGNOUT_DIALOG_KEEP_DATA_BUTTON)]
-      performAction:grey_tap()];
-
-  // Verify that sign-in is disabled.
-  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
-      performAction:grey_tap()];
-  [[EarlGrey
-      selectElementWithMatcher:grey_accessibilityID(kSettingsSignInCellId)]
-      assertWithMatcher:grey_notVisible()];
-
-  // Verify signed out.
-  [SigninEarlGrey verifySignedOut];
-  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
-      performAction:grey_tap()];
-
-  // Verify bookmarks are available.
-  [BookmarkEarlGreyUI openBookmarks];
-  [BookmarkEarlGreyUI verifyEmptyBackgroundIsAbsent];
-  [[EarlGrey selectElementWithMatcher:BookmarkHomeDoneButton()]
-      performAction:grey_tap()];
-
-  // Turn on "Allow Chrome Sign-in" feature.
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/NO,
-                                   /*enabled=*/YES)]
-      performAction:chrome_test_util::TurnSettingsSwitchOn(YES)];
-
-  // Verify that the user is signed out and sign-in is enabled.
-  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
-      performAction:grey_tap()];
-  [[EarlGrey selectElementWithMatcher:PrimarySignInButton()]
-      assertWithMatcher:grey_sufficientlyVisible()];
-}
-
-// Tests that disabling the "Allow Chrome sign-in" option blocks the user
-// from signing in to Chrome through the default sign-in until it is re-enabled.
-- (void)testToggleAllowChromeSigninWithDefaultSignin {
-  [ChromeEarlGreyUI openSettingsMenu];
-  // Close the sign-in promo.
-  [[EarlGrey
-      selectElementWithMatcher:grey_allOf(grey_accessibilityID(
-                                              kSigninPromoCloseButtonId),
-                                          grey_sufficientlyVisible(), nil)]
-      performAction:grey_tap()];
-  [SigninEarlGreyUI verifySigninPromoNotVisible];
-
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
-
-  // Turn off "Allow Chrome Sign-in" feature.
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/YES,
-                                   /*enabled=*/YES)]
-      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
-
-  // Verify that the user is signed out and sign-in is disabled.
-  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
-      performAction:grey_tap()];
-  [[EarlGrey
-      selectElementWithMatcher:grey_accessibilityID(kSettingsSignInCellId)]
-      assertWithMatcher:grey_notVisible()];
-  [SigninEarlGrey verifySignedOut];
-
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
-
-  // Turn on "Allow Chrome Sign-in" feature.
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/NO,
-                                   /*enabled=*/YES)]
-      performAction:chrome_test_util::TurnSettingsSwitchOn(YES)];
-
-  // Verify that the user is signed out and sign-in is enabled.
-  [[EarlGrey selectElementWithMatcher:SettingsMenuBackButton()]
-      performAction:grey_tap()];
-  [[EarlGrey
-      selectElementWithMatcher:grey_accessibilityID(kSettingsSignInCellId)]
-      assertWithMatcher:grey_sufficientlyVisible()];
-}
-
-// Tests that canceling the "Allow Chrome sign-in" option does not change the
-// user's sign-in state.
-- (void)testCancelAllowChromeSignin {
-  FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1];
-  [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
-  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
-
-  [ChromeEarlGreyUI openSettingsMenu];
-  [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()];
-
-  // Turn off "Allow Chrome Sign-in" feature.
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/YES,
-                                   /*enabled=*/YES)]
-      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
-
-  // Dismiss the sign-out dialog.
-  DismissSignOut();
-
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/YES,
-                                   /*enabled=*/YES)]
-      assertWithMatcher:grey_sufficientlyVisible()];
-
-  // Turn off "Allow Chrome Sign-in" feature.
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/YES,
-                                   /*enabled=*/YES)]
-      performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
-
-  // Select "sign out" option then dismiss the sign-out dialog.
-  [[EarlGrey
-      selectElementWithMatcher:ButtonWithAccessibilityLabelId(
-                                   IDS_IOS_SIGNOUT_DIALOG_SIGN_OUT_BUTTON)]
-      performAction:grey_tap()];
-  DismissSignOut();
-
-  [[EarlGrey
-      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                   kAllowSigninItemAccessibilityIdentifier,
-                                   /*is_toggled_on=*/YES,
-                                   /*enabled=*/YES)]
-      assertWithMatcher:grey_sufficientlyVisible()];
-
-  [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity];
-}
-
-@end
diff --git a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
index 16694b6a..1ce54138 100644
--- a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
@@ -51,7 +51,6 @@
 #import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h"
 #import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h"
 #import "ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h"
-#import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
 #import "ios/chrome/browser/ui/authentication/signin/signin_utils.h"
 #import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h"
@@ -84,7 +83,6 @@
 #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h"
 #import "ios/chrome/browser/ui/settings/voice_search_table_view_controller.h"
 #import "ios/chrome/browser/ui/signin/signin_presenter.h"
-#import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h"
 #include "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_image_item.h"
@@ -289,9 +287,6 @@
 // YES if the sign-in is in progress.
 @property(nonatomic, assign) BOOL isSigninInProgress;
 
-// Cache for the avatar image.
-@property(nonatomic, strong) ResizedAvatarCache* avatarCache;
-
 // Stops observing browser state services. This is required during the shutdown
 // phase to avoid observing services for a profile that is being killed.
 - (void)stopBrowserStateServiceObservers;
@@ -394,8 +389,6 @@
 
     _dispatcher = dispatcher;
 
-    _avatarCache = [[ResizedAvatarCache alloc] initWithDefaultTableView];
-
     // TODO(crbug.com/764578): -loadModel should not be called from
     // initializer. A possible fix is to move this call to -viewDidLoad.
     [self loadModel];
@@ -1506,7 +1499,8 @@
     return;
   }
   identityAccountItem.image =
-      [self.avatarCache resizedAvatarForIdentity:_identity];
+      self.accountManagerService->GetIdentityAvatarWithIdentity(
+          _identity, IdentityAvatarSize::TableViewIcon);
   identityAccountItem.text = [_identity userFullName];
   identityAccountItem.detailText = _identity.userEmail;
 }
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb
index 49e5a19..4ddbff7 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">İstifadəçi adı</translation>
 <translation id="8518521100965196752">Parollardan istifadə etmək üçün əvvəlcə cihazınızda parol ayarlamalısınız.</translation>
 <translation id="8877181643142698531">URL</translation>
+<translation id="9069288651897538648"><ph name="URL" /> üçün</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb
index bc325c8..c67d277 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">Імя карыстальніка</translation>
 <translation id="8518521100965196752">Каб выкарыстоўваць паролі, на прыладзе трэба спачатку наладзіць блакіроўку экрана.</translation>
 <translation id="8877181643142698531">URL-адрас</translation>
+<translation id="9069288651897538648">Для сайта <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb
index 4a5031d..83c948b 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">Uživatelské jméno</translation>
 <translation id="8518521100965196752">Chcete-li použít hesla, musíte nejdříve na zařízení nastavit heslo.</translation>
 <translation id="8877181643142698531">URL</translation>
+<translation id="9069288651897538648">Pro <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb
index 92c498a..e135f85 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">Nombre de usuario</translation>
 <translation id="8518521100965196752">Para usar contraseñas, primero debes establecer un código en tu dispositivo.</translation>
 <translation id="8877181643142698531">URL</translation>
+<translation id="9069288651897538648">Para <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb
index d6cb1cd..ef91f19 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fi.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">Käyttäjätunnus</translation>
 <translation id="8518521100965196752">Salasanojen käyttöä varten sinun on ensin asetettava laitteellesi tunnuskoodi.</translation>
 <translation id="8877181643142698531">URL-osoite</translation>
+<translation id="9069288651897538648">Osoitteelle <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb
index b792345..deb983aa 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">Username</translation>
 <translation id="8518521100965196752">Para gumamit ng mga password, dapat ka munang magtakda ng passcode sa iyong device.</translation>
 <translation id="8877181643142698531">URL</translation>
+<translation id="9069288651897538648">Para sa/kay <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb
index bcd9bfb..2ff6ed0 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr-CA.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">Nom d'utilisateur</translation>
 <translation id="8518521100965196752">Pour utiliser vos mots de passe, vous devez d'abord définir un code sur votre appareil.</translation>
 <translation id="8877181643142698531">URL</translation>
+<translation id="9069288651897538648">Pour <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb
index 02c13e99..ec864e4 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">Nama Pengguna</translation>
 <translation id="8518521100965196752">Untuk menggunakan sandi, Anda harus menyetel kode sandi di perangkat terlebih dahulu.</translation>
 <translation id="8877181643142698531">URL</translation>
+<translation id="9069288651897538648">Untuk <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb
index 23dd2b6..3dbfda49 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_iw.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">שם משתמש</translation>
 <translation id="8518521100965196752">כדי שניתן יהיה להשתמש בסיסמאות, יש להגדיר קוד גישה במכשיר.</translation>
 <translation id="8877181643142698531">‏כתובת URL</translation>
+<translation id="9069288651897538648">לאתר <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb
index d37cbfe..2885f64 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">ឈ្មោះអ្នកប្រើ</translation>
 <translation id="8518521100965196752">ដើម្បី​ប្រើ​ពាក្យសម្ងាត់ អ្នកត្រូវតែ​កំណត់​លេខ​កូដ​សម្ងាត់​នៅលើ​ឧបករណ៍​របស់អ្នក​ជាមុន​សិន។</translation>
 <translation id="8877181643142698531">URL</translation>
+<translation id="9069288651897538648">សម្រាប់ <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb
index 2343723..6ed08e9 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">사용자이름</translation>
 <translation id="8518521100965196752">비밀번호를 사용하려면 기기에 비밀번호를 설정해야 합니다.</translation>
 <translation id="8877181643142698531">URL</translation>
+<translation id="9069288651897538648"><ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb
index 1b05895..2985d76 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ms.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">Nama pengguna</translation>
 <translation id="8518521100965196752">Untuk menggunakan kata laluan, anda mesti menetapkan kod laluan pada peranti anda dahulu.</translation>
 <translation id="8877181643142698531">URL</translation>
+<translation id="9069288651897538648">Untuk <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb
index c6d58e0..65d5603 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb
@@ -11,6 +11,7 @@
 <translation id="3789385946721385622">Emri i përdoruesit</translation>
 <translation id="4064278913989596727">Ndihma</translation>
 <translation id="4241076354893135477">Nuk ka asnjë fjalëkalim të Chrome</translation>
+<translation id="4452240207605337349">Nuk mund të ruhet fjalëkalimi</translation>
 <translation id="5118084770294029567">Të gjitha fjalëkalimet</translation>
 <translation id="5148402015874782921">Anulo</translation>
 <translation id="5366190986669335938">Qasu në fjalëkalimet që ruan në Chrome nga çdo aplikacion.</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb
index 395a1b5..dfc2159 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb
@@ -39,4 +39,5 @@
 <translation id="8503813439785031346">用戶名稱</translation>
 <translation id="8518521100965196752">如要使用密碼,您必須先在裝置上設定密碼。</translation>
 <translation id="8877181643142698531">網址</translation>
+<translation id="9069288651897538648">適用於 <ph name="URL" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
index 93649c5f..8ef64f4 100644
--- a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
+++ b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
@@ -595,9 +595,9 @@
 }
 
 + (id<GREYMatcher>)googleServicesSettingsButton {
-  return grey_allOf(
-      grey_kindOfClass([UITableViewCell class]), grey_sufficientlyVisible(),
-      grey_accessibilityID(kSettingsGoogleSyncAndServicesCellId), nil);
+  return grey_allOf(grey_kindOfClass([UITableViewCell class]),
+                    grey_sufficientlyVisible(),
+                    grey_accessibilityID(kSettingsGoogleServicesCellId), nil);
 }
 
 + (id<GREYMatcher>)googleServicesSettingsView {
diff --git a/mojo/public/cpp/bindings/self_owned_receiver.h b/mojo/public/cpp/bindings/self_owned_receiver.h
index 24f793a..36d5a5c 100644
--- a/mojo/public/cpp/bindings/self_owned_receiver.h
+++ b/mojo/public/cpp/bindings/self_owned_receiver.h
@@ -92,13 +92,31 @@
                     PendingReceiver<Interface> receiver,
                     scoped_refptr<base::SequencedTaskRunner> task_runner)
       : impl_(std::move(impl)),
-        receiver_(impl_.get(), std::move(receiver), std::move(task_runner)) {
-    receiver_.set_disconnect_with_reason_handler(base::BindOnce(
-        &SelfOwnedReceiver::OnDisconnect, base::Unretained(this)));
+        receiver_(impl_.get(), std::move(receiver), task_runner) {
+    auto on_disconnect_cb = base::BindOnce(&SelfOwnedReceiver::OnDisconnect,
+                                           base::Unretained(this));
+    if (task_runner && !task_runner->RunsTasksInCurrentSequence()) {
+      // `this` will be deleted on `task_runner`. It cannot be
+      // reentrantly-destroyed here so `base::Unretained` is safe.
+      task_runner->PostTask(
+          FROM_HERE,
+          base::BindOnce(&SelfOwnedReceiver::SetDisconnectWithReasonHandler,
+                         base::Unretained(this), std::move(on_disconnect_cb)));
+    } else {
+      SetDisconnectWithReasonHandler(std::move(on_disconnect_cb));
+    }
   }
 
+  // Will be destroyed on `task_runner` argument passed to constructor if
+  // non-null; otherwise, will be destroyed on the sequence the `this` was
+  // originally constructed on.
   ~SelfOwnedReceiver() = default;
 
+  void SetDisconnectWithReasonHandler(
+      ConnectionErrorWithReasonCallback on_disconnect_cb) {
+    receiver_.set_disconnect_with_reason_handler(std::move(on_disconnect_cb));
+  }
+
   void OnDisconnect(uint32_t custom_reason, const std::string& description) {
     if (connection_error_handler_) {
       std::move(connection_error_handler_).Run();
diff --git a/remoting/resources/remoting_strings_az.xtb b/remoting/resources/remoting_strings_az.xtb
index fff2c52..7d5b30f 100644
--- a/remoting/resources/remoting_strings_az.xtb
+++ b/remoting/resources/remoting_strings_az.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">Kimsə yanlış PIN kod ilə qoşulmağa cəhd etdiyi üçün uzaqdan idarə edilən kompüterə qoşulma müvəqqəti olaraq blok edilib. Yenidən cəhd edin.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6985691951107243942"><ph name="HOSTNAME" /> üzərinə kənar bağlantıları deaktiv etmək istəyirsiniz?</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> kompüterinizi görmək və idarə etmək üçün icazə istəyir. Bu şəxsi tanımırsınızsa və ya paylaşmadan əvvəl hər hansı bir dəyişiklik etməlisinizsə ''<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />'' seçiminə basın.  Əks halda qoşulmağa icazə vermək üçün "<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />" seçin.</translation>
 <translation id="7019153418965365059">Tanınmayan host xətası: <ph name="HOST_OFFLINE_REASON" /> .</translation>
 <translation id="701976023053394610">Kənardan yardım</translation>
 <translation id="7026930240735156896">Kompüterinizdə uzaqdan girişi quraşdırmaq üçün təlimatlara əməl edin</translation>
diff --git a/remoting/resources/remoting_strings_be.xtb b/remoting/resources/remoting_strings_be.xtb
index a71c664..62a9c05 100644
--- a/remoting/resources/remoting_strings_be.xtb
+++ b/remoting/resources/remoting_strings_be.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">Падключэнні да аддаленага камп'ютара часова заблакіраваны, бо нехта спрабаваў падключыцца да яго з выкарыстаннем няправільнага PIN-кода. Паўтарыце спробу пазней.</translation>
 <translation id="6965382102122355670">ОК</translation>
 <translation id="6985691951107243942">Сапраўды выключыць аддаленыя падключэнні да хоста <ph name="HOSTNAME" />? Калі раздумаецеся, трэба будзе наведаць той жа камп'ютар, каб зноў падключыцца.</translation>
+<translation id="6998890551706945177">Карыстальнік <ph name="CLIENT_USERNAME" /> запытвае доступ на прагляд дзеянняў на вашым камп'ютары і кіраванне ім. Калі вы не знаеце гэтага карыстальніка або калі вам трэба ўнесці нейкія змены, націсніце "<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />".  Калі вы вырашыце дазволіць падключэнне, націсніце "<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />".</translation>
 <translation id="7019153418965365059">Невядомая памылка хоста: <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">Аддаленая дапамога</translation>
 <translation id="7026930240735156896">Для наладжвання аддаленага доступу выканайце гэтыя інструкцыі.</translation>
diff --git a/remoting/resources/remoting_strings_cs.xtb b/remoting/resources/remoting_strings_cs.xtb
index 68aa30f..5bc9c492 100644
--- a/remoting/resources/remoting_strings_cs.xtb
+++ b/remoting/resources/remoting_strings_cs.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">Připojení ke vzdálenému počítači jsou dočasně zablokována, protože došlo k několika pokusům o připojení s nesprávným kódem PIN. Zkuste to znovu později.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6985691951107243942">Opravdu chcete zakázat vzdálená připojení k počítači <ph name="HOSTNAME" />? Pokud později své rozhodnutí změníte, bude nutné připojení povolit přímo z uvedeného počítače.</translation>
+<translation id="6998890551706945177">Uživatel <ph name="CLIENT_USERNAME" /> požádal o přístup k zobrazení a ovládání vašeho počítače. Pokud tohoto uživatele neznáte nebo před sdílením potřebujete provést změny, stiskněte <ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />.  Jinak připojení povolte stisknutím možnosti <ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />.</translation>
 <translation id="7019153418965365059">Neznámá chyba hostitele: <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">Vzdálená pomoc</translation>
 <translation id="7026930240735156896">Postupujte podle pokynů k nastavení počítače pro vzdálený přístup</translation>
diff --git a/remoting/resources/remoting_strings_es-419.xtb b/remoting/resources/remoting_strings_es-419.xtb
index 1185785..4a453d4 100644
--- a/remoting/resources/remoting_strings_es-419.xtb
+++ b/remoting/resources/remoting_strings_es-419.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">Las conexiones con la computadora remota se bloquearon temporalmente porque alguien intentó conectarse a ella con un PIN no válido. Vuelve a intentarlo más tarde.</translation>
 <translation id="6965382102122355670">Aceptar</translation>
 <translation id="6985691951107243942">¿Realmente deseas inhabilitar las conexiones remotas con <ph name="HOSTNAME" />? Si te arrepientes, tendrás que ir a esa computadora para volver a habilitar las conexiones.</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> solicitó acceso para ver y controlar tu computadora. Presiona ''<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />'' si no conoces a esta persona o si necesitas realizar un cambio antes de compartir el acceso.  De lo contrario, selecciona ''<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />'' para compartir la conexión.</translation>
 <translation id="7019153418965365059">Error de host no reconocido: <ph name="HOST_OFFLINE_REASON" /></translation>
 <translation id="701976023053394610">Asistencia remota</translation>
 <translation id="7026930240735156896">Sigue las instrucciones para configurar la computadora a fin de acceder de forma remota.</translation>
diff --git a/remoting/resources/remoting_strings_fi.xtb b/remoting/resources/remoting_strings_fi.xtb
index c815e32..b122d8f 100644
--- a/remoting/resources/remoting_strings_fi.xtb
+++ b/remoting/resources/remoting_strings_fi.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">Yhteydet etätietokoneeseen on väliaikaisesti estetty, sillä siihen yritettiin muodostaa yhteys virheellisellä PIN-koodilla. Yritä myöhemmin uudelleen.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6985691951107243942">Haluatko varmasti poistaa käytöstä etäyhteydet kohteeseen <ph name="HOSTNAME" />? Jos muutat mieltäsi, yhteydet täytyy palauttaa käyttöön kyseisellä tietokoneella.</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> on pyytänyt lupaa nähdä ja ohjata tietokonettasi. Paina "<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />", jos et tunne tätä henkilöä tai jos sinun tarvitsee tehdä muutoksia ennen jakamista.  Muussa tapauksessa valitse ''<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />'' antaaksesi luvan.</translation>
 <translation id="7019153418965365059">Tuntematon isäntävirhe: <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">Etätuki</translation>
 <translation id="7026930240735156896">Määritä tietokone etäyhteyttä varten seuraamalla ohjeita</translation>
diff --git a/remoting/resources/remoting_strings_fil.xtb b/remoting/resources/remoting_strings_fil.xtb
index 94962089..19f4a17 100644
--- a/remoting/resources/remoting_strings_fil.xtb
+++ b/remoting/resources/remoting_strings_fil.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">Pansamantalang naka-block ang mga koneksyon sa malayuang computer dahil may sumubok na kumonekta rito gamit ang di-wastong PIN. Pakisubukang muli sa ibang pagkakataon.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6985691951107243942">Sigurado ka bang nais mong hindi paganahin ang mga malayuang koneksyon sa <ph name="HOSTNAME" />? Kung magbago ang iyong isip, kakailanganin mong bisitahin ang computer na iyon upang muling paganahin ang mga koneksyon.</translation>
+<translation id="6998890551706945177">Humiling si <ph name="CLIENT_USERNAME" /> ng access para tingnan at kontrolin ang iyong computer. Pindutin ang ''<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />'' kung hindi mo kilala ang taong ito o kung kailangan mong gumawa ng anumang pagbabago bago magbahagi.  Kung hindi, piliin ang ''<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />'' para payagan ang koneksyon.</translation>
 <translation id="7019153418965365059">Hindi alam na error sa host: <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">Malayuang Tulong</translation>
 <translation id="7026930240735156896">Sundin ang mga tagubilin para i-set up ang iyong computer para sa malayuang pag-access</translation>
diff --git a/remoting/resources/remoting_strings_fr-CA.xtb b/remoting/resources/remoting_strings_fr-CA.xtb
index 6bb9ea30..f75485f 100644
--- a/remoting/resources/remoting_strings_fr-CA.xtb
+++ b/remoting/resources/remoting_strings_fr-CA.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">Les connexions à l'ordinateur distant sont momentanément bloquées, car un utilisateur a tenté de s'y connecter en utilisant un NIP erroné. Veuillez réessayer plus tard.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6985691951107243942">Voulez-vous vraiment désactiver les connexions à distance à <ph name="HOSTNAME" />? Si vous changez d'idée, vous devrez visiter cet ordinateur pour réactiver les connexions.</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> a demandé l'accès pour consulter et contrôler votre ordinateur. Appuyez sur « <ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" /> » si vous ne connaissez pas cette personne ou si vous devez apporter des modifications avant de partager l'accès.  Sinon, sélectionnez « <ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" /> » pour autoriser la connexion.</translation>
 <translation id="7019153418965365059">Erreur d'hôte non reconnue : <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">Assistance à distance</translation>
 <translation id="7026930240735156896">Suivez les instructions pour configurer votre ordinateur pour l'accès à distance</translation>
diff --git a/remoting/resources/remoting_strings_id.xtb b/remoting/resources/remoting_strings_id.xtb
index f7bb8650..f0ddba84 100644
--- a/remoting/resources/remoting_strings_id.xtb
+++ b/remoting/resources/remoting_strings_id.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">Sambungan ke komputer jarak jauh diblokir untuk sementara karena seseorang mencoba untuk menyambungkannya dengan PIN yang tidak valid. Coba lagi nanti.</translation>
 <translation id="6965382102122355670">Oke</translation>
 <translation id="6985691951107243942">Yakin ingin menonaktifkan sambungan jarak jauh dengan <ph name="HOSTNAME" />? Jika Anda berubah pikiran, Anda harus mengunjungi komputer tersebut untuk mengaktifkan kembali sambungan.</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> telah meminta akses untuk melihat dan mengontrol komputer Anda. Tekan ''<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />'' jika Anda tidak mengetahui pengguna ini atau Anda perlu melakukan perubahan sebelum berbagi.  Atau, pilih ''<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />'' untuk mengizinkan koneksi.</translation>
 <translation id="7019153418965365059">Kesalahan host tidak dikenal: <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">Bantuan Jarak Jauh</translation>
 <translation id="7026930240735156896">Ikuti petunjuk menyiapkan komputer untuk akses jarak jauh</translation>
diff --git a/remoting/resources/remoting_strings_iw.xtb b/remoting/resources/remoting_strings_iw.xtb
index 16ecbe3..708e30d 100644
--- a/remoting/resources/remoting_strings_iw.xtb
+++ b/remoting/resources/remoting_strings_iw.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">החיבורים למחשב המרוחק חסומים באופן זמני משום שמישהו ניסה להתחבר אליו עם קוד אימות לא חוקי. יש לנסות שוב מאוחר יותר.</translation>
 <translation id="6965382102122355670">אישור</translation>
 <translation id="6985691951107243942">ברצונך באמת להשבית את החיבורים המרוחקים אל <ph name="HOSTNAME" />? אם דעתך תשתנה, יהיה עליך להיכנס למחשב זה כדי להפעיל מחדש את החיבורים.</translation>
+<translation id="6998890551706945177">התקבלה בקשת גישה מאת <ph name="CLIENT_USERNAME" /> לצורך הצגת המחשב שלך ושליטה בו. עליך להקיש על ''<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />'' אם המשתמש הזה לא מוכר לך או במקרה שברצונך לבצע שינויים לפני השיתוף.  אחרת, יש להקיש על ''<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />'' כדי לאשר את החיבור.</translation>
 <translation id="7019153418965365059">שגיאת מארח לא מזוהה: <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">סיוע מרחוק</translation>
 <translation id="7026930240735156896">יש להגדיר את המחשב לגישה מרחוק בהתאם להוראות</translation>
diff --git a/remoting/resources/remoting_strings_km.xtb b/remoting/resources/remoting_strings_km.xtb
index 53091ac..726f60ac 100644
--- a/remoting/resources/remoting_strings_km.xtb
+++ b/remoting/resources/remoting_strings_km.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">ការតភ្ជាប់ទៅកុំព្យូទ័រពីចម្ងាយត្រូវបានរារាំងជាបណ្តោះអាសន្ន ដោយសារមាននរណាម្នាក់កំពុងព្យាយាមភ្ជាប់ទៅវាដោយប្រើកូដ PIN ដែលមិនត្រឹមត្រូវ។ សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ។</translation>
 <translation id="6965382102122355670">យល់ព្រម</translation>
 <translation id="6985691951107243942">តើអ្នកប្រាកដថាចង់បិទដំណើរការការភ្ជាប់ពីចម្ងាយទៅ <ph name="HOSTNAME" /> ទេ? ប្រសិនបើអ្នកប្តូរចិត្ត អ្នកត្រូវទៅកាន់កុំព្យូទ័រនោះដើម្បីបើកដំណើរការការភ្ជាប់ឡើងវិញ។</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> បានស្នើសុំសិទ្ធិចូលប្រើ ដើម្បីមើល និងគ្រប់គ្រងកុំព្យូទ័ររបស់អ្នក។ សូមចុច ''<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />'' ប្រសិនបើអ្នកមិនស្គាល់បុគ្គលនេះ ឬប្រសិនបើអ្នកត្រូវការធ្វើការផ្លាស់ប្ដូរ មុនពេលចែករំលែក។  បើមិនដូច្នោះទេ សូមជ្រើសរើស ''<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />'' ដើម្បីអនុញ្ញាតការតភ្ជាប់។</translation>
 <translation id="7019153418965365059">កំហុសម៉ាស៊ីនចែករំលែកដែលមិនអាចសម្គាល់បាន៖ <ph name="HOST_OFFLINE_REASON" />។</translation>
 <translation id="701976023053394610">ជំនួយការពីចម្ងាយ</translation>
 <translation id="7026930240735156896">សូម​អនុវត្ត​តាម​ការណែនាំ​ ដើម្បី​រៀបចំកុំព្យូទ័រ​របស់អ្នក​សម្រាប់​ការចូលប្រើ​ពីចម្ងាយ</translation>
diff --git a/remoting/resources/remoting_strings_ko.xtb b/remoting/resources/remoting_strings_ko.xtb
index bd5ca4af..c19844f 100644
--- a/remoting/resources/remoting_strings_ko.xtb
+++ b/remoting/resources/remoting_strings_ko.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">누군가 잘못된 PIN으로 연결을 시도하여 원격 컴퓨터 연결이 일시적으로 차단되었습니다. 나중에 다시 시도해 주세요.</translation>
 <translation id="6965382102122355670">확인</translation>
 <translation id="6985691951107243942"><ph name="HOSTNAME" />와(과)의 원격 연결을 사용중지하시겠습니까? 생각이 바뀌면 해당 컴퓨터에서 연결을 다시 사용하도록 설정해야 합니다.</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" />님이 내 컴퓨터를 확인하고 제어하기 위한 액세스 권한을 요청했습니다. 모르는 사용자이거나 공유하기 전에 변경할 사항이 있다면 ''<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />''를 누르세요.  그렇지 않다면 ''<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />''를 선택해 연결을 허용합니다.</translation>
 <translation id="7019153418965365059">알 수 없는 호스트 오류입니다. <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">원격 지원</translation>
 <translation id="7026930240735156896">안내에 따라 컴퓨터에서 원격으로 액세스할 수 있도록 설정하세요.</translation>
diff --git a/remoting/resources/remoting_strings_ms.xtb b/remoting/resources/remoting_strings_ms.xtb
index a1a30311..568a65c 100644
--- a/remoting/resources/remoting_strings_ms.xtb
+++ b/remoting/resources/remoting_strings_ms.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">Sambungan kepada komputer jauh disekat buat sementara waktu kerana seseorang sedang cuba untuk menyambung kepadanya dengan PIN yang tidak sah. Sila cuba sebentar lagi.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6985691951107243942">Adakah anda pasti mahu melumpuhkan sambungan jauh ke <ph name="HOSTNAME" />? Jika anda berubah fikiran, anda perlu pergi ke komputer tersebut untuk mendayakan semula sambungan.</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> telah meminta akses untuk melihat dan mengawal komputer anda. Tekan ''<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />'' jika anda tidak mengenali orang ini atau anda perlu membuat sebarang perubahan sebelum berkongsi.  Jika tidak, pilih ''<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />'' untuk membenarkan sambungan.</translation>
 <translation id="7019153418965365059">Ralat hos tak dikenali: <ph name="HOST_OFFLINE_REASON" />.</translation>
 <translation id="701976023053394610">Bantuan Jauh</translation>
 <translation id="7026930240735156896">Ikut arahan untuk menyediakan komputer anda untuk akses jauh</translation>
diff --git a/remoting/resources/remoting_strings_zh-HK.xtb b/remoting/resources/remoting_strings_zh-HK.xtb
index 87364e9..46eae3e63 100644
--- a/remoting/resources/remoting_strings_zh-HK.xtb
+++ b/remoting/resources/remoting_strings_zh-HK.xtb
@@ -130,6 +130,7 @@
 <translation id="6963936880795878952">由於有人嘗試使用無效的 PIN 連線至遠端電腦,因此系統暫時封鎖您的連線,請稍後再試。</translation>
 <translation id="6965382102122355670">確定</translation>
 <translation id="6985691951107243942">您是否確定要停用與 <ph name="HOSTNAME" /> 之間的遠端連線?如果其後改變主意,您必須親自前往該電腦所在位置修改設定,才能重新啟用連線。</translation>
+<translation id="6998890551706945177"><ph name="CLIENT_USERNAME" /> 要求您授予電腦的瀏覽及控制權限。如果您不認識不認識對方,或需要在授予權限前進行變更,請按下 [<ph name="IDS_SHARE_CONFIRM_DIALOG_DECLINE" />],否則請選取 [<ph name="IDS_SHARE_CONFIRM_DIALOG_CONFIRM" />] 允許連線。</translation>
 <translation id="7019153418965365059">不明主機錯誤:<ph name="HOST_OFFLINE_REASON" />。</translation>
 <translation id="701976023053394610">遠端協助</translation>
 <translation id="7026930240735156896">按照指示設定電腦,即可使用遠端存取功能</translation>
diff --git a/sql/database.cc b/sql/database.cc
index e6d5798e..484cfba 100644
--- a/sql/database.cc
+++ b/sql/database.cc
@@ -1329,7 +1329,7 @@
   }
 
 #if DCHECK_IS_ON()
-  DCHECK_EQ(unused_sql, sql + std::strlen(sql))
+  DCHECK_EQ(unused_sql, sql + strlen(sql))
       << "Unused text: " << std::string(unused_sql) << "\n"
       << "in prepared SQL statement: " << std::string(sql);
 #endif  // DCHECK_IS_ON()
@@ -1384,7 +1384,7 @@
   }
 
 #if DCHECK_IS_ON()
-  DCHECK_EQ(unused_sql, sql + std::strlen(sql))
+  DCHECK_EQ(unused_sql, sql + strlen(sql))
       << "Unused text: " << std::string(unused_sql) << "\n"
       << "in SQL statement: " << std::string(sql);
 #endif  // DCHECK_IS_ON()
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index b8a37a4..4ecf055 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5964,21 +5964,21 @@
       },
       {
         "args": [
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome",
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_Lacros version skew testing ash 94.0.4602.0",
+        "name": "lacros_chrome_browsertests_Lacros version skew testing ash 94.0.4603.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v94.0.4602.0",
-              "revision": "version:94.0.4602.0"
+              "location": "lacros_version_skew_tests_v94.0.4603.0",
+              "revision": "version:94.0.4603.0"
             }
           ],
           "dimension_sets": [
@@ -6022,21 +6022,21 @@
       },
       {
         "args": [
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome",
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 94.0.4602.0",
+        "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 94.0.4603.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v94.0.4602.0",
-              "revision": "version:94.0.4602.0"
+              "location": "lacros_version_skew_tests_v94.0.4603.0",
+              "revision": "version:94.0.4603.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 5bf9725..a229f9c 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -83340,7 +83340,7 @@
       },
       {
         "args": [
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome",
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter"
         ],
         "isolate_profile_data": true,
@@ -83348,14 +83348,14 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_Lacros version skew testing ash 94.0.4602.0",
+        "name": "lacros_chrome_browsertests_Lacros version skew testing ash 94.0.4603.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v94.0.4602.0",
-              "revision": "version:94.0.4602.0"
+              "location": "lacros_version_skew_tests_v94.0.4603.0",
+              "revision": "version:94.0.4603.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -83390,7 +83390,7 @@
       },
       {
         "args": [
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome",
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter"
         ],
         "isolate_profile_data": true,
@@ -83398,14 +83398,14 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 94.0.4602.0",
+        "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 94.0.4603.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v94.0.4602.0",
-              "revision": "version:94.0.4602.0"
+              "location": "lacros_version_skew_tests_v94.0.4603.0",
+              "revision": "version:94.0.4603.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -84753,21 +84753,21 @@
       },
       {
         "args": [
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome",
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_Lacros version skew testing ash 94.0.4602.0",
+        "name": "lacros_chrome_browsertests_Lacros version skew testing ash 94.0.4603.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v94.0.4602.0",
-              "revision": "version:94.0.4602.0"
+              "location": "lacros_version_skew_tests_v94.0.4603.0",
+              "revision": "version:94.0.4603.0"
             }
           ],
           "dimension_sets": [
@@ -84813,21 +84813,21 @@
       },
       {
         "args": [
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome",
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 94.0.4602.0",
+        "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 94.0.4603.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v94.0.4602.0",
-              "revision": "version:94.0.4602.0"
+              "location": "lacros_version_skew_tests_v94.0.4603.0",
+              "revision": "version:94.0.4603.0"
             }
           ],
           "dimension_sets": [
@@ -86352,21 +86352,21 @@
       },
       {
         "args": [
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome",
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_Lacros version skew testing ash 94.0.4602.0",
+        "name": "lacros_chrome_browsertests_Lacros version skew testing ash 94.0.4603.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v94.0.4602.0",
-              "revision": "version:94.0.4602.0"
+              "location": "lacros_version_skew_tests_v94.0.4603.0",
+              "revision": "version:94.0.4603.0"
             }
           ],
           "dimension_sets": [
@@ -86412,21 +86412,21 @@
       },
       {
         "args": [
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome",
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 94.0.4602.0",
+        "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 94.0.4603.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v94.0.4602.0",
-              "revision": "version:94.0.4602.0"
+              "location": "lacros_version_skew_tests_v94.0.4603.0",
+              "revision": "version:94.0.4603.0"
             }
           ],
           "dimension_sets": [
@@ -87139,21 +87139,21 @@
       },
       {
         "args": [
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome",
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_Lacros version skew testing ash 94.0.4602.0",
+        "name": "lacros_chrome_browsertests_Lacros version skew testing ash 94.0.4603.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v94.0.4602.0",
-              "revision": "version:94.0.4602.0"
+              "location": "lacros_version_skew_tests_v94.0.4603.0",
+              "revision": "version:94.0.4603.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -87187,21 +87187,21 @@
       },
       {
         "args": [
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome",
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 94.0.4602.0",
+        "name": "lacros_chrome_browsertests_run_in_series_Lacros version skew testing ash 94.0.4603.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v94.0.4602.0",
-              "revision": "version:94.0.4602.0"
+              "location": "lacros_version_skew_tests_v94.0.4603.0",
+              "revision": "version:94.0.4603.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index f49a2ea..08eb142 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -46,16 +46,16 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4602.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v94.0.4603.0/test_ash_chrome',
       '--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter',
     ],
-    'identifier': 'Lacros version skew testing ash 94.0.4602.0',
+    'identifier': 'Lacros version skew testing ash 94.0.4603.0',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v94.0.4602.0',
-          'revision': 'version:94.0.4602.0',
+          'location': 'lacros_version_skew_tests_v94.0.4603.0',
+          'revision': 'version:94.0.4603.0',
         },
       ],
     },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 611ff45..3ed8673 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -961,7 +961,6 @@
                     "disable_features": [
                         "AutofillEnableDependentLocalityParsing",
                         "AutofillEnableImportWhenMultiplePhoneNumbers",
-                        "AutofillEnableLabelPrecedenceForTurkishAddresses",
                         "AutofillSectionUponRedundantNameInfo",
                         "AutofillUseAlternativeStateNameMap"
                     ]
@@ -974,25 +973,11 @@
                     "disable_features": [
                         "AutofillEnableDependentLocalityParsing",
                         "AutofillEnableImportWhenMultiplePhoneNumbers",
-                        "AutofillEnableLabelPrecedenceForTurkishAddresses",
                         "AutofillFixFillableFieldTypes",
                         "AutofillUseAlternativeStateNameMap"
                     ]
                 },
                 {
-                    "name": "AutofillEnableLabelPrecedenceForTurkishAddresses_2021-05-01",
-                    "enable_features": [
-                        "AutofillEnableLabelPrecedenceForTurkishAddresses"
-                    ],
-                    "disable_features": [
-                        "AutofillEnableDependentLocalityParsing",
-                        "AutofillEnableImportWhenMultiplePhoneNumbers",
-                        "AutofillFixFillableFieldTypes",
-                        "AutofillSectionUponRedundantNameInfo",
-                        "AutofillUseAlternativeStateNameMap"
-                    ]
-                },
-                {
                     "name": "AutofillUseAlternativeStateNameMap_2021-05-01",
                     "enable_features": [
                         "AutofillUseAlternativeStateNameMap"
@@ -1000,7 +985,6 @@
                     "disable_features": [
                         "AutofillEnableDependentLocalityParsing",
                         "AutofillEnableImportWhenMultiplePhoneNumbers",
-                        "AutofillEnableLabelPrecedenceForTurkishAddresses",
                         "AutofillFixFillableFieldTypes",
                         "AutofillSectionUponRedundantNameInfo"
                     ]
@@ -1012,7 +996,6 @@
                     ],
                     "disable_features": [
                         "AutofillEnableDependentLocalityParsing",
-                        "AutofillEnableLabelPrecedenceForTurkishAddresses",
                         "AutofillFixFillableFieldTypes",
                         "AutofillSectionUponRedundantNameInfo",
                         "AutofillUseAlternativeStateNameMap"
@@ -1025,7 +1008,6 @@
                     ],
                     "disable_features": [
                         "AutofillEnableImportWhenMultiplePhoneNumbers",
-                        "AutofillEnableLabelPrecedenceForTurkishAddresses",
                         "AutofillFixFillableFieldTypes",
                         "AutofillSectionUponRedundantNameInfo",
                         "AutofillUseAlternativeStateNameMap"
@@ -1055,6 +1037,27 @@
             ]
         }
     ],
+    "AutofillEnableLabelPrecedenceForTurkishAddresses": [
+        {
+            "platforms": [
+                "android",
+                "chromeos",
+                "chromeos_lacros",
+                "ios",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "AutofillEnableLabelPrecedenceForTurkishAddresses",
+                    "enable_features": [
+                        "AutofillEnableLabelPrecedenceForTurkishAddresses"
+                    ]
+                }
+            ]
+        }
+    ],
     "AutofillEnableOfferNotification": [
         {
             "platforms": [
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index 86cc98c4..cbeb5ce 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -217,6 +217,7 @@
       base::FEATURE_DISABLED_BY_DEFAULT
 #endif
 };
+const char kPrerender2MemoryThresholdParamName[] = "memory_threshold_in_mb";
 
 bool IsPrerender2Enabled() {
   return base::FeatureList::IsEnabled(blink::features::kPrerender2);
diff --git a/third_party/blink/common/manifest/manifest.cc b/third_party/blink/common/manifest/manifest.cc
index a3fffdb4..c69a292b 100644
--- a/third_party/blink/common/manifest/manifest.cc
+++ b/third_party/blink/common/manifest/manifest.cc
@@ -74,4 +74,11 @@
   return AsTuple(*this) == AsTuple(other);
 }
 
+bool Manifest::LaunchHandler::operator==(const LaunchHandler& other) const {
+  auto AsTuple = [](const auto& item) {
+    return std::tie(item.route_to, item.navigate_existing_client);
+  };
+  return AsTuple(*this) == AsTuple(other);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/common/manifest/manifest_mojom_traits.cc b/third_party/blink/common/manifest/manifest_mojom_traits.cc
index 8d0e652..cadf88b 100644
--- a/third_party/blink/common/manifest/manifest_mojom_traits.cc
+++ b/third_party/blink/common/manifest/manifest_mojom_traits.cc
@@ -175,4 +175,17 @@
   return data.ReadParams(&out->params);
 }
 
+bool StructTraits<blink::mojom::ManifestLaunchHandlerDataView,
+                  ::blink::Manifest::LaunchHandler>::
+    Read(blink::mojom::ManifestLaunchHandlerDataView data,
+         ::blink::Manifest::LaunchHandler* out) {
+  if (!data.ReadRouteTo(&out->route_to))
+    return false;
+
+  if (!data.ReadNavigateExistingClient(&out->navigate_existing_client))
+    return false;
+
+  return true;
+}
+
 }  // namespace mojo
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index 4f06624d..9b87d84c 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -71,7 +71,10 @@
 
 // Prerender2:
 BLINK_COMMON_EXPORT extern const base::Feature kPrerender2;
-
+// A field trial param that controls how much physical memory is required on a
+// device to use Prerender2. If the device's physical memory does not exceed
+// this value, pages will not be prerendered even when kPrerender2 is enabled.
+BLINK_COMMON_EXPORT extern const char kPrerender2MemoryThresholdParamName[];
 // Returns true when Prerender2 feature is enabled.
 BLINK_COMMON_EXPORT bool IsPrerender2Enabled();
 
diff --git a/third_party/blink/public/common/manifest/manifest.h b/third_party/blink/public/common/manifest/manifest.h
index 1153fa2..e06770f 100644
--- a/third_party/blink/public/common/manifest/manifest.h
+++ b/third_party/blink/public/common/manifest/manifest.h
@@ -126,6 +126,24 @@
     // was not present.
     absl::optional<std::u16string> id;
   };
+
+  // This struct replicates ManifestLaunchHandler with an added copy
+  // constructor, this enables containing classes to have a default copy
+  // constructor.
+  // TODO(crbug.com/1236358): Use mojom::blink::ManifestLaunchHandler directly
+  // when it can support copy/move.
+  // See ManifestLaunchHandler for class comments.
+  struct BLINK_COMMON_EXPORT LaunchHandler {
+    using RouteTo = mojom::ManifestLaunchHandler_RouteTo;
+    using NavigateExistingClient =
+        mojom::ManifestLaunchHandler_NavigateExistingClient;
+
+    bool operator==(const LaunchHandler& other) const;
+
+    RouteTo route_to = RouteTo::kAuto;
+    NavigateExistingClient navigate_existing_client =
+        NavigateExistingClient::kAlways;
+  };
 };
 
 }  // namespace blink
diff --git a/third_party/blink/public/common/manifest/manifest_mojom_traits.h b/third_party/blink/public/common/manifest/manifest_mojom_traits.h
index 8b400ce..e9779a8 100644
--- a/third_party/blink/public/common/manifest/manifest_mojom_traits.h
+++ b/third_party/blink/public/common/manifest/manifest_mojom_traits.h
@@ -187,6 +187,25 @@
                    ::blink::Manifest::ShareTarget* out);
 };
 
+template <>
+struct BLINK_COMMON_EXPORT
+    StructTraits<blink::mojom::ManifestLaunchHandlerDataView,
+                 ::blink::Manifest::LaunchHandler> {
+  static blink::mojom::ManifestLaunchHandler::RouteTo route_to(
+      const ::blink::Manifest::LaunchHandler& launch_handler) {
+    return launch_handler.route_to;
+  }
+
+  static blink::mojom::ManifestLaunchHandler::NavigateExistingClient
+  navigate_existing_client(
+      const ::blink::Manifest::LaunchHandler& launch_handler) {
+    return launch_handler.navigate_existing_client;
+  }
+
+  static bool Read(blink::mojom::ManifestLaunchHandlerDataView data,
+                   ::blink::Manifest::LaunchHandler* out);
+};
+
 }  // namespace mojo
 
 #endif  // THIRD_PARTY_BLINK_PUBLIC_COMMON_MANIFEST_MANIFEST_MOJOM_TRAITS_H_
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index 6ae63b9..12cbc76 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -6098,8 +6098,9 @@
   # Fetches the resource and returns the content.
   experimental command loadNetworkResource
     parameters
-      # Frame id to get the resource for.
-      Page.FrameId frameId
+      # Frame id to get the resource for. Mandatory for frame targets, and
+      # should be omitted for worker targets.
+      optional Page.FrameId frameId
       # URL of the resource to get content for.
       string url
       # Options for the request.
@@ -6761,7 +6762,7 @@
       # Frame unique identifier.
       FrameId id
       # Parent frame identifier.
-      optional string parentId
+      optional FrameId parentId
       # Identifier of the loader associated with this frame.
       Network.LoaderId loaderId
       # Frame's name as specified in the tag.
diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn
index 3c5f690..6918fae 100644
--- a/third_party/blink/public/mojom/BUILD.gn
+++ b/third_party/blink/public/mojom/BUILD.gn
@@ -581,6 +581,11 @@
         },
 
         {
+          mojom = "blink.mojom.ManifestLaunchHandler"
+          cpp = "::blink::Manifest::LaunchHandler"
+        },
+
+        {
           mojom = "blink.mojom.ManifestRelatedApplication"
           cpp = "::blink::Manifest::RelatedApplication"
         },
diff --git a/third_party/blink/public/mojom/manifest/manifest.mojom b/third_party/blink/public/mojom/manifest/manifest.mojom
index 7b74285..e8257ffc 100644
--- a/third_party/blink/public/mojom/manifest/manifest.mojom
+++ b/third_party/blink/public/mojom/manifest/manifest.mojom
@@ -98,6 +98,11 @@
   // experiment. See:
   // https://github.com/robbiemc/pwa-isolated-storage/blob/main/explainer.md
   bool isolated_storage;
+
+  // TODO(crbug.com/1231886): This field is non-standard and part of a Chrome
+  // experiment. See:
+  // https://github.com/WICG/sw-launch/blob/main/launch_handler.md
+  ManifestLaunchHandler? launch_handler;
 };
 
 // Structure representing a Shortcut Item per the Manifest specification, see:
@@ -243,6 +248,30 @@
   map<mojo_base.mojom.String16, array<mojo_base.mojom.String16>> accept;
 };
 
+// Represents how web app launches should be handled with regard to opening
+// windows or recycling existing ones.
+// Spec: https://github.com/WICG/sw-launch/blob/main/launch_handler.md
+struct ManifestLaunchHandler {
+  // The client to use for app launches.
+  enum RouteTo {
+    // Use whatever the platform would do by default.
+    kAuto,
+    // Create a new client for each app launch.
+    kNewClient,
+    // Use an existing client if available, otherwise create a new one to use.
+    kExistingClient,
+  };
+  RouteTo route_to;
+
+  // When routing to an existing client this specifies whether to navigate it to
+  // the launch URL or just pass the URL in the enqueued LaunchParams.
+  enum NavigateExistingClient {
+    kAlways,
+    kNever,
+  };
+  NavigateExistingClient navigate_existing_client;
+};
+
 // Debug information for a parsed manifest.
 struct ManifestDebugInfo {
   array<ManifestError> errors;
diff --git a/third_party/blink/public/public_features.gni b/third_party/blink/public/public_features.gni
index 94d2e5e..b5cc81d 100644
--- a/third_party/blink/public/public_features.gni
+++ b/third_party/blink/public/public_features.gni
@@ -12,7 +12,7 @@
   enable_blink_heap_young_generation = false
 
   # Enables Blink's heap to use V8's version of Oilpan.
-  enable_blink_heap_use_v8_oilpan = false
+  enable_blink_heap_use_v8_oilpan = true
 }
 
 declare_args() {
diff --git a/third_party/blink/renderer/bindings/core/v8/idl_types.h b/third_party/blink/renderer/bindings/core/v8/idl_types.h
index 66a0cbb..000a29f 100644
--- a/third_party/blink/renderer/bindings/core/v8/idl_types.h
+++ b/third_party/blink/renderer/bindings/core/v8/idl_types.h
@@ -227,27 +227,6 @@
       absl::optional<typename NativeValueTraits<T>::ImplType>>;
 };
 
-// Union types
-//
-// IDL union class FooOrBar implements either of IDL types (Foo or Bar),
-// (Foo? or Bar), and (Foo or Bar?), given that neither of Foo nor Bar is a
-// nullable type.
-// IDLUnionNotINT<FooOrBar> represents (Foo or Bar) and IDLUnionINT represents
-// either of (Foo? or Bar) or (Foo or Bar?) where INT stands for
-// "includes a nullable type".
-// https://heycam.github.io/webidl/#dfn-includes-a-nullable-type
-//
-// Note that a conversion from ES null to (Foo or Bar) throws a TypeError while
-// a conversion from ES null to (Foo? or Bar) results in IDL null.
-template <typename T>
-struct IDLUnionNotINT final : public IDLBase {
-  using ImplType = T;
-};
-template <typename T>
-struct IDLUnionINT final : public IDLBase {
-  using ImplType = T;
-};
-
 // Date
 struct IDLDate final : public IDLBaseHelper<base::Time> {};
 
diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
index 595847d..ac683933 100644
--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
@@ -1342,109 +1342,6 @@
   }
 };
 
-// Migration Adapters: union types generated by the old bindings generator.
-template <typename T>
-struct NativeValueTraits<IDLUnionNotINT<T>> : public NativeValueTraitsBase<T> {
-  static T NativeValue(v8::Isolate* isolate,
-                       v8::Local<v8::Value> value,
-                       ExceptionState& exception_state) {
-    T impl;
-    V8TypeOf<T>::Type::ToImpl(isolate, value, impl,
-                              UnionTypeConversionMode::kNotNullable,
-                              exception_state);
-    return impl;
-  }
-
-  static T ArgumentValue(v8::Isolate* isolate,
-                         int argument_index,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-    return NativeValue(isolate, value, exception_state);
-  }
-};
-
-template <typename T>
-struct NativeValueTraits<IDLUnionINT<T>> : public NativeValueTraitsBase<T> {
-  static T NativeValue(v8::Isolate* isolate,
-                       v8::Local<v8::Value> value,
-                       ExceptionState& exception_state) {
-    T impl;
-    V8TypeOf<T>::Type::ToImpl(isolate, value, impl,
-                              UnionTypeConversionMode::kNullable,
-                              exception_state);
-    return impl;
-  }
-
-  static T ArgumentValue(v8::Isolate* isolate,
-                         int argument_index,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-    return NativeValue(isolate, value, exception_state);
-  }
-};
-
-template <typename T>
-struct NativeValueTraits<IDLNullable<IDLUnionNotINT<T>>>
-    : public NativeValueTraitsBase<T> {
-  static T NativeValue(v8::Isolate* isolate,
-                       v8::Local<v8::Value> value,
-                       ExceptionState& exception_state) {
-    if (value->IsNullOrUndefined())
-      return T();
-    return NativeValueTraits<IDLUnionNotINT<T>>::NativeValue(isolate, value,
-                                                             exception_state);
-  }
-
-  static T ArgumentValue(v8::Isolate* isolate,
-                         int argument_index,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-    return NativeValue(isolate, value, exception_state);
-  }
-};
-
-// IDLNullable<IDLUnionINT<T>> must not be used.
-template <typename T>
-struct NativeValueTraits<IDLNullable<IDLUnionINT<T>>>;
-
-template <typename T>
-struct NativeValueTraits<IDLOptional<IDLUnionNotINT<T>>>
-    : public NativeValueTraitsBase<T> {
-  static T NativeValue(v8::Isolate* isolate,
-                       v8::Local<v8::Value> value,
-                       ExceptionState& exception_state) {
-    if (value->IsUndefined())
-      return T();
-    return NativeValueTraits<IDLUnionNotINT<T>>::NativeValue(isolate, value,
-                                                             exception_state);
-  }
-
-  static T ArgumentValue(v8::Isolate* isolate,
-                         int argument_index,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-    return NativeValue(isolate, value, exception_state);
-  }
-};
-
-template <typename T>
-struct NativeValueTraits<IDLOptional<IDLUnionINT<T>>>
-    : public NativeValueTraitsBase<T> {
-  static T NativeValue(v8::Isolate* isolate,
-                       v8::Local<v8::Value> value,
-                       ExceptionState& exception_state) {
-    return NativeValueTraits<IDLUnionINT<T>>::NativeValue(isolate, value,
-                                                          exception_state);
-  }
-
-  static T ArgumentValue(v8::Isolate* isolate,
-                         int argument_index,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-    return NativeValue(isolate, value, exception_state);
-  }
-};
-
 // Nullable types
 template <typename InnerType>
 struct NativeValueTraits<
diff --git a/third_party/blink/renderer/bindings/core/v8/to_v8_traits.h b/third_party/blink/renderer/bindings/core/v8/to_v8_traits.h
index a3c9ba66..4090c21 100644
--- a/third_party/blink/renderer/bindings/core/v8/to_v8_traits.h
+++ b/third_party/blink/renderer/bindings/core/v8/to_v8_traits.h
@@ -1019,39 +1019,6 @@
   }
 };
 
-// IDLUnionINT
-template <typename T>
-struct ToV8Traits<IDLUnionINT<T>> {
-  static v8::MaybeLocal<v8::Value> WARN_UNUSED_RESULT
-  ToV8(ScriptState* script_state, const T& value) {
-    return bindings::ToV8HelperUnion(script_state, value);
-  }
-};
-
-// IDLUnionNotINT
-template <typename T>
-struct ToV8Traits<IDLUnionNotINT<T>> {
-  static v8::MaybeLocal<v8::Value> WARN_UNUSED_RESULT
-  ToV8(ScriptState* script_state, const T& value) {
-    return bindings::ToV8HelperUnion(script_state, value);
-  }
-};
-
-// Nullable IDLUnionINT must not be used.
-template <typename T>
-struct ToV8Traits<IDLNullable<IDLUnionINT<T>>>;
-
-// Nullable IDLUnionNotINT
-template <typename T>
-struct ToV8Traits<IDLNullable<IDLUnionNotINT<T>>> {
-  static v8::MaybeLocal<v8::Value> WARN_UNUSED_RESULT
-  ToV8(ScriptState* script_state, const T& value) {
-    if (value.IsNull())
-      return v8::Null(script_state->GetIsolate());
-    return ToV8Traits<IDLUnionNotINT<T>>::ToV8(script_state, value);
-  }
-};
-
 // Optional
 template <typename T>
 struct ToV8Traits<IDLOptional<T>> {
diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc
index fcd7c3a22..a04f5aa 100644
--- a/third_party/blink/renderer/core/css/style_engine.cc
+++ b/third_party/blink/renderer/core/css/style_engine.cc
@@ -2051,6 +2051,11 @@
 
   NthIndexCache nth_index_cache(GetDocument());
   style_recalc_root_.Update(nullptr, &container);
+
+  // No need to initialize container for the StyleRecalcContext with
+  // FromAncestors because style will not be recalculated for "container, and
+  // Element::RecalcStyle for the "container" will initialize StyleRecalcContext
+  // with itself for its children.
   RecalcStyle(change, StyleRecalcContext());
 
   // Nodes are marked for whitespace reattachment for DOM removal only. This set
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 1850d0e..d94d6412 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
@@ -170,14 +170,8 @@
 void DisplayLockContext::AdjustElementStyle(ComputedStyle* style) const {
   if (state_ == EContentVisibility::kVisible)
     return;
-  // If not visible, element gains style, layout, and paint containment. If
-  // skipped, it also gains size containment.
-  // https://wicg.github.io/display-locking/#content-visibility
-  auto contain =
-      style->Contain() | kContainsStyle | kContainsLayout | kContainsPaint;
   if (IsLocked())
-    contain |= kContainsSize;
-  style->SetContain(contain);
+    style->SetSkipsContents();
 }
 
 void DisplayLockContext::RequestLock(uint16_t activation_mask) {
diff --git a/third_party/blink/renderer/core/frame/frame_overlay_test.cc b/third_party/blink/renderer/core/frame/frame_overlay_test.cc
index f32836f..e8c4618 100644
--- a/third_party/blink/renderer/core/frame/frame_overlay_test.cc
+++ b/third_party/blink/renderer/core/frame/frame_overlay_test.cc
@@ -115,10 +115,9 @@
     EXPECT_EQ(PropertyTreeState::Root(),
               graphics_layer->GetPropertyTreeState());
     Vector<PreCompositedLayerInfo> pre_composited_layers;
-    PaintController::CycleScope cycle_scope;
-    graphics_layer->PaintRecursively(builder.Context(), pre_composited_layers,
-                                     cycle_scope);
+    graphics_layer->PaintRecursively(builder.Context(), pre_composited_layers);
     ASSERT_EQ(1u, pre_composited_layers.size());
+    graphics_layer->GetPaintController().FinishCycle();
     SkiaPaintCanvas(&canvas).drawPicture(
         graphics_layer->GetPaintController().GetPaintArtifact().GetPaintRecord(
             PropertyTreeState::Root()));
@@ -172,10 +171,9 @@
     EXPECT_FALSE(graphics_layer->IsHitTestable());
     EXPECT_EQ(state, graphics_layer->GetPropertyTreeState());
     Vector<PreCompositedLayerInfo> pre_composited_layers;
-    PaintController::CycleScope cycle_scope;
-    graphics_layer->PaintRecursively(context, pre_composited_layers,
-                                     cycle_scope);
+    graphics_layer->PaintRecursively(context, pre_composited_layers);
     check_paint_results(graphics_layer->GetPaintController());
+    graphics_layer->GetPaintController().FinishCycle();
   }
 }
 
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc
index f307f8dc..2d234ab 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -2739,22 +2739,17 @@
   if (AnyFrameIsPrintingOrPaintingPreview())
     return;
 
-  bool needed_update;
-  {
-    PaintController::CycleScope cycle_scope;
-    bool repainted = PaintTree(benchmark_mode, cycle_scope);
+  bool repainted = PaintTree(benchmark_mode);
 
-    if (paint_artifact_compositor_ &&
-        benchmark_mode ==
-            PaintBenchmarkMode::kForcePaintArtifactCompositorUpdate) {
-      paint_artifact_compositor_->SetNeedsUpdate();
-    }
-
-    needed_update = !paint_artifact_compositor_ ||
-                    paint_artifact_compositor_->NeedsUpdate();
-    PushPaintArtifactToCompositor(repainted);
+  if (paint_artifact_compositor_ &&
+      benchmark_mode ==
+          PaintBenchmarkMode::kForcePaintArtifactCompositorUpdate) {
+    paint_artifact_compositor_->SetNeedsUpdate();
   }
 
+  bool needed_update =
+      !paint_artifact_compositor_ || paint_artifact_compositor_->NeedsUpdate();
+  PushPaintArtifactToCompositor(repainted);
   size_t total_animations_count = 0;
   ForAllNonThrottledLocalFrameViews(
       [this, &needed_update,
@@ -2797,6 +2792,22 @@
     }
   }
 
+  // Notify the controller that the artifact has been pushed and some
+  // lifecycle state can be freed (such as raster invalidations).
+  if (paint_controller_)
+    paint_controller_->FinishCycle();
+
+  if (!RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) {
+    auto* root = GetLayoutView()->Compositor()->PaintRootGraphicsLayer();
+    if (root) {
+      ForAllPaintingGraphicsLayers(*root, [](GraphicsLayer& layer) {
+        // Notify the paint controller that the artifact has been pushed and
+        // some lifecycle state can be freed (such as raster invalidations).
+        layer.GetPaintController().FinishCycle();
+      });
+    }
+  }
+
   if (paint_artifact_compositor_)
     paint_artifact_compositor_->ClearPropertyTreeChangedState();
 
@@ -2862,8 +2873,7 @@
   });
 }
 
-bool LocalFrameView::PaintTree(PaintBenchmarkMode benchmark_mode,
-                               PaintController::CycleScope& cycle_scope) {
+bool LocalFrameView::PaintTree(PaintBenchmarkMode benchmark_mode) {
   SCOPED_UMA_AND_UKM_TIMER(EnsureUkmAggregator(),
                            LocalFrameUkmAggregator::kPaint);
 
@@ -2911,11 +2921,7 @@
   bool needs_clear_repaint_flags = false;
 
   if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) {
-    // TODO(paint-dev): We should be able to get rid of AddController entirely
-    // after non-CAP code is removed. The call to EnsurePaintController() will
-    // need to be moved up the call stack.
     EnsurePaintController();
-    cycle_scope.AddController(*paint_controller_);
 
     PaintChunkSubset previous_chunks(
         paint_controller_->GetPaintArtifactShared());
@@ -2926,6 +2932,7 @@
     if (paint_controller_->ShouldForcePaintForBenchmark() ||
         GetLayoutView()->Layer()->SelfOrDescendantNeedsRepaint() ||
         visual_viewport_or_overlay_needs_repaint_) {
+      paint_controller_->ReserveCapacity();
       GraphicsContext graphics_context(*paint_controller_);
 
       if (Settings* settings = frame_->GetSettings()) {
@@ -2986,8 +2993,6 @@
     // parented into the main frame tree, or when the LocalFrameView is the main
     // frame view of a page overlay. The page overlay is in the layer tree of
     // the host page and will be painted during painting of the host page.
-    // Note that paint_controller_ is not added to cycle_scope, because it is
-    // transient and may be deleted before cycle_scope.
     paint_controller_ =
         std::make_unique<PaintController>(PaintController::kTransient);
     pre_composited_layers_.clear();
@@ -2995,9 +3000,8 @@
 
     if (GraphicsLayer* root =
             layout_view->Compositor()->PaintRootGraphicsLayer()) {
-      repainted =
-          root->PaintRecursively(graphics_context, pre_composited_layers_,
-                                 cycle_scope, benchmark_mode);
+      repainted = root->PaintRecursively(
+          graphics_context, pre_composited_layers_, benchmark_mode);
       if (visual_viewport_or_overlay_needs_repaint_ &&
           paint_artifact_compositor_)
         paint_artifact_compositor_->SetNeedsUpdate();
@@ -4122,15 +4126,16 @@
   if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) {
     PaintController& paint_controller = EnsurePaintController();
     if (GetLayoutView()->Layer()->SelfOrDescendantNeedsRepaint()) {
-      PaintController::CycleScope cycle_scope(paint_controller);
       GraphicsContext graphics_context(paint_controller);
       Paint(graphics_context, kGlobalPaintNormalPhase, cull_rect);
       paint_controller.CommitNewDisplayItems();
     }
+    paint_controller.FinishCycle();
   } else {
     GraphicsLayer* graphics_layer =
         GetLayoutView()->Layer()->GraphicsLayerBacking();
     graphics_layer->PaintForTesting(cull_rect.Rect());
+    graphics_layer->GetPaintController().FinishCycle();
   }
   Lifecycle().AdvanceTo(DocumentLifecycle::kPaintClean);
 }
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.h b/third_party/blink/renderer/core/frame/local_frame_view.h
index 92b108c6..cdba46e 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.h
+++ b/third_party/blink/renderer/core/frame/local_frame_view.h
@@ -50,7 +50,6 @@
 #include "third_party/blink/renderer/platform/graphics/color.h"
 #include "third_party/blink/renderer/platform/graphics/compositor_element_id.h"
 #include "third_party/blink/renderer/platform/graphics/paint/cull_rect.h"
-#include "third_party/blink/renderer/platform/graphics/paint/paint_controller.h"
 #include "third_party/blink/renderer/platform/graphics/paint_invalidation_reason.h"
 #include "third_party/blink/renderer/platform/graphics/subtree_paint_property_update_reason.h"
 #include "third_party/blink/renderer/platform/timer.h"
@@ -863,7 +862,7 @@
   void PerformLayout();
   void PerformPostLayoutTasks(bool view_size_changed);
 
-  bool PaintTree(PaintBenchmarkMode, PaintController::CycleScope&);
+  bool PaintTree(PaintBenchmarkMode);
   void PushPaintArtifactToCompositor(bool repainted);
 
   void ClearLayoutSubtreeRootsAndMarkContainingBlocks();
diff --git a/third_party/blink/renderer/core/html/forms/html_form_element.cc b/third_party/blink/renderer/core/html/forms/html_form_element.cc
index 8641bd0..098da2b 100644
--- a/third_party/blink/renderer/core/html/forms/html_form_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_form_element.cc
@@ -869,7 +869,7 @@
     const AtomicString& past_name) {
   if (past_name.IsEmpty() || !past_names_map_)
     return nullptr;
-  Element* element = past_names_map_->at(past_name);
+  Element* element = past_names_map_->DeprecatedAtOrEmptyValue(past_name);
 #if DCHECK_IS_ON()
   if (!element)
     return nullptr;
diff --git a/third_party/blink/renderer/core/html/forms/radio_button_group_scope.cc b/third_party/blink/renderer/core/html/forms/radio_button_group_scope.cc
index 2a4bbe5..e1d0d6b 100644
--- a/third_party/blink/renderer/core/html/forms/radio_button_group_scope.cc
+++ b/third_party/blink/renderer/core/html/forms/radio_button_group_scope.cc
@@ -215,7 +215,8 @@
   DCHECK(name_to_group_map_);
   if (!name_to_group_map_)
     return;
-  RadioButtonGroup* group = name_to_group_map_->at(element->GetName());
+  RadioButtonGroup* group =
+      name_to_group_map_->DeprecatedAtOrEmptyValue(element->GetName());
   DCHECK(group);
   group->UpdateCheckedState(element);
 }
@@ -228,7 +229,8 @@
   DCHECK(name_to_group_map_);
   if (!name_to_group_map_)
     return;
-  RadioButtonGroup* group = name_to_group_map_->at(element->GetName());
+  RadioButtonGroup* group =
+      name_to_group_map_->DeprecatedAtOrEmptyValue(element->GetName());
   DCHECK(group);
   group->RequiredAttributeChanged(element);
 }
@@ -237,7 +239,7 @@
     const AtomicString& name) const {
   if (!name_to_group_map_)
     return nullptr;
-  RadioButtonGroup* group = name_to_group_map_->at(name);
+  RadioButtonGroup* group = name_to_group_map_->DeprecatedAtOrEmptyValue(name);
   return group ? group->CheckedButton() : nullptr;
 }
 
@@ -247,7 +249,8 @@
     return false;
   if (!name_to_group_map_)
     return false;
-  RadioButtonGroup* group = name_to_group_map_->at(element->GetName());
+  RadioButtonGroup* group =
+      name_to_group_map_->DeprecatedAtOrEmptyValue(element->GetName());
   return group && group->IsRequired() && group->Contains(element);
 }
 
@@ -256,7 +259,8 @@
   if (!name_to_group_map_)
     return 0;
 
-  RadioButtonGroup* group = name_to_group_map_->at(element->GetName());
+  RadioButtonGroup* group =
+      name_to_group_map_->DeprecatedAtOrEmptyValue(element->GetName());
   if (!group)
     return 0;
   return group->size();
@@ -269,7 +273,8 @@
   if (!name_to_group_map_)
     return;
 
-  RadioButtonGroup* group = name_to_group_map_->at(element->GetName());
+  RadioButtonGroup* group =
+      name_to_group_map_->DeprecatedAtOrEmptyValue(element->GetName());
   if (!group)
     return;
   group->Remove(element);
diff --git a/third_party/blink/renderer/core/loader/interactive_detector.cc b/third_party/blink/renderer/core/loader/interactive_detector.cc
index c065c4f..b56f6f5 100644
--- a/third_party/blink/renderer/core/loader/interactive_detector.cc
+++ b/third_party/blink/renderer/core/loader/interactive_detector.cc
@@ -681,7 +681,8 @@
                             {"keydown", blink::InputEventType::kKeydown},
                             {"pointerup", blink::InputEventType::kPointerup}};
   ukm::builders::InputEvent(source_id)
-      .SetEventType(static_cast<int>(event_type_to_enum.at(event_type)))
+      .SetEventType(static_cast<int>(
+          event_type_to_enum.DeprecatedAtOrEmptyValue(event_type)))
       .SetInteractiveTiming_InputDelay(input_delay.InMilliseconds())
       .SetInteractiveTiming_ProcessingTime(processing_time.InMilliseconds())
       .SetInteractiveTiming_ProcessingFinishedToNextPaint(
diff --git a/third_party/blink/renderer/core/mathml/mathml_operator_element.cc b/third_party/blink/renderer/core/mathml/mathml_operator_element.cc
index 6fa1c7f9..bc3d8c8 100644
--- a/third_party/blink/renderer/core/mathml/mathml_operator_element.cc
+++ b/third_party/blink/renderer/core/mathml/mathml_operator_element.cc
@@ -6,6 +6,7 @@
 
 #include "third_party/blink/renderer/core/css/style_change_reason.h"
 #include "third_party/blink/renderer/core/dom/character_data.h"
+#include "third_party/blink/renderer/core/dom/element_traversal.h"
 #include "third_party/blink/renderer/core/layout/layout_object.h"
 #include "third_party/blink/renderer/core/style/computed_style.h"
 #include "third_party/blink/renderer/platform/text/mathml_operator_dictionary.h"
@@ -204,9 +205,11 @@
     // form.
     // https://w3c.github.io/mathml-core/#dfn-algorithm-for-determining-the-form-of-an-embellished-operator
     explicit_form = false;
-    if (!previousSibling() && nextSibling())
+    bool nextSibling = ElementTraversal::NextSibling(*this);
+    bool prevSibling = ElementTraversal::PreviousSibling(*this);
+    if (!prevSibling && nextSibling)
       form = MathMLOperatorDictionaryForm::kPrefix;
-    else if (previousSibling() && !nextSibling())
+    else if (prevSibling && !nextSibling)
       form = MathMLOperatorDictionaryForm::kPostfix;
     else
       form = MathMLOperatorDictionaryForm::kInfix;
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
index d21666d..b17d4d3 100644
--- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
+++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
@@ -20,6 +20,7 @@
 #include "third_party/blink/renderer/core/layout/layout_shift_tracker.h"
 #include "third_party/blink/renderer/core/layout/layout_view.h"
 #include "third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h"
+#include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_block_break_token.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h"
@@ -889,8 +890,10 @@
     const LayoutObject& parent_object,
     const NGPhysicalBoxFragment* parent_fragment,
     PrePaintTreeWalkContext& context) {
+  absl::optional<NGInlineCursor> inline_cursor;
   for (const LayoutObject* child = parent_object.SlowFirstChild(); child;
-       child = child->NextSibling()) {
+       // Stay on the |child| while iterating fragments of |child|.
+       child = inline_cursor ? child : child->NextSibling()) {
     if (!parent_fragment) {
       // If we haven't found a fragment tree to accompany us in our walk,
       // perform a pure LayoutObject tree walk. This is needed for legacy block
@@ -940,10 +943,22 @@
     bool is_first_for_node = true;
     bool is_last_for_node = true;
     bool is_inside_fragment_child = false;
-    if (parent_fragment->Items() && child->FirstInlineFragmentItemIndex()) {
-      for (const NGFragmentItem& item : parent_fragment->Items()->Items()) {
-        if (item.GetLayoutObject() != child)
-          continue;
+
+    if (!inline_cursor && parent_fragment->HasItems() &&
+        child->HasInlineFragments()) {
+      // Limit the search to descendants of |parent_fragment|.
+      inline_cursor.emplace(*parent_fragment);
+      inline_cursor->MoveTo(*child);
+      // Searching fragments of |child| may not find any because they may be in
+      // other fragmentainers than |parent_fragment|.
+    }
+    if (inline_cursor) {
+      for (; inline_cursor->Current();
+           inline_cursor->MoveToNextForSameLayoutObject()) {
+        // Check if the search is limited to descendants of |parent_fragment|.
+        DCHECK_EQ(&inline_cursor->ContainerFragment(), parent_fragment);
+        const NGFragmentItem& item = *inline_cursor->Current().Item();
+        DCHECK_EQ(item.GetLayoutObject(), child);
 
         is_last_for_node = item.IsLastForNode();
         if (box_fragment) {
@@ -972,6 +987,12 @@
         // Keep looking for the end. We need to know whether this is the last
         // time we're going to visit this object.
       }
+      if (is_last_for_node || !inline_cursor->Current()) {
+        // If all fragments are done, move to the next sibling of |child|.
+        inline_cursor.reset();
+      } else {
+        inline_cursor->MoveToNextForSameLayoutObject();
+      }
       if (!box_fragment)
         continue;
     } else if (child->IsInline() && !child_box) {
diff --git a/third_party/blink/renderer/core/style/DEPS b/third_party/blink/renderer/core/style/DEPS
deleted file mode 100644
index 4a181b6..0000000
--- a/third_party/blink/renderer/core/style/DEPS
+++ /dev/null
@@ -1,5 +0,0 @@
-specific_include_rules = {
-  "computed_style\.cc": [
-    "+ui/native_theme/native_theme.h",
-  ],
-}
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc
index 5ed0f86..29ca0c6 100644
--- a/third_party/blink/renderer/core/style/computed_style.cc
+++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -82,7 +82,6 @@
 #include "third_party/blink/renderer/platform/wtf/text/case_map.h"
 #include "third_party/blink/renderer/platform/wtf/text/math_transform.h"
 #include "ui/base/ui_base_features.h"
-#include "ui/native_theme/native_theme.h"
 
 namespace blink {
 
@@ -2367,12 +2366,7 @@
   DCHECK(OutlineStyleIsAuto());
   // Draw focus ring with thickness in proportion to the zoom level, but never
   // so narrow that it becomes invisible.
-  float width = 3.f;
-  if (EffectiveZoom() >= 1.0f) {
-    width = ui::NativeTheme::GetInstanceForWeb()->AdjustBorderWidthByZoom(
-        width, EffectiveZoom());
-  }
-  return std::max(EffectiveZoom(), width);
+  return std::max(EffectiveZoom(), 3.f);
 }
 
 int ComputedStyle::FocusRingOffset() const {
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h
index 04a01d2..9dc5a3a 100644
--- a/third_party/blink/renderer/core/style/computed_style.h
+++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -2070,22 +2070,28 @@
   // type. See |LayoutObject::IsEligibleForSizeContainment| and similar
   // functions.
 
-  bool ContainsPaint() const { return Contain() & kContainsPaint; }
+  bool ContainsPaint() const {
+    return (Contain() & kContainsPaint) || !IsContentVisibilityVisible();
+  }
   bool ContainsStyle() const {
-    return (Contain() & kContainsStyle) || IsInlineOrBlockSizeContainer();
+    return (Contain() & kContainsStyle) || IsInlineOrBlockSizeContainer() ||
+           !IsContentVisibilityVisible();
   }
   bool ContainsLayout() const {
-    return (Contain() & kContainsLayout) || IsInlineOrBlockSizeContainer();
+    return (Contain() & kContainsLayout) || IsInlineOrBlockSizeContainer() ||
+           !IsContentVisibilityVisible();
   }
   bool ContainsSize() const {
     return ((Contain() & kContainsSize) == kContainsSize) ||
-           IsInlineAndBlockSizeContainer();
+           IsInlineAndBlockSizeContainer() || SkipsContents();
   }
   bool ContainsInlineSize() const {
-    return (Contain() & kContainsInlineSize) || IsInlineSizeContainer();
+    return (Contain() & kContainsInlineSize) || IsInlineSizeContainer() ||
+           SkipsContents();
   }
   bool ContainsBlockSize() const {
-    return (Contain() & kContainsBlockSize) || IsBlockSizeContainer();
+    return (Contain() & kContainsBlockSize) || IsBlockSizeContainer() ||
+           SkipsContents();
   }
   CORE_EXPORT bool ShouldApplyAnyContainment(const Element& element) const;
 
@@ -2711,6 +2717,9 @@
     const unsigned both = (kContainerTypeInlineSize | kContainerTypeBlockSize);
     return (ContainerType() & both) == both;
   }
+  bool IsContentVisibilityVisible() const {
+    return ContentVisibility() == EContentVisibility::kVisible;
+  }
 
   void SetInternalVisitedColor(const StyleColor& v) {
     SetInternalVisitedColorInternal(v);
diff --git a/third_party/blink/renderer/core/style/computed_style_diff_functions.json5 b/third_party/blink/renderer/core/style/computed_style_diff_functions.json5
index 76cfe67..04526c1 100644
--- a/third_party/blink/renderer/core/style/computed_style_diff_functions.json5
+++ b/third_party/blink/renderer/core/style/computed_style_diff_functions.json5
@@ -232,8 +232,8 @@
                 "max-height", "VerticalAlignLength", "box-sizing", "align-content",
                 "align-items", "align-self", "justify-content", "justify-items",
                 "justify-self", "contain", "contain-intrinsic-size", "container-type",
-                "aspect-ratio", "overflow-clip-margin", "-internal-align-self-block",
-                "orphans", "widows"],
+                "content-visibility", "aspect-ratio", "overflow-clip-margin",
+                "-internal-align-self-block", "orphans", "widows"],
         methods_to_diff: [
           {
             method: "VerticalAlign()",
@@ -243,6 +243,10 @@
             method: "GetPosition()",
             field_dependencies: ["position"]
           },
+          {
+            method: "SkipsContents()",
+            field_dependencies: ["content-visibility"]
+          },
         ]
     },
     {
diff --git a/third_party/blink/renderer/core/style/computed_style_extra_fields.json5 b/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
index 46d42dd..7cb6d89 100644
--- a/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
+++ b/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
@@ -1136,5 +1136,11 @@
       custom_compare: true,
       custom_copy: true,
     },
+    {
+      // https://drafts.csswg.org/css-contain-2/#skips-its-contents
+      name: "SkipsContents",
+      field_template: "monotonic_flag",
+      default_value: "false",
+    },
   ],
 }
diff --git a/third_party/blink/renderer/core/style/computed_style_test.cc b/third_party/blink/renderer/core/style/computed_style_test.cc
index 5e74f97..03ebee2c 100644
--- a/third_party/blink/renderer/core/style/computed_style_test.cc
+++ b/third_party/blink/renderer/core/style/computed_style_test.cc
@@ -100,13 +100,7 @@
   EXPECT_EQ(1, style->FocusRingInnerStrokeWidth());
   style->SetEffectiveZoom(3.5);
   style->SetOutlineWidth(4);
-#if defined(OS_MAC)
-  EXPECT_EQ(10, style->FocusRingStrokeWidth());
-#elif defined(OS_ANDROID)
-  EXPECT_EQ(10.5, style->FocusRingStrokeWidth());
-#else
   EXPECT_EQ(3.5, style->FocusRingStrokeWidth());
-#endif
 }
 
 TEST_F(ComputedStyleTest, FocusRingOutset) {
@@ -114,11 +108,7 @@
   style->SetOutlineStyle(EBorderStyle::kSolid);
   style->SetOutlineStyleIsAuto(static_cast<bool>(OutlineIsAuto::kOn));
   style->SetEffectiveZoom(4.75);
-#if defined(OS_MAC) || defined(OS_ANDROID)
-  EXPECT_EQ(10, style->OutlineOutsetExtent());
-#else
   EXPECT_EQ(4, style->OutlineOutsetExtent());
-#endif
 }
 
 TEST_F(ComputedStyleTest, SVGStackingContext) {
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image.cc b/third_party/blink/renderer/core/svg/graphics/svg_image.cc
index 93d12ad8..5f3f9f31 100644
--- a/third_party/blink/renderer/core/svg/graphics/svg_image.cc
+++ b/third_party/blink/renderer/core/svg/graphics/svg_image.cc
@@ -557,7 +557,6 @@
     return nullptr;
 
   view->UpdateAllLifecyclePhasesExceptPaint(DocumentUpdateReason::kSVGImage);
-  PaintController::CycleScope cycle_scope(*paint_controller_);
   PaintRecordBuilder builder(*paint_controller_);
   builder.Context().SetDarkModeEnabled(draw_info.IsDarkModeEnabled());
   view->PaintOutsideOfLifecycle(builder.Context(), kGlobalPaintNormalPhase);
diff --git a/third_party/blink/renderer/modules/manifest/manifest_parser.cc b/third_party/blink/renderer/modules/manifest/manifest_parser.cc
index 0885423c..f798e9a 100644
--- a/third_party/blink/renderer/modules/manifest/manifest_parser.cc
+++ b/third_party/blink/renderer/modules/manifest/manifest_parser.cc
@@ -164,6 +164,8 @@
     manifest_->isolated_storage = ParseIsolatedStorage(root_object.get());
   }
 
+  manifest_->launch_handler = ParseLaunchHandler(root_object.get());
+
   ManifestUmaUtil::ParseSucceeded(manifest_);
 }
 
@@ -1427,6 +1429,22 @@
   return is_storage_isolated;
 }
 
+mojom::blink::ManifestLaunchHandlerPtr ManifestParser::ParseLaunchHandler(
+    const JSONObject* object) {
+  using RouteTo = mojom::blink::ManifestLaunchHandler::RouteTo;
+  using NavigateExistingClient =
+      mojom::blink::ManifestLaunchHandler::NavigateExistingClient;
+  auto launch_handler = mojom::blink::ManifestLaunchHandler::New(
+      RouteTo::kAuto, NavigateExistingClient::kAlways);
+
+  if (!RuntimeEnabledFeatures::WebAppLaunchHandlerEnabled(feature_context_))
+    return launch_handler;
+
+  // TODO(crbug.com/1231886): Implement launch_handler parsing.
+
+  return launch_handler;
+}
+
 void ManifestParser::AddErrorInfo(const String& error_msg,
                                   bool critical,
                                   int error_line,
diff --git a/third_party/blink/renderer/modules/manifest/manifest_parser.h b/third_party/blink/renderer/modules/manifest/manifest_parser.h
index 2d28fcd..67bd6ca 100644
--- a/third_party/blink/renderer/modules/manifest/manifest_parser.h
+++ b/third_party/blink/renderer/modules/manifest/manifest_parser.h
@@ -408,6 +408,12 @@
   // Returns true iff the field could be parsed as the boolean true.
   bool ParseIsolatedStorage(const JSONObject* object);
 
+  // Parses the 'launch_handler' field of the manifest as defined in:
+  // https://github.com/WICG/sw-launch/blob/main/launch_handler.md
+  // Returns default values if parsing fails.
+  mojom::blink::ManifestLaunchHandlerPtr ParseLaunchHandler(
+      const JSONObject* object);
+
   void AddErrorInfo(const String& error_msg,
                     bool critical = false,
                     int error_line = 0,
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
index 9773ee6a..f99d8e72 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
@@ -1632,7 +1632,8 @@
        handler_weak_ptr = weak_factory_.GetWeakPtr(),
        tracker_weak_ptr =
            WrapCrossThreadWeakPersistent(peer_connection_tracker_.Get()),
-       candidate, persistent_request = WrapCrossThreadPersistent(request),
+       persistent_candidate = WrapCrossThreadPersistent(candidate),
+       persistent_request = WrapCrossThreadPersistent(request),
        callback_on_task_runner =
            std::move(callback_on_task_runner)](webrtc::RTCError result) {
         // Grab a snapshot of all the session descriptions. AddIceCandidate may
@@ -1660,7 +1661,7 @@
                 std::move(current_local_description),
                 std::move(pending_remote_description),
                 std::move(current_remote_description),
-                WrapCrossThreadPersistent(candidate), std::move(result),
+                std::move(persistent_candidate), std::move(result),
                 std::move(persistent_request)));
       });
 }
diff --git a/third_party/blink/renderer/modules/webdatabase/database.cc b/third_party/blink/renderer/modules/webdatabase/database.cc
index 30b4a903..d3ba037 100644
--- a/third_party/blink/renderer/modules/webdatabase/database.cc
+++ b/third_party/blink/renderer/modules/webdatabase/database.cc
@@ -108,7 +108,8 @@
     mutex_.AssertAcquired();
     String string_id = origin + "/" + name;
     DCHECK(string_id.IsSafeToSendToAnotherThread());
-    DatabaseGuid guid = origin_name_to_guid_.at(string_id);
+    DatabaseGuid guid =
+        origin_name_to_guid_.DeprecatedAtOrEmptyValue(string_id);
     if (!guid) {
       guid = next_guid_++;
       origin_name_to_guid_.Set(string_id, guid);
@@ -130,7 +131,7 @@
   // The null string is returned only if the cached version has not been set.
   String GetVersion(DatabaseGuid guid) const EXCLUSIVE_LOCKS_REQUIRED(mutex_) {
     mutex_.AssertAcquired();
-    return guid_to_version_.at(guid).IsolatedCopy();
+    return guid_to_version_.DeprecatedAtOrEmptyValue(guid).IsolatedCopy();
   }
 
   // Updates the cached version of a database.
diff --git a/third_party/blink/renderer/modules/webdatabase/database_manager.cc b/third_party/blink/renderer/modules/webdatabase/database_manager.cc
index 9193c0e..2a44868e 100644
--- a/third_party/blink/renderer/modules/webdatabase/database_manager.cc
+++ b/third_party/blink/renderer/modules/webdatabase/database_manager.cc
@@ -63,7 +63,7 @@
   DCHECK_LE(database_context_registered_count_,
             database_context_instance_count_);
 #endif
-  return context_map_->at(context);
+  return context_map_->DeprecatedAtOrEmptyValue(context);
 }
 
 DatabaseContext* DatabaseManager::DatabaseContextFor(
@@ -85,7 +85,7 @@
 void DatabaseManager::UnregisterDatabaseContext(
     DatabaseContext* database_context) {
   ExecutionContext* context = database_context->GetExecutionContext();
-  DCHECK(context_map_->at(context));
+  DCHECK(context_map_->Contains(context));
 #if DCHECK_IS_ON()
   database_context_registered_count_--;
 #endif
diff --git a/third_party/blink/renderer/modules/webdatabase/database_tracker.cc b/third_party/blink/renderer/modules/webdatabase/database_tracker.cc
index 357c3dda..5c5c49d 100644
--- a/third_party/blink/renderer/modules/webdatabase/database_tracker.cc
+++ b/third_party/blink/renderer/modules/webdatabase/database_tracker.cc
@@ -89,14 +89,15 @@
     open_database_map_ = std::make_unique<DatabaseOriginMap>();
 
   String origin_string = database->GetSecurityOrigin()->ToRawString();
-  DatabaseNameMap* name_map = open_database_map_->at(origin_string);
+  DatabaseNameMap* name_map =
+      open_database_map_->DeprecatedAtOrEmptyValue(origin_string);
   if (!name_map) {
     name_map = new DatabaseNameMap();
     open_database_map_->Set(origin_string, name_map);
   }
 
   String name(database->StringIdentifier());
-  DatabaseSet* database_set = name_map->at(name);
+  DatabaseSet* database_set = name_map->DeprecatedAtOrEmptyValue(name);
   if (!database_set) {
     database_set = new DatabaseSet();
     name_map->Set(name, database_set);
@@ -110,12 +111,13 @@
     MutexLocker open_database_map_lock(open_database_map_guard_);
     String origin_string = database->GetSecurityOrigin()->ToRawString();
     DCHECK(open_database_map_);
-    DatabaseNameMap* name_map = open_database_map_->at(origin_string);
+    DatabaseNameMap* name_map =
+        open_database_map_->DeprecatedAtOrEmptyValue(origin_string);
     if (!name_map)
       return;
 
     String name(database->StringIdentifier());
-    DatabaseSet* database_set = name_map->at(name);
+    DatabaseSet* database_set = name_map->DeprecatedAtOrEmptyValue(name);
     if (!database_set)
       return;
 
@@ -175,11 +177,12 @@
   if (!open_database_map_)
     return;
 
-  DatabaseNameMap* name_map = open_database_map_->at(origin_string);
+  DatabaseNameMap* name_map =
+      open_database_map_->DeprecatedAtOrEmptyValue(origin_string);
   if (!name_map)
     return;
 
-  DatabaseSet* database_set = name_map->at(name);
+  DatabaseSet* database_set = name_map->DeprecatedAtOrEmptyValue(name);
   if (!database_set)
     return;
 
@@ -219,11 +222,12 @@
     if (!open_database_map_)
       return;
 
-    DatabaseNameMap* name_map = open_database_map_->at(origin_string);
+    DatabaseNameMap* name_map =
+        open_database_map_->DeprecatedAtOrEmptyValue(origin_string);
     if (!name_map)
       return;
 
-    DatabaseSet* database_set = name_map->at(name);
+    DatabaseSet* database_set = name_map->DeprecatedAtOrEmptyValue(name);
     if (!database_set)
       return;
 
diff --git a/third_party/blink/renderer/platform/fonts/script_run_iterator_test.cc b/third_party/blink/renderer/platform/fonts/script_run_iterator_test.cc
index 946a89e..5fd2bb6 100644
--- a/third_party/blink/renderer/platform/fonts/script_run_iterator_test.cc
+++ b/third_party/blink/renderer/platform/fonts/script_run_iterator_test.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/platform/fonts/script_run_iterator.h"
 
 #include "base/logging.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
@@ -23,8 +24,17 @@
 
   ScriptExpectedRun(unsigned the_limit, UScriptCode the_code)
       : limit(the_limit), code(the_code) {}
+
+  bool operator==(const ScriptExpectedRun& other) const {
+    return limit == other.limit && code == other.code;
+  }
 };
 
+std::ostream& operator<<(std::ostream& output, const ScriptExpectedRun& run) {
+  return output << String::Format("%d:%d (%s)", run.limit, run.code,
+                                  uscript_getName(run.code));
+}
+
 class MockScriptData : public ScriptData {
  public:
   ~MockScriptData() override = default;
@@ -317,16 +327,12 @@
 
   void VerifyRuns(ScriptRunIterator* script_run_iterator,
                   const Vector<ScriptExpectedRun>& expect) {
+    Vector<ScriptExpectedRun> actual;
     unsigned limit;
     UScriptCode code;
-    size_t run_count = 0;
-    while (script_run_iterator->Consume(&limit, &code)) {
-      ASSERT_LT(run_count, expect.size());
-      ASSERT_EQ(expect[run_count].limit, limit);
-      ASSERT_EQ(expect[run_count].code, code);
-      ++run_count;
-    }
-    ASSERT_EQ(expect.size(), run_count);
+    while (script_run_iterator->Consume(&limit, &code))
+      actual.emplace_back(limit, code);
+    EXPECT_THAT(actual, testing::ContainerEq(expect));
   }
 };
 
diff --git a/third_party/blink/renderer/platform/graphics/graphics_layer.cc b/third_party/blink/renderer/platform/graphics/graphics_layer.cc
index 7091f84..5314fc6 100644
--- a/third_party/blink/renderer/platform/graphics/graphics_layer.cc
+++ b/third_party/blink/renderer/platform/graphics/graphics_layer.cc
@@ -277,7 +277,6 @@
 bool GraphicsLayer::PaintRecursively(
     GraphicsContext& context,
     Vector<PreCompositedLayerInfo>& pre_composited_layers,
-    PaintController::CycleScope& cycle_scope,
     PaintBenchmarkMode benchmark_mode) {
   bool repainted = false;
   ForAllGraphicsLayers(
@@ -287,7 +286,7 @@
           layer.ClearPaintStateRecursively();
           return false;
         }
-        layer.Paint(pre_composited_layers, benchmark_mode, &cycle_scope);
+        layer.Paint(pre_composited_layers, benchmark_mode);
         repainted |= layer.repainted_;
         return true;
       },
@@ -314,14 +313,11 @@
 
 void GraphicsLayer::PaintForTesting(const IntRect& interest_rect) {
   Vector<PreCompositedLayerInfo> pre_composited_layers;
-  PaintController::CycleScope cycle_scope;
-  Paint(pre_composited_layers, PaintBenchmarkMode::kNormal, &cycle_scope,
-        &interest_rect);
+  Paint(pre_composited_layers, PaintBenchmarkMode::kNormal, &interest_rect);
 }
 
 void GraphicsLayer::Paint(Vector<PreCompositedLayerInfo>& pre_composited_layers,
                           PaintBenchmarkMode benchmark_mode,
-                          PaintController::CycleScope* cycle_scope,
                           const IntRect* interest_rect) {
   repainted_ = false;
 
@@ -355,8 +351,6 @@
   }
 
   auto& paint_controller = GetPaintController();
-  if (cycle_scope)
-    cycle_scope->AddController(paint_controller);
 
   absl::optional<PaintChunkSubset> previous_chunks;
   if (ShouldCreateLayersAfterPaint())
@@ -371,7 +365,7 @@
                 paint_controller.ClientCacheIsValid(*this) &&
                 previous_interest_rect_ == new_interest_rect;
   if (!cached) {
-    paint_controller.MarkClientForValidation(*this);
+    paint_controller.ReserveCapacity();
     GraphicsContext context(paint_controller);
     DCHECK(layer_state_) << "No layer state for GraphicsLayer: " << DebugName();
     paint_controller.UpdateCurrentPaintChunkProperties(
@@ -383,6 +377,9 @@
     previous_interest_rect_ = new_interest_rect;
     client_.PaintContents(this, context, painting_phase_, new_interest_rect);
     paint_controller.CommitNewDisplayItems();
+    // TODO(wangxianzhu): Remove this and friend class in DisplayItemClient
+    // when unifying PaintController.
+    Validate();
     DVLOG(2) << "Painted GraphicsLayer: " << DebugName()
              << " paintable region: " << PaintableRegion().ToString();
   }
diff --git a/third_party/blink/renderer/platform/graphics/graphics_layer.h b/third_party/blink/renderer/platform/graphics/graphics_layer.h
index 5ddf1add..694ae97 100644
--- a/third_party/blink/renderer/platform/graphics/graphics_layer.h
+++ b/third_party/blink/renderer/platform/graphics/graphics_layer.h
@@ -173,7 +173,6 @@
   // Returns true if any layer is repainted.
   bool PaintRecursively(GraphicsContext&,
                         Vector<PreCompositedLayerInfo>&,
-                        PaintController::CycleScope& cycle_scope,
                         PaintBenchmarkMode = PaintBenchmarkMode::kNormal);
 
   PaintController& GetPaintController() const;
@@ -240,7 +239,6 @@
   void ClearPaintStateRecursively();
   void Paint(Vector<PreCompositedLayerInfo>&,
              PaintBenchmarkMode,
-             PaintController::CycleScope*,
              const IntRect* interest_rect = nullptr);
 
   // Adds a child without calling NotifyChildListChange(), so that adding
diff --git a/third_party/blink/renderer/platform/graphics/graphics_layer_test.cc b/third_party/blink/renderer/platform/graphics/graphics_layer_test.cc
index af4b9ca7..3856e9a 100644
--- a/third_party/blink/renderer/platform/graphics/graphics_layer_test.cc
+++ b/third_party/blink/renderer/platform/graphics/graphics_layer_test.cc
@@ -100,14 +100,12 @@
   GraphicsContext context(GetPaintController());
   client.SetNeedsRepaint(true);
   Vector<PreCompositedLayerInfo> pre_composited_layers;
-  {
-    PaintController::CycleScope cycle_scope;
-    EXPECT_TRUE(
-        root.PaintRecursively(context, pre_composited_layers, cycle_scope));
-  }
+  EXPECT_TRUE(root.PaintRecursively(context, pre_composited_layers));
   EXPECT_TRUE(root.Repainted());
+  root.GetPaintController().FinishCycle();
   EXPECT_FALSE(layer1.Repainted());
   EXPECT_TRUE(layer2.Repainted());
+  layer2.GetPaintController().FinishCycle();
 
   HitTestData hit_test_data;
   hit_test_data.touch_action_rects = {{IntRect(1, 2, 3, 4)}};
@@ -131,11 +129,7 @@
   // Paint again with nothing changed.
   client.SetNeedsRepaint(false);
   pre_composited_layers.clear();
-  {
-    PaintController::CycleScope cycle_scope;
-    EXPECT_FALSE(
-        root.PaintRecursively(context, pre_composited_layers, cycle_scope));
-  }
+  EXPECT_FALSE(root.PaintRecursively(context, pre_composited_layers));
   EXPECT_FALSE(root.Repainted());
   EXPECT_FALSE(layer1.Repainted());
   EXPECT_FALSE(layer2.Repainted());
@@ -144,13 +138,10 @@
   // Paint again with layer1 drawing content.
   layer1.SetDrawsContent(true);
   pre_composited_layers.clear();
-  {
-    PaintController::CycleScope cycle_scope;
-    EXPECT_TRUE(
-        root.PaintRecursively(context, pre_composited_layers, cycle_scope));
-  }
+  EXPECT_TRUE(root.PaintRecursively(context, pre_composited_layers));
   EXPECT_FALSE(root.Repainted());
   EXPECT_TRUE(layer1.Repainted());
+  layer1.GetPaintController().FinishCycle();
   EXPECT_FALSE(layer2.Repainted());
 
   EXPECT_EQ(3u, pre_composited_layers.size());
diff --git a/third_party/blink/renderer/platform/graphics/paint/display_item_client.h b/third_party/blink/renderer/platform/graphics/paint/display_item_client.h
index 9023fe2..24fe02f 100644
--- a/third_party/blink/renderer/platform/graphics/paint/display_item_client.h
+++ b/third_party/blink/renderer/platform/graphics/paint/display_item_client.h
@@ -27,10 +27,7 @@
 // dereferenced unless we can make sure the client is still alive.
 class PLATFORM_EXPORT DisplayItemClient {
  public:
-  DisplayItemClient()
-      : paint_invalidation_reason_(
-            static_cast<uint8_t>(PaintInvalidationReason::kJustCreated)),
-        marked_for_validation_(0) {
+  DisplayItemClient() {
 #if DCHECK_IS_ON()
     OnCreate();
 #endif
@@ -76,32 +73,30 @@
         // However, kUncacheable overwrites any other reason.
         reason != PaintInvalidationReason::kUncacheable)
       return;
-    paint_invalidation_reason_ = static_cast<uint8_t>(reason);
+    paint_invalidation_reason_ = reason;
   }
 
   PaintInvalidationReason GetPaintInvalidationReason() const {
-    return static_cast<PaintInvalidationReason>(paint_invalidation_reason_);
+    return paint_invalidation_reason_;
   }
 
   // A client is considered "just created" if its display items have never been
   // validated by any PaintController since it's created.
   bool IsJustCreated() const {
-    return GetPaintInvalidationReason() ==
-           PaintInvalidationReason::kJustCreated;
+    return paint_invalidation_reason_ == PaintInvalidationReason::kJustCreated;
   }
 
   // Whether the client is cacheable. The uncacheable status is set when the
   // client produces any display items that skipped caching of any
   // PaintController.
   bool IsCacheable() const {
-    return GetPaintInvalidationReason() !=
-           PaintInvalidationReason::kUncacheable;
+    return paint_invalidation_reason_ != PaintInvalidationReason::kUncacheable;
   }
 
   // True if the client's display items are cached in PaintControllers without
   // needing to update.
   bool IsValid() const {
-    return GetPaintInvalidationReason() == PaintInvalidationReason::kNone;
+    return paint_invalidation_reason_ == PaintInvalidationReason::kNone;
   }
 
   String ToString() const;
@@ -109,15 +104,11 @@
  private:
   friend class FakeDisplayItemClient;
   friend class ObjectPaintInvalidatorTest;
-  friend class PaintChunker;
   friend class PaintController;
+  friend class GraphicsLayer;  // Temporary for Validate().
 
-  void MarkForValidation() const { marked_for_validation_ = 1; }
-  bool IsMarkedForValidation() const { return marked_for_validation_; }
   void Validate() const {
-    paint_invalidation_reason_ =
-        static_cast<uint8_t>(PaintInvalidationReason::kNone);
-    marked_for_validation_ = 0;
+    paint_invalidation_reason_ = PaintInvalidationReason::kNone;
   }
 
 #if DCHECK_IS_ON()
@@ -125,8 +116,8 @@
   void OnDestroy();
 #endif
 
-  mutable uint8_t paint_invalidation_reason_ : 7;
-  mutable uint8_t marked_for_validation_ : 1;
+  mutable PaintInvalidationReason paint_invalidation_reason_ =
+      PaintInvalidationReason::kJustCreated;
 };
 
 inline bool operator==(const DisplayItemClient& client1,
diff --git a/third_party/blink/renderer/platform/graphics/paint/display_item_raster_invalidator_test.cc b/third_party/blink/renderer/platform/graphics/paint/display_item_raster_invalidator_test.cc
index f07e50d..0a9925b 100644
--- a/third_party/blink/renderer/platform/graphics/paint/display_item_raster_invalidator_test.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/display_item_raster_invalidator_test.cc
@@ -22,7 +22,18 @@
  protected:
   DisplayItemRasterInvalidatorTest() = default;
 
-  Vector<RasterInvalidationInfo> GetRasterInvalidations() {
+  Vector<RasterInvalidationInfo> GenerateRasterInvalidations() {
+    GetPaintController().CommitNewDisplayItems();
+    invalidator_.Generate(
+        base::DoNothing(),
+        PaintChunkSubset(GetPaintController().GetPaintArtifactShared()),
+        // The layer bounds are big enough not to clip display item raster
+        // invalidation rects in the tests.
+        FloatPoint(), IntSize(20000, 20000), PropertyTreeState::Root());
+    GetPaintController().FinishCycle();
+    for (auto& chunk : GetPaintController().PaintChunks())
+      chunk.properties.ClearChangedTo(PropertyTreeState::Root());
+
     if (invalidator_.GetTracking())
       return invalidator_.GetTracking()->Invalidations();
     return Vector<RasterInvalidationInfo>();
@@ -33,29 +44,6 @@
   RasterInvalidator invalidator_;
 };
 
-class RasterInvalidationCycleScope : public PaintController::CycleScope {
- public:
-  RasterInvalidationCycleScope(PaintController& controller,
-                               RasterInvalidator& invalidator)
-      : PaintController::CycleScope(controller), invalidator_(invalidator) {}
-  ~RasterInvalidationCycleScope() {
-    for (auto* controller : controllers_) {
-      controller->CommitNewDisplayItems();
-      invalidator_.Generate(
-          base::DoNothing(),
-          PaintChunkSubset(controller->GetPaintArtifactShared()),
-          // The layer bounds are big enough not to clip display item raster
-          // invalidation rects in the tests.
-          FloatPoint(), IntSize(20000, 20000), PropertyTreeState::Root());
-      for (auto& chunk : controller->PaintChunks())
-        chunk.properties.ClearChangedTo(PropertyTreeState::Root());
-    }
-  }
-
- private:
-  RasterInvalidator& invalidator_;
-};
-
 INSTANTIATE_PAINT_TEST_SUITE_P(DisplayItemRasterInvalidatorTest);
 
 TEST_P(DisplayItemRasterInvalidatorTest,
@@ -64,27 +52,20 @@
   FakeDisplayItemClient second("second");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
-    DrawRect(context, first, kForegroundType, IntRect(100, 150, 300, 300));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
+  DrawRect(context, first, kForegroundType, IntRect(100, 150, 300, 300));
+  GenerateRasterInvalidations();
 
   first.Invalidate(PaintInvalidationReason::kStyle);
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
-    DrawRect(context, first, kForegroundType, IntRect(100, 150, 300, 300));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
+  DrawRect(context, first, kForegroundType, IntRect(100, 150, 300, 300));
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(RasterInvalidationInfo{
                   &first, "first", IntRect(100, 100, 300, 350),
                   PaintInvalidationReason::kStyle}));
@@ -96,28 +77,21 @@
   FakeDisplayItemClient second("second");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
-    DrawRect(context, first, kForegroundType, IntRect(100, 150, 300, 300));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
+  DrawRect(context, first, kForegroundType, IntRect(100, 150, 300, 300));
+  GenerateRasterInvalidations();
 
   first.Invalidate(PaintInvalidationReason::kStyle);
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(200, 100, 300, 300));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
-    DrawRect(context, first, kForegroundType, IntRect(200, 150, 300, 300));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(200, 100, 300, 300));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
+  DrawRect(context, first, kForegroundType, IntRect(200, 150, 300, 300));
 
   EXPECT_THAT(
-      GetRasterInvalidations(),
+      GenerateRasterInvalidations(),
       UnorderedElementsAre(
           RasterInvalidationInfo{&first, "first", IntRect(100, 100, 300, 350),
                                  PaintInvalidationReason::kStyle},
@@ -131,25 +105,18 @@
   FakeDisplayItemClient second("second");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 300, 300));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 300, 300));
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 300, 300));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 300, 300));
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(RasterInvalidationInfo{
                   &second, "second", IntRect(100, 100, 200, 200),
                   PaintInvalidationReason::kDisappeared}));
@@ -162,32 +129,25 @@
   FakeDisplayItemClient unaffected("unaffected");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-    DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
+  DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-    DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
-  }
+  InitRootChunk();
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
+  DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(RasterInvalidationInfo{
                   &first, "first", IntRect(100, 100, 100, 100),
                   PaintInvalidationReason::kReordered}));
@@ -200,27 +160,20 @@
   FakeDisplayItemClient unaffected("unaffected");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    first.Invalidate(PaintInvalidationReason::kOutline);
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-  }
+  InitRootChunk();
+  first.Invalidate(PaintInvalidationReason::kOutline);
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(RasterInvalidationInfo{
                   &first, "first", IntRect(100, 100, 100, 100),
                   PaintInvalidationReason::kOutline}));
@@ -233,27 +186,20 @@
   FakeDisplayItemClient unaffected("unaffected");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    second.Invalidate(PaintInvalidationReason::kOutline);
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-  }
+  InitRootChunk();
+  second.Invalidate(PaintInvalidationReason::kOutline);
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(RasterInvalidationInfo{
                   &second, "second", IntRect(100, 100, 50, 200),
                   PaintInvalidationReason::kOutline}));
@@ -266,28 +212,21 @@
   FakeDisplayItemClient unaffected("unaffected");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    first.Invalidate(PaintInvalidationReason::kIncremental);
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-  }
+  InitRootChunk();
+  first.Invalidate(PaintInvalidationReason::kIncremental);
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
 
   // Incremental invalidation is not applicable when the item is reordered.
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(RasterInvalidationInfo{
                   &first, "first", IntRect(100, 100, 100, 100),
                   PaintInvalidationReason::kReordered}));
@@ -300,25 +239,18 @@
   FakeDisplayItemClient third("third");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, third, kBackgroundType, IntRect(125, 100, 200, 50));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, third, kBackgroundType, IntRect(125, 100, 200, 50));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(RasterInvalidationInfo{
                   &third, "third", IntRect(125, 100, 200, 50),
                   PaintInvalidationReason::kAppeared}));
@@ -334,31 +266,24 @@
   }
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
+  InitRootChunk();
 
-    for (auto& client : clients)
-      DrawRect(context, *client, kBackgroundType, IntRect(initial_rect));
-  }
+  for (auto& client : clients)
+    DrawRect(context, *client, kBackgroundType, IntRect(initial_rect));
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    IntRect visual_rects[] = {
-        IntRect(100, 100, 150, 100), IntRect(100, 100, 100, 150),
-        IntRect(100, 100, 150, 80),  IntRect(100, 100, 80, 150),
-        IntRect(100, 100, 150, 150), IntRect(100, 100, 80, 80)};
-    for (size_t i = 0; i < base::size(clients); i++) {
-      clients[i]->Invalidate(PaintInvalidationReason::kIncremental);
-      DrawRect(context, *clients[i], kBackgroundType, IntRect(visual_rects[i]));
-    }
+  InitRootChunk();
+  IntRect visual_rects[] = {
+      IntRect(100, 100, 150, 100), IntRect(100, 100, 100, 150),
+      IntRect(100, 100, 150, 80),  IntRect(100, 100, 80, 150),
+      IntRect(100, 100, 150, 150), IntRect(100, 100, 80, 80)};
+  for (size_t i = 0; i < base::size(clients); i++) {
+    clients[i]->Invalidate(PaintInvalidationReason::kIncremental);
+    DrawRect(context, *clients[i], kBackgroundType, IntRect(visual_rects[i]));
   }
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(
                   RasterInvalidationInfo{clients[0].get(), "0",
                                          IntRect(200, 100, 50, 100),
@@ -399,30 +324,23 @@
   FakeDisplayItemClient second("second");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, second, kBackgroundType, IntRect(200, 200, 50, 50));
-    DrawRect(context, second, kForegroundType, IntRect(200, 200, 50, 50));
-  }
+  InitRootChunk();
+  DrawRect(context, second, kBackgroundType, IntRect(200, 200, 50, 50));
+  DrawRect(context, second, kForegroundType, IntRect(200, 200, 50, 50));
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    first.Invalidate();
-    second.Invalidate();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
-    DrawRect(context, second, kBackgroundType, IntRect(150, 250, 100, 100));
-    DrawRect(context, second, kForegroundType, IntRect(150, 250, 100, 100));
-    EXPECT_EQ(0u, NumCachedNewItems());
-  }
+  InitRootChunk();
+  first.Invalidate();
+  second.Invalidate();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
+  DrawRect(context, second, kBackgroundType, IntRect(150, 250, 100, 100));
+  DrawRect(context, second, kForegroundType, IntRect(150, 250, 100, 100));
+  EXPECT_EQ(0u, NumCachedNewItems());
 
   EXPECT_THAT(
-      GetRasterInvalidations(),
+      GenerateRasterInvalidations(),
       UnorderedElementsAre(
           RasterInvalidationInfo{&first, "first", IntRect(100, 100, 150, 150),
                                  PaintInvalidationReason::kAppeared},
@@ -433,15 +351,11 @@
   invalidator_.SetTracksRasterInvalidations(false);
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, second, kBackgroundType, IntRect(150, 250, 100, 100));
-    DrawRect(context, second, kForegroundType, IntRect(150, 250, 100, 100));
-  }
+  InitRootChunk();
+  DrawRect(context, second, kBackgroundType, IntRect(150, 250, 100, 100));
+  DrawRect(context, second, kForegroundType, IntRect(150, 250, 100, 100));
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(RasterInvalidationInfo{
                   &first, "first", IntRect(100, 100, 150, 150),
                   PaintInvalidationReason::kDisappeared}));
@@ -453,29 +367,22 @@
   FakeDisplayItemClient second("second");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    first.Invalidate();
-    second.Invalidate();
-    DrawRect(context, first, kBackgroundType, IntRect(150, 150, 100, 100));
-    DrawRect(context, first, kForegroundType, IntRect(150, 150, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(200, 200, 50, 50));
-    DrawRect(context, second, kForegroundType, IntRect(200, 200, 50, 50));
-  }
+  InitRootChunk();
+  first.Invalidate();
+  second.Invalidate();
+  DrawRect(context, first, kBackgroundType, IntRect(150, 150, 100, 100));
+  DrawRect(context, first, kForegroundType, IntRect(150, 150, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(200, 200, 50, 50));
+  DrawRect(context, second, kForegroundType, IntRect(200, 200, 50, 50));
 
   EXPECT_THAT(
-      GetRasterInvalidations(),
+      GenerateRasterInvalidations(),
       UnorderedElementsAre(
           RasterInvalidationInfo{&first, "first", IntRect(100, 100, 150, 150),
                                  PaintInvalidationReason::kFull},
@@ -484,18 +391,14 @@
   invalidator_.SetTracksRasterInvalidations(false);
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    first.Invalidate();
-    second.Invalidate();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
-  }
+  InitRootChunk();
+  first.Invalidate();
+  second.Invalidate();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
 
   EXPECT_THAT(
-      GetRasterInvalidations(),
+      GenerateRasterInvalidations(),
       UnorderedElementsAre(
           RasterInvalidationInfo{&first, "first", IntRect(100, 100, 150, 150),
                                  PaintInvalidationReason::kFull},
@@ -511,38 +414,31 @@
   FakeDisplayItemClient content2("content2");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
-  }
+  InitRootChunk();
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
+  GenerateRasterInvalidations();
 
   // Simulate the situation when |container1| gets a z-index that is greater
   // than that of |container2|.
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
-  }
+  InitRootChunk();
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(
                   RasterInvalidationInfo{&container1, "container1",
                                          IntRect(100, 100, 100, 100),
@@ -560,39 +456,32 @@
   FakeDisplayItemClient content2("content2");
   GraphicsContext context(GetPaintController());
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
-  }
+  InitRootChunk();
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    // Simulate the situation when |container1| gets a z-index that is greater
-    // than that of |container2|, and |container1| is invalidated.
-    container2.Invalidate();
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
-  }
+  InitRootChunk();
+  // Simulate the situation when |container1| gets a z-index that is greater
+  // than that of |container2|, and |container1| is invalidated.
+  container2.Invalidate();
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(
                   RasterInvalidationInfo{&container1, "container1",
                                          IntRect(100, 100, 100, 100),
@@ -623,35 +512,28 @@
 
   PaintChunk::Id container1_id(container1, kBackgroundType);
   PaintChunk::Id container2_id(container2, kBackgroundType);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    GetPaintController().UpdateCurrentPaintChunkProperties(
-        &container1_id, container1_properties);
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    GetPaintController().UpdateCurrentPaintChunkProperties(
-        &container2_id, container2_properties);
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-  }
+  GetPaintController().UpdateCurrentPaintChunkProperties(&container1_id,
+                                                         container1_properties);
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  GetPaintController().UpdateCurrentPaintChunkProperties(&container2_id,
+                                                         container2_properties);
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  GenerateRasterInvalidations();
 
   // Move content2 into container1, without invalidation.
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    GetPaintController().UpdateCurrentPaintChunkProperties(
-        &container1_id, container1_properties);
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-    GetPaintController().UpdateCurrentPaintChunkProperties(
-        &container2_id, container2_properties);
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-  }
+  GetPaintController().UpdateCurrentPaintChunkProperties(&container1_id,
+                                                         container1_properties);
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  GetPaintController().UpdateCurrentPaintChunkProperties(&container2_id,
+                                                         container2_properties);
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(
                   RasterInvalidationInfo{&content2, "content2",
                                          IntRect(100, 200, 50, 200),
@@ -666,60 +548,50 @@
   FakeDisplayItemClient multicol("multicol");
   FakeDisplayItemClient content("content");
   GraphicsContext context(GetPaintController());
+
+  InitRootChunk();
   IntRect rect1(100, 100, 50, 50);
   IntRect rect2(150, 100, 50, 50);
   IntRect rect3(200, 100, 50, 50);
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, multicol, kBackgroundType, IntRect(100, 200, 100, 100));
-    GetPaintController().BeginSkippingCache();
-    DrawRect(context, content, kForegroundType, rect1);
-    DrawRect(context, content, kForegroundType, rect2);
-    GetPaintController().EndSkippingCache();
-  }
+  DrawRect(context, multicol, kBackgroundType, IntRect(100, 200, 100, 100));
+  GetPaintController().BeginSkippingCache();
+  DrawRect(context, content, kForegroundType, rect1);
+  DrawRect(context, content, kForegroundType, rect2);
+  GetPaintController().EndSkippingCache();
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    // Draw again with nothing invalidated.
-    EXPECT_TRUE(ClientCacheIsValid(multicol));
-    DrawRect(context, multicol, kBackgroundType, IntRect(100, 200, 100, 100));
+  InitRootChunk();
+  // Draw again with nothing invalidated.
+  EXPECT_TRUE(ClientCacheIsValid(multicol));
+  DrawRect(context, multicol, kBackgroundType, IntRect(100, 200, 100, 100));
 
-    GetPaintController().BeginSkippingCache();
-    DrawRect(context, content, kForegroundType, rect1);
-    DrawRect(context, content, kForegroundType, rect2);
-    GetPaintController().EndSkippingCache();
-  }
+  GetPaintController().BeginSkippingCache();
+  DrawRect(context, content, kForegroundType, rect1);
+  DrawRect(context, content, kForegroundType, rect2);
+  GetPaintController().EndSkippingCache();
 
-  EXPECT_THAT(GetRasterInvalidations(),
+  EXPECT_THAT(GenerateRasterInvalidations(),
               UnorderedElementsAre(RasterInvalidationInfo{
                   &content, "content", UnionRect(rect1, rect2),
                   PaintInvalidationReason::kUncacheable}));
   invalidator_.SetTracksRasterInvalidations(false);
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    // Now the multicol becomes 3 columns and repaints.
-    multicol.Invalidate();
-    DrawRect(context, multicol, kBackgroundType, IntRect(100, 100, 100, 100));
+  InitRootChunk();
+  // Now the multicol becomes 3 columns and repaints.
+  multicol.Invalidate();
+  DrawRect(context, multicol, kBackgroundType, IntRect(100, 100, 100, 100));
 
-    GetPaintController().BeginSkippingCache();
-    DrawRect(context, content, kForegroundType, rect1);
-    DrawRect(context, content, kForegroundType, rect2);
-    DrawRect(context, content, kForegroundType, rect3);
-    GetPaintController().EndSkippingCache();
-  }
+  GetPaintController().BeginSkippingCache();
+  DrawRect(context, content, kForegroundType, rect1);
+  DrawRect(context, content, kForegroundType, rect2);
+  DrawRect(context, content, kForegroundType, rect3);
+  GetPaintController().EndSkippingCache();
 
   EXPECT_THAT(
-      GetRasterInvalidations(),
+      GenerateRasterInvalidations(),
       UnorderedElementsAre(
           RasterInvalidationInfo{&multicol, "multicol",
                                  IntRect(100, 200, 100, 100),
@@ -741,32 +613,25 @@
   IntRect rect2(150, 100, 50, 50);
   IntRect rect3(200, 100, 50, 50);
 
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    DrawRect(context, content, kBackgroundType, rect1);
-    GetPaintController().BeginSkippingCache();
-    DrawRect(context, content, kForegroundType, rect2);
-    GetPaintController().EndSkippingCache();
-    DrawRect(context, content, kForegroundType, rect3);
-  }
+  InitRootChunk();
+  DrawRect(context, content, kBackgroundType, rect1);
+  GetPaintController().BeginSkippingCache();
+  DrawRect(context, content, kForegroundType, rect2);
+  GetPaintController().EndSkippingCache();
+  DrawRect(context, content, kForegroundType, rect3);
+  GenerateRasterInvalidations();
 
   invalidator_.SetTracksRasterInvalidations(true);
-  {
-    RasterInvalidationCycleScope cycle_scope(GetPaintController(),
-                                             invalidator_);
-    InitRootChunk();
-    // Draw again with nothing invalidated.
-    DrawRect(context, content, kBackgroundType, rect1);
-    GetPaintController().BeginSkippingCache();
-    DrawRect(context, content, kForegroundType, rect2);
-    GetPaintController().EndSkippingCache();
-    DrawRect(context, content, kForegroundType, rect3);
-  }
+  InitRootChunk();
+  // Draw again with nothing invalidated.
+  DrawRect(context, content, kBackgroundType, rect1);
+  GetPaintController().BeginSkippingCache();
+  DrawRect(context, content, kForegroundType, rect2);
+  GetPaintController().EndSkippingCache();
+  DrawRect(context, content, kForegroundType, rect3);
 
   EXPECT_THAT(
-      GetRasterInvalidations(),
+      GenerateRasterInvalidations(),
       UnorderedElementsAre(RasterInvalidationInfo{
           &content, "content", UnionRect(rect1, UnionRect(rect2, rect3)),
           PaintInvalidationReason::kUncacheable}));
diff --git a/third_party/blink/renderer/platform/graphics/paint/drawing_recorder_test.cc b/third_party/blink/renderer/platform/graphics/paint/drawing_recorder_test.cc
index f5295542..42eb5e04 100644
--- a/third_party/blink/renderer/platform/graphics/paint/drawing_recorder_test.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/drawing_recorder_test.cc
@@ -22,12 +22,9 @@
 TEST_F(DrawingRecorderTest, Nothing) {
   FakeDisplayItemClient client;
   GraphicsContext context(GetPaintController());
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawNothing(context, client, kForegroundType);
-    GetPaintController().CommitNewDisplayItems();
-  }
+  InitRootChunk();
+  DrawNothing(context, client, kForegroundType);
+  CommitAndFinishCycle();
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&client, kForegroundType)));
   EXPECT_FALSE(
@@ -38,12 +35,9 @@
 TEST_F(DrawingRecorderTest, Rect) {
   FakeDisplayItemClient client;
   GraphicsContext context(GetPaintController());
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, client, kForegroundType, kBounds);
-    GetPaintController().CommitNewDisplayItems();
-  }
+  InitRootChunk();
+  DrawRect(context, client, kForegroundType, kBounds);
+  CommitAndFinishCycle();
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&client, kForegroundType)));
 }
@@ -51,28 +45,22 @@
 TEST_F(DrawingRecorderTest, Cached) {
   FakeDisplayItemClient client;
   GraphicsContext context(GetPaintController());
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawNothing(context, client, kBackgroundType);
-    DrawRect(context, client, kForegroundType, kBounds);
-    GetPaintController().CommitNewDisplayItems();
-  }
+  InitRootChunk();
+  DrawNothing(context, client, kBackgroundType);
+  DrawRect(context, client, kForegroundType, kBounds);
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&client, kBackgroundType),
                           IsSameId(&client, kForegroundType)));
 
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawNothing(context, client, kBackgroundType);
-    DrawRect(context, client, kForegroundType, kBounds);
+  InitRootChunk();
+  DrawNothing(context, client, kBackgroundType);
+  DrawRect(context, client, kForegroundType, kBounds);
 
-    EXPECT_EQ(2u, NumCachedNewItems());
+  EXPECT_EQ(2u, NumCachedNewItems());
 
-    GetPaintController().CommitNewDisplayItems();
-  }
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&client, kBackgroundType),
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_chunker.cc b/third_party/blink/renderer/platform/graphics/paint/paint_chunker.cc
index 1737e21cf..7c40c44 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_chunker.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_chunker.cc
@@ -34,26 +34,6 @@
 }
 #endif
 
-void PaintChunker::StartMarkingClientsForValidation(
-    Vector<const DisplayItemClient*>& clients_to_validate) {
-#if DCHECK_IS_ON()
-  DCHECK(IsInInitialState());
-#endif
-  DCHECK(!clients_to_validate_);
-  clients_to_validate_ = &clients_to_validate;
-}
-
-void PaintChunker::MarkClientForValidation(const DisplayItemClient& client) {
-  if (clients_to_validate_ && !client.IsMarkedForValidation()) {
-    clients_to_validate_->push_back(&client);
-    client.MarkForValidation();
-  }
-}
-
-void PaintChunker::StopMarkingClientsForValidation() {
-  clients_to_validate_ = nullptr;
-}
-
 void PaintChunker::UpdateCurrentPaintChunkProperties(
     const PaintChunk::Id* chunk_id,
     const PropertyTreeStateOrAlias& properties) {
@@ -72,7 +52,6 @@
 void PaintChunker::AppendByMoving(PaintChunk&& chunk) {
   DCHECK(chunks_);
   FinalizeLastChunkProperties();
-  MarkClientForValidation(chunk.id.client);
   wtf_size_t next_chunk_begin_index =
       chunks_->IsEmpty() ? 0 : chunks_->back().end_index;
   chunks_->emplace_back(next_chunk_begin_index, std::move(chunk));
@@ -94,7 +73,6 @@
       next_chunk_id_.emplace(id);
     FinalizeLastChunkProperties();
     wtf_size_t begin = chunks_->IsEmpty() ? 0 : chunks_->back().end_index;
-    MarkClientForValidation(next_chunk_id_->client);
     chunks_->emplace_back(begin, begin, *next_chunk_id_, current_properties_,
                           current_effectively_invisible_);
     next_chunk_id_ = absl::nullopt;
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_chunker.h b/third_party/blink/renderer/platform/graphics/paint/paint_chunker.h
index 9373392..7a18b74 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_chunker.h
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_chunker.h
@@ -37,11 +37,6 @@
   bool IsInInitialState() const;
 #endif
 
-  void StartMarkingClientsForValidation(
-      Vector<const DisplayItemClient*>& clients_to_validate);
-  void MarkClientForValidation(const DisplayItemClient& client);
-  void StopMarkingClientsForValidation();
-
   const PropertyTreeStateOrAlias& CurrentPaintChunkProperties() const {
     return current_properties_;
   }
@@ -106,7 +101,6 @@
   void FinalizeLastChunkProperties();
 
   Vector<PaintChunk>* chunks_ = nullptr;
-  Vector<const DisplayItemClient*>* clients_to_validate_ = nullptr;
 
   // The id specified by UpdateCurrentPaintChunkProperties(). If it is not
   // nullopt, we will use it as the id of the next new chunk. Otherwise we will
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_controller.cc b/third_party/blink/renderer/platform/graphics/paint/paint_controller.cc
index 8f0d2fb..45ebb7c 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_controller.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_controller.cc
@@ -233,7 +233,6 @@
 
   AppendSubsequenceByMoving(client, subsequence_index,
                             markers.start_chunk_index, markers.end_chunk_index);
-  MarkClientForValidation(client);
   return true;
 }
 
@@ -328,13 +327,6 @@
     under_invalidation_checker_->CheckNewItem();
 }
 
-void PaintController::MarkClientForValidation(const DisplayItemClient& client) {
-  if (clients_to_validate_ && !client.IsMarkedForValidation()) {
-    clients_to_validate_->push_back(&client);
-    client.MarkForValidation();
-  }
-}
-
 void PaintController::ProcessNewItem(DisplayItem& display_item) {
   if (IsSkippingCache() && usage_ == kMultiplePaints) {
     display_item.Client().Invalidate(PaintInvalidationReason::kUncacheable);
@@ -538,7 +530,6 @@
                                         ? PaintInvalidationReason::kUncacheable
                                         : PaintInvalidationReason::kNone);
     DCHECK(!item.IsCacheable() || ClientCacheIsValid(item.Client()));
-    MarkClientForValidation(item.Client());
 #if DCHECK_IS_ON()
     CheckNewItem(item);
 #endif
@@ -624,42 +615,49 @@
 #endif
 }
 
-PaintController::CycleScope::~CycleScope() {
-  for (const auto* client : clients_to_validate_) {
-    if (client->IsCacheable())
-      client->Validate();
-  }
-  for (auto* controller : controllers_)
-    controller->FinishCycle();
-}
-
-void PaintController::StartCycle(
-    Vector<const DisplayItemClient*>& clients_to_validate) {
-  // StartCycle() can only be called before the controller has painted anything.
-  DCHECK(new_paint_artifact_);
-  DCHECK(new_paint_artifact_->IsEmpty());
-  DCHECK(!clients_to_validate_);
-  if (usage_ == kTransient)
-    return;
-  clients_to_validate_ = &clients_to_validate;
-  paint_chunker_.StartMarkingClientsForValidation(clients_to_validate);
-  ReserveCapacity();
-}
-
 void PaintController::FinishCycle() {
-  DCHECK(usage_ == kTransient || clients_to_validate_);
-  clients_to_validate_ = nullptr;
-  paint_chunker_.StopMarkingClientsForValidation();
   if (usage_ == kTransient || !committed_)
     return;
 
   CheckNoNewPaint();
   committed_ = false;
 
+  // Validate display item clients that have validly cached subsequence or
+  // display items in this PaintController.
+  for (auto& item : current_subsequences_.tree) {
+    if (item.is_moved_from_cached_subsequence) {
+      // We don't need to validate the client of a cached subsequence, because
+      // it should be already valid. See http://crbug.com/1050090 for more
+      // details.
+      DCHECK(!item.client->IsCacheable() || ClientCacheIsValid(*item.client));
+      continue;
+    }
+    if (item.client->IsCacheable())
+      item.client->Validate();
+  }
   for (wtf_size_t i = 0; i < current_paint_artifact_->PaintChunks().size();
        i++) {
     auto& chunk = current_paint_artifact_->PaintChunks()[i];
     chunk.client_is_just_created = false;
+    const auto& client = chunk.id.client;
+    if (chunk.is_moved_from_cached_subsequence) {
+      // We don't need to validate the clients of paint chunks and display
+      // items that are moved from a cached subsequence, because they should be
+      // already valid. See http://crbug.com/1050090 for more details.
+#if DCHECK_IS_ON()
+      DCHECK(!chunk.is_cacheable || ClientCacheIsValid(client));
+      for (const auto& item : current_paint_artifact_->DisplayItemsInChunk(i))
+        DCHECK(!item.IsCacheable() || ClientCacheIsValid(item.Client()));
+#endif
+      continue;
+    }
+    if (client.IsCacheable())
+      client.Validate();
+
+    for (const auto& item : current_paint_artifact_->DisplayItemsInChunk(i)) {
+      if (item.Client().IsCacheable())
+        item.Client().Validate();
+    }
   }
 
 #if DCHECK_IS_ON()
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_controller.h b/third_party/blink/renderer/platform/graphics/paint/paint_controller.h
index 8a2b98c..5adfdf91 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_controller.h
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_controller.h
@@ -82,32 +82,15 @@
   PaintController& operator=(const PaintController&) = delete;
   ~PaintController();
 
+  // Called before painting to optimize memory allocation by reserving space in
+  // |new_paint_artifact_| and |new_subsequences_| based on the size of the
+  // previous ones (|current_paint_artifact_| and |current_subsequences_|).
+  void ReserveCapacity();
+
 #if DCHECK_IS_ON()
   Usage GetUsage() const { return usage_; }
 #endif
 
-  class PLATFORM_EXPORT CycleScope {
-    STACK_ALLOCATED();
-
-   public:
-    CycleScope() = default;
-    explicit CycleScope(PaintController& controller) {
-      AddController(controller);
-    }
-    void AddController(PaintController& controller) {
-      controller.StartCycle(clients_to_validate_);
-      controllers_.push_back(&controller);
-    }
-    ~CycleScope();
-
-   protected:
-    Vector<PaintController*> controllers_;
-
-   private:
-    Vector<const DisplayItemClient*> clients_to_validate_;
-  };
-  friend class CycleScope;
-
   // These methods are called during painting.
 
   // Provide a new set of paint chunk properties to apply to recorded display
@@ -161,15 +144,12 @@
     return new_paint_artifact_->PaintChunks().back().bounds;
   }
 
-  void MarkClientForValidation(const DisplayItemClient& client);
-
   template <typename DisplayItemClass, typename... Args>
-  void CreateAndAppend(const DisplayItemClient& client, Args&&... args) {
-    MarkClientForValidation(client);
+  void CreateAndAppend(Args&&... args) {
     DisplayItemClass& display_item =
         new_paint_artifact_->GetDisplayItemList()
             .AllocateAndConstruct<DisplayItemClass>(
-                client, std::forward<Args>(args)...);
+                std::forward<Args>(args)...);
     display_item.SetFragment(current_fragment_);
     ProcessNewItem(display_item);
   }
@@ -209,6 +189,14 @@
   // artifact with the new paintings.
   void CommitNewDisplayItems();
 
+  // Called when the caller finishes updating a full document life cycle.
+  // The PaintController will cleanup data that will no longer be used for the
+  // next cycle, and update status to be ready for the next cycle.
+  // It updates caching status of DisplayItemClients, so if there are
+  // DisplayItemClients painting on multiple PaintControllers, we should call
+  // there FinishCycle() at the same time to ensure consistent caching status.
+  void FinishCycle();
+
   // Returns the approximate memory usage owned by this PaintController.
   size_t ApproximateUnsharedMemoryUsage() const;
 
@@ -303,22 +291,6 @@
   friend class PaintUnderInvalidationChecker;
   friend class GraphicsLayer;  // Temporary for ClientCacheIsValid().
 
-  // Called before painting to optimize memory allocation by reserving space in
-  // |new_paint_artifact_| and |new_subsequences_| based on the size of the
-  // previous ones (|current_paint_artifact_| and |current_subsequences_|).
-  void ReserveCapacity();
-
-  // Called at the beginning of a paint cycle, as defined by CycleScope.
-  void StartCycle(Vector<const DisplayItemClient*>& clients_to_validate);
-
-  // Called at the end of a paint cycle, as defined by CycleScope.
-  // The PaintController will cleanup data that will no longer be used for the
-  // next cycle, and update status to be ready for the next cycle.
-  // It updates caching status of DisplayItemClients, so if there are
-  // DisplayItemClients painting on multiple PaintControllers, we should call
-  // there FinishCycle() at the same time to ensure consistent caching status.
-  void FinishCycle();
-
   // True if all display items associated with the client are validly cached.
   // However, the current algorithm allows the following situations even if
   // ClientCacheIsValid() is true for a client during painting:
@@ -403,7 +375,6 @@
   // CommitNewDisplayItems().
   scoped_refptr<PaintArtifact> new_paint_artifact_;
   PaintChunker paint_chunker_;
-  Vector<const DisplayItemClient*>* clients_to_validate_ = nullptr;
 
   bool cache_is_all_invalid_ = true;
   bool committed_ = false;
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_controller_test.cc b/third_party/blink/renderer/platform/graphics/paint/paint_controller_test.cc
index b64b32d..4049044 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_controller_test.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_controller_test.cc
@@ -4,7 +4,6 @@
 
 #include "third_party/blink/renderer/platform/graphics/paint/paint_controller_test.h"
 
-#include "build/build_config.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/blink/renderer/platform/graphics/graphics_context.h"
 #include "third_party/blink/renderer/platform/graphics/paint/display_item_cache_skipper.h"
@@ -26,16 +25,6 @@
                             public PaintControllerTestBase {
 };
 
-class CommitCycleScope : public PaintController::CycleScope {
- public:
-  explicit CommitCycleScope(PaintController& controller)
-      : PaintController::CycleScope(controller) {}
-  ~CommitCycleScope() {
-    for (auto* controller : controllers_)
-      controller->CommitNewDisplayItems();
-  }
-};
-
 #define EXPECT_DEFAULT_ROOT_CHUNK(size)                               \
   EXPECT_THAT(GetPaintController().PaintChunks(),                     \
               ElementsAre(IsPaintChunk(0, size, DefaultRootChunkId(), \
@@ -48,15 +37,14 @@
                     kCompositeAfterPaint,
                     kUnderInvalidationChecking,
                     kCompositeAfterPaint | kUnderInvalidationChecking));
+
 TEST_P(PaintControllerTest, NestedRecorders) {
   GraphicsContext context(GetPaintController());
   FakeDisplayItemClient client("client");
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, client, kBackgroundType, IntRect(100, 100, 200, 200));
-  }
+  DrawRect(context, client, kBackgroundType, IntRect(100, 100, 200, 200));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&client, kBackgroundType)));
@@ -67,17 +55,16 @@
   FakeDisplayItemClient first("first");
   FakeDisplayItemClient second("second");
   GraphicsContext context(GetPaintController());
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 300, 300));
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 300, 300));
 
-    EXPECT_EQ(0u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
-  }
+  EXPECT_EQ(0u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -85,20 +72,19 @@
                           IsSameId(&first, kForegroundType)));
   EXPECT_DEFAULT_ROOT_CHUNK(3);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 300, 300));
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 300, 300));
 
-    EXPECT_EQ(2u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(2u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    EXPECT_EQ(1u, NumIndexedItems());
-    EXPECT_EQ(2u, NumSequentialMatches());
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
+  EXPECT_EQ(1u, NumIndexedItems());
+  EXPECT_EQ(2u, NumSequentialMatches());
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
 #endif
-  }
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -111,17 +97,15 @@
   FakeDisplayItemClient second("second");
   FakeDisplayItemClient unaffected("unaffected");
   GraphicsContext context(GetPaintController());
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-    DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
-  }
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
+  DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -131,25 +115,24 @@
                           IsSameId(&unaffected, kBackgroundType),
                           IsSameId(&unaffected, kForegroundType)));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-    DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
+  InitRootChunk();
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
+  DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
 
-    EXPECT_EQ(6u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(6u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    EXPECT_EQ(2u, NumIndexedItems());  // first
-    EXPECT_EQ(5u,
-              NumSequentialMatches());  // second, first foreground, unaffected
-    EXPECT_EQ(1u, NumOutOfOrderMatches());  // first
+  EXPECT_EQ(2u, NumIndexedItems());  // first
+  EXPECT_EQ(5u,
+            NumSequentialMatches());  // second, first foreground, unaffected
+  EXPECT_EQ(1u, NumOutOfOrderMatches());  // first
 #endif
-  }
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&second, kBackgroundType),
@@ -166,17 +149,15 @@
   FakeDisplayItemClient second("second");
   FakeDisplayItemClient unaffected("unaffected");
   GraphicsContext context(GetPaintController());
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-    DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
-  }
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
+  DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -186,25 +167,24 @@
                           IsSameId(&unaffected, kBackgroundType),
                           IsSameId(&unaffected, kForegroundType)));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    first.Invalidate();
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
-    DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
+  InitRootChunk();
+  first.Invalidate();
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, unaffected, kBackgroundType, IntRect(300, 300, 10, 10));
+  DrawRect(context, unaffected, kForegroundType, IntRect(300, 300, 10, 10));
 
-    EXPECT_EQ(4u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(4u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    EXPECT_EQ(2u, NumIndexedItems());
-    EXPECT_EQ(4u, NumSequentialMatches());  // second, unaffected
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
+  EXPECT_EQ(2u, NumIndexedItems());
+  EXPECT_EQ(4u, NumSequentialMatches());  // second, unaffected
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
 #endif
-  }
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&second, kBackgroundType),
@@ -221,34 +201,31 @@
   FakeDisplayItemClient second("second");
   FakeDisplayItemClient third("third");
   GraphicsContext context(GetPaintController());
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-  }
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
                           IsSameId(&second, kBackgroundType)));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, third, kBackgroundType, IntRect(125, 100, 200, 50));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, third, kBackgroundType, IntRect(125, 100, 200, 50));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
 
-    EXPECT_EQ(2u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(2u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    EXPECT_EQ(0u, NumIndexedItems());
-    EXPECT_EQ(2u, NumSequentialMatches());  // first, second
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
+  EXPECT_EQ(0u, NumIndexedItems());
+  EXPECT_EQ(2u, NumSequentialMatches());  // first, second
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
 #endif
-  }
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -262,17 +239,15 @@
   FakeDisplayItemClient second("second");
   FakeDisplayItemClient third("third");
   GraphicsContext context(GetPaintController());
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, third, kBackgroundType, IntRect(300, 100, 50, 50));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, third, kForegroundType, IntRect(300, 100, 50, 50));
-  }
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, third, kBackgroundType, IntRect(300, 100, 50, 50));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, third, kForegroundType, IntRect(300, 100, 50, 50));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -282,26 +257,25 @@
                           IsSameId(&second, kForegroundType),
                           IsSameId(&third, kForegroundType)));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    second.Invalidate();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, third, kBackgroundType, IntRect(300, 100, 50, 50));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, third, kForegroundType, IntRect(300, 100, 50, 50));
+  second.Invalidate();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, third, kBackgroundType, IntRect(300, 100, 50, 50));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, second, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, third, kForegroundType, IntRect(300, 100, 50, 50));
 
-    EXPECT_EQ(4u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(4u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    EXPECT_EQ(2u, NumIndexedItems());
-    EXPECT_EQ(4u, NumSequentialMatches());
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
+  EXPECT_EQ(2u, NumIndexedItems());
+  EXPECT_EQ(4u, NumSequentialMatches());
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
 #endif
-  }
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -317,31 +291,27 @@
   FakeDisplayItemClient first("first");
   FakeDisplayItemClient second("second");
   GraphicsContext context(GetPaintController());
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, second, kBackgroundType, IntRect(200, 200, 50, 50));
-    DrawRect(context, second, kForegroundType, IntRect(200, 200, 50, 50));
-  }
+  DrawRect(context, second, kBackgroundType, IntRect(200, 200, 50, 50));
+  DrawRect(context, second, kForegroundType, IntRect(200, 200, 50, 50));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&second, kBackgroundType),
                           IsSameId(&second, kForegroundType)));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    first.Invalidate();
-    second.Invalidate();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
-    DrawRect(context, second, kBackgroundType, IntRect(150, 250, 100, 100));
-    DrawRect(context, second, kForegroundType, IntRect(150, 250, 100, 100));
-    EXPECT_EQ(0u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
-  }
+  first.Invalidate();
+  second.Invalidate();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
+  DrawRect(context, second, kBackgroundType, IntRect(150, 250, 100, 100));
+  DrawRect(context, second, kForegroundType, IntRect(150, 250, 100, 100));
+  EXPECT_EQ(0u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -350,20 +320,19 @@
                           IsSameId(&second, kForegroundType)));
   EXPECT_DEFAULT_ROOT_CHUNK(4);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, second, kBackgroundType, IntRect(150, 250, 100, 100));
-    DrawRect(context, second, kForegroundType, IntRect(150, 250, 100, 100));
+  InitRootChunk();
+  DrawRect(context, second, kBackgroundType, IntRect(150, 250, 100, 100));
+  DrawRect(context, second, kForegroundType, IntRect(150, 250, 100, 100));
 
-    EXPECT_EQ(2u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(2u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    EXPECT_EQ(2u, NumIndexedItems());
-    EXPECT_EQ(2u, NumSequentialMatches());
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
+  EXPECT_EQ(2u, NumIndexedItems());
+  EXPECT_EQ(2u, NumSequentialMatches());
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
 #endif
-  }
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&second, kBackgroundType),
@@ -375,31 +344,27 @@
   FakeDisplayItemClient first("first");
   FakeDisplayItemClient second("second");
   GraphicsContext context(GetPaintController());
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
-  }
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
                           IsSameId(&first, kForegroundType)));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    first.Invalidate();
-    second.Invalidate();
-    DrawRect(context, first, kBackgroundType, IntRect(150, 150, 100, 100));
-    DrawRect(context, first, kForegroundType, IntRect(150, 150, 100, 100));
-    DrawRect(context, second, kBackgroundType, IntRect(200, 200, 50, 50));
-    DrawRect(context, second, kForegroundType, IntRect(200, 200, 50, 50));
-    EXPECT_EQ(0u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
-  }
+  first.Invalidate();
+  second.Invalidate();
+  DrawRect(context, first, kBackgroundType, IntRect(150, 150, 100, 100));
+  DrawRect(context, first, kForegroundType, IntRect(150, 150, 100, 100));
+  DrawRect(context, second, kBackgroundType, IntRect(200, 200, 50, 50));
+  DrawRect(context, second, kForegroundType, IntRect(200, 200, 50, 50));
+  EXPECT_EQ(0u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -408,16 +373,14 @@
                           IsSameId(&second, kForegroundType)));
   EXPECT_DEFAULT_ROOT_CHUNK(4);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    first.Invalidate();
-    second.Invalidate();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
-    DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
-    EXPECT_EQ(0u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
-  }
+  InitRootChunk();
+  first.Invalidate();
+  second.Invalidate();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
+  DrawRect(context, first, kForegroundType, IntRect(100, 100, 150, 150));
+  EXPECT_EQ(0u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -429,13 +392,11 @@
   FakeDisplayItemClient first("first");
   FakeDisplayItemClient second("second");
   GraphicsContext context(GetPaintController());
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 150, 150));
-  }
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 150, 150));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -453,12 +414,10 @@
   EXPECT_FALSE(ClientCacheIsValid(first));
   EXPECT_TRUE(ClientCacheIsValid(second));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 150, 150));
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 150, 150));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 150, 150));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
@@ -488,19 +447,17 @@
   FakeDisplayItemClient container2("container2");
   FakeDisplayItemClient content2("content2");
   GraphicsContext context(GetPaintController());
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
-  }
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container1, kBackgroundType),
@@ -512,21 +469,19 @@
                           IsSameId(&content2, kForegroundType),
                           IsSameId(&container2, kForegroundType)));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    // Simulate the situation when |container1| gets a z-index that is greater
-    // than that of |container2|.
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
-  }
+  // Simulate the situation when |container1| gets a z-index that is greater
+  // than that of |container2|.
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container2, kBackgroundType),
@@ -546,19 +501,17 @@
   FakeDisplayItemClient container2("container2");
   FakeDisplayItemClient content2("content2");
   GraphicsContext context(GetPaintController());
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
-  }
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container1, kBackgroundType),
@@ -570,22 +523,20 @@
                           IsSameId(&content2, kForegroundType),
                           IsSameId(&container2, kForegroundType)));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    // Simulate the situation when |container1| gets a z-index that is greater
-    // than that of |container2|, and |container1| is invalidated.
-    container1.Invalidate();
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-    DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
-  }
+  // Simulate the situation when |container1| gets a z-index that is greater
+  // than that of |container2|, and |container1| is invalidated.
+  container1.Invalidate();
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+  DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container2, kBackgroundType),
@@ -603,34 +554,30 @@
   if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled())
     return;
 
+  GraphicsContext context(GetPaintController());
+
   FakeDisplayItemClient root("root");
   auto root_properties = DefaultPaintChunkProperties();
   PaintChunk::Id root_id(root, DisplayItem::kCaret);
+  GetPaintController().UpdateCurrentPaintChunkProperties(&root_id,
+                                                         root_properties);
+  DrawRect(context, root, kBackgroundType, IntRect(100, 100, 100, 100));
+
   FakeDisplayItemClient container("container");
   auto container_properties = DefaultPaintChunkProperties();
   PaintChunk::Id container_id(container, DisplayItem::kCaret);
-  GraphicsContext context(GetPaintController());
-
   {
-    CommitCycleScope cycle_scope(GetPaintController());
-
-    GetPaintController().UpdateCurrentPaintChunkProperties(&root_id,
-                                                           root_properties);
-    DrawRect(context, root, kBackgroundType, IntRect(100, 100, 100, 100));
-
-    {
-      SubsequenceRecorder r(context, container);
-      GetPaintController().UpdateCurrentPaintChunkProperties(
-          &container_id, container_properties);
-      DrawRect(context, container, kBackgroundType,
-               IntRect(100, 100, 100, 100));
-      DrawRect(context, container, kForegroundType,
-               IntRect(100, 100, 100, 100));
-    }
-
-    DrawRect(context, root, kForegroundType, IntRect(100, 100, 100, 100));
+    SubsequenceRecorder r(context, container);
+    GetPaintController().UpdateCurrentPaintChunkProperties(
+        &container_id, container_properties);
+    DrawRect(context, container, kBackgroundType, IntRect(100, 100, 100, 100));
+    DrawRect(context, container, kForegroundType, IntRect(100, 100, 100, 100));
   }
 
+  DrawRect(context, root, kForegroundType, IntRect(100, 100, 100, 100));
+
+  CommitAndFinishCycle();
+
   // Even though the paint properties match, |container| should receive its
   // own PaintChunk because it created a subsequence.
   EXPECT_THAT(
@@ -640,14 +587,12 @@
                   IsPaintChunk(3, 4, PaintChunk::Id(root, kForegroundType),
                                root_properties)));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    GetPaintController().UpdateCurrentPaintChunkProperties(&root_id,
-                                                           root_properties);
-    DrawRect(context, root, kBackgroundType, IntRect(100, 100, 100, 100));
-    EXPECT_TRUE(GetPaintController().UseCachedSubsequenceIfPossible(container));
-    DrawRect(context, root, kForegroundType, IntRect(100, 100, 100, 100));
-  }
+  GetPaintController().UpdateCurrentPaintChunkProperties(&root_id,
+                                                         root_properties);
+  DrawRect(context, root, kBackgroundType, IntRect(100, 100, 100, 100));
+  EXPECT_TRUE(GetPaintController().UseCachedSubsequenceIfPossible(container));
+  DrawRect(context, root, kForegroundType, IntRect(100, 100, 100, 100));
+  CommitAndFinishCycle();
 
   // |container| should still receive its own PaintChunk because it is a cached
   // subsequence.
@@ -677,33 +622,26 @@
   container2_properties.SetEffect(*container2_effect);
 
   {
-    CommitCycleScope cycle_scope(GetPaintController());
+    GetPaintController().UpdateCurrentPaintChunkProperties(
+        &container1_id, container1_properties);
 
-    {
-      GetPaintController().UpdateCurrentPaintChunkProperties(
-          &container1_id, container1_properties);
-
-      SubsequenceRecorder r(context, container1);
-      DrawRect(context, container1, kBackgroundType,
-               IntRect(100, 100, 100, 100));
-      DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-      DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
-      DrawRect(context, container1, kForegroundType,
-               IntRect(100, 100, 100, 100));
-    }
-    {
-      GetPaintController().UpdateCurrentPaintChunkProperties(
-          &container2_id, container2_properties);
-
-      SubsequenceRecorder r(context, container2);
-      DrawRect(context, container2, kBackgroundType,
-               IntRect(100, 200, 100, 100));
-      DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-      DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-      DrawRect(context, container2, kForegroundType,
-               IntRect(100, 200, 100, 100));
-    }
+    SubsequenceRecorder r(context, container1);
+    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
   }
+  {
+    GetPaintController().UpdateCurrentPaintChunkProperties(
+        &container2_id, container2_properties);
+
+    SubsequenceRecorder r(context, container2);
+    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+    DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
+  }
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container1, kBackgroundType),
@@ -726,62 +664,57 @@
       ElementsAre(IsPaintChunk(0, 4, container1_id, container1_properties),
                   IsPaintChunk(4, 8, container2_id, container2_properties)));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    // Simulate the situation when |container1| gets a z-index that is greater
-    // than that of |container2|.
-    if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
-      // When under-invalidation-checking is enabled,
-      // UseCachedSubsequenceIfPossible is forced off, and the client is
-      // expected to create the same painting as in the previous paint.
-      EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, container2));
-      {
-        GetPaintController().UpdateCurrentPaintChunkProperties(
-            &container2_id, container2_properties);
+  // Simulate the situation when |container1| gets a z-index that is greater
+  // than that of |container2|.
+  if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
+    // When under-invalidation-checking is enabled,
+    // UseCachedSubsequenceIfPossible is forced off, and the client is expected
+    // to create the same painting as in the previous paint.
+    EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container2));
+    {
+      GetPaintController().UpdateCurrentPaintChunkProperties(
+          &container2_id, container2_properties);
 
-        SubsequenceRecorder r(context, container2);
-        DrawRect(context, container2, kBackgroundType,
-                 IntRect(100, 200, 100, 100));
-        DrawRect(context, content2, kBackgroundType,
-                 IntRect(100, 200, 50, 200));
-        DrawRect(context, content2, kForegroundType,
-                 IntRect(100, 200, 50, 200));
-        DrawRect(context, container2, kForegroundType,
-                 IntRect(100, 200, 100, 100));
-      }
-      EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, container1));
-      {
-        GetPaintController().UpdateCurrentPaintChunkProperties(
-            &container1_id, container1_properties);
-
-        SubsequenceRecorder r(context, container1);
-        DrawRect(context, container1, kBackgroundType,
-                 IntRect(100, 100, 100, 100));
-        DrawRect(context, content1, kBackgroundType,
-                 IntRect(100, 100, 50, 200));
-        DrawRect(context, content1, kForegroundType,
-                 IntRect(100, 100, 50, 200));
-        DrawRect(context, container1, kForegroundType,
-                 IntRect(100, 100, 100, 100));
-      }
-    } else {
-      EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, container2));
-      EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, container1));
+      SubsequenceRecorder r(context, container2);
+      DrawRect(context, container2, kBackgroundType,
+               IntRect(100, 200, 100, 100));
+      DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+      DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+      DrawRect(context, container2, kForegroundType,
+               IntRect(100, 200, 100, 100));
     }
+    EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container1));
+    {
+      GetPaintController().UpdateCurrentPaintChunkProperties(
+          &container1_id, container1_properties);
 
-    EXPECT_EQ(8u, NumCachedNewItems());
-    EXPECT_EQ(2u, NumCachedNewSubsequences());
-#if DCHECK_IS_ON()
-    EXPECT_EQ(0u, NumIndexedItems());
-    EXPECT_EQ(0u, NumSequentialMatches());
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
-#endif
+      SubsequenceRecorder r(context, container1);
+      DrawRect(context, container1, kBackgroundType,
+               IntRect(100, 100, 100, 100));
+      DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+      DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+      DrawRect(context, container1, kForegroundType,
+               IntRect(100, 100, 100, 100));
+    }
+  } else {
+    EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container2));
+    EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container1));
   }
 
+  EXPECT_EQ(8u, NumCachedNewItems());
+  EXPECT_EQ(2u, NumCachedNewSubsequences());
+#if DCHECK_IS_ON()
+  EXPECT_EQ(0u, NumIndexedItems());
+  EXPECT_EQ(0u, NumSequentialMatches());
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
+#endif
+
+  CommitAndFinishCycle();
+
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container2, kBackgroundType),
                           IsSameId(&content2, kBackgroundType),
@@ -813,22 +746,18 @@
   PaintChunk::Id container2_id(container2, kBackgroundType);
   PaintChunk::Id content2_id(content2, kBackgroundType);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    {
-      SubsequenceRecorder r(context, container2);
-      DrawRect(context, container2, kBackgroundType,
-               IntRect(100, 200, 100, 100));
-      DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-      DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-      DrawRect(context, container2, kForegroundType,
-               IntRect(100, 200, 100, 100));
-    }
-    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  {
+    SubsequenceRecorder r(context, container2);
+    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+    DrawRect(context, container2, kForegroundType, IntRect(100, 200, 100, 100));
   }
+  DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&content1, kBackgroundType),
@@ -854,46 +783,43 @@
 
   // Simulate the situation when |container2| gets a z-index that is smaller
   // than that of |content1|.
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
-      // When under-invalidation-checking is enabled,
-      // UseCachedSubsequenceIfPossible is forced off, and the client is
-      // expected to create the same painting as in the previous paint.
-      EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, container2));
-      {
-        SubsequenceRecorder r(context, container2);
-        DrawRect(context, container2, kBackgroundType,
-                 IntRect(100, 200, 100, 100));
-        DrawRect(context, content2, kBackgroundType,
-                 IntRect(100, 200, 50, 200));
-        DrawRect(context, content2, kForegroundType,
-                 IntRect(100, 200, 50, 200));
-        DrawRect(context, container2, kForegroundType,
-                 IntRect(100, 200, 100, 100));
-      }
-      DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-      DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
-    } else {
-      EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, container2));
-      EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, content1,
-                                                              kBackgroundType));
-      EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, content1,
-                                                              kForegroundType));
+  InitRootChunk();
+  if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
+    // When under-invalidation-checking is enabled,
+    // UseCachedSubsequenceIfPossible is forced off, and the client is expected
+    // to create the same painting as in the previous paint.
+    EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container2));
+    {
+      SubsequenceRecorder r(context, container2);
+      DrawRect(context, container2, kBackgroundType,
+               IntRect(100, 200, 100, 100));
+      DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+      DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
+      DrawRect(context, container2, kForegroundType,
+               IntRect(100, 200, 100, 100));
     }
-
-    EXPECT_EQ(6u, NumCachedNewItems());
-    EXPECT_EQ(1u, NumCachedNewSubsequences());
-#if DCHECK_IS_ON()
-    EXPECT_EQ(0u, NumIndexedItems());
-    EXPECT_EQ(2u, NumSequentialMatches());
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
-#endif
+    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+    DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+  } else {
+    EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container2));
+    EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, content1,
+                                                            kBackgroundType));
+    EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, content1,
+                                                            kForegroundType));
   }
 
+  EXPECT_EQ(6u, NumCachedNewItems());
+  EXPECT_EQ(1u, NumCachedNewSubsequences());
+#if DCHECK_IS_ON()
+  EXPECT_EQ(0u, NumIndexedItems());
+  EXPECT_EQ(2u, NumSequentialMatches());
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
+#endif
+
+  CommitAndFinishCycle();
+
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container2, kBackgroundType),
                           IsSameId(&content2, kBackgroundType),
@@ -928,18 +854,16 @@
   PaintChunk::Id content3_id(content3, kBackgroundType);
   IntRect rect(100, 100, 50, 200);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  InitRootChunk();
 
-    DrawRect(context, content1a, kBackgroundType, rect);
-    DrawRect(context, content1b, kBackgroundType, rect);
-    {
-      SubsequenceRecorder r(context, container2);
-      DrawRect(context, container2, kBackgroundType, rect);
-    }
-    DrawRect(context, content3, kBackgroundType, rect);
+  DrawRect(context, content1a, kBackgroundType, rect);
+  DrawRect(context, content1b, kBackgroundType, rect);
+  {
+    SubsequenceRecorder r(context, container2);
+    DrawRect(context, container2, kBackgroundType, rect);
   }
+  DrawRect(context, content3, kBackgroundType, rect);
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&content1a, kBackgroundType),
@@ -951,45 +875,44 @@
   // Subsequence(container1): container1, content1b(cached), content1a(cached).
   // Subsequence(container2): cached
   // Subsequence(contaienr3): container3, content3
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
-      EXPECT_FALSE(DrawingRecorder::UseCachedDrawingIfPossible(
-          context, content1b, kBackgroundType));
-      DrawRect(context, content1b, kBackgroundType, rect);
-      EXPECT_FALSE(DrawingRecorder::UseCachedDrawingIfPossible(
-          context, content1a, kBackgroundType));
-      DrawRect(context, content1a, kBackgroundType, rect);
-      {
-        EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-            context, container2));
-        SubsequenceRecorder r(context, container2);
-        DrawRect(context, container2, kBackgroundType, rect);
-      }
-      EXPECT_FALSE(DrawingRecorder::UseCachedDrawingIfPossible(
-          context, content3, kBackgroundType));
-      DrawRect(context, content3, kBackgroundType, rect);
-    } else {
-      EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(
-          context, content1b, kBackgroundType));
-      EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(
-          context, content1a, kBackgroundType));
-      EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+  InitRootChunk();
+  if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
+    EXPECT_FALSE(DrawingRecorder::UseCachedDrawingIfPossible(context, content1b,
+                                                             kBackgroundType));
+    DrawRect(context, content1b, kBackgroundType, rect);
+    EXPECT_FALSE(DrawingRecorder::UseCachedDrawingIfPossible(context, content1a,
+                                                             kBackgroundType));
+    DrawRect(context, content1a, kBackgroundType, rect);
+    {
+      EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
           context, container2));
-      EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, content3,
-                                                              kBackgroundType));
+      SubsequenceRecorder r(context, container2);
+      DrawRect(context, container2, kBackgroundType, rect);
     }
-
-    EXPECT_EQ(4u, NumCachedNewItems());
-    EXPECT_EQ(1u, NumCachedNewSubsequences());
-#if DCHECK_IS_ON()
-    EXPECT_EQ(1u, NumIndexedItems());
-    EXPECT_EQ(2u, NumSequentialMatches());
-    EXPECT_EQ(1u, NumOutOfOrderMatches());
-#endif
+    EXPECT_FALSE(DrawingRecorder::UseCachedDrawingIfPossible(context, content3,
+                                                             kBackgroundType));
+    DrawRect(context, content3, kBackgroundType, rect);
+  } else {
+    EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, content1b,
+                                                            kBackgroundType));
+    EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, content1a,
+                                                            kBackgroundType));
+    EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container2));
+    EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, content3,
+                                                            kBackgroundType));
   }
 
+  EXPECT_EQ(4u, NumCachedNewItems());
+  EXPECT_EQ(1u, NumCachedNewSubsequences());
+#if DCHECK_IS_ON()
+  EXPECT_EQ(1u, NumIndexedItems());
+  EXPECT_EQ(2u, NumSequentialMatches());
+  EXPECT_EQ(1u, NumOutOfOrderMatches());
+#endif
+
+  CommitAndFinishCycle();
+
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&content1b, kBackgroundType),
                           IsSameId(&content1a, kBackgroundType),
@@ -1003,6 +926,7 @@
   constexpr wtf_size_t kFragmentCount = 3;
   FakeDisplayItemClient container("container");
 
+  // The first paint.
   auto paint_container = [this, &context, &container]() {
     SubsequenceRecorder r(context, container);
     for (wtf_size_t i = 0; i < kFragmentCount; ++i) {
@@ -1014,10 +938,7 @@
                IntRect(100, 100, 100, 100));
     }
   };
-
-  // The first paint.
   {
-    CommitCycleScope cycle_scope(GetPaintController());
     ScopedPaintChunkProperties root_chunk_properties(
         GetPaintController(), DefaultPaintChunkProperties(), root,
         kBackgroundType);
@@ -1025,6 +946,7 @@
     paint_container();
     DrawRect(context, root, kForegroundType, IntRect(100, 100, 100, 100));
   }
+  CommitAndFinishCycle();
 
   auto check_paint_results = [this, &root, &container]() {
     EXPECT_THAT(
@@ -1044,7 +966,6 @@
 
   // The second paint.
   {
-    CommitCycleScope cycle_scope(GetPaintController());
     ScopedPaintChunkProperties root_chunk_properties(
         GetPaintController(), DefaultPaintChunkProperties(), root,
         kBackgroundType);
@@ -1060,6 +981,7 @@
     }
     DrawRect(context, root, kForegroundType, IntRect(100, 100, 100, 100));
   }
+  CommitAndFinishCycle();
 
   // The second paint should produce the exactly same results.
   check_paint_results();
@@ -1082,17 +1004,15 @@
   auto container2_properties = DefaultPaintChunkProperties();
   container2_properties.SetEffect(*container2_effect);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    GetPaintController().UpdateCurrentPaintChunkProperties(
-        &container1_id, container1_properties);
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    GetPaintController().UpdateCurrentPaintChunkProperties(
-        &container2_id, container2_properties);
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-  }
+  GetPaintController().UpdateCurrentPaintChunkProperties(&container1_id,
+                                                         container1_properties);
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  GetPaintController().UpdateCurrentPaintChunkProperties(&container2_id,
+                                                         container2_properties);
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container1, kBackgroundType),
@@ -1106,25 +1026,24 @@
                   IsPaintChunk(2, 4, container2_id, container2_properties)));
 
   // Move content2 into container1, without invalidation.
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    GetPaintController().UpdateCurrentPaintChunkProperties(
-        &container1_id, container1_properties);
-    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
-    DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
-    GetPaintController().UpdateCurrentPaintChunkProperties(
-        &container2_id, container2_properties);
-    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+  GetPaintController().UpdateCurrentPaintChunkProperties(&container1_id,
+                                                         container1_properties);
+  DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+  DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
+  GetPaintController().UpdateCurrentPaintChunkProperties(&container2_id,
+                                                         container2_properties);
+  DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
 
-    EXPECT_EQ(4u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(4u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    EXPECT_EQ(1u, NumIndexedItems());
-    EXPECT_EQ(3u, NumSequentialMatches());
-    EXPECT_EQ(1u, NumOutOfOrderMatches());
+  EXPECT_EQ(1u, NumIndexedItems());
+  EXPECT_EQ(3u, NumSequentialMatches());
+  EXPECT_EQ(1u, NumOutOfOrderMatches());
 #endif
-  }
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container1, kBackgroundType),
@@ -1150,23 +1069,21 @@
   const DisplayItem::Type kType4 =
       static_cast<DisplayItem::Type>(DisplayItem::kDrawingFirst + 3);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, client, kType1, IntRect(100, 100, 100, 100));
-    DrawRect(context, client, kType2, IntRect(100, 100, 50, 200));
-    DrawRect(context, client, kType3, IntRect(100, 100, 50, 200));
-    DrawRect(context, client, kType4, IntRect(100, 100, 100, 100));
-  }
+  InitRootChunk();
+  DrawRect(context, client, kType1, IntRect(100, 100, 100, 100));
+  DrawRect(context, client, kType2, IntRect(100, 100, 50, 200));
+  DrawRect(context, client, kType3, IntRect(100, 100, 50, 200));
+  DrawRect(context, client, kType4, IntRect(100, 100, 100, 100));
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, client, kType2, IntRect(100, 100, 50, 200));
-    DrawRect(context, client, kType3, IntRect(100, 100, 50, 200));
-    DrawRect(context, client, kType1, IntRect(100, 100, 100, 100));
-    DrawRect(context, client, kType4, IntRect(100, 100, 100, 100));
-  }
+  CommitAndFinishCycle();
+
+  InitRootChunk();
+  DrawRect(context, client, kType2, IntRect(100, 100, 50, 200));
+  DrawRect(context, client, kType3, IntRect(100, 100, 50, 200));
+  DrawRect(context, client, kType1, IntRect(100, 100, 100, 100));
+  DrawRect(context, client, kType4, IntRect(100, 100, 100, 100));
+
+  CommitAndFinishCycle();
 }
 
 TEST_P(PaintControllerTest, CachedNestedSubsequenceUpdate) {
@@ -1200,43 +1117,35 @@
   content2_properties.SetEffect(*content2_effect);
 
   {
-    CommitCycleScope cycle_scope(GetPaintController());
-    {
-      SubsequenceRecorder r(context, container1);
-      GetPaintController().UpdateCurrentPaintChunkProperties(
-          &container1_background_id, container1_background_properties);
-      DrawRect(context, container1, kBackgroundType,
-               IntRect(100, 100, 100, 100));
+    SubsequenceRecorder r(context, container1);
+    GetPaintController().UpdateCurrentPaintChunkProperties(
+        &container1_background_id, container1_background_properties);
+    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
 
-      {
-        SubsequenceRecorder r(context, content1);
-        GetPaintController().UpdateCurrentPaintChunkProperties(
-            &content1_id, content1_properties);
-        DrawRect(context, content1, kBackgroundType,
-                 IntRect(100, 100, 50, 200));
-        DrawRect(context, content1, kForegroundType,
-                 IntRect(100, 100, 50, 200));
-      }
-      GetPaintController().UpdateCurrentPaintChunkProperties(
-          &container1_foreground_id, container1_foreground_properties);
-      DrawRect(context, container1, kForegroundType,
-               IntRect(100, 100, 100, 100));
-    }
     {
-      SubsequenceRecorder r(context, container2);
+      SubsequenceRecorder r(context, content1);
       GetPaintController().UpdateCurrentPaintChunkProperties(
-          &container2_background_id, container2_background_properties);
-      DrawRect(context, container2, kBackgroundType,
-               IntRect(100, 200, 100, 100));
-      {
-        SubsequenceRecorder r(context, content2);
-        GetPaintController().UpdateCurrentPaintChunkProperties(
-            &content2_id, content2_properties);
-        DrawRect(context, content2, kBackgroundType,
-                 IntRect(100, 200, 50, 200));
-      }
+          &content1_id, content1_properties);
+      DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+      DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+    }
+    GetPaintController().UpdateCurrentPaintChunkProperties(
+        &container1_foreground_id, container1_foreground_properties);
+    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
+  }
+  {
+    SubsequenceRecorder r(context, container2);
+    GetPaintController().UpdateCurrentPaintChunkProperties(
+        &container2_background_id, container2_background_properties);
+    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+    {
+      SubsequenceRecorder r(context, content2);
+      GetPaintController().UpdateCurrentPaintChunkProperties(
+          &content2_id, content2_properties);
+      DrawRect(context, content2, kBackgroundType, IntRect(100, 200, 50, 200));
     }
   }
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container1, kBackgroundType),
@@ -1262,62 +1171,58 @@
                                container2_background_properties),
                   IsPaintChunk(5, 6, content2_id, content2_properties)));
 
+  // Invalidate container1 but not content1.
+  container1.Invalidate();
+  // Container2 itself now becomes empty (but still has the 'content2' child),
+  // and chooses not to output subsequence info.
+  container2.Invalidate();
+  content2.Invalidate();
+  EXPECT_FALSE(
+      SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, container2));
+  EXPECT_FALSE(
+      SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, content2));
+  // Content2 now outputs foreground only.
   {
-    CommitCycleScope cycle_scope(GetPaintController());
-    // Invalidate container1 but not content1.
-    container1.Invalidate();
-    // Container2 itself now becomes empty (but still has the 'content2' child),
-    // and chooses not to output subsequence info.
-    container2.Invalidate();
-    content2.Invalidate();
-    EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-        context, container2));
-    EXPECT_FALSE(
-        SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, content2));
-    // Content2 now outputs foreground only.
-    {
-      SubsequenceRecorder r(context, content2);
-      GetPaintController().UpdateCurrentPaintChunkProperties(
-          &content2_id, content2_properties);
-      DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
-    }
-    // Repaint container1 with foreground only.
-    {
-      SubsequenceRecorder r(context, container1);
-      EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, container1));
-      // Use cached subsequence of content1.
-      if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
-        // When under-invalidation-checking is enabled,
-        // UseCachedSubsequenceIfPossible is forced off, and the client is
-        // expected to create the same painting as in the previous paint.
-        EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-            context, content1));
-        SubsequenceRecorder r(context, content1);
-        GetPaintController().UpdateCurrentPaintChunkProperties(
-            &content1_id, content1_properties);
-        DrawRect(context, content1, kBackgroundType,
-                 IntRect(100, 100, 50, 200));
-        DrawRect(context, content1, kForegroundType,
-                 IntRect(100, 100, 50, 200));
-      } else {
-        EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-            context, content1));
-      }
-      GetPaintController().UpdateCurrentPaintChunkProperties(
-          &container1_foreground_id, container1_foreground_properties);
-      DrawRect(context, container1, kForegroundType,
-               IntRect(100, 100, 100, 100));
-    }
-
-    EXPECT_EQ(2u, NumCachedNewItems());
-    EXPECT_EQ(1u, NumCachedNewSubsequences());
-#if DCHECK_IS_ON()
-    EXPECT_EQ(0u, NumIndexedItems());
-    EXPECT_EQ(0u, NumSequentialMatches());
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
-#endif
+    SubsequenceRecorder r(context, content2);
+    GetPaintController().UpdateCurrentPaintChunkProperties(&content2_id,
+                                                           content2_properties);
+    DrawRect(context, content2, kForegroundType, IntRect(100, 200, 50, 200));
   }
+  // Repaint container1 with foreground only.
+  {
+    SubsequenceRecorder r(context, container1);
+    EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container1));
+    // Use cached subsequence of content1.
+    if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
+      // When under-invalidation-checking is enabled,
+      // UseCachedSubsequenceIfPossible is forced off, and the client is
+      // expected to create the same painting as in the previous paint.
+      EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+          context, content1));
+      SubsequenceRecorder r(context, content1);
+      GetPaintController().UpdateCurrentPaintChunkProperties(
+          &content1_id, content1_properties);
+      DrawRect(context, content1, kBackgroundType, IntRect(100, 100, 50, 200));
+      DrawRect(context, content1, kForegroundType, IntRect(100, 100, 50, 200));
+    } else {
+      EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+          context, content1));
+    }
+    GetPaintController().UpdateCurrentPaintChunkProperties(
+        &container1_foreground_id, container1_foreground_properties);
+    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
+  }
+
+  EXPECT_EQ(2u, NumCachedNewItems());
+  EXPECT_EQ(1u, NumCachedNewSubsequences());
+#if DCHECK_IS_ON()
+  EXPECT_EQ(0u, NumIndexedItems());
+  EXPECT_EQ(0u, NumSequentialMatches());
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
+#endif
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&content2, kForegroundType),
@@ -1343,8 +1248,10 @@
 
   FakeDisplayItemClient root("root");
   auto properties = DefaultPaintChunkProperties();
-  GraphicsContext context(GetPaintController());
   PaintChunk::Id root_id(root, DisplayItem::kLayerChunk);
+  GraphicsContext context(GetPaintController());
+  GetPaintController().UpdateCurrentPaintChunkProperties(&root_id, properties);
+
   FakeDisplayItemClient container1("container1");
   PaintChunk::Id container1_bg_id(container1, kBackgroundType);
   PaintChunk::Id container1_fg_id(container1, kForegroundType);
@@ -1358,47 +1265,36 @@
   PaintChunk::Id content2a_id(content2a, kBackgroundType);
   FakeDisplayItemClient content2b("content2b");
   PaintChunk::Id content2b_id(content2b, kForegroundType);
+
   {
-    CommitCycleScope cycle_scope(GetPaintController());
-    GetPaintController().UpdateCurrentPaintChunkProperties(&root_id,
-                                                           properties);
-
+    SubsequenceRecorder r(context, container1);
+    DrawRect(context, container1, kBackgroundType, IntRect(100, 100, 100, 100));
     {
-      SubsequenceRecorder r(context, container1);
-      DrawRect(context, container1, kBackgroundType,
-               IntRect(100, 100, 100, 100));
-      {
-        SubsequenceRecorder r(context, content1a);
-        DrawRect(context, content1a, kBackgroundType,
-                 IntRect(100, 100, 50, 200));
-      }
-      {
-        SubsequenceRecorder r(context, content1b);
-        DrawRect(context, content1b, kForegroundType,
-                 IntRect(100, 100, 50, 200));
-      }
-      DrawRect(context, container1, kForegroundType,
-               IntRect(100, 100, 100, 100));
+      SubsequenceRecorder r(context, content1a);
+      DrawRect(context, content1a, kBackgroundType, IntRect(100, 100, 50, 200));
     }
     {
-      SubsequenceRecorder r(context, container2);
-      DrawRect(context, container2, kBackgroundType,
-               IntRect(100, 200, 100, 100));
-      {
-        SubsequenceRecorder r(context, content2a);
-        DrawRect(context, content2a, kBackgroundType,
-                 IntRect(100, 200, 50, 200));
-      }
-      {
-        SubsequenceRecorder r(context, content2b);
-        DrawRect(context, content2b, kForegroundType,
-                 IntRect(100, 200, 50, 200));
-      }
+      SubsequenceRecorder r(context, content1b);
+      DrawRect(context, content1b, kForegroundType, IntRect(100, 100, 50, 200));
     }
-
-    EXPECT_EQ(0u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+    DrawRect(context, container1, kForegroundType, IntRect(100, 100, 100, 100));
   }
+  {
+    SubsequenceRecorder r(context, container2);
+    DrawRect(context, container2, kBackgroundType, IntRect(100, 200, 100, 100));
+    {
+      SubsequenceRecorder r(context, content2a);
+      DrawRect(context, content2a, kBackgroundType, IntRect(100, 200, 50, 200));
+    }
+    {
+      SubsequenceRecorder r(context, content2b);
+      DrawRect(context, content2b, kForegroundType, IntRect(100, 200, 50, 200));
+    }
+  }
+
+  EXPECT_EQ(0u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container1, kBackgroundType),
@@ -1426,16 +1322,14 @@
                           IsPaintChunk(6, 7, content2b_id, properties)));
 
   // Nothing invalidated. Should keep all subsequences.
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-        context, container1));
-    EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-        context, container2));
+  EXPECT_TRUE(
+      SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, container1));
+  EXPECT_TRUE(
+      SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, container2));
 
-    EXPECT_EQ(7u, NumCachedNewItems());
-    EXPECT_EQ(6u, NumCachedNewSubsequences());
-  }
+  EXPECT_EQ(7u, NumCachedNewItems());
+  EXPECT_EQ(6u, NumCachedNewSubsequences());
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container1, kBackgroundType),
@@ -1464,16 +1358,14 @@
 
   // Swap order of the subsequences of container1 and container2.
   // Nothing invalidated. Should keep all subsequences.
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-        context, container2));
-    EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-        context, container1));
+  EXPECT_TRUE(
+      SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, container2));
+  EXPECT_TRUE(
+      SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, container1));
 
-    EXPECT_EQ(7u, NumCachedNewItems());
-    EXPECT_EQ(6u, NumCachedNewSubsequences());
-  }
+  EXPECT_EQ(7u, NumCachedNewItems());
+  EXPECT_EQ(6u, NumCachedNewSubsequences());
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&container2, kBackgroundType),
@@ -1505,21 +1397,20 @@
   FakeDisplayItemClient multicol("multicol");
   FakeDisplayItemClient content("content");
   GraphicsContext context(GetPaintController());
+  InitRootChunk();
+
   IntRect rect1(100, 100, 50, 50);
   IntRect rect2(150, 100, 50, 50);
   IntRect rect3(200, 100, 50, 50);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+  DrawRect(context, multicol, kBackgroundType, IntRect(100, 200, 100, 100));
 
-    DrawRect(context, multicol, kBackgroundType, IntRect(100, 200, 100, 100));
+  GetPaintController().BeginSkippingCache();
+  DrawRect(context, content, kForegroundType, rect1);
+  DrawRect(context, content, kForegroundType, rect2);
+  GetPaintController().EndSkippingCache();
 
-    GetPaintController().BeginSkippingCache();
-    DrawRect(context, content, kForegroundType, rect1);
-    DrawRect(context, content, kForegroundType, rect2);
-    GetPaintController().EndSkippingCache();
-  }
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&multicol, kBackgroundType),
@@ -1534,26 +1425,25 @@
   EXPECT_NE(record1, record2);
   EXPECT_DEFAULT_ROOT_CHUNK(3);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    // Draw again with nothing invalidated.
-    EXPECT_TRUE(ClientCacheIsValid(multicol));
-    DrawRect(context, multicol, kBackgroundType, IntRect(100, 200, 100, 100));
+  InitRootChunk();
+  // Draw again with nothing invalidated.
+  EXPECT_TRUE(ClientCacheIsValid(multicol));
+  DrawRect(context, multicol, kBackgroundType, IntRect(100, 200, 100, 100));
 
-    GetPaintController().BeginSkippingCache();
-    DrawRect(context, content, kForegroundType, rect1);
-    DrawRect(context, content, kForegroundType, rect2);
-    GetPaintController().EndSkippingCache();
+  GetPaintController().BeginSkippingCache();
+  DrawRect(context, content, kForegroundType, rect1);
+  DrawRect(context, content, kForegroundType, rect2);
+  GetPaintController().EndSkippingCache();
 
-    EXPECT_EQ(1u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(1u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    EXPECT_EQ(0u, NumIndexedItems());
-    EXPECT_EQ(1u, NumSequentialMatches());
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
+  EXPECT_EQ(0u, NumIndexedItems());
+  EXPECT_EQ(1u, NumSequentialMatches());
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
 #endif
-  }
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&multicol, kBackgroundType),
@@ -1567,32 +1457,31 @@
                 .GetPaintRecord());
   EXPECT_DEFAULT_ROOT_CHUNK(3);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    // Now the multicol becomes 3 columns and repaints.
-    multicol.Invalidate();
-    DrawRect(context, multicol, kBackgroundType, IntRect(100, 100, 100, 100));
+  InitRootChunk();
+  // Now the multicol becomes 3 columns and repaints.
+  multicol.Invalidate();
+  DrawRect(context, multicol, kBackgroundType, IntRect(100, 100, 100, 100));
 
-    GetPaintController().BeginSkippingCache();
-    DrawRect(context, content, kForegroundType, rect1);
-    DrawRect(context, content, kForegroundType, rect2);
-    DrawRect(context, content, kForegroundType, rect3);
-    GetPaintController().EndSkippingCache();
+  GetPaintController().BeginSkippingCache();
+  DrawRect(context, content, kForegroundType, rect1);
+  DrawRect(context, content, kForegroundType, rect2);
+  DrawRect(context, content, kForegroundType, rect3);
+  GetPaintController().EndSkippingCache();
 
-    // We should repaint everything on invalidation of the scope container.
-    const auto& display_item_list =
-        GetPaintController().GetNewPaintArtifactShared()->GetDisplayItemList();
-    EXPECT_THAT(display_item_list,
-                ElementsAre(IsSameId(&multicol, kBackgroundType),
-                            IsSameId(&content, kForegroundType),
-                            IsSameId(&content, kForegroundType),
-                            IsSameId(&content, kForegroundType)));
-    EXPECT_NE(record1,
-              To<DrawingDisplayItem>(display_item_list[1]).GetPaintRecord());
-    EXPECT_NE(record2,
-              To<DrawingDisplayItem>(display_item_list[2]).GetPaintRecord());
-  }
+  // We should repaint everything on invalidation of the scope container.
+  const auto& display_item_list =
+      GetPaintController().GetNewPaintArtifactShared()->GetDisplayItemList();
+  EXPECT_THAT(display_item_list,
+              ElementsAre(IsSameId(&multicol, kBackgroundType),
+                          IsSameId(&content, kForegroundType),
+                          IsSameId(&content, kForegroundType),
+                          IsSameId(&content, kForegroundType)));
+  EXPECT_NE(record1,
+            To<DrawingDisplayItem>(display_item_list[1]).GetPaintRecord());
+  EXPECT_NE(record2,
+            To<DrawingDisplayItem>(display_item_list[2]).GetPaintRecord());
+
+  CommitAndFinishCycle();
   EXPECT_DEFAULT_ROOT_CHUNK(4);
 }
 
@@ -1604,15 +1493,14 @@
   IntRect rect2(150, 100, 50, 50);
   IntRect rect3(200, 100, 50, 50);
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, content, kBackgroundType, rect1);
-    GetPaintController().BeginSkippingCache();
-    DrawRect(context, content, kForegroundType, rect2);
-    GetPaintController().EndSkippingCache();
-    DrawRect(context, content, kForegroundType, rect3);
-  }
+  InitRootChunk();
+  DrawRect(context, content, kBackgroundType, rect1);
+  GetPaintController().BeginSkippingCache();
+  DrawRect(context, content, kForegroundType, rect2);
+  GetPaintController().EndSkippingCache();
+  DrawRect(context, content, kForegroundType, rect3);
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&content, kBackgroundType),
@@ -1634,24 +1522,23 @@
   EXPECT_EQ(PaintInvalidationReason::kUncacheable,
             content.GetPaintInvalidationReason());
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    // Draw again with nothing invalidated.
-    DrawRect(context, content, kBackgroundType, rect1);
-    GetPaintController().BeginSkippingCache();
-    DrawRect(context, content, kForegroundType, rect2);
-    GetPaintController().EndSkippingCache();
-    DrawRect(context, content, kForegroundType, rect3);
+  InitRootChunk();
+  // Draw again with nothing invalidated.
+  DrawRect(context, content, kBackgroundType, rect1);
+  GetPaintController().BeginSkippingCache();
+  DrawRect(context, content, kForegroundType, rect2);
+  GetPaintController().EndSkippingCache();
+  DrawRect(context, content, kForegroundType, rect3);
 
-    EXPECT_EQ(0u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(0u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    EXPECT_EQ(0u, NumIndexedItems());
-    EXPECT_EQ(0u, NumSequentialMatches());
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
+  EXPECT_EQ(0u, NumIndexedItems());
+  EXPECT_EQ(0u, NumSequentialMatches());
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
 #endif
-  }
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&content, kBackgroundType),
@@ -1675,18 +1562,17 @@
   PaintChunk::Id chunk_id(chunk_client, DisplayItem::kLayerChunk);
   auto& paint_controller = GetPaintController();
 
-  {
-    CommitCycleScope cycle_scope(paint_controller);
-    GraphicsContext context(paint_controller);
-    paint_controller.BeginSkippingCache();
-    paint_controller.SetWillForceNewChunk(true);
-    paint_controller.UpdateCurrentPaintChunkProperties(&chunk_id, properties);
-    DrawRect(context, item_client, kBackgroundType, IntRect(0, 0, 100, 100));
-    paint_controller.SetWillForceNewChunk(true);
-    paint_controller.UpdateCurrentPaintChunkProperties(&chunk_id, properties);
-    DrawRect(context, item_client, kBackgroundType, IntRect(0, 0, 100, 100));
-    paint_controller.EndSkippingCache();
-  }
+  GraphicsContext context(paint_controller);
+  paint_controller.BeginSkippingCache();
+  paint_controller.SetWillForceNewChunk(true);
+  paint_controller.UpdateCurrentPaintChunkProperties(&chunk_id, properties);
+  DrawRect(context, item_client, kBackgroundType, IntRect(0, 0, 100, 100));
+  paint_controller.SetWillForceNewChunk(true);
+  paint_controller.UpdateCurrentPaintChunkProperties(&chunk_id, properties);
+  DrawRect(context, item_client, kBackgroundType, IntRect(0, 0, 100, 100));
+  paint_controller.EndSkippingCache();
+
+  CommitAndFinishCycle();
 
   EXPECT_THAT(paint_controller.GetDisplayItemList(),
               ElementsAre(IsSameId(&item_client, kBackgroundType),
@@ -1704,15 +1590,15 @@
 TEST_P(PaintControllerTest, SmallPaintControllerHasOnePaintChunk) {
   FakeDisplayItemClient client("test client");
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    GraphicsContext context(GetPaintController());
-    DrawRect(context, client, kBackgroundType, IntRect(0, 0, 100, 100));
-  }
+  InitRootChunk();
+  GraphicsContext context(GetPaintController());
+  DrawRect(context, client, kBackgroundType, IntRect(0, 0, 100, 100));
+
+  CommitAndFinishCycle();
   EXPECT_THAT(GetPaintController().PaintChunks(),
               ElementsAre(IsPaintChunk(0, 1)));
 }
+
 void DrawPath(GraphicsContext& context,
               DisplayItemClient& client,
               DisplayItem::Type type,
@@ -1785,17 +1671,15 @@
   FakeDisplayItemClient fourth("fourth");
   GraphicsContext context(GetPaintController());
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
-    DrawRect(context, third, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, fourth, kBackgroundType, IntRect(100, 100, 50, 50));
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
+  DrawRect(context, third, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, fourth, kBackgroundType, IntRect(100, 100, 50, 50));
 
-    EXPECT_EQ(0u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
-  }
+  EXPECT_EQ(0u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
+  CommitAndFinishCycle();
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
                           IsSameId(&second, kBackgroundType),
@@ -1808,21 +1692,20 @@
 
   // Simulate that a composited scrolling element is scrolled down, and "first"
   // and "second" are scrolled out of the interest rect.
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, third, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, fourth, kBackgroundType, IntRect(100, 100, 50, 50));
+  InitRootChunk();
+  DrawRect(context, third, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, fourth, kBackgroundType, IntRect(100, 100, 50, 50));
 
-    EXPECT_EQ(2u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(2u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    // We indexed "first" and "second" when finding the cached item for "third".
-    EXPECT_EQ(2u, NumIndexedItems());
-    EXPECT_EQ(2u, NumSequentialMatches());
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
+  // We indexed "first" and "second" when finding the cached item for "third".
+  EXPECT_EQ(2u, NumIndexedItems());
+  EXPECT_EQ(2u, NumSequentialMatches());
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
 #endif
-  }
+
+  CommitAndFinishCycle();
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&third, kBackgroundType),
                           IsSameId(&fourth, kBackgroundType)));
@@ -1832,23 +1715,22 @@
   EXPECT_TRUE(fourth.IsValid());
 
   // Simulate "first" and "second" are scrolled back into the interest rect.
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
-    DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
-    DrawRect(context, third, kBackgroundType, IntRect(100, 100, 100, 100));
-    DrawRect(context, fourth, kBackgroundType, IntRect(100, 100, 50, 50));
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(100, 100, 300, 300));
+  DrawRect(context, second, kBackgroundType, IntRect(100, 100, 200, 200));
+  DrawRect(context, third, kBackgroundType, IntRect(100, 100, 100, 100));
+  DrawRect(context, fourth, kBackgroundType, IntRect(100, 100, 50, 50));
 
-    EXPECT_EQ(2u, NumCachedNewItems());
-    EXPECT_EQ(0u, NumCachedNewSubsequences());
+  EXPECT_EQ(2u, NumCachedNewItems());
+  EXPECT_EQ(0u, NumCachedNewSubsequences());
 #if DCHECK_IS_ON()
-    // We indexed "third" and "fourth" when finding the cached item for "first".
-    EXPECT_EQ(2u, NumIndexedItems());
-    EXPECT_EQ(2u, NumSequentialMatches());
-    EXPECT_EQ(0u, NumOutOfOrderMatches());
+  // We indexed "third" and "fourth" when finding the cached item for "first".
+  EXPECT_EQ(2u, NumIndexedItems());
+  EXPECT_EQ(2u, NumSequentialMatches());
+  EXPECT_EQ(0u, NumOutOfOrderMatches());
 #endif
-  }
+
+  CommitAndFinishCycle();
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&first, kBackgroundType),
                           IsSameId(&second, kBackgroundType),
@@ -1885,28 +1767,25 @@
   EXPECT_TRUE(cacheable.IsCacheable());
   EXPECT_FALSE(uncacheable.IsCacheable());
 
+  InitRootChunk();
   {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    {
-      SubsequenceRecorder recorder(context, cacheable);
-      DrawRect(context, cacheable, kBackgroundType, IntRect(r));
-      DrawRect(context, uncacheable, kBackgroundType, IntRect(r));
-      // This should not trigger the duplicated id assert.
-      DrawRect(context, uncacheable, kBackgroundType, IntRect(r));
-    }
+    SubsequenceRecorder recorder(context, cacheable);
+    DrawRect(context, cacheable, kBackgroundType, IntRect(r));
+    DrawRect(context, uncacheable, kBackgroundType, IntRect(r));
+    // This should not trigger the duplicated id assert.
+    DrawRect(context, uncacheable, kBackgroundType, IntRect(r));
   }
+
+  CommitAndFinishCycle();
   EXPECT_TRUE(GetPaintController().GetDisplayItemList()[0].IsCacheable());
   EXPECT_FALSE(GetPaintController().GetDisplayItemList()[1].IsCacheable());
   EXPECT_FALSE(GetPaintController().GetDisplayItemList()[2].IsCacheable());
   EXPECT_TRUE(cacheable.IsCacheable());
   EXPECT_FALSE(uncacheable.IsCacheable());
 
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    EXPECT_TRUE(GetPaintController().UseCachedSubsequenceIfPossible(cacheable));
-  }
+  InitRootChunk();
+  EXPECT_TRUE(GetPaintController().UseCachedSubsequenceIfPossible(cacheable));
+  CommitAndFinishCycle();
   EXPECT_TRUE(GetPaintController().GetDisplayItemList()[0].IsCacheable());
   EXPECT_FALSE(GetPaintController().GetDisplayItemList()[1].IsCacheable());
   EXPECT_FALSE(GetPaintController().GetDisplayItemList()[2].IsCacheable());
@@ -1919,22 +1798,19 @@
 
 TEST_P(PaintControllerTest, DuplicatedSubsequences) {
   FakeDisplayItemClient client("test");
-  PaintController& controller = GetPaintController();
-  GraphicsContext context(controller);
+  GraphicsContext context(GetPaintController());
 
   auto paint_duplicated_subsequences = [&]() {
+    InitRootChunk();
     {
-      CommitCycleScope cycle_scope(controller);
-      InitRootChunk();
-      {
-        SubsequenceRecorder r(context, client);
-        DrawRect(context, client, kBackgroundType, IntRect(100, 100, 100, 100));
-      }
-      {
-        SubsequenceRecorder r(context, client);
-        DrawRect(context, client, kForegroundType, IntRect(100, 100, 100, 100));
-      }
+      SubsequenceRecorder r(context, client);
+      DrawRect(context, client, kBackgroundType, IntRect(100, 100, 100, 100));
     }
+    {
+      SubsequenceRecorder r(context, client);
+      DrawRect(context, client, kForegroundType, IntRect(100, 100, 100, 100));
+    }
+    CommitAndFinishCycle();
   };
 
 #if DCHECK_IS_ON()
@@ -1942,29 +1818,27 @@
                "Multiple subsequences for client: \"test\"");
 #else
   // The following is for non-DCHECK path. No security CHECK should trigger.
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    paint_duplicated_subsequences();
-    // Paint again.
-    InitRootChunk();
-    if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
-      EXPECT_FALSE(GetPaintController().UseCachedSubsequenceIfPossible(client));
-      SubsequenceRecorder r(context, client);
-      DrawRect(context, client, kBackgroundType, IntRect(100, 100, 100, 100));
-    } else {
-      EXPECT_TRUE(GetPaintController().UseCachedSubsequenceIfPossible(client));
-    }
-    {
-      // Should not use the cached duplicated subsequence.
-      EXPECT_FALSE(GetPaintController().UseCachedSubsequenceIfPossible(client));
-      SubsequenceRecorder r(context, client);
-      DrawRect(context, client, kForegroundType, IntRect(100, 100, 100, 100));
-    }
+  paint_duplicated_subsequences();
+  // Paint again.
+  InitRootChunk();
+  if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled()) {
+    EXPECT_FALSE(GetPaintController().UseCachedSubsequenceIfPossible(client));
+    SubsequenceRecorder r(context, client);
+    DrawRect(context, client, kBackgroundType, IntRect(100, 100, 100, 100));
+  } else {
+    EXPECT_TRUE(GetPaintController().UseCachedSubsequenceIfPossible(client));
   }
+  {
+    // Should not use the cached duplicated subsequence.
+    EXPECT_FALSE(GetPaintController().UseCachedSubsequenceIfPossible(client));
+    SubsequenceRecorder r(context, client);
+    DrawRect(context, client, kForegroundType, IntRect(100, 100, 100, 100));
+  }
+  CommitAndFinishCycle();
 #endif
 }
 
-TEST_P(PaintControllerTest, DeletedClientInUnderInvalidatedSubsequence) {
+TEST_P(PaintControllerTest, DeletedClientInUnderInvaldiatedSubsequence) {
   if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled())
     return;
 
@@ -1972,30 +1846,26 @@
   auto content = std::make_unique<FakeDisplayItemClient>("content");
   GraphicsContext context(GetPaintController());
 
+  InitRootChunk();
   {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    {
-      SubsequenceRecorder r(context, container);
-      DrawRect(context, *content, kBackgroundType, IntRect(100, 100, 300, 300));
-    }
+    SubsequenceRecorder r(context, container);
+    DrawRect(context, *content, kBackgroundType, IntRect(100, 100, 300, 300));
   }
+  CommitAndFinishCycle();
 
   content = nullptr;
-  {
-    CommitCycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    // Leave container not invalidated.
+  InitRootChunk();
+  // Leave container not invalidated.
 #if DCHECK_IS_ON()
-    ASSERT_DEATH(
-        SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, container),
-        "");
+  ASSERT_DEATH(
+      SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, container),
+      "");
 #else
-    // This should not crash.
-    EXPECT_TRUE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(context,
-                                                                    container));
+  // This should not crash.
+  EXPECT_TRUE(
+      SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, container));
+  CommitAndFinishCycle();
 #endif
-  }
 }
 
 #endif  // defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_controller_test.h b/third_party/blink/renderer/platform/graphics/paint/paint_controller_test.h
index f8839d0..ca7223d5 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_controller_test.h
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_controller_test.h
@@ -80,6 +80,11 @@
 
   void InvalidateAll() { paint_controller_->InvalidateAllForTesting(); }
 
+  void CommitAndFinishCycle() {
+    paint_controller_->CommitNewDisplayItems();
+    paint_controller_->FinishCycle();
+  }
+
   using SubsequenceMarkers = PaintController::SubsequenceMarkers;
   const SubsequenceMarkers* GetSubsequenceMarkers(
       const DisplayItemClient& client) {
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.cc b/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.cc
index a161110e..bfb86a5 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.cc
@@ -20,13 +20,16 @@
 }
 
 PaintRecordBuilder::PaintRecordBuilder(PaintController& paint_controller)
-    : paint_controller_(&paint_controller), context_(*paint_controller_) {}
+    : paint_controller_(&paint_controller), context_(*paint_controller_) {
+  paint_controller.ReserveCapacity();
+}
 
 PaintRecordBuilder::~PaintRecordBuilder() = default;
 
 sk_sp<PaintRecord> PaintRecordBuilder::EndRecording(
     const PropertyTreeState& replay_state) {
   paint_controller_->CommitNewDisplayItems();
+  paint_controller_->FinishCycle();
   return paint_controller_->GetPaintArtifact().GetPaintRecord(replay_state);
 }
 
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_record_builder_test.cc b/third_party/blink/renderer/platform/graphics/paint/paint_record_builder_test.cc
index c7829348..efd5eb3cc 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_record_builder_test.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_record_builder_test.cc
@@ -36,40 +36,34 @@
 }
 
 TEST_F(PaintRecordBuilderTest, LastingPaintController) {
-  FakeDisplayItemClient client("client");
+  InitRootChunk();
+
   PaintRecordBuilder builder(GetPaintController());
   auto& context = builder.Context();
+  EXPECT_EQ(&context.GetPaintController(), &GetPaintController());
+
+  FakeDisplayItemClient client("client");
+  DrawRect(context, client, kBackgroundType, IntRect(10, 10, 20, 20));
+  DrawRect(context, client, kForegroundType, IntRect(15, 15, 10, 10));
+  EXPECT_FALSE(ClientCacheIsValid(client));
+
   MockPaintCanvas canvas;
   PaintFlags flags;
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-
-    EXPECT_EQ(&context.GetPaintController(), &GetPaintController());
-
-    DrawRect(context, client, kBackgroundType, IntRect(10, 10, 20, 20));
-    DrawRect(context, client, kForegroundType, IntRect(15, 15, 10, 10));
-    EXPECT_FALSE(ClientCacheIsValid(client));
-
-    EXPECT_CALL(canvas, drawPicture(_)).Times(1);
-    builder.EndRecording(canvas);
-  }
+  EXPECT_CALL(canvas, drawPicture(_)).Times(1);
+  builder.EndRecording(canvas);
   EXPECT_TRUE(ClientCacheIsValid(client));
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&client, kBackgroundType),
                           IsSameId(&client, kForegroundType)));
 
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, client,
-                                                            kBackgroundType));
-    EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, client,
-                                                            kForegroundType));
-    EXPECT_CALL(canvas, drawPicture(_)).Times(1);
-    builder.EndRecording(canvas);
-  }
+  InitRootChunk();
+  EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, client,
+                                                          kBackgroundType));
+  EXPECT_TRUE(DrawingRecorder::UseCachedDrawingIfPossible(context, client,
+                                                          kForegroundType));
+  EXPECT_CALL(canvas, drawPicture(_)).Times(1);
+  builder.EndRecording(canvas);
 
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&client, kBackgroundType),
@@ -79,27 +73,21 @@
 
 TEST_F(PaintRecordBuilderTest, TransientAndAnotherPaintController) {
   GraphicsContext context(GetPaintController());
+
+  InitRootChunk();
   FakeDisplayItemClient client("client");
-  PaintRecordBuilder builder;
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, client, kBackgroundType, IntRect(10, 10, 20, 20));
-    DrawRect(context, client, kForegroundType, IntRect(15, 15, 10, 10));
-    GetPaintController().CommitNewDisplayItems();
-  }
+  DrawRect(context, client, kBackgroundType, IntRect(10, 10, 20, 20));
+  DrawRect(context, client, kForegroundType, IntRect(15, 15, 10, 10));
+  CommitAndFinishCycle();
   EXPECT_THAT(GetPaintController().GetDisplayItemList(),
               ElementsAre(IsSameId(&client, kBackgroundType),
                           IsSameId(&client, kForegroundType)));
   EXPECT_TRUE(ClientCacheIsValid(client));
 
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    EXPECT_NE(&builder.Context().GetPaintController(), &GetPaintController());
-    DrawRect(builder.Context(), client, kBackgroundType,
-             IntRect(10, 10, 20, 20));
-    builder.EndRecording();
-  }
+  PaintRecordBuilder builder;
+  EXPECT_NE(&builder.Context().GetPaintController(), &GetPaintController());
+  DrawRect(builder.Context(), client, kBackgroundType, IntRect(10, 10, 20, 20));
+  builder.EndRecording();
 
   // The transient PaintController in PaintRecordBuilder doesn't affect the
   // client's cache status in another PaintController.
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_under_invalidation_checker_test.cc b/third_party/blink/renderer/platform/graphics/paint/paint_under_invalidation_checker_test.cc
index f93aba6..1b22a95 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_under_invalidation_checker_test.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_under_invalidation_checker_test.cc
@@ -29,21 +29,15 @@
     FakeDisplayItemClient first("first");
     GraphicsContext context(GetPaintController());
 
-    {
-      PaintController::CycleScope cycle_scope(GetPaintController());
-      InitRootChunk();
-      DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
-      DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
-      GetPaintController().CommitNewDisplayItems();
-    }
+    InitRootChunk();
+    DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
+    DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
+    CommitAndFinishCycle();
 
-    {
-      PaintController::CycleScope cycle_scope(GetPaintController());
-      InitRootChunk();
-      DrawRect(context, first, kBackgroundType, IntRect(2, 2, 3, 3));
-      DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
-      GetPaintController().CommitNewDisplayItems();
-    }
+    InitRootChunk();
+    DrawRect(context, first, kBackgroundType, IntRect(2, 2, 3, 3));
+    DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
+    CommitAndFinishCycle();
   };
 
   EXPECT_DEATH(test(),
@@ -61,20 +55,14 @@
   FakeDisplayItemClient first("first");
   GraphicsContext context(GetPaintController());
 
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
-    GetPaintController().CommitNewDisplayItems();
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
+  CommitAndFinishCycle();
 
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
-    DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
-    GetPaintController().CommitNewDisplayItems();
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
+  DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
+  CommitAndFinishCycle();
 }
 
 TEST_F(PaintControllerUnderInvalidationTest, LessDrawing) {
@@ -83,49 +71,37 @@
   FakeDisplayItemClient first("first");
   GraphicsContext context(GetPaintController());
 
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
-    DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
-    GetPaintController().CommitNewDisplayItems();
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
+  DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
+  CommitAndFinishCycle();
 
-  {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
-    GetPaintController().CommitNewDisplayItems();
-  }
+  InitRootChunk();
+  DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
+  CommitAndFinishCycle();
 }
 
 TEST_F(PaintControllerUnderInvalidationTest, ChangeDrawingInSubsequence) {
   auto test = [&]() {
     FakeDisplayItemClient first("first");
     GraphicsContext context(GetPaintController());
+    InitRootChunk();
     {
-      PaintController::CycleScope cycle_scope(GetPaintController());
-      InitRootChunk();
-      {
-        SubsequenceRecorder r(context, first);
-        DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
-        DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
-      }
-      GetPaintController().CommitNewDisplayItems();
+      SubsequenceRecorder r(context, first);
+      DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
+      DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
     }
+    CommitAndFinishCycle();
 
+    InitRootChunk();
     {
-      PaintController::CycleScope cycle_scope(GetPaintController());
-      InitRootChunk();
-      {
-        EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-            context, first));
-        SubsequenceRecorder r(context, first);
-        DrawRect(context, first, kBackgroundType, IntRect(2, 2, 1, 1));
-        DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
-      }
-      GetPaintController().CommitNewDisplayItems();
+      EXPECT_FALSE(
+          SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, first));
+      SubsequenceRecorder r(context, first);
+      DrawRect(context, first, kBackgroundType, IntRect(2, 2, 1, 1));
+      DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
     }
+    CommitAndFinishCycle();
   };
 
   EXPECT_DEATH(test(),
@@ -143,28 +119,22 @@
     FakeDisplayItemClient first("first");
     GraphicsContext context(GetPaintController());
 
+    InitRootChunk();
     {
-      PaintController::CycleScope cycle_scope(GetPaintController());
-      InitRootChunk();
-      {
-        SubsequenceRecorder r(context, first);
-        DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
-      }
-      GetPaintController().CommitNewDisplayItems();
+      SubsequenceRecorder r(context, first);
+      DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
     }
+    CommitAndFinishCycle();
 
+    InitRootChunk();
     {
-      PaintController::CycleScope cycle_scope(GetPaintController());
-      InitRootChunk();
-      {
-        EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-            context, first));
-        SubsequenceRecorder r(context, first);
-        DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
-        DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
-      }
-      GetPaintController().CommitNewDisplayItems();
+      EXPECT_FALSE(
+          SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, first));
+      SubsequenceRecorder r(context, first);
+      DrawRect(context, first, kBackgroundType, IntRect(1, 1, 1, 1));
+      DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
     }
+    CommitAndFinishCycle();
   };
 
   EXPECT_DEATH(test(),
@@ -181,28 +151,22 @@
     FakeDisplayItemClient first("first");
     GraphicsContext context(GetPaintController());
 
+    InitRootChunk();
     {
-      PaintController::CycleScope cycle_scope(GetPaintController());
-      InitRootChunk();
-      {
-        SubsequenceRecorder r(context, first);
-        DrawRect(context, first, kBackgroundType, IntRect(1, 1, 3, 3));
-        DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
-      }
-      GetPaintController().CommitNewDisplayItems();
+      SubsequenceRecorder r(context, first);
+      DrawRect(context, first, kBackgroundType, IntRect(1, 1, 3, 3));
+      DrawRect(context, first, kForegroundType, IntRect(1, 1, 3, 3));
     }
+    CommitAndFinishCycle();
 
+    InitRootChunk();
     {
-      PaintController::CycleScope cycle_scope(GetPaintController());
-      InitRootChunk();
-      {
-        EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-            context, first));
-        SubsequenceRecorder r(context, first);
-        DrawRect(context, first, kBackgroundType, IntRect(1, 1, 3, 3));
-      }
-      GetPaintController().CommitNewDisplayItems();
+      EXPECT_FALSE(
+          SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, first));
+      SubsequenceRecorder r(context, first);
+      DrawRect(context, first, kBackgroundType, IntRect(1, 1, 3, 3));
     }
+    CommitAndFinishCycle();
   };
 
   EXPECT_DEATH(test(),
@@ -218,29 +182,23 @@
   FakeDisplayItemClient content("content");
   GraphicsContext context(GetPaintController());
 
+  InitRootChunk();
   {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    {
-      SubsequenceRecorder r(context, container);
-      DrawRect(context, content, kBackgroundType, IntRect(1, 1, 3, 3));
-    }
-    GetPaintController().CommitNewDisplayItems();
+    SubsequenceRecorder r(context, container);
+    DrawRect(context, content, kBackgroundType, IntRect(1, 1, 3, 3));
   }
+  CommitAndFinishCycle();
 
   content.Invalidate();
+  InitRootChunk();
+  // Leave container not invalidated.
   {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    // Leave container not invalidated.
-    {
-      EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, container));
-      SubsequenceRecorder r(context, container);
-      DrawRect(context, content, kBackgroundType, IntRect(1, 1, 3, 3));
-    }
-    GetPaintController().CommitNewDisplayItems();
+    EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container));
+    SubsequenceRecorder r(context, container);
+    DrawRect(context, content, kBackgroundType, IntRect(1, 1, 3, 3));
   }
+  CommitAndFinishCycle();
 }
 
 TEST_F(PaintControllerUnderInvalidationTest, SubsequenceBecomesEmpty) {
@@ -248,26 +206,20 @@
     FakeDisplayItemClient target("target");
     GraphicsContext context(GetPaintController());
 
+    InitRootChunk();
     {
-      PaintController::CycleScope cycle_scope(GetPaintController());
-      InitRootChunk();
-      {
-        SubsequenceRecorder r(context, target);
-        DrawRect(context, target, kBackgroundType, IntRect(1, 1, 3, 3));
-      }
-      GetPaintController().CommitNewDisplayItems();
+      SubsequenceRecorder r(context, target);
+      DrawRect(context, target, kBackgroundType, IntRect(1, 1, 3, 3));
     }
+    CommitAndFinishCycle();
 
+    InitRootChunk();
     {
-      PaintController::CycleScope cycle_scope(GetPaintController());
-      InitRootChunk();
-      {
-        EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-            context, target));
-        SubsequenceRecorder r(context, target);
-      }
-      GetPaintController().CommitNewDisplayItems();
+      EXPECT_FALSE(
+          SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, target));
+      SubsequenceRecorder r(context, target);
     }
+    CommitAndFinishCycle();
   };
 
   EXPECT_DEATH(test(),
@@ -280,35 +232,29 @@
   FakeDisplayItemClient content("content");
   GraphicsContext context(GetPaintController());
 
+  InitRootChunk();
   {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+    SubsequenceRecorder r(context, container);
     {
-      SubsequenceRecorder r(context, container);
-      {
-        DisplayItemCacheSkipper cache_skipper(context);
-        DrawRect(context, content, kBackgroundType, IntRect(1, 1, 3, 3));
-      }
-      DrawRect(context, content, kForegroundType, IntRect(2, 2, 4, 4));
+      DisplayItemCacheSkipper cache_skipper(context);
+      DrawRect(context, content, kBackgroundType, IntRect(1, 1, 3, 3));
     }
-    GetPaintController().CommitNewDisplayItems();
+    DrawRect(context, content, kForegroundType, IntRect(2, 2, 4, 4));
   }
+  CommitAndFinishCycle();
 
+  InitRootChunk();
   {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
+    EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container));
+    SubsequenceRecorder r(context, container);
     {
-      EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, container));
-      SubsequenceRecorder r(context, container);
-      {
-        DisplayItemCacheSkipper cache_skipper(context);
-        DrawRect(context, content, kBackgroundType, IntRect(2, 2, 4, 4));
-      }
-      DrawRect(context, content, kForegroundType, IntRect(2, 2, 4, 4));
+      DisplayItemCacheSkipper cache_skipper(context);
+      DrawRect(context, content, kBackgroundType, IntRect(2, 2, 4, 4));
     }
-    GetPaintController().CommitNewDisplayItems();
+    DrawRect(context, content, kForegroundType, IntRect(2, 2, 4, 4));
   }
+  CommitAndFinishCycle();
 }
 
 TEST_F(PaintControllerUnderInvalidationTest,
@@ -317,33 +263,27 @@
   FakeDisplayItemClient content("content");
   GraphicsContext context(GetPaintController());
 
+  InitRootChunk();
   {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    {
-      SubsequenceRecorder r(context, container);
-      DrawRect(context, container, kBackgroundType, IntRect(1, 1, 3, 3));
-      { SubsequenceRecorder r1(context, content); }
-      DrawRect(context, container, kForegroundType, IntRect(1, 1, 3, 3));
-    }
-    GetPaintController().CommitNewDisplayItems();
+    SubsequenceRecorder r(context, container);
+    DrawRect(context, container, kBackgroundType, IntRect(1, 1, 3, 3));
+    { SubsequenceRecorder r1(context, content); }
+    DrawRect(context, container, kForegroundType, IntRect(1, 1, 3, 3));
   }
+  CommitAndFinishCycle();
 
+  InitRootChunk();
   {
-    PaintController::CycleScope cycle_scope(GetPaintController());
-    InitRootChunk();
-    {
-      EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, container));
-      SubsequenceRecorder r(context, container);
-      DrawRect(context, container, kBackgroundType, IntRect(1, 1, 3, 3));
-      EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
-          context, content));
-      { SubsequenceRecorder r1(context, content); }
-      DrawRect(context, container, kForegroundType, IntRect(1, 1, 3, 3));
-    }
-    GetPaintController().CommitNewDisplayItems();
+    EXPECT_FALSE(SubsequenceRecorder::UseCachedSubsequenceIfPossible(
+        context, container));
+    SubsequenceRecorder r(context, container);
+    DrawRect(context, container, kBackgroundType, IntRect(1, 1, 3, 3));
+    EXPECT_FALSE(
+        SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, content));
+    { SubsequenceRecorder r1(context, content); }
+    DrawRect(context, container, kForegroundType, IntRect(1, 1, 3, 3));
   }
+  CommitAndFinishCycle();
 }
 
 #endif  // defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
diff --git a/third_party/blink/renderer/platform/graphics/paint/subsequence_recorder.h b/third_party/blink/renderer/platform/graphics/paint/subsequence_recorder.h
index 9781d7e9..b8a22435 100644
--- a/third_party/blink/renderer/platform/graphics/paint/subsequence_recorder.h
+++ b/third_party/blink/renderer/platform/graphics/paint/subsequence_recorder.h
@@ -37,7 +37,6 @@
   SubsequenceRecorder(GraphicsContext& context, const DisplayItemClient& client)
       : paint_controller_(context.GetPaintController()) {
     subsequence_index_ = paint_controller_.BeginSubsequence(client);
-    paint_controller_.MarkClientForValidation(client);
   }
 
   SubsequenceRecorder(const SubsequenceRecorder&) = delete;
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 725540df..ca05187 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -2398,7 +2398,7 @@
     },
     {
       name: "WebCodecs",
-      status: "experimental",
+      status: "stable",
       origin_trial_feature_name: "WebCodecs"
     },
     {
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
index 870326a..fb073475 100755
--- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
+++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
@@ -1330,7 +1330,6 @@
             'third_party/blink/renderer/core/paint/outline_painter.cc',
             'third_party/blink/renderer/core/paint/theme_painter.cc',
             'third_party/blink/renderer/core/paint/theme_painter_default.cc',
-            'third_party/blink/renderer/core/style/computed_style.cc',
         ],
         'allowed': ['ui::NativeTheme.*', 'ui::color_utils.*'],
     },
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests
index f72d212..11ce8b0 100644
--- a/third_party/blink/web_tests/NeverFixTests
+++ b/third_party/blink/web_tests/NeverFixTests
@@ -1486,6 +1486,10 @@
 external/wpt/speech-api/SpeechRecognition-onerror-manual.https.html [ Skip ]
 external/wpt/speech-api/SpeechRecognition-onresult-manual.https.html [ Skip ]
 external/wpt/speech-api/SpeechRecognition-stop-manual.https.html [ Skip ]
+external/wpt/svg/interact/manual/event-attribute-001-manual.svg [ Skip ]
+external/wpt/svg/path/bearing/zero.svg [ Skip ]
+external/wpt/svg/path/bearing/relative.svg [ Skip ]
+external/wpt/svg/path/bearing/absolute.svg [ Skip ]
 external/wpt/uievents/interface/click-event-manual.htm [ Skip ]
 external/wpt/uievents/interface/dblclick-event-manual.htm [ Skip ]
 external/wpt/uievents/keyboard/key-101en-us-manual.html [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 6d196db..1caf253 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -390,6 +390,31 @@
 # Fails, at a minimum, due to lack of support for CSS mask property in html elements
 crbug.com/432153 external/wpt/svg/painting/reftests/display-none-mask.html [ Skip ]
 
+# WPT SVG Tests failing. Have not been investigated in all cases.
+crbug.com/1184034 external/wpt/svg/linking/reftests/href-filter-element.html [ Failure ]
+crbug.com/366559 external/wpt/svg/shapes/reftests/pathlength-003.svg [ Failure ]
+crbug.com/366559 external/wpt/svg/text/reftests/textpath-side-001.svg [ Failure ]
+crbug.com/366559 external/wpt/svg/text/reftests/textpath-shape-001.svg [ Failure ]
+crbug.com/803360 external/wpt/svg/path/closepath/segment-completing.svg [ Failure ]
+crbug.com/1177540 external/wpt/svg/text/reftests/text-text-anchor-001.svg [ Failure ]
+crbug.com/1177540 external/wpt/svg/text/reftests/text-text-anchor-201.svg [ Failure ]
+crbug.com/1177540 external/wpt/svg/text/reftests/text-text-anchor-202.svg [ Failure ]
+crbug.com/1177540 external/wpt/svg/text/reftests/text-text-anchor-102.svg [ Failure ]
+crbug.com/1177540 external/wpt/svg/text/reftests/text-text-anchor-002.svg [ Failure ]
+crbug.com/1177540 external/wpt/svg/text/reftests/text-text-anchor-203.svg [ Failure ]
+crbug.com/1177540 external/wpt/svg/text/reftests/text-text-anchor-003.svg [ Failure ]
+crbug.com/670177 external/wpt/svg/rendering/order/z-index.svg [ Failure ]
+crbug.com/863355 [ Mac ] external/wpt/svg/shapes/reftests/pathlength-002.svg [ Failure ]
+crbug.com/1052202 external/wpt/svg/linking/scripted/href-mpath-element.html [ Timeout ]
+crbug.com/1052202 external/wpt/svg/linking/scripted/href-animate-element.html [ Timeout ]
+crbug.com/1222395 external/wpt/svg/path/property/mpath.svg [ Failure ]
+crbug.com/785246 external/wpt/svg/struct/reftests/use-inheritance-001.svg [ Failure ]
+crbug.com/785246 external/wpt/svg/linking/reftests/use-descendant-combinator-003.html [ Failure ]
+crbug.com/674797 external/wpt/svg/painting/reftests/marker-path-022.svg [ Failure ]
+crbug.com/674797 external/wpt/svg/painting/reftests/marker-path-023.svg [ Failure ]
+
+crbug.com/699040 external/wpt/svg/text/reftests/text-xml-space-001.svg [ Failure ]
+
 # ==== Regressions introduced by BlinkGenPropertyTrees =====
 # Reflection / mask ordering issue
 crbug.com/767318 compositing/reflections/nested-reflection-mask-change.html [ Failure ]
@@ -597,16 +622,6 @@
 crbug.com/1044742 [ Linux ] external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-text.html [ Failure ]
 crbug.com/1044742 [ Linux ] external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-mask.html [ Failure ]
 
-crbug.com/1052202 external/wpt/svg/linking/scripted/href-mpath-element.html [ Timeout ]
-crbug.com/1052202 external/wpt/svg/linking/scripted/href-animate-element.html [ Timeout ]
-crbug.com/1222395 external/wpt/svg/path/property/mpath.svg [ Failure ]
-
-crbug.com/785246 external/wpt/svg/struct/reftests/use-inheritance-001.svg [ Failure ]
-crbug.com/785246 external/wpt/svg/linking/reftests/use-descendant-combinator-003.html [ Failure ]
-
-crbug.com/674797 external/wpt/svg/painting/reftests/marker-path-022.svg [ Failure ]
-crbug.com/674797 external/wpt/svg/painting/reftests/marker-path-023.svg [ Failure ]
-
 # Minor pixel differences
 crbug.com/1056492 external/wpt/svg/painting/reftests/marker-path-001.svg [ Failure ]
 
@@ -1739,7 +1754,6 @@
 # crbug.com/1095379: These fail with a timeout, even when they're given extra time (via SlowTests)
 crbug.com/846656 external/wpt/css/selectors/focus-visible-002.html [ Pass Timeout ]
 crbug.com/1097094 external/wpt/window-segments/getWindowSegments-iframes.tentative.sub.html [ Pass Timeout ]
-crbug.com/1018064 [ Mac ] virtual/threaded/http/tests/devtools/tracing/timeline-js/timeline-js-line-level-profile-end-to-end.js [ Pass Timeout ]
 crbug.com/1034789 [ Mac ] http/tests/security/frameNavigation/xss-ALLOWED-parent-navigation-change-async.html [ Pass Timeout ]
 crbug.com/1105957 [ Debug Linux ] fast/dom/cssTarget-crash.html [ Pass Timeout ]
 crbug.com/915903 http/tests/security/inactive-document-with-empty-security-origin.html [ Pass Timeout ]
@@ -2649,8 +2663,6 @@
 # ====== New tests from wpt-importer added here ======
 crbug.com/626703 [ Mac10.14 ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/valid-image-after-load.https.html [ Failure ]
 crbug.com/626703 [ Mac11.0 ] virtual/threaded/external/wpt/animation-worklet/worklet-animation-local-time-null-2.https.html [ Failure ]
-crbug.com/626703 [ Mac10.15 ] external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html [ Timeout ]
-crbug.com/626703 [ Mac10.14 ] external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html [ Timeout ]
 crbug.com/626703 [ Mac10.15 ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/invalid-image-paint-error.https.html [ Failure ]
 crbug.com/626703 external/wpt/geolocation-API/non-fully-active.https.html [ Timeout ]
 crbug.com/626703 [ Mac10.14 ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/invalid-image-paint-error.https.html [ Failure ]
@@ -3350,7 +3362,6 @@
 crbug.com/626703 [ Mac ] external/wpt/css/css-fonts/font-family-name-025.html [ Failure ]
 crbug.com/1004760 [ Mac ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Timeout ]
 crbug.com/626703 external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html [ Timeout ]
-crbug.com/699040 external/wpt/svg/text/reftests/text-xml-space-001.svg [ Failure ]
 crbug.com/626703 external/wpt/css/css-sizing/slice-intrinsic-size.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-sizing/clone-intrinsic-size.html [ Failure ]
 crbug.com/626703 [ Mac10.12 ] external/wpt/preload/download-resources.html [ Failure Timeout ]
@@ -3421,14 +3432,7 @@
 crbug.com/626703 external/wpt/payment-method-basic-card/steps_for_selecting_the_payment_handler.html [ Timeout ]
 crbug.com/626703 external/wpt/payment-method-basic-card/apply_the_modifiers.html [ Timeout ]
 crbug.com/626703 external/wpt/html/rendering/non-replaced-elements/tables/table-border-3s.html [ Failure ]
-crbug.com/626703 external/wpt/svg/text/reftests/text-text-anchor-001.svg [ Failure ]
-crbug.com/626703 external/wpt/svg/text/reftests/text-text-anchor-201.svg [ Failure ]
 crbug.com/626703 external/wpt/html/rendering/non-replaced-elements/tables/table-border-3q.html [ Failure ]
-crbug.com/626703 external/wpt/svg/text/reftests/text-text-anchor-202.svg [ Failure ]
-crbug.com/626703 external/wpt/svg/text/reftests/text-text-anchor-102.svg [ Failure ]
-crbug.com/626703 external/wpt/svg/text/reftests/text-text-anchor-002.svg [ Failure ]
-crbug.com/626703 external/wpt/svg/text/reftests/text-text-anchor-203.svg [ Failure ]
-crbug.com/626703 external/wpt/svg/text/reftests/text-text-anchor-003.svg [ Failure ]
 crbug.com/626703 external/wpt/screen-orientation/onchange-event.html [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/forms/the-fieldset-element/accessibility/fieldset-div-display-contents-manual.html [ Skip ]
 crbug.com/626703 external/wpt/html/semantics/forms/the-fieldset-element/accessibility/role-manual.html [ Skip ]
@@ -3465,7 +3469,6 @@
 crbug.com/626703 external/wpt/css/css-values/ic-unit-008.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-values/ic-unit-012.html [ Failure ]
 crbug.com/626703 external/wpt/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html [ Timeout ]
-crbug.com/626703 external/wpt/svg/interact/manual/event-attribute-001-manual.svg [ Skip ]
 crbug.com/626703 external/wpt/css/CSS2/text/white-space-nowrap-attribute-001.xht [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/white-space/pre-wrap-012.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-text/white-space/pre-wrap-013.html [ Failure ]
@@ -3604,11 +3607,6 @@
 crbug.com/626703 external/wpt/css/css-lists/content-property/marker-text-matches-square.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-lists/content-property/marker-text-matches-circle.html [ Failure ]
 crbug.com/626703 external/wpt/content-security-policy/securitypolicyviolation/targeting.html [ Timeout ]
-crbug.com/863355 [ Mac ] external/wpt/svg/shapes/reftests/pathlength-002.svg [ Failure ]
-crbug.com/366559 external/wpt/svg/shapes/reftests/pathlength-003.svg [ Failure ]
-crbug.com/366559 external/wpt/svg/text/reftests/textpath-side-001.svg [ Failure ]
-crbug.com/366559 external/wpt/svg/text/reftests/textpath-shape-001.svg [ Failure ]
-crbug.com/626703 external/wpt/svg/rendering/order/z-index.svg [ Failure ]
 crbug.com/626703 external/wpt/web-animations/timing-model/timelines/update-and-send-events.html [ Failure ]
 crbug.com/626703 external/wpt/screen-orientation/orientation-reading.html [ Timeout ]
 crbug.com/626703 external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt-and-unload-script-closeable.html [ Failure ]
@@ -3674,15 +3672,11 @@
 crbug.com/626703 [ Mac ] external/wpt/css/css-writing-modes/mongolian-orientation-002.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-writing-modes/mongolian-orientation-001.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-ui/text-overflow-026.html [ Failure ]
-crbug.com/626703 external/wpt/svg/path/closepath/segment-completing.svg [ Failure ]
 crbug.com/626703 external/wpt/css/css-values/lh-unit-002.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-values/lh-unit-001.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-tables/fixup-dynamic-anonymous-inline-table-002.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-tables/fixup-dynamic-anonymous-table-001.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-tables/fixup-dynamic-anonymous-inline-table-001.html [ Failure ]
-crbug.com/626703 external/wpt/svg/path/bearing/zero.svg [ Failure ]
-crbug.com/626703 external/wpt/svg/path/bearing/relative.svg [ Failure ]
-crbug.com/626703 external/wpt/svg/path/bearing/absolute.svg [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-color/t422-rgba-onscreen-multiple-boxes-c.xht [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-color/t425-hsla-onscreen-multiple-boxes-c.xht [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-color/t425-hsla-onscreen-b.xht [ Failure ]
@@ -3756,7 +3750,6 @@
 crbug.com/626703 external/wpt/requestidlecallback/callback-timeout.html [ Timeout ]
 crbug.com/626703 external/wpt/requestidlecallback/callback-xhr-sync.html [ Timeout ]
 crbug.com/626703 external/wpt/screen-orientation/onchange-event-subframe.html [ Timeout ]
-crbug.com/626703 external/wpt/svg/linking/reftests/href-filter-element.html [ Failure ]
 crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/xhr/event-readystatechange-loaded.htm [ Failure Timeout ]
 crbug.com/626703 [ Win10.1909 ] external/wpt/preload/delaying-onload-link-preload-after-discovery.html [ Timeout ]
 crbug.com/626703 external/wpt/html/dom/elements/global-attributes/dir_auto-N-EN-ref.html [ Failure ]
@@ -4413,7 +4406,6 @@
 crbug.com/757165 [ Win ] fast/spatial-navigation/snav-z-index.html [ Crash Failure Pass Timeout ]
 crbug.com/757165 [ Win ] http/tests/devtools/console/console-filter-test.js [ Skip ]
 crbug.com/757165 [ Win ] http/tests/devtools/console/console-links-in-errors-with-trace.js [ Skip ]
-crbug.com/757165 [ Win ] http/tests/devtools/sources/ui-source-code-metadata.js [ Skip ]
 crbug.com/757165 [ Win ] http/tests/misc/client-hints-accept-meta-preloader.html [ Skip ]
 crbug.com/757165 [ Win ] paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child.html [ Skip ]
 crbug.com/757165 [ Win ] paint/invalidation/filters/filter-repaint-on-accelerated-layer.html [ Skip ]
@@ -4986,9 +4978,17 @@
 crbug.com/1207342 http/tests/devtools/console/console-revoke-error.js [ Failure Pass ]
 crbug.com/1207342 http/tests/devtools/a11y-axe-core/layers/layers-a11y-test.js [ Failure Pass ]
 crbug.com/1207342 http/tests/devtools/layers/layers-panel-mouse-events.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/layers/layer-scroll-rects-get.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/layers/wheel-hit-rects-update-svg.js [ Failure Pass ]
 crbug.com/1207342 http/tests/devtools/tracing/timeline-paint/paint-profiler-update.js [ Failure Pass ]
 crbug.com/1207342 http/tests/devtools/editor/text-editor-selection-to-search.js [ Failure Pass ]
 crbug.com/1207342 http/tests/devtools/network/network-search.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/security/interstitial-sidebar.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/security/mixed-content-sidebar.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/security/origin-view-ct-compliance.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/security/origin-view-noncryptographic-secure-origin.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/security/origin-view-then-interstitial.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/security/security-details-updated-with-security-state.js [ Failure Pass ]
 crbug.com/1207342 http/tests/devtools/security/blank-origins-not-shown.js [ Failure Pass ]
 crbug.com/1207342 http/tests/devtools/security/blocked-mixed-content.js [ Failure Pass ]
 crbug.com/1207342 http/tests/devtools/security/failed-request.js [ Failure Pass ]
@@ -4998,6 +4998,93 @@
 crbug.com/1207342 http/tests/devtools/security/security-blocked-mixed-content.js [ Failure Pass ]
 crbug.com/1207342 http/tests/devtools/security/security-explanation-ordering.js [ Failure Pass ]
 crbug.com/1207342 http/tests/devtools/security/security-unknown-resource.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-events.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-export.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-repeated-per-function.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-repeated.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-suspended-per-function.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-suspended.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-view-css-import.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-view-filter-per-function.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-view-filter.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-view-per-function.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-view-unused.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/coverage-view.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/decorations-after-script-formatter.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/gutter-css.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/gutter-html.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/gutter-js.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/multiple-instances-merge.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/coverage/reveal-autoformat.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/file-system-project.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/tabbed-editors-history.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/bindings/contentscripts-navigator-multiple-frames.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/bindings/dynamic-navigator-frame-attach-detach.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/bindings/jssourcemap-navigator-overlapping-sources.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/bindings/navigator-frame-attach-detach.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/bindings/navigator-frame-navigate.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/bindings/navigator-main-frame-navigated.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/bindings/navigator-multiple-frames.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/bindings/shadowdom-navigator.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/bindings/sourcemap-navigator-multiple-frames.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/bindings/suspendtarget-navigator.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/console/console-link-to-snippet.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/editor/text-editor-search-replace.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/elements/styles/selector-line-sourcemap-header.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/elements/styles/selector-line.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/elements/styles/styles-do-not-add-inline-stylesheets-in-navigator.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/elements/styles-2/property-ui-location.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/network/long-script-content.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/oopif/oopif-navigator.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/overrides/can-edit-iframe-html.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/persistence/automapping-sourcemap-nameclash.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/persistence/navigator-create-file-copy.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/persistence/persistence-merge-editor-tabs.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/persistence/persistence-move-breakpoints.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/persistence/persistence-navigator-unique-names.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/persistence/persistence-sourceframe-messages.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/persistence/persistence-switch-editor-tab.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/persistence/persistence-tabbed-editor-keeps-selected-tab.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/persistence/persistence-tabbed-editor-opens-filesystem-uisourcecode.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/persistence/persistence-tabbed-editor-tabs-order.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/resource-tree/resource-tree-frame-add.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/resource-tree/resource-tree-non-unique-url.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/resource-tree/resource-tree-reload.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/search/search-ignore-binary-files.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/search/search-in-sourcemap.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/search/source-frame-replace-1.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/search/source-frame-replace-2.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/search/source-frame-replace-3.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/search/source-frame-replace-4.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/search/source-frame-search.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/autocomplete-css.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/autocomplete-general.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/autocomplete-hide-on-smart-brace.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/autocomplete-scss.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/bezier-swatch-position.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/color-swatch-position.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/compile-javascript.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/css-inline-sourcemap.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/css-sourcemaps-toggle-enabled.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/javascript-outline-dialog.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/js-sourcemaps-toggle-enabled.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/navigator-view-content-scripts.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/sass-highlighter.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/snippet-module.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/snippet-overrides.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/source-code-diff.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/sources-panel-focus-editor-on-select.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/sources-pretty-print.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/ui-source-code-metadata.js [ Skip ]
+crbug.com/1207342 http/tests/devtools/sources/debugger-breakpoints/breakpoints-sidebar-pane.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/debugger-breakpoints/breakpoints-ui-navigation.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/debugger-ui/show-function-definition.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/debugger-ui/snippet-edit-breakpoint.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/sources/debugger-ui/ui-source-code-display-name.js [ Failure Pass ]
+crbug.com/1207342 http/tests/devtools/tracing/timeline-js/timeline-js-line-level-profile-end-to-end.js [ Failure Pass Timeout ]
+
 
 # First party DevTools issues only work in the first-party-sets virtual suite
 crbug.com/1179186 http/tests/inspector-protocol/network/blocked-cookie-same-party-issue.js [ Skip ]
@@ -5604,10 +5691,6 @@
 crbug.com/1038091 virtual/gpu-rasterization/images/jpeg-yuv-image-decoding.html [ Failure Pass ]
 crbug.com/1038139 [ Win ] virtual/gpu-rasterization/images/2-comp.html [ Failure Pass ]
 
-# Sheriff 2020-01-02
-crbug.com/1038656 [ Mac ] http/tests/devtools/coverage/coverage-view-unused.js [ Failure Pass ]
-crbug.com/1038656 [ Win ] http/tests/devtools/coverage/coverage-view-unused.js [ Failure Pass ]
-
 # Temporarily disabled to land Linkifier changes in DevTools
 crbug.com/963183 http/tests/devtools/jump-to-previous-editing-location.js [ Failure Pass ]
 
@@ -6287,10 +6370,6 @@
 crbug.com/1032451 virtual/threaded-no-composited-antialiasing/animations/stability/animation-iteration-event-destroy-renderer.html [ Pass Timeout ]
 crbug.com/931646 [ Mac ] http/tests/preload/meta-viewport-link-headers-imagesrcset.html [ Failure Pass ]
 
-# Temporarily disabled to unblock https://crrev.com/c/3067319
-crbug.com/1199247 http/tests/devtools/console/console-external-array.js [ Failure Pass ]
-crbug.com/1199247 http/tests/devtools/console/console-log-side-effects.js [ Failure Pass ]
-
 # Win7 suggestion picker appearance tests have a scrollbar flakiness issue
 crbug.com/1045510 [ Win7 ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-rtl.html [ Failure Pass ]
 crbug.com/1045510 [ Win7 ] fast/forms/suggestion-picker/date-suggestion-picker-appearance-with-scroll-bar.html [ Failure Pass ]
@@ -6478,7 +6557,6 @@
 crbug.com/1092462 [ Linux ] http/tests/media/media-source/mediasource-duration.html [ Failure Pass ]
 crbug.com/1092462 [ Linux ] media/video-seek-past-end-paused.html [ Failure Pass ]
 crbug.com/1185675 [ Mac ] virtual/gpu-rasterization/images/color-profile-object.html [ Failure Pass ]
-crbug.com/1185676 [ Mac ] http/tests/devtools/tracing/timeline-js/timeline-js-line-level-profile-end-to-end.js [ Failure Pass ]
 
 crbug.com/1185051 fast/canvas/OffscreenCanvas-Bitmaprenderer-toBlob-worker.html [ Failure Pass ]
 
@@ -7155,7 +7233,6 @@
 crbug.com/1225653 virtual/file-system-access-access-handle-incognito/external/wpt/file-system-access/sandboxed_FileSystemSyncAccessHandle-flush.https.tentative.worker.html [ Skip ]
 crbug.com/1225653 virtual/file-system-access-access-handle-incognito/external/wpt/file-system-access/sandboxed_FileSystemSyncAccessHandle-close.https.tentative.worker.html [ Skip ]
 crbug.com/1225653 virtual/file-system-access-access-handle-incognito/external/wpt/file-system-access/sandboxed_FileSystemSyncAccessHandle-getSize.https.tentative.worker.html [ Pass ]
-crbug.com/1225653 virtual/file-system-access-access-handle-incognito/external/wpt/file-system-access/sandboxed_FileSystemSyncAccessHandle-truncate.https.tentative.worker.html [ Pass ]
 
 # Sheriff 2021-06-30
 crbug.com/1216587 [ Win7 ] accessibility/scroll-window-sends-notification.html [ Failure Pass ]
@@ -7324,4 +7401,8 @@
 crbug.com/1178292 [ Mac ] fast/mediacapturefromelement/CanvasCaptureMediaStream-set-size-too-large.html [ Pass Timeout ]
 
 # Sheriff 2021-08-09
-crbug.com/1237909 [ Linux ] external/wpt/webrtc-svc/RTCRtpParameters-scalability.html [ Failure Pass Crash ]
\ No newline at end of file
+crbug.com/1237909 [ Linux ] external/wpt/webrtc-svc/RTCRtpParameters-scalability.html [ Failure Pass Crash ]
+
+# Sheriff 2021-08-10
+crbug.com/1238266 [ Mac ] virtual/file-system-access-access-handle-incognito/external/wpt/file-system-access/sandboxed_FileSystemSyncAccessHandle-truncate.https.tentative.worker.html [ Pass Failure ]
+crbug.com/1233840 external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/WebGPUExpectations b/third_party/blink/web_tests/WebGPUExpectations
index 25dcdf1..7113c95 100644
--- a/third_party/blink/web_tests/WebGPUExpectations
+++ b/third_party/blink/web_tests/WebGPUExpectations
@@ -120,8 +120,8 @@
 ### Platform-independent failures
 ###
 
-# Need to set the resource path
-wpt_internal/webgpu/cts.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,* [ Skip ]
+# Our automated build does not support mp4 currently (fails on Linux, Mac, and Win Intel)
+wpt_internal/webgpu/cts.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,sample:videoSource="red-green.mp4" [ Failure ]
 
 crbug.com/dawn/999 wpt_internal/webgpu/cts.html?q=webgpu:api,operation,buffers,map_oom:mappedAtCreation,smaller_getMappedRange:* [ Failure ]
 crbug.com/dawn/999 wpt_internal/webgpu/cts.html?q=webgpu:api,operation,buffers,map_oom:mappedAtCreation,full_getMappedRange:* [ Failure ]
@@ -290,6 +290,9 @@
 # Error from debug layer
 crbug.com/dawn/1064 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,adapter,requestDevice_limits:worse_than_default:* [ Crash ]
 
+# Null-deref on Intel; failure on NVIDIA.
+crbug.com/1237592 [ Linux ] wpt_internal/webgpu/cts.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,* [ Failure Crash ]
+
 ###
 ### Windows (D3D12) specific
 ###
@@ -307,15 +310,8 @@
 crbug.com/dawn/548 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,rendering,draw:arguments:indirect=true;* [ Failure ]
 
 # (Intel-only) StoreOpClear handling is overclearing resources that should be preserved
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="CopyToBuffer";format="rg32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=1;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="CopyToBuffer";format="rg32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=7;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="CopyToBuffer";format="rgba32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=1;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="CopyToBuffer";format="rgba32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=7;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="CopyToTexture";format="rg32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=1;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="CopyToTexture";format="rg32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=7;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="CopyToTexture";format="rgba32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=1;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="CopyToTexture";format="rgba32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=7;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="Sample";format="rg32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=1;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="Sample";format="rg32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=7;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="Sample";format="rgba32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=1;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
-crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";readMethod="Sample";format="rgba32float";aspect="all";mipLevelCount=5;sampleCount=1;uninitializeMethod="StoreOpClear";layerCount=7;nonPowerOfTwo=true;canaryOnCreation=true [ Failure ]
+crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";format="rg32float";uninitializeMethod="StoreOpClear";canaryOnCreation=true;* [ Failure ]
+crbug.com/1237175 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:api,operation,resource_init,texture_zero:uninitialized_texture_is_zero:dimension="2d";format="rgba32float";uninitializeMethod="StoreOpClear";canaryOnCreation=true;* [ Failure ]
+
+# (NVIDIA-only) Test times out. Issue with hardware decoding?
+crbug.com/1238241 [ Win ] wpt_internal/webgpu/cts.html?q=webgpu:web_platform,external_texture,video:importExternalTexture,sample:* [ Skip ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-026.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-026.html
index 5315500..17ec9a2 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-026.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-026.html
@@ -1,115 +1,31 @@
 <!doctype HTML>
 <html>
 <meta charset="utf8">
-<title>Content Visibility: containment added</title>
+<title>Content Visibility: Computed Values</title>
 <link rel="author" title="Rakina Zata Amni" href="mailto:rakina@chromium.org">
 <link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
-<meta name="assert" content="content-visibility visible does not add containment">
-<meta name="assert" content="content-visibility hidden adds containment">
-<meta name="assert" content="content-visibility auto adds containment">
-<meta name="assert" content="content-visibility auto visibility switches after rAF callbacks of the frame that produces the painted output">
+<meta name="assert" content="content-visibility:hidden does not affect computed value of 'contain'">
+<meta name="assert" content="content-visibility:auto does not affect computed value of 'contain'">
 
-<style>
-.auto {
-  content-visibility: auto;
-}
-.hidden {
-  content-visibility: hidden;
-}
-.spacer {
-  height: 10000px;
-}
-</style>
 <div id="container"></div>
-<div id="onscreen_container"></div>
-<div class=spacer></div>
-<div id="offscreen_container"></div>
 
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 
 <script>
-function setUp(container) {
-  container.style = "";
-  container.classList = "";
+
+test(() => {
   assert_equals(getComputedStyle(container).contain, "none");
-}
+  container.style = "content-visibility:hidden";
+  assert_equals(getComputedStyle(container).contentVisibility, "hidden");
+  assert_equals(getComputedStyle(container).contain, "none");
+}, "content-visibility:hidden does not affect computed value of 'contain'");
 
 test(() => {
-  setUp(container);
-  container.classList.add("hidden");
-  assert_equals(getComputedStyle(container).contain, "strict");
-}, "content-visibility: hidden adds contain: size layout style;");
+  assert_equals(getComputedStyle(container).contain, "none");
+  container.style = "content-visibility:auto;contain:layout;";
+  assert_equals(getComputedStyle(container).contentVisibility, "auto");
+  assert_equals(getComputedStyle(container).contain, "layout");
+}, "content-visibility:auto does not affect computed value of 'contain'");
 
-async_test((t) => {
-  setUp(onscreen_container);
-  setUp(offscreen_container);
-
-  function runTest() {
-    onscreen_container.classList.add("auto");
-    offscreen_container.classList.add("auto");
-
-    t.step(() => assert_equals(getComputedStyle(onscreen_container).contain, "strict", "initial onscreen"));
-    t.step(() => assert_equals(getComputedStyle(offscreen_container).contain, "strict", "initial offscreen"));
-    // Considering this as frame 1, at the end of the frame intersection observation will happen
-    // and determine that on-screen is visible and off-screen is not. The on-screen switch will
-    // happen synchronously since this is the first time we check, so for the remainder of the
-    // frames, on-screen should not have a size containment.
-
-    // For off-screen container:
-    // At frame 2, we verify that it has size containment.
-    // At frame 3, we scroll it into view and verify it has size containment. At the end of the frame
-    //    we will determine that it is visible and schedule a visibility switch to happen at the next
-    //    frame (at post-rAF timing).
-    // At frame 4, we still have size containment until after rAF callbacks.
-    // At frame 5, the container is no longer size-contained since it is visible.
-    requestAnimationFrame(() => {
-      // Frame 2 checks:
-      t.step(() => assert_equals(getComputedStyle(onscreen_container).contain, "content", "frame 2 onscreen"));
-      t.step(() => assert_equals(getComputedStyle(offscreen_container).contain, "strict", "frame 2 offscreen"));
-
-      requestAnimationFrame(() => {
-        window.scrollBy(0, 10000);
-
-        // Frame 3 checks:
-        t.step(() => assert_equals(getComputedStyle(offscreen_container).contain, "strict", "frame 3"));
-
-        requestAnimationFrame(() => {
-          // Frame 4 checks:
-          t.step(() => assert_equals(getComputedStyle(offscreen_container).contain, "strict", "frame 4"));
-
-          requestAnimationFrame(() => {
-            // Frame 5 checks:
-            t.step(() => assert_equals(getComputedStyle(offscreen_container).contain, "content", "frame 5"));
-            t.done();
-          });
-        });
-      });
-    });
-  }
-  // rAF to ensure we know where we are in the lifecycle.
-  requestAnimationFrame(runTest);
-}, "content-visibility: auto adds contain: strict;");
-
-test(() => {
-  setUp(container);
-  container.classList.add("auto");
-  container.style = "contain: style;";
-  assert_equals(getComputedStyle(container).contain, "strict");
-  container.style = "contain: style layout;";
-  assert_equals(getComputedStyle(container).contain, "strict");
-  container.style = "";
-  assert_equals(getComputedStyle(container).contain, "strict");
-}, "content-visibility: auto adds contain: strict, can't be overridden");
-
-test(() => {
-  setUp(container);
-  container.classList.add("auto");
-  container.style = "contain: paint;";
-  assert_equals(getComputedStyle(container).contain, "strict");
-  container.style = "contain: strict;";
-  assert_equals(getComputedStyle(container).contain, "strict");
-  container.style = "contain: content;";
-  assert_equals(getComputedStyle(container).contain, "strict");
-}, "content-visibility keeps all containment even when shorthands are specified");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-stretch-properties-001.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-stretch-properties-001.html
new file mode 100644
index 0000000..f73425393
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-stretch-properties-001.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Stretch properties</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<link rel="help" href="https://w3c.github.io/mathml-core/#dictionary-based-attributes">
+<meta name="assert" content="Verify ">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mathml/support/fonts.js"></script>
+<style>
+  math {
+      font: 25px/1 Ahem;
+  }
+  @font-face {
+      font-family: operators;
+      src: url("/fonts/math/operators.woff");
+  }
+  mo {
+      font-family: operators;
+  }
+</style>
+<script>
+  setup({ explicit_done: true });
+  window.addEventListener("load", () => { loadAllFonts().then(runTests); });
+
+  function runTests() {
+
+      var epsilon = 1;
+      var emToPx = 25;
+      var element;
+
+      test(function() {
+          element = document.getElementById("mn_vertical_line");
+          assert_approx_equals(element.getBoundingClientRect().height, 1 * emToPx, epsilon, "<mn> element");
+
+          element = document.getElementById("mo_prefix_vertical_line");
+          assert_approx_equals(element.getBoundingClientRect().height, 6 * emToPx, epsilon, "Prefix <mo> element");
+
+          element = document.getElementById("mo_infix_vertical_line");
+          assert_approx_equals(element.getBoundingClientRect().height, 1 * emToPx, epsilon, "Infix <mo> element");
+
+          element = document.getElementById("mo_postfix_vertical_line");
+          assert_approx_equals(element.getBoundingClientRect().height, 6 * emToPx, epsilon, "Postfix <mo> element");
+      }, `Stretchy vertical line`);
+
+      done();
+  }
+</script>
+</head>
+<body>
+  <div id="log"></div>
+  <p>
+    <math>
+      <mrow>
+        <!-- Some non-element nodes before -->
+        <mo id="mo_prefix_vertical_line" style="color: green">|</mo>
+        <mn id="mn_vertical_line">|</mn>
+        <mspace width="1em" height="3em" depth="3em" style="background: blue"/>
+        <mo id="mo_infix_vertical_line" lspace="0" rspace="0">|</mo>
+        <mo id="mo_postfix_vertical_line" style="color: green">|</mo>
+        <!-- Some non-element nodes after -->
+      </mrow>
+    </math>
+  </p>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/fast/peerconnection/poc-123067.html b/third_party/blink/web_tests/fast/peerconnection/poc-123067.html
new file mode 100644
index 0000000..ff169f1
--- /dev/null
+++ b/third_party/blink/web_tests/fast/peerconnection/poc-123067.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html>
+
+  <head>
+    <script src="../../resources/testharness.js"></script>
+    <script src="../../resources/testharnessreport.js"></script>
+    <script src="../../resources/gc.js"></script>
+  </head>
+  <body>
+  <script>
+    'use strict';
+  promise_test(async t => {
+    const var_caller_1 = new RTCPeerConnection();
+    const var_callee_1 = new RTCPeerConnection();
+    var_caller_1.addTransceiver('audio');
+    const var_prom_1 = new Promise(resolve => {
+      var_caller_1.onicecandidate = e => resolve(e.candidate);
+    });
+    await var_caller_1.setLocalDescription(await var_caller_1.createOffer());
+    await var_callee_1.setRemoteDescription(var_caller_1.localDescription);
+    const candidate = await var_prom_1;
+    var arrProm = [];
+    gc();
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.setLocalDescription().then(() => {
+    })
+    var_callee_1.addIceCandidate(candidate).then(() => {
+    })
+    await Promise.all(arrProm);
+  }, 'Running this script does not cause an UAF');
+  </script>
+</head>
+
+<body></body>
+
+</html>
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-external-array-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-external-array-expected.txt
index 2eded13..ad33b09 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/console-external-array-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console/console-external-array-expected.txt
@@ -1,13 +1,13 @@
 Tests that console logging detects external arrays as arrays.
 
-console-external-array.js:14 Int8Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-console-external-array.js:15 Int16Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-console-external-array.js:16 Int32Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-console-external-array.js:17 Uint8Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-console-external-array.js:18 Uint16Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-console-external-array.js:19 Uint32Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-console-external-array.js:20 Float32Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-console-external-array.js:21 Float64Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+console-external-array.js:14 Int8Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, buffer: ArrayBuffer(10), byteLength: 10, byteOffset: 0, length: 10]
+console-external-array.js:15 Int16Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, buffer: ArrayBuffer(20), byteLength: 20, byteOffset: 0, length: 10]
+console-external-array.js:16 Int32Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, buffer: ArrayBuffer(40), byteLength: 40, byteOffset: 0, length: 10]
+console-external-array.js:17 Uint8Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, buffer: ArrayBuffer(10), byteLength: 10, byteOffset: 0, length: 10]
+console-external-array.js:18 Uint16Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, buffer: ArrayBuffer(20), byteLength: 20, byteOffset: 0, length: 10]
+console-external-array.js:19 Uint32Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, buffer: ArrayBuffer(40), byteLength: 40, byteOffset: 0, length: 10]
+console-external-array.js:20 Float32Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, buffer: ArrayBuffer(40), byteLength: 40, byteOffset: 0, length: 10]
+console-external-array.js:21 Float64Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, buffer: ArrayBuffer(80), byteLength: 80, byteOffset: 0, length: 10]
 console-external-array.js:23 Int8Array(10)
 console-external-array.js:24 Int16Array(10)
 console-external-array.js:25 Int32Array(10)
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-log-side-effects-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-log-side-effects-expected.txt
index 7f86dc9..1f6b0e1 100644
--- a/third_party/blink/web_tests/http/tests/devtools/console/console-log-side-effects-expected.txt
+++ b/third_party/blink/web_tests/http/tests/devtools/console/console-log-side-effects-expected.txt
@@ -17,7 +17,7 @@
 console-log-side-effects.js:43 
 console-log-side-effects.js:47 {foo: 1, bar: 2}
 console-log-side-effects.js:48 (3) [1, 2, 3]
-console-log-side-effects.js:50 Uint32Array(3) [1, 2, 3]
+console-log-side-effects.js:50 Uint32Array(3) [1, 2, 3, buffer: ArrayBuffer(12), byteLength: 12, byteOffset: 0, length: 3]
 console-log-side-effects.js:53 (4) [1, 2, 3, {…}]
 console-log-side-effects.js:56 {toString: ƒ}
 console-log-side-effects.js:59 (5) [1, 2, 3, {…}, {…}]
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-invalid-frame-url-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-invalid-frame-url-expected.txt
index 6ebef7e..c2fe1be 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-invalid-frame-url-expected.txt
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-invalid-frame-url-expected.txt
@@ -15,6 +15,14 @@
     id : <number>
     sessionId : <string>
 }
+Response for omitted frameId: {
+    error : {
+        code : -32602
+        message : Parameter frameId must be provided for frame targets
+    }
+    id : <number>
+    sessionId : <string>
+}
 Response for valid target and invalid url: {
     error : {
         code : -32602
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-invalid-frame-url.js b/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-invalid-frame-url.js
index 8ef57b4..1bd403b7 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-invalid-frame-url.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-invalid-frame-url.js
@@ -4,16 +4,34 @@
 
   await dp.Network.enable();
 
-  const response1 = await dp.Network.loadNetworkResource({frameId: `invalid`, url: `invalid`, options: {disableCache:false, includeCredentials: false}});
+  const response1 = await dp.Network.loadNetworkResource({
+    frameId: `invalid`,
+    url: `invalid`,
+    options: {disableCache: false, includeCredentials: false}
+  });
   testRunner.log(response1, `Response for invalid target and invalid url: `);
 
-  const response2 = await dp.Network.loadNetworkResource({frameId: `invalid`, url: `https://example.com/source.map`, options: {disableCache:false, includeCredentials: false}});
+  const response2 = await dp.Network.loadNetworkResource({
+    frameId: `invalid`,
+    url: `https://example.com/source.map`,
+    options: {disableCache: false, includeCredentials: false}
+  });
   testRunner.log(response2, `Response for invalid target and valid url: `);
 
+  const response3 = await dp.Network.loadNetworkResource({
+    url: `https://example.com/source.map`,
+    options: {disableCache: false, includeCredentials: false}
+  });
+  testRunner.log(response3, `Response for omitted frameId: `);
+
   const frameId = (await dp.Target.getTargetInfo()).result.targetInfo.targetId;
 
-  const response3 = await dp.Network.loadNetworkResource({frameId, url: `invalid`, options: {disableCache:false, includeCredentials: false}});
-  testRunner.log(response3, `Response for valid target and invalid url: `);
+  const response4 = await dp.Network.loadNetworkResource({
+    frameId,
+    url: `invalid`,
+    options: {disableCache: false, includeCredentials: false}
+  });
+  testRunner.log(response4, `Response for valid target and invalid url: `);
 
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-service-worker.js b/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-service-worker.js
index c9723c4..299c626a 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-service-worker.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-service-worker.js
@@ -15,7 +15,8 @@
 
   swdp.Network.enable();
   const url = `http://localhost:8000/inspector-protocol/network/resources/source.map`;
-  const response1 = await swdp.Network.loadNetworkResource({frameId: "", url, options: {disableCache:false, includeCredentials: false}});
+  const response1 = await swdp.Network.loadNetworkResource(
+      {url, options: {disableCache: false, includeCredentials: false}});
   testRunner.log(response1.result, `Response for fetch with existing resource: `, ["headers", "stream"]);
   testRunner.completeTest();
 });
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-shared-worker.js b/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-shared-worker.js
index cb7f3a9..13130e0 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-shared-worker.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-shared-worker.js
@@ -19,7 +19,8 @@
   const swdp = session.createChild(result.sessionId).protocol;
   await swdp.Network.enable();
   const url = `http://localhost:8000/inspector-protocol/network/resources/source.map`;
-  const response1 = await swdp.Network.loadNetworkResource({frameId: "", url, options: {disableCache:false, includeCredentials: false}});
+  const response1 = await swdp.Network.loadNetworkResource(
+      {url, options: {disableCache: false, includeCredentials: false}});
   testRunner.log(response1.result, `Response for fetch with existing resource: `, ["headers", "stream"]);
   testRunner.completeTest();
 });
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-worker.js b/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-worker.js
index 76a555bb..2c18867 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-worker.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/load-network-resource-worker.js
@@ -18,7 +18,8 @@
     const result = await swdp.Network.enable();
     testRunner.log(result);
     const url = `http://localhost:8000/inspector-protocol/network/resources/source.map`;
-    const response1 = await swdp.Network.loadNetworkResource({frameId: "", url, options: {disableCache:false, includeCredentials: false}});
+    const response1 = await swdp.Network.loadNetworkResource(
+        {url, options: {disableCache: false, includeCredentials: false}});
 
     testRunner.log(response1, `Response for fetch with existing resource: `, ["headers", "id", "sessionId"]);
     testRunner.completeTest();
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/hidpi/focus-rings-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/hidpi/focus-rings-expected.png
deleted file mode 100644
index 6e258a86..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/hidpi/focus-rings-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-150-expected.png
index 5427121..dd9db95 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-150-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-175-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-175-expected.png
deleted file mode 100644
index fc7836f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-175-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-200-expected.png
deleted file mode 100644
index 2dc9fe4c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-200-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-2000-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-2000-expected.png
deleted file mode 100644
index aceb2c6..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-2000-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-250-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-250-expected.png
deleted file mode 100644
index ebd125df..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/document-markers-zoom-250-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/hidpi/focus-rings-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/hidpi/focus-rings-expected.png
deleted file mode 100644
index 6e258a86..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/hidpi/focus-rings-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-150-expected.png
index 2aac4be..a81183ce 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-150-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-175-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-175-expected.png
index fc7836f..826b53a2 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-175-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-175-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-200-expected.png
index 2dc9fe4c..32b4098 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-200-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-2000-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-2000-expected.png
index aceb2c6..ea2d0a1 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-2000-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-2000-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-250-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-250-expected.png
index ebd125df..a7ab1c1 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-250-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-250-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/hidpi/focus-rings-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/hidpi/focus-rings-expected.png
deleted file mode 100644
index 6e258a86..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/fast/hidpi/focus-rings-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-150-expected.png
deleted file mode 100644
index 7de2d81..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-150-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-175-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-175-expected.png
deleted file mode 100644
index 6147166..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-175-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-200-expected.png
deleted file mode 100644
index 9eaaa1c..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-200-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-2000-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-2000-expected.png
deleted file mode 100644
index 1bb5299..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-2000-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-250-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-250-expected.png
deleted file mode 100644
index 5d5ae97f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.15/paint/markers/document-markers-zoom-250-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/css/outline-auto-location-expected.png b/third_party/blink/web_tests/platform/mac/fast/css/outline-auto-location-expected.png
index 35f4415..b6f611e1 100644
--- a/third_party/blink/web_tests/platform/mac/fast/css/outline-auto-location-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/css/outline-auto-location-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/checkbox/checkbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/checkbox/checkbox-appearance-basic-expected.png
index 456837d..ec92af5 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/checkbox/checkbox-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/checkbox/checkbox-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/checkbox-zoom-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/checkbox-zoom-focus-ring-expected.png
index 42d80d4..c1861e81 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/checkbox-zoom-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/checkbox-zoom-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/focus-ring-zoom-expected.png
index 5fe72be..e5854fb 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/focus-ring-zoom-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/radio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/radio-focus-ring-expected.png
index 8986a55..844a745 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/radio-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/focus-rect/radio-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/password/password-eye-icon-zoom-4x-expected.png
index 095cc90..85e59abc 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/password/password-eye-icon-zoom-4x-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/password/password-eye-icon-zoom-4x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/radio/radio-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/radio/radio-appearance-basic-expected.png
index 7b05c70..3e5cdd0 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/radio/radio-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/radio/radio-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/text/input-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/text/input-placeholder-paint-order-expected.png
index fd7e09d..25b70d6d 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/text/input-placeholder-paint-order-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/text/input-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/textarea/textarea-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
index e8f6e01..80efa7c 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/mac/images/imagemap-focus-ring-zoom-expected.png
index 01437aa..2633f1c7 100644
--- a/third_party/blink/web_tests/platform/mac/images/imagemap-focus-ring-zoom-expected.png
+++ b/third_party/blink/web_tests/platform/mac/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-150-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-150-expected.png
index 5427121..6844e4a 100644
--- a/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-150-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-175-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-175-expected.png
index fc7836f..56c441f 100644
--- a/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-175-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-175-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-200-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-200-expected.png
index 2dc9fe4c..562f0e4c 100644
--- a/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-200-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-2000-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-2000-expected.png
index aceb2c6..b241378 100644
--- a/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-2000-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-2000-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-250-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-250-expected.png
index ebd125df..cd20c80 100644
--- a/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-250-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/markers/document-markers-zoom-250-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/mac/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
index d82d47d..4779f2d 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
index 1984ff9..ae6fece 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
index a708140..3bd1b75 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -16,6 +16,41 @@
 [Worker]     getter onabort
 [Worker]     method constructor
 [Worker]     setter onabort
+[Worker] interface AudioData
+[Worker]     attribute @@toStringTag
+[Worker]     getter duration
+[Worker]     getter format
+[Worker]     getter numberOfChannels
+[Worker]     getter numberOfFrames
+[Worker]     getter sampleRate
+[Worker]     getter timestamp
+[Worker]     method allocationSize
+[Worker]     method clone
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method copyTo
+[Worker] interface AudioDecoder
+[Worker]     static method isConfigSupported
+[Worker]     attribute @@toStringTag
+[Worker]     getter decodeQueueSize
+[Worker]     getter state
+[Worker]     method close
+[Worker]     method configure
+[Worker]     method constructor
+[Worker]     method decode
+[Worker]     method flush
+[Worker]     method reset
+[Worker] interface AudioEncoder
+[Worker]     static method isConfigSupported
+[Worker]     attribute @@toStringTag
+[Worker]     getter encodeQueueSize
+[Worker]     getter state
+[Worker]     method close
+[Worker]     method configure
+[Worker]     method constructor
+[Worker]     method encode
+[Worker]     method flush
+[Worker]     method reset
 [Worker] interface BackgroundFetchManager
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
@@ -346,6 +381,22 @@
 [Worker]     attribute PERSISTENT
 [Worker]     attribute TEMPORARY
 [Worker]     method constructor
+[Worker] interface EncodedAudioChunk
+[Worker]     attribute @@toStringTag
+[Worker]     getter byteLength
+[Worker]     getter duration
+[Worker]     getter timestamp
+[Worker]     getter type
+[Worker]     method constructor
+[Worker]     method copyTo
+[Worker] interface EncodedVideoChunk
+[Worker]     attribute @@toStringTag
+[Worker]     getter byteLength
+[Worker]     getter duration
+[Worker]     getter timestamp
+[Worker]     getter type
+[Worker]     method constructor
+[Worker]     method copyTo
 [Worker] interface ErrorEvent : Event
 [Worker]     attribute @@toStringTag
 [Worker]     getter colno
@@ -690,6 +741,33 @@
 [Worker]     getter height
 [Worker]     getter width
 [Worker]     method constructor
+[Worker] interface ImageDecoder
+[Worker]     static method isTypeSupported
+[Worker]     attribute @@toStringTag
+[Worker]     getter complete
+[Worker]     getter completed
+[Worker]     getter tracks
+[Worker]     getter type
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method decode
+[Worker]     method reset
+[Worker] interface ImageTrack
+[Worker]     attribute @@toStringTag
+[Worker]     getter animated
+[Worker]     getter frameCount
+[Worker]     getter repetitionCount
+[Worker]     getter selected
+[Worker]     method constructor
+[Worker]     setter selected
+[Worker] interface ImageTrackList
+[Worker]     attribute @@toStringTag
+[Worker]     getter length
+[Worker]     getter ready
+[Worker]     getter selectedIndex
+[Worker]     getter selectedTrack
+[Worker]     method @@iterator
+[Worker]     method constructor
 [Worker] interface Lock
 [Worker]     attribute @@toStringTag
 [Worker]     getter mode
@@ -1427,6 +1505,53 @@
 [Worker]     getter hasBeenActive
 [Worker]     getter isActive
 [Worker]     method constructor
+[Worker] interface VideoColorSpace
+[Worker]     attribute @@toStringTag
+[Worker]     getter fullRange
+[Worker]     getter matrix
+[Worker]     getter primaries
+[Worker]     getter transfer
+[Worker]     method constructor
+[Worker]     method toJSON
+[Worker] interface VideoDecoder
+[Worker]     static method isConfigSupported
+[Worker]     attribute @@toStringTag
+[Worker]     getter decodeQueueSize
+[Worker]     getter state
+[Worker]     method close
+[Worker]     method configure
+[Worker]     method constructor
+[Worker]     method decode
+[Worker]     method flush
+[Worker]     method reset
+[Worker] interface VideoEncoder
+[Worker]     static method isConfigSupported
+[Worker]     attribute @@toStringTag
+[Worker]     getter encodeQueueSize
+[Worker]     getter state
+[Worker]     method close
+[Worker]     method configure
+[Worker]     method constructor
+[Worker]     method encode
+[Worker]     method flush
+[Worker]     method reset
+[Worker] interface VideoFrame
+[Worker]     attribute @@toStringTag
+[Worker]     getter codedHeight
+[Worker]     getter codedRect
+[Worker]     getter codedWidth
+[Worker]     getter colorSpace
+[Worker]     getter displayHeight
+[Worker]     getter displayWidth
+[Worker]     getter duration
+[Worker]     getter format
+[Worker]     getter timestamp
+[Worker]     getter visibleRect
+[Worker]     method allocationSize
+[Worker]     method clone
+[Worker]     method close
+[Worker]     method constructor
+[Worker]     method copyTo
 [Worker] interface WebGL2RenderingContext
 [Worker]     attribute @@toStringTag
 [Worker]     attribute ACTIVE_ATTRIBUTES
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
index 5ddb335a..8129a4e 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -152,10 +152,45 @@
     method getOutputTimestamp
     method resume
     method suspend
+interface AudioData
+    attribute @@toStringTag
+    getter duration
+    getter format
+    getter numberOfChannels
+    getter numberOfFrames
+    getter sampleRate
+    getter timestamp
+    method allocationSize
+    method clone
+    method close
+    method constructor
+    method copyTo
+interface AudioDecoder
+    static method isConfigSupported
+    attribute @@toStringTag
+    getter decodeQueueSize
+    getter state
+    method close
+    method configure
+    method constructor
+    method decode
+    method flush
+    method reset
 interface AudioDestinationNode : AudioNode
     attribute @@toStringTag
     getter maxChannelCount
     method constructor
+interface AudioEncoder
+    static method isConfigSupported
+    attribute @@toStringTag
+    getter encodeQueueSize
+    getter state
+    method close
+    method configure
+    method constructor
+    method encode
+    method flush
+    method reset
 interface AudioListener
     attribute @@toStringTag
     getter forwardX
@@ -1960,6 +1995,22 @@
     setter ariaValueMin
     setter ariaValueNow
     setter ariaValueText
+interface EncodedAudioChunk
+    attribute @@toStringTag
+    getter byteLength
+    getter duration
+    getter timestamp
+    getter type
+    method constructor
+    method copyTo
+interface EncodedVideoChunk
+    attribute @@toStringTag
+    getter byteLength
+    getter duration
+    getter timestamp
+    getter type
+    method constructor
+    method copyTo
 interface ErrorEvent : Event
     attribute @@toStringTag
     getter colno
@@ -4102,6 +4153,33 @@
     getter height
     getter width
     method constructor
+interface ImageDecoder
+    static method isTypeSupported
+    attribute @@toStringTag
+    getter complete
+    getter completed
+    getter tracks
+    getter type
+    method close
+    method constructor
+    method decode
+    method reset
+interface ImageTrack
+    attribute @@toStringTag
+    getter animated
+    getter frameCount
+    getter repetitionCount
+    getter selected
+    method constructor
+    setter selected
+interface ImageTrackList
+    attribute @@toStringTag
+    getter length
+    getter ready
+    getter selectedIndex
+    getter selectedTrack
+    method @@iterator
+    method constructor
 interface Ink
     attribute @@toStringTag
     method constructor
@@ -7769,6 +7847,53 @@
     getter valid
     getter valueMissing
     method constructor
+interface VideoColorSpace
+    attribute @@toStringTag
+    getter fullRange
+    getter matrix
+    getter primaries
+    getter transfer
+    method constructor
+    method toJSON
+interface VideoDecoder
+    static method isConfigSupported
+    attribute @@toStringTag
+    getter decodeQueueSize
+    getter state
+    method close
+    method configure
+    method constructor
+    method decode
+    method flush
+    method reset
+interface VideoEncoder
+    static method isConfigSupported
+    attribute @@toStringTag
+    getter encodeQueueSize
+    getter state
+    method close
+    method configure
+    method constructor
+    method encode
+    method flush
+    method reset
+interface VideoFrame
+    attribute @@toStringTag
+    getter codedHeight
+    getter codedRect
+    getter codedWidth
+    getter colorSpace
+    getter displayHeight
+    getter displayWidth
+    getter duration
+    getter format
+    getter timestamp
+    getter visibleRect
+    method allocationSize
+    method clone
+    method close
+    method constructor
+    method copyTo
 interface VideoPlaybackQuality
     attribute @@toStringTag
     getter corruptedVideoFrames
diff --git a/third_party/blink/web_tests/webgpu/ctshtml-template.txt b/third_party/blink/web_tests/webgpu/ctshtml-template.txt
index 4ed38ed..6bcbe24 100644
--- a/third_party/blink/web_tests/webgpu/ctshtml-template.txt
+++ b/third_party/blink/web_tests/webgpu/ctshtml-template.txt
@@ -19,7 +19,14 @@
 <script src=/resources/testharnessreport.js></script>
 <script>
     const loadWebGPUExpectations = import('http://localhost:3000/webgpuCtsExpectations.js')
-        .then(m => m.expectations);
+        .then(m => m.expectations, () => {
+            console.error('Unable to connect to expectations server - running without expectations!');
+            return [];
+        });
+</script>
+<script type=module>
+    import { setBaseResourcePath } from '/gen/third_party/webgpu-cts/src/common/framework/resources.js';
+    setBaseResourcePath('/gen/third_party/webgpu-cts/resources');
 </script>
 <script type=module src=/gen/third_party/webgpu-cts/src/common/runtime/wpt.js></script>
 
diff --git a/third_party/blink/web_tests/wpt_internal/webgpu/cts.html b/third_party/blink/web_tests/wpt_internal/webgpu/cts.html
index 3eb7f656..77f52779 100644
--- a/third_party/blink/web_tests/wpt_internal/webgpu/cts.html
+++ b/third_party/blink/web_tests/wpt_internal/webgpu/cts.html
@@ -20,7 +20,14 @@
 <script src=/resources/testharnessreport.js></script>
 <script>
     const loadWebGPUExpectations = import('http://localhost:3000/webgpuCtsExpectations.js')
-        .then(m => m.expectations);
+        .then(m => m.expectations, () => {
+            console.error('Unable to connect to expectations server - running without expectations!');
+            return [];
+        });
+</script>
+<script type=module>
+    import { setBaseResourcePath } from '/gen/third_party/webgpu-cts/src/common/framework/resources.js';
+    setBaseResourcePath('/gen/third_party/webgpu-cts/resources');
 </script>
 <script type=module src=/gen/third_party/webgpu-cts/src/common/runtime/wpt.js></script>
 
diff --git a/third_party/harfbuzz-ng/BUILD.gn b/third_party/harfbuzz-ng/BUILD.gn
index 45630bc80..06c43c9 100644
--- a/third_party/harfbuzz-ng/BUILD.gn
+++ b/third_party/harfbuzz-ng/BUILD.gn
@@ -65,14 +65,20 @@
     sources = [
       "src/src/hb-aat-layout-ankr-table.hh",
       "src/src/hb-aat-layout-bsln-table.hh",
+      "src/src/hb-aat-layout-common.hh",
       "src/src/hb-aat-layout-feat-table.hh",
+      "src/src/hb-aat-layout-just-table.hh",
       "src/src/hb-aat-layout-kerx-table.hh",
       "src/src/hb-aat-layout-morx-table.hh",
+      "src/src/hb-aat-layout-opbd-table.hh",
       "src/src/hb-aat-layout-trak-table.hh",
       "src/src/hb-aat-layout.cc",
+      "src/src/hb-aat-layout.h",
+      "src/src/hb-aat-layout.hh",
       "src/src/hb-aat-ltag-table.hh",
       "src/src/hb-aat-map.cc",
       "src/src/hb-aat-map.hh",
+      "src/src/hb-aat.h",
       "src/src/hb-algs.hh",
       "src/src/hb-array.hh",
       "src/src/hb-atomic.hh",
@@ -102,15 +108,17 @@
       "src/src/hb-font.cc",
       "src/src/hb-font.hh",
       "src/src/hb-ft.cc",
-      "src/src/hb-gdi.cc",
-      "src/src/hb-gdi.h",
       "src/src/hb-icu.cc",
+      "src/src/hb-iter.hh",
+      "src/src/hb-kern.hh",
+      "src/src/hb-machinery.hh",
       "src/src/hb-map.cc",
       "src/src/hb-map.hh",
       "src/src/hb-meta.hh",
       "src/src/hb-ms-feature-ranges.cc",
       "src/src/hb-ms-feature-ranges.hh",
       "src/src/hb-mutex.hh",
+      "src/src/hb-null.hh",
       "src/src/hb-number-parser.hh",
       "src/src/hb-number.cc",
       "src/src/hb-number.hh",
@@ -118,19 +126,25 @@
       "src/src/hb-open-file.hh",
       "src/src/hb-open-type.hh",
       "src/src/hb-ot-cff-common.hh",
+      "src/src/hb-ot-cff1-std-str.hh",
       "src/src/hb-ot-cff1-table.cc",
       "src/src/hb-ot-cff1-table.hh",
       "src/src/hb-ot-cff2-table.cc",
       "src/src/hb-ot-cff2-table.hh",
+      "src/src/hb-ot-cmap-table.hh",
       "src/src/hb-ot-color-cbdt-table.hh",
       "src/src/hb-ot-color-colr-table.hh",
       "src/src/hb-ot-color-colrv1-closure.hh",
       "src/src/hb-ot-color-cpal-table.hh",
+      "src/src/hb-ot-color-sbix-table.hh",
+      "src/src/hb-ot-color-svg-table.hh",
+      "src/src/hb-ot-deprecated.h",
       "src/src/hb-ot-face-table-list.hh",
       "src/src/hb-ot-face.cc",
       "src/src/hb-ot-face.hh",
       "src/src/hb-ot-font.cc",
       "src/src/hb-ot-gasp-table.hh",
+      "src/src/hb-ot-glyf-table.hh",
       "src/src/hb-ot-hdmx-table.hh",
       "src/src/hb-ot-head-table.hh",
       "src/src/hb-ot-hhea-table.hh",
@@ -142,6 +156,7 @@
       "src/src/hb-ot-layout-gpos-table.hh",
       "src/src/hb-ot-layout-gsub-table.hh",
       "src/src/hb-ot-layout-gsubgpos.hh",
+      "src/src/hb-ot-layout-jstf-table.hh",
       "src/src/hb-ot-layout.cc",
       "src/src/hb-ot-layout.hh",
       "src/src/hb-ot-map.cc",
@@ -159,9 +174,12 @@
       "src/src/hb-ot-name-language.hh",
       "src/src/hb-ot-name-table.hh",
       "src/src/hb-ot-name.cc",
+      "src/src/hb-ot-name.h",
+      "src/src/hb-ot-os2-table.hh",
       "src/src/hb-ot-os2-unicode-ranges.hh",
       "src/src/hb-ot-post-macroman.hh",
       "src/src/hb-ot-post-table-v2subset.hh",
+      "src/src/hb-ot-post-table.hh",
       "src/src/hb-ot-shape-complex-arabic-fallback.hh",
       "src/src/hb-ot-shape-complex-arabic-joining-list.hh",
       "src/src/hb-ot-shape-complex-arabic-table.hh",
@@ -195,12 +213,16 @@
       "src/src/hb-ot-shape-normalize.hh",
       "src/src/hb-ot-shape.cc",
       "src/src/hb-ot-shape.hh",
+      "src/src/hb-ot-stat-table.hh",
+      "src/src/hb-ot-tag-table.hh",
       "src/src/hb-ot-tag.cc",
       "src/src/hb-ot-var-avar-table.hh",
       "src/src/hb-ot-var-fvar-table.hh",
+      "src/src/hb-ot-var-gvar-table.hh",
       "src/src/hb-ot-var-hvar-table.hh",
       "src/src/hb-ot-var-mvar-table.hh",
       "src/src/hb-ot-var.cc",
+      "src/src/hb-ot-vorg-table.hh",
       "src/src/hb-pool.hh",
       "src/src/hb-priority-queue.hh",
       "src/src/hb-repacker.hh",
@@ -221,7 +243,9 @@
       "src/src/hb-subset-cff-common.cc",
       "src/src/hb-subset-cff-common.hh",
       "src/src/hb-subset-cff1.cc",
+      "src/src/hb-subset-cff1.hh",
       "src/src/hb-subset-cff2.cc",
+      "src/src/hb-subset-cff2.hh",
       "src/src/hb-subset-input.cc",
       "src/src/hb-subset-input.hh",
       "src/src/hb-subset-plan.cc",
@@ -234,9 +258,35 @@
       "src/src/hb-unicode.cc",
       "src/src/hb-unicode.hh",
       "src/src/hb-utf.hh",
+      "src/src/hb-vector.hh",
       "src/src/hb.hh",
     ]
 
+    # The following sources are explictly not used.
+    # They are referenced to aid in detecting previously uncategorized files.
+    unused_sources = [
+      "src/src/hb-coretext.cc",
+      "src/src/hb-coretext.h",
+      "src/src/hb-directwrite.cc",
+      "src/src/hb-directwrite.h",
+      "src/src/hb-fallback-shape.cc",
+      "src/src/hb-gdi.cc",
+      "src/src/hb-gdi.h",
+      "src/src/hb-gobject-structs.cc",
+      "src/src/hb-gobject-structs.h",
+      "src/src/hb-gobject.h",
+      "src/src/hb-graphite2.cc",
+      "src/src/hb-graphite2.h",
+      "src/src/hb-ot-color.cc",
+      "src/src/hb-ot-color.h",
+      "src/src/hb-ot-shape-complex-arabic-win1256.hh",
+      "src/src/hb-style.cc",
+      "src/src/hb-style.h",
+      "src/src/hb-uniscribe.cc",
+      "src/src/hb-uniscribe.h",
+    ]
+    assert(unused_sources != [])
+
     defines = [
       "HAVE_OT",
       "HAVE_FREETYPE",
diff --git a/third_party/harfbuzz-ng/roll-harfbuzz.sh b/third_party/harfbuzz-ng/roll-harfbuzz.sh
index 635f33f..441950e 100755
--- a/third_party/harfbuzz-ng/roll-harfbuzz.sh
+++ b/third_party/harfbuzz-ng/roll-harfbuzz.sh
@@ -37,6 +37,47 @@
   if [ -n "$ADDED_FILES" ] || [ -n "$DELETED_FILES" ] || [ -n "$RENAMED_FILES" ]; then echo -e "\nPlease update src/third_party/harfbuzz-ng/BUILD.gn before continuing."; fi
 }
 
+check_all_files_are_categorized() {
+  #for each file name in src/src/hb-*.{cc,h,hh}
+  #  if the file name is not present in BUILD.gn
+  #    should be added to BUILD.gn (in 'unused_sources' if unwanted)
+
+  #for each file name \"src/src/.*\" in BUILD.gn
+  #  if the file name does not exist
+  #    should be removed from BUILD.gn
+
+  STEP="Updating BUILD.gn" &&
+  ( # Create subshell for IFS, CDPATH, and cd.
+    # This implementation doesn't handle '"' or '\n' in file names.
+    IFS=$'\n' &&
+    CDPATH= && cd -- "$(dirname -- "$0")" &&
+
+    HB_SOURCE_MISSING=false &&
+    find src/src/ -type f \( -name "hb-*.cc" -o -name "hb-*.h" -o -name "hb-*.hh" \) | while read HB_SOURCE
+    do
+      if ! grep -qF "$HB_SOURCE" BUILD.gn; then
+        if ! ${HB_SOURCE_MISSING}; then
+          echo "Is in src/src/hb-*.{cc,h,hh} but not in BUILD.gn:"
+          HB_SOURCE_MISSING=true
+        fi
+        echo "      \"$HB_SOURCE\","
+      fi
+    done &&
+
+    GN_SOURCE_MISSING=false
+    grep -oE "\"src/src/[^\"]+\"" BUILD.gn | sed 's/^.\(.*\).$/\1/' | while read GN_SOURCE
+    do
+      if [ ! -f "$GN_SOURCE" ]; then
+        if ! ${GN_SOURCE_MISSING}; then
+          echo "Is referenced in BUILD.gn but does not exist:" &&
+          GN_SOURCE_MISSING=true
+        fi
+        echo "\"$GN_SOURCE\""
+      fi
+    done
+  )
+}
+
 commit() {
   STEP="commit" &&
   git commit --quiet --amend --no-edit
@@ -45,5 +86,6 @@
 rolldeps "$@" &&
 updatereadme &&
 check_added_deleted_files &&
+check_all_files_are_categorized &&
 commit ||
 { echo "Failed step ${STEP}"; exit 1; }
diff --git a/third_party/usrsctp/README.chromium b/third_party/usrsctp/README.chromium
index 0b36568..cd6cdd0 100644
--- a/third_party/usrsctp/README.chromium
+++ b/third_party/usrsctp/README.chromium
@@ -3,7 +3,7 @@
 Version: 0
 CPEPrefix: cpe:/a:usrsctp_project:usrsctp:2019-12-20
 Date: July 1, 2021
-Revision: 965b19a8636bbcd9617c1658cfe874a10cedb15d
+Revision: 978003f36a3bc1e9fdeafae26dbfe825684b0a25
 License: New BSD
 License File: LICENSE
 Security Critical: yes
diff --git a/third_party/webgpu-cts/BUILD.gn b/third_party/webgpu-cts/BUILD.gn
index 034d1725..b51232e 100644
--- a/third_party/webgpu-cts/BUILD.gn
+++ b/third_party/webgpu-cts/BUILD.gn
@@ -5,20 +5,21 @@
 group("webgpu-cts") {
   public_deps = [
     ":compile_src",
+    ":copy_resources",
     ":verify_gen_ts_dep_list",
     ":verify_regenerate_internal_cts_html",
   ]
 }
 
-input_ts_files = read_file("ts_sources.txt", "list lines")
+list_from_ts_sources_txt = read_file("ts_sources.txt", "list lines")
 
 ts_source_inputs = [ "src/tsconfig.json" ]
-foreach(file, input_ts_files) {
+foreach(file, list_from_ts_sources_txt) {
   ts_source_inputs += [ "src/$file" ]
 }
 
 js_outputs = []
-foreach(ts_file, input_ts_files) {
+foreach(ts_file, list_from_ts_sources_txt) {
   js_file = string_replace(ts_file, ".ts", ".js")
   js_node_file = string_replace(js_file, "src/", "src-node/")
 
@@ -46,6 +47,26 @@
   args = [ rebase_path("$target_gen_dir", root_build_dir) ]
 }
 
+list_from_resource_files_txt = read_file("resource_files.txt", "list lines")
+resource_file_inputs = []
+foreach(file, list_from_resource_files_txt) {
+  resource_file_inputs += [ "$file" ]
+}
+
+copy("copy_resources") {
+  sources = []
+  data = []
+  foreach(resource_file, resource_file_inputs) {
+    sources += [ "src/src/resources/$resource_file" ]
+
+    # Copy into resources/, instead of src/resources/, because compile_src
+    # wipes src/ before running.
+    data += [ "$target_gen_dir/resources/$resource_file" ]
+  }
+
+  outputs = [ "$target_gen_dir/resources/{{source_file_part}}" ]
+}
+
 action("verify_gen_ts_dep_list") {
   script = "scripts/gen_ts_dep_lists.py"
   outputs = [ "$target_out_dir/run_$target_name.stamp" ]
diff --git a/third_party/webgpu-cts/resource_files.txt b/third_party/webgpu-cts/resource_files.txt
new file mode 100644
index 0000000..812c137c
--- /dev/null
+++ b/third_party/webgpu-cts/resource_files.txt
@@ -0,0 +1,6 @@
+Di-3d.png
+README.md
+red-green.bt601.vp9.webm
+red-green.mp4
+red-green.theora.ogv
+red-green.webmvp8.webm
diff --git a/third_party/webgpu-cts/scripts/gen_ts_dep_lists.py b/third_party/webgpu-cts/scripts/gen_ts_dep_lists.py
index 85c942b..0af2c4a 100755
--- a/third_party/webgpu-cts/scripts/gen_ts_dep_lists.py
+++ b/third_party/webgpu-cts/scripts/gen_ts_dep_lists.py
@@ -33,6 +33,10 @@
         if line.startswith(src_prefix + 'src/')
     ]
 
+def get_resource_files():
+    files = os.listdir(os.path.join(webgpu_cts_src_dir, 'src', 'resources'))
+    files.sort()
+    return files
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser()
@@ -43,17 +47,28 @@
     args = parser.parse_args()
 
     ts_sources = [x + '\n' for x in get_ts_sources()]
-    ts_sources_path = os.path.join(third_party_dir, 'webgpu-cts',
+    ts_sources_txt = os.path.join(third_party_dir, 'webgpu-cts',
                                    'ts_sources.txt')
+
+    resource_files = [x + '\n' for x in get_resource_files()]
+    resource_files_txt = os.path.join(third_party_dir, 'webgpu-cts', 'resource_files.txt')
+
     if args.check:
-        with open(ts_sources_path, 'r') as f:
+        with open(ts_sources_txt, 'r') as f:
             if (f.readlines() != ts_sources):
                 raise RuntimeError(
                     '%s is out of date. Please re-run //third_party/webgpu-cts/scripts/gen_ts_dep_lists.py\n'
-                    % ts_sources_path)
+                    % ts_sources_txt)
+        with open(resource_files_txt, 'r') as f:
+            if (f.readlines() != resource_files):
+                raise RuntimeError(
+                    '%s is out of date. Please re-run //third_party/webgpu-cts/scripts/gen_ts_dep_lists.py\n'
+                    % resource_files_txt)
     else:
-        with open(ts_sources_path, 'w') as f:
+        with open(ts_sources_txt, 'w') as f:
             f.writelines(ts_sources)
+        with open(resource_files_txt, 'w') as f:
+            f.writelines(resource_files)
 
     if args.stamp:
         with open(args.stamp, 'w') as f:
diff --git a/tools/metrics/histograms/metadata/accessibility/histograms.xml b/tools/metrics/histograms/metadata/accessibility/histograms.xml
index 2aa2b218..c8229fc 100644
--- a/tools/metrics/histograms/metadata/accessibility/histograms.xml
+++ b/tools/metrics/histograms/metadata/accessibility/histograms.xml
@@ -28,7 +28,7 @@
 </variants>
 
 <histogram name="Accessibility.ActiveTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dmazzoni@chromium.org</owner>
   <owner>janewman@microsoft.com</owner>
   <summary>
@@ -165,7 +165,7 @@
 </histogram>
 
 <histogram name="Accessibility.AutoDisabled.EnabledTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dmazzoni@chromium.org</owner>
   <owner>abigailbklein@google.com</owner>
   <summary>
@@ -175,7 +175,7 @@
 </histogram>
 
 <histogram name="Accessibility.AutoDisabled.EventCount" units="count"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dmazzoni@chromium.org</owner>
   <owner>abigailbklein@google.com</owner>
   <summary>
@@ -206,7 +206,7 @@
 </histogram>
 
 <histogram name="Accessibility.ChromeVox.PerformGestureType"
-    enum="ChromeVoxGestureType" expires_after="2021-11-28">
+    enum="ChromeVoxGestureType" expires_after="2022-02-06">
   <owner>dtseng@chromium.org</owner>
   <owner>chrome-a11y-core@google.com</owner>
   <summary>
@@ -363,7 +363,7 @@
 </histogram>
 
 <histogram name="Accessibility.CrosDockedMagnifier" enum="BooleanEnabled"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dmazzoni@chromium.org</owner>
   <owner>katie@chromium.org</owner>
   <owner>chrome-a11y-core@google.com</owner>
@@ -428,7 +428,7 @@
 </histogram>
 
 <histogram name="Accessibility.CrosSelectToSpeak" enum="BooleanEnabled"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dmazzoni@chromium.org</owner>
   <owner>katie@chromium.org</owner>
   <owner>chrome-a11y-core@google.com</owner>
@@ -439,7 +439,7 @@
 </histogram>
 
 <histogram name="Accessibility.CrosSelectToSpeak.BackgroundShading"
-    enum="BooleanEnabled" expires_after="2021-12-05">
+    enum="BooleanEnabled" expires_after="2022-02-06">
   <owner>katie@chromium.org</owner>
   <owner>chrome-a11y-core@google.com</owner>
   <summary>
@@ -762,7 +762,7 @@
 </histogram>
 
 <histogram name="Accessibility.InactiveTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dmazzoni@chromium.org</owner>
   <owner>janewman@microsoft.com</owner>
   <summary>
@@ -1111,7 +1111,7 @@
 </histogram>
 
 <histogram name="Accessibility.ModeFlag" enum="AccessibilityModeFlagEnum"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dmazzoni@chromium.org</owner>
   <owner>aboxhall@chromium.org</owner>
   <owner>chrome-a11y-core@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml
index 722014e4..98a5dd7 100644
--- a/tools/metrics/histograms/metadata/android/histograms.xml
+++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -1049,7 +1049,7 @@
 </histogram>
 
 <histogram name="Android.DownloadManager.OpenSource.Other"
-    enum="AndroidDownloadOpenSource" expires_after="2021-12-05">
+    enum="AndroidDownloadOpenSource" expires_after="2022-02-06">
   <owner>xingliu@chromium.org</owner>
   <owner>clank-downloads@google.com</owner>
   <summary>
@@ -1059,7 +1059,7 @@
 </histogram>
 
 <histogram name="Android.DownloadManager.OpenSource.Video"
-    enum="AndroidDownloadOpenSource" expires_after="2021-12-05">
+    enum="AndroidDownloadOpenSource" expires_after="2022-02-06">
   <owner>xingliu@chromium.org</owner>
   <owner>clank-downloads@google.com</owner>
   <summary>Records how users open video download files on Android.</summary>
@@ -1534,7 +1534,7 @@
 </histogram>
 
 <histogram base="true" name="Android.IsolatedSplits.ContextCreateTime"
-    units="ms" expires_after="2021-12-07">
+    units="ms" expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="AndroidFeatureModuleName" -->
 
   <owner>cduvall@chromium.org</owner>
@@ -1546,7 +1546,7 @@
 </histogram>
 
 <histogram base="true" name="Android.IsolatedSplits.PreloadWaitTime" units="ms"
-    expires_after="2021-12-07">
+    expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="AndroidFeatureModuleName" -->
 
   <owner>cduvall@chromium.org</owner>
@@ -1628,7 +1628,7 @@
 </histogram>
 
 <histogram name="Android.KernelVersion" enum="AndroidKernelVersion"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rsesek@chromium.org</owner>
   <summary>
     Reports the kernel major and minor version from the utsname.release field.
@@ -2440,7 +2440,7 @@
 </histogram>
 
 <histogram name="Android.PlayServices.Installed" enum="BooleanInstalled"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>twellington@chromium.org</owner>
   <owner>tedchoc@chromium.org</owner>
   <summary>
@@ -2450,7 +2450,7 @@
 </histogram>
 
 <histogram name="Android.PlayServices.Version" units="versioncode"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>twellington@chromium.org</owner>
   <owner>tedchoc@chromium.org</owner>
   <summary>
@@ -2483,7 +2483,7 @@
 </histogram>
 
 <histogram name="Android.RequestDesktopSite.UseDesktopUserAgent" enum="Boolean"
-    expires_after="M96">
+    expires_after="2022-02-06">
   <owner>gangwu@chromium.org</owner>
   <owner>fgorski@chromium.org</owner>
   <summary>
@@ -2493,7 +2493,7 @@
 </histogram>
 
 <histogram name="Android.RequestDesktopSite.UserSwitchToDesktop" enum="Boolean"
-    expires_after="M96">
+    expires_after="2022-02-06">
   <owner>gangwu@chromium.org</owner>
   <owner>fgorski@chromium.org</owner>
   <summary>
@@ -2593,7 +2593,7 @@
 </histogram>
 
 <histogram name="Android.SelectFileDialogContentSelected"
-    units="SelectFileDialogContent" expires_after="M96">
+    units="SelectFileDialogContent" expires_after="2022-02-06">
   <owner>finnur@chromium.org</owner>
   <owner>peter@chromium.org</owner>
   <summary>
@@ -2605,7 +2605,7 @@
 </histogram>
 
 <histogram name="Android.SelectFileDialogImgCount" units="images"
-    expires_after="M96">
+    expires_after="2022-02-06">
   <owner>finnur@chromium.org</owner>
   <owner>peter@chromium.org</owner>
   <summary>
@@ -2641,7 +2641,7 @@
 </histogram>
 
 <histogram name="Android.StrictMode.OverrideUrlLoadingTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>yfriedman@chromium.org</owner>
   <owner>wnwen@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml
index 92f40a5..b931f2d5 100644
--- a/tools/metrics/histograms/metadata/apps/histograms.xml
+++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -2575,7 +2575,7 @@
 </histogram>
 
 <histogram base="true" name="Apps.StateTransition.Drag.PresentationTime"
-    units="ms" expires_after="2021-12-05">
+    units="ms" expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes
      name="TabletOrClamshellMode" -->
 
@@ -2588,7 +2588,7 @@
 
 <histogram base="true"
     name="Apps.StateTransition.Drag.PresentationTime.MaxLatency" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes
      name="TabletOrClamshellMode" -->
 
diff --git a/tools/metrics/histograms/metadata/ash/histograms.xml b/tools/metrics/histograms/metadata/ash/histograms.xml
index 1ac44ba..132e4a8 100644
--- a/tools/metrics/histograms/metadata/ash/histograms.xml
+++ b/tools/metrics/histograms/metadata/ash/histograms.xml
@@ -2339,7 +2339,7 @@
 </histogram>
 
 <histogram name="Ash.Shelf.NumberOfUnpinnedItems" units="Icons"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>anasalazar@google.com</owner>
   <owner>mmourgos@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/assistant/histograms.xml b/tools/metrics/histograms/metadata/assistant/histograms.xml
index 7360442..555619f 100644
--- a/tools/metrics/histograms/metadata/assistant/histograms.xml
+++ b/tools/metrics/histograms/metadata/assistant/histograms.xml
@@ -82,7 +82,7 @@
 </histogram>
 
 <histogram name="Assistant.ContextEnabledUserCount" enum="BooleanEnabled"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>updowndota@chromium.org</owner>
   <owner>xiaohuic@chromium.org</owner>
   <summary>
@@ -94,7 +94,7 @@
 </histogram>
 
 <histogram name="Assistant.DspHotwordDetection"
-    enum="DspHotwordDetectionStatus" expires_after="2021-12-05">
+    enum="DspHotwordDetectionStatus" expires_after="2022-02-06">
   <owner>meilinw@chromium.org</owner>
   <owner>xiaohuic@chromium.org</owner>
   <summary>
@@ -165,7 +165,7 @@
 </histogram>
 
 <histogram name="Assistant.OptInFlowStatus" enum="AssistantOptInFlowStatus"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>updowndota@chromium.org</owner>
   <owner>croissant-eng@chromium.org</owner>
   <summary>Record the status of the Assistant opt-in flow.</summary>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml
index fbe96bc..5604ef7 100644
--- a/tools/metrics/histograms/metadata/autofill/histograms.xml
+++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -1768,7 +1768,7 @@
 </histogram>
 
 <histogram name="Autofill.Offer.StoredOfferCount" units="offers"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>siyua@chromium.org</owner>
   <owner>payments-autofill-team@google.com</owner>
   <summary>
@@ -1778,7 +1778,7 @@
 </histogram>
 
 <histogram name="Autofill.Offer.StoredOfferRelatedCardCount" units="cards"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>siyua@chromium.org</owner>
   <owner>payments-autofill-team@google.com</owner>
   <summary>
@@ -1788,7 +1788,7 @@
 </histogram>
 
 <histogram name="Autofill.Offer.StoredOfferRelatedMerchantCount"
-    units="merchants" expires_after="2021-12-05">
+    units="merchants" expires_after="2022-02-06">
   <owner>siyua@chromium.org</owner>
   <owner>payments-autofill-team@google.com</owner>
   <summary>
@@ -1821,7 +1821,7 @@
 </histogram>
 
 <histogram name="Autofill.Offer.SyncedOfferDataBeingValid" units="offers"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>siyua@chromium.org</owner>
   <owner>payments-autofill-team@google.com</owner>
   <summary>
@@ -2468,7 +2468,7 @@
 </histogram>
 
 <histogram name="Autofill.SuggestionAccepted.OffTheRecord" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <summary>
@@ -2508,7 +2508,7 @@
 </histogram>
 
 <histogram name="Autofill.SuggestionShown.OffTheRecord" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml
index d28aafa..99f307a 100644
--- a/tools/metrics/histograms/metadata/blink/histograms.xml
+++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -69,7 +69,7 @@
 </histogram>
 
 <histogram base="true" name="Blink.Animate.UpdateTime" units="microseconds"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" -->
 
 <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" -->
@@ -1268,7 +1268,7 @@
 </histogram>
 
 <histogram base="true" name="Blink.ForcedStyleAndLayout.UpdateTime"
-    units="microseconds" expires_after="2021-12-05">
+    units="microseconds" expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" -->
 
 <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" -->
diff --git a/tools/metrics/histograms/metadata/browser/histograms.xml b/tools/metrics/histograms/metadata/browser/histograms.xml
index 9f604216..c46961a0 100644
--- a/tools/metrics/histograms/metadata/browser/histograms.xml
+++ b/tools/metrics/histograms/metadata/browser/histograms.xml
@@ -769,7 +769,7 @@
 </histogram>
 
 <histogram name="Browser.WindowCount.Guest" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <summary>
@@ -781,7 +781,7 @@
 </histogram>
 
 <histogram name="Browser.WindowCount.Incognito" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <summary>
@@ -1135,7 +1135,7 @@
 </histogram>
 
 <histogram name="BrowserSwitcher.LaunchTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>nicolaso@chromium.org</owner>
   <owner>pastarmovj@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml
index 23198fb..e3c4b69a 100644
--- a/tools/metrics/histograms/metadata/chromeos/histograms.xml
+++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -186,7 +186,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Camera.Facing" enum="ChromeOSCameraFacing"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>wtlee@chromium.org</owner>
   <owner>chromeos-camera-eng@google.com</owner>
   <summary>
@@ -230,7 +230,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Camera.OpenDeviceClientType"
-    enum="ChromeOSCameraClientType" expires_after="2021-12-05">
+    enum="ChromeOSCameraClientType" expires_after="2022-02-06">
   <owner>lnishan@chromium.org</owner>
   <owner>chromeos-camera-eng@google.com</owner>
   <summary>
@@ -719,7 +719,7 @@
 </histogram>
 
 <histogram name="ChromeOS.KeyPermissionsManager.ArcUsageUpdate"
-    enum="KeyPermissionsManagerArcUsageUpdateStatus" expires_after="2021-12-05">
+    enum="KeyPermissionsManagerArcUsageUpdateStatus" expires_after="2022-02-06">
   <owner>omorsi@google.com</owner>
   <owner>pmarko@google.com</owner>
   <summary>
@@ -729,7 +729,7 @@
 </histogram>
 
 <histogram name="ChromeOS.KeyPermissionsManager.ArcUsageUpdateTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>omorsi@google.com</owner>
   <owner>pmarko@chromium.org</owner>
   <summary>
@@ -749,7 +749,7 @@
 </histogram>
 
 <histogram name="ChromeOS.KeyPermissionsManager.MigrationTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>omorsi@google.com</owner>
   <owner>pmarko@chromium.org</owner>
   <summary>
@@ -1091,7 +1091,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.Bluetooth.BluetoothOnOff"
-    enum="BooleanToggled" expires_after="2021-12-05">
+    enum="BooleanToggled" expires_after="2022-02-06">
   <owner>khorimoto@chromium.org</owner>
   <owner>hsuregan@chromium.org</owner>
   <owner>cros-customization@google.com</owner>
@@ -1122,7 +1122,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.Device.TouchpadSpeedValue"
-    enum="TouchpadSensitivity" expires_after="2021-12-05">
+    enum="TouchpadSensitivity" expires_after="2022-02-06">
   <owner>khorimoto@chromium.org</owner>
   <owner>hsuregan@chromium.org</owner>
   <owner>cros-customization@google.com</owner>
@@ -1178,7 +1178,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.Languages.Interaction"
-    enum="SettingsLanguagesPageInteraction" expires_after="2021-12-05">
+    enum="SettingsLanguagesPageInteraction" expires_after="2022-02-06">
   <owner>myy@chromium.org</owner>
   <owner>essential-inputs-team@google.com</owner>
   <summary>
@@ -1188,7 +1188,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.Languages.OfferToTranslateCheckbox"
-    enum="BooleanChecked" expires_after="2021-12-05">
+    enum="BooleanChecked" expires_after="2022-02-06">
   <owner>myy@chromium.org</owner>
   <owner>essential-inputs-team@google.com</owner>
   <summary>
@@ -1198,7 +1198,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.Languages.SupportPageVisits"
-    enum="SettingsLanguagesSupportPage" expires_after="2021-12-05">
+    enum="SettingsLanguagesSupportPage" expires_after="2022-02-06">
   <owner>myy@chromium.org</owner>
   <owner>essential-inputs-team@google.com</owner>
   <summary>
@@ -1207,7 +1207,7 @@
 </histogram>
 
 <histogram base="true" name="ChromeOS.Settings.Languages.Toggle"
-    enum="BooleanToggled" expires_after="2021-12-05">
+    enum="BooleanToggled" expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="SettingsLanguagesPageToggle" -->
 
   <owner>myy@chromium.org</owner>
@@ -1240,7 +1240,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.NumCharsOfQueries" units="characters"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>khorimoto@chromium.org</owner>
   <owner>hsuregan@chromium.org</owner>
   <owner>cros-customization@google.com</owner>
@@ -1278,7 +1278,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.NumSearchResultsFetched" units="results"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>khorimoto@chromium.org</owner>
   <owner>hsuregan@chromium.org</owner>
   <owner>cros-customization@google.com</owner>
@@ -1344,7 +1344,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.SearchRequests"
-    enum="OsSettingSearchRequestTypes" expires_after="2021-12-05">
+    enum="OsSettingSearchRequestTypes" expires_after="2022-02-06">
   <owner>khorimoto@chromium.org</owner>
   <owner>hsuregan@chromium.org</owner>
   <owner>cros-customization@google.com</owner>
@@ -1369,7 +1369,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.SearchResultSectionSelected"
-    enum="OsSettingsSection" expires_after="2021-12-05">
+    enum="OsSettingsSection" expires_after="2022-02-06">
   <owner>khorimoto@chromium.org</owner>
   <owner>hsuregan@chromium.org</owner>
   <owner>cros-customization@google.com</owner>
@@ -1389,7 +1389,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.SearchResultSubpageSelected"
-    enum="OsSettingsSubpage" expires_after="2021-12-05">
+    enum="OsSettingsSubpage" expires_after="2022-02-06">
   <owner>khorimoto@chromium.org</owner>
   <owner>hsuregan@chromium.org</owner>
   <owner>cros-customization@google.com</owner>
@@ -1399,7 +1399,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.SearchResultTypeSelected"
-    enum="OsSettingsSearchResultType" expires_after="2021-12-05">
+    enum="OsSettingsSearchResultType" expires_after="2022-02-06">
   <owner>khorimoto@chromium.org</owner>
   <owner>hsuregan@chromium.org</owner>
   <owner>cros-customization@google.com</owner>
@@ -1433,7 +1433,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Settings.UserActionOnSearchResultsShown"
-    enum="OsSettingSearchBoxUserAction" expires_after="2021-12-05">
+    enum="OsSettingSearchBoxUserAction" expires_after="2022-02-06">
   <owner>khorimoto@chromium.org</owner>
   <owner>hsuregan@chromium.org</owner>
   <owner>cros-customization@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/compositing/histograms.xml b/tools/metrics/histograms/metadata/compositing/histograms.xml
index b2729d2..4574af0 100644
--- a/tools/metrics/histograms/metadata/compositing/histograms.xml
+++ b/tools/metrics/histograms/metadata/compositing/histograms.xml
@@ -94,7 +94,7 @@
 </histogram>
 
 <histogram name="Compositing.Browser.NumRenderSurfaces" units="surfaces"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>schenney@chromium.org</owner>
   <owner>paint-dev@chromium.org</owner>
   <summary>
@@ -105,7 +105,7 @@
 </histogram>
 
 <histogram name="Compositing.ColorGamut" enum="ColorGamut"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>cblume@chromium.org</owner>
   <owner>khushalsagar@chromium.org</owner>
   <summary>
@@ -255,7 +255,7 @@
 </histogram>
 
 <histogram name="Compositing.Display.Draw.Occlusion.Calculation.Time"
-    units="microseconds" expires_after="2021-12-05">
+    units="microseconds" expires_after="2022-02-06">
   <owner>yiyix@chromium.org</owner>
   <owner>chromeos-gfx@chromium.org</owner>
   <summary>
@@ -361,7 +361,7 @@
 </histogram>
 
 <histogram name="Compositing.Display.VizDependencyResolvedToGpuStartedDrawUs"
-    units="microseconds" expires_after="2021-08-22">
+    units="microseconds" expires_after="2022-02-09">
   <owner>vasilyt@chromium.org</owner>
   <owner>backer@chromium.org</owner>
   <summary>
@@ -374,7 +374,7 @@
 </histogram>
 
 <histogram name="Compositing.Display.VizScheduledDrawToDependencyResolvedUs"
-    units="microseconds" expires_after="2021-08-22">
+    units="microseconds" expires_after="2022-02-09">
   <owner>vasilyt@chromium.org</owner>
   <owner>backer@chromium.org</owner>
   <summary>
@@ -388,7 +388,7 @@
 </histogram>
 
 <histogram name="Compositing.Display.VizScheduledDrawToGpuStartedDrawUs"
-    units="microseconds" expires_after="2021-12-26">
+    units="microseconds" expires_after="2022-02-09">
   <owner>vasilyt@chromium.org</owner>
   <owner>backer@chromium.org</owner>
   <summary>
@@ -457,7 +457,7 @@
 </histogram>
 
 <histogram name="Compositing.Renderer.LayersUpdateTime" units="microseconds"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>schenney@chromium.org</owner>
   <owner>paint-dev@chromium.org</owner>
   <summary>
@@ -523,7 +523,7 @@
 </histogram>
 
 <histogram name="Compositing.Renderer.NumActiveLayers" units="layers"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>schenney@chromium.org</owner>
   <owner>paint-dev@chromium.org</owner>
   <summary>
@@ -533,7 +533,7 @@
 </histogram>
 
 <histogram name="Compositing.Renderer.NumActivePictureLayers" units="layers"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>schenney@chromium.org</owner>
   <owner>paint-dev@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/cookie/histograms.xml b/tools/metrics/histograms/metadata/cookie/histograms.xml
index 6cf6815..7d2a110 100644
--- a/tools/metrics/histograms/metadata/cookie/histograms.xml
+++ b/tools/metrics/histograms/metadata/cookie/histograms.xml
@@ -160,7 +160,7 @@
   </summary>
 </histogram>
 
-<histogram name="Cookie.Count2" units="units" expires_after="2021-12-05">
+<histogram name="Cookie.Count2" units="units" expires_after="2022-02-06">
   <owner>bingler@chromium.org</owner>
   <owner>morlovich@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/cros/histograms.xml b/tools/metrics/histograms/metadata/cros/histograms.xml
index 79b2102..c235351 100644
--- a/tools/metrics/histograms/metadata/cros/histograms.xml
+++ b/tools/metrics/histograms/metadata/cros/histograms.xml
@@ -74,7 +74,7 @@
 </histogram>
 
 <histogram name="CrosDisks.Fuse.FuseZip" enum="FuseZipError"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>fdegros@chromium.org</owner>
   <owner>chromeos-files-app@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/cross_device/histograms.xml b/tools/metrics/histograms/metadata/cross_device/histograms.xml
index 2bb7c82..1aaf1db 100644
--- a/tools/metrics/histograms/metadata/cross_device/histograms.xml
+++ b/tools/metrics/histograms/metadata/cross_device/histograms.xml
@@ -175,7 +175,7 @@
 </histogram>
 
 <histogram name="CryptAuth.DeviceSync.Result" enum="BooleanSuccess"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>hansberry@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>Indicates success of performing a DeviceSync.</summary>
@@ -263,7 +263,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.DeviceActivityGetter.ApiCallResult.GetDevicesActivityStatus"
-    enum="CryptAuthApiCallResult" expires_after="2021-12-05">
+    enum="CryptAuthApiCallResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -311,7 +311,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.DeviceSyncer.AsyncTaskResult.DeviceMetadataDecryption"
-    enum="CryptAuthAsyncTaskResult" expires_after="2021-12-05">
+    enum="CryptAuthAsyncTaskResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -326,7 +326,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.DeviceSyncer.AsyncTaskResult.GroupPrivateKeyDecryption"
-    enum="CryptAuthAsyncTaskResult" expires_after="2021-12-05">
+    enum="CryptAuthAsyncTaskResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -374,7 +374,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.DeviceSyncer.IsLocalDeviceMetadataConsistent"
-    enum="BooleanConsistent" expires_after="2021-12-05">
+    enum="BooleanConsistent" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -385,7 +385,7 @@
 </histogram>
 
 <histogram name="CryptAuth.DeviceSyncV2.DeviceSyncer.MetadataDecryptionSuccess"
-    enum="BooleanSuccess" expires_after="2021-12-05">
+    enum="BooleanSuccess" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -396,7 +396,7 @@
 </histogram>
 
 <histogram name="CryptAuth.DeviceSyncV2.DeviceSyncer.MetadataParsingSuccess"
-    enum="BooleanSuccess" expires_after="2021-12-05">
+    enum="BooleanSuccess" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -409,7 +409,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.FeatureStatusGetter.ApiCallResult.GetFeatureStatuses"
-    enum="CryptAuthApiCallResult" expires_after="2021-12-05">
+    enum="CryptAuthApiCallResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -421,7 +421,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.FeatureStatusGetter.CorrectNumberOfDevicesInResponse"
-    enum="BooleanExpected" expires_after="2021-12-05">
+    enum="BooleanExpected" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -445,7 +445,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.FeatureStatusGetter.IsDuplicateDeviceId"
-    enum="BooleanDuplicate" expires_after="2021-12-05">
+    enum="BooleanDuplicate" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -457,7 +457,7 @@
 </histogram>
 
 <histogram name="CryptAuth.DeviceSyncV2.FeatureStatusGetter.IsKnownFeatureType"
-    enum="BooleanKnown" expires_after="2021-12-05">
+    enum="BooleanKnown" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -471,7 +471,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.FeatureStatusGetter.IsUnsupportedFeatureMarkedEnabled"
-    enum="Boolean" expires_after="2021-12-05">
+    enum="Boolean" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -484,7 +484,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.FeatureStatusGetter.WasDeviceInResponseRequested"
-    enum="BooleanRequested" expires_after="2021-12-05">
+    enum="BooleanRequested" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -496,7 +496,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.FeatureStatusSetter.ApiCallResult.SetFeatureStatuses"
-    enum="CryptAuthApiCallResult" expires_after="2021-12-05">
+    enum="CryptAuthApiCallResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -520,7 +520,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.GroupPrivateKeySharer.ApiCallResult.ShareGroupPrivateKey"
-    enum="CryptAuthApiCallResult" expires_after="2021-12-05">
+    enum="CryptAuthApiCallResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -547,7 +547,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.GroupPrivateKeySharer.EncryptionSuccess"
-    enum="BooleanSuccess" expires_after="2021-12-05">
+    enum="BooleanSuccess" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -584,7 +584,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.GroupPrivateKeySharer.IsEncryptingKeyEmpty"
-    enum="Boolean" expires_after="2021-12-05">
+    enum="Boolean" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -597,7 +597,7 @@
 </histogram>
 
 <histogram name="CryptAuth.DeviceSyncV2.InvocationReason"
-    enum="CryptAuthV2InvocationReason" expires_after="2021-12-05">
+    enum="CryptAuthV2InvocationReason" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -608,7 +608,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.MetadataSyncer.ApiCallResult.FirstSyncMetadata"
-    enum="CryptAuthApiCallResult" expires_after="2021-12-05">
+    enum="CryptAuthApiCallResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -620,7 +620,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.MetadataSyncer.ApiCallResult.SecondSyncMetadata"
-    enum="CryptAuthApiCallResult" expires_after="2021-12-05">
+    enum="CryptAuthApiCallResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -632,7 +632,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.MetadataSyncer.AsyncTaskResult.GroupKeyCreation"
-    enum="CryptAuthAsyncTaskResult" expires_after="2021-12-05">
+    enum="CryptAuthAsyncTaskResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -644,7 +644,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.MetadataSyncer.AsyncTaskResult.LocalDeviceMetadataEncryption"
-    enum="CryptAuthAsyncTaskResult" expires_after="2021-12-05">
+    enum="CryptAuthAsyncTaskResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -704,7 +704,7 @@
 
 <histogram
     name="CryptAuth.DeviceSyncV2.MetadataSyncer.IsDeviceMetadataPacketValid"
-    enum="Boolean" expires_after="2021-12-05">
+    enum="Boolean" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -715,7 +715,7 @@
 </histogram>
 
 <histogram name="CryptAuth.DeviceSyncV2.MetadataSyncer.IsDuplicateDeviceId"
-    enum="Boolean" expires_after="2021-12-05">
+    enum="Boolean" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -809,7 +809,7 @@
 </histogram>
 
 <histogram name="CryptAuth.DeviceSyncV2.Result.ResultCode"
-    enum="CryptAuthV2DeviceSyncResultCode" expires_after="2021-12-05">
+    enum="CryptAuthV2DeviceSyncResultCode" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -819,7 +819,7 @@
 </histogram>
 
 <histogram name="CryptAuth.DeviceSyncV2.Result.ResultType"
-    enum="CryptAuthV2DeviceSyncResultType" expires_after="2021-12-05">
+    enum="CryptAuthV2DeviceSyncResultType" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -860,7 +860,7 @@
 </histogram>
 
 <histogram name="CryptAuth.EnrollmentV2.AsyncTaskResult.KeyCreation"
-    enum="CryptAuthAsyncTaskResult" expires_after="2021-12-05">
+    enum="CryptAuthAsyncTaskResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -904,7 +904,7 @@
 </histogram>
 
 <histogram name="CryptAuth.EnrollmentV2.InvocationReason"
-    enum="CryptAuthV2InvocationReason" expires_after="2021-12-05">
+    enum="CryptAuthV2InvocationReason" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -914,7 +914,7 @@
 </histogram>
 
 <histogram name="CryptAuth.EnrollmentV2.Result.ResultCode"
-    enum="CryptAuthV2EnrollmentResult" expires_after="2021-12-05">
+    enum="CryptAuthV2EnrollmentResult" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
@@ -1086,7 +1086,7 @@
 </histogram>
 
 <histogram name="CryptAuth.InstanceId.DidInstanceIdChange"
-    enum="BooleanChanged" expires_after="2021-12-05">
+    enum="BooleanChanged" expires_after="2022-02-06">
   <owner>nohle@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/dev/histograms.xml b/tools/metrics/histograms/metadata/dev/histograms.xml
index 2c224d8..8b69ba5 100644
--- a/tools/metrics/histograms/metadata/dev/histograms.xml
+++ b/tools/metrics/histograms/metadata/dev/histograms.xml
@@ -22,7 +22,7 @@
 <histograms>
 
 <histogram name="DevTools.ActionTaken" enum="DevToolsAction"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>alph@chromium.org</owner>
   <owner>yangguo@chromium.org</owner>
   <owner>bmeurer@chromium.org</owner>
@@ -364,7 +364,7 @@
 </histogram>
 
 <histogram name="DevTools.PanelShown" enum="DevToolsPanel"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>alph@chromium.org</owner>
   <owner>yangguo@chromium.org</owner>
   <owner>bmeurer@chromium.org</owner>
@@ -380,7 +380,7 @@
 </histogram>
 
 <histogram name="DevTools.SidebarPaneShown" enum="DevToolsSidebarPane"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>changhaohan@chromium.org</owner>
   <owner>yangguo@chromium.org</owner>
   <owner>bmeurer@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/download/histograms.xml b/tools/metrics/histograms/metadata/download/histograms.xml
index f133e863..c6b71e8a 100644
--- a/tools/metrics/histograms/metadata/download/histograms.xml
+++ b/tools/metrics/histograms/metadata/download/histograms.xml
@@ -592,7 +592,7 @@
 </histogram>
 
 <histogram name="Download.OverwrittenDownloadRemovedFromHistory"
-    units="downloads" expires_after="2021-12-05">
+    units="downloads" expires_after="2022-02-06">
   <owner>qinmin@chromium.org</owner>
   <owner>chrome-downloads@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/extension/histograms.xml b/tools/metrics/histograms/metadata/extension/histograms.xml
index 881b78d..7d7353e 100644
--- a/tools/metrics/histograms/metadata/extension/histograms.xml
+++ b/tools/metrics/histograms/metadata/extension/histograms.xml
@@ -42,7 +42,7 @@
 </histogram>
 
 <histogram name="ExtensionBlacklist.BlockCRX" enum="ExtensionLocation"
-    expires_after="2021-12-01">
+    expires_after="2022-02-06">
   <owner>rdevlin.cronin@chromium.org</owner>
   <owner>extensions-core@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/extensions/histograms.xml b/tools/metrics/histograms/metadata/extensions/histograms.xml
index b77325d..e9f8093 100644
--- a/tools/metrics/histograms/metadata/extensions/histograms.xml
+++ b/tools/metrics/histograms/metadata/extensions/histograms.xml
@@ -60,7 +60,7 @@
 </histogram>
 
 <histogram name="Extensions.ActiveScriptController.DeniedExtensions"
-    units="Extension Count" expires_after="2021-12-05">
+    units="Extension Count" expires_after="2022-02-06">
   <owner>rdevlin.cronin@chromium.org</owner>
   <owner>extensions-core@chromium.org</owner>
   <summary>
@@ -70,7 +70,7 @@
 </histogram>
 
 <histogram name="Extensions.ActiveScriptController.PermittedExtensions"
-    units="Extension Count" expires_after="2021-12-05">
+    units="Extension Count" expires_after="2022-02-06">
   <owner>rdevlin.cronin@chromium.org</owner>
   <owner>extensions-core@chromium.org</owner>
   <summary>
@@ -1487,7 +1487,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledAndBlackListed" units="count"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>swapnilgupta@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1500,7 +1500,7 @@
 
 <histogram name="Extensions.ForceInstalledCacheStatus"
     enum="ExtensionInstallationDownloadingCacheStatus"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>swapnilgupta@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>poromov@chromium.org</owner>
@@ -1526,7 +1526,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledDownloadingStage"
-    enum="ExtensionInstallationDownloadingStage" expires_after="2021-12-05">
+    enum="ExtensionInstallationDownloadingStage" expires_after="2022-02-06">
   <owner>burunduk@chromium.org</owner>
   <owner>swapnilgupta@google.com</owner>
   <owner>managed-devices@google.com</owner>
@@ -1542,7 +1542,7 @@
 
 <histogram name="Extensions.ForceInstalledFailureCacheStatus"
     enum="ExtensionInstallationDownloadingCacheStatus"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>burunduk@chromium.org</owner>
   <owner>swapnilgupta@google.com</owner>
   <owner>managed-devices@google.com</owner>
@@ -1556,7 +1556,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledFailureCrxInstallError"
-    enum="ExtensionInstallationCrxInstallError" expires_after="2021-12-05">
+    enum="ExtensionInstallationCrxInstallError" expires_after="2022-02-06">
   <owner>burunduk@chromium.org</owner>
   <owner>swapnilgupta@google.com</owner>
   <owner>managed-devices@google.com</owner>
@@ -1600,7 +1600,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledFailureReason3"
-    enum="ExtensionInstallationFailureReason" expires_after="2021-12-05">
+    enum="ExtensionInstallationFailureReason" expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="ExtensionSource" -->
 
   <owner>burunduk@chromium.org</owner>
@@ -1750,7 +1750,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledLoadTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>burunduk@chromium.org</owner>
   <owner>swapnilgupta@google.com</owner>
   <owner>managed-devices@google.com</owner>
@@ -1761,7 +1761,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledNotLoadedDisableReason"
-    enum="ExtensionDisableReason" expires_after="2021-12-05">
+    enum="ExtensionDisableReason" expires_after="2022-02-06">
   <owner>swapnilgupta@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1787,7 +1787,7 @@
 
 <histogram
     name="Extensions.ForceInstalledSessionsWithNonMisconfigurationFailureOccured"
-    enum="Boolean" expires_after="2021-12-05">
+    enum="Boolean" expires_after="2022-02-06">
   <owner>burunduk@chromium.org</owner>
   <owner>swapnilgupta@google.com</owner>
   <owner>managed-devices@google.com</owner>
@@ -1821,7 +1821,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledTimedOutAndNotInstalledCount"
-    units="units" expires_after="2021-12-05">
+    units="units" expires_after="2022-02-06">
   <owner>burunduk@chromium.org</owner>
   <owner>swapnilgupta@google.com</owner>
   <owner>managed-devices@google.com</owner>
@@ -1832,7 +1832,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledTimedOutCount" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>burunduk@chromium.org</owner>
   <owner>swapnilgupta@google.com</owner>
   <owner>managed-devices@google.com</owner>
@@ -1880,7 +1880,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledTotalCandidateCount" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>burunduk@chromium.org</owner>
   <owner>swapnilgupta@google.com</owner>
   <owner>managed-devices@google.com</owner>
@@ -1938,7 +1938,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceToolbarPinnedCount" units="extensions"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>nicolaso@chromium.org</owner>
   <owner>chrome-enterprise-team-core@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/gpu/histograms.xml b/tools/metrics/histograms/metadata/gpu/histograms.xml
index 81dd184..ce7f96ea 100644
--- a/tools/metrics/histograms/metadata/gpu/histograms.xml
+++ b/tools/metrics/histograms/metadata/gpu/histograms.xml
@@ -308,7 +308,7 @@
 </histogram>
 
 <histogram name="GPU.ContextLost" enum="ContextLostReason"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>sievers@chromium.org</owner>
   <summary>
     The reason a GPU command buffer context of a given type was lost.
@@ -988,7 +988,7 @@
 </histogram>
 
 <histogram name="GPU.IOSurface.TexImageTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>ccameron@chromium.org</owner>
   <summary>
     The time that it took for a call to CGLTexImageIOSurface2D to complete.
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
index 9875051b..882ceeb 100644
--- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
+++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -13174,6 +13174,12 @@
   </affected-histogram>
   <affected-histogram name="Permissions.DSE.AutoPermissionRevertTransition"/>
   <affected-histogram name="Permissions.DSE.EffectiveSetting"/>
+  <affected-histogram
+      name="Permissions.DSE.InvalidAutoPermissionRevertTransition.BackedUpSetting"/>
+  <affected-histogram
+      name="Permissions.DSE.InvalidAutoPermissionRevertTransition.EffectiveSetting"/>
+  <affected-histogram
+      name="Permissions.DSE.InvalidAutoPermissionRevertTransition.EndStateSetting"/>
   <affected-histogram name="Permissions.MissingOSLevelPermission.Action"/>
   <affected-histogram name="Permissions.MissingOSLevelPermission.ShouldShow"/>
   <affected-histogram name="Permissions.Prompt.Accepted.Persisted"/>
diff --git a/tools/metrics/histograms/metadata/history/histograms.xml b/tools/metrics/histograms/metadata/history/histograms.xml
index afc1d40..22feba4 100644
--- a/tools/metrics/histograms/metadata/history/histograms.xml
+++ b/tools/metrics/histograms/metadata/history/histograms.xml
@@ -374,7 +374,7 @@
 </histogram>
 
 <histogram name="History.ClearBrowsingData.UserDeletedFromTab"
-    enum="ClearBrowsingDataTab" expires_after="2021-12-05">
+    enum="ClearBrowsingDataTab" expires_after="2022-02-06">
   <owner>dullweber@chromium.org</owner>
   <owner>msramek@chromium.org</owner>
   <summary>
@@ -694,7 +694,7 @@
 </histogram>
 
 <histogram name="History.InMemoryURLHistoryItems" units="items"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>mpearson@chromium.org</owner>
   <owner>chrome-omnibox-team@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/input/histograms.xml b/tools/metrics/histograms/metadata/input/histograms.xml
index b2bedca3..3a70b0c 100644
--- a/tools/metrics/histograms/metadata/input/histograms.xml
+++ b/tools/metrics/histograms/metadata/input/histograms.xml
@@ -22,7 +22,7 @@
 <histograms>
 
 <histogram name="InputMethod.ActiveCount" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>myy@chromium.org</owner>
   <owner>essential-inputs-team@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml
index 35ceeea..057832c 100644
--- a/tools/metrics/histograms/metadata/ios/histograms.xml
+++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -1140,7 +1140,7 @@
 </histogram>
 
 <histogram name="IOS.SiriShortcuts.Count" units="shortcuts"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>gujen@google.com</owner>
   <owner>sebsg@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml
index d624bca..98002db 100644
--- a/tools/metrics/histograms/metadata/media/histograms.xml
+++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -67,7 +67,7 @@
 </histogram>
 
 <histogram name="Media.Android.MediaPlayerWatchTime"
-    enum="MediaPlayerWatchTimeType" expires_after="2021-12-05">
+    enum="MediaPlayerWatchTimeType" expires_after="2022-02-06">
   <owner>sandersd@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -153,7 +153,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Capture.DetectedMissingCallbacks"
-    enum="BooleanMissingCallbacks" expires_after="2021-12-05">
+    enum="BooleanMissingCallbacks" expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -182,7 +182,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Capture.Glitches" units="glitches"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -214,7 +214,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Capture.LargestGlitchMs" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -225,7 +225,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Capture.LostFramesInMs" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -386,7 +386,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Capture.Win.Open" enum="AudioStreamOpenResult"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>gudiou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -752,7 +752,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Render.Glitches" units="glitches"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -763,7 +763,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Render.LargestGlitchMs" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -774,7 +774,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Render.LostFramesInMs" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -967,7 +967,7 @@
 </histogram>
 
 <histogram name="Media.AudioCapturerAudioGlitches" enum="AudioGlitchResult"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -977,7 +977,7 @@
 </histogram>
 
 <histogram name="Media.AudioCapturerDroppedData" units="%"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -1031,7 +1031,7 @@
 </histogram>
 
 <histogram name="Media.AudioInputControllerSessionSilenceReport"
-    enum="AudioInputSilenceReport" expires_after="2021-12-05">
+    enum="AudioInputSilenceReport" expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -1215,7 +1215,7 @@
 </histogram>
 
 <histogram name="Media.AudioRendererAudioGlitches" enum="AudioGlitchResult"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>henrika@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -1240,7 +1240,7 @@
 </histogram>
 
 <histogram name="Media.AudioRendererMissedDeadline" units="%"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dalecurtis@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -1419,7 +1419,7 @@
 </histogram>
 
 <histogram name="Media.Controls.Show.Audio" enum="MediaControlsShowReason"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>steimel@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -1431,7 +1431,7 @@
 </histogram>
 
 <histogram name="Media.Controls.Show.Video" enum="MediaControlsShowReason"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>steimel@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -2262,7 +2262,7 @@
 </histogram>
 
 <histogram name="Media.GlobalMediaControls.UserActionFocus"
-    enum="BooleanFocused" expires_after="2021-12-05">
+    enum="BooleanFocused" expires_after="2022-02-06">
   <owner>steimel@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -2696,7 +2696,7 @@
 </histogram>
 
 <histogram name="Media.LowLatencyAudioCaptureStartupSuccess"
-    enum="AudioCaptureStartupResult" expires_after="2021-12-05">
+    enum="AudioCaptureStartupResult" expires_after="2022-02-06">
   <owner>armax@chromium.org</owner>
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
@@ -2928,7 +2928,7 @@
 </histogram>
 
 <histogram base="true" name="Media.MSE.CodecChangeTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>wolenetz@chromium.org</owner>
   <owner>sandersd@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
@@ -2971,7 +2971,7 @@
 </histogram>
 
 <histogram name="Media.MSE.Mp4ConsecutiveEmptySamples" units="samples"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>wolenetz@chromium.org</owner>
   <owner>sandersd@chromium.org</owner>
   <summary>
@@ -2984,7 +2984,7 @@
 </histogram>
 
 <histogram name="Media.MSE.Mp4EmptySamplesInTRun" units="samples"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>wolenetz@chromium.org</owner>
   <owner>sandersd@chromium.org</owner>
   <summary>
@@ -2995,7 +2995,7 @@
 </histogram>
 
 <histogram name="Media.MSE.Mp4SampleSize" units="bytes"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>wolenetz@chromium.org</owner>
   <owner>sandersd@chromium.org</owner>
   <summary>
@@ -3006,7 +3006,7 @@
 </histogram>
 
 <histogram name="Media.MSE.Mp4TrunSampleCount" units="samples"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>wolenetz@chromium.org</owner>
   <owner>sandersd@chromium.org</owner>
   <summary>
@@ -3187,7 +3187,7 @@
 </histogram>
 
 <histogram name="Media.OutputStreamDuration" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -3728,7 +3728,7 @@
 </histogram>
 
 <histogram name="Media.Session.ActiveTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>steimel@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -3751,7 +3751,7 @@
 </histogram>
 
 <histogram name="Media.Session.Play" enum="MediaSessionActionSource"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>steimel@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -3761,7 +3761,7 @@
 </histogram>
 
 <histogram name="Media.Session.RequestAudioFocusResult" enum="BooleanSuccess"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>steimel@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -3770,7 +3770,7 @@
 </histogram>
 
 <histogram name="Media.Session.Stop" enum="MediaSessionActionSource"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>steimel@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -3780,7 +3780,7 @@
 </histogram>
 
 <histogram name="Media.Session.Suspended" enum="MediaSessionSuspendedSource"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>steimel@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -4088,7 +4088,7 @@
 </histogram>
 
 <histogram name="Media.Video.Autoplay" enum="AutoplaySource"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dalecurtis@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -4108,7 +4108,7 @@
 </histogram>
 
 <histogram name="Media.Video.Autoplay.Muted.PlayMethod.BecomesVisible"
-    enum="Boolean" expires_after="2021-12-05">
+    enum="Boolean" expires_after="2022-02-06">
   <owner>dalecurtis@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -4121,7 +4121,7 @@
 </histogram>
 
 <histogram name="Media.Video.Autoplay.Muted.PlayMethod.OffscreenDuration"
-    units="ms" expires_after="2021-12-05">
+    units="ms" expires_after="2022-02-06">
   <owner>dalecurtis@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -4131,7 +4131,7 @@
 </histogram>
 
 <histogram name="Media.Video.Autoplay.Muted.UnmuteAction" enum="BooleanSuccess"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dalecurtis@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -4850,7 +4850,7 @@
 </histogram>
 
 <histogram name="Media.VTVDA.SessionFailureReason"
-    enum="VTVDASessionFailureType" expires_after="2021-12-05">
+    enum="VTVDASessionFailureType" expires_after="2022-02-06">
   <owner>sandersd@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/memory/histograms.xml b/tools/metrics/histograms/metadata/memory/histograms.xml
index 7a26d2c..465a208a 100644
--- a/tools/metrics/histograms/metadata/memory/histograms.xml
+++ b/tools/metrics/histograms/metadata/memory/histograms.xml
@@ -480,7 +480,7 @@
 </histogram>
 
 <histogram name="Memory.Discardable.FreelistSize.Foreground" units="KiB"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>thiabaud@google.com</owner>
   <owner>lizeb@chromium.org</owner>
   <summary>
@@ -510,7 +510,7 @@
 </histogram>
 
 <histogram name="Memory.Discardable.Size.Foreground" units="KiB"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>thiabaud@google.com</owner>
   <owner>lizeb@chromium.org</owner>
   <summary>
@@ -520,7 +520,7 @@
 </histogram>
 
 <histogram name="Memory.Discardable.VirtualSize.Foreground" units="KiB"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>thiabaud@google.com</owner>
   <owner>lizeb@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/mobile/histograms.xml b/tools/metrics/histograms/metadata/mobile/histograms.xml
index c3f2fda3..b659ef2 100644
--- a/tools/metrics/histograms/metadata/mobile/histograms.xml
+++ b/tools/metrics/histograms/metadata/mobile/histograms.xml
@@ -586,7 +586,7 @@
 </histogram>
 
 <histogram name="MobileDownload.DownloadLaterPromptStatus"
-    enum="DownloadLaterPromptStatus" expires_after="2021-12-05">
+    enum="DownloadLaterPromptStatus" expires_after="2022-02-06">
   <owner>xingliu@chromium.org</owner>
   <owner>clank-downloads@google.com</owner>
   <summary>
@@ -778,7 +778,7 @@
 </histogram>
 
 <histogram name="MobileFre.ChildAccountStatusDuration" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>skym@chromium.org</owner>
   <owner>wenyufu@chromium.org</owner>
   <summary>
@@ -788,7 +788,7 @@
 </histogram>
 
 <histogram base="true" name="MobileFre.FragmentInflationSpeed" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>skym@chromium.org</owner>
   <owner>wenyufu@chromium.org</owner>
   <summary>
@@ -801,7 +801,7 @@
 </histogram>
 
 <histogram base="true" name="MobileFre.FromLaunch" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>skym@chromium.org</owner>
   <owner>wenyufu@chromium.org</owner>
   <summary>
@@ -850,7 +850,7 @@
 </histogram>
 
 <histogram name="MobileFre.NativeInitialized" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>skym@chromium.org</owner>
   <owner>wenyufu@chromium.org</owner>
   <summary>
@@ -925,7 +925,7 @@
 </histogram>
 
 <histogram name="MobileFre.TosFragment.SpinnerVisibleDuration" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>skym@chromium.org</owner>
   <owner>wenyufu@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/navigation/histograms.xml b/tools/metrics/histograms/metadata/navigation/histograms.xml
index d655ed1..9dceec9 100644
--- a/tools/metrics/histograms/metadata/navigation/histograms.xml
+++ b/tools/metrics/histograms/metadata/navigation/histograms.xml
@@ -189,7 +189,7 @@
 </histogram>
 
 <histogram name="BackForwardCache.Eviction.Renderer"
-    enum="BackForwardCacheRendererEvictionReason" expires_after="2021-12-05">
+    enum="BackForwardCacheRendererEvictionReason" expires_after="2022-02-06">
   <owner>rakina@chromium.org</owner>
   <owner>bfcache-dev@chromium.org</owner>
   <summary>
@@ -243,7 +243,7 @@
 </histogram>
 
 <histogram name="BackForwardCache.HistoryNavigationOutcome"
-    enum="BackForwardCacheHistoryNavigationOutcome" expires_after="2021-12-05">
+    enum="BackForwardCacheHistoryNavigationOutcome" expires_after="2022-02-06">
   <owner>hajimehoshi@chromium.org</owner>
   <owner>bfcache-dev@chromium.org</owner>
   <summary>
@@ -422,7 +422,7 @@
 
 <histogram name="BackForwardCache.ReloadsAfterHistoryNavigation"
     enum="BackForwardCacheReloadsAfterHistoryNavigation"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>sreejakshetty@chromium.org</owner>
   <owner>altimin@chromium.org</owner>
   <owner>bfcache-dev@chromium.org</owner>
@@ -438,7 +438,7 @@
 
 <histogram name="BackForwardCache.ReloadsAndHistoryNavigations"
     enum="BackForwardCacheReloadsAndHistoryNavigations"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>sreejakshetty@chromium.org</owner>
   <owner>altimin@chromium.org</owner>
   <owner>bfcache-dev@chromium.org</owner>
@@ -937,7 +937,7 @@
 </histogram>
 
 <histogram name="Navigation.MainFrameProfileType2" enum="BrowserProfileType"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <summary>
@@ -957,7 +957,7 @@
 </histogram>
 
 <histogram name="Navigation.MainFrameSchemeDifferentPage2"
-    enum="NavigationScheme" expires_after="2021-12-05">
+    enum="NavigationScheme" expires_after="2022-02-06">
   <owner>elawrence@chromium.org</owner>
   <owner>estark@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml
index 86de09c..ab9b451 100644
--- a/tools/metrics/histograms/metadata/net/histograms.xml
+++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -42,7 +42,7 @@
 </variants>
 
 <histogram name="Net.AlternateProtocolBrokenLocation"
-    enum="BrokenAlternateProtocolLocation" expires_after="2021-12-05">
+    enum="BrokenAlternateProtocolLocation" expires_after="2022-02-06">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
@@ -1282,7 +1282,7 @@
 </histogram>
 
 <histogram name="Net.DNS.ProbeSequence.NetworkChange.Failure.AttemptTime"
-    units="ms" expires_after="2021-12-05">
+    units="ms" expires_after="2022-02-06">
   <owner>ericorth@chromium.org</owner>
   <owner>doh-core@google.com</owner>
   <summary>
@@ -1693,7 +1693,7 @@
 </histogram>
 
 <histogram name="Net.ErrorPageCounts" enum="NetErrorPageEvents"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>edwardjung@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
@@ -3277,7 +3277,7 @@
 </histogram>
 
 <histogram name="Net.QuicSession.ConnectionMigration"
-    enum="QuicConnectionMigrationStatus" expires_after="2021-12-05">
+    enum="QuicConnectionMigrationStatus" expires_after="2022-02-06">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -5259,7 +5259,7 @@
 </histogram>
 
 <histogram name="Net.SSLHandshakeDetails" enum="SSLHandshakeDetails"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>davidben@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
@@ -5306,7 +5306,7 @@
 </histogram>
 
 <histogram name="Net.SSLLegacyCryptoFallback" enum="SSLLegacyCryptoFallback"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>davidben@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/notifications/histograms.xml b/tools/metrics/histograms/metadata/notifications/histograms.xml
index c7ecafc..bba2354 100644
--- a/tools/metrics/histograms/metadata/notifications/histograms.xml
+++ b/tools/metrics/histograms/metadata/notifications/histograms.xml
@@ -485,7 +485,7 @@
 </histogram>
 
 <histogram name="Notifications.macOS.ServiceProcessRuntime" units="ms"
-    expires_after="M96">
+    expires_after="2022-02-06">
   <owner>knollr@chromium.org</owner>
   <owner>peter@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/offline/histograms.xml b/tools/metrics/histograms/metadata/offline/histograms.xml
index 16b37c6..67da941c 100644
--- a/tools/metrics/histograms/metadata/offline/histograms.xml
+++ b/tools/metrics/histograms/metadata/offline/histograms.xml
@@ -157,7 +157,7 @@
 </histogram>
 
 <histogram name="OfflineIndicator.ShownDurationV2" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>curranmax@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -828,7 +828,7 @@
 </histogram>
 
 <histogram name="OfflinePages.OfflineUsage.NotOfflineResilient"
-    enum="OfflinePagesOfflineUsage" expires_after="2021-12-05">
+    enum="OfflinePagesOfflineUsage" expires_after="2022-02-06">
   <owner>sclittle@chromium.org</owner>
   <owner>offline-dev@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/oobe/histograms.xml b/tools/metrics/histograms/metadata/oobe/histograms.xml
index 261f874..e2a5b288 100644
--- a/tools/metrics/histograms/metadata/oobe/histograms.xml
+++ b/tools/metrics/histograms/metadata/oobe/histograms.xml
@@ -230,7 +230,7 @@
 </histogram>
 
 <histogram name="OOBE.PinSetupScreen.UserActions"
-    enum="PinSetupScreenUserAction" expires_after="2021-12-05">
+    enum="PinSetupScreenUserAction" expires_after="2022-02-06">
   <owner>raleksandrov@google.com</owner>
   <owner>cros-oac@google.com</owner>
   <summary>
@@ -264,7 +264,7 @@
 </histogram>
 
 <histogram name="OOBE.RecommendApps.Fetcher.ResponseParseResult"
-    enum="RecommendAppsResponseParseResult" expires_after="2021-12-05">
+    enum="RecommendAppsResponseParseResult" expires_after="2022-02-06">
   <owner>raleksandrov@google.com</owner>
   <owner>cros-oac@google.com</owner>
   <owner>chromesky-eng@google.com</owner>
@@ -272,7 +272,7 @@
 </histogram>
 
 <histogram name="OOBE.RecommendApps.Screen.Action"
-    enum="RecommendAppsScreenAction" expires_after="2021-12-05">
+    enum="RecommendAppsScreenAction" expires_after="2022-02-06">
   <owner>raleksandrov@google.com</owner>
   <owner>cros-oac@google.com</owner>
   <owner>chromesky-eng@google.com</owner>
@@ -280,7 +280,7 @@
 </histogram>
 
 <histogram name="OOBE.RecommendApps.Screen.SelectedAppCount" units="apps"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>raleksandrov@google.com</owner>
   <owner>cros-oac@google.com</owner>
   <owner>chromesky-eng@google.com</owner>
@@ -296,7 +296,7 @@
 </histogram>
 
 <histogram name="OOBE.RecommendApps.Screen.State"
-    enum="RecommendAppsScreenState" expires_after="2021-12-05">
+    enum="RecommendAppsScreenState" expires_after="2022-02-06">
   <owner>raleksandrov@google.com</owner>
   <owner>cros-oac@google.com</owner>
   <owner>chromesky-eng@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml
index 562ca78..b149fca 100644
--- a/tools/metrics/histograms/metadata/others/histograms.xml
+++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -93,7 +93,7 @@
 </histogram>
 
 <histogram name="AccountManager.AccountAdditionSource"
-    enum="AccountManagerAccountAdditionSource" expires_after="2021-12-05">
+    enum="AccountManagerAccountAdditionSource" expires_after="2022-02-06">
   <owner>sinhak@chromium.org</owner>
   <owner>anastasiian@chromium.org</owner>
   <summary>
@@ -120,7 +120,7 @@
 </histogram>
 
 <histogram name="AccountManager.EduCoexistence.FetchAccessTokenResult"
-    enum="GoogleServiceAuthError" expires_after="2021-12-05">
+    enum="GoogleServiceAuthError" expires_after="2022-02-06">
   <owner>sinhak@chromium.org</owner>
   <owner>anastasiian@chromium.org</owner>
   <summary>
@@ -235,7 +235,7 @@
 </histogram>
 
 <histogram name="AccountManager.NumAccounts" units="count"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>sinhak@chromium.org</owner>
   <summary>
     Tracks the number of accounts stored in Chrome OS Account Manager by a given
@@ -484,7 +484,7 @@
   </summary>
 </histogram>
 
-<histogram name="Ads.Media.Duration" units="ms" expires_after="2021-12-05">
+<histogram name="Ads.Media.Duration" units="ms" expires_after="2022-02-06">
   <owner>johnidel@chromium.org</owner>
   <owner>dalecurtis@chromium.org</owner>
   <summary>
@@ -1726,7 +1726,7 @@
 </histogram>
 
 <histogram name="Bookmarks.AddedPerProfileType" enum="BrowserProfileType"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <component>UI&gt;Browser&gt;Bookmarks</component>
@@ -2005,7 +2005,7 @@
 </histogram>
 
 <histogram name="Bookmarks.OpenBookmarkType" enum="BookmarkType"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>wychen@chromium.org</owner>
   <component>UI&gt;Browser&gt;Bookmarks</component>
   <summary>
@@ -2015,7 +2015,7 @@
 </histogram>
 
 <histogram name="Bookmarks.ReadingList.NumberOfItems" units="items"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>shaktisahu@chromium.org</owner>
   <owner>xingliu@chromium.org</owner>
   <component>UI&gt;Browser&gt;Bookmarks</component>
@@ -2061,7 +2061,7 @@
 </histogram>
 
 <histogram name="Bookmarks.UsageCountPerProfileType" enum="BrowserProfileType"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <component>UI&gt;Browser&gt;Bookmarks</component>
@@ -3605,7 +3605,7 @@
 </histogram>
 
 <histogram name="ContextMenu.TimeToTakeAction.Abandoned" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>twellington@chromium.org</owner>
   <owner>clank-app-team@google.com</owner>
   <summary>
@@ -3618,7 +3618,7 @@
 </histogram>
 
 <histogram name="ContextMenu.TimeToTakeAction.SelectedItem" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>twellington@chromium.org</owner>
   <owner>clank-app-team@google.com</owner>
   <summary>
@@ -4629,7 +4629,7 @@
 </histogram>
 
 <histogram name="Discarding.HighPMFPolicy.MemoryPressureLevel"
-    enum="MemoryPressureLevel" expires_after="2021-12-06">
+    enum="MemoryPressureLevel" expires_after="2022-02-06">
   <owner>sebmarchand@chromium.org</owner>
   <owner>catan-team@chromium.org</owner>
   <summary>
@@ -5086,7 +5086,7 @@
 </histogram>
 
 <histogram name="DocumentScan.ScanFailed" enum="DocumentScanSaneBackend"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>fletcherw@chromium.org</owner>
   <owner>bmgordon@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
@@ -5108,7 +5108,7 @@
 </histogram>
 
 <histogram name="DocumentScan.ScanSucceeded" enum="DocumentScanSaneBackend"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>fletcherw@chromium.org</owner>
   <owner>bmgordon@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
@@ -6410,7 +6410,7 @@
 </histogram>
 
 <histogram name="FirstRun.NewUserExperience.NtpBackgroundInteraction"
-    enum="NuxNtpBackgroundInteractions" expires_after="2021-12-05">
+    enum="NuxNtpBackgroundInteractions" expires_after="2022-02-06">
   <owner>hcarmona@chromium.org</owner>
   <owner>johntlee@chromium.org</owner>
   <summary>
@@ -7193,7 +7193,7 @@
 </histogram>
 
 <histogram name="Graphics.Smoothness.PercentDroppedFrames.AllAnimations"
-    units="%" expires_after="2021-12-05">
+    units="%" expires_after="2022-02-06">
   <owner>sadrul@chromium.org</owner>
   <owner>ericrk@chromium.org</owner>
   <summary>
@@ -7214,7 +7214,7 @@
 </histogram>
 
 <histogram name="Graphics.Smoothness.PercentDroppedFrames.AllInteractions"
-    units="%" expires_after="2021-12-05">
+    units="%" expires_after="2022-02-06">
   <owner>sadrul@chromium.org</owner>
   <owner>ericrk@chromium.org</owner>
   <summary>
@@ -7235,7 +7235,7 @@
 </histogram>
 
 <histogram name="Graphics.Smoothness.PercentDroppedFrames.AllSequences"
-    units="%" expires_after="2021-12-05">
+    units="%" expires_after="2022-02-06">
   <owner>sadrul@chromium.org</owner>
   <owner>ericrk@chromium.org</owner>
   <summary>
@@ -10513,7 +10513,7 @@
 </histogram>
 
 <histogram name="NativeFileSystemAPI.ConfirmReadDirectoryResult"
-    enum="PermissionAction" expires_after="2021-12-05">
+    enum="PermissionAction" expires_after="2022-02-06">
   <owner>mek@chromium.org</owner>
   <owner>src/content/browser/file_system_access/OWNERS</owner>
   <summary>
@@ -10523,7 +10523,7 @@
 </histogram>
 
 <histogram name="NativeFileSystemAPI.FileChooserResult" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>mek@chromium.org</owner>
   <owner>src/content/browser/file_system_access/OWNERS</owner>
   <summary>
@@ -10553,7 +10553,7 @@
 </histogram>
 
 <histogram name="NativeFileSystemAPI.WritePermissionRequestOutcome"
-    enum="NativeFileSystemPermissionRequestOutcome" expires_after="2021-12-05">
+    enum="NativeFileSystemPermissionRequestOutcome" expires_after="2022-02-06">
   <owner>mek@chromium.org</owner>
   <owner>src/content/browser/file_system_access/OWNERS</owner>
   <summary>
@@ -11466,7 +11466,7 @@
   </summary>
 </histogram>
 
-<histogram name="PDF.FormType" enum="PDFFormTypes" expires_after="2021-12-05">
+<histogram name="PDF.FormType" enum="PDFFormTypes" expires_after="2022-02-06">
   <owner>rharrison@chromium.org</owner>
   <owner>thestig@chromium.org</owner>
   <summary>
@@ -11541,7 +11541,7 @@
 </histogram>
 
 <histogram name="Pepper.InterfaceUsed" enum="PepperInterface"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>bbudge@chromium.org</owner>
   <owner>raymes@chromium.org</owner>
   <summary>
@@ -12024,7 +12024,7 @@
 </histogram>
 
 <histogram base="true" name="PhoneHub.MultiDeviceFeatureState"
-    enum="MultiDevice_FeatureState" expires_after="2021-12-05">
+    enum="MultiDevice_FeatureState" expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="PhoneHubFeature" -->
 
   <owner>khorimoto@chromium.org</owner>
@@ -15471,7 +15471,7 @@
 </histogram>
 
 <histogram name="SiteIsolation.OutOfProcessIframes" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>alexmos@chromium.org</owner>
   <owner>creis@chromium.org</owner>
   <owner>lukasza@chromium.org</owner>
@@ -15482,7 +15482,7 @@
 </histogram>
 
 <histogram name="SiteIsolation.ProxyCount" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>alexmos@chromium.org</owner>
   <owner>creis@chromium.org</owner>
   <owner>lukasza@chromium.org</owner>
@@ -15566,7 +15566,7 @@
 </histogram>
 
 <histogram name="SiteIsolation.SiteInstancesPerBrowsingInstance" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>alexmos@chromium.org</owner>
   <owner>creis@chromium.org</owner>
   <owner>lukasza@chromium.org</owner>
@@ -16697,7 +16697,7 @@
 </histogram>
 
 <histogram name="Tablet.TabDrag.InSplitView.CountOfPerUserSession"
-    units="times" expires_after="2021-12-05">
+    units="times" expires_after="2022-02-06">
   <owner>minch@chromium.org</owner>
   <owner>omrilio@chromium.org</owner>
   <summary>
@@ -18701,7 +18701,7 @@
 </histogram>
 
 <histogram name="Webapp.CheckServiceWorker.Status"
-    enum="ServiceWorkerOfflineCapability" expires_after="2021-12-05">
+    enum="ServiceWorkerOfflineCapability" expires_after="2022-02-06">
   <owner>asamidoi@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
   <summary>
@@ -18713,7 +18713,7 @@
 </histogram>
 
 <histogram name="Webapp.CheckServiceWorker.Time" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>asamidoi@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
   <summary>
@@ -19529,7 +19529,7 @@
 </histogram>
 
 <histogram name="WebsiteSettings.Discoverability.TimeToOpen" units="ms"
-    expires_after="M96">
+    expires_after="2022-02-06">
   <owner>eokoyomon@chromium.org</owner>
   <owner>dullweber@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml
index 404d9a7..1d76ecd4 100644
--- a/tools/metrics/histograms/metadata/page/histograms.xml
+++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -1413,7 +1413,7 @@
 
 <histogram
     name="PageLoad.Experimental.NavigationTiming.NavigationStartToFirstLoaderCallback"
-    units="ms" expires_after="2021-12-05">
+    units="ms" expires_after="2022-02-06">
   <owner>nhiroki@chromium.org</owner>
   <owner>chrome-loading@google.com</owner>
   <summary>
@@ -1435,7 +1435,7 @@
 
 <histogram
     name="PageLoad.Experimental.NavigationTiming.NavigationStartToFirstResponseStart"
-    units="ms" expires_after="2021-12-05">
+    units="ms" expires_after="2022-02-06">
   <owner>nhiroki@chromium.org</owner>
   <owner>chrome-loading@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index baeb0d0..d05a5e68 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -27,7 +27,7 @@
 </variants>
 
 <histogram name="KeyboardAccessory.AccessoryActionImpression"
-    enum="AccessoryAction" expires_after="2021-12-05">
+    enum="AccessoryAction" expires_after="2022-02-06">
   <owner>fhorschig@chromium.org</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -37,7 +37,7 @@
 </histogram>
 
 <histogram name="KeyboardAccessory.AccessoryActionSelected"
-    enum="AccessoryAction" expires_after="2021-12-05">
+    enum="AccessoryAction" expires_after="2022-02-06">
   <owner>fhorschig@chromium.org</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -47,7 +47,7 @@
 </histogram>
 
 <histogram name="KeyboardAccessory.AccessoryBarShown"
-    enum="AccessoryBarContents" expires_after="2021-12-05">
+    enum="AccessoryBarContents" expires_after="2022-02-06">
   <owner>fhorschig@chromium.org</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -89,7 +89,7 @@
 </histogram>
 
 <histogram name="KeyboardAccessory.AccessoryToggleClicked"
-    enum="AccessoryToggleType" expires_after="2021-12-05">
+    enum="AccessoryToggleType" expires_after="2022-02-06">
   <owner>ioanap@chromium.org</owner>
   <owner>fhorschig@chromium.org</owner>
   <summary>
@@ -100,7 +100,7 @@
 </histogram>
 
 <histogram name="KeyboardAccessory.AccessoryToggleImpression"
-    enum="AccessoryToggleType" expires_after="2021-12-05">
+    enum="AccessoryToggleType" expires_after="2022-02-06">
   <owner>ioanap@chromium.org</owner>
   <owner>fhorschig@chromium.org</owner>
   <summary>
@@ -246,7 +246,7 @@
 </histogram>
 
 <histogram name="PasswordGeneration.UserDecision"
-    enum="PasswordGenerationUserEvent" expires_after="2021-12-05">
+    enum="PasswordGenerationUserEvent" expires_after="2022-02-06">
   <owner>ioanap@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -636,7 +636,7 @@
 </histogram>
 
 <histogram name="PasswordManager.AffiliationBackend.FetchSize" units="facets"
-    expires_after="M96">
+    expires_after="2022-02-06">
   <owner>vsemeniuk@google.com</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -1096,7 +1096,7 @@
 </histogram>
 
 <histogram name="PasswordManager.CompromisedCredentials.CountLeaked"
-    units="credentials" expires_after="2021-12-05">
+    units="credentials" expires_after="2022-02-06">
   <owner>vasilii@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <summary>
@@ -1106,7 +1106,7 @@
 
 <histogram
     name="PasswordManager.CompromisedCredentials.CountLeakedAfterBulkCheck"
-    units="credentials" expires_after="2021-12-05">
+    units="credentials" expires_after="2022-02-06">
   <owner>vasilii@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <summary>
@@ -1116,7 +1116,7 @@
 </histogram>
 
 <histogram name="PasswordManager.CompromisedCredentials.CountPhished"
-    units="credentials" expires_after="2021-12-05">
+    units="credentials" expires_after="2022-02-06">
   <owner>vasilii@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <summary>
@@ -1212,7 +1212,7 @@
 </histogram>
 
 <histogram name="PasswordManager.DropdownShown.OffTheRecord" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <summary>
@@ -1550,7 +1550,7 @@
 </histogram>
 
 <histogram name="PasswordManager.ItemSelected.OffTheRecord" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <summary>
@@ -2020,7 +2020,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordReuse.TotalPasswords"
-    units="credentials" expires_after="2021-12-05">
+    units="credentials" expires_after="2022-02-06">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -2378,7 +2378,7 @@
 </histogram>
 
 <histogram name="PasswordManager.SyncMetadataReadError"
-    enum="PasswordSyncMetadataReadError" expires_after="2021-12-05">
+    enum="PasswordSyncMetadataReadError" expires_after="2022-02-06">
   <owner>mamir@chromium.org</owner>
   <owner>mastiz@chromium.org</owner>
   <summary>
@@ -2688,7 +2688,7 @@
 </histogram>
 
 <histogram name="PasswordProtection.DomFeatureExtractionDuration" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>drubery@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/permissions/histograms.xml b/tools/metrics/histograms/metadata/permissions/histograms.xml
index 16a42c2..b1d75cf 100644
--- a/tools/metrics/histograms/metadata/permissions/histograms.xml
+++ b/tools/metrics/histograms/metadata/permissions/histograms.xml
@@ -305,6 +305,49 @@
   </summary>
 </histogram>
 
+<histogram
+    name="Permissions.DSE.InvalidAutoPermissionRevertTransition.BackedUpSetting"
+    enum="ContentSetting" expires_after="2022-07-01">
+  <owner>andypaicu@chromium.org</owner>
+  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
+  <summary>
+    Recorded when the Default Search Engine automatic permission grant is
+    reverted and the recorded transition is invalid. Used to help investigate
+    the scenario in which this happens. Records the backed up setting for the
+    DSE origin, which is the setting that was in effect before the DSE autogrant
+    overwrote it in the first place. Suffixed by `PermissionTypes` to provide
+    information per permission type.
+  </summary>
+</histogram>
+
+<histogram
+    name="Permissions.DSE.InvalidAutoPermissionRevertTransition.EffectiveSetting"
+    enum="ContentSetting" expires_after="2022-07-01">
+  <owner>andypaicu@chromium.org</owner>
+  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
+  <summary>
+    Recorded when the Default Search Engine automatic permission grant is
+    reverted and the recorded transition is invalid. Used to help investigate
+    the scenario in which this happens. Records the effecting setting for the
+    DSE origin, which is the setting that was in effect before the revert.
+    Suffixed by `PermissionTypes` to provide information per permission type.
+  </summary>
+</histogram>
+
+<histogram
+    name="Permissions.DSE.InvalidAutoPermissionRevertTransition.EndStateSetting"
+    enum="ContentSetting" expires_after="2022-07-01">
+  <owner>andypaicu@chromium.org</owner>
+  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
+  <summary>
+    Recorded when the Default Search Engine automatic permission grant is
+    reverted and the recorded transition is invalid. Used to help investigate
+    the scenario in which this happens. Records the end state setting for the
+    DSE origin, which is the setting that is in effect after the revert.
+    Suffixed by `PermissionTypes` to provide information per permission type.
+  </summary>
+</histogram>
+
 <histogram name="Permissions.Engagement.Accepted" units="%"
     expires_after="2021-12-26">
   <owner>engedy@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/platform/histograms.xml b/tools/metrics/histograms/metadata/platform/histograms.xml
index fb86733..2575fa50 100644
--- a/tools/metrics/histograms/metadata/platform/histograms.xml
+++ b/tools/metrics/histograms/metadata/platform/histograms.xml
@@ -302,7 +302,7 @@
 </histogram>
 
 <histogram name="Platform.DetachableBase.ActivePercent" units="%"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>drinkcat@chromium.org</owner>
   <owner>fshao@chromium.org</owner>
   <owner>chromeos-kukui@google.com</owner>
@@ -314,7 +314,7 @@
 </histogram>
 
 <histogram name="Platform.DetachableBase.AttachedOnBoot" enum="BooleanAttached"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>drinkcat@chromium.org</owner>
   <owner>fshao@chromium.org</owner>
   <owner>chromeos-kukui@google.com</owner>
@@ -325,7 +325,7 @@
 </histogram>
 
 <histogram name="Platform.DetachableBase.PairResult"
-    enum="DetachableBasePairResult" expires_after="2021-12-05">
+    enum="DetachableBasePairResult" expires_after="2022-02-06">
   <owner>drinkcat@chromium.org</owner>
   <owner>fshao@chromium.org</owner>
   <owner>chromeos-kukui@google.com</owner>
@@ -333,7 +333,7 @@
 </histogram>
 
 <histogram name="Platform.DetachableBase.PendingRWUpdate"
-    enum="DetachableBasePendingRWUpdate" expires_after="2021-12-05">
+    enum="DetachableBasePendingRWUpdate" expires_after="2022-02-06">
   <owner>drinkcat@chromium.org</owner>
   <owner>fshao@chromium.org</owner>
   <owner>chromeos-kukui@google.com</owner>
@@ -615,7 +615,7 @@
 </histogram>
 
 <histogram name="Platform.Memory.Browser" units="MiB"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->
 
   <owner>sonnyrao@chromium.org</owner>
@@ -785,7 +785,7 @@
 </histogram>
 
 <histogram name="Platform.SATA.AvailableReservedSpace" units="%"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>asavery@chromium.org</owner>
   <owner>gwendal@chromium.org</owner>
   <summary>
@@ -1190,7 +1190,7 @@
 </histogram>
 
 <histogram name="Platform.TPM.DictionaryAttackCounter" units="units"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>cylai@chromium.org</owner>
   <owner>cros-hwsec-userland-eng+uma@chromium.org</owner>
   <summary>
@@ -1200,7 +1200,7 @@
 </histogram>
 
 <histogram name="Platform.TPM.DictionaryAttackResetStatus"
-    enum="CrosTPMDictionaryAttackResetStatusEnum" expires_after="2021-12-05">
+    enum="CrosTPMDictionaryAttackResetStatusEnum" expires_after="2022-02-06">
   <owner>cylai@chromium.org</owner>
   <owner>cros-hwsec-userland-eng+uma@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/power/histograms.xml b/tools/metrics/histograms/metadata/power/histograms.xml
index 13546be..81e626c 100644
--- a/tools/metrics/histograms/metadata/power/histograms.xml
+++ b/tools/metrics/histograms/metadata/power/histograms.xml
@@ -125,7 +125,7 @@
 </histogram>
 
 <histogram name="Power.BatteryDischargeRate" units="mW"
-    expires_after="2022-01-30">
+    expires_after="2022-02-06">
   <owner>puthik@chromium.org</owner>
   <owner>chromeos-platform-power@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/print/histograms.xml b/tools/metrics/histograms/metadata/print/histograms.xml
index a9f0f39..c1c1b5e 100644
--- a/tools/metrics/histograms/metadata/print/histograms.xml
+++ b/tools/metrics/histograms/metadata/print/histograms.xml
@@ -32,7 +32,7 @@
 </histogram>
 
 <histogram name="PrintPreview.InitialDisplayTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>thestig@chromium.org</owner>
   <owner>dhoss@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/printing/histograms.xml b/tools/metrics/histograms/metadata/printing/histograms.xml
index 29f3880..68347db 100644
--- a/tools/metrics/histograms/metadata/printing/histograms.xml
+++ b/tools/metrics/histograms/metadata/printing/histograms.xml
@@ -103,7 +103,7 @@
 </histogram>
 
 <histogram name="Printing.CUPS.HighestIppVersion" enum="IppVersion"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>skau@chromium.org</owner>
   <owner>pawliczek@chromium.org</owner>
   <summary>
@@ -178,7 +178,7 @@
 </histogram>
 
 <histogram name="Printing.CUPS.JobDuration.JobDone" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>skau@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
   <summary>
@@ -234,7 +234,7 @@
 </histogram>
 
 <histogram name="Printing.CUPS.PrinterAdded" enum="PrinterProtocol"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>skau@chromium.org</owner>
   <owner>src/chromeos/printing/OWNERS</owner>
   <summary>
@@ -244,7 +244,7 @@
 </histogram>
 
 <histogram name="Printing.CUPS.PrinterRemoved" enum="PrinterProtocol"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>skau@chromium.org</owner>
   <owner>src/chromeos/printing/OWNERS</owner>
   <summary>
@@ -359,7 +359,7 @@
 </histogram>
 
 <histogram name="Printing.CUPS.TotalNetworkPrintersCount" units="printers"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>skau@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/profile/histograms.xml b/tools/metrics/histograms/metadata/profile/histograms.xml
index bfcf4693..9533dd08 100644
--- a/tools/metrics/histograms/metadata/profile/histograms.xml
+++ b/tools/metrics/histograms/metadata/profile/histograms.xml
@@ -38,7 +38,7 @@
 </histogram>
 
 <histogram name="Profile.AllAccounts.Categories"
-    enum="ProfileAllAccountsCategories" expires_after="2021-12-05">
+    enum="ProfileAllAccountsCategories" expires_after="2022-02-06">
   <owner>jkrcal@chromium.org</owner>
   <owner>droger@chromium.org</owner>
   <summary>
@@ -115,7 +115,7 @@
 </histogram>
 
 <histogram name="Profile.ColorsUniqueness" enum="ProfileColorsUniqueness"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>jkrcal@chromium.org</owner>
   <owner>droger@chromium.org</owner>
   <summary>
@@ -717,7 +717,7 @@
   </summary>
 </histogram>
 
-<histogram name="Profile.Update" enum="ProfileType" expires_after="2021-12-05">
+<histogram name="Profile.Update" enum="ProfileType" expires_after="2022-02-06">
   <owner>msarda@chromium.org</owner>
   <owner>droger@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/renderer4/histograms.xml b/tools/metrics/histograms/metadata/renderer4/histograms.xml
index 63f3e94..15d9dbd 100644
--- a/tools/metrics/histograms/metadata/renderer4/histograms.xml
+++ b/tools/metrics/histograms/metadata/renderer4/histograms.xml
@@ -246,7 +246,7 @@
 </histogram>
 
 <histogram name="Renderer4.Renderer.RasterTaskTotalDuration"
-    units="microseconds" expires_after="2021-12-05">
+    units="microseconds" expires_after="2022-02-06">
   <owner>khushalsagar@chromium.org</owner>
   <owner>chrome-gpu@google.com</owner>
   <summary>
@@ -272,7 +272,7 @@
 </histogram>
 
 <histogram name="Renderer4.ScrollingThread" enum="ScrollingThreadStatus"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="ScrollSourceDevice" -->
 
   <owner>bokan@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
index f4d983e..a92b13c 100644
--- a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
+++ b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
@@ -136,7 +136,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.BlockingPage.ResourceType"
-    enum="ContentResourceType2" expires_after="2021-12-05">
+    enum="ContentResourceType2" expires_after="2022-02-06">
   <owner>xinghuilu@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -181,7 +181,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.CheckBrowseUrl.HasLocalMatch"
-    enum="BooleanMatched" expires_after="2021-12-05">
+    enum="BooleanMatched" expires_after="2022-02-06">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -192,7 +192,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.CheckUrl.Timeout" enum="BooleanTimedOut"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -1339,7 +1339,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.RT.LocalMatch.Result"
-    enum="SafeBrowsingAllowlistAsyncMatch" expires_after="2021-12-05">
+    enum="SafeBrowsingAllowlistAsyncMatch" expires_after="2022-02-06">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -1365,7 +1365,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.RT.Network.Result"
-    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2021-12-05">
+    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2022-02-06">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -1377,7 +1377,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.RT.Network.Time" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -1576,7 +1576,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.V4Database.Size" units="KB"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -1637,7 +1637,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.V4GetHash.Network.Time" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -1661,7 +1661,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.V4GetHash.Result"
-    enum="SafeBrowsingV4OperationResult" expires_after="2021-12-05">
+    enum="SafeBrowsingV4OperationResult" expires_after="2022-02-06">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/sb_client/histograms.xml b/tools/metrics/histograms/metadata/sb_client/histograms.xml
index c7dd245..71203611 100644
--- a/tools/metrics/histograms/metadata/sb_client/histograms.xml
+++ b/tools/metrics/histograms/metadata/sb_client/histograms.xml
@@ -674,7 +674,7 @@
 
 <histogram name="SBClientPhishing.PreClassificationCheckResult"
     enum="SBClientDetectionPreClassificationCheckResult"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>drubery@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/scanning/histograms.xml b/tools/metrics/histograms/metadata/scanning/histograms.xml
index 066f8c8..138e433 100644
--- a/tools/metrics/histograms/metadata/scanning/histograms.xml
+++ b/tools/metrics/histograms/metadata/scanning/histograms.xml
@@ -61,7 +61,7 @@
 </histogram>
 
 <histogram name="Scanning.NumPagesScanned" units="pages"
-    expires_after="2021-12-04">
+    expires_after="2022-02-06">
   <owner>gavinwill@chromium.org</owner>
   <owner>cros-peripherals@google.com</owner>
   <summary>Records the number of pages scanned in a successful scan.</summary>
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml
index 0943cb0..594210d 100644
--- a/tools/metrics/histograms/metadata/service/histograms.xml
+++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -332,7 +332,7 @@
 </histogram>
 
 <histogram name="ServiceWorker.FetchEvent.QueuingTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>asamidoi@chromium.org</owner>
   <owner>falken@chromium.org</owner>
   <owner>chrome-worker@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml
index c9c8ca86..b0ac006 100644
--- a/tools/metrics/histograms/metadata/signin/histograms.xml
+++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -248,7 +248,7 @@
 </histogram>
 
 <histogram name="Signin.AndroidDeviceAccountsNumberWhenEnteringFRE"
-    units="count" expires_after="2021-12-05">
+    units="count" expires_after="2022-02-06">
   <owner>bsazonov@chromium.org</owner>
   <owner>aliceywang@chromium.org</owner>
   <summary>
@@ -701,7 +701,7 @@
 </histogram>
 
 <histogram name="Signin.IOSGaiaCookieStateOnSignedInNavigation"
-    enum="GaiaCookieStateOnSignedInNavigation" expires_after="2021-12-05">
+    enum="GaiaCookieStateOnSignedInNavigation" expires_after="2022-02-06">
   <owner>fernandex@chromium.org</owner>
   <owner>msarda@chromium.org</owner>
   <owner>chrome-signin-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/stability/histograms.xml b/tools/metrics/histograms/metadata/stability/histograms.xml
index 6feb166..0ec83829 100644
--- a/tools/metrics/histograms/metadata/stability/histograms.xml
+++ b/tools/metrics/histograms/metadata/stability/histograms.xml
@@ -255,7 +255,7 @@
 </histogram>
 
 <histogram name="Stability.ChildFrameCrash.Visibility" enum="CrashVisibility"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>alexmos@chromium.org</owner>
   <owner>boliu@chromium.org</owner>
   <owner>lfg@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/startup/histograms.xml b/tools/metrics/histograms/metadata/startup/histograms.xml
index 9bb3ebc..2831f3f 100644
--- a/tools/metrics/histograms/metadata/startup/histograms.xml
+++ b/tools/metrics/histograms/metadata/startup/histograms.xml
@@ -120,7 +120,7 @@
 </histogram>
 
 <histogram base="true" name="Startup.Android.FeedContentFirstLoadedTime"
-    units="ms" expires_after="2021-12-05">
+    units="ms" expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="JavaStartMode" -->
 
   <owner>hanxi@chromium.org</owner>
@@ -247,7 +247,7 @@
 </histogram>
 
 <histogram name="Startup.Android.TimeToGTSFirstMeaningfulPaint.Cold" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>yusufo@chromium.org</owner>
   <owner>yfriedman@chromium.org</owner>
   <summary>
@@ -293,7 +293,7 @@
 </histogram>
 
 <histogram name="Startup.BrowserMainRunnerImplInitializeLongTime" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>robliao@chromium.org</owner>
   <summary>
     The amount of time that elapsed during BrowserMainRunnerImpl::Initialize.
diff --git a/tools/metrics/histograms/metadata/subresource/histograms.xml b/tools/metrics/histograms/metadata/subresource/histograms.xml
index eabacf2..f30e5a78 100644
--- a/tools/metrics/histograms/metadata/subresource/histograms.xml
+++ b/tools/metrics/histograms/metadata/subresource/histograms.xml
@@ -747,7 +747,7 @@
 </histogram>
 
 <histogram name="SubresourceRedirect.Blink.Ineligibility"
-    enum="BlinkSubresourceRedirectIneligibility" expires_after="M96">
+    enum="BlinkSubresourceRedirectIneligibility" expires_after="2022-02-06">
   <owner>rajendrant@chromium.org</owner>
   <owner>mcrouse@chromium.org</owner>
   <summary>
@@ -770,7 +770,7 @@
 </histogram>
 
 <histogram name="SubresourceRedirect.CompressionAttempt.ResponseCode"
-    enum="HttpResponseCode" expires_after="M96">
+    enum="HttpResponseCode" expires_after="2022-02-06">
   <owner>robertogden@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -803,7 +803,7 @@
 </histogram>
 
 <histogram name="SubresourceRedirect.DidCompress.BytesSaved" units="bytes"
-    expires_after="M96">
+    expires_after="2022-02-06">
   <owner>robertogden@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
@@ -813,7 +813,7 @@
 </histogram>
 
 <histogram name="SubresourceRedirect.DidCompress.CompressionPercent" units="%"
-    expires_after="M96">
+    expires_after="2022-02-06">
   <owner>robertogden@chromium.org</owner>
   <owner>tbansal@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/sync/histograms.xml b/tools/metrics/histograms/metadata/sync/histograms.xml
index ccb4697..ee6010ac 100644
--- a/tools/metrics/histograms/metadata/sync/histograms.xml
+++ b/tools/metrics/histograms/metadata/sync/histograms.xml
@@ -226,7 +226,7 @@
 </histogram>
 
 <histogram name="Sync.CommitResponse" enum="SyncerErrorValues"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
 <!-- Name completed by histogram_suffixes name="SyncModelType" -->
 
   <owner>rushans@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/tab/histograms.xml b/tools/metrics/histograms/metadata/tab/histograms.xml
index 50472af..2c2c81d 100644
--- a/tools/metrics/histograms/metadata/tab/histograms.xml
+++ b/tools/metrics/histograms/metadata/tab/histograms.xml
@@ -111,7 +111,7 @@
   </summary>
 </histogram>
 
-<histogram name="Tab.Count.Guest" units="units" expires_after="2021-12-05">
+<histogram name="Tab.Count.Guest" units="units" expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <summary>
@@ -124,7 +124,7 @@
   </summary>
 </histogram>
 
-<histogram name="Tab.Count.Incognito" units="units" expires_after="2021-12-05">
+<histogram name="Tab.Count.Incognito" units="units" expires_after="2022-02-06">
   <owner>rhalavati@chromium.org</owner>
   <owner>chrome-privacy-core@google.com</owner>
   <summary>
@@ -1780,7 +1780,7 @@
 </histogram>
 
 <histogram name="Tabs.SadTab.Feedback.Event" enum="SadTabEvent"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>sonnyrao@chromium.org</owner>
   <owner>jamescook@chromium.org</owner>
   <summary>
@@ -1874,7 +1874,7 @@
 </histogram>
 
 <histogram name="Tabs.SadTab.Reload.Event" enum="SadTabEvent"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>sonnyrao@chromium.org</owner>
   <owner>jamescook@chromium.org</owner>
   <summary>
@@ -1961,7 +1961,7 @@
 </histogram>
 
 <histogram name="Tabs.ShoppingPersistedTabData.FoundBuyableProductAnnotation"
-    enum="FoundBuyableProductAnnotation" expires_after="2021-12-05">
+    enum="FoundBuyableProductAnnotation" expires_after="2022-02-06">
   <owner>yusufo@chromium.org</owner>
   <owner>ayman@chromium.org</owner>
   <owner>davidjm@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/translate/histograms.xml b/tools/metrics/histograms/metadata/translate/histograms.xml
index 0d0201b..84a64e0 100644
--- a/tools/metrics/histograms/metadata/translate/histograms.xml
+++ b/tools/metrics/histograms/metadata/translate/histograms.xml
@@ -422,7 +422,7 @@
 </histogram>
 
 <histogram name="Translate.LanguageDeterminedDuration" units="ms"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>sclittle@chromium.org</owner>
   <owner>megjablon@chromium.org</owner>
   <owner>chrome-language@google.com</owner>
@@ -1155,7 +1155,7 @@
 </histogram>
 
 <histogram name="Translate.Translation.Status" enum="TranslationStatus"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>curranmax@google.com</owner>
   <owner>megjablon@google.com</owner>
   <owner>chrome-language@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml
index e422f55..f557c2d9 100644
--- a/tools/metrics/histograms/metadata/v8/histograms.xml
+++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -357,14 +357,29 @@
   </summary>
 </histogram>
 
-<histogram name="V8.Execute" units="ms" expires_after="2022-01-16">
-  <owner>rmcilroy@chromium.org</owner>
+<histogram name="V8.Execute" units="ms" expires_after="M94">
+  <obsolete>
+    Use V8.ExecuteMicroSeconds after M94, which correctly accounts nested timers
+    with nested V8.Execute blocks.
+  </obsolete>
+  <owner>cbruni@chromium.org</owner>
+  <owner>v8-runtime@google.com</owner>
   <summary>
     Time spent in JavaScript Execution, including runtime calls, callbacks, and
     lazy compilation.
   </summary>
 </histogram>
 
+<histogram name="V8.ExecuteMicroSeconds" units="microseconds"
+    expires_after="M100">
+  <owner>cbruni@chromium.org</owner>
+  <owner>v8-runtime@google.com</owner>
+  <summary>
+    Time spent in JavaScript Execution, including runtime calls, and lazy
+    compilation. This histogram excludes time spent in embedder callbacks.
+  </summary>
+</histogram>
+
 <histogram name="V8.GC.Cycle.CollectionRate.Full.Cpp" units="KB/ms"
     expires_after="M100">
   <owner>omerkatz@chromium.org</owner>
@@ -617,7 +632,7 @@
 </histogram>
 
 <histogram name="V8.GC.TimeToCollectionOnBackground" units="microseconds"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dinfuehr@chromium.org</owner>
   <owner>ulan@chromium.org</owner>
   <summary>
@@ -634,7 +649,7 @@
 </histogram>
 
 <histogram name="V8.GC.TimeToSafepoint" units="microseconds"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>dinfuehr@chromium.org</owner>
   <owner>ulan@chromium.org</owner>
   <summary>
@@ -875,7 +890,7 @@
 </histogram>
 
 <histogram name="V8.GCMainThreadMarkingThroughput" units="MB/s"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>mlippautz@chromium.org</owner>
   <owner>v8-memory-sheriffs@google.com</owner>
   <summary>
@@ -1310,7 +1325,7 @@
 </histogram>
 
 <histogram name="V8.WasmCompileFunctionMicroSeconds" units="microseconds"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>ecmziegler@chromium.org</owner>
   <owner>adamk@chromium.org</owner>
   <owner>clemensb@chromium.org</owner>
@@ -1350,7 +1365,7 @@
 </histogram>
 
 <histogram name="V8.WasmCompileModuleMicroSeconds" units="microseconds"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>ecmziegler@chromium.org</owner>
   <owner>adamk@chromium.org</owner>
   <owner>clemensb@chromium.org</owner>
@@ -1367,7 +1382,7 @@
 </histogram>
 
 <histogram name="V8.WasmCompileModuleStreamingMicroSeconds"
-    units="microseconds" expires_after="2021-12-05">
+    units="microseconds" expires_after="2022-02-06">
   <owner>ecmziegler@chromium.org</owner>
   <owner>adamk@chromium.org</owner>
   <owner>clemensb@chromium.org</owner>
@@ -1393,7 +1408,7 @@
 </histogram>
 
 <histogram name="V8.WasmFinishModuleStreamingMicroSeconds" units="microseconds"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>bbudge@chromium.org</owner>
   <owner>clemensb@chromium.org</owner>
   <owner>adamk@chromium.org</owner>
@@ -1423,7 +1438,7 @@
 </histogram>
 
 <histogram name="V8.WasmFunctionsPerModule" units="functions"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>ecmziegler@chromium.org</owner>
   <owner>adamk@chromium.org</owner>
   <owner>clemensb@chromium.org</owner>
@@ -1446,7 +1461,7 @@
 </histogram>
 
 <histogram name="V8.WasmInstantiateModuleMicroSeconds" units="microseconds"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>ecmziegler@chromium.org</owner>
   <owner>adamk@chromium.org</owner>
   <owner>clemensb@chromium.org</owner>
@@ -1590,7 +1605,7 @@
 </histogram>
 
 <histogram name="V8.WasmModuleSizeBytes" units="bytes"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>ecmziegler@chromium.org</owner>
   <owner>adamk@chromium.org</owner>
   <owner>ahaas@chromium.org</owner>
@@ -1640,7 +1655,7 @@
 </histogram>
 
 <histogram name="V8.WasmTierUpModuleMicroSeconds" units="microseconds"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>ecmziegler@chromium.org</owner>
   <owner>adamk@chromium.org</owner>
   <owner>clemensb@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/variations/histograms.xml b/tools/metrics/histograms/metadata/variations/histograms.xml
index 302816f..b1c06e57 100644
--- a/tools/metrics/histograms/metadata/variations/histograms.xml
+++ b/tools/metrics/histograms/metadata/variations/histograms.xml
@@ -22,7 +22,7 @@
 <histograms>
 
 <histogram name="Variations.AppSeedFreshness" units="minutes"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>rmcelrath@chromium.org</owner>
   <owner>ntfschr@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
index 5ec451b8..0aa30d9e 100644
--- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml
+++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -1112,7 +1112,7 @@
 </histogram>
 
 <histogram name="WebRTC.Call.TimeReceivingAudioRtpPacketsInSeconds" units="s"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>saza@chromium.org</owner>
   <summary>
     The amount of time between the arrival of the first and last audio RTP
@@ -1838,7 +1838,7 @@
 </histogram>
 
 <histogram name="WebRTC.PeerConnection.ThermalState" enum="ThermalState"
-    expires_after="2021-12-05">
+    expires_after="2022-02-06">
   <owner>eshr@google.com</owner>
   <owner>hbos@chromium.org</owner>
   <summary>
@@ -1867,7 +1867,7 @@
 </histogram>
 
 <histogram name="WebRTC.PeerConnection.UsagePattern"
-    enum="WebRtcPeerConnectionUsagePattern" expires_after="2021-12-05">
+    enum="WebRtcPeerConnectionUsagePattern" expires_after="2022-02-06">
   <owner>hta@chromium.org</owner>
   <owner>webrtc-dev@chromium.org</owner>
   <summary>
diff --git a/ui/compositor/total_animation_throughput_reporter_unittest.cc b/ui/compositor/total_animation_throughput_reporter_unittest.cc
index 4709037..ffc5d82 100644
--- a/ui/compositor/total_animation_throughput_reporter_unittest.cc
+++ b/ui/compositor/total_animation_throughput_reporter_unittest.cc
@@ -86,8 +86,13 @@
 }
 
 // Tests the longest animation will trigger the report.
-// TODO(crbug.com/1217783): Test is flaky.
-TEST_F(TotalAnimationThroughputReporterTest, DISABLED_MultipleAnimations) {
+// TODO(crbug.com/1217783): Test is flaky on fuchia and lacros.
+#if defined(OS_FUCHSIA) || BUILDFLAG(IS_CHROMEOS_LACROS)
+#define MAYBE_MultipleAnimations DISABLED_MultipleAnimations
+#else
+#define MAYBE_MultipleAnimations MultipleAnimations
+#endif
+TEST_F(TotalAnimationThroughputReporterTest, MAYBE_MultipleAnimations) {
   Layer layer1;
   layer1.SetOpacity(0.5f);
   root_layer()->Add(&layer1);
@@ -161,9 +166,13 @@
 }
 
 // Tests adding new animation will extends the duration.
-// TODO(crbug.com/1216715): Test is flaky.
-TEST_F(TotalAnimationThroughputReporterTest,
-       DISABLED_AddAnimationWhileAnimating) {
+// TODO(crbug.com/1216715): Test is flaky on fuchia and lacros.
+#if defined(OS_FUCHSIA) || BUILDFLAG(IS_CHROMEOS_LACROS)
+#define MAYBE_AddAnimationWhileAnimating DISABLED_AddAnimationWhileAnimating
+#else
+#define MAYBE_AddAnimationWhileAnimating AddAnimationWhileAnimating
+#endif
+TEST_F(TotalAnimationThroughputReporterTest, MAYBE_AddAnimationWhileAnimating) {
   Layer layer1;
   layer1.SetOpacity(0.5f);
   root_layer()->Add(&layer1);
diff --git a/ui/gfx/color_space.cc b/ui/gfx/color_space.cc
index 1d07bca..02a4fee 100644
--- a/ui/gfx/color_space.cc
+++ b/ui/gfx/color_space.cc
@@ -1160,12 +1160,14 @@
       break;
 
     case ColorSpace::MatrixID::YDZDX: {
+      // clang-format off
       float data[16] = {
           0.0f,              1.0f,             0.0f, 0.0f,  // Y
           0.0f,             -0.5f, 0.986566f / 2.0f, 0.5f,  // DX or DZ
           0.5f, -0.991902f / 2.0f,             0.0f, 0.5f,  // DZ or DX
           0.0f,              0.0f,             0.0f, 1.0f,
       };
+      // clang-format on
       matrix->setRowMajorf(data);
       return;
     }
@@ -1181,12 +1183,14 @@
   float Kg = 1.0f - Kr - Kb;
   float u_m = 0.5f / (1.0f - Kb);
   float v_m = 0.5f / (1.0f - Kr);
+  // clang-format off
   float data[16] = {
                      Kr,        Kg,                Kb, 0.0f,  // Y
               u_m * -Kr, u_m * -Kg, u_m * (1.0f - Kb), 0.5f,  // U
       v_m * (1.0f - Kr), v_m * -Kg,         v_m * -Kb, 0.5f,  // V
                    0.0f,      0.0f,              0.0f, 1.0f,
   };
+  // clang-format on
   matrix->setRowMajorf(data);
 }
 
diff --git a/ui/gfx/color_space.h b/ui/gfx/color_space.h
index dba969d..4c3f068 100644
--- a/ui/gfx/color_space.h
+++ b/ui/gfx/color_space.h
@@ -340,31 +340,6 @@
   // for |bit_depth|.
   void GetRangeAdjustMatrix(int bit_depth, skia::Matrix44* matrix) const;
 
-  // Returns the range adjust matrix that converts from |range_| to full range
-  // for bit depth 8.
-  //
-  // WARNING: The returned matrix assumes an 8-bit range and isn't entirely
-  // correct for higher bit depths, with a relative error of ~2.9% for 10-bit
-  // and ~3.7% for 12-bit. Use the above GetRangeAdjustMatrix() method instead.
-  //
-  // The limited ranges are [64,940] and [256, 3760] for 10 and 12 bit content
-  // respectively. So the final values end up being:
-  //
-  //   16 /  255 = 0.06274509803921569
-  //   64 / 1023 = 0.06256109481915934
-  //  256 / 4095 = 0.06251526251526252
-  //
-  //  235 /  255 = 0.9215686274509803
-  //  940 / 1023 = 0.9188660801564027
-  // 3760 / 4095 = 0.9181929181929182
-  //
-  // Relative error (same for min/max):
-  //   10 bit: abs(16/235 - 64/1023)/(64/1023)   = 0.0029411764705882222
-  //   12 bit: abs(16/235 - 256/4095)/(256/4095) = 0.003676470588235281
-  void GetRangeAdjustMatrix(skia::Matrix44* matrix) const {
-    GetRangeAdjustMatrix(kDefaultBitDepth, matrix);
-  }
-
   // Returns the current primary ID.
   // Note: if SetCustomPrimaries() has been used, the primary ID returned
   // may have been set to PrimaryID::CUSTOM, or been coerced to another
@@ -388,7 +363,7 @@
   bool Contains(const ColorSpace& other) const;
 
  private:
-  // The default bit depth assumed by GetRangeAdjustMatrix().
+  // The default bit depth assumed by ToSkYUVColorSpace().
   static constexpr int kDefaultBitDepth = 8;
 
   static void GetPrimaryMatrix(PrimaryID, skcms_Matrix3x3* to_XYZD50);
diff --git a/ui/gfx/color_space_unittest.cc b/ui/gfx/color_space_unittest.cc
index 0662524..65602773 100644
--- a/ui/gfx/color_space_unittest.cc
+++ b/ui/gfx/color_space_unittest.cc
@@ -33,8 +33,10 @@
 
   const size_t kNumColorSpaces = 4;
   gfx::ColorSpace color_spaces[kNumColorSpaces] = {
-      gfx::ColorSpace::CreateREC601(), gfx::ColorSpace::CreateREC709(),
-      gfx::ColorSpace::CreateJpeg(), gfx::ColorSpace::CreateXYZD50(),
+      gfx::ColorSpace::CreateREC601(),
+      gfx::ColorSpace::CreateREC709(),
+      gfx::ColorSpace::CreateJpeg(),
+      gfx::ColorSpace::CreateXYZD50(),
   };
 
   skia::Vector4 expected_yuvs[kNumColorSpaces][kNumTestRGBs] = {
@@ -69,7 +71,7 @@
     color_spaces[i].GetTransferMatrix(/*bit_depth=*/8, &transfer);
 
     skia::Matrix44 range_adjust;
-    color_spaces[i].GetRangeAdjustMatrix(&range_adjust);
+    color_spaces[i].GetRangeAdjustMatrix(/*bit_depth=*/8, &range_adjust);
 
     skia::Matrix44 range_adjust_inv;
     range_adjust.invert(&range_adjust_inv);
diff --git a/ui/gfx/color_transform.cc b/ui/gfx/color_transform.cc
index 5d853b1..c1013e8 100644
--- a/ui/gfx/color_transform.cc
+++ b/ui/gfx/color_transform.cc
@@ -22,13 +22,13 @@
 
 using std::abs;
 using std::copysign;
+using std::endl;
 using std::exp;
 using std::log;
 using std::max;
 using std::min;
 using std::pow;
 using std::sqrt;
-using std::endl;
 
 namespace gfx {
 
@@ -267,7 +267,6 @@
       matrix_.TransformPoint(colors + i);
   }
 
-
   void AppendShaderSource(std::stringstream* hdr,
                           std::stringstream* src,
                           size_t step_index) const override {
diff --git a/ui/gfx/color_transform_unittest.cc b/ui/gfx/color_transform_unittest.cc
index d209ac1..90151b2 100644
--- a/ui/gfx/color_transform_unittest.cc
+++ b/ui/gfx/color_transform_unittest.cc
@@ -534,9 +534,8 @@
   for (const auto& src : common_color_spaces) {
     for (const auto& dst : common_color_spaces) {
       auto transform = ColorTransform::NewColorTransform(src, dst);
-      std::string source =
-          "half4 main(half4 color) {\n" +
-          transform->GetSkShaderSource() + " return color; }";
+      std::string source = "half4 main(half4 color) {\n" +
+                           transform->GetSkShaderSource() + " return color; }";
       SkRuntimeEffect::Result result = SkRuntimeEffect::MakeForColorFilter(
           SkString(source.c_str(), source.length()), /*options=*/{});
       EXPECT_NE(result.effect, nullptr);
@@ -580,7 +579,6 @@
                          TransferTest,
                          testing::ValuesIn(simple_transfers));
 
-
 class ExtendedTransferTest
     : public testing::TestWithParam<ColorSpace::TransferID> {};
 
diff --git a/ui/native_theme/native_theme.cc b/ui/native_theme/native_theme.cc
index 91707ce4..7adb292 100644
--- a/ui/native_theme/native_theme.cc
+++ b/ui/native_theme/native_theme.cc
@@ -107,11 +107,6 @@
     observer.OnCaptionStyleUpdated();
 }
 
-float NativeTheme::AdjustBorderWidthByZoom(float border_width,
-                                           float zoom_level) const {
-  return border_width;
-}
-
 float NativeTheme::AdjustBorderRadiusByZoom(Part part,
                                             float border_radius,
                                             float zoom) const {
diff --git a/ui/native_theme/native_theme.h b/ui/native_theme/native_theme.h
index 1069e76e..b8ad810 100644
--- a/ui/native_theme/native_theme.h
+++ b/ui/native_theme/native_theme.h
@@ -498,9 +498,6 @@
   // Assign the focus-ring-appropriate alpha value to the provided base_color.
   virtual SkColor FocusRingColorForBaseColor(SkColor base_color) const;
 
-  virtual float AdjustBorderWidthByZoom(float border_width,
-                                        float zoom_level) const;
-
   virtual float AdjustBorderRadiusByZoom(Part part,
                                          float border_width,
                                          float zoom_level) const;
diff --git a/ui/native_theme/native_theme_base.cc b/ui/native_theme/native_theme_base.cc
index 13614aa..06497dd 100644
--- a/ui/native_theme/native_theme_base.cc
+++ b/ui/native_theme/native_theme_base.cc
@@ -1183,6 +1183,11 @@
                 static_cast<int>(rect->bottom()) - 1);
 }
 
+float NativeThemeBase::AdjustBorderWidthByZoom(float border_width,
+                                               float) const {
+  return border_width;
+}
+
 SkColor NativeThemeBase::SaturateAndBrighten(SkScalar* hsv,
                                              SkScalar saturate_amount,
                                              SkScalar brighten_amount) const {
diff --git a/ui/native_theme/native_theme_base.h b/ui/native_theme/native_theme_base.h
index 446380f1..28ad2c0 100644
--- a/ui/native_theme/native_theme_base.h
+++ b/ui/native_theme/native_theme_base.h
@@ -219,6 +219,9 @@
   // crbug.com/530746 is resolved.
   virtual void AdjustCheckboxRadioRectForPadding(SkRect* rect) const;
 
+  virtual float AdjustBorderWidthByZoom(float border_width,
+                                        float zoom_level) const;
+
   void set_scrollbar_button_length(int length) {
     scrollbar_button_length_ = length;
   }
diff --git a/ui/ozone/platform/wayland/host/wayland_output.cc b/ui/ozone/platform/wayland/host/wayland_output.cc
index 526647e..0316abe 100644
--- a/ui/ozone/platform/wayland/host/wayland_output.cc
+++ b/ui/ozone/platform/wayland/host/wayland_output.cc
@@ -48,9 +48,7 @@
 }
 
 WaylandOutput::WaylandOutput(uint32_t output_id, wl_output* output)
-    : output_id_(output_id),
-      output_(output),
-      rect_in_physical_pixels_(gfx::Rect()) {
+    : output_id_(output_id), output_(output) {
   wl_output_set_user_data(output_.get(), this);
 }
 
diff --git a/ui/ozone/platform/wayland/host/wayland_screen.cc b/ui/ozone/platform/wayland/host/wayland_screen.cc
index aade3742..22302ee 100644
--- a/ui/ozone/platform/wayland/host/wayland_screen.cc
+++ b/ui/ozone/platform/wayland/host/wayland_screen.cc
@@ -161,6 +161,8 @@
     changed_display.set_work_area(new_bounds);
   }
 
+  DCHECK_GE(transform, WL_OUTPUT_TRANSFORM_NORMAL);
+  DCHECK_LE(transform, WL_OUTPUT_TRANSFORM_FLIPPED_270);
   display::Display::Rotation rotation =
       WaylandTransformToRotation(static_cast<wl_output_transform>(transform));
   changed_display.set_rotation(rotation);
diff --git a/ui/ozone/platform/wayland/test/test_zwp_primary_selection.cc b/ui/ozone/platform/wayland/test/test_zwp_primary_selection.cc
index e429642..687f001 100644
--- a/ui/ozone/platform/wayland/test/test_zwp_primary_selection.cc
+++ b/ui/ozone/platform/wayland/test/test_zwp_primary_selection.cc
@@ -12,7 +12,9 @@
 #include "base/notreached.h"
 #include "ui/ozone/platform/wayland/test/test_selection_device_manager.h"
 
-// TODO(crbug.com/1204670): Implement zwp primary selection support.
+// ZwpPrimarySelection* classes contain protocol-specific implementation of
+// TestSelection*::Delegate interfaces, such that primary selection test
+// cases may be set-up and run againts test wayland compositor.
 
 namespace wl {
 
@@ -22,37 +24,67 @@
   wl_resource_destroy(resource);
 }
 
-struct ZwpPrimarySelectionOffer : public TestSelectionOffer::Delegate {
-  void SendOffer(const std::string& mime_type) override { NOTIMPLEMENTED(); }
-
-  void OnDestroying() override { NOTIMPLEMENTED(); }
-};
-
-struct ZwpPrimarySelectionDevice : public TestSelectionDevice::Delegate {
-  TestSelectionOffer* CreateAndSendOffer() override {
-    NOTIMPLEMENTED();
-    return nullptr;
+struct ZwpPrimarySelectionOffer final : public TestSelectionOffer::Delegate {
+  void SendOffer(const std::string& mime_type) override {
+    zwp_primary_selection_offer_v1_send_offer(offer->resource(),
+                                              mime_type.c_str());
   }
 
-  void SendSelection(TestSelectionOffer* offer) override { NOTIMPLEMENTED(); }
+  void OnDestroying() override { delete this; }
+
+  TestSelectionOffer* offer = nullptr;
+};
+
+struct ZwpPrimarySelectionDevice final : public TestSelectionDevice::Delegate {
+  TestSelectionOffer* CreateAndSendOffer() override {
+    const struct zwp_primary_selection_offer_v1_interface kOfferImpl = {
+        &TestSelectionOffer::Receive, &Destroy};
+    wl_resource* device_resource = device->resource();
+    const int version = wl_resource_get_version(device_resource);
+    auto* delegate = new ZwpPrimarySelectionOffer;
+
+    wl_resource* new_offer_resource =
+        CreateResourceWithImpl<TestSelectionOffer>(
+            wl_resource_get_client(device->resource()),
+            &zwp_primary_selection_offer_v1_interface, version, &kOfferImpl, 0,
+            delegate);
+    delegate->offer = GetUserDataAs<TestSelectionOffer>(new_offer_resource);
+    zwp_primary_selection_device_v1_send_data_offer(device_resource,
+                                                    new_offer_resource);
+    return delegate->offer;
+  }
+
+  void SendSelection(TestSelectionOffer* offer) override {
+    CHECK(offer);
+    zwp_primary_selection_device_v1_send_selection(device->resource(),
+                                                   offer->resource());
+  }
 
   void HandleSetSelection(TestSelectionSource* source,
                           uint32_t serial) override {
     NOTIMPLEMENTED();
   }
 
-  void OnDestroying() override { NOTIMPLEMENTED(); }
+  void OnDestroying() override { delete this; }
+
+  TestSelectionDevice* device = nullptr;
 };
 
 struct ZwpPrimarySelectionSource : public TestSelectionSource::Delegate {
   void SendSend(const std::string& mime_type,
                 base::ScopedFD write_fd) override {
-    NOTIMPLEMENTED();
+    zwp_primary_selection_source_v1_send_send(
+        source->resource(), mime_type.c_str(), write_fd.get());
+    wl_client_flush(wl_resource_get_client(source->resource()));
   }
 
-  void SendCancelled() override { NOTIMPLEMENTED(); }
+  void SendCancelled() override {
+    zwp_primary_selection_source_v1_send_cancelled(source->resource());
+  }
 
-  void OnDestroying() override { NOTIMPLEMENTED(); }
+  void OnDestroying() override { delete this; }
+
+  TestSelectionSource* source = nullptr;
 };
 
 struct ZwpPrimarySelectionDeviceManager
@@ -65,19 +97,23 @@
     const struct zwp_primary_selection_device_v1_interface
         kTestSelectionDeviceImpl = {&TestSelectionDevice::SetSelection,
                                     &Destroy};
+    auto* delegate = new ZwpPrimarySelectionDevice;
     wl_resource* resource = CreateResourceWithImpl<TestSelectionDevice>(
         client, &zwp_primary_selection_device_v1_interface, version_,
-        &kTestSelectionDeviceImpl, id, new ZwpPrimarySelectionDevice);
-    return GetUserDataAs<TestSelectionDevice>(resource);
+        &kTestSelectionDeviceImpl, id, delegate);
+    delegate->device = GetUserDataAs<TestSelectionDevice>(resource);
+    return delegate->device;
   }
 
   TestSelectionSource* CreateSource(wl_client* client, uint32_t id) override {
     const struct zwp_primary_selection_source_v1_interface
         kTestSelectionSourceImpl = {&TestSelectionSource::Offer, &Destroy};
+    auto* delegate = new ZwpPrimarySelectionSource;
     wl_resource* resource = CreateResourceWithImpl<TestSelectionSource>(
         client, &zwp_primary_selection_source_v1_interface, version_,
-        &kTestSelectionSourceImpl, id, new ZwpPrimarySelectionSource);
-    return GetUserDataAs<TestSelectionSource>(resource);
+        &kTestSelectionSourceImpl, id, delegate);
+    delegate->source = GetUserDataAs<TestSelectionSource>(resource);
+    return delegate->source;
   }
 
   void OnDestroying() override { delete this; }
@@ -94,7 +130,7 @@
       kTestSelectionManagerImpl = {&TestSelectionDeviceManager::CreateSource,
                                    &TestSelectionDeviceManager::GetDevice,
                                    &Destroy};
-  const TestSelectionDeviceManager::InterfaceInfo interface_info = {
+  static const TestSelectionDeviceManager::InterfaceInfo interface_info = {
       .interface = &zwp_primary_selection_device_manager_v1_interface,
       .implementation = &kTestSelectionManagerImpl,
       .version = kVersion};
diff --git a/ui/views/bubble/bubble_border.cc b/ui/views/bubble/bubble_border.cc
index 5b651165..a74d88d 100644
--- a/ui/views/bubble/bubble_border.cc
+++ b/ui/views/bubble/bubble_border.cc
@@ -131,33 +131,41 @@
 SkPath GetVisibleArrowPath(BubbleBorder::Arrow arrow,
                            const gfx::Rect& bounds,
                            BubbleArrowPart part) {
-  constexpr size_t kNumPoints = 3;
+  constexpr size_t kNumPoints = 4;
   gfx::RectF bounds_f(bounds);
   SkPoint points[kNumPoints];
   switch (GetBubbleArrowSide(arrow)) {
     case BubbleArrowSide::kRight:
       points[0] = {bounds_f.x(), bounds_f.y()};
       points[1] = {bounds_f.right(),
+                   bounds_f.y() + BubbleBorder::kVisibleArrowRadius - 1};
+      points[2] = {bounds_f.right(),
                    bounds_f.y() + BubbleBorder::kVisibleArrowRadius};
-      points[2] = {bounds_f.x(), bounds_f.bottom()};
+      points[3] = {bounds_f.x(), bounds_f.bottom() - 1};
       break;
     case BubbleArrowSide::kLeft:
-      points[0] = {bounds_f.right(), bounds_f.bottom()};
+      points[0] = {bounds_f.right(), bounds_f.bottom() - 1};
       points[1] = {bounds_f.x(),
                    bounds_f.y() + BubbleBorder::kVisibleArrowRadius};
-      points[2] = {bounds_f.right(), bounds_f.y()};
+      points[2] = {bounds_f.x(),
+                   bounds_f.y() + BubbleBorder::kVisibleArrowRadius - 1};
+      points[3] = {bounds_f.right(), bounds_f.y()};
       break;
     case BubbleArrowSide::kTop:
       points[0] = {bounds_f.x(), bounds_f.bottom()};
-      points[1] = {bounds_f.x() + BubbleBorder::kVisibleArrowRadius,
+      points[1] = {bounds_f.x() + BubbleBorder::kVisibleArrowRadius - 1,
                    bounds_f.y()};
-      points[2] = {bounds_f.right(), bounds_f.bottom()};
+      points[2] = {bounds_f.x() + BubbleBorder::kVisibleArrowRadius,
+                   bounds_f.y()};
+      points[3] = {bounds_f.right() - 1, bounds_f.bottom()};
       break;
     case BubbleArrowSide::kBottom:
-      points[0] = {bounds_f.right(), bounds_f.y()};
+      points[0] = {bounds_f.right() - 1, bounds_f.y()};
       points[1] = {bounds_f.x() + BubbleBorder::kVisibleArrowRadius,
                    bounds_f.bottom()};
-      points[2] = {bounds_f.x(), bounds_f.y()};
+      points[2] = {bounds_f.x() + BubbleBorder::kVisibleArrowRadius - 1,
+                   bounds_f.bottom()};
+      points[3] = {bounds_f.x(), bounds_f.y()};
       break;
   }
 
@@ -270,8 +278,7 @@
 constexpr int BubbleBorder::kVisibleArrowGap;
 constexpr int BubbleBorder::kVisibleArrowLength;
 constexpr int BubbleBorder::kVisibleArrowRadius;
-constexpr int BubbleBorder::kVisibleArrowHorizontalBuffer;
-constexpr int BubbleBorder::kVisibleArrowVerticalBuffer;
+constexpr int BubbleBorder::kVisibleArrowBuffer;
 
 BubbleBorder::BubbleBorder(Arrow arrow, Shadow shadow, SkColor color)
     : arrow_(arrow),
@@ -421,10 +428,9 @@
       if (is_vertical_arrow) {
         const int right_bound =
             contents_bounds.right() -
-            (kVisibleArrowHorizontalBuffer + kVisibleArrowRadius);
-        const int left_bound = contents_bounds.x() +
-                               kVisibleArrowHorizontalBuffer +
-                               kVisibleArrowRadius;
+            (kVisibleArrowBuffer + kVisibleArrowRadius + shadow_insets.right());
+        const int left_bound = contents_bounds.x() + kVisibleArrowBuffer +
+                               kVisibleArrowRadius + shadow_insets.left();
         if (anchor_point.x() > anchor_center.x() &&
             anchor_center.x() > contents_center.x()) {
           anchor_point.set_x(anchor_center.x());
@@ -442,11 +448,11 @@
           contents_bounds += gfx::Vector2d(anchor_point.x() - right_bound, 0);
         }
       } else {
-        const int bottom_bound =
-            contents_bounds.bottom() -
-            (kVisibleArrowVerticalBuffer + kVisibleArrowRadius);
-        const int top_bound = contents_bounds.y() +
-                              kVisibleArrowVerticalBuffer + kVisibleArrowRadius;
+        const int bottom_bound = contents_bounds.bottom() -
+                                 (kVisibleArrowBuffer + kVisibleArrowRadius +
+                                  shadow_insets.bottom());
+        const int top_bound = contents_bounds.y() + kVisibleArrowBuffer +
+                              kVisibleArrowRadius + shadow_insets.top();
         if (anchor_point.y() > anchor_center.y() &&
             anchor_center.y() > contents_center.y()) {
           anchor_point.set_y(anchor_center.y());
@@ -469,23 +475,23 @@
       constexpr int kVisibleArrowDiameter = 2 * kVisibleArrowRadius;
       if (visible_arrow_insets.top()) {
         visible_arrow_rect_ =
-            gfx::Rect(anchor_point.x() - kVisibleArrowRadius,
+            gfx::Rect(anchor_point.x() - kVisibleArrowRadius + 1,
                       contents_bounds.y() + insets.top() - kVisibleArrowLength,
                       kVisibleArrowDiameter, kVisibleArrowLength);
       } else if (visible_arrow_insets.bottom()) {
         visible_arrow_rect_ =
-            gfx::Rect(anchor_point.x() - kVisibleArrowRadius,
+            gfx::Rect(anchor_point.x() - kVisibleArrowRadius + 1,
                       contents_bounds.bottom() - insets.bottom(),
                       kVisibleArrowDiameter, kVisibleArrowLength);
       } else if (visible_arrow_insets.left()) {
         visible_arrow_rect_ =
             gfx::Rect(contents_bounds.x() + insets.left() - kVisibleArrowLength,
-                      anchor_point.y() - kVisibleArrowRadius,
+                      anchor_point.y() - kVisibleArrowRadius + 1,
                       kVisibleArrowLength, kVisibleArrowDiameter);
       } else if (visible_arrow_insets.right()) {
         visible_arrow_rect_ =
             gfx::Rect(contents_bounds.right() - insets.right(),
-                      anchor_point.y() - kVisibleArrowRadius,
+                      anchor_point.y() - kVisibleArrowRadius + 1,
                       kVisibleArrowLength, kVisibleArrowDiameter);
       }
     }
diff --git a/ui/views/bubble/bubble_border.h b/ui/views/bubble/bubble_border.h
index 5aa07e11..10c5fe3 100644
--- a/ui/views/bubble/bubble_border.h
+++ b/ui/views/bubble/bubble_border.h
@@ -90,19 +90,18 @@
   static constexpr int kShadowVerticalOffset = 2;
 
   // Space between the anchor view and a visible arrow if one is present.
-  static constexpr int kVisibleArrowGap = 1;
+  static constexpr int kVisibleArrowGap = 4;
 
   // Length of the visible arrow (distance from the bubble to the tip of the
   // arrow) if one is present.
   static constexpr int kVisibleArrowLength = 8;
 
   // Radius (half-width) of the visible arrow, when one is present.
-  static constexpr int kVisibleArrowRadius = 8;
+  static constexpr int kVisibleArrowRadius = 9;
 
-  // Distances between the edge of the bubble widget and the edge of the visible
+  // Distance between the edge of the bubble widget and the edge of the visible
   // arrow if one is present.
-  static constexpr int kVisibleArrowHorizontalBuffer = 16;
-  static constexpr int kVisibleArrowVerticalBuffer = 12;
+  static constexpr int kVisibleArrowBuffer = 12;
 
   BubbleBorder(Arrow arrow, Shadow shadow, SkColor color);
   ~BubbleBorder() override;
diff --git a/ui/views/bubble/bubble_border_unittest.cc b/ui/views/bubble/bubble_border_unittest.cc
index d4e29da..2f5df69d 100644
--- a/ui/views/bubble/bubble_border_unittest.cc
+++ b/ui/views/bubble/bubble_border_unittest.cc
@@ -412,8 +412,7 @@
   EXPECT_EQ(kAnchor1.bottom() + BubbleBorder::kVisibleArrowGap +
                 BubbleBorder::kBorderThicknessDip,
             bounds.y());
-  EXPECT_EQ(kAnchor1.x() - kInsets.left() + BubbleBorder::kBorderThicknessDip,
-            bounds.x());
+  EXPECT_EQ(kAnchor1.x() - kInsets.left(), bounds.x());
 
   bounds = border.GetBounds(kAnchor2, kContentSize);
   EXPECT_EQ(kContentSize.height() + kInsets.bottom() +
@@ -483,9 +482,7 @@
   EXPECT_EQ(kAnchor1.bottom() + BubbleBorder::kVisibleArrowGap +
                 BubbleBorder::kBorderThicknessDip,
             bounds.y());
-  EXPECT_EQ(
-      kAnchor1.right() + kInsets.right() - BubbleBorder::kBorderThicknessDip,
-      bounds.right());
+  EXPECT_EQ(kAnchor1.right() + kInsets.right(), bounds.right());
 
   bounds = border.GetBounds(kAnchor2, kContentSize);
   EXPECT_EQ(kContentSize.height() + kInsets.bottom() +
@@ -523,8 +520,7 @@
             bounds.height());
   EXPECT_EQ(kContentSize.width() + kInsets.width(), bounds.width());
   EXPECT_EQ(kAnchor1.y() - BubbleBorder::kVisibleArrowGap, bounds.bottom());
-  EXPECT_EQ(kAnchor1.x() - kInsets.left() + BubbleBorder::kBorderThicknessDip,
-            bounds.x());
+  EXPECT_EQ(kAnchor1.x() - kInsets.left(), bounds.x());
 
   bounds = border.GetBounds(kAnchor2, kContentSize);
   EXPECT_EQ(kContentSize.height() + kInsets.top() +
@@ -588,9 +584,7 @@
             bounds.height());
   EXPECT_EQ(kContentSize.width() + kInsets.width(), bounds.width());
   EXPECT_EQ(kAnchor1.y() - BubbleBorder::kVisibleArrowGap, bounds.bottom());
-  EXPECT_EQ(
-      kAnchor1.right() + kInsets.right() - BubbleBorder::kBorderThicknessDip,
-      bounds.right());
+  EXPECT_EQ(kAnchor1.right() + kInsets.right(), bounds.right());
 
   bounds = border.GetBounds(kAnchor2, kContentSize);
   EXPECT_EQ(kContentSize.height() + kInsets.top() +