diff --git a/BUILD.gn b/BUILD.gn
index 017e595e..6c5f05698 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -202,6 +202,7 @@
     deps += [
       "//weblayer/shell:weblayer_shell",
       "//weblayer/test:weblayer_browsertests",
+      "//weblayer/test:weblayer_unittests",
     ]
     if (is_android) {
       deps += [ "//weblayer/browser/android/javatests:weblayer_instrumentation_test_apk" ]
diff --git a/DEPS b/DEPS
index 40ede553..5a53810 100644
--- a/DEPS
+++ b/DEPS
@@ -175,11 +175,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': 'daf94c56bcb37ef052f0dfba8cb1736a8ab52813',
+  'skia_revision': '6dfc554546710dcd1b52db60fe23031cf8499893',
   # 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': '8da8c78862ad3b34842f3f4849e156fe5d1fedbe',
+  'v8_revision': 'a9439a5089befea36e97cccf7e164ba33a9a2cbd',
   # 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.
@@ -191,11 +191,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': 'd37179337d95e73367492a7af39106711171340a',
+  'swiftshader_revision': '9d2fd9c161ab6af2cd17c4170e083a63a2a3077f',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '8cc69b1037252e46883624efe239017dfdca5676',
+  'pdfium_revision': 'b8b3f5ffc0ea33f06402e03145f26ed6d581b552',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
@@ -246,7 +246,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': 'b36549d189fbd2e253c360606349cf9a05af2918',
+  'devtools_frontend_revision': '3f138576af56d43cda9fb08336fbd67aac37c297',
   # 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.
@@ -302,7 +302,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': '8619cbe2379c73c2237b565278701dd0108f7094',
+  'dawn_revision': '5b7292c8f8e2f979041e1b1aaf8ebd9e64086e28',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -525,7 +525,7 @@
   },
 
   'src/ios/third_party/material_components_ios/src': {
-      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '969f6f55460312e5f16236ad0e06c3e725f1fb74',
+      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + 'd36b5e8f3d12b4123032a3a3abc9296984a617a3',
       'condition': 'checkout_ios',
   },
 
@@ -1218,7 +1218,7 @@
     Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '6f26bce0b1c4e8ce0e13332f7c0083788def5fdf',
 
   'src/third_party/openscreen/src':
-    Var('chromium_git') + '/openscreen' + '@' + '07e64e6eeffc6d7852ce31ea84be8597b5c792fd',
+    Var('chromium_git') + '/openscreen' + '@' + '6812621f27e9f64d7cee47a733a2ddaaa4800f4f',
 
   'src/third_party/openxr/src': {
     'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '9e97b73e7dd2bfc07745489d728f6a36665c648f',
@@ -1465,7 +1465,7 @@
   },
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '9d8cede79b057ffd2480f42f12011db5d668fd18',
+    Var('webrtc_git') + '/src.git' + '@' + 'adc4da30f420b1f50815ef3890bb4c95fb867d35',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1540,7 +1540,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@3431cbde4e5a65c48233cd9f9854cc4813ee1ca7',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@fd5072e45780d9bf4d9e7c2ad2466045d973df05',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/WATCHLISTS b/WATCHLISTS
index b3104cc..906b6ee 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -361,7 +361,7 @@
       'filepath': 'content/browser/device_sensors/' \
                   '|content/test/data/device_sensors/' \
                   '|third_party/blink/renderer/modules/device_orientation/' \
-                  '|third_party/blink/web_tests/device_orientation/' \
+                  '|third_party/blink/web_tests/external/wpt/orientation-event/' \
                   '|third_party/blink/renderer/core/frame/platform_event_(controller|dispatcher)' \
                   '|third_party/blink/renderer/core/frame/device_single_window_event_controller'
     },
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 2e39fb7..27a1cee 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -55,7 +55,7 @@
 <translation id="1550523713251050646">انقر للحصول على المزيد من الخيارات</translation>
 <translation id="1570871743947603115">تبديل البلوتوث. <ph name="STATE_TEXT" /></translation>
 <translation id="1589090746204042747">الوصول إلى جميع أنشطتك في جلسة واحدة</translation>
-<translation id="1632985212731562677">يمكن إيقاف ميزة "الوصول عبر مفتاح التحويل" في "الإعدادات" &gt; "أدوات تمكين الوصول".</translation>
+<translation id="1632985212731562677">يمكن إيقاف ميزة "الوصول عبر مفتاح التحويل" في "الإعدادات" &gt; "إمكانية الوصول".</translation>
 <translation id="1654477262762802994">بدء طلب بحث صوتي</translation>
 <translation id="1658406695958299976">عذرًا، لا يمكن التحقق من كلمة المرور حتى الآن. ملاحظة: في حال تغيير كلمة المرور مؤخرًا، سيتم تطبيق كلمة المرور الجديدة بعد تسجيل الخروج، يُرجى استخدام كلمة المرور القديمة هنا.</translation>
 <translation id="1677472565718498478">الوقت المتبقي <ph name="TIME" /></translation>
@@ -413,6 +413,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: جارٍ التفعيل...</translation>
 <translation id="6283712521836204486">وضع "عدم الإزعاج" متوقف.</translation>
 <translation id="6284232397434400372">تم تغيير درجة الدقة</translation>
+<translation id="6288235558961782912">يمكن إعادة إضافة <ph name="USER_EMAIL_ADDRESS" /> لاحقًا بإذنٍ من أحد الوالدَين.</translation>
 <translation id="6297287540776456956">استخدام قلم الشاشة لتحديد منطقة</translation>
 <translation id="6310121235600822547">تم تدوير <ph name="DISPLAY_NAME" /> إلى <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">تم تفعيل البلوتوث</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb
index 07c2d8a..2d23c7cb 100644
--- a/ash/strings/ash_strings_as.xtb
+++ b/ash/strings/ash_strings_as.xtb
@@ -55,7 +55,7 @@
 <translation id="1550523713251050646">অধিক বিকল্পৰ বাবে ক্লিক কৰক</translation>
 <translation id="1570871743947603115">ব্লুটুথ ট’গল কৰক। <ph name="STATE_TEXT" /></translation>
 <translation id="1589090746204042747">এই ছেশ্বনত আপোনাৰ সকলো কার্যকলাপ এক্সেছ কৰে</translation>
-<translation id="1632985212731562677">ছুইচৰ দ্বাৰা এক্সেছ ছেটিংসমূহ &gt; সাধ্য সুবিধাত অক্ষম কৰিব পৰা যায়।</translation>
+<translation id="1632985212731562677">ছুইচৰ দ্বাৰা এক্সেছ ছেটিংসমূহ ইয়াত অক্ষম কৰিব পৰা যায় &gt; সাধ্য সুবিধা।</translation>
 <translation id="1654477262762802994">কণ্ঠধ্বনিৰদ্বাৰা সন্ধান আৰম্ভ কৰক</translation>
 <translation id="1658406695958299976">দুঃখিত, আপোনাৰ পাছৱৰ্ডটো এতিয়াও সত্যাপন কৰিব পৰা নগ‘ল। টোকা: যদি আপুনি অলপতে আপোনাৰ পাছৱৰ্ডটো সলনি কৰিছিল তেন্তে আপুনি ছাইন আউট কৰাৰ পিছত নতুন পাছৱৰ্ডটো প্ৰযোজ্য হ‘ব। ইয়াত অনুগ্ৰহ কৰি পুৰণা পাছৱৰ্ডটো ব্যৱহাৰ কৰক।</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> বাকী</translation>
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: সক্ৰিয় কৰি থকা হৈছে…</translation>
 <translation id="6283712521836204486">অসুবিধা নিদিব অফ কৰা আছে।</translation>
 <translation id="6284232397434400372">ৰিজ'লিউশ্বন সলনি হ'ল</translation>
+<translation id="6288235558961782912">এজন অভিভাৱকৰ অনুমতি লৈ <ph name="USER_EMAIL_ADDRESS" /> পাছত পুনৰ যোগ কৰিব পৰা যায়।</translation>
 <translation id="6297287540776456956">কোনো অংশ বাছনি কৰিবলৈ ষ্টাইলাছ ব্যৱহাৰ কৰক</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ক <ph name="ROTATION" />লৈ ঘূৰোৱা হৈছিল</translation>
 <translation id="6376931439017688372">ব্লুটুথ অন কৰা আছে</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb
index 83a888b8..f6e1f66 100644
--- a/ash/strings/ash_strings_az.xtb
+++ b/ash/strings/ash_strings_az.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: Aktivləşdirilir...</translation>
 <translation id="6283712521836204486">Narahat etməyin rejimi deaktivdir</translation>
 <translation id="6284232397434400372">Keyfiyyət dəyişdi</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> daha sonra valideynin icazəsi ilə yenidən əlavə edilə bilər.</translation>
 <translation id="6297287540776456956">Bölgə seçmək üçün fırçadan istifadə edin</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> <ph name="ROTATION" /> tərəfə fırladıldı</translation>
 <translation id="6376931439017688372">Bluetooth aktivdir</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb
index d6cf932..6ed21cb 100644
--- a/ash/strings/ash_strings_be.xtb
+++ b/ash/strings/ash_strings_be.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: ідзе актывацыя...</translation>
 <translation id="6283712521836204486">Рэжым "Не турбаваць" выключаны.</translation>
 <translation id="6284232397434400372">Раздзяляльнасць зменена</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> можна дадаць пазней з дазволу бацькоў.</translation>
 <translation id="6297287540776456956">Выкарыстоўвайце стыло для выбару рэгіёна</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> павернуты на <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Bluetooth уключаны</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index 2956470..92f5e71 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271">„<ph name="NAME" />“: Активира се...</translation>
 <translation id="6283712521836204486">Режимът „Не безпокойте“ е изключен.</translation>
 <translation id="6284232397434400372">Разделителната способност е променена</translation>
+<translation id="6288235558961782912">Имейл адресът <ph name="USER_EMAIL_ADDRESS" /> може да бъде добавен отново по-късно с разрешение от родител.</translation>
 <translation id="6297287540776456956">Използвайте писалката, за да изберете област</translation>
 <translation id="6310121235600822547">Завъртяхте „<ph name="DISPLAY_NAME" />“ на <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Функцията за Bluetooth е включена</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 916d461..04a280a 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -55,7 +55,7 @@
 <translation id="1550523713251050646">আরও বিকল্পের জন্য ক্লিক করুন</translation>
 <translation id="1570871743947603115">ব্লুটুথ টগল করুন। <ph name="STATE_TEXT" /></translation>
 <translation id="1589090746204042747">এই সেশনে আপনার সব অ্যাক্টিভিটি অ্যাক্সেস করুন</translation>
-<translation id="1632985212731562677">সেটিংস &gt; অ্যাক্সেসিবিলিটি-তে গিয়ে 'অ্যাক্সেস পাল্টান' ফিচারটি বন্ধ করা করতে পারেন।</translation>
+<translation id="1632985212731562677">সেটিংস &gt; অ্যাক্সেসিবিলিটি বিকল্পে গিয়ে 'অ্যাক্সেস পাল্টান' ফিচারটি বন্ধ করা করতে পারেন।</translation>
 <translation id="1654477262762802994">ভয়েস কোয়েরি শুরু করুন</translation>
 <translation id="1658406695958299976">দুঃখিত, আপনার পাসওয়ার্ড এখনও পর্যন্ত যাচাই করা যায়নি। দ্রষ্টব্য: আপনি যদি সম্প্রতি আপনার পাসওয়ার্ড পরিবর্তন করে থাকেন, তাহলে আপনি সাইন-আউট করার পর আপনার নতুন পাসওয়ার্ড প্রয়োগ করা হবে, অনুগ্রহ করে এখানে পুরানো পাসওয়ার্ড ব্যবহার করুন।</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> বাকি আছে</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 0c9fbe33..121a2b4 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: Probíhá aktivace...</translation>
 <translation id="6283712521836204486">Režim Nerušit je vypnutý.</translation>
 <translation id="6284232397434400372">Rozlišení se změnilo</translation>
+<translation id="6288235558961782912">Adresu <ph name="USER_EMAIL_ADDRESS" /> můžete s povolením rodiče přidat později</translation>
 <translation id="6297287540776456956">Vyberte pomocí dotykového pera oblast.</translation>
 <translation id="6310121235600822547">Displej <ph name="DISPLAY_NAME" /> byl otočen o <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Rozhraní Bluetooth je zapnuté</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 0146b9f9..2e247608 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -413,6 +413,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: Activando...</translation>
 <translation id="6283712521836204486">La función No interrumpir está desactivada.</translation>
 <translation id="6284232397434400372">Se cambió la resolución</translation>
+<translation id="6288235558961782912">Puedes volver a agregar a <ph name="USER_EMAIL_ADDRESS" /> más tarde con el permiso de tu padre o madre.</translation>
 <translation id="6297287540776456956">Usa la pluma stylus para seleccionar una región</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> se giró a <ph name="ROTATION" />.</translation>
 <translation id="6376931439017688372">Se activó la conexión Bluetooth</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index eb47099..8a6528e 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -108,7 +108,7 @@
 <translation id="2295777434187870477">El micrófono está activado. Utiliza el botón para silenciarlo.</translation>
 <translation id="2298170939937364391">Se ha habilitado la lupa de pantalla completa. Pulsa Ctrl + tecla de búsqueda + M de nuevo para desactivarla.</translation>
 <translation id="2302092602801625023">Esta cuenta se gestiona con Family Link</translation>
-<translation id="2303600792989757991">Activar descripción general de ventanas</translation>
+<translation id="2303600792989757991">Activar vista general de ventanas</translation>
 <translation id="2339073806695260576">Toca el botón del lápiz óptico situado en la estantería para tomar una nota, hacer una captura de pantalla o utilizar el puntero láser o la lupa.</translation>
 <translation id="2341729377289034582">Bloqueada en vertical</translation>
 <translation id="2352467521400612932">Configuración del lápiz óptico</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index 2504dfd..57db3aa 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -413,6 +413,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: aktiveerimine ...</translation>
 <translation id="6283712521836204486">Režiim Mitte segada on väljas.</translation>
 <translation id="6284232397434400372">Eraldusvõimet muudeti</translation>
+<translation id="6288235558961782912">Aadressi <ph name="USER_EMAIL_ADDRESS" /> saab hiljem vanema loaga uuesti lisada.</translation>
 <translation id="6297287540776456956">Valige piirkond elektronpliiatsiga</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> vahetati valikule <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Bluetooth on sisse lülitatud</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 4705670d..e189d00c 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -413,6 +413,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: aktibatzen…</translation>
 <translation id="6283712521836204486">Ez molestatzeko modua desaktibatuta dago.</translation>
 <translation id="6284232397434400372">Aldatu egin da bereizmena</translation>
+<translation id="6288235558961782912">Geroago gehi daiteke <ph name="USER_EMAIL_ADDRESS" /> guraso baten baimenarekin.</translation>
 <translation id="6297287540776456956">Erabili arkatza eremu bat hautatzeko</translation>
 <translation id="6310121235600822547">Biraketa <ph name="ROTATION" /> ezarri da <ph name="DISPLAY_NAME" /> pantailan</translation>
 <translation id="6376931439017688372">Aktibatuta dago Bluetooth konexioa</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 3d35d97b..f51a6da39 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" /> : activation en cours…</translation>
 <translation id="6283712521836204486">Le mode Ne pas déranger est désactivé.</translation>
 <translation id="6284232397434400372">Résolution modifiée</translation>
+<translation id="6288235558961782912">L'utilisateur <ph name="USER_EMAIL_ADDRESS" /> peut être ajouté de nouveau plus tard, avec l'autorisation d'un parent.</translation>
 <translation id="6297287540776456956">Utilisez un stylet pour sélectionner une zone</translation>
 <translation id="6310121235600822547">L'écran <ph name="DISPLAY_NAME" /> a été pivoté de <ph name="ROTATION" />.</translation>
 <translation id="6376931439017688372">Le Bluetooth est activé</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 815fb35..3877c090 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" /> : activation en cours…</translation>
 <translation id="6283712521836204486">Le mode Ne pas déranger est désactivé.</translation>
 <translation id="6284232397434400372">Résolution modifiée</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> pourra être ajouté à nouveau ultérieurement avec l'autorisation d'un des parents.</translation>
 <translation id="6297287540776456956">Utilisez le stylet pour sélectionner une zone</translation>
 <translation id="6310121235600822547">L'écran "<ph name="DISPLAY_NAME" />" a effectué une rotation de <ph name="ROTATION" />.</translation>
 <translation id="6376931439017688372">Bluetooth activé</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 2b2b042..58f5b4d 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: સક્રિય કરી રહ્યું છે...</translation>
 <translation id="6283712521836204486">ખલેલ પાડશો નહીં બંધ છે.</translation>
 <translation id="6284232397434400372">રિઝોલ્યુશન બદલાયું</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" />ને પછીથી માતાપિતાની પરવાનગી સાથે ઉમેરી શકાય છે.</translation>
 <translation id="6297287540776456956">કોઈ પ્રદેશ પસંદ કરવા માટે સ્ટાઇલસનો ઉપયોગ કરો</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ને <ph name="ROTATION" /> પર ફેરવવામાં આવ્યું હતું</translation>
 <translation id="6376931439017688372">બ્લૂટૂથ ચાલુ છે</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index b92cfc7..a58b60f 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -413,6 +413,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: सक्रिय हो रहा है...</translation>
 <translation id="6283712521836204486">'परेशान न करें' बंद है.</translation>
 <translation id="6284232397434400372">रिज़ॉल्यूशन बदला गया</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> काे माता-पिता की अनुमति से, बाद में जोड़ा जा सकता है.</translation>
 <translation id="6297287540776456956">कोई क्षेत्र चुनने के लिए स्टाइलस का उपयोग करें</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> को <ph name="ROTATION" /> पर घुमाया गया</translation>
 <translation id="6376931439017688372">ब्लूटूथ चालू है</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index a708c25..31e0b3e 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: Mengaktifkan...</translation>
 <translation id="6283712521836204486">Mode Jangan Ganggu nonaktif.</translation>
 <translation id="6284232397434400372">Resolusi diubah</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> dapat ditambahkan ulang nanti dengan izin orang tua.</translation>
 <translation id="6297287540776456956">Gunakan stilus untuk memilih wilayah</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> diputar ke <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Bluetooth aktif</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index 05ceeda..be201de 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: 有効にしています...</translation>
 <translation id="6283712521836204486">サイレント モードはオフです。</translation>
 <translation id="6284232397434400372">解像度が変更されました</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> は、保護者の許可があれば後から追加できます。</translation>
 <translation id="6297287540776456956">タッチペンを使って部分を選択してください</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> を <ph name="ROTATION" /> に回転しました</translation>
 <translation id="6376931439017688372">Bluetooth はオンです</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb
index 0c4258e3..de6971d 100644
--- a/ash/strings/ash_strings_ka.xtb
+++ b/ash/strings/ash_strings_ka.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: გააქტიურება…</translation>
 <translation id="6283712521836204486">„არ შემაწუხოთ“ გამორთულია.</translation>
 <translation id="6284232397434400372">გარჩევადობა შეიცვალა</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> მოგვიანებით მშობლის ნებართვით შეგიძლიათ დაამატოთ.</translation>
 <translation id="6297287540776456956">რეგიონის ასარჩევად, გამოიყენეთ სტილუსი</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> შეტრიალებულია <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Bluetooth ჩართულია</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb
index 0127c7a..dce3e9a 100644
--- a/ash/strings/ash_strings_kk.xtb
+++ b/ash/strings/ash_strings_kk.xtb
@@ -182,7 +182,7 @@
 <translation id="3154351730702813399">Құрылғы әкімшісі интернетті шолуыңызға қатысты ақпаратты көре алады.</translation>
 <translation id="3181441307743005334">Қайту іске қосуға біраз уақыт қажет болуы мүмкін</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Құрылғыға жалғанған}other{# құрылғыға жалғанған}}</translation>
-<translation id="3203405173652969239">Switch Access қосылды</translation>
+<translation id="3203405173652969239">Switch Access қосылды.</translation>
 <translation id="3207953481422525583">Пайдаланушы параметрлері</translation>
 <translation id="3217205077783620295">Дыбыс деңгейі қосылып тұр. Түймені қайта бассаңыз, дауыс өшеді.</translation>
 <translation id="3226991577105957773">Тағы <ph name="COUNT" /></translation>
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: белсендірілуде…</translation>
 <translation id="6283712521836204486">"Мазаламау" режимі өшірулі.</translation>
 <translation id="6284232397434400372">Ажыратымдылық өзгертілді</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> есептік жазбасы ата-ананың рұқсатымен кейінірек қайта енгізіледі.</translation>
 <translation id="6297287540776456956">Бөлікті таңдау үшін стилусты таңдаңыз</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> дисплейі <ph name="ROTATION" /> бағытында бұрылды</translation>
 <translation id="6376931439017688372">Bluetooth қосулы</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index 88c6824..4a58ec6 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: កំពុងធ្វើសកម្មភាព...</translation>
 <translation id="6283712521836204486">មុខងារ​ "កុំរំខាន​" ត្រូវបាន​បិទ។</translation>
 <translation id="6284232397434400372">បាន​ប្តូរ​កម្រិត​ច្បាស់</translation>
+<translation id="6288235558961782912">អាចបញ្ចូល <ph name="USER_EMAIL_ADDRESS" /> ឡើងវិញ​នៅពេលក្រោយ​ដោយមាន​ការអនុញ្ញាតពីមាតាបិតា។</translation>
 <translation id="6297287540776456956">ប្រើប៊ិចដើម្បីជ្រើសរើសតំបន់</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ត្រូវបានបង្វិលទៅ <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">ប៊្លូធូស​ត្រូវបាន​បើក</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index 499d765a..ee74772 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -55,7 +55,7 @@
 <translation id="1550523713251050646">ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳಿಗೆ ಕ್ಲಿಕ್ ಮಾಡಿ</translation>
 <translation id="1570871743947603115">ಬ್ಲೂಟೂತ್ ಟಾಗಲ್ ಮಾಡಿ. <ph name="STATE_TEXT" /></translation>
 <translation id="1589090746204042747">ಈ ಸೆಶನ್‌ನಲ್ಲಿ ನೀವು ನಡೆಸುವ ಎಲ್ಲಾ ಚಟುವಟಿಕೆಯನ್ನು ಪ್ರವೇಶಿಸುವುದು</translation>
-<translation id="1632985212731562677">ಪ್ರವೇಶ ಬದಲಾಯಿಸಿ ಅನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳು &gt; ಅಕ್ಸೆಸಿಬಿಲಿಟಿಯಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು.</translation>
+<translation id="1632985212731562677">ಪ್ರವೇಶ ಬದಲಾಯಿಸಿ ಅನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳು &gt; ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿಯಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು.</translation>
 <translation id="1654477262762802994">ಧ್ವನಿ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳಲು ಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="1658406695958299976">ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಇನ್ನೂ ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಗಮನಿಸಿ: ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನೀವು ಇತ್ತೀಚೆಗೆ ಬದಲಾಯಿಸಿದ್ದರೆ, ನೀವು ಸೈನ್ ಔಟ್ ಮಾಡಿದ ನಂತರ ನಿಮ್ಮ ಹೊಸ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಜಾರಿಗೆ ತರಲಾಗುತ್ತದೆ, ಇಲ್ಲಿ ಹಳೆಯ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಬಳಸಿ.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ಬಾಕಿ ಉಳಿದಿದೆ</translation>
@@ -413,6 +413,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="6283712521836204486">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ" ಆಫ್ ಆಗಿದೆ.</translation>
 <translation id="6284232397434400372">ರೆಸಲ್ಯೂಷನ್ ಬದಲಾಗಿದೆ</translation>
+<translation id="6288235558961782912">ಪೋಷಕರ ಅನುಮತಿಯ ಮೇರೆಗೆ <ph name="USER_EMAIL_ADDRESS" /> ಅನ್ನು ನಂತರ ಪುನಃ ಸೇರಿಸಬಹುದಾಗಿದೆ.</translation>
 <translation id="6297287540776456956">ಪ್ರದೇಶವನ್ನು ಆಯ್ಕೆಮಾಡಲು ಸ್ಟೈಲಸ್ ಬಳಸಿ</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ಅನ್ನು <ph name="ROTATION" /> ಗೆ ತಿರುಗಿಸಲಾಗಿದೆ</translation>
 <translation id="6376931439017688372">ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿದೆ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index 87ea988..a617dab 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: 활성화 중...</translation>
 <translation id="6283712521836204486">방해 금지 모드가 사용 중지되어 있습니다.</translation>
 <translation id="6284232397434400372">해상도가 변경됨</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" />은(는) 나중에 부모님의 허락을 받아 다시 추가할 수 있습니다.</translation>
 <translation id="6297287540776456956">스타일러스를 사용하여 영역을 선택하세요.</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />(이)가 <ph name="ROTATION" />(으)로 회전되었습니다.</translation>
 <translation id="6376931439017688372">블루투스 사용 중</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index 573ffa5..f67d965 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -55,7 +55,7 @@
 <translation id="1550523713251050646">Көбүрөөк опциялар үчүн чыкылдатыңыз</translation>
 <translation id="1570871743947603115">Bluetooth'ду өчүрүү/күйгүзүү. <ph name="STATE_TEXT" /></translation>
 <translation id="1589090746204042747">Бул сеанста аткарган иш-аракеттериңизди көрөт</translation>
-<translation id="1632985212731562677">Switch Access функциясын Жөндөөлөр &gt; Атайын мүмкүнчүлүктөр бөлүмүнөн өчүрүп коюуга болот.</translation>
+<translation id="1632985212731562677">Switch Access функциясын Жөндөөлөр &gt; Атайын мүмкүнчүлүктөр бөлүмүнөн өчүрүүгө болот.</translation>
 <translation id="1654477262762802994">Айтып издеп баштоо</translation>
 <translation id="1658406695958299976">Кечиресиз, сырсөзүңүздү текшерүү дагы эле мүмкүн болбой жатат. Эскертүү: эгер сырсөзүңүздү жакында өзгөрткөн болсоңуз, жаңы сырсөзүңүз чыгып кайра киргениңизден кийин гана колдонулат, андыктан бул жерде эски сырсөздү колдонуңуз.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> калды</translation>
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: Жандырылууда…</translation>
 <translation id="6283712521836204486">"Тынчымды алба" режими өчүк.</translation>
 <translation id="6284232397434400372">Дааналыгы өзгөртүлдү</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> ата-эненин уруксаты менен кайра кошууга болот.</translation>
 <translation id="6297287540776456956">Тандалган бөлүктө стилусту колдонуу</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> буга <ph name="ROTATION" /> айланды</translation>
 <translation id="6376931439017688372">Bluetooth күйүк</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index 078bc4a4..9ea6c73 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: ກຳລັງເປີດນຳໃຊ້...</translation>
 <translation id="6283712521836204486">ໂໝດຫ້າມລົບກວນປິດຢູ່.</translation>
 <translation id="6284232397434400372">ປ່ຽນຄວາມລະອຽດແລ້ວ</translation>
+<translation id="6288235558961782912">ສາມາດເພີ່ມ <ph name="USER_EMAIL_ADDRESS" /> ຄືນໃໝ່ໃນພາຍຫຼັງໄດ້ໂດຍມີການອະນຸຍາດຂອງພໍ່ແມ່.</translation>
 <translation id="6297287540776456956">ໃຊ້ປາຍປາກກາເພື່ອເລືອກພື້ນທີ່</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />ຖືກໝຸນໄປທີ່<ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Bluetooth ເປີດຢູ່</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index f35f7eea..ffc474e 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271">„<ph name="NAME" />“: aktyvinama...</translation>
 <translation id="6283712521836204486">Netrukdymo režimas išjungtas.</translation>
 <translation id="6284232397434400372">Skyra pakeista</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> galima pridėti iš naujo vėliau, gavus tėvų leidimą.</translation>
 <translation id="6297287540776456956">Naudodami rašiklį pasirinkite sritį</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> pakeista į <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">„Bluetooth“ įjungtas</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index d35f681..659a9de 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: notiek aktivizēšana...</translation>
 <translation id="6283712521836204486">Režīms “Netraucēt” ir izslēgts.</translation>
 <translation id="6284232397434400372">Izšķirtspēja nomainīta</translation>
+<translation id="6288235558961782912">Kontu <ph name="USER_EMAIL_ADDRESS" /> var vēlāk atkārtoti pievienot ar vecāku atļauju.</translation>
 <translation id="6297287540776456956">Izmantojiet skārienekrāna pildspalvu, lai atlasītu ekrāna daļu.</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> tika pagriezts šādi: <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Bluetooth ir ieslēgts</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index a29e9ca..c7c69a56 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: സജീവമാക്കുന്നു...</translation>
 <translation id="6283712521836204486">ശല്യപ്പെടുത്തരുത് മോഡ് ഓഫാണ്.</translation>
 <translation id="6284232397434400372">റെസല്യൂഷൻ മാറ്റി</translation>
+<translation id="6288235558961782912">രക്ഷിതാവിന്റെ അനുമതിയോടെ <ph name="USER_EMAIL_ADDRESS" /> എന്നത് പിന്നീട് വീണ്ടും ചേർക്കാനാവും.</translation>
 <translation id="6297287540776456956">ആവശ്യമുള്ള ഏരിയ തിരഞ്ഞെടുക്കാൻ സ്റ്റൈലസ് ഉപയോഗിക്കുക</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> എന്നതിനെ <ph name="ROTATION" /> എന്നതിലേയ്‌ക്ക് തിരിച്ചു</translation>
 <translation id="6376931439017688372">Bluetooth ഓണാണ്</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index f5bbc340..0374d7c 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -413,6 +413,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: идэвхжүүлж байна...</translation>
 <translation id="6283712521836204486">Бүү саад бол горим унтраалттай байна.</translation>
 <translation id="6284232397434400372">Нягтралыг өөрчилсөн</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" />-г эцэг эхийн зөвшөөрөлтэйгөөр дараа дахин нэмэх боломжтой.</translation>
 <translation id="6297287540776456956">Бүс сонгохын тулд мэдрэгч үзэг ашиглах</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> -ийг  <ph name="ROTATION" /> руу эргүүлсэн</translation>
 <translation id="6376931439017688372">Bluetooth асаалттай байна</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index 5437050..4feae69 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: सक्रिय करत आहे...</translation>
 <translation id="6283712521836204486">व्यत्यय आणू नका बंद आहे.</translation>
 <translation id="6284232397434400372">रीझोल्युशन बदलले</translation>
+<translation id="6288235558961782912">पालकाच्या परवानगीने <ph name="USER_EMAIL_ADDRESS" /> नंतर पुन्हा जोडता येईल.</translation>
 <translation id="6297287540776456956">विभाग निवडण्यासाठी स्टायलस वापरा</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> <ph name="ROTATION" /> वर फिरविले होते</translation>
 <translation id="6376931439017688372">ब्लूटूथ सुरू आहे</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 9a5b03148..9f7a2f3 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -55,7 +55,7 @@
 <translation id="1550523713251050646">ပိုမိုရွေးစရာများအတွက် နှိပ်ပါ</translation>
 <translation id="1570871743947603115">'ဘလူးတုသ်' ကို အဖွင့်အပိတ် ပြုလုပ်ရန်။ <ph name="STATE_TEXT" /></translation>
 <translation id="1589090746204042747">ဤစက်ရှင်ရှိ သင့်လုပ်ဆောင်ချက်အားလုံးကို ဝင်ကြည့်နိုင်သည်</translation>
-<translation id="1632985212731562677">'ဆက်တင်များ &gt; အများသုံးစွဲနိုင်မှု' တွင် 'ခလုတ်သုံးခြင်း' ကို ပိတ်နိုင်သည်။</translation>
+<translation id="1632985212731562677">'ဆက်တင်များ' &gt; 'အများသုံးစွဲနိုင်မှု' တွင် 'ခလုတ်သုံးခြင်း' ကို ပိတ်နိုင်သည်။</translation>
 <translation id="1654477262762802994">အသံဖြင့် စတင် စုံစမ်းမေးမြန်းရန်</translation>
 <translation id="1658406695958299976">ဝမ်းနည်းပါသည်။ သင့်စကားဝှက်ကို အတည်ပြု၍ မရသေးပါ။ မှတ်ချက်− သင့်စကားဝှက်အား မကြာသေးခင်က ပြောင်းထားလျှင် သင်ထွက်လိုက်ပြီးသည့်နောက်မှ ၎င်းစကားဝှက်အသစ်သည် အကျိုးသက်ရောက်မည်ဖြစ်သောကြောင့် ဤနေရာတွင် စကားဝှက်အဟောင်းကို အသုံးပြုပါ။</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ကျန်ပါသည်</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb
index d462ff5..5925e18 100644
--- a/ash/strings/ash_strings_ne.xtb
+++ b/ash/strings/ash_strings_ne.xtb
@@ -50,7 +50,7 @@
 <translation id="1516740043221086139">बाधा नपुर्‍याउनुहोस् नामक मोड सक्रिय छ।</translation>
 <translation id="1520303207432623762">{NUM_APPS,plural, =1{सूचनासम्बन्धी सेटिङहरू देखाउनुहोस्। एउटा अनुप्रयोगका लागि सूचनाहरू निष्क्रिय छन्}other{सूचनासम्बन्धी सेटिङहरू देखाउनुहोस्। # अनुप्रयोगका लागि सूचनाहरू निष्क्रिय छन्}}</translation>
 <translation id="1525508553941733066">खारेज गर्नुहोस्</translation>
-<translation id="15373452373711364">ठूलो माउस कर्सर</translation>
+<translation id="15373452373711364">ठुलो माउस कर्सर</translation>
 <translation id="1546492247443594934">डेस्क २</translation>
 <translation id="1550523713251050646">थप विकल्पहरूका लागि क्लिक गर्नुहोस्</translation>
 <translation id="1570871743947603115">ब्लुटुथ टगल गर्नुहोस्। <ph name="STATE_TEXT" /></translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb
index 35b009f..6fa2fdb 100644
--- a/ash/strings/ash_strings_or.xtb
+++ b/ash/strings/ash_strings_or.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: ସକ୍ରିୟ ହେଉଛି...</translation>
 <translation id="6283712521836204486">'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ' ବନ୍ଦ ଅଛି।</translation>
 <translation id="6284232397434400372">ରିଜୋଲ୍ୟୁସନ୍ ପରିବର୍ତ୍ତିତ ହୋଇଛି</translation>
+<translation id="6288235558961782912">ବାପାମା'ଙ୍କ ଅନୁମତି ସହିତ <ph name="USER_EMAIL_ADDRESS" /> ପୁଣି-ଯୋଗ କରିପାରିବେ।</translation>
 <translation id="6297287540776456956">ଏକ ଅଞ୍ଚଳ ଚୟନ କରିବାକୁ ଷ୍ଟାଇଲସ୍ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />କୁ <ph name="ROTATION" />ରେ ଘୂରାଗଲା</translation>
 <translation id="6376931439017688372">ବ୍ଲୁଟୁଥ୍ ଚାଲୁ ଅଛି</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb
index 3fc322c..e2057fa 100644
--- a/ash/strings/ash_strings_pa.xtb
+++ b/ash/strings/ash_strings_pa.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: ਐਕਟੀਵੇਟ ਹੋ ਰਿਹਾ ਹੈ...</translation>
 <translation id="6283712521836204486">'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ' ਬੰਦ ਹੈ।</translation>
 <translation id="6284232397434400372">ਰੈਜ਼ੋਲਿਊਸ਼ਨ ਬਦਲ ਗਿਆ</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਮਾਂ-ਪਿਓ ਦੀ ਇਜਾਜ਼ਤ ਨਾਲ ਮੁੜ-ਸ਼ਾਮਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।</translation>
 <translation id="6297287540776456956">ਇੱਕ ਖੇਤਰ ਦੀ ਚੋਣ ਕਰਨ ਲਈ ਸਟਾਈਲਸ ਦੀ ਵਰਤੋਂ ਕਰੋ</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ਨੂੰ <ph name="ROTATION" /> ਤੱਕ ਰੋਟੇਟ ਕੀਤਾ ਦਿਆ ਸੀ</translation>
 <translation id="6376931439017688372">ਬਲੂਟੁੱਥ ਚਾਲੂ ਹੈ</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index 0a9421d..f6656308 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: выполняется активация...</translation>
 <translation id="6283712521836204486">Режим "Не беспокоить" отключен</translation>
 <translation id="6284232397434400372">Разрешение изменено</translation>
+<translation id="6288235558961782912">Аккаунт <ph name="USER_EMAIL_ADDRESS" /> можно будет добавить снова с разрешения одного из родителей.</translation>
 <translation id="6297287540776456956">Чтобы выбрать регион, используйте стилус</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />: положение изменено на <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Bluetooth включен</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index 4b9b6be4..cf4f116 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: Aktiviranje ...</translation>
 <translation id="6283712521836204486">Način »ne moti« je izklopljen.</translation>
 <translation id="6284232397434400372">Ločljivost je bila spremenjena</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> lahko dodate pozneje z dovoljenjem starša.</translation>
 <translation id="6297287540776456956">S pisalom izberite območje</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> – zasuk na <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Bluetooth je vklopljen</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index 31cf106..91d412d 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: Po aktivizohet...</translation>
 <translation id="6283712521836204486">Modaliteti "Mos shqetëso" është joaktiv.</translation>
 <translation id="6284232397434400372">Rezolucioni u ndryshua</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> mund të rishtohet më vonë me lejen e prindit.</translation>
 <translation id="6297287540776456956">Përdor stilolapsin për të zgjedhur një sektorin</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> u rrotullua në <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Bluetooth-i është aktiv</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index e340df6..a7cedf5 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: Aktiverar ...</translation>
 <translation id="6283712521836204486">Stör ej är inaktiverat.</translation>
 <translation id="6284232397434400372">Upplösningen har ändrats</translation>
+<translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> kan läggas till igen senare med en förälders tillstånd.</translation>
 <translation id="6297287540776456956">Markera ett område med e-pennan</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> byttes till <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">Bluetooth är aktiverat</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 2e60eb7..ba152476 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -413,6 +413,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />: సక్రియం చేస్తోంది...</translation>
 <translation id="6283712521836204486">"అంతరాయం కలిగించవద్దు" ఆఫ్‌లో ఉంది.</translation>
 <translation id="6284232397434400372">రిజల్యూషన్ మార్చబడింది</translation>
+<translation id="6288235558961782912">మీ తల్లి/తండ్రి అనుమతితో <ph name="USER_EMAIL_ADDRESS" />ను తిరిగి యాడ్ చేయవచ్చు.</translation>
 <translation id="6297287540776456956">ప్రాంతాన్ని ఎంచుకోవడానికి స్టైలస్‌ను ఉపయోగించండి</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> <ph name="ROTATION" />కి తిప్పబడింది</translation>
 <translation id="6376931439017688372">బ్లూటూత్ ఆన్ చేయబడింది</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index 16bf35f..430e24e 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" /> กำลังเปิดใช้งาน...</translation>
 <translation id="6283712521836204486">โหมดห้ามรบกวนปิดอยู่</translation>
 <translation id="6284232397434400372">เปลี่ยนความละเอียดแล้ว</translation>
+<translation id="6288235558961782912">คุณจะเพิ่ม <ph name="USER_EMAIL_ADDRESS" /> ได้อีกครั้งในภายหลังโดยต้องได้รับอนุญาตจากผู้ปกครอง</translation>
 <translation id="6297287540776456956">ใช้สไตลัสเพื่อเลือกพื้นที่</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> หมุนเวียนเป็น <ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">บลูทูธเปิดอยู่</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index 4eb0706e..70b65359 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -182,7 +182,7 @@
 <translation id="3154351730702813399">此设备的管理员可能会监控您的浏览活动。</translation>
 <translation id="3181441307743005334">重启可能需要一点时间</translation>
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{已连接到 1 台设备}other{已连接到 # 台设备}}</translation>
-<translation id="3203405173652969239">“开关控制”功能已启用</translation>
+<translation id="3203405173652969239">已启用“开关控制”</translation>
 <translation id="3207953481422525583">用户设置</translation>
 <translation id="3217205077783620295">已开启声音,使用切换开关可将音频静音。</translation>
 <translation id="3226991577105957773">+另外 <ph name="COUNT" /> 条</translation>
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />:正在激活…</translation>
 <translation id="6283712521836204486">“勿扰”模式已关闭。</translation>
 <translation id="6284232397434400372">分辨率已更改</translation>
+<translation id="6288235558961782912">日后在获得家长允许的情况下可以重新添加 <ph name="USER_EMAIL_ADDRESS" />。</translation>
 <translation id="6297287540776456956">使用触控笔选择一个区域</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />已旋转为<ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">蓝牙已开启</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index bcffd41..b422c3b 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -412,6 +412,7 @@
 <translation id="6267036997247669271"><ph name="NAME" />:正在啟用...</translation>
 <translation id="6283712521836204486">零打擾模式已關閉。</translation>
 <translation id="6284232397434400372">解析度已變更</translation>
+<translation id="6288235558961782912">取得家長同意後即可再次新增 <ph name="USER_EMAIL_ADDRESS" />。</translation>
 <translation id="6297287540776456956">使用觸控筆選取擷取範圍</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> 已旋轉到<ph name="ROTATION" /></translation>
 <translation id="6376931439017688372">藍牙已開啟</translation>
diff --git a/ash/system/tray/tray_constants.h b/ash/system/tray/tray_constants.h
index dd8cc60..b8ea29d 100644
--- a/ash/system/tray/tray_constants.h
+++ b/ash/system/tray/tray_constants.h
@@ -97,6 +97,9 @@
 // Threshold to ignore update on the slider value.
 constexpr float kAudioSliderIgnoreUpdateThreshold = 0.01;
 
+// Duration for the collapse / expand animation in ms.
+constexpr int kSystemMenuCollapseExpandAnimationDurationMs = 500;
+
 constexpr gfx::Insets kUnifiedMenuItemPadding(0, 16, 16, 16);
 constexpr gfx::Insets kUnifiedSystemInfoViewPadding(0, 16, 16, 16);
 constexpr gfx::Insets kUnifiedManagedDeviceViewPadding(4, 19, 4, 16);
diff --git a/ash/system/unified/unified_system_tray_controller.cc b/ash/system/unified/unified_system_tray_controller.cc
index fcdaa4f..3b5746e 100644
--- a/ash/system/unified/unified_system_tray_controller.cc
+++ b/ash/system/unified/unified_system_tray_controller.cc
@@ -50,6 +50,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/user_metrics.h"
 #include "base/numerics/ranges.h"
+#include "ui/compositor/animation_metrics_reporter.h"
 #include "ui/gfx/animation/slide_animation.h"
 #include "ui/message_center/message_center.h"
 #include "ui/views/widget/widget.h"
@@ -67,6 +68,33 @@
 void RecordPageSwitcherSourceByEventType(ui::EventType type,
                                          bool is_tablet_mode) {}
 
+class UnifiedSystemTrayController::SystemTrayTransitionAnimationMetricsReporter
+    : public ui::AnimationMetricsReporter {
+ public:
+  SystemTrayTransitionAnimationMetricsReporter() = default;
+  ~SystemTrayTransitionAnimationMetricsReporter() override = default;
+
+  void set_target_expanded_state(bool expanded) { target_expanded_ = expanded; }
+
+ private:
+  // ui:AnimationMetricsReporter
+  void Report(int value) override {
+    if (target_expanded_) {
+      UMA_HISTOGRAM_PERCENTAGE(
+          "ChromeOS.SystemTray.AnimationSmoothness."
+          "TransitionToExpanded",
+          value);
+    } else {
+      UMA_HISTOGRAM_PERCENTAGE(
+          "ChromeOS.SystemTray.AnimationSmoothness."
+          "TransitionToCollapsed",
+          value);
+    }
+  }
+
+  bool target_expanded_;
+};
+
 UnifiedSystemTrayController::UnifiedSystemTrayController(
     UnifiedSystemTrayModel* model,
     UnifiedSystemTrayBubble* bubble,
@@ -74,9 +102,12 @@
     : views::AnimationDelegateViews(owner_view),
       model_(model),
       bubble_(bubble),
-      animation_(std::make_unique<gfx::SlideAnimation>(this)) {
+      animation_(std::make_unique<gfx::SlideAnimation>(this)),
+      animation_metrics_reporter_(
+          std::make_unique<SystemTrayTransitionAnimationMetricsReporter>()) {
   animation_->Reset(model_->IsExpandedOnOpen() ? 1.0 : 0.0);
-  animation_->SetSlideDuration(base::TimeDelta::FromMilliseconds(500));
+  animation_->SetSlideDuration(base::TimeDelta::FromMilliseconds(
+      kSystemMenuCollapseExpandAnimationDurationMs));
   animation_->SetTweenType(gfx::Tween::EASE_IN_OUT);
 
   model_->pagination_model()->SetTransitionDurations(
@@ -91,6 +122,8 @@
   Shell::Get()->metrics()->RecordUserMetricsAction(UMA_STATUS_AREA_MENU_OPENED);
   UMA_HISTOGRAM_BOOLEAN("ChromeOS.SystemTray.IsExpandedOnOpen",
                         model_->IsExpandedOnOpen());
+
+  SetAnimationMetricsReporter(animation_metrics_reporter_.get());
 }
 
 UnifiedSystemTrayController::~UnifiedSystemTrayController() = default;
@@ -164,7 +197,7 @@
                             TOGGLE_EXPANDED_TYPE_BY_BUTTON,
                             TOGGLE_EXPANDED_TYPE_COUNT);
   if (IsExpanded()) {
-    animation_->Hide();
+    StartAnimation(false /*expand*/);
     // Expand message center when quick settings is collapsed.
     if (bubble_)
       bubble_->ExpandMessageCenter();
@@ -174,7 +207,7 @@
     if (IsMessageCenterCollapseRequired()) {
       bubble_->CollapseMessageCenter();
     }
-    animation_->Show();
+    StartAnimation(true /*expand*/);
   }
 }
 
@@ -209,6 +242,7 @@
 }
 
 void UnifiedSystemTrayController::StartAnimation(bool expand) {
+  animation_metrics_reporter_->set_target_expanded_state(expand);
   if (expand) {
     animation_->Show();
   } else {
@@ -350,7 +384,7 @@
     detailed_view_controller_.reset();
     unified_view_->ResetDetailedView();
   }
-  animation_->Show();
+  StartAnimation(true /*expand*/);
 
   if (IsMessageCenterCollapseRequired())
     bubble_->CollapseMessageCenter();
@@ -494,4 +528,10 @@
                          kMessageCenterCollapseThreshold);
 }
 
+base::TimeDelta UnifiedSystemTrayController::GetAnimationDurationForReporting()
+    const {
+  return base::TimeDelta::FromMilliseconds(
+      kSystemMenuCollapseExpandAnimationDurationMs);
+}
+
 }  // namespace ash
diff --git a/ash/system/unified/unified_system_tray_controller.h b/ash/system/unified/unified_system_tray_controller.h
index e81fc4c4..bdef0dd 100644
--- a/ash/system/unified/unified_system_tray_controller.h
+++ b/ash/system/unified/unified_system_tray_controller.h
@@ -142,6 +142,8 @@
   friend class UnifiedSystemTrayControllerTest;
   friend class UnifiedMessageCenterBubbleTest;
 
+  class SystemTrayTransitionAnimationMetricsReporter;
+
   // How the expanded state is toggled. The enum is used to back an UMA
   // histogram and should be treated as append-only.
   enum ToggleExpandedType {
@@ -184,6 +186,9 @@
   // Starts animation to expand or collapse the bubble.
   void StartAnimation(bool expand);
 
+  // views::AnimationDelegateViews:
+  base::TimeDelta GetAnimationDurationForReporting() const override;
+
   // Model that stores UI specific variables. Unowned.
   UnifiedSystemTrayModel* const model_;
 
@@ -220,6 +225,9 @@
   // Animation between expanded and collapsed states.
   std::unique_ptr<gfx::SlideAnimation> animation_;
 
+  std::unique_ptr<SystemTrayTransitionAnimationMetricsReporter>
+      animation_metrics_reporter_;
+
   DISALLOW_COPY_AND_ASSIGN(UnifiedSystemTrayController);
 };
 
diff --git a/ash/wm/workspace/workspace_window_resizer.cc b/ash/wm/workspace/workspace_window_resizer.cc
index 9652afe..ba72880 100644
--- a/ash/wm/workspace/workspace_window_resizer.cc
+++ b/ash/wm/workspace/workspace_window_resizer.cc
@@ -290,9 +290,15 @@
   if (window_state->drag_details())
     return nullptr;
 
-  // When running in single app mode, we should not create window resizer.
-  if (Shell::Get()->session_controller()->IsRunningInAppMode())
+  // When running in single app mode or not in an active user session, we
+  // should not create window resizer.
+  SessionControllerImpl* session_controller =
+      Shell::Get()->session_controller();
+  if (session_controller->IsRunningInAppMode() ||
+      session_controller->GetSessionState() !=
+          session_manager::SessionState::ACTIVE) {
     return nullptr;
+  }
 
   if (window_state->IsPip()) {
     window_state->CreateDragDetails(point_in_parent, window_component, source);
diff --git a/ash/wm/workspace/workspace_window_resizer_unittest.cc b/ash/wm/workspace/workspace_window_resizer_unittest.cc
index 654a3b2..045ed0b0 100644
--- a/ash/wm/workspace/workspace_window_resizer_unittest.cc
+++ b/ash/wm/workspace/workspace_window_resizer_unittest.cc
@@ -1951,4 +1951,22 @@
   EXPECT_FALSE(CreateResizerForTest(window_.get(), gfx::Point(), HTCAPTION));
 }
 
+TEST_F(WorkspaceWindowResizerTest, DoNotCreateResizerIfNotActiveSession) {
+  GetSessionControllerClient()->SetSessionState(
+      session_manager::SessionState::OOBE);
+  EXPECT_FALSE(CreateResizerForTest(window_.get(), gfx::Point(), HTCAPTION));
+
+  GetSessionControllerClient()->SetSessionState(
+      session_manager::SessionState::LOCKED);
+  EXPECT_FALSE(CreateResizerForTest(window_.get(), gfx::Point(), HTCAPTION));
+
+  GetSessionControllerClient()->SetSessionState(
+      session_manager::SessionState::LOGIN_PRIMARY);
+  EXPECT_FALSE(CreateResizerForTest(window_.get(), gfx::Point(), HTCAPTION));
+
+  GetSessionControllerClient()->SetSessionState(
+      session_manager::SessionState::ACTIVE);
+  EXPECT_TRUE(CreateResizerForTest(window_.get(), gfx::Point(), HTCAPTION));
+}
+
 }  // namespace ash
diff --git a/build/android/pylib/gtest/filter/content_browsertests_disabled b/build/android/pylib/gtest/filter/content_browsertests_disabled
index 8ec9834..9c89121 100644
--- a/build/android/pylib/gtest/filter/content_browsertests_disabled
+++ b/build/android/pylib/gtest/filter/content_browsertests_disabled
@@ -15,14 +15,6 @@
 CrossPlatformAccessibilityBrowserTest.SelectedEditableTextAccessibility
 
 # http://crbug.com/297230
-*/DumpAccessibilityTreeTest.AccessibilityAriaLevel/*
-*/DumpAccessibilityTreeTest.AccessibilityAriaProgressbar/*
-*/DumpAccessibilityTreeTest.AccessibilityListMarkers/*
-*/DumpAccessibilityTreeTest.AccessibilityUl/*
-*/DumpAccessibilityTreeTest.AccessibilityCanvas/*
-*/DumpAccessibilityTreeTest.AccessibilityDialog/*
-*/DumpAccessibilityTreeTest.AccessibilityModalDialogClosed/*
-*/DumpAccessibilityTreeTest.AccessibilityModalDialogInIframeOpened/*
 RenderAccessibilityImplTest.DetachAccessibilityObject
 
 # http://crbug.com/187500
diff --git a/build/cipd/cipd.gni b/build/cipd/cipd.gni
index 1e68f93c..4ea00ac0 100644
--- a/build/cipd/cipd.gni
+++ b/build/cipd/cipd.gni
@@ -4,12 +4,12 @@
 
 # Build targets for constructing CIPD packages.
 #
-# Prepares a CIPD archive and generates a manifest file.
+# Prepares a CIPD package and generates a package definition.
 #
 # TODO(crbug.com/1042819): Add support for including directories.
 #
 # Parameters:
-#   package_definition_yaml: CIPD package definition filename. "cipd.yaml"
+#   package_definition_name: CIPD package definition filename. "cipd.yaml"
 #                            if unspecified.
 #   package: The path where the package will be located inside the CIPD
 #            repository.
@@ -47,27 +47,33 @@
   assert(_install_mode == "copy" || _install_mode == "symlink",
          "\"install_mode\" arg should be either \"copy\" or \"symlink\".")
 
-  _cipd_definition_yaml = "cipd.yaml"
-  if (defined(invoker.package_definition_yaml)) {
-    _cipd_definition_yaml = invoker.package_definition_yaml
+  _package_definition_name = "cipd.yaml"
+  if (defined(invoker.package_definition_name)) {
+    _package_definition_name = invoker.package_definition_name
   }
 
-  _package_staging_dir = "${target_gen_dir}/${target_name}"
+  _package_root = "${target_gen_dir}/${target_name}"
 
-  _yaml_contents = [
-    "package: ${invoker.package}",
-    "description: ${invoker.description}",
-    "root: \${outdir}/" + rebase_path(_package_staging_dir, root_build_dir),
-    "install_mode: ${_install_mode}",
-    "data:",
-  ]
-  foreach(source, sources) {
-    _yaml_contents += [ "  - file: " + get_path_info(source, "file") ]
-  }
+  action(target_name) {
+    script = "//build/cipd/prepare_cipd_package_definition.py"
+    depfile = "$target_gen_dir/$target_name.d"
+    _definition_path = "${_package_root}/${_package_definition_name}"
+    outputs = [ _definition_path ]
 
-  write_file("${_package_staging_dir}/${_cipd_definition_yaml}", _yaml_contents)
-
-  copy(target_name) {
-    outputs = [ "${_package_staging_dir}/{{source_file_part}}" ]
+    args = [
+      "--pkg-name",
+      invoker.package,
+      "--description",
+      invoker.description,
+      "--pkg-root",
+      rebase_path(_package_root, root_build_dir),
+      "--install-mode",
+      _install_mode,
+      "--pkg-def",
+      rebase_path(_definition_path, root_build_dir),
+      "--depfile",
+      rebase_path(depfile, root_build_dir),
+    ]
+    args += [ "--copy-files" ] + rebase_path(sources, root_build_dir)
   }
 }
diff --git a/build/cipd/prepare_cipd_package_definition.py b/build/cipd/prepare_cipd_package_definition.py
new file mode 100755
index 0000000..d02f944
--- /dev/null
+++ b/build/cipd/prepare_cipd_package_definition.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+#
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Prepares a directory and a corresponding package definition which can be
+used to create a CIPD package."""
+
+import argparse
+import errno
+import os
+import sys
+import yaml
+
+
+def main(args):
+  parser = argparse.ArgumentParser()
+  parser.add_argument('--pkg-name',
+                      type=str,
+                      required=True,
+                      help='Name of the CIPD package.')
+  parser.add_argument('--description',
+                      type=str,
+                      required=True,
+                      help='Description of the CIPD package.')
+  parser.add_argument('--pkg-root',
+                      type=str,
+                      required=True,
+                      help='Path to the package root.')
+  parser.add_argument('--install-mode',
+                      type=str,
+                      choices=['copy', 'symlink'],
+                      required=True,
+                      help='CIPD install mode.')
+  parser.add_argument('--pkg-def',
+                      type=str,
+                      required=True,
+                      help='Path to the output package definition.')
+  parser.add_argument('--depfile',
+                      type=str,
+                      required=True,
+                      help='Path to the depfile.')
+  parser.add_argument('--copy-files',
+                      nargs='+',
+                      help='Files to be copied into --pkg-root and included '
+                      'in the package definition.')
+  args = parser.parse_args(args)
+
+  pkg_def = {
+      'package': args.pkg_name,
+      'description': args.description,
+      'root': '${outdir}/%s' % os.path.join(args.pkg_root),
+      'install_mode': args.install_mode,
+      'data': [],
+  }
+
+  deps = set()
+  # Copy files into the root.
+  for filepath in args.copy_files:
+    basename = os.path.basename(filepath)
+    dest = os.path.join(args.pkg_root, basename)
+    try:
+      os.link(filepath, dest)
+    except OSError as e:
+      if e.errno != errno.EEXIST:
+        raise
+    pkg_def['data'].append({'file': basename})
+    deps.add(dest)
+
+  with open(args.pkg_def, 'w') as f:
+    yaml.dump(pkg_def, f)
+  with open(args.depfile, 'w') as f:
+    f.writelines('%s: %s\n' % (args.pkg_def, ' '.join(sorted(deps))))
+
+  return 0
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv[1:]))
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 66b7d09..94a39dc 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-0.20200410.2.2
\ No newline at end of file
+0.20200412.2.1
\ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index 66b7d09..94a39dc 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-0.20200410.2.2
\ No newline at end of file
+0.20200412.2.1
\ No newline at end of file
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
index 8ec008c..d12f4459 100644
--- a/cc/scheduler/scheduler.cc
+++ b/cc/scheduler/scheduler.cc
@@ -583,7 +583,9 @@
   // ensures that the acks are sent in order.
   if (!state_machine_.did_submit_in_last_frame()) {
     SendDidNotProduceFrame(begin_impl_frame_tracker_.Current(),
-                           FrameSkippedReason::kWaitingOnMain);
+                           state_machine_.draw_succeeded_in_last_frame()
+                               ? FrameSkippedReason::kNoDamage
+                               : FrameSkippedReason::kWaitingOnMain);
   }
 
   begin_impl_frame_tracker_.Finish();
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index 908c595..71efc02 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -266,7 +266,7 @@
   minor_state->set_video_needs_begin_frames(video_needs_begin_frames_);
   minor_state->set_defer_begin_main_frame(defer_begin_main_frame_);
   minor_state->set_last_commit_had_no_updates(last_commit_had_no_updates_);
-  minor_state->set_did_draw_in_last_frame(did_draw_in_last_frame_);
+  minor_state->set_did_draw_in_last_frame(did_attempt_draw_in_last_frame_);
   minor_state->set_did_submit_in_last_frame(did_submit_in_last_frame_);
   minor_state->set_needs_impl_side_invalidation(needs_impl_side_invalidation_);
   minor_state->set_current_pending_tree_is_impl_side(
@@ -981,10 +981,11 @@
   // Set this to true to proactively request a new BeginFrame. We can't set this
   // in WillDrawInternal because AbortDraw calls WillDrawInternal but shouldn't
   // request another frame.
-  did_draw_in_last_frame_ = true;
+  did_attempt_draw_in_last_frame_ = true;
 }
 
 void SchedulerStateMachine::DidDraw(DrawResult draw_result) {
+  draw_succeeded_in_last_frame_ = draw_result == DRAW_SUCCESS;
   DidDrawInternal(draw_result);
 }
 
@@ -1126,7 +1127,7 @@
   // frame soon. This helps avoid negative glitches in our SetNeedsBeginFrame
   // requests, which may propagate to the BeginImplFrame provider and get
   // sampled at an inopportune time, delaying the next BeginImplFrame.
-  if (did_draw_in_last_frame_)
+  if (did_attempt_draw_in_last_frame_)
     return true;
 
   // If the last commit was aborted because of early out (no updates), we should
@@ -1154,7 +1155,8 @@
   last_frame_events_.did_commit_during_frame = did_commit_during_frame_;
 
   last_commit_had_no_updates_ = false;
-  did_draw_in_last_frame_ = false;
+  did_attempt_draw_in_last_frame_ = false;
+  draw_succeeded_in_last_frame_ = false;
   did_submit_in_last_frame_ = false;
   needs_one_begin_impl_frame_ = false;
 
diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h
index 25b6b5f8..f6a8d0a3 100644
--- a/cc/scheduler/scheduler_state_machine.h
+++ b/cc/scheduler/scheduler_state_machine.h
@@ -323,6 +323,9 @@
   bool video_needs_begin_frames() const { return video_needs_begin_frames_; }
 
   bool did_submit_in_last_frame() const { return did_submit_in_last_frame_; }
+  bool draw_succeeded_in_last_frame() const {
+    return draw_succeeded_in_last_frame_;
+  }
 
   bool needs_impl_side_invalidation() const {
     return needs_impl_side_invalidation_;
@@ -450,7 +453,8 @@
   bool video_needs_begin_frames_ = false;
   bool last_commit_had_no_updates_ = false;
   bool active_tree_is_ready_to_draw_ = true;
-  bool did_draw_in_last_frame_ = false;
+  bool did_attempt_draw_in_last_frame_ = false;
+  bool draw_succeeded_in_last_frame_ = false;
   bool did_submit_in_last_frame_ = false;
   bool needs_impl_side_invalidation_ = false;
   bool next_invalidation_needs_first_draw_on_activation_ = false;
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
index 6f324622..fdf661e0 100644
--- a/cc/scheduler/scheduler_unittest.cc
+++ b/cc/scheduler/scheduler_unittest.cc
@@ -60,6 +60,7 @@
     num_draws_ = 0;
     last_begin_main_frame_args_ = viz::BeginFrameArgs();
     last_begin_frame_ack_ = viz::BeginFrameAck();
+    last_frame_skipped_reason_.reset();
   }
 
   void set_scheduler(TestScheduler* scheduler) { scheduler_ = scheduler; }
@@ -130,6 +131,7 @@
     EXPECT_FALSE(inside_action_);
     base::AutoReset<bool> mark_inside(&inside_action_, true);
     last_begin_frame_ack_ = ack;
+    last_frame_skipped_reason_ = reason;
   }
 
   void WillNotReceiveBeginFrame() override {}
@@ -153,23 +155,26 @@
     return last_begin_frame_ack_;
   }
 
+  FrameSkippedReason last_frame_skipped_reason() const {
+    return last_frame_skipped_reason_.value();
+  }
+
   DrawResult ScheduledActionDrawIfPossible() override {
     EXPECT_FALSE(inside_action_);
     base::AutoReset<bool> mark_inside(&inside_action_, true);
     PushAction("ScheduledActionDrawIfPossible");
     num_draws_++;
-    DrawResult result =
-        draw_will_happen_ ? DRAW_SUCCESS : DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
-    bool swap_will_happen =
-        draw_will_happen_ && swap_will_happen_if_draw_happens_;
-    if (swap_will_happen) {
+    if (!draw_will_happen_)
+      return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
+
+    if (swap_will_happen_if_draw_happens_) {
       last_begin_frame_ack_ = scheduler_->CurrentBeginFrameAckForActiveTree();
       scheduler_->DidSubmitCompositorFrame(0, EventMetricsSet());
 
       if (automatic_ack_)
         scheduler_->DidReceiveCompositorFrameAck();
     }
-    return result;
+    return DRAW_SUCCESS;
   }
   DrawResult ScheduledActionDrawForced() override {
     EXPECT_FALSE(inside_action_);
@@ -283,6 +288,7 @@
   std::vector<const char*> actions_;
   TestScheduler* scheduler_ = nullptr;
   base::TimeDelta frame_interval_;
+  base::Optional<FrameSkippedReason> last_frame_skipped_reason_;
 };
 
 enum BeginFrameSourceType {
@@ -1813,6 +1819,8 @@
     EXPECT_NO_ACTION();
     EXPECT_FALSE(client_->IsInsideBeginImplFrame());
     EXPECT_FALSE(scheduler_->MainThreadMissedLastDeadline());
+    EXPECT_EQ(FrameSkippedReason::kRecoverLatency,
+              client_->last_frame_skipped_reason());
 
     // Verify that we do not perform any actions after we are no longer
     // swap throttled.
@@ -1939,6 +1947,8 @@
     EXPECT_NO_ACTION();
     EXPECT_FALSE(client_->IsInsideBeginImplFrame());
     EXPECT_FALSE(scheduler_->MainThreadMissedLastDeadline());
+    EXPECT_EQ(FrameSkippedReason::kRecoverLatency,
+              client_->last_frame_skipped_reason());
 
     // Verify that we do not perform any actions after we are no longer
     // swap throttled.
@@ -3850,7 +3860,26 @@
   has_damage = false;
   EXPECT_EQ(viz::BeginFrameAck(args, has_damage),
             client_->last_begin_frame_ack());
+  EXPECT_EQ(FrameSkippedReason::kWaitingOnMain,
+            client_->last_frame_skipped_reason());
   client_->Reset();
+
+  // Draw succeeds, but 'swap' does not happen (i.e. no frame is submitted).
+  args = SendNextBeginFrame();
+  EXPECT_ACTIONS("WillBeginImplFrame");
+  EXPECT_TRUE(client_->IsInsideBeginImplFrame());
+  EXPECT_TRUE(scheduler_->begin_frames_expected());
+  client_->Reset();
+  client_->SetDrawWillHappen(true);
+  client_->SetSwapWillHappenIfDrawHappens(false);
+  task_runner_->RunPendingTasks();  // Run posted deadline.
+
+  // Draw with no damage.
+  has_damage = false;
+  EXPECT_EQ(viz::BeginFrameAck(args, has_damage),
+            client_->last_begin_frame_ack());
+  EXPECT_EQ(FrameSkippedReason::kNoDamage,
+            client_->last_frame_skipped_reason());
 }
 
 TEST_F(SchedulerTest, BeginFrameAckForSkippedImplFrame) {
diff --git a/chrome/VERSION b/chrome/VERSION
index 7931519..d8175a70 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=84
 MINOR=0
-BUILD=4111
+BUILD=4114
 PATCH=0
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index 9bcaeb0..282b66f3 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-84.0.4109.0_rc-r1-merged.afdo.bz2
\ No newline at end of file
+chromeos-chrome-amd64-84.0.4111.0_rc-r1-merged.afdo.bz2
\ No newline at end of file
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd
index 9c44b2c3..6a084749 100644
--- a/chrome/app/chromium_strings.grd
+++ b/chrome/app/chromium_strings.grd
@@ -344,7 +344,7 @@
       </message>
       <if expr="chromeos">
         <message name="IDS_EULA_CHECKBOX_ENABLE_LOGGING" desc="The label of the checkbox to enable/disable crash and user metrics logging">
-          Optional: Help make Chromium better by automatically sending usage statistics and crash reports to Google.
+          Optional: Help improve Chromium OS features and performance by automatically sending diagnostic and usage data to Google.
         </message>
       </if>
       <message name="IDS_PROFILE_TOO_NEW_ERROR" desc="Error displayed on startup when the profile is from a newer version of the product and can not be read">
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd
index 3ba868c..8d4045f 100644
--- a/chrome/app/google_chrome_strings.grd
+++ b/chrome/app/google_chrome_strings.grd
@@ -355,7 +355,7 @@
       </message>
       <if expr="chromeos">
         <message name="IDS_EULA_CHECKBOX_ENABLE_LOGGING" desc="The label of the checkbox to enable/disable crash and user metrics logging on EULA screen.">
-          Optional: Help make Chrome OS better by automatically sending diagnostic and usage data to Google.
+          Optional: Help improve Chrome OS features and performance by automatically sending diagnostic and usage data to Google.
         </message>
       </if>
       <message name="IDS_PROFILE_TOO_NEW_ERROR" desc="Error displayed on startup when the profile is from a newer version of the product and can not be read">
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp
index 50731ea8..ea4953b 100644
--- a/chrome/app/os_settings_strings.grdp
+++ b/chrome/app/os_settings_strings.grdp
@@ -2659,5 +2659,19 @@
   <message name="IDS_SETTINGS_STORAGE_ITEM_SYSTEM" desc="In Device Settings > Storage, label for the total system size, difference between the size of the filesystem and the size of all items listed on the storage page.">
     System
   </message>
+
+  <!-- Privacy Page -->
+  <message name="IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE" desc="The label of the checkbox to enable/disable crash and user metrics logging in Chrome OS.">
+    Help improve Chrome OS features and performance
+  </message>
+  <message name="IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESC" desc="The description of the checkbox to enable/disable crash and user metrics logging in Chrome OS.">
+    Automatically sends diagnostic and usage data to Google
+  </message>
+  <message name="IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION" desc="description label for verified access about premium contents">
+    Enable Verified Access
+  </message>
+  <message name="IDS_SETTINGS_WAKE_ON_WIFI_DESCRIPTION" desc="In the settings tab, the text next to the checkbox for enabling quickly reconnecting to known Wi-Fi SSIDs.">
+    Keep Wi-Fi on during sleep
+  </message>
 </if>
 </grit-part>
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION.png.sha1
new file mode 100644
index 0000000..9f010e9
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION.png.sha1
@@ -0,0 +1 @@
+67463ff9cd3e69a7b5632059add91ba5b73d29f6
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESC.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESC.png.sha1
new file mode 100644
index 0000000..9f010e9
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESC.png.sha1
@@ -0,0 +1 @@
+67463ff9cd3e69a7b5632059add91ba5b73d29f6
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE.png.sha1
new file mode 100644
index 0000000..9f010e9
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE.png.sha1
@@ -0,0 +1 @@
+67463ff9cd3e69a7b5632059add91ba5b73d29f6
\ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_WAKE_ON_WIFI_DESCRIPTION.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_WAKE_ON_WIFI_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..9f010e9
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_WAKE_ON_WIFI_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+67463ff9cd3e69a7b5632059add91ba5b73d29f6
\ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_af.xtb b/chrome/app/resources/chromium_strings_af.xtb
index 7b213ab3..db56d115 100644
--- a/chrome/app/resources/chromium_strings_af.xtb
+++ b/chrome/app/resources/chromium_strings_af.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Meer oor Chromium</translation>
 <translation id="2977470724722393594">Chromium is op datum</translation>
 <translation id="2983934633046890458">Chromium probeer tans wagwoorde wysig.</translation>
+<translation id="3032706164202344641">Chromium kan nie jou wagwoorde nagaan nie. Probeer later weer.</translation>
 <translation id="3032787606318309379">Voeg tans by Chromium …</translation>
 <translation id="3068515742935458733">Help om Chromium beter te maak deur omvalverslae en <ph name="UMA_LINK" /> na Google te stuur</translation>
 <translation id="3103660991484857065">Die installeerder kon nie die argief se saampersing omkeer nie. Laai Chromium asseblief weer af.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium-logo</translation>
 <translation id="3639635944603682591">Hierdie persoon se blaaierdata sal van hierdie toestel af uitgevee word. Meld as <ph name="USER_EMAIL" /> by Chromium aan om die data te herwin.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{'n Nuwe opdatering vir Chromium is beskikbaar en sal toegepas word sodra jy herbegin.}=1{'n Nuwe opdatering vir Chromium is beskikbaar en sal toegepas word sodra jy herbegin. Jou incognitovenster sal nie weer oopgemaak word nie.}other{'n Nuwe opdatering vir Chromium is beskikbaar en sal toegepas word sodra jy herbegin. Jou # incognitovensters sal nie weer oopgemaak word nie.}}</translation>
+<translation id="3685209450716071127">Chromium kan nie jou wagwoorde nagaan nie. Probeer om jou internetverbinding na te gaan.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Jou administrateur vra dat jy Chromium herbegin om hierdie opdatering toe te pas}=1{Jou administrateur vra dat jy Chromium herbegin om hierdie opdatering toe te pas. Jou incognitovenster sal nie weer oopgemaak word nie.}other{Jou administrateur vra dat jy Chromium herbegin om hierdie opdatering toe te pas. Jou # incognitovensters sal nie weer oopgemaak word nie.}}</translation>
 <translation id="3713809861844741608">Maak skakel in 'n nuwe Chromium-oortjie oop</translation>
 <translation id="3728336900324680424">Chromium sal by jou Drive ingaan om voorstelle in die adresbalk te maak</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Herbegin Chromium binne 'n dag}other{Herbegin Chromium binne # dae}}</translation>
 <translation id="8453117565092476964">Die installeerderargief is korrup of ongeldig. Laai Chromium asseblief weer af.</translation>
 <translation id="8493179195440786826">Chromium is verouderd</translation>
+<translation id="8568283329061645092">Chromium kan jou wagwoorde nagaan as jy met jou Google-rekening aanmeld</translation>
 <translation id="8586442755830160949">Kopiereg <ph name="YEAR" /> Die Chromium-outeurs. Alle regte voorbehou.</translation>
 <translation id="8619360774459241877">Begin tans Chromium …</translation>
 <translation id="8621669128220841554">Kon weens 'n ongespesifiseerde fout nie installeer nie. Laai Chromium asseblief weer af.</translation>
diff --git a/chrome/app/resources/chromium_strings_am.xtb b/chrome/app/resources/chromium_strings_am.xtb
index a4350db0..543d07b 100644
--- a/chrome/app/resources/chromium_strings_am.xtb
+++ b/chrome/app/resources/chromium_strings_am.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">ስለ &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium የተዘመነ ነው</translation>
 <translation id="2983934633046890458">Chromium የይለፍ ቃላትን ለማርትዕ እየሞከረ ነው</translation>
+<translation id="3032706164202344641">Chromium የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። ቆይተው እንደገና ይሞክሩ።</translation>
 <translation id="3032787606318309379">ወደ Chromium በማከል ላይ...</translation>
 <translation id="3068515742935458733">የብልሽት ሪፖርቶችን እና <ph name="UMA_LINK" /> ወደ Google በመላክ Chromiumን የተሻለ ለማድረግ እገዛ ያድርጉ</translation>
 <translation id="3103660991484857065">ጫኚው መዝገቡን መበተን አልቻለም። እባክዎ Chromiumን እንደገና ያውርዱት።</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">የChromium አርማ</translation>
 <translation id="3639635944603682591">ይህ ሰው የአሰሳ ውሂብ ከዚህ መሣሪያ ይሰረዛል። ውሂቡን መልሶ ለማግኘት እንደ <ph name="USER_EMAIL" /> ሆነው ወደ Chromium ይግቡ።</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{አዲስ ዝማኔ ለChromium የሚገኝ ሲሆን ልክ ዳግም ሲያስጀምሩት ይተገበራል።}=1{አዲስ ዝማኔ ለChromium የሚገኝ ሲሆን ልክ ዳግም ሲያስጀምሩት ይተገበራል። የእርስዎ ማንነት የማያሳውቅ መስኮት ዳግም አይከፈትም}one{አዲስ ዝማኔ ለChromium የሚገኝ ሲሆን ልክ ዳግም ሲያስጀምሩት ይተገበራል። የእርስዎ # ማንነት የማያሳውቁ መስኮቶች ዳግም አይከፈቱም}other{አዲስ ዝማኔ ለChromium የሚገኝ ሲሆን ልክ ዳግም ሲያስጀምሩት ይተገበራል። የእርስዎ # ማንነት የማያሳውቁ መስኮቶች ዳግም አይከፈቱም}}</translation>
+<translation id="3685209450716071127">Chromium የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። የበይነመረብ ግንኙነትዎን ለመፈተሽ ይሞክሩ።</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ይህን ዝማኔ ለመተግበር አስተዳዳሪዎ Chromiumን ዳግም እንዲያስጀምሩት ይጠይቀዎታል}=1{ይህን ዝማኔ ለመተግበር አስተዳዳሪዎ Chromiumን ዳግም እንዲያስጀምሩት ይጠይቀዎታል የእርስዎ ማንነት የማያሳውቅ መስኮት ዳግም አይከፈትም}one{ይህን ዝማኔ ለመተግበር አስተዳዳሪዎ Chromiumን ዳግም እንዲያስጀምሩት ይጠይቀዎታል የእርስዎ # ማንነት የማያሳውቁ መስኮቶች ዳግም አይከፈቱም}other{ይህን ዝማኔ ለመተግበር አስተዳዳሪዎ Chromiumን ዳግም እንዲያስጀምሩት ይጠይቀዎታል የእርስዎ # ማንነት የማያሳውቁ መስኮቶች ዳግም አይከፈቱም}}</translation>
 <translation id="3713809861844741608">አገናኙን በChromium አዲስ &amp;ትር ውስጥ ክፈት</translation>
 <translation id="3728336900324680424">Chromium የእርስዎን Drive በአድራሻ አሞሌ ውስጥ ጥቆማ ሐሳቦችን ይደርሳል።</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{በአንድ ቀን ውስጥ Chromiumን ዳግም አስጀምር}one{በ# ቀኖች ውስጥ Chromiumን ዳግም አስጀምር}other{በ# ቀኖች ውስጥ Chromiumን ዳግም አስጀምር}}</translation>
 <translation id="8453117565092476964">የጫኚው መዝገብ ተበላሽቷል ወይም ትክክል አይደለም። እባክዎ Chromiumን እንደገና ያውርዱ።</translation>
 <translation id="8493179195440786826">Chromium ጊዜው አልፎበታል</translation>
+<translation id="8568283329061645092">Chromium በእርስዎ የGoogle መለያ በሚገቡበት ጊዜ የእርስዎን የይለፍ ቃላትን ሊፈትሽ ይችላል</translation>
 <translation id="8586442755830160949">የቅጂ መብት <ph name="YEAR" /> የChromium ደራሲያን። ሁሉም መብቶች የተጠበቁ ናቸው።</translation>
 <translation id="8619360774459241877">Chromiumን በማስጀመር ላይ...</translation>
 <translation id="8621669128220841554">ተለይቶ ባልታወቀ ስህተት ምክንያት ጭነት ከሽፏል። እባክዎ Chromiumን እንደገና ያውርዱ።</translation>
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb
index 1114b64e..78dea9ec 100644
--- a/chrome/app/resources/chromium_strings_ar.xtb
+++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">‏حو&amp;ل Chromium</translation>
 <translation id="2977470724722393594">‏Chromium محدّث</translation>
 <translation id="2983934633046890458">‏يحاول Chromium تعديل كلمات المرور.</translation>
+<translation id="3032706164202344641">‏يتعذّر على Chromium التحقّق من كلمات المرور. يُرجى إعادة المحاولة.</translation>
 <translation id="3032787606318309379">‏جارٍ الإضافة إلى Chromium...</translation>
 <translation id="3068515742935458733">‏يمكنك المساعدة في تحسين Chromium عن طريق إرسال تقارير الأعطال و<ph name="UMA_LINK" /> إلى Google</translation>
 <translation id="3103660991484857065">‏تعذّرت أداة التثبيت في فك ضغط الأرشيف. يُرجى إعادة تنزيل Chromium.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">‏شعار Chromium</translation>
 <translation id="3639635944603682591">‏ستُحذَف بيانات تصفُّح هذا المستخدم من هذا الجهاز. ولاسترداد البيانات، سجّل الدخول إلى Chromium بصفتك <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{‏يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل.}=1{‏يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل. لن تتم إعادة فتح نافذة التصفح المتخفي.}two{‏يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل. لن تتم إعادة فتح نافذتَي التصفح المتخفي.}few{‏يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}many{‏يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}other{‏يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}}</translation>
+<translation id="3685209450716071127">‏يتعذّر على Chromium التحقّق من كلمات المرور. يُرجى التحقّق من اتصال الإنترنت.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{‏يطلب المشرف إعادة تشغيل Chromium لتطبيق هذا التحديث.}=1{‏يطلب المشرف إعادة تشغيل Chromium لتطبيق هذا التحديث. لن تتم إعادة فتح نافذة التصفح المتخفي.}two{‏يطلب المشرف إعادة تشغيل Chromium لتطبيق هذا التحديث. لن تتم إعادة فتح نافذتَي التصفح المتخفي.}few{‏يطلب المشرف إعادة تشغيل Chromium لتطبيق هذا التحديث. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}many{‏يطلب المشرف إعادة تشغيل Chromium لتطبيق هذا التحديث. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}other{‏يطلب المشرف إعادة تشغيل Chromium لتطبيق هذا التحديث. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}}</translation>
 <translation id="3713809861844741608">‏فتح الرابط في علامة تبويب جديدة في Chromium</translation>
 <translation id="3728336900324680424">‏سيصل Chromium إلى Drive لإنشاء الاقتراحات في شريط العناوين.</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{‏يجب إعادة تشغيل Chromium في غضون يوم واحد}zero{‏يجب إعادة تشغيل Chromium في غضون # يوم}two{‏يجب إعادة تشغيل Chromium في غضون يومين}few{‏يجب إعادة تشغيل Chromium في غضون # أيام}many{‏يجب إعادة تشغيل Chromium في غضون # يومًا}other{‏يجب إعادة تشغيل Chromium في غضون # يوم}}</translation>
 <translation id="8453117565092476964">‏أرشيف أداة التثبيت تالف أو غير صالح. يُرجى إعادة تنزيل Chromium.</translation>
 <translation id="8493179195440786826">‏إصدار Chromium قديم</translation>
+<translation id="8568283329061645092">‏لا يستطيع Chromium التحقّق من كلمات المرور إلا عند تسجيل الدخول باستخدام حسابك على Google.</translation>
 <translation id="8586442755830160949">‏حقوق الطبع والنشر لعام <ph name="YEAR" /> لصالح The Chromium Authors. جميع الحقوق محفوظة.</translation>
 <translation id="8619360774459241877">‏جارٍ إطلاق Chromium...</translation>
 <translation id="8621669128220841554">‏تعذّر التثبيت نظرًا لحدوث خطأ غير محدد. يُرجى إعادة تنزيل Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_as.xtb b/chrome/app/resources/chromium_strings_as.xtb
index 502bdfb..99fa31c8 100644
--- a/chrome/app/resources/chromium_strings_as.xtb
+++ b/chrome/app/resources/chromium_strings_as.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;Chromiumৰ বিষয়ে</translation>
 <translation id="2977470724722393594">Chromium একেবাৰে শেহতীয়া অৱস্থাত আছে</translation>
 <translation id="2983934633046890458">Chromiumএ পাছৱর্ডসমূহ সম্পাদনা কৰিবলৈ চেষ্টা কৰি আছে।</translation>
+<translation id="3032706164202344641">Chromiumএ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰে। পাছত আকৌ চেষ্টা কৰক।</translation>
 <translation id="3032787606318309379">Chromiumত যোগ কৰি থকা হৈছে...</translation>
 <translation id="3068515742935458733">Googleলৈ ক্ৰেশ্ব ৰিপ‘ৰ্ট আৰু <ph name="UMA_LINK" /> পঠিয়াই Chromiumক উন্নত কৰাত সহায় কৰক</translation>
 <translation id="3103660991484857065">ইনষ্টলাৰে আৰ্কাইভক সংকোচনহীন কৰিব নোৱাৰিলে৷ অনুগ্ৰহ কৰি পুনৰ Chromium ডাউনল’ড কৰক৷</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromiumৰ ল’গ’</translation>
 <translation id="3639635944603682591">এই ডিভাইচটোৰ পৰা এই লোকজনৰ ব্ৰাউজিঙৰ ডেটা মচা যাব। ডেটা পুনৰুদ্ধাৰ কৰিবলৈ Chromiumত <ph name="USER_EMAIL" /> হিচাপে ছাইন ইন কৰক।</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromiumৰ এটা নতুন আপডে’ট আহিছে আৰু আপুনি Chromium পুনৰ লঞ্চ কৰিলেই সেইটো প্ৰযোজ্য হ’ব।}=1{Chromiumৰ এটা নতুন আপডে’ট আহিছে আৰু আপুনি Chromium পুনৰ লঞ্চ কৰিলেই সেইটো প্ৰযোজ্য হ’ব। আপোনাৰ.ইনক’গনিট' ৱিণ্ড'খন পুনৰ খুলিব নোৱাৰিব।}one{Chromiumৰ এটা নতুন আপডে’ট আহিছে আৰু আপুনি Chromium পুনৰ লঞ্চ কৰিলেই সেইটো প্ৰযোজ্য হ’ব। আপোনাৰ #খন.ইনক’গনিট' ৱিণ্ড' পুনৰ খুলিব নোৱাৰিব।}other{Chromiumৰ এটা নতুন আপডে’ট আহিছে আৰু আপুনি Chromium পুনৰ লঞ্চ কৰিলেই সেইটো প্ৰযোজ্য হ’ব। আপোনাৰ #খন.ইনক’গনিট' ৱিণ্ড' পুনৰ খুলিব নোৱাৰিব।}}</translation>
+<translation id="3685209450716071127">Chromiumএ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰে। আপোনাৰ ইণ্টাৰনেট সংযোগ পৰীক্ষা কৰি চাওক।</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{আপোনাৰ প্ৰশাসকে আপোনাক এই আপডে’টটো প্ৰযোজ্য কৰিবলৈ আপোনাক Chromium পুনৰ লঞ্চ কৰিবলৈ কৈছে}=1{আপোনাৰ প্ৰশাসকে এই আপডে’টটো প্ৰযোজ্য কৰিবলৈ আপোনাক Chromium পুনৰ লঞ্চ কৰিবলৈ কৈছে। আপোনাৰ.ইনক’গনিট' ৱিণ্ড'খন পুনৰ খুলিব নোৱাৰিব।}one{আপোনাৰ প্ৰশাসকে এই আপডে’টটো প্ৰযোজ্য কৰিবলৈ আপোনাক Chromium পুনৰ লঞ্চ কৰিবলৈ কৈছে। আপোনাৰ #খন.ইনক’গনিট' ৱিণ্ড' পুনৰ খুলিব নোৱাৰিব।}other{আপোনাৰ প্ৰশাসকে এই আপডে’টটো প্ৰযোজ্য কৰিবলৈ আপোনাক Chromium পুনৰ লঞ্চ কৰিবলৈ কৈছে। আপোনাৰ #খন.ইনক’গনিট' ৱিণ্ড' পুনৰ খুলিব নোৱাৰিব।}}</translation>
 <translation id="3713809861844741608">Chromiumৰ নতুন &amp;টেবত লিংক খোলক</translation>
 <translation id="3728336900324680424">Chromiumএ ঠিকনা বাৰত পৰামর্শ দিবলৈ আপোনাৰ Driveত এক্সেছ কৰিব</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{এদিনৰ ভিতৰত Chromium পুনৰ লঞ্চ কৰক}one{# দিনৰ ভিতৰত Chromium পুনৰ লঞ্চ কৰক}other{# দিনৰ ভিতৰত Chromium পুনৰ লঞ্চ কৰক}}</translation>
 <translation id="8453117565092476964">ইনষ্টলাৰ আৰ্কাইভটো ব্যৱহাৰযোগ্য নহয় বা অমান্য। অনুগ্ৰহ কৰি Chromium আকৌ ডাউনল’ড কৰক।</translation>
 <translation id="8493179195440786826">Chromiumটো অতি পুৰণি</translation>
+<translation id="8568283329061645092">আপুনি নিজৰ Google একাউণ্টটোৰ জৰিয়তে ছাইন ইন কৰোঁতে Chromiumএ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব পাৰে</translation>
 <translation id="8586442755830160949">স্বত্ত্বাধিকাৰ <ph name="YEAR" /> The Chromium Authors. সর্বস্বত্ব সংৰক্ষিত।</translation>
 <translation id="8619360774459241877">Chromium লঞ্চ কৰি থকা হৈছে...</translation>
 <translation id="8621669128220841554">অনির্দিষ্ট আসোঁৱাহৰ বাবে ইনষ্টলেশ্বন কৰিব পৰা নগ’ল। অনুগ্ৰহ কৰি পুনৰ Chromium ডাউনল’ড কৰক।</translation>
diff --git a/chrome/app/resources/chromium_strings_az.xtb b/chrome/app/resources/chromium_strings_az.xtb
index a01f2f9e..1587303 100644
--- a/chrome/app/resources/chromium_strings_az.xtb
+++ b/chrome/app/resources/chromium_strings_az.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Chromium haqqında</translation>
 <translation id="2977470724722393594">Chromium güncəldir</translation>
 <translation id="2983934633046890458">Chromium parolları redaktə etməyə çalışır.</translation>
+<translation id="3032706164202344641">Chromium parollarınızı yoxlaya bilmir. Sonra yenidən cəhd edin.</translation>
 <translation id="3032787606318309379">Xrom durub ...</translation>
 <translation id="3068515742935458733">Qəza raportlarını və <ph name="UMA_LINK" /> linkini Google'a göndərməklə Chromium'un daha keyfiyyətli olmasına yardım olun</translation>
 <translation id="3103660991484857065">Quraşdırıcı arxivi dekompres edə bilmədi. Chromium'u yenidən endirməyiniz xahiş olunur.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium loqo</translation>
 <translation id="3639635944603682591">Bu şəxsin axtarış datası bu cihazdan silinəcək. Datanı bərpa etmək üçün Chromium'a <ph name="USER_EMAIL" /> olaraq daxil olun.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium üçün yeni güncəlləmə əlçatandır. Chromium yenidən işə başladıqdan sonra tətbiq ediləcək.}=1{Chromium üçün yeni güncəlləmə əlçatandır. Chromium yenidən işə başladıqdan sonra tətbiq ediləcək. Anonim pəncərəniz yenidən açılmayacaq.}other{Chromium üçün yeni güncəlləmə əlçatandır. Chromium yenidən işə başladıqdan sonra tətbiq ediləcək. # Anonim pəncərəniz yenidən açılmayacaq.}}</translation>
+<translation id="3685209450716071127">Chromium parollarınızı yoxlaya bilmir. İnternet bağlantınızı yoxlamağa cəhd edin.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administrator bu güncəlləməni tətbiq etmək üçün Chromium'u yenidən başlatmanızı tələb edir}=1{Administrator bu güncəlləməni tətbiq etmək üçün Chromium'u yenidən başlatmanızı tələb edir. Anonim pəncərəniz yenidən açılmayacaq.}other{Administrator bu güncəlləməni tətbiq etmək üçün Chromium'u yenidən başlatmanızı tələb edir. # Anonim pəncərəniz yenidən açılmayacaq.}}</translation>
 <translation id="3713809861844741608">Linki yeni Chromium tabında açın</translation>
 <translation id="3728336900324680424">Ünvan panelində təklif irəli sürmək üçün Chromium Diskinizə daxil olacaq</translation>
@@ -206,6 +208,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium'u bir gün ərzində yenidən başladın}other{Chromium'u # gün ərzində yenidən başladın}}</translation>
 <translation id="8453117565092476964">Quraşdırıcı arxivi zədələnib və ya yanlışdır. Lütfən, Chromium'u yenidən endirin.</translation>
 <translation id="8493179195440786826">Chromium'um vaxtı keçib</translation>
+<translation id="8568283329061645092">Google Hesabınız ilə daxil olduqda Chromium parollarınızı yoxlaya bilər</translation>
 <translation id="8586442755830160949">Müəlliflik Hüququ <ph name="YEAR" /> Chromium Müəllifləri. Bütün hüquqlar qorunur.</translation>
 <translation id="8619360774459241877">Chromium başlayır...</translation>
 <translation id="8621669128220841554">Naməlum xəta üzündən quraşdırmaq alınmadı. Chromium'u yenidən endirin.</translation>
diff --git a/chrome/app/resources/chromium_strings_be.xtb b/chrome/app/resources/chromium_strings_be.xtb
index 40ef3e6..38a0907e 100644
--- a/chrome/app/resources/chromium_strings_be.xtb
+++ b/chrome/app/resources/chromium_strings_be.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Пра &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium абноўлены</translation>
 <translation id="2983934633046890458">Chromium спрабуе змяніць паролі.</translation>
+<translation id="3032706164202344641">Браўзеру Chromium не ўдаецца праверыць паролі. Паўтарыце спробу пазней.</translation>
 <translation id="3032787606318309379">Дадаецца ў Chromium...</translation>
 <translation id="3068515742935458733">Дапамагаць палепшыць Chromium, адпраўляючы ў Google справаздачы аб збоях і <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Усталёўшчык не змог распакаваць архіў. Спампуйце Chromium зноў.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Лагатып Chromium</translation>
 <translation id="3639635944603682591">Даныя аб прагледжаных гэтым карыстальнікам старонках будуць выдалены з прылады. Каб аднавіць гэтыя даныя, увайдзіце ў Chromium як <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Даступна новае абнаўленне для Chromium. Яно будзе прыменена пасля перазапуску.}=1{Даступна новае абнаўленне для Chromium. Яно будзе прыменена пасля перазапуску. Акно ў рэжыме інкогніта не будзе адкрыта паўторна.}one{Даступна новае абнаўленне для Chromium. Яно будзе прыменена пасля перазапуску. # акно ў рэжыме інкогніта не будзе адкрыта паўторна.}few{Даступна новае абнаўленне для Chromium. Яно будзе прыменена пасля перазапуску. # акны ў рэжыме інкогніта не будуць адкрыты паўторна.}many{Даступна новае абнаўленне для Chromium. Яно будзе прыменена пасля перазапуску. # вокнаў у рэжыме інкогніта не будуць адкрыты паўторна.}other{Даступна новае абнаўленне для Chromium. Яно будзе прыменена пасля перазапуску. # акна ў рэжыме інкогніта не будуць адкрыты паўторна.}}</translation>
+<translation id="3685209450716071127">Браўзеру Chromium не ўдаецца праверыць паролі. Паспрабуйце праверыць падключэнне да інтэрнэту.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Ваш адміністратар просіць перазапусціць Chromium для ўсталявання абнаўлення}=1{Ваш адміністратар просіць перазапусціць Chromium для ўсталявання абнаўлення. Акно ў рэжыме інкогніта не будзе адкрыта паўторна.}one{Ваш адміністратар просіць перазапусціць Chromium для ўсталявання абнаўлення. # акно ў рэжыме інкогніта не будзе адкрыта паўторна.}few{Ваш адміністратар просіць перазапусціць Chromium для ўсталявання абнаўлення. # акны ў рэжыме інкогніта не будуць адкрыты паўторна.}many{Ваш адміністратар просіць перазапусціць Chromium для ўсталявання абнаўлення. # вокнаў у рэжыме інкогніта не будуць адкрыты паўторна.}other{Ваш адміністратар просіць перазапусціць Chromium для ўсталявання абнаўлення. # акна ў рэжыме інкогніта не будуць адкрыты паўторна.}}</translation>
 <translation id="3713809861844741608">Адкрыць спасылку ў новай &amp;укладцы Chromium</translation>
 <translation id="3728336900324680424">Каб выводзіць прапановы ў адрасным радку, браўзер Chromium будзе карыстацца доступам да вашага Дыска</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Перазапусціце Chromium на працягу дня}one{Перазапусціце Chromium на працягу # дня}few{Перазапусціце Chromium на працягу # дзён}many{Перазапусціце Chromium на працягу # дзён}other{Перазапусціце Chromium на працягу # дня}}</translation>
 <translation id="8453117565092476964">Архіў усталёўшчыка пашкоджаны або мае няправільны фармат. Спампуйце Chromium зноў.</translation>
 <translation id="8493179195440786826">Chromium састарэў</translation>
+<translation id="8568283329061645092">Chromium зможа праверыць паролі толькі пасля таго, як вы ўвойдзеце ва Уліковы запіс Google</translation>
 <translation id="8586442755830160949">Аўтарскія правы: стваральнікі Chromium, <ph name="YEAR" />. Усе правы абароненыя.</translation>
 <translation id="8619360774459241877">Ідзе запуск Chromium...</translation>
 <translation id="8621669128220841554">Збой усталявання з-за нявызначанай памылкі. Спампуйце Chromium зноў.</translation>
diff --git a/chrome/app/resources/chromium_strings_bg.xtb b/chrome/app/resources/chromium_strings_bg.xtb
index d702434..a8ab8b9d 100644
--- a/chrome/app/resources/chromium_strings_bg.xtb
+++ b/chrome/app/resources/chromium_strings_bg.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Всичко за &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium е актуален</translation>
 <translation id="2983934633046890458">Chromium се опитва да редактира паролите.</translation>
+<translation id="3032706164202344641">Chromium не може да провери паролите ви. Опитайте пак по-късно.</translation>
 <translation id="3032787606318309379">Добавя се към Chromium...</translation>
 <translation id="3068515742935458733">Помогнете ни да подобрим Chromium, като ни изпращате <ph name="UMA_LINK" /> му и сигнали за сривове</translation>
 <translation id="3103660991484857065">Инсталационната програма не успя да декомпресира архива. Моля, изтеглете отново Chromium.</translation>
@@ -61,6 +62,7 @@
 <translation id="358997566136285270">Лого на Chromium</translation>
 <translation id="3639635944603682591">Данните за сърфирането на този човек ще бъдат изтрити от устройството. За да ги възстановите, влезте в Chromium като <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Налице е актуализация за Chromium, която ще бъде приложена веднага щом рестартирате.}=1{Налице е актуализация за Chromium, която ще бъде приложена веднага щом рестартирате. Прозорецът ви в режим „инкогнито“ няма да бъде отворен отново.}other{Налице е актуализация за Chromium, която ще бъде приложена веднага щом рестартирате. Вашите # прозореца в режим „инкогнито“ няма да бъдат отворени отново.}}</translation>
+<translation id="3685209450716071127">Chromium не може да провери паролите ви. Проверете връзката си с интернет.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Администраторът ви моли да рестартирате Chromium, за да се приложи тази актуализация}=1{Администраторът ви моли да рестартирате Chromium, за да се приложи тази актуализация. Прозорецът ви в режим „инкогнито“ няма да бъде отворен отново.}other{Администраторът ви моли да рестартирате Chromium, за да се приложи тази актуализация. Вашите # прозореца в режим „инкогнито“ няма да бъдат отворени отново.}}</translation>
 <translation id="3713809861844741608">Отваряне на връзката в нов &amp;раздел на Chromium</translation>
 <translation id="3728336900324680424">Chromium ще осъществява достъп до хранилището ви в Диск, за да извежда предложения в адресната лента</translation>
@@ -201,6 +203,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Повторно стартиране на Chromium до 1 ден}other{Повторно стартиране на Chromium до # дни}}</translation>
 <translation id="8453117565092476964">Архивът на инсталационната програма е повреден или невалиден. Моля, изтеглете отново Chromium.</translation>
 <translation id="8493179195440786826">Chromium не е актуален</translation>
+<translation id="8568283329061645092">Chromium може да проверява паролите ви, когато влезете с профила си в Google</translation>
 <translation id="8586442755830160949">Авторски права <ph name="YEAR" /> Авторите на Chromium. Всички права запазени.</translation>
 <translation id="8619360774459241877">Chromium стартира…</translation>
 <translation id="8621669128220841554">Инсталирането не бе успешно поради неизвестна грешка. Моля, изтеглете отново Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_bn.xtb b/chrome/app/resources/chromium_strings_bn.xtb
index 7888b7ca..0f79da6 100644
--- a/chrome/app/resources/chromium_strings_bn.xtb
+++ b/chrome/app/resources/chromium_strings_bn.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">&amp;Chromium সম্পর্কে</translation>
 <translation id="2977470724722393594">Chromium আপ-টু-ডেট আছে</translation>
 <translation id="2983934633046890458">Chromium আপনার পাসওয়ার্ড এডিট করার অনুমতি চাইছে।</translation>
+<translation id="3032706164202344641">Chromium আপনার পাসওয়ার্ড চেক করতে পারছে না। পরে আবার চেষ্টা করুন।</translation>
 <translation id="3032787606318309379">Chromium-এ জুড়ছে...</translation>
 <translation id="3068515742935458733">Google-এ  <ph name="UMA_LINK" /> ও ক্র্যাশ রিপোর্ট পাঠিয়ে Chromium আরও ভালো করতে সাহায্য করুন</translation>
 <translation id="3103660991484857065">ইনস্টলার আর্কাইভ আনকমপ্রেস করতে পারেনি৷ অনুগ্রহ করে Chromium আবার ডাউনলোড করুন৷</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium লোগো</translation>
 <translation id="3639635944603682591">এই ডিভাইস থেকে এই ব্যক্তির ব্রাউজিং ডেটা মুছে ফেলা হবে। ডেটা ফিরিয়ে আনতে Chromium-এ <ph name="USER_EMAIL" /> হিসেবে সাইন-ইন করুন।</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium-এর একটি নতুন আপডেট উপলভ্য আছে এবং আপনি আবার চালু করলেই সেটি প্রয়োগ করা হবে।}=1{Chromium-এর একটি নতুন আপডেট উপলভ্য আছে এবং আপনি আবার চালু করলেই সেটি প্রয়োগ করা হবে। আপনার ছদ্মবেশী উইন্ডো আবার খুলবে না।}one{Chromium-এর একটি নতুন আপডেট উপলভ্য আছে এবং আপনি আবার চালু করলেই সেটি প্রয়োগ করা হবে। আপনার #টি ছদ্মবেশী উইন্ডো আবার খুলবে না।}other{Chromium-এর একটি নতুন আপডেট উপলভ্য আছে এবং আপনি আবার চালু করলেই সেটি প্রয়োগ করা হবে। আপনার #টি ছদ্মবেশী উইন্ডো আবার খুলবে না।}}</translation>
+<translation id="3685209450716071127">আপনার পাসওয়ার্ড Chromium চেক করে দেখতে পারছে না। আপনার ইন্টারনেট কানেকশন চেক করে দেখে নিন।</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{এই আপডেট প্রয়োগ করতে আপনার অ্যাডমিনিস্ট্রেটর আপনাকে Chromium আবার চালু করতে বলছেন}=1{এই আপডেট প্রয়োগ করতে আপনার অ্যাডমিনিস্ট্রেটর আপনাকে Chromium আবার চালু করতে বলছেন। আপনার ছদ্মবেশী উইন্ডো আবার খুলবে না।}one{এই আপডেট প্রয়োগ করতে আপনার অ্যাডমিনিস্ট্রেটর আপনাকে Chromium আবার চালু করতে বলছেন। আপনার #টি ছদ্মবেশী উইন্ডো আবার খুলবে না।}other{এই আপডেট প্রয়োগ করতে আপনার অ্যাডমিনিস্ট্রেটর আপনাকে Chromium আবার চালু করতে বলছেন। আপনার #টি ছদ্মবেশী উইন্ডো আবার খুলবে না।}}</translation>
 <translation id="3713809861844741608">নতুন Chromium ট্যাবে লিঙ্ক খুলুন</translation>
 <translation id="3728336900324680424">অ্যাড্রেস বারে সাজেশন দেওয়ার জন্য Chromium আপনার ড্রাইভ অ্যাক্সেস করবে</translation>
@@ -206,6 +208,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium এক দিনের মধ্যে আবার লঞ্চ করুন}one{Chromium # দিনের মধ্যে আবার লঞ্চ করুন}other{Chromium # দিনের মধ্যে আবার লঞ্চ করুন}}</translation>
 <translation id="8453117565092476964">ইনস্টলার আর্কাইভ অবিশুদ্ধ বা ভুল৷ Chromium পুনরায় ডাউনলোড করুন৷</translation>
 <translation id="8493179195440786826">Chromium পুরানো হয়ে গেছে</translation>
+<translation id="8568283329061645092">আপনি যখন নিজের Google অ্যাকাউন্টের মাধ্যমে সাইন-ইন করবেন, Chromium তখন আপনার পাসওয়ার্ড চেক করে দেখতে পারবে</translation>
 <translation id="8586442755830160949">কপিরাইট <ph name="YEAR" /> Chromium রচয়িতা৷ সর্বস্বত্ত্ব সংরক্ষিত৷</translation>
 <translation id="8619360774459241877">Chromium লঞ্চ করা হচ্ছে...</translation>
 <translation id="8621669128220841554">অনির্দিষ্ট ত্রুটির কারণে ইনস্টল করা যায়নি৷ অনুগ্রহ করে Chromium আবার ডাউনলোড করুন৷</translation>
diff --git a/chrome/app/resources/chromium_strings_bs.xtb b/chrome/app/resources/chromium_strings_bs.xtb
index f2399930..0ca3dbd 100644
--- a/chrome/app/resources/chromium_strings_bs.xtb
+++ b/chrome/app/resources/chromium_strings_bs.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">O &amp;Chromiumu</translation>
 <translation id="2977470724722393594">Chromium je ažuriran</translation>
 <translation id="2983934633046890458">Chromium pokušava urediti lozinke.</translation>
+<translation id="3032706164202344641">Chromium ne može provjeravati vaše lozinke. Pokušajte ponovo kasnije.</translation>
 <translation id="3032787606318309379">Dodavanje u Chromium…</translation>
 <translation id="3068515742935458733">Pomozite nam da poboljšamo Chromium i šaljite Googleu izvještaje o padu aplikacija i <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Aplikacija za instaliranje nije uspjela dekompresirati arhivu. Ponovo preuzmite Chromium.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Logotip Chromiuma</translation>
 <translation id="3639635944603682591">Podaci o pregledavanju za tu osobu izbrisat će se s ovog uređaja. Da biste vratili te podatke, prijavite se na Chromium kao <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Dostupno je novo ažuriranje za Chromium i primijenit će se čim ga ponovo pokrenete.}=1{Dostupno je novo ažuriranje za Chromium i primijenit će se čim ga ponovo pokrenete. Vaš anonimni prozor se neće ponovo otvoriti.}one{Dostupno je novo ažuriranje za Chromium i primijenit će se čim ga ponovo pokrenete. Vaš # anonimni prozor se neće ponovo otvoriti.}few{Dostupno je novo ažuriranje za Chromium i primijenit će se čim ga ponovo pokrenete. Vaša # anonimna prozora se neće ponovo otvoriti.}other{Dostupno je novo ažuriranje za Chromium i primijenit će se čim ga ponovo pokrenete. Vaših # anonimnih prozora se neće ponovo otvoriti.}}</translation>
+<translation id="3685209450716071127">Chromium ne može provjeravati vaše lozinke. Predlažemo da provjerite internetsku vezu.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Vaš administrator traži da ponovo pokrenete Chromium radi primjene ovog ažuriranja}=1{Vaš administrator traži da ponovo pokrenete Chromium radi primjene ovog ažuriranja. Vaš anonimni prozor se neće ponovo otvoriti.}one{Vaš administrator traži da ponovo pokrenete Chromium radi primjene ovog ažuriranja. Vaš # anonimni prozor se neće ponovo otvoriti.}few{Vaš administrator traži da ponovo pokrenete Chromium radi primjene ovog ažuriranja. Vaša # anonimna prozora se neće ponovo otvoriti.}other{Vaš administrator traži da ponovo pokrenete Chromium radi primjene ovog ažuriranja. Vaših # anonimnih prozora se neće ponovo otvoriti.}}</translation>
 <translation id="3713809861844741608">Otvori link u novoj &amp;kartici Chromiuma</translation>
 <translation id="3728336900324680424">Chromium će pristupiti Disku da daje prijedloge u traci za adresu</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Ponovo pokreni Chromium u roku od jednog dana}one{Ponovo pokreni Chromium u roku od # dana}few{Ponovo pokreni Chromium u roku od # dana}other{Ponovo pokreni Chromium u roku od # dana}}</translation>
 <translation id="8453117565092476964">Arhiva alata za instaliranje je oštećena ili nevažeća. Ponovo preuzmite Chromium.</translation>
 <translation id="8493179195440786826">Chromium nije ažuriran</translation>
+<translation id="8568283329061645092">Chromium može provjeravati vaše lozinke kada se prijavljujete putem Google računa</translation>
 <translation id="8586442755830160949">Autorska prava <ph name="YEAR" /> Autori Chromiuma. Sva prava zadržana.</translation>
 <translation id="8619360774459241877">Pokretanje Chromiuma...</translation>
 <translation id="8621669128220841554">Instalacija nije uspjela zbog neodređene greške. Ponovo preuzmite Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_ca.xtb b/chrome/app/resources/chromium_strings_ca.xtb
index cd196ca..e7e81b7f 100644
--- a/chrome/app/resources/chromium_strings_ca.xtb
+++ b/chrome/app/resources/chromium_strings_ca.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Quant a &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium està actualitzat</translation>
 <translation id="2983934633046890458">Chromium està provant d'editar les contrasenyes.</translation>
+<translation id="3032706164202344641">Chromium no pot comprovar les teves contrasenyes. Torna-ho a provar més tard.</translation>
 <translation id="3032787606318309379">S'està afegint a Chromium...</translation>
 <translation id="3068515742935458733">Ajudeu a millorar Chromium; envieu informes d'error i <ph name="UMA_LINK" /> a Google.</translation>
 <translation id="3103660991484857065">L'instal·lador no ha pogut descomprimir l'arxiu. Torneu a baixar Chromium.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Logotip de Chromium</translation>
 <translation id="3639635944603682591">Les dades de navegació d'aquesta persona se suprimiran d'aquest dispositiu. Per recuperar-les, inicia la sessió a Chromium com a <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Hi ha una actualització nova de Chromium disponible i s'aplicarà tan aviat com el reiniciïs.}=1{Hi ha una actualització nova de Chromium disponible i s'aplicarà tan aviat com el reiniciïs. La finestra d'incògnit no es tornarà a obrir.}other{Hi ha una actualització nova de Chromium disponible i s'aplicarà tan aviat com el reiniciïs. Les # finestres d'incògnit no es tornaran a obrir.}}</translation>
+<translation id="3685209450716071127">Chromium no pot comprovar les teves contrasenyes. Comprova la connexió a Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{L'administrador et demana que reiniciïs Chromium per aplicar aquesta actualització}=1{L'administrador et demana que reiniciïs Chromium per aplicar aquesta actualització. La finestra d'incògnit no es tornarà a obrir.}other{L'administrador et demana que reiniciïs Chromium per aplicar aquesta actualització. Les # finestres d'incògnit no es tornaran a obrir.}}</translation>
 <translation id="3713809861844741608">Obre l'enllaç en una pes&amp;tanya nova a Chromium</translation>
 <translation id="3728336900324680424">Chromium accedirà a Drive per fer suggeriments a la barra d'adreces</translation>
@@ -207,6 +209,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Reinicia Chromium en 1 dia}other{Reinicia Chromium en # dies}}</translation>
 <translation id="8453117565092476964">L'arxiu d'instal·lació està malmès o no és vàlid. Torneu a baixar Chromium.</translation>
 <translation id="8493179195440786826">Chromium no està actualitzat</translation>
+<translation id="8568283329061645092">Chromium pot comprovar les teves contrasenyes quan inicies la sessió amb el Compte de Google</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Els autors de Chromium. Tots els drets reservats.</translation>
 <translation id="8619360774459241877">S'està iniciant Chromium...</translation>
 <translation id="8621669128220841554">La instal·lació ha fallat a causa d'un error no especificat. Torneu a baixar Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_cs.xtb b/chrome/app/resources/chromium_strings_cs.xtb
index 07a1030..c12e9a06 100644
--- a/chrome/app/resources/chromium_strings_cs.xtb
+++ b/chrome/app/resources/chromium_strings_cs.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">O prohlížeči &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium je aktuální</translation>
 <translation id="2983934633046890458">Chromium se pokouší upravit hesla.</translation>
+<translation id="3032706164202344641">Chromium nemůže zkontrolovat hesla. Zkuste to později.</translation>
 <translation id="3032787606318309379">Přidávání do prohlížeče Chromium...</translation>
 <translation id="3068515742935458733">Pomozte aplikaci Chromium zlepšovat tím, že budete společnosti Google zasílat zprávy o selhání a <ph name="UMA_LINK" />.</translation>
 <translation id="3103660991484857065">Instalačnímu programu se nepodařilo rozbalit archiv. Stáhněte prosím Chromium znovu.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Logo Chromium</translation>
 <translation id="3639635944603682591">Ze zařízení budou smazány údaje této osoby o prohlížení. Budete-li je chtít znovu získat, přihlaste se do prohlížeče Chromium jako <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Je k dispozici nová aktualizace prohlížeče Chromium, která bude použita po restartování.}=1{Je k dispozici nová aktualizace prohlížeče Chromium, která bude použita po restartování. Anonymní okno se neotevře znovu.}few{Je k dispozici nová aktualizace prohlížeče Chromium, která bude použita po restartování. # anonymní okna se neotevřou znovu.}many{Je k dispozici nová aktualizace prohlížeče Chromium, která bude použita po restartování. # anonymního okna se neotevře znovu.}other{Je k dispozici nová aktualizace prohlížeče Chromium, která bude použita po restartování. # anonymních oken se neotevře znovu.}}</translation>
+<translation id="3685209450716071127">Chromium nemůže zkontrolovat hesla. Zkuste zkontrolovat připojení k internetu.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Váš administrátor vás žádá, abyste kvůli použití této aktualizace Chromium restartovali}=1{Váš administrátor vás žádá, abyste kvůli použití této aktualizace Chromium restartovali. Anonymní okno se neotevře znovu.}few{Váš administrátor vás žádá, abyste kvůli použití této aktualizace Chromium restartovali. # anonymní okna se neotevřou znovu.}many{Váš administrátor vás žádá, abyste kvůli použití této aktualizace Chromium restartovali. # anonymního okna se neotevře znovu.}other{Váš administrátor vás žádá, abyste kvůli použití této aktualizace Chromium restartovali. # anonymních oken se neotevře znovu.}}</translation>
 <translation id="3713809861844741608">Otevřít odkaz na nové kar&amp;tě prohlížeče Chromium</translation>
 <translation id="3728336900324680424">Chromium bude za účelem zobrazování návrhů v adresním řádku číst váš obsah na Disku</translation>
@@ -209,6 +211,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Do jednoho dne Chromium restartujte}few{Do # dní Chromium restartujte}many{Do # dne Chromium restartujte}other{Do # dní Chromium restartujte}}</translation>
 <translation id="8453117565092476964">Archiv instalačního programu je poškozený nebo neplatný. Stáhněte prosím Chromium znovu.</translation>
 <translation id="8493179195440786826">Prohlížeč Chromium je zastaralý</translation>
+<translation id="8568283329061645092">Když se přihlásíte pomocí účtu Google, může vám Chromium kontrolovat hesla</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Autoři prohlížeče Chromium. Všechna práva vyhrazena.</translation>
 <translation id="8619360774459241877">Spouštění prohlížeče Chromium...</translation>
 <translation id="8621669128220841554">Instalace se z neznámého důvodu nezdařila. Stáhněte prosím Chromium znovu.</translation>
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb
index 988127d..ad0747b 100644
--- a/chrome/app/resources/chromium_strings_da.xtb
+++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Om &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium er opdateret</translation>
 <translation id="2983934633046890458">Chromium forsøger at redigere adgangskoder.</translation>
+<translation id="3032706164202344641">Chromium kan ikke tjekke dine adgangskoder. Prøv igen senere.</translation>
 <translation id="3032787606318309379">Føjer til Chromium...</translation>
 <translation id="3068515742935458733">Hjælp med at gøre Chromium bedre ved at sende fejlrapporter og <ph name="UMA_LINK" /> til Google</translation>
 <translation id="3103660991484857065">Installationsprogrammet kunne ikke pakke arkivet ud. Download Chromium igen.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium-logo</translation>
 <translation id="3639635944603682591">Brugerens browserdata slettes fra denne enhed. Log ind på Chromium som <ph name="USER_EMAIL" /> for at gendanne dataene.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Der er en ny Chromium-opdatering, som anvendes, så snart du genstarter.}=1{Der er en ny Chromium-opdatering, som anvendes, så snart du genstarter. Dit inkognitovindue åbnes ikke igen.}one{Der er en ny Chromium-opdatering, som anvendes, så snart du genstarter. # inkognitovindue åbnes ikke igen.}other{Der er en ny Chromium-opdatering, som anvendes, så snart du genstarter. Dine # inkognitovinduer åbnes ikke igen.}}</translation>
+<translation id="3685209450716071127">Chromium kan ikke tjekke dine adgangskoder. Prøv at tjekke din internetforbindelse.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Din administrator anmoder om, at du genstarter Chromium for at anvende denne opdatering}=1{Din administrator anmoder om, at du genstarter Chromium for at anvende denne opdatering. Dit inkognitovindue åbnes ikke igen.}one{Din administrator anmoder om, at du genstarter Chromium for at anvende denne opdatering. # inkognitovindue åbnes ikke igen.}other{Din administrator anmoder om, at du genstarter Chromium for at anvende denne opdatering. Dine # inkognitovinduer åbnes ikke igen.}}</translation>
 <translation id="3713809861844741608">Åbn linket på en ny Chromium-&amp;fane</translation>
 <translation id="3728336900324680424">Chromium har adgang til Drev, så der kan vises forslag i adresselinjen</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Genstart Chromium inden for en dag}one{Genstart Chromium inden for # dag}other{Genstart Chromium inden for # dag}}</translation>
 <translation id="8453117565092476964">Installationsarkivet er beskadiget eller ugyldigt. Download Chromium igen.</translation>
 <translation id="8493179195440786826">Chromium er forældet</translation>
+<translation id="8568283329061645092">Chromium kan tjekke dine adgangskoder, når du er logget ind med din Google-konto</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Forfatterne bag Chromium. Alle rettigheder forbeholdes.</translation>
 <translation id="8619360774459241877">Starter Chromium...</translation>
 <translation id="8621669128220841554">Installationen mislykkedes på grund af en uspecificeret fejl. Download Chromium igen.</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb
index 72c99e3..3bfe4d9 100644
--- a/chrome/app/resources/chromium_strings_de.xtb
+++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Über &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium ist auf dem neuesten Stand</translation>
 <translation id="2983934633046890458">Chromium versucht, Passwörter zu bearbeiten.</translation>
+<translation id="3032706164202344641">Chromium kann Ihre Passwörter nicht prüfen. Versuchen Sie es später noch einmal.</translation>
 <translation id="3032787606318309379">Wird zu Chromium hinzugefügt...</translation>
 <translation id="3068515742935458733">Absturzberichte und <ph name="UMA_LINK" /> zur Verbesserung von Chromium an Google senden</translation>
 <translation id="3103660991484857065">Das Installationsprogramm konnte das Archiv nicht dekomprimieren. Bitte laden Sie Chromium erneut herunter.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium-Logo</translation>
 <translation id="3639635944603682591">Die Browserdaten dieser Person werden von diesem Gerät gelöscht. Wenn Sie die Daten wiederherstellen möchten, melden Sie sich als <ph name="USER_EMAIL" /> in Chromium an.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Ein neues Update für Chromium ist verfügbar und wird installiert, sobald Sie den Browser neu starten.}=1{Ein neues Update für Chromium ist verfügbar und wird installiert, sobald Sie den Browser neu starten. Ihr Inkognitofenster wird nicht wieder geöffnet.}other{Ein neues Update für Chromium ist verfügbar und wird installiert, sobald Sie den Browser neu starten. Ihre # Inkognitofenster werden nicht wieder geöffnet.}}</translation>
+<translation id="3685209450716071127">Chromium kann Ihre Passwörter nicht prüfen. Überprüfen Sie Ihre Internetverbindung.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Laut Ihrem Administrator sollten Sie Chromium neu starten, um dieses Update durchzuführen}=1{Laut Ihrem Administrator sollten Sie Chromium neu starten, um dieses Update durchzuführen. Ihr Inkognitofenster wird nicht wieder geöffnet.}other{Laut Ihrem Administrator sollten Sie Chromium neu starten, um dieses Update durchzuführen. Ihre # Inkognitofenster werden nicht wieder geöffnet.}}</translation>
 <translation id="3713809861844741608">Link in neuem Chromium-Tab öffnen</translation>
 <translation id="3728336900324680424">Chromium greift auf Google Drive zu, um in der Adressleiste Vorschläge zu machen</translation>
@@ -207,6 +209,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium innerhalb eines Tages neu starten}other{Chromium innerhalb von # Tagen neu starten}}</translation>
 <translation id="8453117565092476964">Das Installationsarchiv ist beschädigt oder ungültig. Bitte laden Sie Chromium erneut herunter.</translation>
 <translation id="8493179195440786826">Chromium ist veraltet.</translation>
+<translation id="8568283329061645092">Chromium kann Ihre Passwörter prüfen, wenn Sie sich mit Ihrem Google-Konto anmelden</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Die Chromium-Autoren. Alle Rechte vorbehalten.</translation>
 <translation id="8619360774459241877">Chromium wird gestartet…</translation>
 <translation id="8621669128220841554">Die Installation konnte aufgrund eines undefinierten Fehlers nicht abgeschlossen werden. Bitte laden Sie Chromium erneut herunter.</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb
index dcb96d9..18d6efe 100644
--- a/chrome/app/resources/chromium_strings_el.xtb
+++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Σχετικά με το &amp;Chromium</translation>
 <translation id="2977470724722393594">Το Chromium έχει ενημερωθεί</translation>
 <translation id="2983934633046890458">Το Chromium προσπαθεί να επεξεργαστεί κωδικούς πρόσβασης.</translation>
+<translation id="3032706164202344641">Το Chromium δεν μπορεί να ελέγξει τους κωδικούς πρόσβασής σας. Δοκιμάστε ξανά αργότερα.</translation>
 <translation id="3032787606318309379">Προσθήκη στο Chromium…</translation>
 <translation id="3068515742935458733">Βοηθήστε μας να κάνουμε το Chromium καλύτερο, αποστέλλωντας αναφορές σφαλμάτων και <ph name="UMA_LINK" /> στη Google</translation>
 <translation id="3103660991484857065">Η αποσυμπίεση του αρχείου από το πρόγραμμα εγκατάστασης απέτυχε. Κατεβάστε το Chromium ξανά.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Λογότυπο Chromium</translation>
 <translation id="3639635944603682591">Τα δεδομένα περιήγησης αυτού του ατόμου θα διαγραφούν από αυτήν τη συσκευή. Για να επαναφέρετε τα δεδομένα, συνδεθείτε στο Chromium ως <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Υπάρχει νέα διαθέσιμη ενημέρωση για το Chromium και θα εφαρμοστεί μόλις κάνετε επανεκκίνηση.}=1{Υπάρχει νέα διαθέσιμη ενημέρωση για το Chromium και θα εφαρμοστεί μόλις κάνετε επανεκκίνηση. Το παράθυρο για ανώνυμη περιήγηση δεν θα ανοίξει ξανά.}other{Υπάρχει νέα διαθέσιμη ενημέρωση για το Chromium και θα εφαρμοστεί μόλις κάνετε επανεκκίνηση. Τα # παράθυρα για ανώνυμη περιήγηση δεν θα ανοίξουν ξανά.}}</translation>
+<translation id="3685209450716071127">Το Chromium δεν μπορεί να ελέγξει τους κωδικούς πρόσβασής σας. Δοκιμάστε να ελέγξετε τη σύνδεσή σας στο διαδίκτυο.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Ο διαχειριστής σας ζητά να επανεκκινήσετε το Chromium, προκειμένου να εφαρμοστεί αυτή η ενημέρωση.}=1{Ο διαχειριστής σας ζητά να επανεκκινήσετε το Chromium, προκειμένου να εφαρμοστεί αυτή η ενημέρωση. Το παράθυρο για ανώνυμη περιήγηση δεν θα ανοίξει ξανά.}other{Ο διαχειριστής σας ζητά να επανεκκινήσετε το Chromium, προκειμένου να εφαρμοστεί αυτή η ενημέρωση. Τα # παράθυρα για ανώνυμη περιήγηση δεν θα ανοίξουν ξανά.}}</translation>
 <translation id="3713809861844741608">Άνοιγμα συνδέσμου σε νέα καρτέ&amp;λα Chromium</translation>
 <translation id="3728336900324680424">Το Chromium θα αποκτήσει πρόσβαση στο Drive, για να κάνει προτάσεις στη γραμμή διευθύνσεων</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Επανεκκίνηση του Chromium σε μία ημέρα}other{Επανεκκίνηση του Chromium σε # ημέρες}}</translation>
 <translation id="8453117565092476964">Το αρχείο του προγράμματος εγκατάστασης είναι κατεστραμμένο ή μη έγκυρο. Κατεβάστε το Chromium ξανά.</translation>
 <translation id="8493179195440786826">Το Chromium δεν είναι ενημερωμένο</translation>
+<translation id="8568283329061645092">Το Chromium μπορεί να ελέγξει τους κωδικούς πρόσβασής σας όταν συνδέεστε με τον Λογαριασμό σας Google.</translation>
 <translation id="8586442755830160949">Πνευματικά δικαιώματα <ph name="YEAR" /> Οι συντάκτες του Chromium. Με επιφύλαξη παντός δικαιώματος.</translation>
 <translation id="8619360774459241877">Εκκίνηση του Chromium…</translation>
 <translation id="8621669128220841554">Η εγκατάσταση απέτυχε λόγω μη καθορισμένου σφάλματος. Κατεβάστε το Chromium ξανά.</translation>
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb
index fc88ea65..6e69e2c 100644
--- a/chrome/app/resources/chromium_strings_en-GB.xtb
+++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">About &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium is up to date</translation>
 <translation id="2983934633046890458">Chromium is trying to edit passwords.</translation>
+<translation id="3032706164202344641">Chromium can't check your passwords. Try again later.</translation>
 <translation id="3032787606318309379">Adding to Chromium ...</translation>
 <translation id="3068515742935458733">Help make Chromium better by sending crash reports and <ph name="UMA_LINK" /> to Google</translation>
 <translation id="3103660991484857065">The installer failed to uncompress archive. Please download Chromium again.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium logo</translation>
 <translation id="3639635944603682591">This person's browsing data will be deleted from this device. To recover the data, sign in to Chromium as <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{A new update for Chromium is available and will be applied as soon as you relaunch.}=1{A new update for Chromium is available and will be applied as soon as you relaunch. Your Incognito window won't reopen.}other{A new update for Chromium is available and will be applied as soon as you relaunch. Your # Incognito windows won't reopen.}}</translation>
+<translation id="3685209450716071127">Chromium can't check your passwords. Try checking your Internet connection.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Your administrator asks that you relaunch Chromium to apply this update}=1{Your administrator asks that you relaunch Chromium to apply this update. Your Incognito window won't reopen.}other{Your administrator asks that you relaunch Chromium to apply this update. Your # Incognito windows won't reopen.}}</translation>
 <translation id="3713809861844741608">Open link in new Chromium &amp;tab</translation>
 <translation id="3728336900324680424">Chromium will access your Drive to make suggestions in the address bar</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Relaunch Chromium within a day}other{Relaunch Chromium within # days}}</translation>
 <translation id="8453117565092476964">The installer archive is corrupted or invalid. Please download Chromium again.</translation>
 <translation id="8493179195440786826">Chromium is Out of Date</translation>
+<translation id="8568283329061645092">Chromium can check your passwords when you sign in with your Google Account</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. All rights reserved.</translation>
 <translation id="8619360774459241877">Launching Chromium...</translation>
 <translation id="8621669128220841554">Installation failed due to unspecified error. Please download Chromium again.</translation>
diff --git a/chrome/app/resources/chromium_strings_es-419.xtb b/chrome/app/resources/chromium_strings_es-419.xtb
index ab190558..316c8518 100644
--- a/chrome/app/resources/chromium_strings_es-419.xtb
+++ b/chrome/app/resources/chromium_strings_es-419.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Acerca de &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium está actualizado.</translation>
 <translation id="2983934633046890458">Chromium está intentando editar contraseñas.</translation>
+<translation id="3032706164202344641">Chromium no puede revisar las contraseñas. Vuelve a intentarlo más tarde.</translation>
 <translation id="3032787606318309379">Agregar a Chromium...</translation>
 <translation id="3068515742935458733">Envía a Google informes de fallos y <ph name="UMA_LINK" /> para ayudar a mejorar Chromium.</translation>
 <translation id="3103660991484857065">El instalador no pudo descomprimir el archivo. Descarga Chromium nuevamente.</translation>
@@ -61,6 +62,7 @@
 <translation id="358997566136285270">Logotipo de Chromium</translation>
 <translation id="3639635944603682591">Los datos de navegación de esta persona se borrarán de este dispositivo. Para recuperarlos, accede a Chromium como <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Hay una nueva actualización disponible para Chromium que se aplicará cuando lo reinicies.}=1{Hay una nueva actualización disponible para Chromium que se aplicará cuando lo reinicies. No se volverá a abrir la ventana de incógnito.}other{Hay una nueva actualización disponible para Chromium que se aplicará cuando lo reinicies. No se volverán a abrir las # ventanas de incógnito.}}</translation>
+<translation id="3685209450716071127">Chromium no puede revisar las contraseñas. Revisa la conexión a Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Tu administrador solicita que reinicies Chromium para aplicar esta actualización}=1{Tu administrador solicita que reinicies Chromium para aplicar esta actualización. No se volverá a abrir la ventana de incógnito.}other{Tu administrador solicita que reinicies Chromium para aplicar esta actualización. No se volverán a abrir las # ventanas de incógnito.}}</translation>
 <translation id="3713809861844741608">Abrir vínculo en una pes&amp;taña nueva de Chromium</translation>
 <translation id="3728336900324680424">Chromium accederá a tus datos de Drive para hacer sugerencias en la barra de direcciones</translation>
@@ -202,6 +204,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Reinicia Chromium en el transcurso de un día}other{Reinicia Chromium en el transcurso de # días}}</translation>
 <translation id="8453117565092476964">El instalador está dañado o no es válido. Descarga Chromium nuevamente.</translation>
 <translation id="8493179195440786826">Chromium no actualizado</translation>
+<translation id="8568283329061645092">Chromium puede revisar las contraseñas solo cuando accedes con tu Cuenta de Google</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Los autores de Chromium. Todos los derechos reservados.</translation>
 <translation id="8619360774459241877">Iniciando Chromium…</translation>
 <translation id="8621669128220841554">La instalación falló debido a un error no especificado. Descarga Chromium otra vez.</translation>
diff --git a/chrome/app/resources/chromium_strings_es.xtb b/chrome/app/resources/chromium_strings_es.xtb
index 3c3f083..4638e7ea 100644
--- a/chrome/app/resources/chromium_strings_es.xtb
+++ b/chrome/app/resources/chromium_strings_es.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Información de &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium está actualizado</translation>
 <translation id="2983934633046890458">Chromium está intentando cambiar contraseñas.</translation>
+<translation id="3032706164202344641">Chromium no puede comprobar tus contraseñas. Vuelve a intentarlo más tarde.</translation>
 <translation id="3032787606318309379">Añadiendo a Chromium...</translation>
 <translation id="3068515742935458733">Ayudar a mejorar Chromium enviando informes sobre fallos y <ph name="UMA_LINK" /> a Google</translation>
 <translation id="3103660991484857065">El programa de instalación no ha podido descomprimir el archivo. Vuelve a descargar Chromium.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Logotipo de Chromium</translation>
 <translation id="3639635944603682591">Los datos de navegación de este usuario se eliminarán del dispositivo. Para recuperar tus datos, inicia sesión en Chromium como <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el dispositivo.}=1{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el dispositivo. La ventana de incógnito no se volverá a abrir.}other{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el dispositivo. Las # ventanas de incógnito no se volverán a abrir.}}</translation>
+<translation id="3685209450716071127">Chromium no puede comprobar tus contraseñas. Revisa tu conexión a Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Tu administrador pide que reinicies Chromium para aplicar esta actualización}=1{Tu administrador pide que reinicies Chromium para aplicar esta actualización La ventana de incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chromium para aplicar esta actualización Las # ventanas de incógnito no se volverán a abrir.}}</translation>
 <translation id="3713809861844741608">Abrir enlace en una pes&amp;taña nueva de Chromium</translation>
 <translation id="3728336900324680424">Chromium accederá a tu Drive para mostrarte sugerencias en la barra de direcciones</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Reiniciar Chromium en el transcurso de 1 día}other{Reiniciar Chromium en el transcurso de # días}}</translation>
 <translation id="8453117565092476964">El archivo de instalación está dañado o no es válido. Vuelve a descargar Chromium.</translation>
 <translation id="8493179195440786826">Chromium no está actualizado</translation>
+<translation id="8568283329061645092">Chromium puede comprobar tus contraseñas si inicias sesión con tu cuenta de Google</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Los creadores de Chromium. Todos los derechos reservados.</translation>
 <translation id="8619360774459241877">Iniciando Chromium...</translation>
 <translation id="8621669128220841554">La instalación ha fallado debido a un error no especificado. Vuelve a descargar Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_et.xtb b/chrome/app/resources/chromium_strings_et.xtb
index 14dd939..07ebae9e 100644
--- a/chrome/app/resources/chromium_strings_et.xtb
+++ b/chrome/app/resources/chromium_strings_et.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Teave &amp;Chromiumi kohta</translation>
 <translation id="2977470724722393594">Chromium on ajakohane</translation>
 <translation id="2983934633046890458">Chromium üritab paroole muuta.</translation>
+<translation id="3032706164202344641">Chromium ei saa teie paroole kontrollida. Proovige hiljem uuesti.</translation>
 <translation id="3032787606318309379">Chromiumi lisamine ...</translation>
 <translation id="3068515742935458733">Aidake Chromiumi täiustada, saates Google'ile krahhiaruandeid ja lingi <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Installeril ei õnnestunud arhiivi lahti pakkida. Laadige Chromium uuesti alla.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromiumi logo</translation>
 <translation id="3639635944603682591">Selle isiku sirvimisandmed kustutatakse seadmest. Andmete taastamiseks logige Chromiumi sisse kasutajana <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Saadaval on uus Chromiumi värskendus, mis rakendatakse taaskäivitamisel.}=1{Saadaval on uus Chromiumi värskendus, mis rakendatakse taaskäivitamisel. Teie inkognito akent ei avata uuesti.}other{Saadaval on uus Chromiumi värskendus, mis rakendatakse taaskäivitamisel. Teie # inkognito akent ei avata uuesti.}}</translation>
+<translation id="3685209450716071127">Chromium ei saa teie paroole kontrollida. Kontrollige internetiühendust.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administraator palub teil Chromiumi selle värskenduse rakendamiseks uuesti käivitada}=1{Administraator palub teil Chromiumi selle värskenduse rakendamiseks uuesti käivitada. Teie inkognito akent ei avata uuesti.}other{Administraator palub teil Chromiumi selle värskenduse rakendamiseks uuesti käivitada. Teie # inkognito akent ei avata uuesti.}}</translation>
 <translation id="3713809861844741608">Ava link Chromiumi uuel &amp;vahekaardil</translation>
 <translation id="3728336900324680424">Chromium pääseb teie Drive'ile juurde, et aadressiribal soovitusi anda</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Käivitage Chromium uuesti päeva jooksul}other{Käivitage Chromium uuesti # päeva jooksul}}</translation>
 <translation id="8453117565092476964">Installeri arhiiv on rikutud või kehtetu. Laadige Chromium uuesti alla.</translation>
 <translation id="8493179195440786826">Chromium on aegunud</translation>
+<translation id="8568283329061645092">Chromium saab teie paroole kontrollida siis, kui logite sisse oma Google'i kontoga</translation>
 <translation id="8586442755830160949">Autoriõigus <ph name="YEAR" /> The Chromium Authors. Kõik õigused on kaitstud.</translation>
 <translation id="8619360774459241877">Chromiumi käivitamine …</translation>
 <translation id="8621669128220841554">Installimine ebaõnnestus tundmatu vea tõttu. Laadige Chromium uuesti alla.</translation>
diff --git a/chrome/app/resources/chromium_strings_eu.xtb b/chrome/app/resources/chromium_strings_eu.xtb
index 2e42ab2..742bf34 100644
--- a/chrome/app/resources/chromium_strings_eu.xtb
+++ b/chrome/app/resources/chromium_strings_eu.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;Chromium arakatzaileari buruz</translation>
 <translation id="2977470724722393594">Eguneratuta dago Chromium</translation>
 <translation id="2983934633046890458">Pasahitzak editatzen saiatzen ari da Chromium.</translation>
+<translation id="3032706164202344641">Chromium-ek ezin ditu egiaztatu pasahitzak. Saiatu geroago.</translation>
 <translation id="3032787606318309379">Chromium-era gehitzen…</translation>
 <translation id="3068515742935458733">Lagundu Chromium hobetzen hutsegite-txostenak eta <ph name="UMA_LINK" /> Google-ra bidalita</translation>
 <translation id="3103660991484857065">Instalatzaileak ezin izan du artxiboa deskonprimitu. Deskargatu berriro Chromium.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium logotipoa</translation>
 <translation id="3639635944603682591">Pertsona honen arakatze-datuak gailutik ezabatuko dira. Datuak berreskuratzeko, hasi saioa Chromium-en <ph name="USER_EMAIL" /> gisa.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium-en eguneratze bat erabilgarri dago eta sistema eragilea berrabiarazten duzunean aplikatuko da.}=1{Chromium-en eguneratze bat erabilgarri dago eta sistema eragilea berrabiarazten duzunean aplikatuko da. Ezkutuko moduko leihoa ez da berriro irekiko.}other{Chromium-en eguneratze bat erabilgarri dago eta sistema eragilea berrabiarazten duzunean aplikatuko da. Ezkutuko moduko # leihoak ez dira berriro irekiko.}}</translation>
+<translation id="3685209450716071127">Chromium-ek ezin ditu egiaztatu pasahitzak. Egiaztatu Internetera konektatuta zaudela.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Chromium berrabiarazteko eskatu dizu administratzaileak, eguneratzea aplikatzeko}=1{Chromium berrabiarazteko eskatu dizu administratzaileak, eguneratzea aplikatzeko. Ezkutuko moduko leihoa ez da berriro irekiko.}other{Chromium berrabiarazteko eskatu dizu administratzaileak, eguneratzea aplikatzeko. Ezkutuko moduko # leihoak ez dira berriro irekiko.}}</translation>
 <translation id="3713809861844741608">Ireki esteka Chromium-eko beste &amp;fitxa batean</translation>
 <translation id="3728336900324680424">Chromium-ek zure Drive unitatea atzituko du helbide-barran iradokizunak egiteko</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Berrabiarazi Chromium egun bateko epean}other{Berrabiarazi Chromium # eguneko epean}}</translation>
 <translation id="8453117565092476964">Instalatzailearen artxiboa hondatuta dago edo baliogabea da. Deskargatu Chromium berriro.</translation>
 <translation id="8493179195440786826">Chromium zaharkituta dago</translation>
+<translation id="8568283329061645092">Google-ko kontu batekin saioa hasten duzunean egiazta ditzake Chromium-ek pasahitzak</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Chromium-en egileak. Eskubide guztiak erreserbatuta.</translation>
 <translation id="8619360774459241877">Chromium abiarazten…</translation>
 <translation id="8621669128220841554">Instalazioak huts egin du zehaztu gabeko errore batengatik. Deskargatu Chromium berriro.</translation>
diff --git a/chrome/app/resources/chromium_strings_fa.xtb b/chrome/app/resources/chromium_strings_fa.xtb
index 873dff5..eb7c616 100644
--- a/chrome/app/resources/chromium_strings_fa.xtb
+++ b/chrome/app/resources/chromium_strings_fa.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">‏درباره &amp;Chromium</translation>
 <translation id="2977470724722393594">‏Chromium به‌روز است</translation>
 <translation id="2983934633046890458">‏Chromium می‌خواهد گذرواژه‌ها را ویرایش کند.</translation>
+<translation id="3032706164202344641">‏Chromium نمی‌تواند گذرواژه‌هایتان را بررسی کند. بعداً دوباره امتحان کنید.</translation>
 <translation id="3032787606318309379">‏افزودن به Chromium…</translation>
 <translation id="3068515742935458733">‏با ارسال گزارش‌های خرابی و <ph name="UMA_LINK" /> به Google، به بهبود Google کمک کنید</translation>
 <translation id="3103660991484857065">‏نصب‌کننده در خارج کردن بایگانی از حالت فشرده ناموفق بود. لطفاً دوباره Chromium را بارگیری کنید.</translation>
@@ -62,6 +63,7 @@
 <translation id="358997566136285270">‏نشان‌واره Chromium</translation>
 <translation id="3639635944603682591">‏داده‌های محصول مرور این کاربر از این دستگاه حذف می‌شود. برای بازیابی داده‌ها، با نام <ph name="USER_EMAIL" /> به سیستم Chromium وارد شوید.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{‏به‌روزرسانی جدیدی برای Chromium در دسترس است و به‌محض راه‌اندازی مجدد اعمال خواهد شد.}=1{‏به‌روزرسانی جدیدی برای Chromium در دسترس است و به‌محض راه‌اندازی مجدد اعمال خواهد شد. پنجره ناشناس بازگشایی نمی‌شود.}one{‏به‌روزرسانی جدیدی برای Chromium در دسترس است و به‌محض راه‌اندازی مجدد اعمال خواهد شد. # پنجره ناشناس بازگشایی نمی‌شود.}other{‏به‌روزرسانی جدیدی برای Chromium در دسترس است و به‌محض راه‌اندازی مجدد اعمال خواهد شد. # پنجره ناشناس بازگشایی نمی‌شود.}}</translation>
+<translation id="3685209450716071127">‏Chromium نمی‌تواند گذرواژه‌هایتان را بررسی کند. اتصال اینترنت را بررسی کنید.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{‏سرپرست سیستم از شما می‌خواهد برای اعمال این به‌روزرسانی، Chromium را راه‌اندازی مجدد کنید}=1{‏سرپرست سیستم از شما می‌خواهد برای اعمال این به‌روزرسانی، Chromium را راه‌اندازی مجدد کنید. پنجره ناشناس بازگشایی نمی‌شود.}one{‏سرپرست سیستم از شما می‌خواهد برای اعمال این به‌روزرسانی، Chromium را راه‌اندازی مجدد کنید. # پنجره ناشناس بازگشایی نمی‌شود.}other{‏سرپرست سیستم از شما می‌خواهد برای اعمال این به‌روزرسانی، Chromium را راه‌اندازی مجدد کنید. # پنجره ناشناس بازگشایی نمی‌شود.}}</translation>
 <translation id="3713809861844741608">‏باز کردن پیوند در &amp;برگه جدید Chromium</translation>
 <translation id="3728336900324680424">‏Chromium برای ارائه پیشنهاد در نوار نشانی، به Drive شما دسترسی خواهد داشت</translation>
@@ -206,6 +208,7 @@
 <translation id="8417404458978023919">{0,plural, =1{‏Chromium را ظرف یک روز راه‌اندازی مجدد کنید}one{‏Chromium را ظرف # روز راه‌اندازی مجدد کنید}other{‏Chromium را ظرف # روز راه‌اندازی مجدد کنید}}</translation>
 <translation id="8453117565092476964">‏بایگانی نصب‌کننده خراب یا نامعتبر است. لطفاً Chromium را دوباره را بارگیری کنید.</translation>
 <translation id="8493179195440786826">‏نسخه Chromium قدیمی است</translation>
+<translation id="8568283329061645092">‏وقتی با «حساب Google» خود به سیستم وارد می‌شوید، Chromium می‌تواند گذرواژه‌هایتان را بررسی کند</translation>
 <translation id="8586442755830160949">‏حق نسخه‌برداری <ph name="YEAR" /> نویسندگان Chromium. کلیه حقوق محفوظ است.</translation>
 <translation id="8619360774459241877">‏درحال راه‌اندازی Chromium…</translation>
 <translation id="8621669128220841554">‏به دلیل خطای نامشخص، نصب ناموفق بود. لطفاً دوباره Chromium را بارگیری کنید.</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb
index d6383ea..ee8a1bb81 100644
--- a/chrome/app/resources/chromium_strings_fi.xtb
+++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Tietoja &amp;Chromiumista</translation>
 <translation id="2977470724722393594">Chromium on ajan tasalla.</translation>
 <translation id="2983934633046890458">Chromium yrittää muuttaa salasanoja.</translation>
+<translation id="3032706164202344641">Chromium ei voi tarkistaa salasanojasi. Yritä myöhemmin uudelleen.</translation>
 <translation id="3032787606318309379">Lisätään Chromiumiin...</translation>
 <translation id="3068515742935458733">Auta parantamaan Chromiumia lähettämällä kaatumisilmoitukset ja <ph name="UMA_LINK" /> Googlelle</translation>
 <translation id="3103660991484857065">Asennusohjelma ei pystynyt purkamaan arkistotiedostoa. Lataa Chromium uudelleen.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium-logo</translation>
 <translation id="3639635944603682591">Käyttäjän selaustiedot poistetaan tältä laitteelta. Jos haluat palauttaa tiedot myöhemmin, kirjaudu Chromiumiin käyttäjänä <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Uusi Chromium-päivitys on saatavilla, ja se otetaan käyttöön uudelleenkäynnistyksen jälkeen.}=1{Uusi Chromium-päivitys on saatavilla, ja se otetaan käyttöön uudelleenkäynnistyksen jälkeen. Incognito-ikkunaasi ei avata uudelleen.}other{Uusi Chromium-päivitys on saatavilla, ja se otetaan käyttöön uudelleenkäynnistyksen jälkeen. # incognito-ikkunaasi ei avata uudelleen.}}</translation>
+<translation id="3685209450716071127">Chromium ei voi tarkistaa salasanojasi. Tarkista internetyhteytesi.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Ylläpitäjä pyytää Chromiumin uudelleenkäynnistystä, jotta tämä päivitys voidaan ottaa käyttöön.}=1{Ylläpitäjä pyytää Chromiumin uudelleenkäynnistystä, jotta tämä päivitys voidaan ottaa käyttöön. Incognito-ikkunaasi ei avata uudelleen.}other{Ylläpitäjä pyytää Chromiumin uudelleenkäynnistystä, jotta tämä päivitys voidaan ottaa käyttöön. # incognito-ikkunaasi ei avata uudelleen.}}</translation>
 <translation id="3713809861844741608">Avaa linkki uudella Chromiumin välilehdellä</translation>
 <translation id="3728336900324680424">Chromium käyttää Drivea antaakseen ehdotuksia osoitepalkissa</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Käynnistä Chromium uudelleen vuorokauden kuluessa}other{Käynnistä Chromium uudelleen # vuorokauden kuluessa}}</translation>
 <translation id="8453117565092476964">Asennusarkisto on virheellinen. Lataa Chromium uudelleen.</translation>
 <translation id="8493179195440786826">Chromium on vanhentunut</translation>
+<translation id="8568283329061645092">Chromium voi tarkistaa salasanasi, kun kirjaudut sisään Google-tililläsi</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. Kaikki oikeudet pidätetään.</translation>
 <translation id="8619360774459241877">Käynnistetään Chromiumia…</translation>
 <translation id="8621669128220841554">Asennus epäonnistui määrittelemättömän virheen vuoksi. Lataa Chromium uudelleen.</translation>
diff --git a/chrome/app/resources/chromium_strings_fil.xtb b/chrome/app/resources/chromium_strings_fil.xtb
index 92f6ea58..1504ffbe 100644
--- a/chrome/app/resources/chromium_strings_fil.xtb
+++ b/chrome/app/resources/chromium_strings_fil.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Tungkol sa &amp;Chromium</translation>
 <translation id="2977470724722393594">Napapanahon ang Chromium</translation>
 <translation id="2983934633046890458">Sinusubukan ng Chromium na i-edit ang mga password.</translation>
+<translation id="3032706164202344641">Hindi masuri ng Chromium ang iyong mga password. Subukan ulit sa ibang pagkakataon.</translation>
 <translation id="3032787606318309379">Idinaragdag sa Chromium...</translation>
 <translation id="3068515742935458733">Tumulong na gawing mas mahusay ang Chromium sa pamamagitan ng pagpapadala ng mga ulat ng pag-crash at <ph name="UMA_LINK" /> sa Google</translation>
 <translation id="3103660991484857065">Nabigong i-uncompress ng installer ang archive. Mangyaring i-download muli ang Chromium.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Logo ng Chromium</translation>
 <translation id="3639635944603682591">Made-delete sa device na ito ang data sa pag-browse ng taong ito. Para ma-recover ang data, mag-sign in sa Chromium bilang <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{May available na bagong update para sa Chromium at ilalapat ito sa sandaling maglunsad ka ulit.}=1{May available na bagong update para sa Chromium at ilalapat ito sa sandaling maglunsad ka ulit. Hindi bubukas ulit ang iyong Incognito window.}one{May available na bagong update para sa Chromium at ilalapat ito sa sandaling maglunsad ka ulit. Hindi bubukas ulit ang iyong # Incognito window.}other{May available na bagong update para sa Chromium at ilalapat ito sa sandaling maglunsad ka ulit. Hindi bubukas ulit ang iyong # na Incognito window.}}</translation>
+<translation id="3685209450716071127">Hindi masusuri ng Chromium ang iyong mga password. Subukang tingnan ang iyong koneksyon sa internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Hinihiling ng iyong administrator na ilunsad mo ulit ang Chromium para mailapat ang update na ito}=1{Hinihiling ng iyong administrator na ilunsad mo ulit ang Chromium para mailapat ang update na ito. Hindi bubukas ulit ang iyong Incognito window.}one{Hinihiling ng iyong administrator na ilunsad mo ulit ang Chromium para mailapat ang update na ito. Hindi bubukas ulit ang iyong # Incognito window.}other{Hinihiling ng iyong administrator na ilunsad mo ulit ang Chromium para mailapat ang update na ito. Hindi bubukas ulit ang iyong # na Incognito window.}}</translation>
 <translation id="3713809861844741608">Buksan ang link sa bagong &amp;tab ng Chromium</translation>
 <translation id="3728336900324680424">Ia-access ng Chromium ang iyong Drive para makapagmungkahi sa address bar</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Muling ilunsad ang Chromium sa loob ng isang araw}one{Muling ilunsad ang Chromium sa loob ng # araw}other{Muling ilunsad ang Chromium sa loob ng # na araw}}</translation>
 <translation id="8453117565092476964">Sira o di-wasto ang archive ng installer. Mangyaring i-download muli ang Chromium.</translation>
 <translation id="8493179195440786826">Luma na ang Chromium</translation>
+<translation id="8568283329061645092">Masusuri ng Chromium ang iyong mga password kapag nag-sign in ka sa Google Account mo</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Ang Mga May-akda ng Chromium. Nakalaan ang lahat ng karapatan.</translation>
 <translation id="8619360774459241877">Inilulunsad ang Chromium...</translation>
 <translation id="8621669128220841554">Nabigo ang pag-install dahil sa hindi natukoy na error. Mangyaring i-download muli ang Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_fr-CA.xtb b/chrome/app/resources/chromium_strings_fr-CA.xtb
index 6a931e1..4f9be87 100644
--- a/chrome/app/resources/chromium_strings_fr-CA.xtb
+++ b/chrome/app/resources/chromium_strings_fr-CA.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">À propos de &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium est à jour</translation>
 <translation id="2983934633046890458">Chromium essaie de modifier les mots de passe.</translation>
+<translation id="3032706164202344641">Chromium ne peut pas vérifier vos mots de passe. Réessayez plus tard.</translation>
 <translation id="3032787606318309379">Ajout à Chromium en cours...</translation>
 <translation id="3068515742935458733">Aidez-nous à améliorer Chromium en nous envoyant des rapports d'erreur et des <ph name="UMA_LINK" />.</translation>
 <translation id="3103660991484857065">Le programme d'installation n'a pas réussi à décompresser l'archive. Veuillez télécharger Chromium de nouveau.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Logo de Chromium</translation>
 <translation id="3639635944603682591">Les données de navigation de cette personne seront supprimées de cet appareil. Pour récupérer ces données, connectez-vous à Chromium en tant que <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Une nouvelle mise à jour de Chromium est proposée et sera appliquée dès que vous le relancerez.}=1{Une nouvelle mise à jour de Chromium est proposée et sera appliquée dès que vous le relancerez. Votre fenêtre de navigation privée ne sera pas rouverte.}one{Une nouvelle mise à jour de Chromium est proposée et sera appliquée dès que vous le relancerez. Votre fenêtre de navigation privée ne sera pas rouverte.}other{Une nouvelle mise à jour de Chromium est proposée et sera appliquée dès que vous le relancerez. Vos # fenêtres de navigation privée ne seront pas rouvertes.}}</translation>
+<translation id="3685209450716071127">Chromium ne peut pas vérifier vos mots de passe. Essayez de vérifier votre connexion Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Votre administrateur vous recommande de relancer Chromium pour appliquer cette mise à jour}=1{Votre administrateur vous recommande de relancer Chromium pour appliquer cette mise à jour. Votre fenêtre de navigation privée ne sera pas rouverte.}one{Votre administrateur vous recommande de relancer Chromium pour appliquer cette mise à jour. Votre fenêtre de navigation privée ne sera pas rouverte.}other{Votre administrateur vous recommande de relancer Chromium pour appliquer cette mise à jour. Vos # fenêtres de navigation privée ne seront pas rouvertes.}}</translation>
 <translation id="3713809861844741608">Ouvrir le lien dans un nouvel ongle&amp;t Chromium</translation>
 <translation id="3728336900324680424">Chromium accédera à votre Disque pour faire des suggestions dans la barre d'adresse</translation>
@@ -209,6 +211,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Redémarrer Chromium d'ici un jour}one{Redémarrer Chromium d'ici # jour}other{Redémarrer Chromium d'ici # jours}}</translation>
 <translation id="8453117565092476964">L'archive du programme d'installation est corrompue ou n'est pas valide. Veuillez télécharger Chromium à nouveau.</translation>
 <translation id="8493179195440786826">Chromium n'est pas à jour</translation>
+<translation id="8568283329061645092">Chromium peut vérifier vos mots de passe lorsque vous vous connectez avec votre compte Google</translation>
 <translation id="8586442755830160949">© <ph name="YEAR" /> Les auteurs de Chrome. Tous droits réservés.</translation>
 <translation id="8619360774459241877">Lancement de Chromium en cours…</translation>
 <translation id="8621669128220841554">Échec de l'installation en raison d'une erreur non spécifiée. Veuillez télécharger Chromium à nouveau.</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb
index 531caec..7254640 100644
--- a/chrome/app/resources/chromium_strings_fr.xtb
+++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -44,6 +44,7 @@
 <translation id="2910007522516064972">À propos de &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium est à jour</translation>
 <translation id="2983934633046890458">Chromium tente de modifier les mots de passe.</translation>
+<translation id="3032706164202344641">Chromium ne parvient pas à vérifier vos mots de passe. Réessayez plus tard.</translation>
 <translation id="3032787606318309379">Ajout à Chromium en cours…</translation>
 <translation id="3068515742935458733">Aidez-nous à améliorer Chromium en nous envoyant des rapports d'erreur et des <ph name="UMA_LINK" />.</translation>
 <translation id="3103660991484857065">Échec de la décompression de l'archive par le programme d'installation. Veuillez télécharger Chromium à nouveau.</translation>
@@ -64,6 +65,7 @@
 <translation id="358997566136285270">Logo Chromium</translation>
 <translation id="3639635944603682591">Les données de navigation de cet utilisateur vont être supprimées de cet appareil. Pour les récupérer, connectez-vous à Chromium en tant que <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur.}=1{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur. Sachez que la fenêtre de navigation privée ne sera pas rouverte.}one{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur. Sachez que la fenêtre de navigation privée (#) ne sera pas rouverte.}other{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur. Sachez que les # fenêtres de navigation privée ne seront pas rouvertes.}}</translation>
+<translation id="3685209450716071127">Chromium ne parvient pas à vérifier vos mots de passe. Vérifiez votre connexion Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Votre administrateur vous demande de relancer Chromium pour installer cette mise à jour}=1{Votre administrateur vous demande de relancer Chromium pour installer cette mise à jour. Sachez que la fenêtre de navigation privée ne sera pas rouverte.}one{Votre administrateur vous demande de relancer Chromium pour installer cette mise à jour. Sachez que la fenêtre de navigation privée (#) ne sera pas rouverte.}other{Votre administrateur vous demande de relancer Chromium pour installer cette mise à jour. Sachez que les # fenêtres de navigation privée ne seront pas rouvertes.}}</translation>
 <translation id="3713809861844741608">Ouvrir le lien dans un nouvel ongle&amp;t Chromium</translation>
 <translation id="3728336900324680424">Chromium va accéder à votre Drive pour proposer des suggestions dans la barre d'adresse</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Relancer Chromium d'ici un jour}one{Relancer Chromium d'ici # jour}other{Relancer Chromium d'ici # jours}}</translation>
 <translation id="8453117565092476964">L'archive du programme d'installation est corrompue ou n'est pas valide. Veuillez télécharger Chromium à nouveau.</translation>
 <translation id="8493179195440786826">Version de Chromium obsolète</translation>
+<translation id="8568283329061645092">Chromium peut vérifier vos mots de passe lorsque vous vous connectez à votre compte Google</translation>
 <translation id="8586442755830160949">Copyright Auteurs de Chromium <ph name="YEAR" />. Tous droits réservés.</translation>
 <translation id="8619360774459241877">Lancement de Chromium…</translation>
 <translation id="8621669128220841554">Échec de l'installation en raison d'une erreur non spécifiée. Veuillez télécharger Chromium à nouveau.</translation>
diff --git a/chrome/app/resources/chromium_strings_gl.xtb b/chrome/app/resources/chromium_strings_gl.xtb
index 587399d..3e4cb75c 100644
--- a/chrome/app/resources/chromium_strings_gl.xtb
+++ b/chrome/app/resources/chromium_strings_gl.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Acerca de &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium está actualizado</translation>
 <translation id="2983934633046890458">Chromium está tentando editar contrasinais.</translation>
+<translation id="3032706164202344641">Chromium non puido comprobar os teus contrasinais. Téntao de novo máis tarde.</translation>
 <translation id="3032787606318309379">Engadindo a Chromium...</translation>
 <translation id="3068515742935458733">Axudar a mellorar Chromium enviando informes sobre fallos e <ph name="UMA_LINK" /> a Google</translation>
 <translation id="3103660991484857065">O instalador non puido descomprimir o arquivo. Descarga Chromium de novo.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Logotipo de Chromium</translation>
 <translation id="3639635944603682591">Os datos de navegación desta persoa eliminaranse deste dispositivo. Para recuperalos, inicia sesión en Chromium como <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Hai dispoñible unha actualización nova para Chromium e aplicarase en canto o reinicies.}=1{Hai dispoñible unha actualización nova para Chromium e aplicarase en canto o reinicies. A ventá do modo de incógnito non se volverá abrir.}other{Hai dispoñible unha actualización nova para Chromium e aplicarase en canto o reinicies. As # ventás do modo de incógnito non se volverán abrir.}}</translation>
+<translation id="3685209450716071127">Chromium non puido comprobar os teus contrasinais. Verifica a conexión a Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{O teu administrador pídeche que reinicies Chromium para aplicar esta actualización}=1{O teu administrador pídeche que reinicies Chromium para aplicar esta actualización. A ventá do modo de incógnito non se volverá abrir.}other{O teu administrador pídeche que reinicies Chromium para aplicar esta actualización. As # ventás do modo de incógnito non se volverán abrir.}}</translation>
 <translation id="3713809861844741608">Abrir ligazón nunha nova &amp;pestana de Chromium</translation>
 <translation id="3728336900324680424">Chromium accederá a Drive para facer suxestións na barra de enderezos</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Reinicia Chromium en 1 día}other{Reinicia Chromium en # días}}</translation>
 <translation id="8453117565092476964">O arquivo do instalador está danado ou non é válido. Volve descargar Chromium.</translation>
 <translation id="8493179195440786826">Chromium está desactualizado</translation>
+<translation id="8568283329061645092">Chromium pode comprobar os teus contrasinais cando inicies sesión coa túa Conta de Google</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. Reservados todos os dereitos.</translation>
 <translation id="8619360774459241877">Iniciando Chromium…</translation>
 <translation id="8621669128220841554">Non se puido efectuar a instalación debido a un erro. Volve descargar Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_gu.xtb b/chrome/app/resources/chromium_strings_gu.xtb
index ec0eb501..24f96e9 100644
--- a/chrome/app/resources/chromium_strings_gu.xtb
+++ b/chrome/app/resources/chromium_strings_gu.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;Chromium વિશે</translation>
 <translation id="2977470724722393594">Chromium અપ ટૂ ડેટ છે</translation>
 <translation id="2983934633046890458">Chromium પાસવર્ડમાં ફેરફાર કરવાનો પ્રયાસ કરે છે.</translation>
+<translation id="3032706164202344641">Chromium તમારા પાસવર્ડ ચેક કરી શકતું નથી. થોડા સમય પછી ફરી પ્રયાસ કરો.</translation>
 <translation id="3032787606318309379">Chromium માં ઉમેરી રહ્યું છે...</translation>
 <translation id="3068515742935458733">ક્રૅશ રિપોર્ટ અને <ph name="UMA_LINK" /> Googleને મોકલીને Chromium ને વધુ સારું બનાવવામાં મદદ કરો.</translation>
 <translation id="3103660991484857065">ઇન્સ્ટૉલર આર્કાઇવને અનકોમ્પ્રેસ કરવામાં નિષ્ફળ. કૃપા કરીને Chromium ફરીથી ડાઉનલોડ કરો.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium લોગો</translation>
 <translation id="3639635944603682591">આ વ્યક્તિનો બ્રાઉઝિંગ ડેટા આ ડિવાઇસમાંથી ડિલીટ કરવામાં આવશે. આ ડેટા પાછો મેળવવા માટે, Chromiumમાં <ph name="USER_EMAIL" /> તરીકે સાઇન ઇન કરો.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium માટે નવી અપડેટ ઉપલબ્ધ છે અને તે જેવું તમે ફરીથી લૉન્ચ કરશો, તેને લાગુ કરવામાં આવશે.}=1{Chromium માટે નવી અપડેટ ઉપલબ્ધ છે અને તે જેવું તમે ફરીથી લૉન્ચ કરશો, તેને લાગુ કરવામાં આવશે. તમારી છુપી વિન્ડો ફરીથી ખૂલશે નહીં.}one{Chromium માટે નવી અપડેટ ઉપલબ્ધ છે અને તે જેવું તમે ફરીથી લૉન્ચ કરશો, તેને લાગુ કરવામાં આવશે. તમારી # છુપી વિન્ડો ફરીથી ખૂલશે નહીં.}other{Chromium માટે નવી અપડેટ ઉપલબ્ધ છે અને તે જેવું તમે ફરીથી લૉન્ચ કરશો, તેને લાગુ કરવામાં આવશે. તમારી # છુપી વિન્ડો ફરીથી ખૂલશે નહીં.}}</translation>
+<translation id="3685209450716071127">Chromium તમારા પાસવર્ડ ચેક કરી શકતું નથી. તમારું ઇન્ટરનેટ કનેક્શન ચેક કરવાનો પ્રયાસ કરો.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{આ અપડેટ લાગુ કરવા માટે Chromium ફરીથી લૉન્ચ કરો એવું તમારા વ્યવસ્થાપકનું કહેવું છે}=1{આ અપડેટ લાગુ કરવા માટે Chromium ફરીથી લૉન્ચ કરો એવું તમારા વ્યવસ્થાપકનું કહેવું છે. તમારી છુપી વિન્ડો ફરીથી ખૂલશે નહીં.}one{આ અપડેટ લાગુ કરવા માટે Chromium ફરીથી લૉન્ચ કરો એવું તમારા વ્યવસ્થાપકનું કહેવું છે. તમારી # છુપી વિન્ડો ફરીથી ખૂલશે નહીં.}other{આ અપડેટ લાગુ કરવા માટે Chromium ફરીથી લૉન્ચ કરો એવું તમારા વ્યવસ્થાપકનું કહેવું છે. તમારી # છુપી વિન્ડો ફરીથી ખૂલશે નહીં.}}</translation>
 <translation id="3713809861844741608">નવા Chromium &amp;ટૅબમાં લિંક ખોલો</translation>
 <translation id="3728336900324680424">ઍડ્રેસ બારમાં સૂચનો કરવા માટે, Chromium તમારી ડ્રાઇવને ઍક્સેસ કરશે</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{એક દિવસની અંદર Chromiumને ફરીથી લૉન્ચ કરો}one{# દિવસની અંદર Chromiumને ફરીથી લૉન્ચ કરો}other{# દિવસની અંદર Chromiumને ફરીથી લૉન્ચ કરો}}</translation>
 <translation id="8453117565092476964">ઇન્સ્ટૉલર આર્કાઇવ ખરાબ અથવા અમાન્ય છે. કૃપા કરીને Chromium ફરીથી ડાઉનલોડ કરો.</translation>
 <translation id="8493179195440786826">Chromium જૂનું થઈ ગયું છે</translation>
+<translation id="8568283329061645092">જ્યારે તમે તમારા Google એકાઉન્ટ વડે સાઇન ઇન કરો ત્યારે Chromium તમારા પાસવર્ડ ચેક કરી શકે છે</translation>
 <translation id="8586442755830160949">કોપિરાઇટ <ph name="YEAR" /> The Chromium Authors. સર્વાધિકાર સુરક્ષિત.</translation>
 <translation id="8619360774459241877">Chromium લૉન્ચ કરી રહ્યાં છીએ…</translation>
 <translation id="8621669128220841554">અનુલ્લેખિત ભૂલને કારણે ઇન્સ્ટોલેશન નિષ્ફળ રહ્યું. કૃપા કરીને Chromium ફરીથી ડાઉનલોડ કરો.</translation>
diff --git a/chrome/app/resources/chromium_strings_hi.xtb b/chrome/app/resources/chromium_strings_hi.xtb
index a9d2e8ef..928fb6b 100644
--- a/chrome/app/resources/chromium_strings_hi.xtb
+++ b/chrome/app/resources/chromium_strings_hi.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">&amp;क्रोमियम के बारे में</translation>
 <translation id="2977470724722393594">क्रोमियम अप टू डेट है</translation>
 <translation id="2983934633046890458">क्रोमियम, पासवर्ड में बदलाव करने की कोशिश कर रहा है.</translation>
+<translation id="3032706164202344641">क्रोमियम आपके पासवर्ड की जांच नहीं कर सकता. बाद में कोशिश करें.</translation>
 <translation id="3032787606318309379">क्रोमियम में जोड़ रहा है...</translation>
 <translation id="3068515742935458733">Google को क्रैश रिपोर्ट और <ph name="UMA_LINK" /> भेजकर क्रोमियम को बेहतर बनाने में मदद करें</translation>
 <translation id="3103660991484857065">इंस्‍टॉलर संगह को असंकुचित करने में विफल हुआ. कृपया क्रोमियम फिर से डाउनलोड करें.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">क्रोमियम लोगो</translation>
 <translation id="3639635944603682591">इस व्यक्ति का ब्राउज़िंग डेटा इस डिवाइस से मिटा दिया जाएगा. डेटा वापस पाने के लिए, क्रोमियम में <ph name="USER_EMAIL" /> के रूप में साइन इन करें.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{क्रोमियम के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा.}=1{क्रोमियम के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा. आपकी गुप्त विंडो फिर से नहीं खुलेगी.}one{क्रोमियम के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}other{क्रोमियम के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}}</translation>
+<translation id="3685209450716071127">क्रोमियम आपके पासवर्ड की जांच नहीं कर सकता. अपने इंटरनेट कनेक्शन की जांच करें.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{आपके एडमिन का कहना है कि आप यह अपडेट लागू करने के लिए क्रोमियम को फिर से लॉन्च करें}=1{आपके एडमिन का कहना है कि आप यह अपडेट लागू करने के लिए क्रोमियम को फिर से लॉन्च करें. आपकी गुप्त विंडो फिर से नहीं खुलेगी.}one{आपके एडमिन का कहना है कि आप यह अपडेट लागू करने के लिए क्रोमियम को फिर से लॉन्च करें. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}other{आपके एडमिन का कहना है कि आप यह अपडेट लागू करने के लिए क्रोमियम को फिर से लॉन्च करें. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}}</translation>
 <translation id="3713809861844741608">नए क्रोमियम &amp;टैब में लिंक खोलें</translation>
 <translation id="3728336900324680424">पता बार में सुझाव देने के लिए क्रोमियम आपका 'डिस्क' ऐक्सेस करेगा</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{एक दिन के अंदर क्रोमियम को फिर से लॉन्च करें}one{# दिनों के अंदर क्रोमियम को फिर से लॉन्च करें}other{# दिनों के अंदर क्रोमियम को फिर से लॉन्च करें}}</translation>
 <translation id="8453117565092476964">इंस्‍टॉलर संग्रह खराब या अमान्‍य है. कृपया क्रोमियम फिर से डाउनलोड करें.</translation>
 <translation id="8493179195440786826">क्रोमियम पुराना हो गया है</translation>
+<translation id="8568283329061645092">आप जब अपने Google खाते से साइन इन करते हैं, तब क्रोमियम आपके पासवर्ड की जांच कर सकता है</translation>
 <translation id="8586442755830160949">कॉपीराइट <ph name="YEAR" /> The Chromium Authors. सर्वाधिकार सुरक्षित.</translation>
 <translation id="8619360774459241877">क्रोमियम लॉन्च हो रहा है...</translation>
 <translation id="8621669128220841554">अनिर्दिष्ट कारणों से इंस्‍टॉलेशन विफल हुआ. कृपया क्रोमियम फिर से डाउनलोड करें.</translation>
diff --git a/chrome/app/resources/chromium_strings_hr.xtb b/chrome/app/resources/chromium_strings_hr.xtb
index 3700b0d..5a8338c4 100644
--- a/chrome/app/resources/chromium_strings_hr.xtb
+++ b/chrome/app/resources/chromium_strings_hr.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">O pregledniku &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium je ažuran</translation>
 <translation id="2983934633046890458">Chromium pokušava urediti zaporke.</translation>
+<translation id="3032706164202344641">Chromium ne može provjeriti vaše zaporke. Pokušajte ponovno kasnije.</translation>
 <translation id="3032787606318309379">Dodavanje u preglednik Chromium...</translation>
 <translation id="3068515742935458733">Pomognite nam poboljšati Chromium šaljući izvješća o rušenju programa i <ph name="UMA_LINK" /> Googleu</translation>
 <translation id="3103660991484857065">Program za instalaciju nije dekomprimirao arhivu. Ponovo preuzmite Chromium.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Logotip Chromiuma</translation>
 <translation id="3639635944603682591">Podaci o pregledavanju za tu osobu izbrisat će se s ovog uređaja. Da biste vratili te podatke, prijavite se na Chromium kao <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Dostupno je novo ažuriranje za Chromium koje će se primijeniti nakon ponovnog pokretanja.}=1{Dostupno je novo ažuriranje za Chromium koje će se primijeniti nakon ponovnog pokretanja. Anonimni se prozor neće ponovno otvoriti.}one{Dostupno je novo ažuriranje za Chromium koje će se primijeniti nakon ponovnog pokretanja. Vaš # anonimni prozor neće se ponovno otvoriti.}few{Dostupno je novo ažuriranje za Chromium koje će se primijeniti nakon ponovnog pokretanja. Vaša # anonimna prozora neće se ponovno otvoriti.}other{Dostupno je novo ažuriranje za Chromium koje će se primijeniti nakon ponovnog pokretanja. Vaših # anonimnih prozora neće se ponovno otvoriti.}}</translation>
+<translation id="3685209450716071127">Chromium ne može provjeriti vaše zaporke. Provjerite internetsku vezu.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Vaš administrator traži da ponovno pokrenete Chromium radi primjene tog ažuriranja}=1{Vaš administrator traži da ponovno pokrenete Chromium radi primjene tog ažuriranja. Anonimni se prozor neće ponovno otvoriti.}one{Vaš administrator traži da ponovno pokrenete Chromium radi primjene tog ažuriranja. Vaš # anonimni prozor neće se ponovno otvoriti.}few{Vaš administrator traži da ponovno pokrenete Chromium radi primjene tog ažuriranja. Vaša # anonimna prozora neće se ponovno otvoriti.}other{Vaš administrator traži da ponovno pokrenete Chromium radi primjene tog ažuriranja. Vaših # anonimnih prozora neće se ponovno otvoriti.}}</translation>
 <translation id="3713809861844741608">Otvori vezu na novoj &amp;kartici Chromiuma</translation>
 <translation id="3728336900324680424">Chromium će pristupati vašem Disku radi prikazivanja prijedloga u adresnoj traci</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Ponovo pokrenite Chromium u roku od jednog dana}one{Ponovo pokrenite Chromium u roku od # dana}few{Ponovo pokrenite Chromium u roku od # dana}other{Ponovo pokrenite Chromium u roku od # dana}}</translation>
 <translation id="8453117565092476964">Arhiva programa za instalaciju oštećena je ili nevažeća. Ponovo preuzmite Chromium.</translation>
 <translation id="8493179195440786826">Chromium je zastario</translation>
+<translation id="8568283329061645092">Chromium može provjeriti vaše zaporke kad se prijavite Google računom</translation>
 <translation id="8586442755830160949">Autorska prava <ph name="YEAR" />. Autori Chromiuma. Sva prava pridržana.</translation>
 <translation id="8619360774459241877">Pokretanje Chromiuma...</translation>
 <translation id="8621669128220841554">Instalacija nije uspjela zbog nepoznate pogreške. Ponovo preuzmite Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_hu.xtb b/chrome/app/resources/chromium_strings_hu.xtb
index 46ff00f..1b1b0d9 100644
--- a/chrome/app/resources/chromium_strings_hu.xtb
+++ b/chrome/app/resources/chromium_strings_hu.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">A &amp;Chromium névjegye</translation>
 <translation id="2977470724722393594">A Chromium naprakész</translation>
 <translation id="2983934633046890458">A Chromium szerkeszteni próbálja a jelszavakat.</translation>
+<translation id="3032706164202344641">A Chromium nem tudja ellenőrizni a jelszavait. Próbálkozzon később.</translation>
 <translation id="3032787606318309379">Hozzáadás a Chromiumhoz...</translation>
 <translation id="3068515742935458733">Segítse a Chromium fejlesztését azáltal, hogy elküldi a Google-nak a következőket: hibajelentések és <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Nem sikerült a telepítőnek kibontani a tömörített állományt. Kérjük, töltse le újra a Chromium böngészőt.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium embléma</translation>
 <translation id="3639635944603682591">A személy böngészési adatai törlődnek az eszközről. Az adatok visszaállításához jelentkezzen be a Chromiumba a következő felhasználóként: <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Új Chromium-frissítés jelent meg, amely az újraindítás után azonnal érvénybe lép.}=1{Új Chromium-frissítés jelent meg, amely az újraindítás után azonnal érvénybe lép. Az inkognitóablak nem fog újra megnyílni.}other{Új Chromium-frissítés jelent meg, amely az újraindítás után azonnal érvénybe lép. A(z) # inkognitóablak nem fog újra megnyílni.}}</translation>
+<translation id="3685209450716071127">A Chromium nem tudja ellenőrizni a jelszavakat. Ellenőrizze az internetkapcsolatot.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Rendszergazdája arra kéri, hogy indítsa újra a Chromiumot a frissítés alkalmazásához.}=1{Rendszergazdája arra kéri, hogy indítsa újra a Chromiumot a frissítés alkalmazásához. Az inkognitóablak nem fog újra megnyílni.}other{Rendszergazdája arra kéri, hogy indítsa újra a Chromiumot a frissítés alkalmazásához. A(z) # inkognitóablak nem fog újra megnyílni.}}</translation>
 <translation id="3713809861844741608">Link megnyi&amp;tása új Chromium-lapon</translation>
 <translation id="3728336900324680424">A Chromium hozzáfér Drive-jához, hogy javaslatokat nyújthasson a címsávon.</translation>
@@ -205,6 +207,7 @@
 <translation id="8417404458978023919">{0,plural, =1{A Chromiumot 1 napon belül újra kell indítani}other{A Chromiumot # napon belül újra kell indítani}}</translation>
 <translation id="8453117565092476964">A telepítő tömörített állománya megsérült vagy érvénytelen. Kérjük, töltse le újra a Chromium böngészőt.</translation>
 <translation id="8493179195440786826">A Chromium elavult</translation>
+<translation id="8568283329061645092">A Chromium ellenőrizni tudja a mentett jelszavakat, ha Ön bejelentkezik Google-fiókjával</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> – A Chromium szerzői. Minden jog fenntartva.</translation>
 <translation id="8619360774459241877">Chromium indítása…</translation>
 <translation id="8621669128220841554">A telepítés egy meg nem határozott hiba miatt nem sikerült. Kérjük, töltse le újra a Chromiumot.</translation>
diff --git a/chrome/app/resources/chromium_strings_hy.xtb b/chrome/app/resources/chromium_strings_hy.xtb
index d778df7..8b0616c 100644
--- a/chrome/app/resources/chromium_strings_hy.xtb
+++ b/chrome/app/resources/chromium_strings_hy.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;Chromium-ի մասին</translation>
 <translation id="2977470724722393594">Chromium-ը թարմացված է</translation>
 <translation id="2983934633046890458">Chromium-ը փորձում է փոխել գաղտնաբառերը:</translation>
+<translation id="3032706164202344641">Chromium-ը չի կարող ստուգել ձեր գաղտնաբառերը։ Փորձեք ավելի ուշ։</translation>
 <translation id="3032787606318309379">Ավելացվում է Chromium-ին…</translation>
 <translation id="3068515742935458733">Օգնեք բարելավել Chromium-ը՝ Google-ին ուղարկելով խափանման մասին հաշվետվությունները և <ph name="UMA_LINK" />ը</translation>
 <translation id="3103660991484857065">Տեղադրիչը չկարողացավ բացել արխիվը: Նորից ներբեռնեք Chromium-ը:</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium-ի պատկերանշանը</translation>
 <translation id="3639635944603682591">Այս օգտատիրոջ այցելությունների պատմությունը կհեռացվի այս սարքից։ Տվյալները վերականգնելու համար <ph name="USER_EMAIL" /> հաշվով մուտք գործեք Chromium-ում։</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium-ի այս տարբերակի համար առկա է թարմացում: Այն կտեղադրվի, երբ դիտարկիչը վերագործարկվի։}=1{Chromium-ի այս տարբերակի համար առկա է թարմացում: Այն կտեղադրվի, երբ դիտարկիչը վերագործարկվի։ Ձեր ինկոգնիտո պատուհանը նորից չի բացվի։}one{Chromium-ի այս տարբերակի համար առկա է թարմացում: Այն կտեղադրվի, երբ դիտարկիչը վերագործարկվի։ Ձեր # ինկոգնիտո պատուհանը նորից չի բացվի։}other{Chromium-ի այս տարբերակի համար առկա է թարմացում: Այն կտեղադրվի, երբ դիտարկիչը վերագործարկվի։ Ձեր # ինկոգնիտո պատուհանները նորից չեն բացվի։}}</translation>
+<translation id="3685209450716071127">Chromium-ը չի կարող ստուգել ձեր գաղտնաբառերը։ Ստուգեք ինտերնետ կապը։</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Այս թարմացումը կիրառելու համար ադմինիստրատորը խնդրում է վերագործարկել Chromium-ը}=1{Այս թարմացումը կիրառելու համար ադմինիստրատորը խնդրում է վերագործարկել Chromium-ը։ Ձեր ինկոգնիտո պատուհանը նորից չի բացվի։}one{Այս թարմացումը կիրառելու համար ադմինիստրատորը խնդրում է վերագործարկել Chromium-ը։ Ձեր # ինկոգնիտո պատուհանը նորից չի բացվի։}other{Այս թարմացումը կիրառելու համար ադմինիստրատորը խնդրում է վերագործարկել Chromium-ը։ Ձեր # ինկոգնիտո պատուհանները նորից չեն բացվի։}}</translation>
 <translation id="3713809861844741608">Բացել հղումը Chromium-ի նոր &amp;ներդիրում</translation>
 <translation id="3728336900324680424">Chromium-ը կօգտագործի ձեր Drive-ը՝ հասցեագոտում հուշումներ ցուցադրելու համար</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Վերագործարկեք Chromium-ը մեկ օրվա ընթացքում}one{Վերագործարկեք Chromium-ը # օրվա ընթացքում}other{Վերագործարկեք Chromium-ը # օրվա ընթացքում}}</translation>
 <translation id="8453117565092476964">Տեղադրիչի արխիվը վնասված է կամ անվավեր: Նորից ներբեռնեք Chromium-ը:</translation>
 <translation id="8493179195440786826">Chromium-ը հնացած է</translation>
+<translation id="8568283329061645092">Chromium-ը կարող է ստուգել ձեր գաղտնաբառերը, երբ մտնեք ձեր Google հաշիվ։</translation>
 <translation id="8586442755830160949">© <ph name="YEAR" /> The Chromium Authors: Բոլոր իրավունքները պահպանված են:</translation>
 <translation id="8619360774459241877">Chromium-ի գործարկում...</translation>
 <translation id="8621669128220841554">Անհայտ սխալի պատճառով տեղադրումը չհաջողվեց: Նորից ներբեռնեք Chromium-ը:</translation>
diff --git a/chrome/app/resources/chromium_strings_id.xtb b/chrome/app/resources/chromium_strings_id.xtb
index 6ab603e9..013c97ba 100644
--- a/chrome/app/resources/chromium_strings_id.xtb
+++ b/chrome/app/resources/chromium_strings_id.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Tentang &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium sudah diperbarui</translation>
 <translation id="2983934633046890458">Chromium mencoba mengedit sandi.</translation>
+<translation id="3032706164202344641">Chromium tidak dapat memeriksa sandi Anda. Coba lagi nanti.</translation>
 <translation id="3032787606318309379">Menambahkan Chromium...</translation>
 <translation id="3068515742935458733">Bantu Chromium menjadi lebih baik dengan mengirim laporan kerusakan dan <ph name="UMA_LINK" /> ke Google</translation>
 <translation id="3103660991484857065">Pemasang gagal membatalkan kompresi arsip. Download Chromium lagi.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Logo Chromium</translation>
 <translation id="3639635944603682591">Data browsing pengguna ini akan dihapus dari perangkat ini. Untuk memulihkan data, login ke Chromium sebagai <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Update baru untuk Chromium telah tersedia dan akan diterapkan segera setelah diluncurkan kembali.}=1{Update baru untuk Chromium telah tersedia dan akan diterapkan segera setelah diluncurkan kembali. Jendela samaran Anda tidak akan dibuka kembali.}other{Update baru untuk Chromium telah tersedia dan akan diterapkan segera setelah diluncurkan kembali. # jendela samaran Anda tidak akan dibuka kembali.}}</translation>
+<translation id="3685209450716071127">Chromium tidak dapat memeriksa sandi Anda. Coba periksa koneksi internet Anda.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administrator meminta Anda meluncurkan kembali Chromium untuk menerapkan update ini}=1{Administrator meminta Anda meluncurkan kembali Chromium untuk menerapkan update ini. Jendela samaran Anda tidak akan dibuka kembali.}other{Administrator meminta Anda meluncurkan kembali Chromium untuk menerapkan update ini. # jendela samaran Anda tidak akan dibuka kembali.}}</translation>
 <translation id="3713809861844741608">Buka link di &amp;tab Chromium baru</translation>
 <translation id="3728336900324680424">Chromium akan mengakses Drive Anda untuk membuat saran di kolom URL</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Luncurkan ulang Chromium dalam 1 hari}other{Luncurkan ulang Chromium dalam # hari}}</translation>
 <translation id="8453117565092476964">Arsip pemasang rusak atau tidak valid. Download Chromium lagi.</translation>
 <translation id="8493179195440786826">Chromium Terlalu Lawas</translation>
+<translation id="8568283329061645092">Chromium dapat memeriksa sandi saat Anda login dengan Akun Google</translation>
 <translation id="8586442755830160949">Hak Cipta <ph name="YEAR" /> Pengarang Chromium. Semua hak dilindungi undang-undang.</translation>
 <translation id="8619360774459241877">Meluncurkan Chromium...</translation>
 <translation id="8621669128220841554">Pemasangan gagal karena kesalahan yang tidak ditentukan. Download Chromium lagi.</translation>
diff --git a/chrome/app/resources/chromium_strings_is.xtb b/chrome/app/resources/chromium_strings_is.xtb
index 91ea3027..c098ee9a 100644
--- a/chrome/app/resources/chromium_strings_is.xtb
+++ b/chrome/app/resources/chromium_strings_is.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Um &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium er uppfært</translation>
 <translation id="2983934633046890458">Chromium er að reyna að breyta aðgangsorðum.</translation>
+<translation id="3032706164202344641">Chromium getur ekki athugað aðgangsorðin þín. Reyndu aftur síðar.</translation>
 <translation id="3032787606318309379">Bætir við Chromium...</translation>
 <translation id="3068515742935458733">Hjálpaðu til við að bæta Chromium með því að senda tilkynningar um hrun og <ph name="UMA_LINK" /> til Google</translation>
 <translation id="3103660991484857065">Uppsetningarforritinu mistókst að afþjappa safnskránni. Sæktu Chromium aftur.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Merki Chromium</translation>
 <translation id="3639635944603682591">Vefskoðunargögnum þessa aðila verður eytt úr þessu tæki. Skráðu þig inn í Chromium sem <ph name="USER_EMAIL" /> til að endurheimta gögn.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Ný útgáfa af Chromium er í boði og hún verður notuð um leið og þú endurræsir.}=1{Ný útgáfa af Chromium er í boði og hún verður notuð um leið og þú endurræsir. Huliðsglugginn enduropnast ekki.}one{Ný útgáfa af Chromium er í boði og hún verður notuð um leið og þú endurræsir. # huliðsgluggi enduropnast ekki.}other{Ný útgáfa af Chromium er í boði og hún verður notuð um leið og þú endurræsir. # huliðsgluggar enduropnast ekki.}}</translation>
+<translation id="3685209450716071127">Chromium getur ekki athugað aðgangsorðin þín. Athugaðu nettenginguna þína.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Kerfisstjórinn þinn vill að þú endurræsir Chromium til að setja upp þessa uppfærslu}=1{Kerfisstjórinn þinn vill að þú endurræsir Chromium til að setja upp þessa uppfærslu. Huliðsglugginn enduropnast ekki.}one{Kerfisstjórinn þinn vill að þú endurræsir Chromium til að setja upp þessa uppfærslu. # huliðsgluggi enduropnast ekki.}other{Kerfisstjórinn þinn vill að þú endurræsir Chromium til að setja upp þessa uppfærslu. # huliðsgluggar enduropnast ekki.}}</translation>
 <translation id="3713809861844741608">Opna &amp;tengil í nýjum Chromium flipa</translation>
 <translation id="3728336900324680424">Chromium mun fá aðgang að svæðinu þínu á Drive til þess að bjóða upp á tillögur í veffangastikunni</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Endurræstu Chromium innan dags}one{Endurræstu Chromium innan # dags}other{Endurræstu Chromium innan # daga}}</translation>
 <translation id="8453117565092476964">Uppsetningarsafnskráin er skemmd eða ógild. Sæktu Chromium aftur.</translation>
 <translation id="8493179195440786826">Chromium er úrelt</translation>
+<translation id="8568283329061645092">Chromium getur athugað aðgangsorðin þín þegar þú skráir þig inn með Google reikningnum þínum</translation>
 <translation id="8586442755830160949">Höfundarréttur <ph name="YEAR" /> höfundar Chromium. Allur réttur áskilinn.</translation>
 <translation id="8619360774459241877">Ræsir Chromium...</translation>
 <translation id="8621669128220841554">Uppsetning mistókst vegna ótilgreindrar villu. Sæktu Chromium aftur.</translation>
diff --git a/chrome/app/resources/chromium_strings_it.xtb b/chrome/app/resources/chromium_strings_it.xtb
index 40db147..bf31e34e 100644
--- a/chrome/app/resources/chromium_strings_it.xtb
+++ b/chrome/app/resources/chromium_strings_it.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Informazioni su &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium è aggiornato</translation>
 <translation id="2983934633046890458">Chromium sta cercando di modificare le password.</translation>
+<translation id="3032706164202344641">Chromium non può controllare le tue password. Riprova più tardi.</translation>
 <translation id="3032787606318309379">Aggiunta a Chromium in corso...</translation>
 <translation id="3068515742935458733">Aiutaci a migliorare Chromium inviando a Google rapporti sugli arresti anomali e <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Il programma di installazione non è riuscito a decomprimere l'archivio. Scarica di nuovo Chromium.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Logo di Chromium</translation>
 <translation id="3639635944603682591">I dati di navigazione di questa persona verranno eliminati dal dispositivo. Per recuperare i dati, accedi a Chromium con il nome utente <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{È disponibile un nuovo aggiornamento di Chromium che verrà installato appena eseguirai il riavvio.}=1{È disponibile un nuovo aggiornamento di Chromium che verrà installato appena eseguirai il riavvio. La finestra di navigazione in incognito non verrà riaperta.}other{È disponibile un nuovo aggiornamento di Chromium che verrà installato appena eseguirai il riavvio. Le # finestre di navigazione in incognito non verranno riaperte.}}</translation>
+<translation id="3685209450716071127">Chromium non può controllare le tue password. Prova a controllare la connessione a Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{L'amministratore richiede il riavvio di Chromium per installare questo aggiornamento}=1{L'amministratore richiede il riavvio di Chromium per installare questo aggiornamento. La finestra di navigazione in incognito non verrà riaperta.}other{L'amministratore richiede il riavvio di Chromium per installare questo aggiornamento. Le # finestre di navigazione in incognito non verranno riaperte.}}</translation>
 <translation id="3713809861844741608">Apri link in una nuova &amp;scheda di Chromium</translation>
 <translation id="3728336900324680424">Chromium accederà al tuo Drive per inserire suggerimenti nella barra degli indirizzi</translation>
@@ -207,6 +209,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Riavvia Chromium entro un giorno}other{Riavvia Chromium entro # giorni}}</translation>
 <translation id="8453117565092476964">L'archivio di installazione è danneggiato o non valido. Scarica di nuovo Chromium.</translation>
 <translation id="8493179195440786826">Chromium non è aggiornato</translation>
+<translation id="8568283329061645092">Chromium può controllare le tue password quando accedi con il tuo Account Google</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. Tutti i diritti riservati.</translation>
 <translation id="8619360774459241877">Avvio di Chromium...</translation>
 <translation id="8621669128220841554">Installazione non riuscita a causa di un errore imprecisato. Scarica di nuovo Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb
index 49bcc34..cc4142f 100644
--- a/chrome/app/resources/chromium_strings_iw.xtb
+++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">‏מידע על &amp;Chromium‏</translation>
 <translation id="2977470724722393594">‏Chromium‏ מעודכן</translation>
 <translation id="2983934633046890458">‏Chromium מנסה לערוך את הסיסמאות.</translation>
+<translation id="3032706164202344641">‏Chromium לא יכול לבדוק את הסיסמאות שלך. כדאי לנסות שוב מאוחר יותר.</translation>
 <translation id="3032787606318309379">‏הוספה ל-Chromium</translation>
 <translation id="3068515742935458733">‏עזור לשפר את Chromium על ידי שליחת דוחות קריסה ו-<ph name="UMA_LINK" /> אל Google</translation>
 <translation id="3103660991484857065">‏המתקין לא הצליח לבטל את דחיסת הארכיון. הורד שוב את Chromium.</translation>
@@ -61,6 +62,7 @@
 <translation id="358997566136285270">‏לוגו של Chromium</translation>
 <translation id="3639635944603682591">‏נתוני הגלישה של האדם הזה יימחקו מהמכשיר. כדי לשחזר את הנתונים, יש להיכנס ל-Chromium בתור <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{‏יש עדכון חדש בשביל Chromium והמערכת תחיל אותו ברגע שתבוצע הפעלה מחדש.}=1{‏יש עדכון חדש בשביל Chromium והמערכת תחיל אותו ברגע שתבוצע הפעלה מחדש. החלון האנונימי לא ייפתח מחדש.}two{‏יש עדכון חדש בשביל Chromium והמערכת תחיל אותו ברגע שתבוצע הפעלה מחדש. # החלונות האנונימיים לא ייפתחו מחדש.}many{‏יש עדכון חדש בשביל Chromium והמערכת תחיל אותו ברגע שתבוצע הפעלה מחדש. # החלונות האנונימיים לא ייפתחו מחדש.}other{‏יש עדכון חדש בשביל Chromium והמערכת תחיל אותו ברגע שתבוצע הפעלה מחדש. # החלונות האנונימיים לא ייפתחו מחדש.}}</translation>
+<translation id="3685209450716071127">‏Chromium לא יכול לבדוק את הסיסמאות שלך. יש לבדוק את החיבור לאינטרנט.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{‏מנהל המערכת מבקש להפעיל מחדש את Chromium כדי להחיל את העדכון הזה}=1{‏מנהל המערכת מבקש להפעיל מחדש את Chromium כדי להחיל את העדכון הזה. החלון האנונימי לא ייפתח מחדש.}two{‏מנהל המערכת מבקש להפעיל מחדש את Chromium כדי להחיל את העדכון הזה. # החלונות האנונימיים לא ייפתחו מחדש.}many{‏מנהל המערכת מבקש להפעיל מחדש את Chromium כדי להחיל את העדכון הזה. # החלונות האנונימיים לא ייפתחו מחדש.}other{‏מנהל המערכת מבקש להפעיל מחדש את Chromium כדי להחיל את העדכון הזה. # החלונות האנונימיים לא ייפתחו מחדש.}}</translation>
 <translation id="3713809861844741608">‏פתח את הקישור ב&amp;כרטיסיית Chromium חדשה</translation>
 <translation id="3728336900324680424">‏Chromium ייגש ל-Drive שלך כדי להציג הצעות בשורת כתובת האתר</translation>
@@ -206,6 +208,7 @@
 <translation id="8417404458978023919">{0,plural, =1{‏צריך להפעיל מחדש את Chromium בתוך יום אחד}two{‏צריך להפעיל מחדש את Chromium בתוך # ימים}many{‏צריך להפעיל מחדש את Chromium בתוך # ימים}other{‏צריך להפעיל מחדש את Chromium בתוך # ימים}}</translation>
 <translation id="8453117565092476964">‏הארכיון של המתקין פגום או שאינו חוקי. הורד שוב את Chromium.</translation>
 <translation id="8493179195440786826">‏Chromium אינו מעודכן</translation>
+<translation id="8568283329061645092">‏Chromium יכול לבדוק את הסיסמאות כשנכנסים באמצעות חשבון Google</translation>
 <translation id="8586442755830160949">‏Copyright <ph name="YEAR" /> The Chromium Authors. כל הזכויות שמורות.</translation>
 <translation id="8619360774459241877">‏הפעלת Chromium מתבצעת...</translation>
 <translation id="8621669128220841554">‏ההתקנה נכשלה בשל שגיאה לא מזוהה. הורד שוב את Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_ja.xtb b/chrome/app/resources/chromium_strings_ja.xtb
index ae329be..59159ed 100644
--- a/chrome/app/resources/chromium_strings_ja.xtb
+++ b/chrome/app/resources/chromium_strings_ja.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Chromium について(&amp;C)</translation>
 <translation id="2977470724722393594">Chromium は最新版です</translation>
 <translation id="2983934633046890458">Chromium でパスワードを編集しようとしています。</translation>
+<translation id="3032706164202344641">Chromium でパスワードを確認できません。しばらくしてからもう一度お試しください。</translation>
 <translation id="3032787606318309379">Chromium に追加...</translation>
 <translation id="3068515742935458733">障害レポートと<ph name="UMA_LINK" />を Google に自動送信して Chromium の機能向上に役立てる</translation>
 <translation id="3103660991484857065">インストーラ アーカイブを解凍できませんでした。Chromium をダウンロードし直してください。</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium ロゴ</translation>
 <translation id="3639635944603682591">この操作を行うと、このユーザーの閲覧データがこのデバイスから削除されます。データを復元するには、<ph name="USER_EMAIL" /> として Chromium にログインしてください。</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium の新しいアップデートを利用できます。再起動するとすぐにアップデートが適用されます。}=1{Chromium の新しいアップデートを利用できます。再起動するとすぐにアップデートが適用されます。シークレット ウィンドウは、再起動後は自動的には開きません。}other{Chromium の新しいアップデートを利用できます。再起動するとすぐにアップデートが適用されます。現在開いている # 個のシークレット ウィンドウは、再起動後は自動的には開きません。}}</translation>
+<translation id="3685209450716071127">Chromium がパスワードを確認できません。インターネット接続を確認してみてください。</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{管理者が、このアップデートを適用するために Chromium を再起動するよう求めています}=1{管理者が、このアップデートを適用するために Chromium を再起動するよう求めています。シークレット ウィンドウは、再起動後は自動的には開きません。}other{管理者が、このアップデートを適用するために Chromium を再起動するよう求めています。現在開いている # 個のシークレット ウィンドウは、再起動後は自動的には開きません。}}</translation>
 <translation id="3713809861844741608">新しい Chromium タブでリンクを開く(&amp;T)</translation>
 <translation id="3728336900324680424">Chromium からお客様のドライブにアクセスして、アドレスバーに候補を表示します</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{1 日以内に Chromium を再起動してください}other{# 日以内に Chromium を再起動してください}}</translation>
 <translation id="8453117565092476964">インストーラ アーカイブが壊れているか無効です。Chromium をダウンロードし直してください。</translation>
 <translation id="8493179195440786826">Chromium は古いバージョンです</translation>
+<translation id="8568283329061645092">Google アカウントでログインすると、Chromium がパスワードを確認できます。</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. All rights reserved.</translation>
 <translation id="8619360774459241877">Chromium を起動しています...</translation>
 <translation id="8621669128220841554">原因不明のエラーによりインストールに失敗しました。Chromium をもう一度ダウンロードしてください。</translation>
diff --git a/chrome/app/resources/chromium_strings_ka.xtb b/chrome/app/resources/chromium_strings_ka.xtb
index 49b0912..2de30193 100644
--- a/chrome/app/resources/chromium_strings_ka.xtb
+++ b/chrome/app/resources/chromium_strings_ka.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Chromium-ის შ&amp;ესახებ</translation>
 <translation id="2977470724722393594">Chromium განახლებულია</translation>
 <translation id="2983934633046890458">Chromium ცდილობს პაროლების რედაქტირებას.</translation>
+<translation id="3032706164202344641">Chromium ვერ ახერხებს პაროლების შემოწმებას. ცადეთ მოგვიანებით.</translation>
 <translation id="3032787606318309379">Chromium-ში დამატება…</translation>
 <translation id="3068515742935458733">დაგვეხმარეთ Chromium-ის გაუმჯობესებაში: გამოგზავნეთ მოხსენებები შეცდომების და <ph name="UMA_LINK" />-ის შესახებ Google-ში</translation>
 <translation id="3103660991484857065">ინსტალაციის პროგრამამ ვერ ამოიღო ფაილები არქივიდან. ხელახლა ჩამოტვირთეთ Chromium.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium-ის ლოგო</translation>
 <translation id="3639635944603682591">ამ პიროვნების დათვალიერების მონაცემები წაიშლება ამ მოწყობილობიდან. მონაცემების აღსადგენად შედით Chromium-ში, როგორც <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{ხელმისაწვდომია Chromium-ის განახლება, რომელიც მას მიესადაგება ხელახლა გაშვებისთანავე.}=1{ხელმისაწვდომია Chromium-ის განახლება, რომელიც მას მიესადაგება ხელახლა გაშვებისთანავე. თქვენი ინკოგნიტო ფანჯარა ხელახლა არ გაიხსნება.}other{ხელმისაწვდომია Chromium-ის განახლება, რომელიც მას მიესადაგება ხელახლა გაშვებისთანავე. თქვენი # ინკოგნიტო ფანჯარა ხელახლა არ გაიხსნება.}}</translation>
+<translation id="3685209450716071127">Chromium ვერ ახერხებს პაროლების შემოწმებას. შეამოწმეთ კავშირი ინტერნეტთან.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ამ განახლების მისასადაგებლად ადმინისტრატორი გთხოვთ Chromium-ის ხელახლა გაშვებას}=1{ამ განახლების მისასადაგებლად ადმინისტრატორი გთხოვთ Chromium-ის ხელახლა გაშვებას. თქვენი ინკოგნიტო ფანჯარა ხელახლა არ გაიხსნება.}other{ამ განახლების მისასადაგებლად ადმინისტრატორი გთხოვთ Chromium-ის ხელახლა გაშვებას. თქვენი # ინკოგნიტო ფანჯარა ხელახლა არ გაიხსნება.}}</translation>
 <translation id="3713809861844741608">ბმულის გახსნა Chromium-ის ახალ ჩა&amp;ნართში</translation>
 <translation id="3728336900324680424">Chromium-ს ექნება წვდომა თქვენს Drive-ზე მისამართთა ზოლში შემოთავაზებების უზრუნველსაყოფად</translation>
@@ -209,6 +211,7 @@
 <translation id="8417404458978023919">{0,plural, =1{ხელახლა გაუშვით Chromium დღის განმავლობაში}other{ხელახლა გაუშვით Chromium # დღის განმავლობაში}}</translation>
 <translation id="8453117565092476964">ინსტალაციის პროგრამის არქივი დაზიანებულია ან არასწორია. ხელახლა ჩამოტვირთეთ Chromium.</translation>
 <translation id="8493179195440786826">Chromium მოძველდა</translation>
+<translation id="8568283329061645092">პაროლების Chromium-ის მეშვეობით შესამოწმებლად შედით სისტემაში თქვენი Google ანგარიშით</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. ყველა უფლება დაცულია.</translation>
 <translation id="8619360774459241877">მიმდინარეობს Chromium-ის გაშვება…</translation>
 <translation id="8621669128220841554">ინსტალაცია ვერ განხორციელდა გაურკვეველი შეცდომის გამო. ხელახლა ჩამოტვირთეთ Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_kk.xtb b/chrome/app/resources/chromium_strings_kk.xtb
index 721efe47..06f5db78 100644
--- a/chrome/app/resources/chromium_strings_kk.xtb
+++ b/chrome/app/resources/chromium_strings_kk.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;Chromium туралы</translation>
 <translation id="2977470724722393594">Chromium жаңартылған</translation>
 <translation id="2983934633046890458">Chromium браузері құпия сөздерді өзгерткісі келеді.</translation>
+<translation id="3032706164202344641">Chromium сіздің құпия сөздеріңізді тексере алмай жатыр. Кейінірек қайталап көріңіз.</translation>
 <translation id="3032787606318309379">Chromium жүйесіне қосылуда…</translation>
 <translation id="3068515742935458733">Google компаниясына жаңылыс туралы есептер және <ph name="UMA_LINK" /> жіберу арқылы Chromium жақсартуға көмектесіңіз</translation>
 <translation id="3103660991484857065">Орнату құралы мұрағаттан шығара алмады. Chromium қолданбасын қайта жүктеңіз.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium логотипі</translation>
 <translation id="3639635944603682591">Бұл пайдаланушының браузерді пайдалану деректері құрылғыдан жойылады. Деректерді қалпына келтіру үшін Chromium браузеріне <ph name="USER_EMAIL" /> болып кіріңіз.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium браузерінің жаңа нұсқасы шықты. Ол браузерді өшіріп, қайта іске қосқанда орнатылады.}=1{Chromium браузерінің жаңа нұсқасы шықты. Ол браузерді өшіріп, қайта іске қосқанда орнатылады. Инкогнито терезесі қайта ашылмайды.}other{Chromium браузерінің жаңа нұсқасы шықты. Ол браузерді өшіріп, қайта іске қосқанда орнатылады. # инкогнито терезесі қайта ашылмайды.}}</translation>
+<translation id="3685209450716071127">Chromium сіздің құпия сөздеріңізді тексере алмай жатыр. Интернет байланысын тексеріп көріңіз.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Жаңартылған нұсқасын қолдану үшін әкімші Chromium-ді қайта іске қосуыңызды сұрайды.}=1{Жаңартылған нұсқасын қолдану үшін әкімші Chromium-ді қайта іске қосуыңызды сұрайды. Инкогнито терезесі қайта ашылмайды.}other{Жаңартылған нұсқасын қолдану үшін әкімші Chromium-ді қайта іске қосуыңызды сұрайды. # инкогнито терезесі қайта ашылмайды.}}</translation>
 <translation id="3713809861844741608">Сілтемені жаңа Chromium қойындысында ашу</translation>
 <translation id="3728336900324680424">Chromium мекенжай жолағында ұсыныстар жасау үшін Drive дискісіне кіреді</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium браузерін бір күннің ішінде қайта іске қосыңыз}other{Chromium браузерін # күннің ішінде қайта іске қосыңыз}}</translation>
 <translation id="8453117565092476964">Орнатқыш мұрағаты бүлінген немесе жарамсыз. Chromium қайтадан жүктеңіз.</translation>
 <translation id="8493179195440786826">Chromium ескірген</translation>
+<translation id="8568283329061645092">Google есептік жазбаңызбен кіргенде, Chromium сіздің құпия сөздеріңізді тексере алады.</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. Барлық құқықтар қорғалған.</translation>
 <translation id="8619360774459241877">Chromium іске қосылуда…</translation>
 <translation id="8621669128220841554">Орнату анықталмаған қате себебінен сәтсіз аяқталды. Chromium браузерін қайта жүктеңіз.</translation>
diff --git a/chrome/app/resources/chromium_strings_km.xtb b/chrome/app/resources/chromium_strings_km.xtb
index c1248ea..64acd54b 100644
--- a/chrome/app/resources/chromium_strings_km.xtb
+++ b/chrome/app/resources/chromium_strings_km.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">អំពី Chromium</translation>
 <translation id="2977470724722393594">Chromium នេះជា​កំណែថ្មី​ហើយ</translation>
 <translation id="2983934633046890458">Chromium កំពុង​ព្យាយាម​កែ​ពាក្យសម្ងាត់​។</translation>
+<translation id="3032706164202344641">Chromium មិនអាចពិនិត្យ​ពាក្យសម្ងាត់របស់អ្នកបានទេ។ សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ។</translation>
 <translation id="3032787606318309379">កំពុងបន្ថែមទៅ Chromium...</translation>
 <translation id="3068515742935458733">ជួយធ្វើឲ្យ Chromium ប្រសើរជាងមុនដោយការផ្ញើរបាយការណ៍គាំង និង <ph name="UMA_LINK" /> ទៅ Google</translation>
 <translation id="3103660991484857065">កម្មវិធីតំឡើងបានបរាជ័យក្នុងការពន្លាបណ្ណាសារ។ សូមទាញយក Chromium ម្តងទៀត។</translation>
@@ -66,6 +67,7 @@
 <translation id="358997566136285270">និមិត្តសញ្ញា Chromium</translation>
 <translation id="3639635944603682591">ទិន្នន័យរុករក​របស់​បុគ្គលនេះ​នឹង​លុបចេញ​ពីឧបករណ៍​នេះ។ ដើម្បីស្ដារ​ទិន្នន័យនេះ សូមចូល Chromium ជា <ph name="USER_EMAIL" /> ។</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{មានកំណែថ្មី​សម្រាប់ Chromium ​ហើយ ហើយកំណែថ្មីនេះ​នឹង​ប្រើភ្លាមៗ ​បន្ទាប់ពី​អ្នកចាប់ផ្ដើម​ឡើងវិញ។}=1{មានកំណែថ្មី​សម្រាប់ Chromium ​ហើយ ហើយកំណែថ្មីនេះ​នឹង​ប្រើភ្លាមៗ ​បន្ទាប់ពី​អ្នកចាប់ផ្ដើម​ឡើងវិញ។ ផ្ទាំងឯកជនរបស់អ្នក​នឹង​មិនបើកឡើងវិញទេ។}other{មានកំណែថ្មី​សម្រាប់ Chromium ​ហើយ ហើយកំណែថ្មីនេះ​នឹង​ប្រើភ្លាមៗ ​បន្ទាប់ពី​អ្នកចាប់ផ្ដើម​ឡើងវិញ។ ផ្ទាំងឯកជន # របស់អ្នក​នឹងមិន​បើកឡើងវិញទេ។}}</translation>
+<translation id="3685209450716071127">Chromium មិនអាចពិនិត្យ​ពាក្យសម្ងាត់របស់អ្នកបានទេ។ សូមសាកល្បងពិនិត្យ​ការតភ្ជាប់អ៊ីនធឺណិត​របស់អ្នក។</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{អ្នក​គ្រប់គ្រង​របស់អ្នក​ស្នើឱ្យអ្នក​ចាប់ផ្ដើម Chromium ឡើងវិញ​ ដើម្បីប្រើ​កំណែថ្មីនេះ}=1{អ្នក​គ្រប់គ្រង​របស់អ្នក​ស្នើឱ្យអ្នក​ចាប់ផ្ដើម Chromium ឡើងវិញ​ ដើម្បីប្រើ​កំណែថ្មីនេះ។ ផ្ទាំងឯកជនរបស់អ្នក​នឹង​មិនបើកឡើងវិញទេ។}other{អ្នក​គ្រប់គ្រង​របស់អ្នក​ស្នើឱ្យអ្នក​ចាប់ផ្ដើម Chromium ឡើងវិញ​ ដើម្បីប្រើ​កំណែថ្មីនេះ។ ផ្ទាំងឯកជន # របស់អ្នក​នឹងមិន​បើកឡើងវិញទេ។}}</translation>
 <translation id="3713809861844741608">បើក​តំណ​នៅក្នុងផ្ទាំង​ Chromium ថ្មី</translation>
 <translation id="3728336900324680424">Chromium នឹងចូលប្រើ​ថាស​របស់អ្នក ដើម្បី​ធ្វើការណែនាំ​នៅក្នុង​របារ​អាសយដ្ឋាន</translation>
@@ -211,6 +213,7 @@
 <translation id="8417404458978023919">{0,plural, =1{ចាប់ផ្ដើម Chromium ឡើងវិញ​ក្នុងរយៈពេល​មួយ​ថ្ងៃទៀត}other{ចាប់ផ្ដើម Chromium ឡើងវិញ​ក្នុងរយៈពេល # ថ្ងៃទៀត}}</translation>
 <translation id="8453117565092476964">កម្មវិធីតំឡើងបណ្ណាសារមានបញ្ហា ឬគ្មានសុពលភាព។ សូមទាញយក Google Chromium ម្តងទៀត។</translation>
 <translation id="8493179195440786826">Chromium ហួសសម័យហើយ</translation>
+<translation id="8568283329061645092">Chromium អាចពិនិត្យពាក្យសម្ងាត់របស់អ្នក នៅពេលអ្នកចូល​ដោយប្រើគណនី Google របស់អ្នក</translation>
 <translation id="8586442755830160949">រក្សាសិទ្ធិគ្រប់យ៉ាងដោយផលិតករ Chromium។ រក្សាសិទ្ធិ <ph name="YEAR" />។</translation>
 <translation id="8619360774459241877">កំពុង​ចាប់ផ្ដើម Chromium...</translation>
 <translation id="8621669128220841554">ការតំឡើងបានបរាជ័យដោយសារកំហុសឆ្គងដែលមិនជាក់លាក់។ សូមទាញយក Chromium ម្តងទៀត។</translation>
diff --git a/chrome/app/resources/chromium_strings_kn.xtb b/chrome/app/resources/chromium_strings_kn.xtb
index e6e4375b..1a59d7cc 100644
--- a/chrome/app/resources/chromium_strings_kn.xtb
+++ b/chrome/app/resources/chromium_strings_kn.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">&amp;Chromium ಕುರಿತು</translation>
 <translation id="2977470724722393594">Chromium ಅಪ್‌ ಟು ಡೇಟ್‌ ಆಗಿದೆ</translation>
 <translation id="2983934633046890458">Chromium, ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ.</translation>
+<translation id="3032706164202344641">Chromium ಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="3032787606318309379">Chromium ಗೆ ಸೇರಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="3068515742935458733">Google ಗೆ ಕ್ರ್ಯಾಶ್ ವರದಿಗಳನ್ನು ಮತ್ತು <ph name="UMA_LINK" /> ಕಳುಹಿಸುವುದರಿಂದ Chromium ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಿ</translation>
 <translation id="3103660991484857065">ಆರ್ಕೈವ್ ಅನ್ನು ಸಂಕ್ಷೇಪ ಮಾಡದಿರಲು ಸ್ಥಾಪಕ ವಿಫಲಗೊಂಡಿದೆ. ದಯವಿಟ್ಟು Chromium ಅನ್ನು ಪುನಃ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ.</translation>
@@ -61,6 +62,7 @@
 <translation id="358997566136285270">Chromium ಲೋಗೋ</translation>
 <translation id="3639635944603682591">ಈ ವ್ಯಕ್ತಿಯ ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು ಈ ಸಾಧನದಿಂದ ಅಳಿಸಲಾಗುತ್ತದೆ. ಡೇಟಾವನ್ನು ಪುನಃ ಪಡೆದುಕೊಳ್ಳಲು, Chromium ನಲ್ಲಿ <ph name="USER_EMAIL" /> ಎಂದು ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium ಗಾಗಿ ಹೊಸತೊಂದು ಅಪ್‌ಡೇಟ್ ಲಭ್ಯವಿದೆ ಮತ್ತು ನೀವು ಮರುಪ್ರಾರಂಭಿಸಿದ ಕೂಡಲೇ ಅದನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.}=1{Chromium ಗಾಗಿ ಹೊಸತೊಂದು ಅಪ್‌ಡೇಟ್ ಲಭ್ಯವಿದೆ ಮತ್ತು ನೀವು ಮರುಪ್ರಾರಂಭಿಸಿದ ಕೂಡಲೇ ಅದನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ನಿಮ್ಮ ಅಜ್ಞಾತ ವಿಂಡೋವನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}one{Chromium ಗಾಗಿ ಹೊಸತೊಂದು ಅಪ್‌ಡೇಟ್ ಲಭ್ಯವಿದೆ ಮತ್ತು ನೀವು ಮರುಪ್ರಾರಂಭಿಸಿದ ಕೂಡಲೇ ಅದನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ನಿಮ್ಮ # ಅಜ್ಞಾತ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}other{Chromium ಗಾಗಿ ಹೊಸತೊಂದು ಅಪ್‌ಡೇಟ್ ಲಭ್ಯವಿದೆ ಮತ್ತು ನೀವು ಮರುಪ್ರಾರಂಭಿಸಿದ ಕೂಡಲೇ ಅದನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ನಿಮ್ಮ # ಅಜ್ಞಾತ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}}</translation>
+<translation id="3685209450716071127">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು Chromium ಗೆ ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ನೋಡಿ.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ಈ ಅಪ್‌ಡೇಟ್‌ ಅನ್ವಯಿಸಲು ನೀವು Chromium ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕೆಂದು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ವಿನಂತಿಸಿಕೊಂಡಿದ್ದಾರೆ}=1{ಈ ಅಪ್‌ಡೇಟ್‌ ಅನ್ವಯಿಸಲು ನೀವು Chromium ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕೆಂದು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ವಿನಂತಿಸಿಕೊಂಡಿದ್ದಾರೆ. ನಿಮ್ಮ ಅಜ್ಞಾತ ವಿಂಡೋವನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}one{ಈ ಅಪ್‌ಡೇಟ್‌ ಅನ್ವಯಿಸಲು ನೀವು Chromium ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕೆಂದು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ವಿನಂತಿಸಿಕೊಂಡಿದ್ದಾರೆ. ನಿಮ್ಮ # ಅಜ್ಞಾತ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}other{ಈ ಅಪ್‌ಡೇಟ್‌ ಅನ್ವಯಿಸಲು ನೀವು Chromium ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕೆಂದು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ವಿನಂತಿಸಿಕೊಂಡಿದ್ದಾರೆ. ನಿಮ್ಮ # ಅಜ್ಞಾತ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}}</translation>
 <translation id="3713809861844741608">ಹೊಸ Chromium &amp;ಟ್ಯಾಬ್‌ನಲ್ಲಿ ಲಿಂಕ್ ತೆರೆಯಿರಿ</translation>
 <translation id="3728336900324680424">ವಿಳಾಸಪಟ್ಟಿಯಲ್ಲಿ ಸಲಹೆ ನೀಡಲು, Chromium ನಿಮ್ಮ ಡ್ರೈವ್‌ಗೆ ಪ್ರವೇಶಿಸುತ್ತದೆ</translation>
@@ -201,6 +203,7 @@
 <translation id="8417404458978023919">{0,plural, =1{ಒಂದು ದಿನದ ಒಳಗೆ Chromium ಮರುಪ್ರಾರಂಭಿಸಿ}one{# ದಿನಗಳ ಒಳಗೆ Chromium ಮರುಪ್ರಾರಂಭಿಸಿ}other{# ದಿನಗಳ ಒಳಗೆ Chromium ಮರುಪ್ರಾರಂಭಿಸಿ}}</translation>
 <translation id="8453117565092476964">ಸ್ಥಾಪಕ ಆರ್ಕೈವ್ ದೋಷಪೂರಿತವಾಗಿದೆ ಅಥವಾ ಅಮಾನ್ಯವಾಗಿದೆ. ದಯವಿಟ್ಟು Chromium ಅನ್ನು ಪುನಃ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ.</translation>
 <translation id="8493179195440786826">Chromium ನ ಅವಧಿ ಮುಗಿದಿದೆ</translation>
+<translation id="8568283329061645092">ನೀವು Google ಖಾತೆಯ ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, Chromium ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಬಲ್ಲದು</translation>
 <translation id="8586442755830160949">ಹಕ್ಕುಸ್ವಾಮ್ಯ <ph name="YEAR" /> Chromium ಲೇಖಕರು. ಎಲ್ಲಾ ಹಕ್ಕುಗಳನ್ನು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ.</translation>
 <translation id="8619360774459241877">Chromium ಅನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="8621669128220841554">ಅನಿರ್ದಿಷ್ಟ ದೋಷದಿಂದಾಗಿ ಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೊಮ್ಮೆ Chromium ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ.</translation>
diff --git a/chrome/app/resources/chromium_strings_ko.xtb b/chrome/app/resources/chromium_strings_ko.xtb
index 60da258d..890b10d 100644
--- a/chrome/app/resources/chromium_strings_ko.xtb
+++ b/chrome/app/resources/chromium_strings_ko.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Chromium 정보</translation>
 <translation id="2977470724722393594">Chromium이 최신 버전임</translation>
 <translation id="2983934633046890458">Chromium에서 비밀번호를 수정하려고 합니다.</translation>
+<translation id="3032706164202344641">Chromium에서 비밀번호를 확인할 수 없습니다. 나중에 다시 시도하세요.</translation>
 <translation id="3032787606318309379">Chromium에 추가하는 중...</translation>
 <translation id="3068515742935458733">비정상 종료 보고서와 <ph name="UMA_LINK" />을(를) Google로 전송하여 Chromium 개선에 참여합니다.</translation>
 <translation id="3103660991484857065">설치 프로그램이 보관 파일 압축 풀기에 실패했습니다. Chromium을 다시 다운로드하세요.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium 로고</translation>
 <translation id="3639635944603682591">선택한 사용자의 인터넷 사용 기록이 이 기기에서 삭제됩니다. 데이터를 복구하려면 <ph name="USER_EMAIL" />(으)로 Chromium에 로그인하세요.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{새 Chromium 업데이트가 있습니다. Chromium을 다시 실행하면 업데이트가 바로 적용됩니다.}=1{새 Chromium 업데이트가 있습니다. Chromium을 다시 실행하면 업데이트가 바로 적용됩니다. 시크릿 창이 다시 열리지 않습니다.}other{새 Chromium 업데이트가 있습니다. Chromium을 다시 실행하면 업데이트가 바로 적용됩니다. 시크릿 창 #개가 다시 열리지 않습니다.}}</translation>
+<translation id="3685209450716071127">Chromium에서 비밀번호를 확인할 수 없습니다. 인터넷 연결 상태를 확인하세요.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{관리자가 이 업데이트를 적용하려면 사용자가 Chromium을 다시 시작하도록 설정했습니다.}=1{관리자가 이 업데이트를 적용하려면 사용자가 Chromium을 다시 시작하도록 설정했습니다. 시크릿 창이 다시 열리지 않습니다.}other{관리자가 이 업데이트를 적용하려면 사용자가 Chromium을 다시 시작하도록 설정했습니다. 시크릿 창 #개가 다시 열리지 않습니다.}}</translation>
 <translation id="3713809861844741608">새 Chromium 탭에서 링크 열기(&amp;T)</translation>
 <translation id="3728336900324680424">Chromium에서 내 드라이브에 액세스하여 주소 표시줄에 추천 검색어를 표시합니다.</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{1일 이내로 Chromium을 다시 시작해 주세요}other{#일 이내로 Chromium을 다시 시작해 주세요}}</translation>
 <translation id="8453117565092476964">설치 프로그램 아카이브가 손상되었거나 잘못되었습니다. Chromium을 다시 다운로드하세요.</translation>
 <translation id="8493179195440786826">Chromium이 이전 버전임</translation>
+<translation id="8568283329061645092">Google 계정으로 로그인하면 Chromium에서 비밀번호를 확인할 수 있습니다.</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. All rights reserved.</translation>
 <translation id="8619360774459241877">Chromium 실행 중...</translation>
 <translation id="8621669128220841554">알 수 없는 오류로 인해 설치에 실패했습니다. Chromium을 다시 다운로드하세요.</translation>
diff --git a/chrome/app/resources/chromium_strings_ky.xtb b/chrome/app/resources/chromium_strings_ky.xtb
index 66b2649..1b0cfc6 100644
--- a/chrome/app/resources/chromium_strings_ky.xtb
+++ b/chrome/app/resources/chromium_strings_ky.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;Chromium жөнүндө</translation>
 <translation id="2977470724722393594">Chromium жаңыртылган</translation>
 <translation id="2983934633046890458">Chromium cырсөздөрдү өзгөртүүгө аракет кылууда.</translation>
+<translation id="3032706164202344641">Chromium сырсөздөрүңүздү текшере албай жатат. Кийинчерээк кайталаңыз.</translation>
 <translation id="3032787606318309379">Chromium'га кошууда…</translation>
 <translation id="3068515742935458733">Google'га автоматтык түрдө каталар жана <ph name="UMA_LINK" /> жөнүндө кабар берип, Chromium'ду өркүндөткөнгө кол кабыш кылыңыз!</translation>
 <translation id="3103660991484857065">Орноткуч архивди чыгара албай койду. Chromium'ду кайра жүктөп алыңыз.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium логотиби</translation>
 <translation id="3639635944603682591">Бул адамдын серептөө дайындары бул түзмөктөн биротоло өчүрүлөт. Дайындарды калыбына келтирүү үчүн, Chromium'га <ph name="USER_EMAIL" /> аккаунту менен кириңиз.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium үчүн жаңыртуу бар. Түзмөгүңүз өчүрүлүп-күйгүзүлгөндөн кийин ал колдонулуп баштайт.}=1{Chromium үчүн жаңыртуу бар. Түзмөгүңүз өчүрүлүп-күйгүзүлгөндөн кийин ал колдонулуп баштайт. Жашыруун терезеңиз кайра ачылбайт.}other{Chromium үчүн жаңыртуу бар. Түзмөгүңүз өчүрүлүп-күйгүзүлгөндөн кийин ал колдонулуп баштайт. # жашыруун терезеңиз кайра ачылбайт.}}</translation>
+<translation id="3685209450716071127">Chromium сырсөздөрүңүздү текшере албай жатат. Интернет байланышын текшерип көрүңүз.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Администраторуңуз жаңыртууну колдонуу үчүн Chromium'ду кайра иштетүүнү суранууда}=1{Администраторуңуз жаңыртууну колдонуу үчүн Chromium'ду кайра иштетүүнү суранууда. Жашыруун терезеңиз кайра ачылбайт.}other{Администраторуңуз жаңыртууну колдонуу үчүн Chromium'ду кайра иштетүүнү суранууда. # жашыруун терезеңиз кайра ачылбайт.}}</translation>
 <translation id="3713809861844741608">Шилтемени жаңы Chromium &amp;өтмөгүндө ачуу</translation>
 <translation id="3728336900324680424">Дарек тилкесинде сунуштарды көрсөтүү үчүн Chromium кызматы Drive сактагычыңызды колдонот</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium 1 күндүн ичинде кайра иштетилет}other{Chromium # күндүн ичинде кайра иштетилет}}</translation>
 <translation id="8453117565092476964">Орноткуч архиви бузулган же жараксыз. Chromium'ду кайра жүктөп алыңыз.</translation>
 <translation id="8493179195440786826">Chromium эскирип калган.</translation>
+<translation id="8568283329061645092">Google аккаунтуңуз менен киргенде Chromium сырсөздөрүңүздү текшерет</translation>
 <translation id="8586442755830160949">Автордук укук <ph name="YEAR" /> Chromium авторлору. Бардык укуктар корголгон.</translation>
 <translation id="8619360774459241877">Chromium иштетилүүдө…</translation>
 <translation id="8621669128220841554">Белгиси катадан улам, орнотулбай калды. Chromium'ду кайра жүктөп алыңыз.</translation>
diff --git a/chrome/app/resources/chromium_strings_lo.xtb b/chrome/app/resources/chromium_strings_lo.xtb
index 90f0f4c..3171f59 100644
--- a/chrome/app/resources/chromium_strings_lo.xtb
+++ b/chrome/app/resources/chromium_strings_lo.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">ກ່ຽວ​ກັບ​ Chromium</translation>
 <translation id="2977470724722393594">Chromium ແມ່ນເວີຊັນໃໝ່ຫຼ້າສຸດແລ້ວ</translation>
 <translation id="2983934633046890458">Chromium ກຳລັງພະຍາຍາມແກ້ໄຂລະຫັດຜ່ານ.</translation>
+<translation id="3032706164202344641">Chromium ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ກະລຸນາລອງໃໝ່ໃນພາຍຫລັງ.</translation>
 <translation id="3032787606318309379">ກໍາລັງເພີ່ມ Chromium...</translation>
 <translation id="3068515742935458733">ຊ່ວຍເຮັດໃຫ້ Chromium ດີຂຶ້ນໂດຍການສົ່ງລາຍງານການ​ຂັດຂ້ອງ ແລະ  <ph name="UMA_LINK" />  ຫາ Google.</translation>
 <translation id="3103660991484857065">ຕົວຕິດຕັ້ງບໍ່ສາມາດ​ຄາຍ​ການບີບອັດຄັງເກັບມ້ຽນ. ກະລຸນາດາວໂຫຼດ Chromium ອີກ.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">ໂລໂກ້ Chromium</translation>
 <translation id="3639635944603682591">ຂໍ້ມູນການທ່ອງເວັບຂອງບຸກຄົນນີ້ຈະຖືກລຶບອອກຈາກອຸປະກອນນີ້. ເພື່ອກູ້ຂໍ້ມູນຄືນມາ, ກະລຸນາເຂົ້າສູ່ລະບົບ Chromium ເປັນ <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{ມີການອັບເດດໃໝ່ສຳລັບ Chromium ແລະ ຈະນຳໃຊ້ໃນທັນທີທີ່ທ່ານເປີດໃຊ້ຄືນໃໝ່.}=1{ມີການອັບເດດໃໝ່ສຳລັບ Chromium ແລະ ຈະນຳໃຊ້ໃນທັນທີທີ່ທ່ານເປີດໃຊ້ຄືນໃໝ່. ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນຂອງທ່ານຈະບໍ່ເປີດຄືນໃໝ່.}other{ມີການອັບເດດໃໝ່ສຳລັບ Chromium ແລະ ຈະນຳໃຊ້ໃນທັນທີທີ່ທ່ານເປີດໃຊ້ຄືນໃໝ່. ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນຂອງທ່ານ # ລາຍການຈະບໍ່ເປີດຄືນໃໝ່.}}</translation>
+<translation id="3685209450716071127">Chromium ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ລອງກວດເບິ່ງການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານ.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານຮ້ອງຂໍໃຫ້ທ່ານເປີດ Chromium ຄືນໃໝ່ເພື່ອນຳໃຊ້ການອັບເດດນີ້}=1{ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານຮ້ອງຂໍໃຫ້ທ່ານເປີດ Chromium ຄືນໃໝ່ເພື່ອນຳໃຊ້ການອັບເດດນີ້. ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນຂອງທ່ານຈະບໍ່ເປີດຄືນໃໝ່.}other{ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານຮ້ອງຂໍໃຫ້ທ່ານເປີດ Chromium ຄືນໃໝ່ເພື່ອນຳໃຊ້ການອັບເດດນີ້. ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນຂອງທ່ານ # ລາຍການຈະບໍ່ເປີດຄືນໃໝ່.}}</translation>
 <translation id="3713809861844741608">ເປີດລິ້ງໃນແຖບ Chromium ໃໝ່</translation>
 <translation id="3728336900324680424">Chromium ຈະເຂົ້າເຖິງ Drive ຂອງທ່ານເພື່ອໃຫ້ຄຳແນະນຳໃນແຖບທີ່ຢູ່</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{ເປີດໃຊ້ Chromium ຄືນໃໝ່ພາຍໃນໜຶ່ງມື້}other{ເປີດໃຊ້ Chromium ຄືນໃໝ່ພາຍໃນ # ມື້}}</translation>
 <translation id="8453117565092476964">ຄັງຕົວຕິດຕັ້ງຖືກເສຍຫາຍ ຫຼືໃຊ້ບໍ່ໄດ້. ກະລຸນາດາວໂຫຼດ Chromium ອີກ.</translation>
 <translation id="8493179195440786826">Chromium ຫຼ້າສະໄໝແລ້ວ</translation>
+<translation id="8568283329061645092">Chromium ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານ ເມື່ອທ່ານເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ Google ຂອງທ່ານໄດ້</translation>
 <translation id="8586442755830160949">ລິຂະສິດ <ph name="YEAR" /> ຜູ້ຂຽນ Chromium. ສະຫງວນລິຂະສິດ.</translation>
 <translation id="8619360774459241877">ກຳລັງເປີດໃຊ້ Chromium...</translation>
 <translation id="8621669128220841554">ການ​ຕິດ​ຕັ້ງ​ບໍ່​ສໍາ​ເລັດ ​ເນື່ອງ​ຈາກ​ຄວາມຜິດພາດທີ່ບໍ່ໄດ້ລະບຸ​. ກະ​ລຸ​ນາ​ດາວ​ໂຫລດ Chromium ອີກ​.</translation>
diff --git a/chrome/app/resources/chromium_strings_lt.xtb b/chrome/app/resources/chromium_strings_lt.xtb
index 25ece09..0b1c4f6 100644
--- a/chrome/app/resources/chromium_strings_lt.xtb
+++ b/chrome/app/resources/chromium_strings_lt.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Apie &amp;„Chromium“</translation>
 <translation id="2977470724722393594">„Chromium“ naujausios versijos</translation>
 <translation id="2983934633046890458">„Chromium“ bando redaguoti slaptažodžius.</translation>
+<translation id="3032706164202344641">„Chromium“ negali patikrinti jūsų slaptažodžių. Vėliau bandykite dar kartą.</translation>
 <translation id="3032787606318309379">Pridedama prie „Chromium“...</translation>
 <translation id="3068515742935458733">Padėkite tobulinti „Chromium“ siųsdami „Google“ strigčių ataskaitas ir <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Diegimo programai nepavyko išpakuoti archyvo. Atsisiųskite „Chromium“ dar kartą.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">„Chromium“ logotipas</translation>
 <translation id="3639635944603682591">Šio asmens naršymo duomenys bus ištrinti iš šio įrenginio. Jei norite atkurti duomenis, prisijunkite prie „Chromium“ kaip <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Pasiekiamas naujas „Chromium“ naujinys. Jis bus pritaikytas, kai paleisite „Chromium“ iš naujo.}=1{Pasiekiamas naujas „Chromium“ naujinys. Jis bus pritaikytas, kai paleisite „Chromium“ iš naujo. Inkognito langas nebus atidarytas iš naujo.}one{Pasiekiamas naujas „Chromium“ naujinys. Jis bus pritaikytas, kai paleisite „Chromium“ iš naujo. # inkognito langas nebus atidarytas iš naujo.}few{Pasiekiamas naujas „Chromium“ naujinys. Jis bus pritaikytas, kai paleisite „Chromium“ iš naujo. # inkognito langai nebus atidaryti iš naujo.}many{Pasiekiamas naujas „Chromium“ naujinys. Jis bus pritaikytas, kai paleisite „Chromium“ iš naujo. # inkognito lango nebus atidaryta iš naujo.}other{Pasiekiamas naujas „Chromium“ naujinys. Jis bus pritaikytas, kai paleisite „Chromium“ iš naujo. # inkognito langų nebus atidaryta iš naujo.}}</translation>
+<translation id="3685209450716071127">„Chromium“ negali patikrinti jūsų slaptažodžių. Pabandykite patikrinti interneto ryšį.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administratorius prašo paleisti „Chromium“ iš naujo, kad būtų galima pritaikyti šį naujinį}=1{Administratorius prašo paleisti „Chromium“ iš naujo, kad būtų galima pritaikyti šį naujinį. Inkognito langas nebus atidarytas iš naujo.}one{Administratorius prašo paleisti „Chromium“ iš naujo, kad būtų galima pritaikyti šį naujinį. # inkognito langas nebus atidarytas iš naujo.}few{Administratorius prašo paleisti „Chromium“ iš naujo, kad būtų galima pritaikyti šį naujinį. # inkognito langai nebus atidaryti iš naujo.}many{Administratorius prašo paleisti „Chromium“ iš naujo, kad būtų galima pritaikyti šį naujinį. # inkognito lango nebus atidaryta iš naujo.}other{Administratorius prašo paleisti „Chromium“ iš naujo, kad būtų galima pritaikyti šį naujinį. # inkognito langų nebus atidaryta iš naujo.}}</translation>
 <translation id="3713809861844741608">Atidaryti nuorodą naujame „Chromium“ &amp;skirtuke</translation>
 <translation id="3728336900324680424">„Chromium“ turės prieigą prie Disko, kad galėtų teikti pasiūlymus adreso juostoje</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{„Chromium“ paleidimas iš naujo po dienos}one{„Chromium“ paleidimas iš naujo po # dienos}few{„Chromium“ paleidimas iš naujo po # dienų}many{„Chromium“ paleidimas iš naujo po # dienos}other{„Chromium“ paleidimas iš naujo po # dienų}}</translation>
 <translation id="8453117565092476964">Diegimo programos archyvas sugadintas arba negalioja. Atsisiųskite „Chromium“ dar kartą.</translation>
 <translation id="8493179195440786826">„Chromium“ versija yra pasenusi</translation>
+<translation id="8568283329061645092">„Chromium“ gali tikrinti jūsų slaptažodžius, kai prisijungiate naudodami „Google“ paskyrą</translation>
 <translation id="8586442755830160949">Autorių teisės priklauso „Chromium“ autoriams, <ph name="YEAR" /> m. Visos teisės saugomos.</translation>
 <translation id="8619360774459241877">Pristatoma „Chromium“...</translation>
 <translation id="8621669128220841554">Nepavyko įdiegti dėl nenurodytos klaidos. Atsisiųskite „Chromium“ dar kartą.</translation>
diff --git a/chrome/app/resources/chromium_strings_lv.xtb b/chrome/app/resources/chromium_strings_lv.xtb
index 2b9616812..fe0f8e49 100644
--- a/chrome/app/resources/chromium_strings_lv.xtb
+++ b/chrome/app/resources/chromium_strings_lv.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Par &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium ir atjaunināts</translation>
 <translation id="2983934633046890458">Chromium mēģina rediģēt paroles.</translation>
+<translation id="3032706164202344641">Pārlūkprogrammā Chromium nevar pārbaudīt jūsu paroles. Vēlāk mēģiniet vēlreiz.</translation>
 <translation id="3032787606318309379">Notiek pievienošana pārlūkam Chromium...</translation>
 <translation id="3068515742935458733">Palīdzēt uzlabot Chromium, nosūtot Google serveriem avāriju pārskatus un <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Instalēšanas programmai neizdevās atarhivēt arhīvu. Lejupielādējiet Chromium vēlreiz.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium logotips</translation>
 <translation id="3639635944603682591">Šī lietotāja pārlūkošanas dati tiks dzēsti no šīs ierīces. Lai atkoptu datus, pierakstieties pārlūkprogrammā Chromium kā lietotājs <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Pieejams Chromium atjauninājums, un tas tiks lietots, tiklīdz restartēsiet pārlūku.}=1{Pieejams Chromium atjauninājums, un tas tiks lietots, tiklīdz restartēsiet pārlūku. Jūsu inkognito režīma logs netiks atkārtoti atvērts.}zero{Pieejams Chromium atjauninājums, un tas tiks lietots, tiklīdz restartēsiet pārlūku. # jūsu inkognito režīma logi netiks atkārtoti atvērti.}one{Pieejams Chromium atjauninājums, un tas tiks lietots, tiklīdz restartēsiet pārlūku. # jūsu inkognito režīma logs netiks atkārtoti atvērts.}other{Pieejams Chromium atjauninājums, un tas tiks lietots, tiklīdz restartēsiet pārlūku. # jūsu inkognito režīma logi netiks atkārtoti atvērti.}}</translation>
+<translation id="3685209450716071127">Pārlūkprogrammā Chromium nevar pārbaudīt jūsu paroles. Pārbaudiet interneta savienojumu.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Lai lietotu šo atjauninājumu, administrators lūdz restartēt pārlūku Chromium.}=1{Lai lietotu šo atjauninājumu, administrators lūdz restartēt pārlūku Chromium. Jūsu inkognito režīma logs netiks atkārtoti atvērts.}zero{Lai lietotu šo atjauninājumu, administrators lūdz restartēt pārlūku Chromium. # jūsu inkognito režīma logi netiks atkārtoti atvērti.}one{Lai lietotu šo atjauninājumu, administrators lūdz restartēt pārlūku Chromium. # jūsu inkognito režīma logs netiks atkārtoti atvērts.}other{Lai lietotu šo atjauninājumu, administrators lūdz restartēt pārlūku Chromium. # jūsu inkognito režīma logi netiks atkārtoti atvērti.}}</translation>
 <translation id="3713809861844741608">Atvērt saiti jaunā Chromium &amp;cilnē</translation>
 <translation id="3728336900324680424">Pārlūkā Chromium tiks izmantota Diskā pieejamā informācija, lai adrešu joslā piedāvātu ieteikumus</translation>
@@ -206,6 +208,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Restartējiet pārlūku Chromium vienas dienas laikā}zero{Restartējiet pārlūku Chromium # dienu laikā}one{Restartējiet pārlūku Chromium # dienas laikā}other{Restartējiet pārlūku Chromium # dienu laikā}}</translation>
 <translation id="8453117565092476964">Instalēšanas programmas arhīvs ir bojāts vai nav derīgs. Lejupielādējiet Chromium vēlreiz.</translation>
 <translation id="8493179195440786826">Chromium versija ir novecojusi</translation>
+<translation id="8568283329061645092">Pārlūkprogrammā Chromium var pārbaudīt jūsu paroles, ja esat pierakstījies savā Google kontā.</translation>
 <translation id="8586442755830160949">Autortiesības <ph name="YEAR" /> Chromium autori. Visas tiesības paturētas.</translation>
 <translation id="8619360774459241877">Notiek Chromium palaišana...</translation>
 <translation id="8621669128220841554">Instalēšana neizdevās nenoteiktas kļūdas dēļ. Lejupielādējiet pārlūku Chromium vēlreiz.</translation>
diff --git a/chrome/app/resources/chromium_strings_mk.xtb b/chrome/app/resources/chromium_strings_mk.xtb
index 929afc00..3045ece 100644
--- a/chrome/app/resources/chromium_strings_mk.xtb
+++ b/chrome/app/resources/chromium_strings_mk.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">За &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium е ажуриран</translation>
 <translation id="2983934633046890458">Chromium се обидува да измени лозинки.</translation>
+<translation id="3032706164202344641">Chromium не може да ги провери вашите лозинки. Обидете се пак подоцна.</translation>
 <translation id="3032787606318309379">Се додава на Chromium...</translation>
 <translation id="3068515742935458733">Помогнете да го подобриме Chromium со испраќање извештаи за падови и <ph name="UMA_LINK" /> до Google</translation>
 <translation id="3103660991484857065">Инсталаторот не успеа да ја декомпримира архивата. Преземете го Chromium повторно.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Лого на Chromium</translation>
 <translation id="3639635944603682591">Податоците од прелистување на ова лице ќе се избришат од уредов. За да ги вратите податоците, најавете се на Chromium како <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Достапно е ново ажурирање за Chromium и ќе се примени штом рестартирате.}=1{Достапно е ново ажурирање за Chromium и ќе се примени штом рестартирате. Прозорецот „Инкогнито“ нема да се отвори повторно.}one{Достапно е ново ажурирање за Chromium и ќе се примени штом рестартирате. # прозорец „Инкогнито“ нема да се отвори повторно.}other{Достапно е ново ажурирање за Chromium и ќе се примени штом рестартирате. # прозорци „Инкогнито“ нема да се отворат повторно.}}</translation>
+<translation id="3685209450716071127">Chromium не може да ги провери вашите лозинки. Проверете ја интернет-врската.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Администраторот бара да го рестартирате Chromium за да се примени ажурирањево}=1{Администраторот бара да го рестартирате Chromium за да се примени ажурирањево. Прозорецот „Инкогнито“ нема да се отвори повторно.}one{Администраторот бара да го рестартирате Chromium за да се примени ажурирањево. # прозорец „Инкогнито“ нема да се отвори повторно.}other{Администраторот бара да го рестартирате Chromium за да се примени ажурирањево. # прозорци „Инкогнито“ нема да се отворат повторно.}}</translation>
 <translation id="3713809861844741608">Отвори го линкот во нова &amp;картичка на Chromium</translation>
 <translation id="3728336900324680424">Chromium ќе пристапува до Drive за да дава предлози во лентата за адреси</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Рестартирајте го Chromium во рок од еден ден}one{Рестартирајте го Chromium во рок од # ден}other{Рестартирајте го Chromium во рок од # дена}}</translation>
 <translation id="8453117565092476964">Архивата на инсталаторот е оштетена или невалидна. Преземете го Chromium повторно.</translation>
 <translation id="8493179195440786826">Chromium е застарен</translation>
+<translation id="8568283329061645092">Chromium може да ги проверува вашите лозинки кога ќе се најавите со вашата сметка на Google</translation>
 <translation id="8586442755830160949">Авторски права <ph name="YEAR" /> на Авторите на Chromium. Сите права се задржани.</translation>
 <translation id="8619360774459241877">Се стартува Chromium…</translation>
 <translation id="8621669128220841554">Инсталирањето не успеа поради неназначена грешка. Преземете го Chromium повторно.</translation>
diff --git a/chrome/app/resources/chromium_strings_ml.xtb b/chrome/app/resources/chromium_strings_ml.xtb
index 0ae150a7..22775ff 100644
--- a/chrome/app/resources/chromium_strings_ml.xtb
+++ b/chrome/app/resources/chromium_strings_ml.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;Chromium-നെക്കുറിച്ച്</translation>
 <translation id="2977470724722393594">Chromium അപ്‌‌ടുഡേറ്റാണ്</translation>
 <translation id="2983934633046890458">പാസ്‌വേഡുകൾ എഡിറ്റ് ചെയ്യാൻ Chromium ശ്രമിക്കുന്നു.</translation>
+<translation id="3032706164202344641">Chromium-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവുന്നില്ല. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="3032787606318309379">Chromium-ലേക്ക് ചേർക്കുന്നു...</translation>
 <translation id="3068515742935458733">Google-ലേക്ക് ക്രാഷ് റിപ്പോർട്ടുകളും <ph name="UMA_LINK" /> എന്നതും അയയ്‌ക്കുന്നതിലൂടെ Chromium മികച്ചതാക്കാൻ സഹായിക്കുക</translation>
 <translation id="3103660991484857065">ആര്‍ക്കൈവ് അണ്‍‌കം‌പ്രസ് ചെയ്യാന്‍ ഇന്‍സ്റ്റാളറിന് കഴിഞ്ഞില്ല. Chromium വീണ്ടും ഡൗൺലോഡ് ചെയ്യുക.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium ലോഗോ</translation>
 <translation id="3639635944603682591">ഈ ഉപകരണത്തിൽ നിന്ന് ഈ വ്യക്തിയുടെ ബ്രൗസിംഗ് ഡാറ്റ ഇല്ലാതാക്കും. ഡാറ്റ വീണ്ടെടുക്കാൻ, <ph name="USER_EMAIL" /> എന്നതായി Chromium-ത്തിലേക്ക് സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium-നുള്ള പുതിയൊരു അപ്ഡേറ്റ് ലഭ്യമാണ്, നിങ്ങൾ വീണ്ടും ആരംഭിച്ച ഉടൻ തന്നെ അത് ബാധകമാക്കും.}=1{Chromium-നുള്ള പുതിയൊരു അപ്ഡേറ്റ് ലഭ്യമാണ്, നിങ്ങൾ വീണ്ടും ആരംഭിച്ച ഉടൻ തന്നെ അത് ബാധകമാക്കും. നിങ്ങളുടെ അദൃശ്യ വിൻഡോ വീണ്ടും തുറക്കില്ല.}other{Chromium-നുള്ള പുതിയൊരു അപ്ഡേറ്റ് ലഭ്യമാണ്, നിങ്ങൾ വീണ്ടും ആരംഭിച്ച ഉടൻ തന്നെ അത് ബാധകമാക്കും. നിങ്ങളുടെ # അദൃശ്യ വിൻഡോകൾ വീണ്ടും തുറക്കില്ല.}}</translation>
+<translation id="3685209450716071127">Chromium-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവില്ല. നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ഈ അപ്‌ഡേറ്റ് പ്രയോഗിക്കുന്നതിന് Chromium വീണ്ടും ആരംഭിക്കാൻ നിങ്ങളുടെ അഡ്‌മിൻ ആവശ്യപ്പെടുന്നു}=1{ഈ അപ്‌ഡേറ്റ് പ്രയോഗിക്കുന്നതിന് Chromium വീണ്ടും ആരംഭിക്കാൻ നിങ്ങളുടെ അഡ്‌മിൻ ആവശ്യപ്പെടുന്നു. നിങ്ങളുടെ അദൃശ്യ വിൻഡോ വീണ്ടും തുറക്കില്ല.}other{ഈ അപ്‌ഡേറ്റ് പ്രയോഗിക്കുന്നതിന് Chromium വീണ്ടും ആരംഭിക്കാൻ നിങ്ങളുടെ അഡ്‌മിൻ ആവശ്യപ്പെടുന്നു. നിങ്ങളുടെ # അദൃശ്യ വിൻഡോകൾ വീണ്ടും തുറക്കില്ല.}}</translation>
 <translation id="3713809861844741608">Chromium അദൃശ്യ വിൻഡോയിൽ ലിങ്ക് തുറക്കുക</translation>
 <translation id="3728336900324680424">വിലാസ ബാറിൽ നിർദ്ദേശങ്ങൾ സൃഷ്‌ടിക്കാൻ Chromium നിങ്ങളുടെ ഡ്രൈവ് ആക്‌സസ് ചെയ്യും</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{ഒരു ദിവസത്തിനുള്ളിൽ Chromium വീണ്ടും സമാരംഭിക്കുക}other{# ദിവസത്തിനുള്ളിൽ Chromium വീണ്ടും സമാരംഭിക്കുക}}</translation>
 <translation id="8453117565092476964">ഇൻസ്റ്റാളർ ആർക്കൈവ് കേടായതാണ് അല്ലെങ്കിൽ അസാധുവാണ്. Chromium വീണ്ടും ഡൗൺലോഡ് ചെയ്യുക.</translation>
 <translation id="8493179195440786826">Chromium കാലഹരണപ്പെട്ടു</translation>
+<translation id="8568283329061645092">Google അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുമ്പോൾ Chromium-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവും</translation>
 <translation id="8586442755830160949">പകർപ്പവകാശം <ph name="YEAR" /> Chromium രചയിതാക്കൾ. എല്ലാ അവകാശങ്ങളും നിക്ഷിപ്‌തം.</translation>
 <translation id="8619360774459241877">Chromium സമാരംഭിക്കുന്നു...</translation>
 <translation id="8621669128220841554">അവ്യക്തമായ പിശകിനാൽ ഇൻസ്റ്റാൾ ചെയ്യൽ പരാജയപ്പെട്ടു. Chromium വീണ്ടും ഡൗൺലോഡ് ചെയ്യുക.</translation>
diff --git a/chrome/app/resources/chromium_strings_mn.xtb b/chrome/app/resources/chromium_strings_mn.xtb
index 20de84c..473eb955a 100644
--- a/chrome/app/resources/chromium_strings_mn.xtb
+++ b/chrome/app/resources/chromium_strings_mn.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Chromium-ын тухай</translation>
 <translation id="2977470724722393594">Chromium-г шинэчилсэн байна</translation>
 <translation id="2983934633046890458">Chromium нууц үгсийг засахаар оролдож байна.</translation>
+<translation id="3032706164202344641">Chromium таны нууц үгсийг шалгах боломжгүй байна. Дараа дахин оролдоно уу.</translation>
 <translation id="3032787606318309379">Chromium-д өгөгдөл нэмэх нь ...</translation>
 <translation id="3068515742935458733">Алдаа ослын тайлан болон <ph name="UMA_LINK" />-ыг Google рүү илгээх замаар Chromium-ыг улам сайжруулахад тусална уу.</translation>
 <translation id="3103660991484857065">Програм суулгагч нь архивыг задалж үл чадсан тул Chromium-г дахин татаж авна уу.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium лого</translation>
 <translation id="3639635944603682591">Энэ хэрэглэгчийн хөтчийн өгөгдлийг энэ төхөөрөмжөөс устгана. Өгөгдлийг сэргээхийн тулд Chromium-д <ph name="USER_EMAIL" />-р нэвтэрнэ үү.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium-н шинэ шинэчлэлт боломжтой байгаа бөгөөд таныг дахин ачаалах үед түүнийг хэрэгжүүлэх болно.}=1{Chromium-н шинэ шинэчлэлт боломжтой байгаа бөгөөд таныг дахин ачаалах үед түүнийг хэрэгжүүлэх болно. Таны нууцлалтай цонхыг дахин нээхгүй.}other{Chromium-н шинэ шинэчлэлт боломжтой байгаа бөгөөд таныг дахин ачаалах үед түүнийг хэрэгжүүлэх болно. Таны # нууцлалтай цонхыг дахин нээхгүй.}}</translation>
+<translation id="3685209450716071127">Chromium таны нууц үгсийг шалгах боломжгүй байна. Интернэт холболтоо шалгаж үзнэ үү.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Энэ шинэчлэлтийг хэрэгжүүлэхийн тулд Chromium-г дахин ачаалахыг таны администратор танаас хүсэж байна}=1{Энэ шинэчлэлтийг хэрэгжүүлэхийн тулд Chromium-г дахин ачаалахыг таны администратор танаас хүсэж байна. Таны нууцлалтай цонхыг дахин нээхгүй.}other{Энэ шинэчлэлтийг хэрэгжүүлэхийн тулд Chromium-г дахин ачаалахыг таны администратор танаас хүсэж байна. Таны # нууцлалтай цонхыг дахин нээхгүй.}}</translation>
 <translation id="3713809861844741608">Холбоосыг шинэ Chromium болон чихтэй хуудсанд нээх</translation>
 <translation id="3728336900324680424">Chromium хаяг оруулах хэсэгт зөвлөмж харуулахын тулд таны Драйвт хандах болно</translation>
@@ -206,6 +208,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium-г 1 хоногийн дотор дахин ажиллуулна уу}other{Chromium-г # хоногийн дотор дахин ажиллуулна уу}}</translation>
 <translation id="8453117565092476964">Суулгагчийн архив устгагдсан эсвэл хүчингүй болсон байна. Chromium-ыг дахин татаж авна уу.</translation>
 <translation id="8493179195440786826">Chromium нь хуучирсан байна</translation>
+<translation id="8568283329061645092">Chromium нь таныг Google Бүртгэлээрээ нэвтрэх үед таны нууц үгсийг шалгах боломжтой</translation>
 <translation id="8586442755830160949">Chromium-ийн зохиогчийн эрх <ph name="YEAR" />. Бүх эрхийг хуулиар хамгаалсан.</translation>
 <translation id="8619360774459241877">Chromium-г эхлүүлж байна...</translation>
 <translation id="8621669128220841554">Гэнэтийн алдаанаас болж суулгах ажиллагаа амжилтгүй боллоо. Chromium-ыг дахин татаж авна уу.</translation>
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb
index af2a428..6ca5e4d 100644
--- a/chrome/app/resources/chromium_strings_mr.xtb
+++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -44,6 +44,7 @@
 <translation id="2910007522516064972">&amp;Chromium बद्दल</translation>
 <translation id="2977470724722393594">Chromium अद्ययावत आहे</translation>
 <translation id="2983934633046890458">Chromium पासवर्ड संपादित करण्याचा प्रयत्‍न करत आहे.</translation>
+<translation id="3032706164202344641">Chromium तुमचे पासवर्ड तपासू शकत नाही. नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="3032787606318309379">Chromium वर जोडत आहे...</translation>
 <translation id="3068515742935458733">Google कडे क्रॅश अहवाल आणि <ph name="UMA_LINK" /> पाठवून Chromium अधिक चांगले करण्यात मदत करा</translation>
 <translation id="3103660991484857065">संग्रहण अनकॉम्प्रेस करण्यास इन्स्टॉलर अयशस्वी. कृपया Chromium पुन्हा डाउनलोड करा.</translation>
@@ -64,6 +65,7 @@
 <translation id="358997566136285270">Chromium लोगो</translation>
 <translation id="3639635944603682591">या व्यक्तीचा ब्राउझिंग डेटा या डिव्हाइसवरून हटवला जाईल. डेटा रीकव्हर करण्यासाठी, Chromium वर <ph name="USER_EMAIL" /> म्हणून साइन इन करा.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium चे नवीन अपडेट उपलब्ध आहे आणि तुम्ही ते पुन्हा लाँच करताच लागू केले जाईल.}=1{Chromium चे नवीन अपडेट उपलब्ध आहे आणि तुम्ही ते पुन्हा लाँच करताच लागू केले जाईल. तुमची गुप्त विंडो पुन्हा उघडणार नाही.}other{Chromium चे नवीन अपडेट उपलब्ध आहे आणि तुम्ही ते पुन्हा लाँच करताच लागू केले जाईल. तुमच्या # गुप्त विंडो पुन्हा उघडणार नाहीत.}}</translation>
+<translation id="3685209450716071127">Chromium तुमचे पासवर्ड तपासू शकत नाही. तुमचे इंटरनेट कनेक्शन तपासून पहा.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{तुमच्या ॲडमिनिस्ट्रेटरने तुम्हाला हे अपडेट लागू करण्यासाठी Chromium पुन्हा लाँच करण्यास सांगितले आहे}=1{तुमच्या ॲडमिनिस्ट्रेटरने तुम्हाला हे अपडेट लागू करण्यासाठी Chromium पुन्हा लाँच करण्यास सांगितले आहे. तुमची गुप्त विंडो पुन्हा उघडणार नाही.}other{तुमच्या ॲडमिनिस्ट्रेटरने तुम्हाला हे अपडेट लागू करण्यासाठी Chromium पुन्हा लाँच करण्यास सांगितले आहे. तुमच्या # गुप्त विंडो पुन्हा उघडणार नाहीत.}}</translation>
 <translation id="3713809861844741608">लिंक नवीन Chromium &amp;टॅबमध्ये उघडा</translation>
 <translation id="3728336900324680424">ॲड्रेस बारमध्ये सूचना देण्यासाठी Chromium तुमची ड्राइव्ह ॲक्सेस करेल</translation>
@@ -209,6 +211,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium एका दिवसामध्ये पुन्हा लाँच करा}other{Chromium # दिवसांमध्ये पुन्हा लाँच करा}}</translation>
 <translation id="8453117565092476964">इन्स्टॉलर संग्रहण दूषित किंवा चुकीचे आहे. कृपया Chromium पुन्हा डाउनलोड करा.</translation>
 <translation id="8493179195440786826">Chromium कालबाह्य आहे</translation>
+<translation id="8568283329061645092">तुम्ही तुमचे Google खाते वापरून साइन इन करता तेव्हा, Chromium तुमचे पासवर्ड तपासू शकते</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium लेखक. सर्व हक्क राखीव.</translation>
 <translation id="8619360774459241877">Chromium लाँच करत आहे...</translation>
 <translation id="8621669128220841554">नमूद न केलेल्या एररमुळे स्थापना अयशस्वी झाली. कृपया Chromium पुन्‍हा डाउनलोड करा.</translation>
diff --git a/chrome/app/resources/chromium_strings_ms.xtb b/chrome/app/resources/chromium_strings_ms.xtb
index 226a961..5ec4e3e4 100644
--- a/chrome/app/resources/chromium_strings_ms.xtb
+++ b/chrome/app/resources/chromium_strings_ms.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Mengenai &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium telah dikemas kini</translation>
 <translation id="2983934633046890458">Chromium cuba mengedit kata laluan.</translation>
+<translation id="3032706164202344641">Chromium tidak dapat menyemak kata laluan anda. Cuba lagi nanti.</translation>
 <translation id="3032787606318309379">Menambah ke Chromium...</translation>
 <translation id="3068515742935458733">Bantu jadikan Chromium lebih baik dengan menghantar laporan ranap dan <ph name="UMA_LINK" /> kepada Google.</translation>
 <translation id="3103660991484857065">Pemasang gagal untuk menyahmampat arkib. Sila muat turun Chromium sekali lagi.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Logo Chromium</translation>
 <translation id="3639635944603682591">Data semakan imbas orang ini akan dipadamkan daripada peranti ini. Untuk memulihkan data itu, log masuk ke Chromium sebagai <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Kemas kini baharu tersedia untuk Chromium dan akan digunakan sebaik sahaja anda melancarkan semula Chromium.}=1{Kemas kini baharu tersedia untuk Chromium dan akan digunakan sebaik sahaja anda melancarkan semula Chromium. Tetingkap Inkognito anda tidak dapat dibuka semula.}other{Kemas kini baharu tersedia untuk Chromium dan akan digunakan sebaik sahaja anda melancarkan semula Chromium. # tetingkap Inkognito anda tidak dapat dibuka semula.}}</translation>
+<translation id="3685209450716071127">Chromium tidak dapat menyemak kata laluan anda. Cuba periksa sambungan Internet anda.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Pentadbir anda meminta anda melancarkan semula Chromium untuk menggunakan kemas kini ini}=1{Pentadbir anda meminta anda melancarkan semula Chromium untuk menggunakan kemas kini ini. Tetingkap Inkognito anda tidak dapat dibuka semula.}other{Pentadbir anda meminta anda melancarkan semula Chromium untuk menggunakan kemas kini ini. # tetingkap Inkognito anda tidak dapat dibuka semula.}}</translation>
 <translation id="3713809861844741608">Buka pautan dalam &amp;tab Chromium baharu</translation>
 <translation id="3728336900324680424">Chromium akan mengakses Drive anda untuk membuat cadangan dalam bar alamat</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Lancarkan semula Chromium dalam masa sehari}other{Lancarkan semula Chromium dalam masa # hari}}</translation>
 <translation id="8453117565092476964">Arkib pemasang rosak atau tidak sah. Sila muat turun Chromium sekali lagi.</translation>
 <translation id="8493179195440786826">Chromium sudah usang</translation>
+<translation id="8568283329061645092">Chromium boleh menyemak kata laluan anda apabila anda log masuk menggunakan Akaun Google anda</translation>
 <translation id="8586442755830160949">Hak Cipta <ph name="YEAR" /> Pengarang Chromium. Hak cipta terpelihara.</translation>
 <translation id="8619360774459241877">Melancarkan Chromium...</translation>
 <translation id="8621669128220841554">Pemasangan gagal disebabkan ralat yang tidak dinyatakan. Sila muat turun semula Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_my.xtb b/chrome/app/resources/chromium_strings_my.xtb
index a2c68bc..e9293c2 100644
--- a/chrome/app/resources/chromium_strings_my.xtb
+++ b/chrome/app/resources/chromium_strings_my.xtb
@@ -46,6 +46,7 @@
 <translation id="2910007522516064972">Chromium အကြောင်း</translation>
 <translation id="2977470724722393594">Chroumium ကို အပ်ဒိတ်လုပ်ထားပြီးပါပြီ</translation>
 <translation id="2983934633046890458">Chromium သည် စကားဝှက်များကို တည်းဖြတ်ရန်ကြိုးပမ်းနေသည်။</translation>
+<translation id="3032706164202344641">Chromium က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ နောက်မှ ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="3032787606318309379">Chromium သို့ ထပ်ထည့်နေခြင်း...</translation>
 <translation id="3068515742935458733"><ph name="UMA_LINK" /> နှင့် ပျက်စီးမှု အစီရင်ခံချက်များကို Google သို့ပို့ခြင်းဖြင့် Chromium အားကူညီကာ ပိုမိုကောင်းမွန်စေပါ။</translation>
 <translation id="3103660991484857065">ထည့်သွင်းရန်လုပ်ဆောင်ရာတွင် ချုံ့ထားသောဖိုင်မှတ်တမ်းကို ပြန်ဖွင့်မပေးနိုင်ခဲ့ပါ။ ကျေးဇူးပြု၍ Chromium ကို ထပ်ပြီး ဒေါင်းလုဒ် လုပ်ယူပါ။</translation>
@@ -66,6 +67,7 @@
 <translation id="358997566136285270">Chromium လိုဂို</translation>
 <translation id="3639635944603682591">ဤပုဂ္ဂိုလ်၏ ကြည့်ရှုမှုဒေတာများကို ဤကိရိယာမှနေ၍ ဖျက်လိုက်ပါမည်။ ဒေတာကို ပြန်လည်ရယူရန် <ph name="USER_EMAIL" />အဖြစ် Chromium သို့ လက်မှတ်ထိုးဝင်ပါ။</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium အတွက် အပ်ဒိတ်အသစ်ရနိုင်ပြီဖြစ်ပြီး ပြန်ဖွင့်လိုက်သည်နှင့် ထည့်သွင်းသွားပါမည်။}=1{Chromium အတွက် အပ်ဒိတ်အသစ်ရနိုင်ပြီဖြစ်ပြီး ပြန်ဖွင့်လိုက်သည်နှင့် ထည့်သွင်းသွားပါမည်။ သင်၏ရုပ်ဖျက် ဝင်ဒိုးကို ပြန်ဖွင့်မည် မဟုတ်ပါ။}other{Chromium အတွက် အပ်ဒိတ်အသစ်ရနိုင်ပြီဖြစ်ပြီး ပြန်ဖွင့်လိုက်သည်နှင့် ထည့်သွင်းသွားပါမည်။ သင်၏ရုပ်ဖျက် ဝင်ဒိုး # ခုကို ပြန်ဖွင့်မည် မဟုတ်ပါ။}}</translation>
+<translation id="3685209450716071127">Chromium က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ သင့်အင်တာနက် ချိတ်ဆက်မှုကို စစ်ဆေးပါ။</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ဤအပ်ဒိတ်ကို အသုံးပြုနိုင်ရန်အတွက် Chromium ကို ပြန်လည်စတင်ရန် သင်၏စီမံခန့်ခွဲသူက တောင်းဆိုထားပါသည်}=1{ဤအပ်ဒိတ်ကို အသုံးပြုနိုင်ရန်အတွက် Chromium ကို ပြန်လည်စတင်ရန် သင်၏စီမံခန့်ခွဲသူက တောင်းဆိုထားပါသည်။ သင်၏ရုပ်ဖျက် ဝင်ဒိုးကို ပြန်ဖွင့်မည် မဟုတ်ပါ။}other{ဤအပ်ဒိတ်ကို အသုံးပြုနိုင်ရန်အတွက် Chromium ကို ပြန်လည်စတင်ရန် သင်၏စီမံခန့်ခွဲသူက တောင်းဆိုထားပါသည်။ သင်၏ရုပ်ဖျက် ဝင်ဒိုး # ခုကို ပြန်ဖွင့်မည် မဟုတ်ပါ။}}</translation>
 <translation id="3713809861844741608">Chromium တဘ်အသစ်တွင် လင့်ခ်ကို ဖွင့်ရန်</translation>
 <translation id="3728336900324680424">လိပ်စာဘားတွင် အကြံပြုချက်များ ပေးနိုင်ရန် Chromium သည် သင်၏ Drive ကို အသုံးပြုသွားပါမည်</translation>
@@ -212,6 +214,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium ကို တစ်ရက်အတွင်း ပြန်လည်စတင်ပါ}other{Chromium ကို # ရက်အတွင်း ပြန်လည်စတင်ပါ}}</translation>
 <translation id="8453117565092476964">ထည့်သွင်းရာတွင် အသုံးပြုသည့် ချုံ့ထားသောဖိုင်မှတ်တမ်း ပျက်စီးနေသည် သို့မဟုတ် တရားမဝင်ပါ။ ကျေးဇူး၍ Chromium ကို ထပ်ပြီး ဒေါင်းလုဒ် လုပ်ယူပါ။</translation>
 <translation id="8493179195440786826">Chromium မှာ ဟောင်းသွားပြီ</translation>
+<translation id="8568283329061645092">သင်၏ Google Account နှင့် လက်မှတ်ထိုးဝင်သည့်အခါ Chromium က သင့်စကားဝှက်များကို စစ်ဆေးနိုင်သည်</translation>
 <translation id="8586442755830160949">မူပိုင်ခွင့် <ph name="YEAR" /> The Chromium ပြုစုသူများ။ မူပိုင်ခွင့်များ အားလုံးကို ချုပ်ထိန်းထားသည်။</translation>
 <translation id="8619360774459241877">Chromium ကို ဖွင့်နေသည်...</translation>
 <translation id="8621669128220841554">မသိရသည့် အမှားတစ်ခုကြောင့် တပ်ဆင်မှု မအေင်မြင်ခဲ့ပါ။ ကျေးဇူးပြုပြီး Chromium ကို ထပ်ပြီး ဒေါင်းလုဒ် လုပ်ယူပါ။</translation>
diff --git a/chrome/app/resources/chromium_strings_ne.xtb b/chrome/app/resources/chromium_strings_ne.xtb
index cd10c1cc..457deb6e 100644
--- a/chrome/app/resources/chromium_strings_ne.xtb
+++ b/chrome/app/resources/chromium_strings_ne.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;क्रोमियमको बारेमा</translation>
 <translation id="2977470724722393594">Chromium अद्यावधिक छ</translation>
 <translation id="2983934633046890458">Chromium ले पासवर्डहरू सम्पादन गर्ने प्रयास गरिरहेको छ।</translation>
+<translation id="3032706164202344641">Chromium ले तपाईंका पासवर्डहरूको जाँच गर्न सकेन। पछि फेरि प्रयास गर्नुहोस्।</translation>
 <translation id="3032787606318309379">Chromium मा थप्दै...</translation>
 <translation id="3068515742935458733">गुगललाई दुर्घटना प्रतिवेदन र <ph name="UMA_LINK" /> पठाएर राम्रो क्रोमियम बनाउन सहयोग गर्नुहोस् ।</translation>
 <translation id="3103660991484857065">स्थापितकर्ताले सङ्ग्रह नखाँद्न असफल भयो। कृपया फेरि Chromium डाउनलोड गर्नुहोस्।</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">क्रोमियम लोगो</translation>
 <translation id="3639635944603682591">यस यन्त्रबाट यो व्यक्तिको ब्राउजिङ डेटा मेटाइने छ। उक्त डेटा पुनः प्राप्त गर्न <ph name="USER_EMAIL" /> का रूपमा Chromium मा साइन इन गर्नुहोस्।</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium को नयाँ अद्यावधिक उपलब्ध छ र तपाईंले Chromium पुनः सुरु गर्ने बित्तिकै यो अद्यावधिक लागू हुने छ।}=1{Chromium को नयाँ अद्यावधिक उपलब्ध छ र तपाईंले Chromium पुनः सुरु गर्ने बित्तिकै यो अद्यावधिक लागू हुने छ। तपाईंको इन्कोग्निटो विन्डो पुनः खुल्ने छैन।}other{Chromium को नयाँ अद्यावधिक उपलब्ध छ र तपाईंले Chromium पुनः सुरु गर्ने बित्तिकै यो अद्यावधिक लागू हुने छ। तपाईंका # वटा इन्कोग्निटो विन्डो पुनः खुल्ने छैनन्।}}</translation>
+<translation id="3685209450716071127">Chromium ले तपाईंका पासवर्डहरूको जाँच गर्न सकेन। आफ्नो इन्टरनेट जडान जाँच गरी हेर्नुहोस्।</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{तपाईंका व्यवस्थापकले तपाईंलाई यो अद्यावधिक लागू गर्न Chromium पुनः सुरु गर्न आग्रह गर्नुभएको छ}=1{तपाईंका व्यवस्थापकले तपाईंलाई यो अद्यावधिक लागू गर्न Chromium पुनः सुरु गर्न आग्रह गर्नुभएको छ। तपाईंको इन्कोग्निटो विन्डो पुनः खुल्ने छैन।}other{तपाईंका व्यवस्थापकले तपाईंलाई यो अद्यावधिक लागू गर्न Chromium पुनः सुरु गर्न आग्रह गर्नुभएको छ। तपाईंका # वटा इन्कोग्निटो विन्डो पुनः खुल्ने छैनन्।}}</translation>
 <translation id="3713809861844741608">लिंकलाई Chromium को नयाँ ट्याबमा खोल्नुहोस्</translation>
 <translation id="3728336900324680424">ठेगाना बारमा सुझाव दिन Chromium तपाईंको ड्राइभमाथि पहुँच राख्ने छ।</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{एक दिनभित्र Chromium पुनः सुरु गर्नुहोस्}other{# दिनभित्र Chromium पुनः सुरु गर्नुहोस्}}</translation>
 <translation id="8453117565092476964">स्थापना-कर्ता सङ्ग्रह दूषिट वा अवैध छ। कृपया फेरि Chromium डाउनलोड गर्नुहोस्।</translation>
 <translation id="8493179195440786826">Chromium पुरानो भएको छ</translation>
+<translation id="8568283329061645092">तपाईंले आफ्नो Google खातामा साइन इन गरेपछि मात्र Chromium ले तपाईंका पासवर्डहरूको जाँच गर्न सक्छ</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> क्रोमियम लेखक। सबै अधिकार सुरक्षित।</translation>
 <translation id="8619360774459241877">Chromium सुरु गर्दै…</translation>
 <translation id="8621669128220841554">अनिश्</translation>
diff --git a/chrome/app/resources/chromium_strings_nl.xtb b/chrome/app/resources/chromium_strings_nl.xtb
index 8c9b2e1..63a1b0f 100644
--- a/chrome/app/resources/chromium_strings_nl.xtb
+++ b/chrome/app/resources/chromium_strings_nl.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Over &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium is up-to-date</translation>
 <translation id="2983934633046890458">Chromium probeert wachtwoorden te bewerken.</translation>
+<translation id="3032706164202344641">Chromium kan je wachtwoorden niet checken. Probeer het later opnieuw.</translation>
 <translation id="3032787606318309379">Toevoegen aan Chromium...</translation>
 <translation id="3068515742935458733">Help ons Chromium te verbeteren door crashrapporten en <ph name="UMA_LINK" /> naar Google te verzenden</translation>
 <translation id="3103660991484857065">Het installatieprogramma kan het archief niet uitpakken. Download Chromium opnieuw.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium-logo</translation>
 <translation id="3639635944603682591">De browsergegevens van deze persoon worden verwijderd van dit apparaat. Als je de gegevens wilt herstellen, log je in bij Chromium als <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Er is een nieuwe update voor Chromium beschikbaar die wordt uitgevoerd zodra je het programma opnieuw start.}=1{Er is een nieuwe update voor Chromium beschikbaar die wordt uitgevoerd zodra je het programma opnieuw start. Je incognitovenster kan niet opnieuw worden geopend.}other{Er is een nieuwe update voor Chromium beschikbaar die wordt uitgevoerd zodra je het programma opnieuw start. Je # incognitovensters kunnen niet opnieuw worden geopend.}}</translation>
+<translation id="3685209450716071127">Chromium kan je wachtwoorden niet checken. Check de internetverbinding.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Je beheerder vraagt je Chromium opnieuw te starten om deze update uit te voeren.}=1{Je beheerder vraagt je Chromium opnieuw te starten om deze update uit te voeren. Je incognitovenster kan niet opnieuw worden geopend.}other{Je beheerder vraagt je Chromium opnieuw te starten om deze update uit te voeren. Je # incognitovensters kunnen niet opnieuw worden geopend.}}</translation>
 <translation id="3713809861844741608">Link openen op een nieuw Chromium-&amp;tabblad</translation>
 <translation id="3728336900324680424">Chromium gebruikt de toegang tot je Drive om suggesties te doen in de adresbalk</translation>
@@ -209,6 +211,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Start Chromium binnen een dag opnieuw}other{Start Chromium binnen # dagen opnieuw}}</translation>
 <translation id="8453117565092476964">Het archief van het installatieprogramma is beschadigd of ongeldig. Download Chromium opnieuw.</translation>
 <translation id="8493179195440786826">Chromium is verouderd</translation>
+<translation id="8568283329061645092">Chromium kan je wachtwoorden checken als je inlogt met je Google-account</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> De auteurs van Chromium. Alle rechten voorbehouden.</translation>
 <translation id="8619360774459241877">Chromium starten…</translation>
 <translation id="8621669128220841554">De installatie is mislukt wegens een onbekende fout. Download Chromium opnieuw.</translation>
diff --git a/chrome/app/resources/chromium_strings_no.xtb b/chrome/app/resources/chromium_strings_no.xtb
index d961890..1c50702 100644
--- a/chrome/app/resources/chromium_strings_no.xtb
+++ b/chrome/app/resources/chromium_strings_no.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Om &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium er oppdatert</translation>
 <translation id="2983934633046890458">Chromium prøver å redigere passord.</translation>
+<translation id="3032706164202344641">Chromium kan ikke sjekke passordene dine. Prøv igjen senere.</translation>
 <translation id="3032787606318309379">Legger til i Chromium …</translation>
 <translation id="3068515742935458733">Bidra til å gjøre Chromium bedre ved å sende programstopprapporter og <ph name="UMA_LINK" /> til Google</translation>
 <translation id="3103660991484857065">Installasjonsprogrammet kunne ikke dekomprimere arkivet. Last ned Chromium på nytt.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium-logo</translation>
 <translation id="3639635944603682591">Denne personens nettlesingsdata slettes fra denne enheten. For å gjenopprette dataene, logg på Chromium som <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{En ny oppdatering for Chromium er tilgjengelig og tas i bruk når du starter Chromium på nytt.}=1{En ny oppdatering for Chromium er tilgjengelig og tas i bruk når du starter Chromium på nytt. Inkognitovinduet ditt blir ikke gjenåpnet.}other{En ny oppdatering for Chromium er tilgjengelig og tas i bruk når du starter Chromium på nytt. De # inkognitovinduene dine blir ikke gjenåpnet.}}</translation>
+<translation id="3685209450716071127">Chromium kan ikke sjekke passordene dine. Prøv å kontrollere internettilkoblingen.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administratoren din ber deg om å starte Chromium på nytt for å ta i bruk denne oppdateringen}=1{Administratoren din ber deg om å starte Chromium på nytt for å ta i bruk denne oppdateringen. Inkognitovinduet ditt blir ikke gjenåpnet.}other{Administratoren din ber deg om å starte Chromium på nytt for å ta i bruk denne oppdateringen. De # inkognitovinduene dine blir ikke gjenåpnet.}}</translation>
 <translation id="3713809861844741608">Åpne linken i en ny fane i Chromium</translation>
 <translation id="3728336900324680424">Chromium får tilgang til Disk-lagringen din for å kunne gi deg forslag i adressefeltet</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Start Chromium på nytt innen én dag}other{Start Chromium på nytt innen # dager}}</translation>
 <translation id="8453117565092476964">Installasjonsarkivet er skadet eller ugyldig. Last ned Chromium på nytt.</translation>
 <translation id="8493179195440786826">Chromium er utdatert</translation>
+<translation id="8568283329061645092">Chromium kan sjekke passordene dine når du logger på med Google-kontoen din</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> – The Chromium Authors. Med enerett.</translation>
 <translation id="8619360774459241877">Starter Chromium ...</translation>
 <translation id="8621669128220841554">Installeringen mislyktes på grunn av en uspesifisert feil. Last ned Chromium på nytt.</translation>
diff --git a/chrome/app/resources/chromium_strings_or.xtb b/chrome/app/resources/chromium_strings_or.xtb
index f52414fe..4f878519 100644
--- a/chrome/app/resources/chromium_strings_or.xtb
+++ b/chrome/app/resources/chromium_strings_or.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;Chromium ବିଷୟରେ</translation>
 <translation id="2977470724722393594">Chromium ଅପ୍‍-ଟୁ-ଡେଟ୍‍ ଅଛି</translation>
 <translation id="2983934633046890458">Chromium ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଏଡିଟ୍ କରିବାକୁ ଚେଷ୍ଟା କରୁଛି।</translation>
+<translation id="3032706164202344641">Chromium ଆପଣଙ୍କର ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="3032787606318309379">Chromiumକୁ ଯୋଗ କରାଯାଉଛି...</translation>
 <translation id="3068515742935458733">Googleକୁ କ୍ରାସ୍ ରିପୋର୍ଟ ଏବଂ <ph name="UMA_LINK" /> ପଠାଇ Chromiumତ କରିବାରେ ସାହାଯ୍ୟ କରନ୍ତୁ</translation>
 <translation id="3103660991484857065">ଇନ୍‌ଷ୍ଟଲର୍ ଆର୍କାଇଭ୍ ଅଣସଙ୍କୁଚିତ କରିବାରେ ବିଫଳ ହେଲା। Chromium ପୁଣି ଡାଉନ୍‌ଲୋଡ୍ କରନ୍ତୁ</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium ଲୋଗୋ</translation>
 <translation id="3639635944603682591">ଏହି ବ୍ୟକ୍ତିଙ୍କର ବ୍ରାଉଜିଂ ଡାଟା ଏହି ଡିଭାଇସ୍‌ରୁ ଡିଲିଟ୍ କରାଯିବ। ଡାଟା ପୁନରୁଦ୍ଧାର କରିବାକୁ, <ph name="USER_EMAIL" /> ଭାବରେ Chromiumରେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ।</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium ପାଇଁ ଏକ ନୂଆ ଅପ୍‌ଡେଟ୍ ଉପଲବ୍ଧ ଅଛି ଏବଂ ଆପଣ ପୁଣି ଥରେ ଲଞ୍ଚ କରିବା କ୍ଷଣି ଲାଗୁ ହୋଇଯିବ।}=1{Chromium ପାଇଁ ଏକ ନୂଆ ଅପ୍‌ଡେଟ୍ ଉପଲବ୍ଧ ଅଛି ଏବଂ ଆପଣ ପୁଣି ଥରେ ଲଞ୍ଚ କରିବା କ୍ଷଣି ଲାଗୁ ହୋଇଯିବ। ଆପଣଙ୍କର ଇନ୍‌କଗ୍ନିଟୋ ୱିଣ୍ଡୋ ପୁଣି ଖୋଲିବ ନାହିଁ।}other{Chromium ପାଇଁ ଏକ ନୂଆ ଅପ୍‌ଡେଟ୍ ଉପଲବ୍ଧ ଅଛି ଏବଂ ଆପଣ ପୁଣି ଥରେ ଲଞ୍ଚ କରିବା କ୍ଷଣି ଲାଗୁ ହୋଇଯିବ। ଆପଣଙ୍କର #ଟି ଇନ୍‌କଗ୍ନିଟୋ ୱିଣ୍ଡୋ ପୁଣି ଖୋଲିବ ନାହିଁ।}}</translation>
+<translation id="3685209450716071127">Chromium ଆପଣଙ୍କର ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। ଆପଣଙ୍କର ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ ଯାଞ୍ଚ କରି ଦେଖନ୍ତୁ।</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ଆପଣଙ୍କର ଆଡ୍‌ମିନିଷ୍ଟ୍ରେଟର୍ କହୁଛନ୍ତି ଯେ ଏହି ଅପ୍‌ଡେଟ୍ ଲାଗୁ କରିବାକୁ ଆପଣ Chromiumକୁ ପୁଣି ଲଞ୍ଚ କରନ୍ତୁ}=1{ଆପଣଙ୍କର ଆଡ୍‌ମିନିଷ୍ଟ୍ରେଟର୍ କହୁଛନ୍ତି ଯେ ଏହି ଅପ୍‌ଡେଟ୍ ଲାଗୁ କରିବାକୁ ଆପଣ Chromiumକୁ ପୁଣି ଲଞ୍ଚ କରନ୍ତୁ। ଆପଣଙ୍କର ଇନ୍‌କଗ୍ନିଟୋ ୱିଣ୍ଡୋ ପୁଣି ଖୋଲିବ ନାହିଁ।}other{ଆପଣଙ୍କର ଆଡ୍‌ମିନିଷ୍ଟ୍ରେଟର୍ କହୁଛନ୍ତି ଯେ ଏହି ଅପ୍‌ଡେଟ୍ ଲାଗୁ କରିବାକୁ ଆପଣ Chromiumକୁ ପୁଣି ଲଞ୍ଚ କରନ୍ତୁ। ଆପଣଙ୍କର #ଟି ଇନ୍‌କଗ୍ନିଟୋ ୱିଣ୍ଡୋ ପୁଣି ଖୋଲିବ ନାହିଁ।}}</translation>
 <translation id="3713809861844741608">ନୂଆ Chromium &amp;ଟାବ୍‌ରେ ଲିଙ୍କ୍ ଖୋଲନ୍ତୁ</translation>
 <translation id="3728336900324680424">ଠିକଣା ବାର୍‌ରେ ପ୍ରସ୍ତାବ ଦେବା ପାଇଁ Chromium ଆପଣଙ୍କର ଡ୍ରାଇଭ୍‌କୁ ଆକ୍‌ସେସ୍ କରିବ</translation>
@@ -209,6 +211,7 @@
 <translation id="8417404458978023919">{0,plural, =1{ଗୋଟିଏ ଦିନ ମଧ୍ୟରେ Chromium ପୁଣି ଲଞ୍ଚ କରନ୍ତୁ}other{# ଦିନ ମଧ୍ୟରେ Chromium ପୁଣି ଲଞ୍ଚ କରନ୍ତୁ}}</translation>
 <translation id="8453117565092476964">ଇନ୍‌ଷ୍ଟଲର୍‌ ଆର୍କାଇଭ୍‍ ଖରାପ ହୋ‍ଇଯାଇଛି କିମ୍ବା ଅବୈଧ ଅଟେ। ଦୟାକରି Chromium ପୁଣି ଡାଉନ୍‌ଲୋଡ୍‌ କରନ୍ତୁ।</translation>
 <translation id="8493179195440786826">Chromiumର ସମୟସୀମା ଶେଷ ହୋଇଛି</translation>
+<translation id="8568283329061645092">ଆପଣ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟ ମାଧ୍ୟମରେ ସାଇନ୍ ଇନ୍ କଲେ, Chromium ଆପଣଙ୍କର ପାସୱାର୍ଡ ଯାଞ୍ଚ କରିପାରିବ</translation>
 <translation id="8586442755830160949">କପିରାଇଟ୍ <ph name="YEAR" /> Chromium ଲେଖକ। ସମସ୍ତ ଅଧିକାର ସଂରକ୍ଷିତ ଅଛି।</translation>
 <translation id="8619360774459241877">Chromium ଲଞ୍ଚ୍ ହେଉଛି...</translation>
 <translation id="8621669128220841554">ଅନିର୍ଦ୍ଦିଷ୍ଟ ତ୍ରୁଟି ଯୋଗୁଁ ଇନ୍‌ଷ୍ଟଲେସନ୍ ବିଫଳ ହୋଇଛି। ଦୟାକରି Chromium ପୁଣି ଡାଉନ୍‌ଲୋଡ୍ କରନ୍ତୁ।</translation>
diff --git a/chrome/app/resources/chromium_strings_pa.xtb b/chrome/app/resources/chromium_strings_pa.xtb
index ca6a7ed..26586ff 100644
--- a/chrome/app/resources/chromium_strings_pa.xtb
+++ b/chrome/app/resources/chromium_strings_pa.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;Chromium ਬਾਰੇ</translation>
 <translation id="2977470724722393594">Chromium ਅੱਪ ਟੂ ਡੇਟ ਹੈ</translation>
 <translation id="2983934633046890458">Chromium ਪਾਸਵਰਡਾਂ ਦਾ ਸੰਪਾਦਨ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਹੈ।</translation>
+<translation id="3032706164202344641">Chromium ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="3032787606318309379">Chromium ਵਿੱਚ ਜੋੜ ਰਿਹਾ ਹੈ...</translation>
 <translation id="3068515742935458733">Chromium ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਨ ਲਈ Google ਨੂੰ ਕ੍ਰੈਸ਼ ਰਿਪੋਰਟਾਂ ਅਤੇ <ph name="UMA_LINK" /> ਭੇਜੋ</translation>
 <translation id="3103660991484857065">ਸਥਾਪਨਾਕਾਰ ਪੁਰਾਲੇਖ ਦੇ ਨਪੀੜਨ ਨੂੰ ਵਾਪਸ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ। ਕਿਰਪਾ ਕਰਕੇ Chromium ਨੂੰ ਦੁਬਾਰਾ ਡਾਊਨਲੋਡ ਕਰੋ।</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium ਲੋਗੋ</translation>
 <translation id="3639635944603682591">ਇਸ ਵਿਅਕਤੀ ਦਾ ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟਾ ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਡਾਟਾ ਮੁੜ-ਹਾਸਲ ਕਰਨ ਲਈ, Chromium ਵਿੱਚ <ph name="USER_EMAIL" /> ਵਜੋਂ ਸਾਈਨ-ਇਨ ਕਰੋ।</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium ਲਈ ਇੱਕ ਨਵਾਂ ਅੱਪਡੇਟ ਉਪਲਬਧ ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਮੁੜ-ਲਾਂਚ ਕਰਨ ਦੇ ਨਾਲ ਹੀ ਅੱਪਡੇਟ ਲਾਗੂ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ।}=1{Chromium ਲਈ ਇੱਕ ਨਵਾਂ ਅੱਪਡੇਟ ਉਪਲਬਧ ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਮੁੜ-ਲਾਂਚ ਕਰਨ ਦੇ ਨਾਲ ਹੀ ਅੱਪਡੇਟ ਲਾਗੂ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਤੁਹਾਡੀ ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋ ਦੁਬਾਰਾ ਨਹੀਂ ਖੁੱਲ੍ਹੇਗੀ।}other{Chromium ਲਈ ਇੱਕ ਨਵਾਂ ਅੱਪਡੇਟ ਉਪਲਬਧ ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਮੁੜ-ਲਾਂਚ ਕਰਨ ਦੇ ਨਾਲ ਹੀ ਅੱਪਡੇਟ ਲਾਗੂ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਤੁਹਾਡੀਆਂ # ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋ ਦੁਬਾਰਾ ਨਹੀਂ ਖੁੱਲ੍ਹਣਗੀਆਂ।}}</translation>
+<translation id="3685209450716071127">Chromium ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਆਪਣੇ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰਕੇ ਦੇਖੋ।</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਕਹਿੰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਇਸ ਅੱਪਡੇਟ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ Chromium ਨੂੰ ਮੁੜ-ਲਾਂਚ ਕਰੋ}=1{ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਕਹਿੰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਇਸ ਅੱਪਡੇਟ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ Chromium ਨੂੰ ਮੁੜ-ਲਾਂਚ ਕਰੋ। ਤੁਹਾਡੀ ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋ ਦੁਬਾਰਾ ਨਹੀਂ ਖੁੱਲ੍ਹੇਗੀ।}other{ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਕਹਿੰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਇਸ ਅੱਪਡੇਟ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ Chromium ਨੂੰ ਮੁੜ-ਲਾਂਚ ਕਰੋ। ਤੁਹਾਡੀਆਂ # ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋ ਦੁਬਾਰਾ ਨਹੀਂ ਖੁੱਲ੍ਹਣਗੀਆਂ।}}</translation>
 <translation id="3713809861844741608">ਨਵੀਂ Chromium &amp;ਟੈਬ ਵਿੱਚ ਲਿੰਕ ਖੋਲ੍ਹੋ</translation>
 <translation id="3728336900324680424">ਪਤਾ ਬਾਰ ਵਿੱਚ ਸੁਝਾਅ ਦੇਣ ਲਈ Chromium ਤੁਹਾਡੀ 'ਡਰਾਈਵ' ਤੱਕ ਪਹੁੰਚ ਕਰੇਗਾ</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium ਨੂੰ ਇੱਕ ਦਿਨ ਦੇ ਅੰਦਰ ਮੁੜ-ਲਾਂਚ ਕਰੋ}one{Chromium ਨੂੰ # ਦਿਨ ਦੇ ਅੰਦਰ ਮੁੜ-ਲਾਂਚ ਕਰੋ}other{Chromium ਨੂੰ # ਦਿਨਾਂ ਦੇ ਅੰਦਰ ਮੁੜ-ਲਾਂਚ ਕਰੋ}}</translation>
 <translation id="8453117565092476964">ਸਥਾਪਨਾਕਾਰ ਪੁਰਾਲੇਖ ਖਰਾਬ ਜਾਂ ਅਵੈਧ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ Chromium ਨੂੰ ਦੁਬਾਰਾ ਡਾਊਨਲੋਡ ਕਰੋ।</translation>
 <translation id="8493179195440786826">Chromium ਪੁਰਾਣਾ ਹੈ</translation>
+<translation id="8568283329061645092">ਤੁਹਾਡੇ ਵੱਲੋਂ ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਨ 'ਤੇ Chromium ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹੈ</translation>
 <translation id="8586442755830160949">ਕਾਪੀਰਾਈਟ <ph name="YEAR" /> The Chromium Authors. ਸਾਰੇ ਹੱਕ ਰਾਖਵੇਂ ਹਨ।</translation>
 <translation id="8619360774459241877">Chromium ਲਾਂਚ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...</translation>
 <translation id="8621669128220841554">ਅਨਿਸ਼ਚਿਤ ਗੜਬੜ ਕਾਰਨ ਸਥਾਪਨਾ ਅਸਫਲ ਹੋ ਗਈ। ਕਿਰਪਾ ਕਰਕੇ Chromium ਨੂੰ ਦੁਬਾਰਾ ਡਾਊਨਲੋਡ ਕਰੋ।</translation>
diff --git a/chrome/app/resources/chromium_strings_pl.xtb b/chrome/app/resources/chromium_strings_pl.xtb
index b2d6cd0..5f0c5b0 100644
--- a/chrome/app/resources/chromium_strings_pl.xtb
+++ b/chrome/app/resources/chromium_strings_pl.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">&amp;Chromium – informacje</translation>
 <translation id="2977470724722393594">Masz aktualną wersję Chromium</translation>
 <translation id="2983934633046890458">Chromium próbuje edytować hasła.</translation>
+<translation id="3032706164202344641">Chromium nie może sprawdzić Twoich haseł. Spróbuj później.</translation>
 <translation id="3032787606318309379">Dodawanie do Chromium...</translation>
 <translation id="3068515742935458733">Pomóż nam ulepszyć Chromium, przesyłając do Google raporty o awariach i <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Instalator nie może prawidłowo rozpakować archiwum. Pobierz Chromium ponownie.</translation>
@@ -61,6 +62,7 @@
 <translation id="358997566136285270">Logo Chromium</translation>
 <translation id="3639635944603682591">Dane przeglądania tej osoby zostaną usunięte z tego urządzenia. Aby je odzyskać, zaloguj się w Chromium jako <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Dostępna jest aktualizacja Chromium, która zostanie zastosowana natychmiast po ponownym uruchomieniu aplikacji.}=1{Dostępna jest aktualizacja Chromium, która zostanie zastosowana natychmiast po ponownym uruchomieniu aplikacji. Okno incognito nie otworzy się ponownie.}few{Dostępna jest aktualizacja Chromium, która zostanie zastosowana natychmiast po ponownym uruchomieniu aplikacji. # okna incognito nie otworzą się ponownie.}many{Dostępna jest aktualizacja Chromium, która zostanie zastosowana natychmiast po ponownym uruchomieniu aplikacji. # okien incognito nie otworzy się ponownie.}other{Dostępna jest aktualizacja Chromium, która zostanie zastosowana natychmiast po ponownym uruchomieniu aplikacji. # okna incognito nie otworzy się ponownie.}}</translation>
+<translation id="3685209450716071127">Chromium nie może sprawdzić Twoich haseł. Sprawdź połączenie z internetem.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administrator prosi o ponowne uruchomienie Chromium, by przeglądarka mogła zainstalować tę aktualizację}=1{Administrator prosi o ponowne uruchomienie Chromium, by przeglądarka mogła zainstalować tę aktualizację. Okno incognito nie otworzy się ponownie.}few{Administrator prosi o ponowne uruchomienie Chromium, by przeglądarka mogła zainstalować tę aktualizację. # okna incognito nie otworzą się ponownie.}many{Administrator prosi o ponowne uruchomienie Chromium, by przeglądarka mogła zainstalować tę aktualizację. # okien incognito nie otworzy się ponownie.}other{Administrator prosi o ponowne uruchomienie Chromium, by przeglądarka mogła zainstalować tę aktualizację. # okna incognito nie otworzy się ponownie.}}</translation>
 <translation id="3713809861844741608">O&amp;twórz link w nowej karcie Chromium</translation>
 <translation id="3728336900324680424">Chromium będzie mieć dostęp do Dysku, by wyświetlać podpowiedzi na pasku adresu</translation>
@@ -205,6 +207,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Ponowne uruchomienie Chromium nastąpi w ciągu 1 dnia}few{Ponowne uruchomienie Chromium nastąpi w ciągu # dni}many{Ponowne uruchomienie Chromium nastąpi w ciągu # dni}other{Ponowne uruchomienie Chromium nastąpi w ciągu # dnia}}</translation>
 <translation id="8453117565092476964">Archiwum instalatora jest uszkodzone lub nieprawidłowe. Pobierz Chromium ponownie.</translation>
 <translation id="8493179195440786826">Chromium jest nieaktualny</translation>
+<translation id="8568283329061645092">Chromium może sprawdzić Twoje hasła, gdy zalogujesz się na swoje konto Google</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Autorzy Chromium. Wszelkie prawa zastrzeżone.</translation>
 <translation id="8619360774459241877">Uruchamiam Chromium…</translation>
 <translation id="8621669128220841554">Instalacja nie powiodła się z powodu nieokreślonego błędu. Pobierz Chromium ponownie.</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb
index f728e1c..47d7eafe 100644
--- a/chrome/app/resources/chromium_strings_pt-BR.xtb
+++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Sobre o &amp;Chromium</translation>
 <translation id="2977470724722393594">O Chromium está atualizado</translation>
 <translation id="2983934633046890458">O Chromium está tentando editar senhas.</translation>
+<translation id="3032706164202344641">O Chromium não pode verificar suas senhas. Tente mais tarde.</translation>
 <translation id="3032787606318309379">Adicionando ao Chromium...</translation>
 <translation id="3068515742935458733">Ajude a melhorar o Chromium. Envie relatórios de erros e <ph name="UMA_LINK" /> para o Google</translation>
 <translation id="3103660991484857065">Ocorreu uma falha no instalador ao descompactar o arquivo. Faça o download do Chromium novamente.</translation>
@@ -61,6 +62,7 @@
 <translation id="358997566136285270">Logotipo do Chromium</translation>
 <translation id="3639635944603682591">Os dados de navegação dessa pessoa serão excluídos deste dispositivo. Para recuperar os dados, faça login no Chromium como <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Uma nova atualização está disponível para o Chromium e será feita assim que você reiniciá-lo.}=1{Uma nova atualização está disponível para o Chromium e será feita assim que você reiniciá-lo. Sua janela anônima não será aberta novamente.}one{Uma nova atualização está disponível para o Chromium e será feita assim que você reiniciá-lo. Sua janela anônima não será aberta novamente.}other{Uma nova atualização está disponível para o Chromium e será feita assim que você reiniciá-lo. Suas # janelas anônimas não serão abertas novamente.}}</translation>
+<translation id="3685209450716071127">O Chromium não pode verificar suas senhas. Verifique sua conexão com a Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Seu administrador pede que você reinicie o Chromium para que esta atualização seja feita.}=1{Seu administrador pede que você reinicie o Chromium para que esta atualização seja feita. Sua janela anônima não será aberta novamente.}one{Seu administrador pede que você reinicie o Chromium para que esta atualização seja feita. Sua janela anônima não será aberta novamente.}other{Seu administrador pede que você reinicie o Chromium para que esta atualização seja feita. Suas # janelas anônimas não serão abertas novamente.}}</translation>
 <translation id="3713809861844741608">Abrir link em nova &amp;guia do Chromium</translation>
 <translation id="3728336900324680424">O Chromium acessará seu Drive para fazer sugestões na barra de endereço</translation>
@@ -201,6 +203,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Reiniciar o Chromium em 1 dia}one{Reiniciar o Chromium em # dia}other{Reiniciar o Chromium em # dias}}</translation>
 <translation id="8453117565092476964">O arquivo de instalação está corrompido ou não é válido. Faça o download do Chromium novamente.</translation>
 <translation id="8493179195440786826">O Chromium está desatualizado</translation>
+<translation id="8568283329061645092">O Chromium pode verificar suas senhas quando você faz login com sua Conta do Google</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Autores do Chromium. Todos os direitos reservados.</translation>
 <translation id="8619360774459241877">Iniciando o Chromium…</translation>
 <translation id="8621669128220841554">Falha na instalação devido a um erro não especificado. Faça o download do Chromium novamente.</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-PT.xtb b/chrome/app/resources/chromium_strings_pt-PT.xtb
index c9a452b8..c065106 100644
--- a/chrome/app/resources/chromium_strings_pt-PT.xtb
+++ b/chrome/app/resources/chromium_strings_pt-PT.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Acerca do &amp;Chromium</translation>
 <translation id="2977470724722393594">O Chromium está atualizado</translation>
 <translation id="2983934633046890458">O Chromium está a tentar editar palavras-passe.</translation>
+<translation id="3032706164202344641">O Chromium não consegue verificar as suas palavras-passe. Tente novamente mais tarde.</translation>
 <translation id="3032787606318309379">A adicionar ao Chromium...</translation>
 <translation id="3068515742935458733">Ajudar a melhorar o Chromium ao enviar relatórios de falhas e <ph name="UMA_LINK" /> à Google</translation>
 <translation id="3103660991484857065">Houve uma falha no programa de instalação ao descompactar o arquivo. Transfira novamente o Chromium.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Logótipo do Chromium</translation>
 <translation id="3639635944603682591">Os dados de navegação desta pessoa serão eliminados deste dispositivo. Para recuperar os dados, inicie sessão no Chromium como <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Está disponível uma atualização para o Chromium que será aplicada logo que o reinicie.}=1{Está disponível uma atualização para o Chromium que será aplicada logo que o reinicie. Não é possível reabrir a sua janela de navegação anónima.}other{Está disponível uma atualização para o Chromium que será aplicada logo que o reinicie. Não é possível reabrir as suas # janelas de navegação anónima.}}</translation>
+<translation id="3685209450716071127">O Chromium não consegue verificar as suas palavras-passe. Experimente verificar a sua ligação à Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{O seu administrador solicita-lhe que reinicie o Chromium para aplicar esta atualização.}=1{O seu administrador solicita-lhe que reinicie o Chromium para aplicar esta atualização. Não é possível reabrir a sua janela de navegação anónima.}other{O seu administrador solicita-lhe que reinicie o Chromium para aplicar esta atualização. Não é possível reabrir as suas # janelas de navegação anónima.}}</translation>
 <translation id="3713809861844741608">Abrir link num novo &amp;separador do Chromium</translation>
 <translation id="3728336900324680424">O Chromium vai aceder ao seu Drive para fornecer sugestões na barra de endereço.</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Reinicie o Chromium dentro de um dia}other{Reinicie o Chromium dentro de # dias}}</translation>
 <translation id="8453117565092476964">O arquivo do programa de instalação está corrompido ou não é válido. Transfira novamente o Chromium.</translation>
 <translation id="8493179195440786826">O Chromium Está Desatualizado</translation>
+<translation id="8568283329061645092">O Chromium pode verificar as suas palavras-passe quando inicia sessão com a sua Conta Google.</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Os autores do Chromium. Todos os direitos reservados.</translation>
 <translation id="8619360774459241877">A iniciar o Chromium…</translation>
 <translation id="8621669128220841554">A instalação falhou devido a um erro não especificado. Transfira novamente o Chromium .</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb
index 8f735e44..d9b03ee 100644
--- a/chrome/app/resources/chromium_strings_ro.xtb
+++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Despre &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium este actualizat</translation>
 <translation id="2983934633046890458">Chromium încearcă să modifice parolele.</translation>
+<translation id="3032706164202344641">Chromium nu îți poate verifica parolele. Încearcă din nou mai târziu.</translation>
 <translation id="3032787606318309379">Se adaugă la Chromium...</translation>
 <translation id="3068515742935458733">Contribuie la îmbunătățirea proiectului Chromium trimițând la Google rapoarte de blocare și <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Programul de instalare nu a putut decomprima arhiva. Descărcați din nou Chromium.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Sigla Chromium</translation>
 <translation id="3639635944603682591">Datele de navigare ale acestei persoane vor fi șterse de pe dispozitiv. Pentru a recupera datele, conectează-te la Chromium ca <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Este disponibilă o nouă actualizare pentru Chromium, iar aceasta va fi aplicată după ce îl relansezi.}=1{Este disponibilă o nouă actualizare pentru Chromium, iar aceasta va fi aplicată după ce îl relansezi. Fereastra incognito nu se va mai deschide.}few{Este disponibilă o nouă actualizare pentru Chromium, iar aceasta va fi aplicată după ce îl relansezi. Cele # ferestre incognito nu se vor mai deschide.}other{Este disponibilă o nouă actualizare pentru Chromium, iar aceasta va fi aplicată după ce îl relansezi. Cele # de ferestre incognito nu se vor mai deschide.}}</translation>
+<translation id="3685209450716071127">Chromium nu îți poate verifica parolele. Verifică-ți conexiunea la internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administratorul solicită să relansezi Chromium pentru a aplica această actualizare}=1{Administratorul solicită să relansezi Chromium pentru a aplica această actualizare. Fereastra incognito nu se va mai deschide.}few{Administratorul solicită să relansezi Chromium pentru a aplica această actualizare. Cele # ferestre incognito nu se vor mai deschide.}other{Administratorul solicită să relansezi Chromium pentru a aplica această actualizare. Cele # de ferestre incognito nu se vor mai deschide.}}</translation>
 <translation id="3713809861844741608">Deschide linkul într-o &amp;filă Chromium nouă</translation>
 <translation id="3728336900324680424">Chromium îți va accesa spațiul de stocare Drive pentru a face sugestii în bara de adrese</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Relansează Chromium în cel mult o zi}few{Relansează Chromium în cel mult # zile}other{Relansează Chromium în cel mult # de zile}}</translation>
 <translation id="8453117565092476964">Arhiva programului de instalare este deteriorată sau nevalidă. Descărcați din nou Chromium.</translation>
 <translation id="8493179195440786826">Chromium nu este actualizat</translation>
+<translation id="8568283329061645092">Chromium poate să îți verifice parolele atunci când te conectezi folosind Contul Google</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. Toate drepturile rezervate.</translation>
 <translation id="8619360774459241877">Se lansează Chromium...</translation>
 <translation id="8621669128220841554">Instalarea nu a reușit din cauza unei erori neprecizate. Descărcați Chromium din nou.</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb
index b9cbb805..007fa5e0 100644
--- a/chrome/app/resources/chromium_strings_ru.xtb
+++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">О &amp;Chromium</translation>
 <translation id="2977470724722393594">Вы используете последнюю версию Chromium</translation>
 <translation id="2983934633046890458">Chromium пытается изменить пароли</translation>
+<translation id="3032706164202344641">Не удается запустить проверку паролей в Chromium. Повторите попытку позже.</translation>
 <translation id="3032787606318309379">Добавление в Chromium...</translation>
 <translation id="3068515742935458733">Помочь улучшить Chromium, отправляя в Google отчеты о сбоях и <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Установка прервана на этапе распаковки архива. Скачайте Chromium ещё раз.</translation>
@@ -61,6 +62,7 @@
 <translation id="358997566136285270">Логотип Chromium</translation>
 <translation id="3639635944603682591">Данные о работе этого пользователя в браузере будут удалены с устройства. Чтобы восстановить их, войдите в Chromium как <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера.}=1{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера. Окно в режиме инкогнито не будет открыто повторно.}one{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера. # окно в режиме инкогнито не будет открыто повторно.}few{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера. # окна в режиме инкогнито не будут открыты повторно.}many{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера. # окон в режиме инкогнито не будут открыты повторно.}other{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера. # окна в режиме инкогнито не будут открыты повторно.}}</translation>
+<translation id="3685209450716071127">Не удается запустить проверку паролей в Chromium. Проверьте подключение к Интернету.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Администратор просит перезапустить Chromium для установки обновления.}=1{Администратор просит перезапустить Chromium для установки обновления. Окно в режиме инкогнито не будет открыто повторно.}one{Администратор просит перезапустить Chromium для установки обновления. # окно в режиме инкогнито не будет открыто повторно.}few{Администратор просит перезапустить Chromium для установки обновления. # окна в режиме инкогнито не будут открыты повторно.}many{Администратор просит перезапустить Chromium для установки обновления. # окон в режиме инкогнито не будут открыты повторно.}other{Администратор просит перезапустить Chromium для установки обновления. # окна в режиме инкогнито не будут открыты повторно.}}</translation>
 <translation id="3713809861844741608">Открыть ссылку в новой вкладке браузера Chromium</translation>
 <translation id="3728336900324680424">Chromium получит доступ к вашему Google Диску, чтобы вы могли просматривать рекомендации в адресной строке.</translation>
@@ -203,6 +205,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Перезапустите Chromium в течение дня}one{Перезапустите Chromium в течение # дня}few{Перезапустите Chromium в течение # дней}many{Перезапустите Chromium в течение # дней}other{Перезапустите Chromium в течение # дня}}</translation>
 <translation id="8453117565092476964">Установочный архив поврежден. Скачайте Chromium ещё раз.</translation>
 <translation id="8493179195440786826">Версия Chromium устарела</translation>
+<translation id="8568283329061645092">Chromium проверит ваши пароли, когда вы войдете в аккаунт Google.</translation>
 <translation id="8586442755830160949">© The Chromium Authors, <ph name="YEAR" /> . Все права защищены.</translation>
 <translation id="8619360774459241877">Запуск Chromium...</translation>
 <translation id="8621669128220841554">В процессе установки произошла неизвестная ошибка. Скачайте Chromium ещё раз.</translation>
diff --git a/chrome/app/resources/chromium_strings_si.xtb b/chrome/app/resources/chromium_strings_si.xtb
index b6e50207..daa122e0 100644
--- a/chrome/app/resources/chromium_strings_si.xtb
+++ b/chrome/app/resources/chromium_strings_si.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">&amp;Chromium පිළිබඳ</translation>
 <translation id="2977470724722393594">Chromium යාවත්කාලීනයි</translation>
 <translation id="2983934633046890458">Chromium මුරපද සංස්කරණ කිරීමට උත්සාහ කරයි.</translation>
+<translation id="3032706164202344641">Chromium හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. පසුව නැවත උත්සාහ කරන්න.</translation>
 <translation id="3032787606318309379">Chromium වෙත එක් කෙරෙමින්...</translation>
 <translation id="3068515742935458733">බිඳ වැටුම් වාර්තා සහ <ph name="UMA_LINK" /> Google වෙත යවමින් Google Chromium දියුණු කිරීමට සහය වන්න</translation>
 <translation id="3103660991484857065">ස්ථාපකය සංරක්ෂිතය සම්පීඩනය නොකිරීමට අසමත් විය. කරුණාකර නැවත Chromium බාගන්න.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium ලාංඡනය</translation>
 <translation id="3639635944603682591">මෙම පුද්ගලයාගේ බ්‍රවුස් කිරීමේ දත්ත මෙම උපාංගයෙන් මකනු ලැබේ. දත්ත ප්‍රතිසාධන කිරීමට, <ph name="USER_EMAIL" /> ලෙස Chromium එකට පුරන්න.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium සඳහා නව යාවත්කාලීනයක් ලබා ගත හැකි අතර ඔබ යළි දියත් කරන විගස යොදනු ලැබේ.}=1{Chromium සඳහා නව යාවත්කාලීනයක් ලබා ගත හැකි අතර ඔබ යළි දියත් කරන විගස යොදනු ලැබේ. ඔබේ අප්‍රසිද්ධ කවුළුව යළි විවෘත නොවෙයි.}one{Chromium සඳහා නව යාවත්කාලීනයක් ලබා ගත හැකි අතර ඔබ යළි දියත් කරන විගස යොදනු ලැබේ. ඔබේ අප්‍රසිද්ධ කවුළු # යළි විවෘත නොවෙයි.}other{Chromium සඳහා නව යාවත්කාලීනයක් ලබා ගත හැකි අතර ඔබ යළි දියත් කරන විගස යොදනු ලැබේ. ඔබේ අප්‍රසිද්ධ කවුළු # යළි විවෘත නොවෙයි.}}</translation>
+<translation id="3685209450716071127">Chromium හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. ඔබේ අන්තර්ජාල සම්බන්ධතාව පරීක්‍ෂා කිරීමට උත්සාහ කරන්න.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{මෙම යාවත්කාලීනය යෙදීමට Chromium නැවත ආරම්භ කරන ලෙසට පරිපාලකයා ඔබට පවසයි}=1{මෙම යාවත්කාලීනය යෙදීමට Chromium නැවත ආරම්භ කරන ලෙසට පරිපාලකයා ඔබට පවසයි. ඔබේ අප්‍රසිද්ධ කවුළුව යළි විවෘත නොවෙයි.}one{මෙම යාවත්කාලීනය යෙදීමට Chromium නැවත ආරම්භ කරන ලෙසට පරිපාලකයා ඔබට පවසයි. ඔබේ අප්‍රසිද්ධ කවුළු # යළි විවෘත නොවෙයි.}other{මෙම යාවත්කාලීනය යෙදීමට Chromium නැවත ආරම්භ කරන ලෙසට පරිපාලකයා ඔබට පවසයි. ඔබේ අප්‍රසිද්ධ කවුළු # යළි විවෘත නොවෙයි.}}</translation>
 <translation id="3713809861844741608">සබැඳිය නව Chromium ප&amp;ටිත්තක විවෘත කරන්න</translation>
 <translation id="3728336900324680424">ලිපින තීරුවේ යෝජනා කිරීමට Chromium විසින් ඔබගේ Drive ප්‍රවේශ කරනු ඇත</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{දිනයක් ඇතුළත Chromium යළි දියත් කරන්න}one{දින # ක් ඇතුළත Chromium යළි දියත් කරන්න}other{දින # ක් ඇතුළත Chromium යළි දියත් කරන්න}}</translation>
 <translation id="8453117565092476964">ස්ථාපන ගබඩාව නරක් වී හෝ වැරදිය. කරුණාකර නැවත Chromium බාගන්න.</translation>
 <translation id="8493179195440786826">Chromium යල් පැනගොස් ඇත</translation>
+<translation id="8568283329061645092">ඔබ ඔබේ Google ගිණුම මඟින් පුරන විට Chromium ඔබේ මුරපද පරීක්‍ෂා කළ හැක</translation>
 <translation id="8586442755830160949">හිමිකම <ph name="YEAR" /> Chromium කතෲවරුන්. සියළුම හිමිකම් ඇවිරිනි.</translation>
 <translation id="8619360774459241877">Chromium දියත් කරමින්...</translation>
 <translation id="8621669128220841554">නිශ්චිත නොමැති දෝෂයක් හේතුවෙන් ස්ථාපනය අසාර්ථක විය. නැවතත් Chromium බාගන්න.</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb
index 4d3e9f5..6b1fee9b 100644
--- a/chrome/app/resources/chromium_strings_sk.xtb
+++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Informácie o prehliadači &amp;Chromium</translation>
 <translation id="2977470724722393594">Prehliadač Chromium bol aktualizovaný</translation>
 <translation id="2983934633046890458">Chromium sa pokúša upraviť heslá.</translation>
+<translation id="3032706164202344641">Chromium nemôže skontrolovať heslá. Skúste to znova neskôr.</translation>
 <translation id="3032787606318309379">Pridáva sa do prehliadača Chromium...</translation>
 <translation id="3068515742935458733">Pomôcť zlepšiť prehliadač Chromium odosielaním správ o zlyhaní a <ph name="UMA_LINK" /> spoločnosti Google</translation>
 <translation id="3103660991484857065">Inštalačný program pri dekomprimácii archívu zlyhal. Stiahnite prehliadač Chromium znova.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Logo prehliadača Chromium</translation>
 <translation id="3639635944603682591">Dáta prehliadania tejto osoby sa odstránia z tohto zariadenia. Ak ich chcete obnoviť, prihláste sa do prehliadača Chromium ako <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{K dispozícii je aktualizácia pre Chromium, ktorá bude použitá po najbližšom novom spustení.}=1{K dispozícii je aktualizácia pre Chromium, ktorá bude použitá po najbližšom novom spustení. Vaše okno inkognito sa neotvorí.}few{K dispozícii je aktualizácia pre Chromium, ktorá bude použitá po najbližšom novom spustení. Vaše # okná inkognito sa neotvoria.}many{K dispozícii je aktualizácia pre Chromium, ktorá bude použitá po najbližšom novom spustení. Your # Incognito windows won't reopen.}other{K dispozícii je aktualizácia pre Chromium, ktorá bude použitá po najbližšom novom spustení. Vašich # okien inkognito sa neotvorí.}}</translation>
+<translation id="3685209450716071127">Chromium nemôže skontrolovať heslá. Skontrolujte internetové pripojenie.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Správca vás žiada o nové spustenie prehliadača Chromium, aby sa použila táto aktualizácia}=1{Správca vás žiada o nové spustenie prehliadača Chromium, aby sa použila táto aktualizácia. Vaše okno inkognito sa neotvorí.}few{Správca vás žiada o nové spustenie prehliadača Chromium, aby sa použila táto aktualizácia. Vaše # okná inkognito sa neotvoria.}many{Správca vás žiada o nové spustenie prehliadača Chromium, aby sa použila táto aktualizácia. Your # Incognito windows won't reopen.}other{Správca vás žiada o nové spustenie prehliadača Chromium, aby sa použila táto aktualizácia. Vašich # okien inkognito sa neotvorí.}}</translation>
 <translation id="3713809861844741608">Otvoriť odkaz na novej &amp;karte prehliadača Chromium</translation>
 <translation id="3728336900324680424">Chromium bude mať prístup na váš Disk, aby mohol v paneli s adresou zobrazovať návrhy</translation>
@@ -209,6 +211,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium znova spustite do jedného dňa}few{Chromium znova spustite do # dní}many{Chromium znova spustite do # dňa}other{Chromium znova spustite do # dní}}</translation>
 <translation id="8453117565092476964">Archív inštalácie je poškodený alebo neplatný. Stiahnite prehliadač Chromium znova.</translation>
 <translation id="8493179195440786826">Prehliadač Chromium je zastaraný</translation>
+<translation id="8568283329061645092">Keď sa prihlásite pomocou účtu Google, Chromium môže skontrolovať vaše heslá</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Autori Chromium. Všetky práva vyhradené.</translation>
 <translation id="8619360774459241877">Spúšťa sa Chromium…</translation>
 <translation id="8621669128220841554">Inštalácia zlyhala kvôli neznámej chybe. Skúste prehliadač Chromium stiahnuť znova.</translation>
diff --git a/chrome/app/resources/chromium_strings_sl.xtb b/chrome/app/resources/chromium_strings_sl.xtb
index 5fd9d007..b01cd497 100644
--- a/chrome/app/resources/chromium_strings_sl.xtb
+++ b/chrome/app/resources/chromium_strings_sl.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">O &amp;Chromiumu</translation>
 <translation id="2977470724722393594">Chromium je posodobljen</translation>
 <translation id="2983934633046890458">Chromium poskuša urejati gesla.</translation>
+<translation id="3032706164202344641">Chromium ne more preveriti gesel. Poskusite pozneje.</translation>
 <translation id="3032787606318309379">Dodajanje v Chromium ...</translation>
 <translation id="3068515742935458733">Pomagajte izboljšati Chromium – Googlu pošiljajte poročila o zrušitvah in ta dokument: <ph name="UMA_LINK" />.</translation>
 <translation id="3103660991484857065">Namestitvenemu programu ni uspelo razširiti arhiva. Znova prenesite Chromium.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Logotip Chromiuma</translation>
 <translation id="3639635944603682591">Podatki brskanja te osebe bodo izbrisani iz te naprave. Če želite podatke obnoviti, se prijavite v Chromium kot <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete.}=1{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete. Okno brez beleženja zgodovine se ne bo znova odprlo.}one{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete. # okno brez beleženja zgodovine se ne bo znova odprlo.}two{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete. # okni brez beleženja zgodovine se ne bosta znova odprli.}few{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete. # okna brez beleženja zgodovine se ne bodo znova odprla.}other{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete. # oken brez beleženja zgodovine se ne bo znova odprlo.}}</translation>
+<translation id="3685209450716071127">Chromium ne more preveriti gesel. Poskusite preveriti internetno povezavo.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium.}=1{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium. Okno brez beleženja zgodovine se ne bo znova odprlo.}one{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium. # okno brez beleženja zgodovine se ne bo znova odprlo.}two{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium. # okni brez beleženja zgodovine se ne bosta znova odprli.}few{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium. # okna brez beleženja zgodovine se ne bodo znova odprla.}other{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium. # oken brez beleženja zgodovine se ne bo znova odprlo.}}</translation>
 <translation id="3713809861844741608">Odpiranje povezave na novem &amp;zavihku v Chromiumu</translation>
 <translation id="3728336900324680424">Chromium bo dostopal do Googla Drive zaradi ponujanja predlogov v naslovni vrstici</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium znova zaženite v enem dnevu}one{Chromium znova zaženite v # dnevu}two{Chromium znova zaženite v # dnevih}few{Chromium znova zaženite v # dnevih}other{Chromium znova zaženite v # dnevih}}</translation>
 <translation id="8453117565092476964">Arhiv namestitvenega programa je poškodovan ali neveljaven. Znova prenesite Chromium.</translation>
 <translation id="8493179195440786826">Chromium je zastarel</translation>
+<translation id="8568283329061645092">Chromium lahko preveri vaša gesla, ko se prijavite z računom Google</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Ustvarjalci Chromiuma. Vse pravice pridržane.</translation>
 <translation id="8619360774459241877">Zagon Chromiuma …</translation>
 <translation id="8621669128220841554">Namestitev ni uspela zaradi nenavedene napake. Znova prenesite Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_sq.xtb b/chrome/app/resources/chromium_strings_sq.xtb
index 1036bd86..17256b35 100644
--- a/chrome/app/resources/chromium_strings_sq.xtb
+++ b/chrome/app/resources/chromium_strings_sq.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Rreth &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium është i përditësuar</translation>
 <translation id="2983934633046890458">Chromium po përpiqet t'i modifikojë fjalëkalimet.</translation>
+<translation id="3032706164202344641">Chromium nuk mund t'i kontrollojë fjalëkalimet e tua. Provo përsëri më vonë.</translation>
 <translation id="3032787606318309379">Po shton në Chromium...</translation>
 <translation id="3068515742935458733">Ndihmo në përmirësimin e Chromium duke dërguar te Google raportet e ndërprerjeve aksidentale dhe <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Instaluesi nuk arriti ta nxjerrë arkivin. Shkarko përsëri Chromium.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Logoja e Chromium</translation>
 <translation id="3639635944603682591">Të dhënat e shfletimit të këtij personi do të fshihen nga kjo pajisje. Për të rikuperuar të dhënat, identifikohu në Chromium si <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Ka një përditësim të ri për Chromium dhe do të zbatohet sapo ta rinisësh.}=1{Ka një përditësim të ri për Chromium dhe do të zbatohet sapo ta rinisësh. Dritarja jote "e fshehtë" nuk do të rihapet.}other{Ka një përditësim të ri për Chromium dhe do të zbatohet sapo ta rinisësh. # dritaret e tua "të fshehta" nuk do të rihapen.}}</translation>
+<translation id="3685209450716071127">Chromium nuk mund t'i kontrollojë fjalëkalimet e tua. Provo të kontrollosh lidhjen e internetit.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administratori yt kërkon që të hapësh përsëri Chromium për të zbatuar këtë përditësim}=1{Administratori yt kërkon që të hapësh përsëri Chromium për të zbatuar këtë përditësim Dritarja jote "e fshehtë" nuk do të rihapet.}other{Administratori yt kërkon që të hapësh përsëri Chromium për të zbatuar këtë përditësim # dritaret e tua "të fshehta" nuk do të rihapen.}}</translation>
 <translation id="3713809861844741608">Hape lidhjen në një &amp;skedë të re të Chromium</translation>
 <translation id="3728336900324680424">Chromium do të ketë qasje te "Disku" yt për të dhënë sugjerime në shiritin e adresës</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Hap përsëri Chromium brenda një dite}other{Hap përsëri Chromium brenda # ditësh}}</translation>
 <translation id="8453117565092476964">Arkivi i instaluesit është i dëmtuar ose i pavlefshëm. Shkarkoje Chromium përsëri.</translation>
 <translation id="8493179195440786826">Chromium nuk është i përditësuar</translation>
+<translation id="8568283329061645092">Chromium mund t'i kontrollojë fjalëkalimet e tua kur të identifikohesh me "Llogarinë tënde të Google"</translation>
 <translation id="8586442755830160949">Të drejtat e autorit <ph name="YEAR" /> Autorët e Chromium. Të gjitha të drejtat të rezervuara.</translation>
 <translation id="8619360774459241877">Po hapet Chromium...</translation>
 <translation id="8621669128220841554">Instalimi dështoi për shkak të një gabimi të papërcaktuar. Shkarko përsëri Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_sr-Latn.xtb b/chrome/app/resources/chromium_strings_sr-Latn.xtb
index 82a18ae..49e4ade 100644
--- a/chrome/app/resources/chromium_strings_sr-Latn.xtb
+++ b/chrome/app/resources/chromium_strings_sr-Latn.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">O &amp;Chromium-u</translation>
 <translation id="2977470724722393594">Chromium je ažuriran</translation>
 <translation id="2983934633046890458">Chromium pokušava da izmeni lozinke.</translation>
+<translation id="3032706164202344641">Chromium ne može da vam proverava lozinke. Probajte ponovo kasnije.</translation>
 <translation id="3032787606318309379">Dodavanje u Chromium...</translation>
 <translation id="3068515742935458733">Pomozite nam da poboljšamo Chromium tako što ćete Google-u slati izveštaje o otkazivanju i <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Program za instalaciju nije uspeo da dekomprimuje arhivu. Preuzmite Chromium ponovo.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium logotip</translation>
 <translation id="3639635944603682591">Podaci pregledanja ove osobe će biti izbrisani sa ovog uređaja. Da biste vratili podatke, prijavite se u Chromium kao <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Novo ažuriranje za Chromium je dostupno i primeniće se čim ga ponovo pokrenete.}=1{Novo ažuriranje za Chromium je dostupno i primeniće se čim ga ponovo pokrenete. Prozor bez arhiviranja se neće ponovo otvoriti.}one{Novo ažuriranje za Chromium je dostupno i primeniće se čim ga ponovo pokrenete. # prozor bez arhiviranja se neće ponovo otvoriti.}few{Novo ažuriranje za Chromium je dostupno i primeniće se čim ga ponovo pokrenete. # prozora bez arhiviranja se neće ponovo otvoriti.}other{Novo ažuriranje za Chromium je dostupno i primeniće se čim ga ponovo pokrenete. # prozora bez arhiviranja se neće ponovo otvoriti.}}</translation>
+<translation id="3685209450716071127">Chromium ne može da vam proverava lozinke. Proverite internet vezu.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administrator traži da ponovo pokrenete Chromium da biste primenili ovo ažuriranje}=1{Administrator traži da ponovo pokrenete Chromium da biste primenili ovo ažuriranje. Prozor bez arhiviranja se neće ponovo otvoriti.}one{Administrator traži da ponovo pokrenete Chromium da biste primenili ovo ažuriranje. # prozor bez arhiviranja se neće ponovo otvoriti.}few{Administrator traži da ponovo pokrenete Chromium da biste primenili ovo ažuriranje. # prozora bez arhiviranja se neće ponovo otvoriti.}other{Administrator traži da ponovo pokrenete Chromium da biste primenili ovo ažuriranje. # prozora bez arhiviranja se neće ponovo otvoriti.}}</translation>
 <translation id="3713809861844741608">Otvori link u novoj Chromium &amp;kartici</translation>
 <translation id="3728336900324680424">Chromium će pristupati Disku da bi prikazivao predloge na traci za adresu</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Ponovo pokrenite Chromium za jedan dan}one{Ponovo pokrenite Chromium za # dan}few{Ponovo pokrenite Chromium za # dana}other{Ponovo pokrenite Chromium za # dana}}</translation>
 <translation id="8453117565092476964">Arhiva programa za instalaciju je oštećena ili nevažeća. Preuzmite Chromium ponovo.</translation>
 <translation id="8493179195440786826">Chromium je zastareo</translation>
+<translation id="8568283329061645092">Chromium može da vam proverava lozinke kada se prijavite pomoću Google naloga</translation>
 <translation id="8586442755830160949">Autorska prava <ph name="YEAR" />. Autori Chromium-a. Sva prava zadržana.</translation>
 <translation id="8619360774459241877">Pokreće se Chromium...</translation>
 <translation id="8621669128220841554">Instalacija nije uspela zbog neodređene greške. Preuzmite Chromium ponovo.</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb
index e2ceb13..fe82faf 100644
--- a/chrome/app/resources/chromium_strings_sr.xtb
+++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">О &amp;Chromium-у</translation>
 <translation id="2977470724722393594">Chromium је ажуриран</translation>
 <translation id="2983934633046890458">Chromium покушава да измени лозинке.</translation>
+<translation id="3032706164202344641">Chromium не може да вам проверава лозинке. Пробајте поново касније.</translation>
 <translation id="3032787606318309379">Додавање у Chromium...</translation>
 <translation id="3068515742935458733">Помозите нам да побољшамо Chromium тако што ћете Google-у слати извештаје о отказивању и <ph name="UMA_LINK" /></translation>
 <translation id="3103660991484857065">Програм за инсталацију није успео да декомпримује архиву. Преузмите Chromium поново.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium логотип</translation>
 <translation id="3639635944603682591">Подаци прегледања ове особе ће бити избрисани са овог уређаја. Да бисте вратили податке, пријавите се у Chromium као <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Ново ажурирање за Chromium је доступно и примениће се чим га поново покренете.}=1{Ново ажурирање за Chromium је доступно и примениће се чим га поново покренете. Прозор без архивирања се неће поново отворити.}one{Ново ажурирање за Chromium је доступно и примениће се чим га поново покренете. # прозор без архивирања се неће поново отворити.}few{Ново ажурирање за Chromium је доступно и примениће се чим га поново покренете. # прозора без архивирања се неће поново отворити.}other{Ново ажурирање за Chromium је доступно и примениће се чим га поново покренете. # прозора без архивирања се неће поново отворити.}}</translation>
+<translation id="3685209450716071127">Chromium не може да вам проверава лозинке. Проверите интернет везу.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Администратор тражи да поново покренете Chromium да бисте применили ово ажурирање}=1{Администратор тражи да поново покренете Chromium да бисте применили ово ажурирање. Прозор без архивирања се неће поново отворити.}one{Администратор тражи да поново покренете Chromium да бисте применили ово ажурирање. # прозор без архивирања се неће поново отворити.}few{Администратор тражи да поново покренете Chromium да бисте применили ово ажурирање. # прозора без архивирања се неће поново отворити.}other{Администратор тражи да поново покренете Chromium да бисте применили ово ажурирање. # прозора без архивирања се неће поново отворити.}}</translation>
 <translation id="3713809861844741608">Отвори линк у новој Chromium &amp;картици</translation>
 <translation id="3728336900324680424">Chromium ће приступати Диску да би приказивао предлоге на траци за адресу</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Поново покрените Chromium за један дан}one{Поново покрените Chromium за # дан}few{Поново покрените Chromium за # дана}other{Поново покрените Chromium за # дана}}</translation>
 <translation id="8453117565092476964">Архива програма за инсталацију је оштећена или неважећа. Преузмите Chromium поново.</translation>
 <translation id="8493179195440786826">Chromium је застарео</translation>
+<translation id="8568283329061645092">Chromium може да вам проверава лозинке када се пријавите помоћу Google налога</translation>
 <translation id="8586442755830160949">Ауторска права <ph name="YEAR" />. Аутори Chromium-а. Сва права задржана.</translation>
 <translation id="8619360774459241877">Покреће се Chromium...</translation>
 <translation id="8621669128220841554">Инсталација није успела због неодређене грешке. Преузмите Chromium поново.</translation>
diff --git a/chrome/app/resources/chromium_strings_sv.xtb b/chrome/app/resources/chromium_strings_sv.xtb
index 6039c92..ce6b2a9 100644
--- a/chrome/app/resources/chromium_strings_sv.xtb
+++ b/chrome/app/resources/chromium_strings_sv.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Om &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium är uppdaterat</translation>
 <translation id="2983934633046890458">Lösenorden i Chromium redigeras.</translation>
+<translation id="3032706164202344641">Chromium kan inte kontrollera dina lösenord. Försök igen senare.</translation>
 <translation id="3032787606318309379">Lägger till i Chromium ...</translation>
 <translation id="3068515742935458733">Hjälp oss att göra Chromium bättre genom att skicka felrapporter och <ph name="UMA_LINK" /> till Google</translation>
 <translation id="3103660991484857065">Det gick inte att packa upp arkivet med installationsfilen. Ladda ned Chromium igen.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium-logotyp</translation>
 <translation id="3639635944603682591">Den här personens webbläsardata tas bort från enheten. Logga in i Chromium som <ph name="USER_EMAIL" /> om du vill återställa data.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Det finns en ny Chromium-uppdatering som tillämpas så snart du startar om.}=1{Det finns en ny Chromium-uppdatering som tillämpas så snart du startar om. Inkognitofönstret öppnas inte igen.}other{Det finns en ny Chromium-uppdatering som tillämpas så snart du startar om. De # inkognitofönstren öppnas inte igen.}}</translation>
+<translation id="3685209450716071127">Chromium kan inte kontrollera dina lösenord. Testa att kontrollera internetanslutningen.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administratören meddelar att du bör starta om Chromium så att uppdateringen tillämpas}=1{Administratören meddelar att du bör starta om Chromium så att uppdateringen tillämpas. Inkognitofönstret öppnas inte igen.}other{Administratören meddelar att du bör starta om Chromium så att uppdateringen tillämpas. De # inkognitofönstren öppnas inte igen.}}</translation>
 <translation id="3713809861844741608">Öppna länken i en ny &amp;flik i Chromium</translation>
 <translation id="3728336900324680424">Chromium får åtkomst till din Drive så att du kan få förslag därifrån i adressfältet</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Starta om Chromium inom en dag}other{Starta om Chromium inom # dagar}}</translation>
 <translation id="8453117565092476964">Arkivet för installationsfilen är skadat eller ogiltigt. Ladda ned Chromium igen.</translation>
 <translation id="8493179195440786826">Den här versionen av Chromium är inaktuell</translation>
+<translation id="8568283329061645092">Chromium kan kontrollera dina lösenord när du loggar in med Google-kontot</translation>
 <translation id="8586442755830160949">Upphovsrätt <ph name="YEAR" /> The Chromium Authors. Med ensamrätt.</translation>
 <translation id="8619360774459241877">Chromium startas …</translation>
 <translation id="8621669128220841554">Installationen misslyckades på grund av ett okänt fel. Ladda ned Chromium igen.</translation>
diff --git a/chrome/app/resources/chromium_strings_sw.xtb b/chrome/app/resources/chromium_strings_sw.xtb
index efac1d69..fe505d43 100644
--- a/chrome/app/resources/chromium_strings_sw.xtb
+++ b/chrome/app/resources/chromium_strings_sw.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Kuhusu Chromium</translation>
 <translation id="2977470724722393594">Chromium imesasishwa</translation>
 <translation id="2983934633046890458">Chromium inajaribu kubadilisha manenosiri.</translation>
+<translation id="3032706164202344641">Chromium imeshindwa kukagua manenosiri yako. Jaribu tena baadaye.</translation>
 <translation id="3032787606318309379">Inaongeza kwenye Chromium...</translation>
 <translation id="3068515742935458733">Saidia kuboresha Chromium kwa kutuma ripoti za kuacha kufanya kazi na <ph name="UMA_LINK" /> kwenda Google</translation>
 <translation id="3103660991484857065">Kisakinishi kilishindwa kufinyuza kumbukumbu. Tafadhali pakua Chromium tena.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Nembo ya Chromium</translation>
 <translation id="3639635944603682591">Data ya kuvinjari ya mtu huyu itafutwa kwenye kifaa hiki. Ili kurejesha data, ingia katika Chromium ukitumia <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Sasisho jipya la Chromium linapatikana na litaanza kutumika pindi utakapofungua tena.}=1{Sasisho jipya la Chromium linapatikana na litaanza kutumika pindi utakapofungua tena. Haitafungua upya dirisha fiche.}other{Sasisho jipya la Chromium linapatikana na litaanza kutumika pindi utakapofungua tena. Haitafungua upya madirisha # fiche.}}</translation>
+<translation id="3685209450716071127">Chromium imeshindwa kukagua manenosiri yako. Jaribu kuangalia muunganisho wako wa Intaneti.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Msimamizi wako anataka ufungue Chromium tena ili utumie sasisho hili}=1{Msimamizi wako anataka ufungue Chromium tena ili utumie sasisho hili. Haitafungua upya dirisha fiche.}other{Msimamizi wako anataka ufungue Chromium tena ili utumie sasisho hili. Haitafungua upya madirisha # fiche.}}</translation>
 <translation id="3713809861844741608">Fungua kiungo katika kichupo kipya cha Chromium</translation>
 <translation id="3728336900324680424">Chromium itafikia Hifadhi yako ili itoe mapendekezo kwenye sehemu ya anwani</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Fungua Chromium upya ndani ya siku moja}other{Fungua Chromium upya ndani ya siku #}}</translation>
 <translation id="8453117565092476964">Kumbukumbu ya kisakinishi imeharibika au ni batili. Tafadhali pakua Chromium tena.</translation>
 <translation id="8493179195440786826">Chromium Imepitwa na Wakati</translation>
+<translation id="8568283329061645092">Chromium inaweza kukagua manenosiri unapoingia ukitumia Akaunti yako ya Google</translation>
 <translation id="8586442755830160949">Hakimiliki <ph name="YEAR" /> Wasanidi wa Chromium. Haki zote zimehifadhiwa.</translation>
 <translation id="8619360774459241877">Inaanzisha Chromium...</translation>
 <translation id="8621669128220841554">Usakinishaji ulishindwa kwa sababu ya hitilafu isiyobainika. Tafadhali pakua Chromium tena.</translation>
diff --git a/chrome/app/resources/chromium_strings_ta.xtb b/chrome/app/resources/chromium_strings_ta.xtb
index 757d8f9..7d3c2cbe6c 100644
--- a/chrome/app/resources/chromium_strings_ta.xtb
+++ b/chrome/app/resources/chromium_strings_ta.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">&amp;Chromium அறிமுகம்</translation>
 <translation id="2977470724722393594">Chromium புதுப்பித்த நிலையில் உள்ளது</translation>
 <translation id="2983934633046890458">Chromium கடவுச்சொற்களைத் திருத்த முயல்கிறது.</translation>
+<translation id="3032706164202344641">Chromiumமால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை. பிறகு முயலவும்.</translation>
 <translation id="3032787606318309379">Chromium இல் சேர்க்கிறது...</translation>
 <translation id="3068515742935458733">சிதைவு அறிக்கைகளையும் <ph name="UMA_LINK" /> உம் Google க்கு அனுப்புவதன் மூலம் Chromium ஐ மேலும் சிறப்பானதாக்க உதவவும்</translation>
 <translation id="3103660991484857065">காப்பகத்தைச் சுருக்குவதில் நிறுவி தோல்வியடைந்தது. Chromiumமை மீண்டும் பதிவிறக்குக.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium லோகோ</translation>
 <translation id="3639635944603682591">இவருடைய உலாவிய தரவு இந்தச் சாதனத்திலிருந்து நீக்கப்படும். தரவை மீட்டெடுக்க, Chromiumமில் <ph name="USER_EMAIL" /> ஆக உள்நுழையவும்.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromiumமின் புதிய புதுப்பிப்பு உள்ளது, மீண்டும் தொடங்கும்போது அது பயன்படுத்தப்படும்.}=1{Chromiumமின் புதிய புதுப்பிப்பு உள்ளது, மீண்டும் தொடங்கும்போது அது பயன்படுத்தப்படும். உங்கள் மறைநிலை சாளரம் மீண்டும் திறக்காது.}other{Chromiumமின் புதிய புதுப்பிப்பு உள்ளது, மீண்டும் தொடங்கும்போது அது பயன்படுத்தப்படும். உங்கள் # மறைநிலை சாளரங்கள் மீண்டும் திறக்காது.}}</translation>
+<translation id="3685209450716071127">Chromiumமால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியாது. உங்கள் இணைய இணைப்பைச் சரிபார்க்க முயலவும்.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{இந்தப் புதுப்பிப்பைப் பயன்படுத்த Chromiumமை மீண்டும் தொடங்கும்படி உங்கள் நிர்வாகி பரிந்துரைக்கிறார்}=1{இந்தப் புதுப்பிப்பைப் பயன்படுத்த Chromiumமை மீண்டும் தொடங்கும்படி உங்கள் நிர்வாகி பரிந்துரைக்கிறார். உங்கள் மறைநிலை சாளரம் மீண்டும் திறக்காது.}other{இந்தப் புதுப்பிப்பைப் பயன்படுத்த Chromiumமை மீண்டும் தொடங்கும்படி உங்கள் நிர்வாகி பரிந்துரைக்கிறார். உங்கள் # மறைநிலை சாளரங்கள் மீண்டும் திறக்காது.}}</translation>
 <translation id="3713809861844741608">புதிய Chromium &amp;தாவலில் இணைப்பைத் திற</translation>
 <translation id="3728336900324680424">முகவரிப் பட்டியில் பரிந்துரைகளை வழங்க, Chromium உங்கள் இயக்ககத்தை அணுகும்</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{ஒரு நாளுக்குள் Chromiumமை மீண்டும் தொடங்கவும்}other{# நாட்களுக்குள் Chromiumமை மீண்டும் தொடங்கவும்}}</translation>
 <translation id="8453117565092476964">நிறுவி காப்பகம் சிதைந்துள்ளது அல்லது தவறானது. Chromiumமை மீண்டும் பதிவிறக்கவும்.</translation>
 <translation id="8493179195440786826">Chromium காலாவதியானது</translation>
+<translation id="8568283329061645092">Google கணக்கைப் பயன்படுத்தி நீங்கள் உள்நுழையும்போது Chromium உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியும்</translation>
 <translation id="8586442755830160949">பதிப்புரிமை <ph name="YEAR" /> Chromium உருவாக்குநர்கள். அனைத்து உரிமைகளும் பாதுகாக்கப்பட்டவை.</translation>
 <translation id="8619360774459241877">Chromiumமைத் தொடங்குகிறது...</translation>
 <translation id="8621669128220841554">குறிப்பிடப்படாத பிழை காரணமாக நிறுவல் தோல்வியடைந்தது. Chromiumமை மீண்டும் பதிவிறக்கம் செய்க.</translation>
diff --git a/chrome/app/resources/chromium_strings_te.xtb b/chrome/app/resources/chromium_strings_te.xtb
index 3828538..d353d8e 100644
--- a/chrome/app/resources/chromium_strings_te.xtb
+++ b/chrome/app/resources/chromium_strings_te.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">&amp;Chromium గురించి</translation>
 <translation id="2977470724722393594">Chromium తాజాగా ఉంది</translation>
 <translation id="2983934633046890458">Chromium పాస్‌వర్డ్‌లను ఎడిట్ చేయడానికి ప్రయత్నిస్తోంది.</translation>
+<translation id="3032706164202344641">Chromium మీ పాస్‌వర్డ్‌లను తనిఖీ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation>
 <translation id="3032787606318309379">Chromiumకి జోడిస్తోంది...</translation>
 <translation id="3068515742935458733">Googleకు వినియోగ గణాంకాలు, <ph name="UMA_LINK" />ను పంపడం ద్వారా Chromiumను మెరుగుపరచడంలో సహాయపడండి</translation>
 <translation id="3103660991484857065">ఇన్‌స్టాలర్ ఆర్కైవ్‌ను వాస్తవ పరిమాణానికి తీసుకుని రావడంలో విఫలమైంది. దయచేసి Chromiumను మళ్లీ డౌన్‌లోడ్ చేయండి.</translation>
@@ -61,6 +62,7 @@
 <translation id="358997566136285270">Chromium లోగో</translation>
 <translation id="3639635944603682591">ఈ వ్యక్తి బ్రౌజింగ్ డేటా‌ ఈ పరికరం నుండి తొలగించబడుతుంది. డేటాను పునరుద్ధరించడానికి, <ph name="USER_EMAIL" />గా Chromiumకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromiumకు కొత్త అప్‌డేట్ అందుబాటులో ఉంది, మీరు పునఃప్రారంభించిన వెంటనే వర్తింపజేయబడుతుంది.}=1{Chromiumకు కొత్త అప్‌డేట్ అందుబాటులో ఉంది, మీరు పునఃప్రారంభించిన వెంటనే వర్తింపజేయబడుతుంది. మీ అజ్ఞాత విండో మళ్లీ తెరవబడదు.}other{Chromiumకు కొత్త అప్‌డేట్ అందుబాటులో ఉంది, మీరు పునఃప్రారంభించిన వెంటనే వర్తింపజేయబడుతుంది. మీ # అజ్ఞాత విండోలు మళ్లీ తెరవబడవు.}}</translation>
+<translation id="3685209450716071127">Chromium మీ పాస్‌వర్డ్‌లను చెక్ చేయలేకపోయింది. మీ ఇంటర్నెట్ కనెక్షన్ సరిచూసుకుని, తర్వాత ట్రై చేయండి.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ఈ అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromiumను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు}=1{ఈ అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromiumను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు. మీ అజ్ఞాత విండో మళ్లీ తెరవబడదు.}other{ఈ అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromiumను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు. మీ # అజ్ఞాత విండోలు మళ్లీ తెరవబడవు.}}</translation>
 <translation id="3713809861844741608">కొత్త Chromium &amp;ట్యాబ్‌లో లింక్‌ని తెరువు</translation>
 <translation id="3728336900324680424">చిరునామా బార్‌లో సూచనలు చేయడానికి Chromium మీ డిస్క్‌ను యాక్సెస్ చేస్తుంది</translation>
@@ -204,6 +206,7 @@
 <translation id="8417404458978023919">{0,plural, =1{ఒక రోజులోపు Chromiumను తిరిగి ప్రారంభించండి}other{# రోజులలోపు Chromiumను తిరిగి ప్రారంభించండి}}</translation>
 <translation id="8453117565092476964">ఇన్‌స్టాలర్ ఆర్కైవ్ పాడైంది లేదా చెల్లదు. దయచేసి Chromiumను మళ్లీ డౌన్‌లోడ్ చేయండి.</translation>
 <translation id="8493179195440786826">Chromium కాలం చెల్లినది</translation>
+<translation id="8568283329061645092">మీరు మీ Google ఖాతాతో సైన్ ఇన్ చేసి ఉన్నప్పుడు, Chromium మీ పాస్‌వర్డ్‌లను చెక్ చేయగలుగుతుంది</translation>
 <translation id="8586442755830160949">కాపీరైట్ <ph name="YEAR" /> Chromium రచయితలు. అన్ని హ‌క్కులు రిజ‌ర్వ్ చేయ‌బ‌డ్డాయి.</translation>
 <translation id="8619360774459241877">Chromiumని ప్రారంభిస్తోంది...</translation>
 <translation id="8621669128220841554">తెలియ‌ని ఎర్ర‌ర్‌ కారణంగా ఇన‌స్ట‌లేష‌న్‌ విఫలమైంది. దయచేసి Chromiumను మళ్లీ డౌన్‌లోడ్ చేయండి.</translation>
diff --git a/chrome/app/resources/chromium_strings_th.xtb b/chrome/app/resources/chromium_strings_th.xtb
index 4531d53..db219c8 100644
--- a/chrome/app/resources/chromium_strings_th.xtb
+++ b/chrome/app/resources/chromium_strings_th.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">เกี่ยวกับ &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium อัปเดตแล้ว</translation>
 <translation id="2983934633046890458">Chromium กำลังพยายามแก้ไขรหัสผ่าน</translation>
+<translation id="3032706164202344641">Chromium ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดลองอีกครั้งภายหลัง</translation>
 <translation id="3032787606318309379">กำลังเพิ่มลงใน Chromium...</translation>
 <translation id="3068515742935458733">ช่วยทำให้ Chromium ดียิ่งขึ้นโดยการส่งรายงานข้อขัดข้องและ <ph name="UMA_LINK" /> ไปยัง Google</translation>
 <translation id="3103660991484857065">โปรแกรมติดตั้งคลายการบีบอัดการเก็บข้อมูลไม่ได้ โปรดดาวน์โหลด Chromium อีกครั้ง</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">โลโก้ Chromium</translation>
 <translation id="3639635944603682591">ระบบจะลบข้อมูลการท่องเว็บของบุคคลนี้ออกจากอุปกรณ์นี้ หากต้องการกู้ข้อมูลคืน ให้ลงชื่อเข้าใช้ Chromium ในชื่อ <ph name="USER_EMAIL" /></translation>
 <translation id="364817392622123556">{COUNT,plural, =0{อัปเดตใหม่ของ Chromium พร้อมให้ใช้งานแล้วและระบบจะใช้อัปเดตดังกล่าวเมื่อคุณเปิด Chromium ขึ้นมาใหม่}=1{อัปเดตใหม่ของ Chromium พร้อมให้ใช้งานแล้วและระบบจะใช้อัปเดตดังกล่าวเมื่อคุณเปิด Chromium ขึ้นมาใหม่ หน้าต่างที่ไม่ระบุตัวตนจะไม่เปิดให้อีก}other{อัปเดตใหม่ของ Chromium พร้อมให้ใช้งานแล้วและระบบจะใช้อัปเดตดังกล่าวเมื่อคุณเปิด Chromium ขึ้นมาใหม่ หน้าต่างที่ไม่ระบุตัวตนจำนวน # หน้าต่างจะไม่เปิดให้อีก}}</translation>
+<translation id="3685209450716071127">Chromium ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดลองตรวจสอบการเชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ผู้ดูแลระบบขอให้คุณเปิด Chromium ขึ้นมาใหม่เพื่อใช้การอัปเดตนี้}=1{ผู้ดูแลระบบขอให้คุณเปิด Chromium ขึ้นมาใหม่เพื่อใช้การอัปเดตนี้ หน้าต่างที่ไม่ระบุตัวตนจะไม่เปิดให้อีก}other{ผู้ดูแลระบบขอให้คุณเปิด Chromium ขึ้นมาใหม่เพื่อใช้การอัปเดตนี้ หน้าต่างที่ไม่ระบุตัวตนจำนวน # หน้าต่างจะไม่เปิดให้อีก}}</translation>
 <translation id="3713809861844741608">เปิดลิงก์ใน Chromium แท็บใหม่</translation>
 <translation id="3728336900324680424">Chromium จะเข้าถึงไดรฟ์ของคุณเพื่อแสดงคำแนะนำในแถบที่อยู่</translation>
@@ -207,6 +209,7 @@
 <translation id="8417404458978023919">{0,plural, =1{เปิด Chromium ขึ้นมาใหม่ภายใน 1 วัน}other{เปิด Chromium ขึ้นมาใหม่ภายใน # วัน}}</translation>
 <translation id="8453117565092476964">การเก็บข้อมูลของโปรแกรมติดตั้งเสียหายหรือไม่ถูกต้อง โปรดดาวน์โหลด Chromium อีกครั้ง</translation>
 <translation id="8493179195440786826">Chromium ล้าสมัย</translation>
+<translation id="8568283329061645092">Chromium จะตรวจสอบรหัสผ่านได้เมื่อคุณลงชื่อเข้าใช้ด้วยบัญชี Google</translation>
 <translation id="8586442755830160949">ลิขสิทธิ์ <ph name="YEAR" /> The Chromium Authors สงวนลิขสิทธิ์</translation>
 <translation id="8619360774459241877">กำลังเปิด Chromium...</translation>
 <translation id="8621669128220841554">การติดตั้งล้มเหลวเนื่องจากเกิดข้อผิดพลาดที่ไม่ระบุ โปรดดาวน์โหลด Chromium อีกครั้ง</translation>
diff --git a/chrome/app/resources/chromium_strings_tr.xtb b/chrome/app/resources/chromium_strings_tr.xtb
index 05d8edf..e1610c12 100644
--- a/chrome/app/resources/chromium_strings_tr.xtb
+++ b/chrome/app/resources/chromium_strings_tr.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">&amp;Chromium hakkında</translation>
 <translation id="2977470724722393594">Chromium güncel durumda</translation>
 <translation id="2983934633046890458">Chromium şifreleri düzenlemeye çalışıyor.</translation>
+<translation id="3032706164202344641">Chromium, şifrelerinizi kontrol edemiyor. Daha sonra tekrar deneyin.</translation>
 <translation id="3032787606318309379">Chromium'a ekleniyor ...</translation>
 <translation id="3068515742935458733">Kilitlenme raporlarını ve <ph name="UMA_LINK" /> bilgilerini Google'a göndererek, Chromium'u daha iyi hale getirmeye yardımcı olun</translation>
 <translation id="3103660991484857065">Yükleyici sıkıştırılmış arşivi açamadı. Lütfen Chromium'u yeniden indirin.</translation>
@@ -61,6 +62,7 @@
 <translation id="358997566136285270">Chromium logosu</translation>
 <translation id="3639635944603682591">Bu kullanıcının tarama verileri bu cihazdan silinecektir. Verileri kurtarmak için Chromium'da <ph name="USER_EMAIL" /> olarak oturum açın.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium için yeni bir güncelleme var. Yeniden başlattığınızda güncelleme hemen uygulanacaktır.}=1{Chromium için yeni bir güncelleme var. Yeniden başlattığınızda güncelleme hemen uygulanacaktır. Gizli pencereniz yeniden açılmayacak.}other{Chromium için yeni bir güncelleme var. Yeniden başlattığınızda güncelleme hemen uygulanacaktır. # Gizli pencereniz yeniden açılmayacak.}}</translation>
+<translation id="3685209450716071127">Chromium, şifrelerinizi kontrol edemiyor. İnternet bağlantınızı kontrol etmeyi deneyin.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Yöneticiniz bu güncellemeyi uygulamak için Chromium'u yeniden başlatmanızı istiyor}=1{Yöneticiniz bu güncellemeyi uygulamak için Chromium'u yeniden başlatmanızı istiyor. Gizli pencereniz yeniden açılmayacak.}other{Yöneticiniz bu güncellemeyi uygulamak için Chromium'u yeniden başlatmanızı istiyor. # Gizli pencereniz yeniden açılmayacak.}}</translation>
 <translation id="3713809861844741608">Bağlantıyı yeni Chromium &amp;sekmesinde aç</translation>
 <translation id="3728336900324680424">Chromium, adres çubuğunda öneriler göstermek için Drive'ınıza erişecektir</translation>
@@ -206,6 +208,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromium'u bir gün içinde yeniden başlatın}other{Chromium'u # gün içinde yeniden başlatın}}</translation>
 <translation id="8453117565092476964">Yükleyici arşivi bozuk veya geçersiz. Lütfen Chromium'u yeniden indirin.</translation>
 <translation id="8493179195440786826">Chromium Sürümü Eski</translation>
+<translation id="8568283329061645092">Chromium, Google Hesabınızla oturum açtığınızda şifrelerinizi kontrol edebilir</translation>
 <translation id="8586442755830160949">Telif Hakkı <ph name="YEAR" /> The Chromium Authors. Tüm hakları saklıdır.</translation>
 <translation id="8619360774459241877">Chromium başlatılıyor...</translation>
 <translation id="8621669128220841554">Yükleme belirtilmeyen bir hata nedeniyle başarısız oldu. Lütfen Chromium'u tekrar indirin.</translation>
diff --git a/chrome/app/resources/chromium_strings_uk.xtb b/chrome/app/resources/chromium_strings_uk.xtb
index 489a676..5f7b633 100644
--- a/chrome/app/resources/chromium_strings_uk.xtb
+++ b/chrome/app/resources/chromium_strings_uk.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Про &amp;Chromium</translation>
 <translation id="2977470724722393594">У вас остання версія Chromium</translation>
 <translation id="2983934633046890458">Chromium намагається змінити паролі.</translation>
+<translation id="3032706164202344641">Chromium не може перевірити паролі. Повторіть спробу пізніше.</translation>
 <translation id="3032787606318309379">Додавання в Chromium...</translation>
 <translation id="3068515742935458733">Допоможіть покращити Chromium, надсилаючи звіти про аварійне завершення роботи та <ph name="UMA_LINK" /> в Google</translation>
 <translation id="3103660991484857065">Програмі встановлення не вдалося видобути архів. Завантажте Chromium ще раз.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Логотип Chromium</translation>
 <translation id="3639635944603682591">Дані веб-перегляду користувача буде видалено з цього пристрою. Щоб відновити їх, увійдіть в обліковий запис Chromium як <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Доступне оновлення Chromium, його буде застосовано відразу після перезапуску.}=1{Доступне оновлення Chromium, його буде застосовано відразу після перезапуску. Вікно в режимі анонімного перегляду не відновиться й не відкриється знову.}one{Доступне оновлення Chromium, його буде застосовано відразу після перезапуску. # вікно в режимі анонімного перегляду не відновиться й не відкриється знову.}few{Доступне оновлення Chromium, його буде застосовано відразу після перезапуску. # вікна в режимі анонімного перегляду не відновляться й не відкриються знову.}many{Доступне оновлення Chromium, його буде застосовано відразу після перезапуску. # вікон в режимі анонімного перегляду не відновляться й не відкриються знову.}other{Доступне оновлення Chromium, його буде застосовано відразу після перезапуску. # вікна в режимі анонімного перегляду не відновиться й не відкриється знову.}}</translation>
+<translation id="3685209450716071127">Chromium не може перевірити паролі. Перевірте інтернет-з'єднання.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Адміністратор просить перезапустити Chromium, щоб застосувати це оновлення}=1{Адміністратор просить перезапустити Chromium, щоб застосувати це оновлення. Вікно в режимі анонімного перегляду не відновиться й не відкриється знову.}one{Адміністратор просить перезапустити Chromium, щоб застосувати це оновлення. # вікно в режимі анонімного перегляду не відновиться й не відкриється знову.}few{Адміністратор просить перезапустити Chromium, щоб застосувати це оновлення. # вікна в режимі анонімного перегляду не відновляться й не відкриються знову.}many{Адміністратор просить перезапустити Chromium, щоб застосувати це оновлення. # вікон в режимі анонімного перегляду не відновляться й не відкриються знову.}other{Адміністратор просить перезапустити Chromium, щоб застосувати це оновлення. # вікна в режимі анонімного перегляду не відновиться й не відкриється знову.}}</translation>
 <translation id="3713809861844741608">Відкрити посилання в новій &amp;вкладці Chromium</translation>
 <translation id="3728336900324680424">Chromium матиме доступ до Диска, щоб робити пропозиції в адресному рядку</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Перезапустіть Chromium упродовж дня}one{Перезапустіть Chromium упродовж # дня}few{Перезапустіть Chromium упродовж # днів}many{Перезапустіть Chromium упродовж # днів}other{Перезапустіть Chromium упродовж # дня}}</translation>
 <translation id="8453117565092476964">Архів програми встановлення пошкоджений або недійсний. Завантажте Chromium ще раз.</translation>
 <translation id="8493179195440786826">Версія Chromium застаріла</translation>
+<translation id="8568283329061645092">Chromium зможе перевірити ваші паролі, коли ви ввійдете у свій обліковий запис Google</translation>
 <translation id="8586442755830160949">Авторське право <ph name="YEAR" /> Автори Chromium. Усі права захищено.</translation>
 <translation id="8619360774459241877">Запускається Chromium…</translation>
 <translation id="8621669128220841554">Не вдалося встановити через невизначену помилку. Завантажте Chromium ще раз.</translation>
diff --git a/chrome/app/resources/chromium_strings_ur.xtb b/chrome/app/resources/chromium_strings_ur.xtb
index e6404ec..fb13d88 100644
--- a/chrome/app/resources/chromium_strings_ur.xtb
+++ b/chrome/app/resources/chromium_strings_ur.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">‏Chromium&amp; کے بارے میں</translation>
 <translation id="2977470724722393594">‏Chromium اپ ٹو ڈیٹ ہے</translation>
 <translation id="2983934633046890458">‏Chromium پاس ورڈز میں ترمیم کرنے کی کوشش کر رہا ہے۔</translation>
+<translation id="3032706164202344641">‏Chromium آپ کے پاس ورڈز چیک نہیں کر سکتا ہے۔ بعد میں دوبارہ کوشش کریں۔</translation>
 <translation id="3032787606318309379">‏Chromium میں شامل کیا جا رہا ہے…</translation>
 <translation id="3068515742935458733">‏Google کو کریش کی رپورٹیں اور <ph name="UMA_LINK" /> بھیج کر Chromium کو بہتر بنانے میں مدد کریں</translation>
 <translation id="3103660991484857065">‏انسٹالر آرکائیو کا کمپریشن ختم کرنے میں ناکام ہوگیا۔ براہ کرم Chromium کو دوبارہ ڈاؤن لوڈ کریں۔</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">‏Chromium کا لوگو</translation>
 <translation id="3639635944603682591">‏اس شخص کا براؤزنگ ڈیٹا اس آلے سے حذف کر دیا جائے گا۔ ڈیٹا بحال کرنے کیلئے، Chromium میں بطور <ph name="USER_EMAIL" /> سائن ان کریں۔</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{‏Chromium کیلئے ایک نیا اپ ڈیٹ دستیاب ہے اور جیسے ہی آپ اسے بند کر کے دوبارہ چلائیں گے اسے لاگو کر دیا جائے گا۔}=1{‏Chromium کیلئے ایک نیا اپ ڈیٹ دستیاب ہے اور جیسے ہی آپ اسے بند کر کے دوبارہ چلائیں گے اسے لاگو کر دیا جائے گا۔ آپ کی پوشیدگی ونڈو دوبارہ نہیں کھلے گی۔}other{‏Chromium کیلئے ایک نیا اپ ڈیٹ دستیاب ہے اور جیسے ہی آپ اسے بند کر کے دوبارہ چلائیں گے اسے لاگو کر دیا جائے گا۔ آپ کی # پوشیدگی ونڈوز دوبارہ نہیں کھلیں گی۔}}</translation>
+<translation id="3685209450716071127">‏Chromium آپ کے پاس ورڈز چیک نہیں کر سکتا ہے۔ اپنا انٹرنیٹ کنکشن چیک کرنے کی کوشش کریں۔</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{‏آپ کے منتظم کا کہنا ہے کہ آپ اس اپ ڈیٹ کو لاگو کرنے کیلئے Chromium کو بند کر کے دوبارہ چلائیں}=1{‏آپ کے منتظم کا کہنا ہے کہ آپ اس اپ ڈیٹ کو لاگو کرنے کیلئے Chromium کو بند کر کے دوبارہ چلائیں۔ آپ کی پوشیدگی ونڈو دوبارہ نہیں کھلے گی۔}other{‏آپ کے منتظم کا کہنا ہے کہ آپ اس اپ ڈیٹ کو لاگو کرنے کیلئے Chromium کو بند کر کے دوبارہ چلائیں۔ آپ کی # پوشیدگی ونڈوز دوبارہ نہیں کھلیں گی۔}}</translation>
 <translation id="3713809861844741608">‏لنک کو نئے Chromium &amp;ٹیب میں کھولیں</translation>
 <translation id="3728336900324680424">‏پتہ بار میں تجاویز پیش کرنے کے لیے Chromium آپ کی Drive تک رسائی حاصل کرے گا</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{‏ایک دن کے اندر Chromium کو دوبارہ لانچ کریں}other{‏# دن کے اندر Chromium کو دوبارہ لانچ کریں}}</translation>
 <translation id="8453117565092476964">‏انسٹالر آرکائیو خراب یا غلط ہے۔ براہ کرم Chromium کو دوبارہ ڈاؤن لوڈ کریں۔</translation>
 <translation id="8493179195440786826">‏Chromium پرانا ہے</translation>
+<translation id="8568283329061645092">‏جب آپ اپنے Google اکاؤنٹ سے سائن ان کرتے ہیں تو Chromium آپ کے پاس ورڈز کو چیک کر سکتا ہے</translation>
 <translation id="8586442755830160949">‏کاپی رائٹ ‎<ph name="YEAR" /> The Chromium Authors۔ جملہ حقوق محفوظ۔</translation>
 <translation id="8619360774459241877">‏Chromium شروع ہو رہا ہے…</translation>
 <translation id="8621669128220841554">‏غیر متعین خرابی کی وجہ سے انسٹالیشن ناکام ہوگیا۔ براہ کرم Chromium دوبارہ ڈاؤن لوڈ کریں۔</translation>
diff --git a/chrome/app/resources/chromium_strings_uz.xtb b/chrome/app/resources/chromium_strings_uz.xtb
index 6c19c68..05fbb2da 100644
--- a/chrome/app/resources/chromium_strings_uz.xtb
+++ b/chrome/app/resources/chromium_strings_uz.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">&amp;Chromium haqida</translation>
 <translation id="2977470724722393594">Siz Chromium brauzerining eng oxirgi versiyasidan foydalanyapsiz.</translation>
 <translation id="2983934633046890458">Chromium parollarni tahrirlashga urinmoqda.</translation>
+<translation id="3032706164202344641">Chromium parollaringizni tekshira olmadi. Keyinroq qayta urining.</translation>
 <translation id="3032787606318309379">Chromium‘ga o‘rnatilmoqda...</translation>
 <translation id="3068515742935458733">Google‘ga ishdan chiqishlar hisoboti va <ph name="UMA_LINK" />‘ni jo‘natib Chromium yaxshilanishiga yordam berish.</translation>
 <translation id="3103660991484857065">O‘rnatish dasturi arxivni ajrata olmadi. Chromium’ni qayta yuklab oling.</translation>
@@ -61,6 +62,7 @@
 <translation id="358997566136285270">Chromium logotipi</translation>
 <translation id="3639635944603682591">Bu foydalanuvchi brauzerining tarixi ushbu qurilmadan butunlay tozalanadi. Axborotlarni tiklash uchun brauzerga <ph name="USER_EMAIL" /> sifatida kiring.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium uchun yangilanish mavjud va brauzer qayta ishga tushirilganda oʻrnatiladi.}=1{Chromium uchun yangilanish mavjud va brauzer qayta ishga tushirilganda oʻrnatiladi. Inkognito oynalar qayta ochilmaydi.}other{Chromium uchun yangilanish mavjud va brauzer qayta ishga tushirilganda oʻrnatiladi. # ta inkognito oyna qayta ochilmaydi.}}</translation>
+<translation id="3685209450716071127">Chromium parollaringizni tekshira olmadi. Internet aloqasini tekshiring.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administrator yangilishlarni oʻrnatish uchun Chromium brauzerini qayta ishga tushirishni soʻramoqda}=1{Administrator yangilishlarni oʻrnatish uchun Chromium brauzerini qayta ishga tushirishni soʻramoqda Inkognito oynalar qayta ochilmaydi.}other{Administrator yangilishlarni oʻrnatish uchun Chromium brauzerini qayta ishga tushirishni soʻramoqda # ta inkognito oyna qayta ochilmaydi.}}</translation>
 <translation id="3713809861844741608">Havolani yangi Chromium oynasida ochish</translation>
 <translation id="3728336900324680424">Manzil qatorida tavsiyalarni namoyish qilish uchun Chromium sizning Drive omboridan foydalanadi</translation>
@@ -206,6 +208,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Chromiumni 1 kun ichida qayta ishga tushiring}other{Chromiumni # kun ichida qayta ishga tushiring}}</translation>
 <translation id="8453117565092476964">O‘rnatish dasturi arxivi shikastlangan. Chromium‘ni qaytadan yuklab oling.</translation>
 <translation id="8493179195440786826">Chromium versiyasi eskirgan</translation>
+<translation id="8568283329061645092">Google hisobingizga kirsangiz, Chromium parollaringizni tekshira oladi</translation>
 <translation id="8586442755830160949">© The Chromium Authors, <ph name="YEAR" />. Barcha huquqlar himoyalangan.</translation>
 <translation id="8619360774459241877">Chromium ishga tushmoqda...</translation>
 <translation id="8621669128220841554">O‘rnatish vaqtida kutilmagan xatolik yuz berdi. Chromium‘ni qaytadan yuklab oling.</translation>
diff --git a/chrome/app/resources/chromium_strings_vi.xtb b/chrome/app/resources/chromium_strings_vi.xtb
index a189155..b8c80c3 100644
--- a/chrome/app/resources/chromium_strings_vi.xtb
+++ b/chrome/app/resources/chromium_strings_vi.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">Giới thiệu về &amp;Chromium</translation>
 <translation id="2977470724722393594">Chromium đã được cập nhật</translation>
 <translation id="2983934633046890458">Chromium đang cố gắng chỉnh sửa mật khẩu.</translation>
+<translation id="3032706164202344641">Chromium không thể kiểm tra mật khẩu của bạn. Hãy thử lại sau.</translation>
 <translation id="3032787606318309379">Đang thêm vào Chromium...</translation>
 <translation id="3068515742935458733">Giúp cải thiện Chromium bằng cách gửi báo cáo sự cố và <ph name="UMA_LINK" /> tới Google</translation>
 <translation id="3103660991484857065">Trình cài đặt không thể giải nén tệp lưu trữ. Hãy tải xuống Chromium lại lần nữa.</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Biểu trưng Chromium</translation>
 <translation id="3639635944603682591">Dữ liệu duyệt web của người này sẽ bị xóa khỏi thiết bị này. Để khôi phục dữ liệu, hãy đăng nhập vào Chromium bằng <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Đã có bản cập nhật Chromium mới và bản cập nhật này sẽ áp dụng ngay khi bạn chạy lại Chromium.}=1{Đã có bản cập nhật Chromium mới và bản cập nhật này sẽ áp dụng ngay khi bạn chạy lại Chromium. Cửa sổ ẩn danh của bạn sẽ không mở lại.}other{Đã có bản cập nhật Chromium mới và bản cập nhật này sẽ áp dụng ngay khi bạn chạy lại Chromium. # cửa sổ ẩn danh của bạn sẽ không mở lại.}}</translation>
+<translation id="3685209450716071127">Chromium không thể kiểm tra mật khẩu của bạn. Hãy thử kiểm tra kết nối Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Quản trị viên của bạn yêu cầu bạn chạy lại Chromium để áp dụng bản cập nhật này}=1{Quản trị viên của bạn yêu cầu bạn chạy lại Chromium để áp dụng bản cập nhật này. Cửa sổ ẩn danh của bạn sẽ không mở lại.}other{Quản trị viên của bạn yêu cầu bạn chạy lại Chromium để áp dụng bản cập nhật này. # cửa sổ ẩn danh của bạn sẽ không mở lại.}}</translation>
 <translation id="3713809861844741608">Mở liên kết trong tab mới của Chromium</translation>
 <translation id="3728336900324680424">Chromium sẽ truy cập vào Drive của bạn để đưa ra đề xuất trên thanh địa chỉ</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Khởi động lại Chromium trong vòng một ngày}other{Khởi động lại Chromium trong vòng # ngày}}</translation>
 <translation id="8453117565092476964">Tệp lưu trữ trình cài đặt bị hỏng hoặc không hợp lệ. Hãy tải xuống Chromium lại lần nữa.</translation>
 <translation id="8493179195440786826">Chromium đã lỗi thời</translation>
+<translation id="8568283329061645092">Chromium có thể kiểm tra mật khẩu khi bạn đăng nhập bằng Tài khoản Google của mình</translation>
 <translation id="8586442755830160949">Bản quyền <ph name="YEAR" /> Tác giả Chromium. Mọi quyền được bảo lưu.</translation>
 <translation id="8619360774459241877">Đang khởi động Chromium...</translation>
 <translation id="8621669128220841554">Không thể cài đặt do xảy ra lỗi không xác định. Hãy tải xuống Chromium lại lần nữa.</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-CN.xtb b/chrome/app/resources/chromium_strings_zh-CN.xtb
index 9f93c7c..a833c708 100644
--- a/chrome/app/resources/chromium_strings_zh-CN.xtb
+++ b/chrome/app/resources/chromium_strings_zh-CN.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">关于 Chromium(&amp;C)</translation>
 <translation id="2977470724722393594">Chromium 已是最新版本</translation>
 <translation id="2983934633046890458">Chromium 正在尝试修改密码。</translation>
+<translation id="3032706164202344641">Chromium 无法检查您的密码。请稍后重试。</translation>
 <translation id="3032787606318309379">正在添加到 Chromium...</translation>
 <translation id="3068515742935458733">将崩溃报告和<ph name="UMA_LINK" />发送给Google,帮助我们完善Chromium。</translation>
 <translation id="3103660991484857065">安装程序解压缩归档失败。请重新下载 Chromium。</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium 徽标</translation>
 <translation id="3639635944603682591">系统将会从此设备上删除该用户的浏览数据。要想恢复这些数据,请以“<ph name="USER_EMAIL" />”的身份登录 Chromium。</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium 有一项新的可用更新;一旦您重新启动,系统即会应用这项更新。}=1{Chromium 有一项新的可用更新;一旦您重新启动,系统即会应用这项更新。您的无痕式窗口不会重新打开。}other{Chromium 有一项新的可用更新;一旦您重新启动,系统即会应用这项更新。您的 # 个无痕式窗口不会重新打开。}}</translation>
+<translation id="3685209450716071127">Chromium 无法检查您的密码。请检查您的互联网连接。</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{您的管理员要求您重新启动 Chromium 以应用此项更新}=1{您的管理员要求您重新启动 Chromium 以应用此项更新。您的无痕式窗口不会重新打开。}other{您的管理员要求您重新启动 Chromium 以应用此项更新。您的 # 个无痕式窗口不会重新打开。}}</translation>
 <translation id="3713809861844741608">在 Chromium 新标签页中打开链接(&amp;T)</translation>
 <translation id="3728336900324680424">Chromium 将访问您的云端硬盘,以在地址栏提供建议</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{请于 1 天内重新启动 Chromium}other{请于 # 天内重新启动 Chromium}}</translation>
 <translation id="8453117565092476964">安装程序归档损坏或无效。请重新下载 Chromium。</translation>
 <translation id="8493179195440786826">Chromium版本太旧</translation>
+<translation id="8568283329061645092">您需要先登录 Google 帐号才能使用 Chromium 的密码检查功能。</translation>
 <translation id="8586442755830160949">版权所有<ph name="YEAR" /> The Chromium Authors。保留所有权利。</translation>
 <translation id="8619360774459241877">正在启动 Chromium…</translation>
 <translation id="8621669128220841554">未指定的错误导致安装失败。请重新下载 Chromium。</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-HK.xtb b/chrome/app/resources/chromium_strings_zh-HK.xtb
index 056e4c7..9413594 100644
--- a/chrome/app/resources/chromium_strings_zh-HK.xtb
+++ b/chrome/app/resources/chromium_strings_zh-HK.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">關於 Chromium(&amp;C)</translation>
 <translation id="2977470724722393594">Chromium 已是最新版本</translation>
 <translation id="2983934633046890458">Chromium 正在嘗試編輯密碼。</translation>
+<translation id="3032706164202344641">Chromium 無法檢查密碼,請稍後再試。</translation>
 <translation id="3032787606318309379">正在新增至 Chromium…</translation>
 <translation id="3068515742935458733">將當機報告和<ph name="UMA_LINK" />傳送給 Google,助我們一臂之力,讓 Google Chrome 更臻完美</translation>
 <translation id="3103660991484857065">安裝程式無法解壓縮封存檔案,請重新下載 Chromium。</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Chromium 標誌</translation>
 <translation id="3639635944603682591">此使用者的瀏覽資料將從裝置上刪除。如要復原資料,請以「<ph name="USER_EMAIL" />」身分登入 Chromium。</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium 有可用的更新,重新啟動後即可套用。}=1{Chromium 有可用的更新,重新啟動後即可套用。您的無痕式視窗不會重新開啟。}other{Chromium 有可用的更新,重新啟動後即可套用。您的 # 個無痕式視窗不會重新開啟。}}</translation>
+<translation id="3685209450716071127">Chromium 無法檢查密碼,請檢查互聯網連線。</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{管理員要求您重新啟動 Chromium,以套用此更新}=1{管理員要求您重新啟動 Chromium,以套用此更新。您的無痕式視窗不會重新開啟。}other{管理員要求您重新啟動 Chromium,以套用此更新。您的 # 個無痕式視窗不會重新開啟。}}</translation>
 <translation id="3713809861844741608">在 Chromium 的新分頁中開啟連結(&amp;T)</translation>
 <translation id="3728336900324680424">Chromium 會存取您的「雲端硬碟」,然後在網址列提出建議</translation>
@@ -209,6 +211,7 @@
 <translation id="8417404458978023919">{0,plural, =1{請在 1 天內重新啟動 Chromium}other{請在 # 天內重新啟動 Chromium}}</translation>
 <translation id="8453117565092476964">安裝程式封存檔案已損毀或無效,請重新下載 Chromium。</translation>
 <translation id="8493179195440786826">Chromium 版本過舊</translation>
+<translation id="8568283329061645092">Chromium 可在您使用 Google 帳戶登入時檢查密碼</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. 保留所有權利。</translation>
 <translation id="8619360774459241877">正在啟動 Chromium…</translation>
 <translation id="8621669128220841554">不明錯誤導致安裝失敗,請重新下載 Chromium。</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-TW.xtb b/chrome/app/resources/chromium_strings_zh-TW.xtb
index 723673c..4ede335 100644
--- a/chrome/app/resources/chromium_strings_zh-TW.xtb
+++ b/chrome/app/resources/chromium_strings_zh-TW.xtb
@@ -43,6 +43,7 @@
 <translation id="2910007522516064972">關於 Chromium(&amp;C)</translation>
 <translation id="2977470724722393594">Chromium 目前是最新版本</translation>
 <translation id="2983934633046890458">Chromium 正在嘗試編輯密碼。</translation>
+<translation id="3032706164202344641">Chromium 無法檢查你的密碼,請稍後再試。</translation>
 <translation id="3032787606318309379">正在新增至 Chromium...</translation>
 <translation id="3068515742935458733">將當機報告和<ph name="UMA_LINK" />傳送給 Google,助我們一臂之力,讓 Chromium 更臻完美</translation>
 <translation id="3103660991484857065">安裝程式無法解壓縮封存檔案,請重新下載 Chromium。</translation>
@@ -63,6 +64,7 @@
 <translation id="358997566136285270">Chromium 標誌</translation>
 <translation id="3639635944603682591">這位使用者的瀏覽資料將從這個裝置上刪除。如要還原資料,請使用 <ph name="USER_EMAIL" /> 登入 Chromium。</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium 有可用的更新,重新啟動後即可套用。}=1{Chromium 有可用的更新,重新啟動後即可套用。你的無痕式視窗不會重新開啟。}other{Chromium 有可用的更新,重新啟動後即可套用。你的 # 個無痕式視窗不會重新開啟。}}</translation>
+<translation id="3685209450716071127">Chromium 無法檢查你的密碼,請查看你的網際網路連線狀態。</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{系統管理員要求你重新啟動 Chromium,以套用這項更新}=1{系統管理員要求你重新啟動 Chromium,以套用這項更新。你的無痕式視窗不會重新開啟。}other{系統管理員要求你重新啟動 Chromium,以套用這項更新。你的 # 個無痕式視窗不會重新開啟。}}</translation>
 <translation id="3713809861844741608">在新的 Chromium 分頁中開啟連結(&amp;T)</translation>
 <translation id="3728336900324680424">Chromium 將存取你的雲端硬碟,並在網址列提供建議</translation>
@@ -208,6 +210,7 @@
 <translation id="8417404458978023919">{0,plural, =1{請在 1 天內重新啟動 Chromium}other{請在 # 天內重新啟動 Chromium}}</translation>
 <translation id="8453117565092476964">安裝程式封存檔案已毀損或無效,請重新下載 Chromium。</translation>
 <translation id="8493179195440786826">Chromium 版本過舊</translation>
+<translation id="8568283329061645092">如果你使用 Google 帳戶登入,Chromium 可以檢查你的密碼</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. 保留所有權利。</translation>
 <translation id="8619360774459241877">正在啟動 Chromium…</translation>
 <translation id="8621669128220841554">不明錯誤導致安裝失敗,請重新下載 Chromium。</translation>
diff --git a/chrome/app/resources/chromium_strings_zu.xtb b/chrome/app/resources/chromium_strings_zu.xtb
index f1c6c3e2..8787b6b 100644
--- a/chrome/app/resources/chromium_strings_zu.xtb
+++ b/chrome/app/resources/chromium_strings_zu.xtb
@@ -45,6 +45,7 @@
 <translation id="2910007522516064972">Mayelana ne-&amp;Chromium</translation>
 <translation id="2977470724722393594">I-Chromium isesikhathini samanje</translation>
 <translation id="2983934633046890458">I-Chromium izama ukuhlela amaphasiwedi.</translation>
+<translation id="3032706164202344641">I-Chromium ayikwazi ukuhlola iphasiwedi yakho. Zama futhi emuva kwesikhathi.</translation>
 <translation id="3032787606318309379">Ingeza ku-Chromium...</translation>
 <translation id="3068515742935458733">Siza ukwenza i-Chromium ibe ngcono ngokuthumela imibiko yokuphahlazeka ne-<ph name="UMA_LINK" /> ku-Google</translation>
 <translation id="3103660991484857065">Isifaki sihlulekile ukungaminyanisi ingobo yomlando. Sicela ulande i-Chromium futhi.</translation>
@@ -65,6 +66,7 @@
 <translation id="358997566136285270">Ilogo ye-Chromium</translation>
 <translation id="3639635944603682591">Idatha yokuphequlula yalo muntu izosuswa kusukela kule divayisi. Ukuze uphinde uthole idatha, ngena ngemvume ku-Chromium njengo-<ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Isibuyekezo esisha se-Chromium siyatholakala futhi sizosetshenziswa maduze ngemuva kokuthi uqalise kabusha.}=1{Isibuyekezo esisha se-Chromium siyatholakala futhi sizosetshenziswa maduze ngemuva kokuthi uqalise kabusha. Iwindi lakho le-Incognito ngeke liphinde livuleke.}one{Isibuyekezo esisha se-Chromium siyatholakala futhi sizosetshenziswa maduze ngemuva kokuthi uqalise kabusha. Amawindi akho angu-# e-Incognito ngeke aze aphinde avuleke.}other{Isibuyekezo esisha se-Chromium siyatholakala futhi sizosetshenziswa maduze ngemuva kokuthi uqalise kabusha. Amawindi akho angu-# e-Incognito ngeke aze aphinde avuleke.}}</translation>
+<translation id="3685209450716071127">I-Chromium ayikwazi ukuhlola iphasiwedi yakho. Zama ukuhlola ukuxhumeka kwakho ku-inthanethi.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Umlawuli wakho ucela ukuthi uqalise kabusha i-Chromium ukuze kusetshenziswe lesi sibuyekezo}=1{Umlawuli wakho ucela ukuthi uqalise kabusha i-Chromium ukuze kusetshenziswe lesi sibuyekezo. Iwindi lakho le-Incognito ngeke liphinde livuleke.}one{Umlawuli wakho ucela ukuthi uqalise kabusha i-Chromium ukuze kusetshenziswe lesi sibuyekezo. Amawindi akho angu-# e-Incognito ngeke aze aphinde avuleke.}other{Umlawuli wakho ucela ukuthi uqalise kabusha i-Chromium ukuze kusetshenziswe lesi sibuyekezo. Amawindi akho angu-# e-Incognito ngeke aze aphinde avuleke.}}</translation>
 <translation id="3713809861844741608">Vula isixhumanisi ku&amp;thebhu elisha le-Chromium</translation>
 <translation id="3728336900324680424">I-Chromium izofinyelela iDrayivu yakho ukwenza iziphakamiso kwibha lekheli</translation>
@@ -210,6 +212,7 @@
 <translation id="8417404458978023919">{0,plural, =1{Qalisa kabusha i-Chromium phakathi kosuku}one{Qalisa kabusha i-Chromium phakathi kwezinsuku ezingu-#}other{Qalisa kabusha i-Chromium phakathi kwezinsuku ezingu-#}}</translation>
 <translation id="8453117565092476964">Ingobo yomlando yesifaki yonakele noma ayivumelekile. Sicela ulande futhi i-Chromium.</translation>
 <translation id="8493179195440786826">I-Chromium ayikho kudethi</translation>
+<translation id="8568283329061645092">I-Chromium ingahlola amaphasiwedi akho uma ungena ngemvume nge-Akhawunti yakho ye-Google</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Ababhali be-Chromium. Wonke amalungelo agciniwe.</translation>
 <translation id="8619360774459241877">Iqalisa i-Chromium...</translation>
 <translation id="8621669128220841554">Ukufakwa kuhlulekile ngenxa yephutha elingacacisiwe. Sicela ulande i-Chromium futhi.</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index aa4180c1..a218b60 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Boekmerke is bygevoeg</translation>
 <translation id="2343747224442182863">Fokus hierdie oortjie</translation>
 <translation id="2345723121311404059">1 bladsy na <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA-diens</translation>
 <translation id="2347644257713614136">Die gebruik van Hangouts en Cast for Education word deur Google se privaatheidsbeleid beheer.</translation>
 <translation id="2348176352564285430">Program: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Kon nie data laai nie</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Vingerafdrukke op hierdie sekuriteitsleutel</translation>
 <translation id="3973660817924297510">Gaan tans wagwoorde na (<ph name="CHECKED_PASSWORDS" /> van <ph name="TOTAL_PASSWORDS" />) …</translation>
 <translation id="3975565978598857337">Kon nie bediener vir domein kontak nie</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan nie jou wagwoorde nagaan nie. Probeer later weer.</translation>
 <translation id="3976108569178263973">Daar is geen drukkers beskikbaar nie.</translation>
 <translation id="397703832102027365">Finaliseer tans …</translation>
 <translation id="3977886311744775419">Outomatiese opdaterings laai nie op hierdie netwerktipe af nie, maar jy kan self vir opdaterings kyk.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Wollerig</translation>
 <translation id="4423376891418188461">Stel instellings terug</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, jou administrateur vereis dat jy jou wagwoord verander.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan nie jou wagwoorde nagaan nie. Probeer weer ná 24 uur.</translation>
 <translation id="4429030830601238961">Hierdie data oortree jou organisasie se sekuriteitbeleid en kan nie geplak word nie.</translation>
 <translation id="4430019312045809116">Volume</translation>
 <translation id="4430369329743628066">Boekmerk is bygevoeg</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Wil jy hierdie program outomaties begin wanneer die masjien aanskakel?</translation>
 <translation id="4441147046941420429">Verwyder jou sekuriteitsleutel uit jou toestel, sit dit weer in en raak daaraan om voort te gaan</translation>
 <translation id="444134486829715816">Vou uit …</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan jou wagwoorde nagaan wanneer jy met jou Google-rekening aanmeld</translation>
 <translation id="4442424173763614572">DNS-opsoek het misluk</translation>
 <translation id="4443536555189480885">Hulp</translation>
 <translation id="4444304522807523469">Kry toegang tot dokumentskandeerders wat via USB of op die plaaslike netwerk gekoppel is</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Om hierdie kode te skandeer, moet jy 'n QR-skandeerderprogram op jou foon of sommige kameraprogramme gebruik.</translation>
 <translation id="4477015793815781985">Sluit Ctrl, Alt of ⌘ in</translation>
 <translation id="4478664379124702289">Stoor skakel as …</translation>
-<translation id="4478777936860197922">Geen gestoorde wagwoorde nie. <ph name="IDS_SHORT_PRODUCT_NAME" /> kan jou wagwoorde nagaan wanneer jy hulle stoor.</translation>
 <translation id="4479424953165245642">Bestuur kioskprogramme</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Stel tans die virtuele masjien op. Dit kan 'n paar minute neem.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Moenie installeer nie</translation>
 <translation id="4850669014075537160">Rollees</translation>
 <translation id="4850886885716139402">Bekyk</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> sal jou in kennis stel wanneer jy met 'n gekompromitteerde wagwoord aanmeld</translation>
 <translation id="4853020600495124913">Maak in nuwe venster oop</translation>
 <translation id="4854317507773910281">Kies ouerrekening vir goedkeuring</translation>
 <translation id="485480310608090163">Meer instellings en toestemmings</translation>
@@ -4838,7 +4832,6 @@
 <translation id="7530016656428373557">Ontladingkoers in Watt</translation>
 <translation id="7531779363494549572">Gaan na Instellings &gt; Programme en kennisgewings &gt; Kennisgewings.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> reageer nie. Kies "Forseer toemaak" om die program toe te maak.</translation>
-<translation id="7536333565791380193">Gevorderde sekuriteit</translation>
 <translation id="7537451260744431038">Werwe kan nie webkoekies gebruik om jou blaai-ervaring beter te maak nie, byvoorbeeld, om jou aangemeld te hou of om items in jou inkopiemandjie te onthou nie</translation>
 <translation id="7539856059004947393">Bluetooth-sekuriteitsleutel</translation>
 <translation id="7540972813190816353">Kon nie vir opdaterings kontroleer nie: <ph name="ERROR" /></translation>
@@ -5079,7 +5072,6 @@
     <ph name="BEGIN_BOLD" />Let wel:<ph name="END_BOLD" /> Die stelsel sal tydens die proses herselflaai.</translation>
 <translation id="7828731929332799387">Dit sal alle webkoekies en werfdata uitvee wat in derdeparty-kontekste beskikbaar is. Wil jy voortgaan?</translation>
 <translation id="7829298379596169484">Gaan tans by oudio-invoer in</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan nie jou wagwoorde nagaan nie. Probeer jou internetverbinding nagaan.</translation>
 <translation id="7829877209233347340">Vra 'n ouer om aan te meld om toestemming te gee om 'n skoolrekening by te voeg</translation>
 <translation id="7830594666202422257">Koppel aan Linux</translation>
 <translation id="7831491651892296503">Kon nie netwerk opstel nie</translation>
@@ -5953,7 +5945,6 @@
 <translation id="8966870118594285808">Maak 'n oortjie weer oop as jy dit per ongeluk toegemaak het</translation>
 <translation id="8967866634928501045">Druk Alt Shift A om te wys</translation>
 <translation id="8968766641738584599">Stoor kaart</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan nie jou wagwoorde nagaan nie. Probeer ná 24 weer uur of <ph name="BEGIN_LINK" />gaan wagwoorde in jou Google-rekening na<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Maak asseblief by jou netwerkadministrateur seker dat die brandmuur nie aflaaie van Google-bedieners af blokkeer nie.</translation>
 <translation id="8973557916016709913">Verwyder zoemvlak</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index db8f334..221be82 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">ዕልባቶች ታክለዋል</translation>
 <translation id="2343747224442182863">በዚህ ትር ላይ አተኩር</translation>
 <translation id="2345723121311404059">1 ገጽ ወደ <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">የSODA አገልግሎት</translation>
 <translation id="2347644257713614136">የHangouts እና Cast for Education አጠቃቀም በGoogle ግላዊነት መመሪያ ነው የሚተዳደሩት።</translation>
 <translation id="2348176352564285430">መተግበሪያ፦ <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ውሂብ በመስቀል ላይ ስህተት አለ</translation>
@@ -2285,7 +2284,6 @@
 <translation id="3971764089670057203">በዚህ የደህንነት ቁልፍ ላይ ያሉ የጣት አሻራዎች</translation>
 <translation id="3973660817924297510">የይለፍ ቃላትን (<ph name="CHECKED_PASSWORDS" /> ከ<ph name="TOTAL_PASSWORDS" />) በመፈተሽ ላይ…</translation>
 <translation id="3975565978598857337">ለማከማቸት አገልጋይን ማግኘት አልተሳካም</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። ቆይተው እንደገና ይሞክሩ።</translation>
 <translation id="3976108569178263973">ምንም የሚገኙ አታሚዎች የሉም።</translation>
 <translation id="397703832102027365">በማጠናቀቅ ላይ...</translation>
 <translation id="3977886311744775419">ራስሰር ዝማኔዎች በዚህ ዓይነቱ አውታረ መረብ ላይ አይወርድም ሆኖም ግን በእጅ ዝማኔዎችን መፈለግ ይችላሉ።</translation>
@@ -2584,7 +2582,6 @@
 <translation id="4421932782753506458">ለስላሳ</translation>
 <translation id="4423376891418188461">ቅንብሮችን ወደነበሩበት መልስ</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />፣ የእርስዎ አስተዳዳሪ የይለፍ ቃልዎን እንዲቀይሩ ይፈልግብዎታል።</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። ከ24 ሰዓቶች በኋላ እንደገና ይሞክሩ።</translation>
 <translation id="4429030830601238961">ይህ ውሂብ የድርጅትዎን የደህንነት መመሪያዎችን ይጥሳል፣ እና ሊለጠፍ አይችልም።</translation>
 <translation id="4430019312045809116">ድምፅ</translation>
 <translation id="4430369329743628066">ዕልባት ታክሏል</translation>
@@ -2597,7 +2594,6 @@
 <translation id="4441124369922430666">ማሽኑ ሲበራ ይህን መተግበሪያ በራስ-ሰር እንዲጀመር ይፈልጋሉ?</translation>
 <translation id="4441147046941420429">ለመቀጠል የደህንነት ቁልፍዎን ከመሣሪያዎ ያስወግዱት፣ ከዚያ ዳግም ያስገቡትና ይንኩት</translation>
 <translation id="444134486829715816">ዘርጋ...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> በእርስዎ የGoogle መለያ በሚገቡበት ጊዜ የእርስዎን የይለፍ ቃላትን ሊፈትሽ ይችላል።</translation>
 <translation id="4442424173763614572">የዲ ኤን ኤስ ፍለጋ አልተሳካም</translation>
 <translation id="4443536555189480885">&amp;እገዛ</translation>
 <translation id="4444304522807523469">በዩ.ኤስ.ቢ ወይም በአካባቢ አውታረ መረብ በኩል የተያያዙ የሰነድ ቃኚዎችን ይድረስባቸው</translation>
@@ -2624,7 +2620,6 @@
 <translation id="4476659815936224889">ይህን ኮድ ለመቃኘት በእርስዎ ስልክ ላይ ያለውን የQR መቃኛ መተግበሪያ ወይም አንዳንድ የካሜራ መተግበሪያዎችን መጠቀም ይችላሉ።</translation>
 <translation id="4477015793815781985">Ctrl፣ Alt ወይም ⌘ ያካትቱ</translation>
 <translation id="4478664379124702289">አገ&amp;ናኝ አስቀምጥ እንደ…</translation>
-<translation id="4478777936860197922">ምንም የተቀመጡ የይለፍ ቃላት የሉም። <ph name="IDS_SHORT_PRODUCT_NAME" /> እርስዎ ሲያስቀምጧቸው የይለፍ ቃላትዎን መፈተሽ ይችላል።</translation>
 <translation id="4479424953165245642">የኪዮስክ መተግበሪያዎችን አቀናብር</translation>
 <translation id="4479639480957787382">ኢተርኔት</translation>
 <translation id="4479877282574735775">ምናባዊውን ማሽን በማዋቀር ላይ። ይሄ ጥቂት ደቂቃዎችን ሊወስደ ይችላል።</translation>
@@ -2870,7 +2865,6 @@
 <translation id="4849517651082200438">አትጫን</translation>
 <translation id="4850669014075537160">ሽብለላ</translation>
 <translation id="4850886885716139402">አሳይ</translation>
-<translation id="485197095346966382">እርስዎ በተጠለፈ የይለፍ ቅቃል ሲገቡ <ph name="IDS_SHORT_PRODUCT_NAME" /> ያሳውቀዎታል</translation>
 <translation id="4853020600495124913">&amp;በአዲስ መስኮት ውስጥ ክፈት</translation>
 <translation id="4854317507773910281">የሚጸድቅ የወላጅ መለያ ይምረጡ</translation>
 <translation id="485480310608090163">ተጨማሪ ቅንብሮች እና ፈቃዶች</translation>
@@ -4834,7 +4828,6 @@
 <translation id="7530016656428373557">የትፋት ፍጥነት በዋት</translation>
 <translation id="7531779363494549572">ወደ ቅንብሮች &gt; መተግበሪያዎች እና ማሳወቂያዎች &gt; ማሳወቂያዎች ይሂዱ።</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ምላሽ እየሰጠ አይደለም። መተግበሪያውን ለመዝጋት «በግዳጅ ዝጋ»ን ይምረጡ።</translation>
-<translation id="7536333565791380193">የላቀ ጥበቃ</translation>
 <translation id="7537451260744431038">ጣቢያዎች የአሰሳዎን ተሞክሮ ለማሻሻል ኩኪዎችን መጠቀም አይችሉም፣ ለምሳሌ እርስዎ በመለያ እንደገቡ ማቆየት ወይም በግዢ ጋሪዎ ውስጥ ንጥሎችን ለማስታወስ</translation>
 <translation id="7539856059004947393">የብሉቱዝ ደህንነት ቁልፍ</translation>
 <translation id="7540972813190816353">ዝማኔዎችን በመፈለግ ላይ ሳለ ስህተት ተከስቷል፦ <ph name="ERROR" /></translation>
@@ -5075,7 +5068,6 @@
     <ph name="BEGIN_BOLD" />ማስታወሻ፦<ph name="END_BOLD" />  ስርዓቱ በሂደቱ ጊዜ ዳግም ይነሳል።</translation>
 <translation id="7828731929332799387">ይህ በሦስተኛ ወገን ዓውደ አገባቦች ውስጥ የሚገኙ ሁሉንም ኩኪዎች እና የጣቢያ ውሂብ ይሰርዛል። መቀጠል ይፈልጋሉ?</translation>
 <translation id="7829298379596169484">የኦዲዮ ግብዓትን በመድረስ ላይ</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። የበይነመረብ ግንኙነትዎን ለመፈተሽ ይሞክሩ።</translation>
 <translation id="7829877209233347340">አንድ ወላጅ የትምህርት ቤት መለያ ለማከል ፈቃድ እንዲሰጡ ይጠይቋቸው</translation>
 <translation id="7830594666202422257">ከLinux ጋር ተገናኝ</translation>
 <translation id="7831491651892296503">አውታረ መረብን ማዋቀር ላይ ስህተት</translation>
@@ -5954,7 +5946,6 @@
 <translation id="8966870118594285808">በድንገት ከዘጉት ትርን እንደገና ይክፈቱት</translation>
 <translation id="8967866634928501045">ለማሳየት Alt Shift A ይጫኑ</translation>
 <translation id="8968766641738584599">ካርድ አስቀምጥ</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። ከ24 ሰዓቶች በኋላ እንደገና ይሞክሩ ወይም <ph name="BEGIN_LINK" />በGoogle መለያዎ ውስጥ የይለፍ ቃላትን ይፈትሹ<ph name="END_LINK" />።</translation>
 <translation id="89720367119469899">አምልጥ</translation>
 <translation id="8972513834460200407">ኬላው ከGoogle አገልጋዩች የሚመጡ ውርዶችን እያገደ አለመሆኑን ለማረጋገጥ እባክዎ የአውታረ መረብ አስተዳዳሪዎን ያግኙ።</translation>
 <translation id="8973557916016709913">የማጉላት ደረጃውን ያስወግዱ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 60f5fea..6982c148 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">اسم الإشارة</translation>
 <translation id="1124772482545689468">المستخدم</translation>
 <translation id="1125550662859510761">‏تبدو كـ <ph name="WIDTH" /> x <ph name="HEIGHT" /> (أصلية)</translation>
+<translation id="1126809382673880764">‏لا يوفّر لك هذا الوضع حماية من الإضافات أو عمليات التنزيل أو المواقع الإلكترونية الضارة. وستظل تستفيد من ميزة "التصفّح الآمن" متى أمكن في خدمات Google الأخرى، مثل Gmail و"بحث Google".</translation>
 <translation id="1128109161498068552">‏عدم السماح لأي موقع ويب باستخدام الرسائل الحصرية في النظام للدخول إلى أجهزة MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">تعديل محرّك البحث</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">الشبكات المعروفة</translation>
 <translation id="123578888592755962">القرص ممتلئ</translation>
 <translation id="1238191093934674082">‏فتح الشبكة الظاهرية الخاصة (VPN)</translation>
+<translation id="1239439601391236986">إظهار اقتراحات المعلومات الشخصية المُدخَلة</translation>
 <translation id="1239594683407221485">يمكنك استكشاف محتوى الجهاز في تطبيق الملفات.</translation>
 <translation id="124116460088058876">مزيد من اللغات</translation>
 <translation id="1241753985463165747">قراءة جميع بياناتك وتغييرها على موقع الويب الحالي عند الاستدعاء</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">تفعيل شبكة الجوّال</translation>
 <translation id="1407489512183974736">اقتصاص الوسط</translation>
 <translation id="1408504635543854729">يمكنك استكشاف محتوى الجهاز في تطبيق الملفات. ويعد هذا المحتوى مقيدًا من قبل المشرف، ولا يمكن تعديله.</translation>
+<translation id="1408980562518920698">إدارة المعلومات الشخصية</translation>
 <translation id="1410197035576869800">رمز التطبيق</translation>
 <translation id="1410616244180625362">مواصلة السماح لـ <ph name="HOST" /> بالدخول إلى الكاميرا</translation>
 <translation id="1414648216875402825">إنك تُجري تحديثًا لإصدار غير ثابت من <ph name="PRODUCT_NAME" /> والذي يشتمل على ميزات قيد التقدم. لذا قد تحدث أعطال وأخطاء غير متوقعة. يُرجى المتابعة مع توخّي الحذر.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">‏&amp;وحدة تحكم JavaScript</translation>
 <translation id="1587907146729660231">المس "زر التشغيل" بإصبعك</translation>
+<translation id="1588200577109872591">إدخالات ذكية</translation>
 <translation id="1588438908519853928">عادي</translation>
 <translation id="158849752021629804">يلزم توفر الشبكة الرئيسية</translation>
 <translation id="1588870296199743671">فتح الرابط باستخدام...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">تسجيل الدخول باسم</translation>
 <translation id="1880905663253319515">هل تريد حذف الشهادة "<ph name="CERTIFICATE_NAME" />"؟</translation>
 <translation id="1884013283844450420">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الشبكة <ph name="NETWORK_NAME" />، الاتصال</translation>
+<translation id="1884705339276589024">‏تغيير حجم قرص نظام التشغيل Linux</translation>
 <translation id="1886996562706621347">السماح لمواقع الويب بأن تطلب أن تصبح معالجات تلقائية للبروتوكولات (مستحسن)</translation>
 <translation id="1887442540531652736">خطأ في تسجيل الدخول</translation>
 <translation id="1887597546629269384">‏يُرجى قول "Ok Google" مرة أخرى.</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">أنت الآن تُجري تغييرًا إلى قناة ذات إصدار سابق من <ph name="PRODUCT_NAME" />. وسيسري تغيير القناة عند تطابق إصدار القناة مع الإصدار المثبت حاليًا على الجهاز.</translation>
 <translation id="197989455406964291">‏لا يدعم KDC (مركز توزيع المفاتيح) نوع التشفير</translation>
 <translation id="1982354452682152483">لا يتوفّر وصف.</translation>
+<translation id="1984417487208496350">بلا حماية (غير مُستحسَن)</translation>
 <translation id="1987317783729300807">حسابات</translation>
 <translation id="1989112275319619282">تصفّح</translation>
 <translation id="1990512225220753005">عدم إظهار الاختصارات في هذه الصفحة</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">‏لاسترداد معلومات حسابك، انتقل إلى: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">إعداد أمان النظام</translation>
 <translation id="2091887806945687916">الصوت</translation>
+<translation id="2096478741073211388">تساعدك اقتراحات المعلومات الشخصية على الكتابة بشكلٍ أسرع من خلال تقديم اقتراح لاسمك أو عنوانك أو رقم هاتفك عند كتابتك لكلمات معيّنة. ولن يتمكّن أحدٌ سواك من الاطّلاع على اقتراحاتك الخاصة والمخصّصة لحسابك.</translation>
 <translation id="2096715839409389970">حذف ملفات تعريف الارتباط التابعة لجهات خارجية</translation>
 <translation id="2097372108957554726">‏يلزمك تسجيل الدخول إلى Chrome لتسجيل الأجهزة الجديدة</translation>
 <translation id="2099172618127234427">‏أنت تمكن ميزات تصحيح الأخطاء لنظام التشغيل Chrome التي ستثبّت البرنامج الخفي لـ sshd وتمكن التشغيل من محركات الأقراص USB.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">تحديث الإطار</translation>
 <translation id="2114896190328250491">صورة <ph name="NAME" /></translation>
 <translation id="2119349053129246860">فتح في <ph name="APP" /></translation>
+<translation id="2119461801241504254">تم تفعيل "التصفّح الآمن" وحمايتك من عمليات التنزيل والمواقع الإلكترونية الضارة.</translation>
 <translation id="2120297377148151361">النشاط والتفاعلات</translation>
 <translation id="2120639962942052471">تم حظر إذن <ph name="PERMISSION" />.</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{تم حظر ملفات تعريف الارتباط.}=1{تم حظر ملفات تعريف الارتباط باستثناء ملف واحد.}two{تم حظر ملفات تعريف الارتباط باستثناء ملفَّين ({COUNT}).}few{تم حظر ملفات تعريف الارتباط باستثناء {COUNT} ملفات.}many{تم حظر ملفات تعريف الارتباط باستثناء {COUNT} ملفًا.}other{تم حظر ملفات تعريف الارتباط باستثناء {COUNT} ملف.}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">تمت إضافة الإشارات المرجعية</translation>
 <translation id="2343747224442182863">التركيز على علامة التبويب هذه</translation>
 <translation id="2345723121311404059">صفحة واحدة على <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">‏خدمة SODA</translation>
 <translation id="2347644257713614136">‏يخضع استخدام Hangouts وCast for Education لسياسة خصوصية Google.</translation>
 <translation id="2348176352564285430">التطبيق: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">حدث خطأ أثناء تحميل البيانات.</translation>
@@ -1627,7 +1634,7 @@
 <translation id="3159493096109238499">بيج</translation>
 <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (مستندة إلى الأجهزة)</translation>
 <translation id="3161522574479303604">كل اللغات</translation>
-<translation id="3162853326462195145">حساب المدرسة</translation>
+<translation id="3162853326462195145">حساب المؤسسة التعليمية</translation>
 <translation id="3162899666601560689">يسمح هذا الإجراء للمواقع الإلكترونية باستخدام ملفات تعريف الارتباط لتحسين تجربة التصفُّح، مثل إبقائك مُسجِّلاً الدخول أو تذكُّر عناصر في سلة التسوق.</translation>
 <translation id="3163201441334626963">المنتج غير معروف <ph name="PRODUCT_ID" /> من المورّد‬ <ph name="VENDOR_ID" /></translation>
 <translation id="3164329792803560526">مشاركة علامة التبويب هذه مع <ph name="APP_NAME" /></translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">يُرجى لمس مفتاح الأمان مرة أخرى لتأكيد إعادة الضبط. سيتم حذف جميع المعلومات المحفوظة في مفتاح الأمان، بما في ذلك رقم التعريف الشخصي الخاص به.</translation>
 <translation id="3518985090088779359">القبول والمتابعة</translation>
 <translation id="351952459507671940">إضافة إلى مجموعة جديدة</translation>
+<translation id="3521606918211282604">تغيير حجم القرص</translation>
 <translation id="3523642406908660543">طلب الإذن في حالة محاولة أحد مواقع الويب الوصول إلى جهاز الكمبيوتر باستخدام مكون إضافي (موصى به)</translation>
 <translation id="3524965460886318643">تصدير الأنشطة</translation>
 <translation id="3526034519184079374">يتعذَّر الاطِّلاع على بيانات "المواقع" أو تغييرها</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">‏يُرجى إدخال كلمة المرور لتفعيل Smart Lock. وفي المرة القادمة، سيفتح هاتفك قفل جهاز <ph name="DEVICE_TYPE" />. يمكنك إيقاف Smart Lock في "الإعدادات".</translation>
 <translation id="3630132874740063857">هاتفك</translation>
 <translation id="3630995161997703415">أضف موقع الويب هذا إلى الرف لاستخدامه في أي وقت.</translation>
+<translation id="3633309367764744750">يتيح الجلب المُسبق للمعلومات من الصفحات بما في ذلك الصفحات التي لم تزُرها بعد. وقد تتضمّن المعلومات المجلوبة ملفات تعريف الارتباط في حال كنت تسمح بملفات تعريف الارتباط.</translation>
 <translation id="3634507049637220048">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الشبكة <ph name="NETWORK_NAME" />، حالة الاتصال <ph name="CONNECTION_STATUS" />، يديرها المشرف، التفاصيل</translation>
 <translation id="3635241501480133979">تنتهك هذه البيانات سياسات أمان مؤسستك ولا يمكن إدراجها.</translation>
 <translation id="3635353578505343390">‏إرسال تعليقات إلى Google</translation>
@@ -2273,7 +2282,6 @@
 <translation id="3971764089670057203">بصمات الأصابع المُسجلة في مفتاح الأمان هذا</translation>
 <translation id="3973660817924297510">جارٍ التحقّق من كلمات المرور (<ph name="CHECKED_PASSWORDS" /> من <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">تعذّر الاتصال بخادم النطاق</translation>
-<translation id="3975884715086515476">يتعذّر على <ph name="IDS_SHORT_PRODUCT_NAME" /> التحقُّق من كلمات المرور. يُرجى إعادة المحاولة لاحقًا.</translation>
 <translation id="3976108569178263973">لا تتوفر أي طابعات.</translation>
 <translation id="397703832102027365">جارٍ الإنهاء...</translation>
 <translation id="3977886311744775419">لا يتم تنزيل التحديثات التلقائية على نوع الشبكة هذا، ولكن يمكنك التحقق من التحديثات يدويًا.</translation>
@@ -2574,7 +2582,6 @@
 <translation id="4421932782753506458">الانتفاش</translation>
 <translation id="4423376891418188461">استعادة الإعدادات</translation>
 <translation id="442397852638519243">يا <ph name="USER_NAME" />، يطلب منك مشرفك تغيير كلمة المرور.</translation>
-<translation id="4426209360861763174">يتعذّر على <ph name="IDS_SHORT_PRODUCT_NAME" /> التحقُّق من كلمات المرور. يُرجى إعادة المحاولة بعد 24 ساعة.</translation>
 <translation id="4429030830601238961">تنتهك هذه البيانات سياسات أمان مؤسستك ولا يمكن لصقها.</translation>
 <translation id="4430019312045809116">مستوى الصوت</translation>
 <translation id="4430369329743628066">تمت إضافة إشارة</translation>
@@ -2587,7 +2594,6 @@
 <translation id="4441124369922430666">هل ترغب في تشغيل هذا التطبيق تلقائيًا عند تشغيل الجهاز؟</translation>
 <translation id="4441147046941420429">للمواصلة، يُرجى إزالة مفتاح الأمان من جهازك، ثم إعادة إدخاله ولمسه.</translation>
 <translation id="444134486829715816">توسيع...</translation>
-<translation id="4442329324652245220">‏لا يستطيع <ph name="IDS_SHORT_PRODUCT_NAME" /> التحقّق من كلمات المرور إلا عند تسجيل الدخول باستخدام حسابك على Google.</translation>
 <translation id="4442424173763614572">تعذّر البحث في نظام أسماء النطاقات</translation>
 <translation id="4443536555189480885">&amp;تعليمات</translation>
 <translation id="4444304522807523469">‏الدخول إلى الماسحات الضوئية للمستند الملحق عبر جهاز USB أو على الشبكة المحلية</translation>
@@ -2614,7 +2620,6 @@
 <translation id="4476659815936224889">لمسح هذا الرمز، يمكنك استخدام تطبيق ماسح رمز الاستجابة السريعة على هاتفك أو بعض تطبيقات الكاميرا.</translation>
 <translation id="4477015793815781985">‏يرجى تضمين مفتاح Ctrl أو Alt أو ⌘.</translation>
 <translation id="4478664379124702289">حفظ الار&amp;تباط باسم...</translation>
-<translation id="4478777936860197922">ما مِن كلمات مرور محفوظة. لا يستطيع <ph name="IDS_SHORT_PRODUCT_NAME" /> التحقّق من كلمات المرور إلا عند حفظها.</translation>
 <translation id="4479424953165245642">‏إدارة تطبيقات Kiosk</translation>
 <translation id="4479639480957787382">إيثرنت</translation>
 <translation id="4479877282574735775">جارٍ ضبط الآلة الافتراضية. قد يستغرق ذلك بضع دقائق.</translation>
@@ -2860,7 +2865,6 @@
 <translation id="4849517651082200438">عدم التثبيت</translation>
 <translation id="4850669014075537160">التمرير</translation>
 <translation id="4850886885716139402">عرض</translation>
-<translation id="485197095346966382">في حال تسجيل الدخول باستخدام كلمة مرور محتمَل تعرّضها للاختراق، سيرسل <ph name="IDS_SHORT_PRODUCT_NAME" /> إشعارًا إليك.</translation>
 <translation id="4853020600495124913">فتح في &amp;نافذة جديدة</translation>
 <translation id="4854317507773910281">اختَر حساب أحد الوالدَين للحصول على موافقة.</translation>
 <translation id="485480310608090163">المزيد من الإعدادات والأذونات</translation>
@@ -3936,6 +3940,7 @@
 <translation id="6298962879096096191">‏استخدام Google Play لتثبيت تطبيقات Android</translation>
 <translation id="630065524203833229">إن&amp;هاء</translation>
 <translation id="6300718114348072351">تعذّر ضبط <ph name="PRINTER_NAME" /> تلقائيًا. يُرجى تحديد التفاصيل المتقدّمة للطابعة. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">اقتراحات المعلومات الشخصية</translation>
 <translation id="6305607932814307878">السياسة العامة:</translation>
 <translation id="6307990684951724544">النظام مشغول</translation>
 <translation id="6308493641021088955">خدمة تسجيل الدخول مقدّمة من <ph name="EXTENSION_NAME" /></translation>
@@ -4014,6 +4019,7 @@
 <translation id="641081527798843608">مطابقة الموضوع</translation>
 <translation id="6412673304250309937">‏يعمل على التحقّق من عناوين URL التي تحتوي على قائمة بمواقع إلكترونية غير آمنة مُخزّنة في Chrome. وإذا حاول موقع إلكتروني سرقة كلمة المرور أو إذا نزّلت ملفًا ضارًا، قد يرسل متصفّح Chrome أيضًا عناوين URL تتضمّن أجزاء من محتوى الصفحة إلى "التصفّح الآمن".</translation>
 <translation id="6412931879992742813">نافذة جديدة للتصفح المتخفي</translation>
+<translation id="6413591858632097328">سيؤدي هذا الإجراء إلى محو جميع البيانات وملفات تعريف الارتباط المُخزّنة من خلال <ph name="ORIGIN_NAME" /> وتطبيقاته المثبّتة.</translation>
 <translation id="641469293210305670">تثبيت التطبيقات والتحديثات</translation>
 <translation id="6414888972213066896">لقد سألت والديك ما إذا كانت زيارة هذا الموقع مناسبةً لك</translation>
 <translation id="6415900369006735853">الاتصال بالإنترنت من خلال هاتفك</translation>
@@ -4824,7 +4830,6 @@
 <translation id="7530016656428373557">معدل التفريغ بوحدة الوات</translation>
 <translation id="7531779363494549572">يُرجى الانتقال إلى "الإعدادات" &gt; "التطبيقات والإشعارات" &gt; "الإشعارات".</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> لا يستجيب. اختَر "فرض الإغلاق" لإغلاق التطبيق.</translation>
-<translation id="7536333565791380193">إعدادات الأمان المتقدّمة</translation>
 <translation id="7537451260744431038">يمنع هذا الإجراء المواقع الإلكترونية من استخدام ملفات تعريف الارتباط لتحسين تجربة التصفُّح، مثل إبقائك مُسجِّلاً الدخول أو تذكُّر عناصر في سلة التسوق.</translation>
 <translation id="7539856059004947393">مفتاح أمان البلوتوث</translation>
 <translation id="7540972813190816353">حدث خطأ أثناء التحقق من التحديثات: <ph name="ERROR" /></translation>
@@ -5065,7 +5070,6 @@
     <ph name="BEGIN_BOLD" />ملاحظة:<ph name="END_BOLD" />  ستتم إعادة تشغيل النظام أثناء العملية.</translation>
 <translation id="7828731929332799387">سيؤدي هذا إلى حذف جميع ملفات تعريف الارتباط وبيانات الموقع الإلكتروني المتوفرة في سياقات تابعة لجهات خارجية. هل تريد المواصلة؟</translation>
 <translation id="7829298379596169484">جارٍ الوصول إلى إدخال الصوت</translation>
-<translation id="7829528495815477379">يتعذّر على <ph name="IDS_SHORT_PRODUCT_NAME" /> التحقُّق من كلمات المرور. يُرجى التحقّق من اتصال الإنترنت.</translation>
 <translation id="7829877209233347340">اطلب من أحد الوالدَين تسجيل الدخول لمنح إذن إضافة حساب المدرسة.</translation>
 <translation id="7830594666202422257">‏الربط بنظام التشغيل Linux</translation>
 <translation id="7831491651892296503">حدث خطأ أثناء تهيئة الشبكة</translation>
@@ -5403,7 +5407,7 @@
 <translation id="8263744495942430914">أوقف <ph name="FULLSCREEN_ORIGIN" /> مؤشر الماوس.</translation>
 <translation id="8264024885325823677">يتولى مشرفك إدارة هذا الإعداد.</translation>
 <translation id="8264718194193514834">شغّلت الإضافة <ph name="EXTENSION_NAME" /> وضع ملء الشاشة.</translation>
-<translation id="826511437356419340">‏تم الدخول إلى وضع "النظرة العامة على النافذة". مرّر سريعًا للتنقُّل أو اضغط على مفتاح التبويب (Tab) في حال كنت تستخدم لوحة المفاتيح.</translation>
+<translation id="826511437356419340">‏تم الدخول إلى وضع "نظرة عامة للنافذة". مرّر سريعًا للتنقُّل أو اضغط على مفتاح التبويب (Tab) في حال كنت تستخدم لوحة المفاتيح.</translation>
 <translation id="8267961145111171918">‏<ph name="BEGIN_PARAGRAPH1" />هذه معلومات عامة حول هذا الجهاز وكيفية استخدامه (مثل مستوى طاقة البطارية والأخطاء التي حدثت بالإضافة إلى العمليات التي تمّت داخل النظام والتطبيقات). وسيتم استخدام البيانات في تحسين Android، كما تساعد بعض المعلومات المجمّعة تطبيقات Google وشركائها، مثل مطوّري برامج Android، لتحسين أداء تطبيقاتهم ومنتجاتهم.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />لن يؤثر إيقاف هذه الميزة في قدرة هذا الجهاز على إرسال المعلومات المطلوبة للحصول على خدمات أساسية، مثل تحديثات النظام والأمان.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />يمكن للمالك التحكُّم في هذه الميزة من "الإعدادات" &gt; "إعدادات متقدمة" &gt; إرسال بيانات التشخيص والاستخدام إلى Google تلقائيًا.<ph name="END_PARAGRAPH3" />
@@ -5512,7 +5516,7 @@
 <translation id="8426713856918551002">جارٍ التفعيل</translation>
 <translation id="8427292751741042100">مضمن في أي مضيف</translation>
 <translation id="8428213095426709021">الإعدادات</translation>
-<translation id="8428271547607112339">إضافة حساب المدرسة</translation>
+<translation id="8428271547607112339">إضافة حساب المؤسسة التعليمية</translation>
 <translation id="8428628598981198790">لا يمكن استخدام مفتاح الأمان مع هذا الموقع الإلكتروني</translation>
 <translation id="84297032718407999">سيتم تسجيل خروجك خلال <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="8431190899827883166">عرض النقرات</translation>
@@ -5575,7 +5579,7 @@
 <translation id="851263357009351303">السماح للموقع <ph name="HOST" /> بعرض الصور دومًا</translation>
 <translation id="8513108775083588393">التدوير تلقائي</translation>
 <translation id="8514746246728959655">تجربة مفتاح أمان آخر</translation>
-<translation id="851960115758509829">‏ستتم مزامنة التطبيقات والإعدادات وعمليات التخصيص الأخرى على جميع الأجهزة التي تعمل بـ "نظام التشغيل Chrome" التي سجّلت الدخول عليها باستخدام حسابك على Google.</translation>
+<translation id="851960115758509829">‏ستتم مزامنة التطبيقات والإعدادات وعمليات التخصيص الأخرى على جميع الأجهزة التي تعمل بـ "نظام التشغيل Chrome" والتي سجّلت الدخول إليها باستخدام حسابك على Google.</translation>
 <translation id="8521475323816527629">الوصول إلى تطبيقاتك بسرعة</translation>
 <translation id="8523493869875972733">الإبقاء على التغييرات</translation>
 <translation id="8523849605371521713">تمت الإضافة من قبل السياسة</translation>
@@ -5940,7 +5944,6 @@
 <translation id="8966870118594285808">إعادة فتح علامة تبويب في حال إغلاقها عن طريق الخطأ</translation>
 <translation id="8967866634928501045">‏يُرجى الضغط على Alt+Shift+A للعرض.</translation>
 <translation id="8968766641738584599">حفظ البطاقة</translation>
-<translation id="8971800409073702505">‏يتعذّر على <ph name="IDS_SHORT_PRODUCT_NAME" /> التحقُّق من كلمات المرور. يُرجى إعادة المحاولة بعد 24 ساعة أو <ph name="BEGIN_LINK" />التحقُّق من كلمات المرور في حسابك على Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">خروج</translation>
 <translation id="8972513834460200407">‏يُرجى التحقق مع مشرف الشبكة للتأكد من عدم حظر الجدار الناري للتنزيلات من خوادم Google.</translation>
 <translation id="8973557916016709913">إزالة مستوى التكبير أو التصغير</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 9f74faa..826493fd 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">বুকমার্কৰ নাম</translation>
 <translation id="1124772482545689468">ব্যৱহাৰকাৰী</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" />ৰ দৰে লাগিছে (পূৰ্বনিৰ্ধাৰিত)</translation>
+<translation id="1126809382673880764">আপোনাক বিপজ্জনক ৱেবছাইট, ডাউনল’ড অথবা এক্সটেনশ্বনসমূহৰ পৰা সুৰক্ষা প্ৰদান নকৰে। Gmail আৰু Searchৰ দৰে অন্য Google সেৱাসমূহ, য’ত সুৰক্ষিত ব্ৰাউজিঙৰ সুবিধাটো উপলব্ধ, সেইবিলাকত আপুনি তথাপি এই সুবিধাটো পাব।</translation>
 <translation id="1128109161498068552">যিকোনো ছাইটক MIDI ডিভাইচসমূহ এক্সেছ কৰিবলৈ ছিষ্টেমৰ অনন্য বাৰ্তা ব্যৱহাৰ কৰিবলৈ অনুমতি নিদিব</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">সন্ধান ইঞ্জিন সম্পাদনা কৰক</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">চিনাকী নেটৱর্ক</translation>
 <translation id="123578888592755962">ডিস্কৰ ঠাই সম্পূর্ণ হৈছে</translation>
 <translation id="1238191093934674082">VPN খোলক</translation>
+<translation id="1239439601391236986">ব্যক্তিগত তথ্য ইনপুট কৰাৰ পৰামৰ্শসমূহ দেখুৱাওক</translation>
 <translation id="1239594683407221485">Files এপত ডিভাইচৰ সমল অন্বেষণ কৰক।</translation>
 <translation id="124116460088058876">অধিক ভাষা</translation>
 <translation id="1241753985463165747">অনুৰোধমৰ্মে বৰ্তমানৰ ৱেবছাইটটোত আপোনাৰ সকলো ডেটা পঢ়া আৰু সলনি কৰা</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">চেলুলাৰ সক্ৰিয়কৰণ</translation>
 <translation id="1407489512183974736">সোঁমাজত ক্ৰপ কৰা</translation>
 <translation id="1408504635543854729">Files এপত ডিভাইচৰ সমল অন্বেষণ কৰক। প্ৰশাসকে সমল সীমাবদ্ধ কৰাৰ বাবে সংশোধন কৰিব নোৱাৰি।</translation>
+<translation id="1408980562518920698">ব্যক্তিগত তথ্য পৰিচালনা কৰক</translation>
 <translation id="1410197035576869800">এপৰ আইকন</translation>
 <translation id="1410616244180625362"><ph name="HOST" />ক আপোনাৰ কেমেৰাৰ এক্সেছ দিয়াটো অব্যাহত ৰাখক</translation>
 <translation id="1414648216875402825">আপুনি <ph name="PRODUCT_NAME" />ৰ বিকাশ সম্পূৰ্ণ নোহোৱা এটা সংস্কৰণ ব্যৱহাৰ কৰিবলৈ ওলাইছে যিটোৰ কিছুমান সুবিধাই এতিয়ালৈকে ভালকৈ কাম কৰা হোৱা নাই। ক্ৰেশ্ব হ'ব পাৰে আৰু অনাকাংক্ষিত বাগ ওলাব পাৰে। অনুগ্ৰহ কৰি সাৱধানে ব্যৱহাৰ কৰিব।</translation>
@@ -431,6 +434,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScriptৰ কনছ’ল</translation>
 <translation id="1587907146729660231">আপোনাৰ আঙুলিৰে পাৱাৰ বুটামটো স্পৰ্শ কৰক</translation>
+<translation id="1588200577109872591">স্মার্ট ইনপুট</translation>
 <translation id="1588438908519853928">সাধাৰণ</translation>
 <translation id="158849752021629804">গৃহ নেটৱৰ্কৰ আৱশ্যক</translation>
 <translation id="1588870296199743671">ইয়াৰ এটাৰ জৰিয়তে লিংকটো খোলক...</translation>
@@ -666,6 +670,7 @@
 <translation id="1879000426787380528">এইবুলি ছাইন ইন কৰক</translation>
 <translation id="1880905663253319515">প্ৰমাণপত্ৰ "<ph name="CERTIFICATE_NAME" />" মচিবনে?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" />টা নেটৱৰ্কৰ <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, সংযোগ কৰক</translation>
+<translation id="1884705339276589024">Linux ডিস্কৰ আকাৰ সলনি কৰক</translation>
 <translation id="1886996562706621347">প্ৰ’ট’ক’লৰ বাবে ছাইটসমূহক ডিফ’ল্ট হেণ্ডলাৰ হ’বলৈ অনুমতি বিচাৰিবলৈ দিয়ক (চুপাৰিছ কৰা)</translation>
 <translation id="1887442540531652736">ছাইন-ইন সম্পর্কীয় আসোঁৱাহ</translation>
 <translation id="1887597546629269384">পুনৰ "Hey Google" বুলি কওক</translation>
@@ -735,6 +740,7 @@
 <translation id="1979280758666859181">আপুনি <ph name="PRODUCT_NAME" />ৰ পুৰণি সংস্কৰণ থকা এটা চেনেললৈ সলনি কৰিবলৈ লৈছে। আপোনাৰ ডিভাইচত বৰ্তমান ইনষ্টল কৰি থোৱা চেনেলৰ সংস্কৰণৰ সৈতে সেই চেনেলৰ সংস্কৰণটো মিলিলে চেনেল সলনি কৰা হ’ব।</translation>
 <translation id="197989455406964291">KDC এ এনক্ৰিপশ্বনৰ প্ৰকাৰসমূহ সমৰ্থন নকৰে</translation>
 <translation id="1982354452682152483">কোনো বিৱৰণ উপলব্ধ নহয়।</translation>
+<translation id="1984417487208496350">কোনো সুৰক্ষা নাই (চুপাৰিছ কৰা নহয়)</translation>
 <translation id="1987317783729300807">একাউণ্টসমূহ</translation>
 <translation id="1989112275319619282">ব্ৰাউজ কৰক</translation>
 <translation id="1990512225220753005">এই পৃষ্ঠাটোত শ্বৰ্টকাটসমূহ নেদেখুৱাব</translation>
@@ -804,6 +810,7 @@
 <translation id="2090165459409185032">আপোনাৰ একাউণ্টৰ তথ্য পুনৰুদ্ধাৰ কৰিবলৈ google.com/accounts/recoveryলৈ যাওক</translation>
 <translation id="2090876986345970080">ছিষ্টেমৰ সুৰক্ষা ছেটিং</translation>
 <translation id="2091887806945687916">শব্দ</translation>
+<translation id="2096478741073211388">ব্যক্তিগত তথ্যৰ পৰামৰ্শ দিয়া সুবিধাটোৱে আপুনি নিৰ্দিষ্ট কিছুমান শব্দ টাইপ কৰিলে আপোনাৰ নাম, ঠিকনা অথবা ফ’নৰ নম্বৰৰ পৰামৰ্শ আগবঢ়াই আপোনাক খৰকৈ লিখাত সহায় কৰে। আপোনাৰ একাউণ্টৰ বাবে কেৱল আপুনি নিজৰ ব্যক্তিগত, ব্যক্তিগতকৃত পৰামৰ্শসমূহ দেখা পায়।</translation>
 <translation id="2096715839409389970">তৃতীয় পক্ষৰ কুকিসমূহ মচক</translation>
 <translation id="2097372108957554726">আপুনি নতুন ডিভাইচসমূহ পঞ্জীকৰণ কৰিবলৈ Chromeলৈ ছাইন ইন কৰিব লাগিব।</translation>
 <translation id="2099172618127234427">আপুনি Chrome OS ডিবাগ কৰা সুবিধাসমূহ সক্ষম কৰিছে যিবোৰে sshd daemon ছেট আপ কৰিব আৰু USB ড্ৰাইভসমূহৰ পৰা বুটিং সক্ষম কৰিব।</translation>
@@ -820,6 +827,7 @@
 <translation id="2114326799768592691">&amp;ফ্ৰে'ম পুনৰ ল'ড কৰক</translation>
 <translation id="2114896190328250491">ফট’খন <ph name="NAME" />এ উঠাইছিল</translation>
 <translation id="2119349053129246860"><ph name="APP" />ত খোলক</translation>
+<translation id="2119461801241504254">সুৰক্ষিত ব্ৰাউজিং অন হৈ আছে আৰু আপোনাক ক্ষতিকাৰক ছাইট আৰু ডাউনল’ডসমূহৰ পৰা সুৰক্ষা প্ৰদান কৰি আছে</translation>
 <translation id="2120297377148151361">কার্যকলাপ আৰু ভাৱ-বিনিময়</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> অৱৰোধ কৰা হৈছে</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{কুকিসমূহ অৱৰোধ কৰা হৈছে}=1{কুকিসমূহক অৱৰোধ কৰা হৈছে, ১ টা ব্যতিক্ৰম}one{কুকিসমূহ অৱৰোধ কৰা হৈছে, {COUNT} টা ব্যতিক্ৰম}other{কুকিসমূহ অৱৰোধ কৰা হৈছে, {COUNT} টা ব্যতিক্ৰম}}</translation>
@@ -1000,7 +1008,6 @@
 <translation id="2342740338116612727">বুকমাৰ্ক যোগ কৰা হ’ল</translation>
 <translation id="2343747224442182863">এই টেবটোত ফ'কাছ কৰক</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" />লৈ ১ পৃষ্ঠা</translation>
-<translation id="2346953515226895098">SODA সেৱা</translation>
 <translation id="2347644257713614136">Hangouts আৰু শিক্ষাৰ বাবে কাষ্ট কৰা সুবিধাটোৰ ব্যৱহাৰ Googleৰ গোপনীয়তা নীতিয়ে পৰিচালনা কৰে।</translation>
 <translation id="2348176352564285430">এপ্: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ডেটা ল’ড কৰাত আসোঁৱাহ হৈছে</translation>
@@ -1888,6 +1895,7 @@
 <translation id="3515983984924808886">ৰিছেট কৰাটো নিশ্চিত কৰিবলৈ আপোনাৰ সুৰক্ষা চাবিটো পুনৰ স্পৰ্শ কৰক। সুৰক্ষা চাবিটোত ষ্ট’ৰ হৈ থকা ইয়াৰ পিনকে ধৰি সকলো তথ্য মচা হ’ব।</translation>
 <translation id="3518985090088779359">গ্ৰহণ কৰি আগুৱাওক</translation>
 <translation id="351952459507671940">নতুন গোটত যোগ কৰক</translation>
+<translation id="3521606918211282604">ডিস্কৰ আকাৰ সলনি কৰক</translation>
 <translation id="3523642406908660543">কোনো এটা ছাইটে যেতিয়া আপোনাৰ কম্পিউটাৰ ব্যৱহাৰ কৰিবলৈ প্লাগ ইন ব্যৱহাৰ কৰিব বিচাৰিলে সোধক (চুপাৰিছ কৰা)</translation>
 <translation id="3524965460886318643">ৰপ্তানি কার্যসমূহ</translation>
 <translation id="3526034519184079374">ছাইটৰ ডেটা পঢ়িব বা সলনি কৰিব নোৱাৰে</translation>
@@ -1975,6 +1983,7 @@
 <translation id="3629631988386925734">স্মাৰ্ট লক সক্ষম কৰিবলৈ নিজৰ পাছৱৰ্ড দিয়ক। আগলৈ আপোনাৰ ফ’নটোৱে আপোনাৰ <ph name="DEVICE_TYPE" /> আনলক কৰিব। আপুনি ছেটিংসমূহ-লৈ গৈ স্মাৰ্ট লক অফ কৰিব পাৰে।</translation>
 <translation id="3630132874740063857">আপোনাৰ ফ'ন</translation>
 <translation id="3630995161997703415">এই ছাইটটো যিকোনো সময়তে ব্যৱহাৰ কৰিবলৈ সেইটো আপোনাৰ শ্বেল্‌ফত যোগ কৰক</translation>
+<translation id="3633309367764744750">পৃষ্ঠাসমূহৰ পৰা আগতীয়াকৈ তথ্য আহৰণ কৰক, য’ত আপুনি এই পৰ্যন্ত নোচোৱা পৃষ্ঠাও অন্তৰ্ভুক্ত। আহৰণ কৰা তথ্যত কুকিও থাকিব পাৰে, যদিহে আপুনি কুকিৰ অনুমতি দিয়ে।</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />টা নেটৱৰ্কৰ <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, আপোনাৰ প্ৰশাসকে পৰিচালনা কৰে, সবিশেষ</translation>
 <translation id="3635241501480133979">এই ডেটাখিনিয়ে আপোনাৰ প্ৰতিষ্ঠানৰ সুৰক্ষা নীতিসমূহ উলংঘা কৰে আৰু সেয়েহে এইখিনি টানি আনি এৰিব নোৱাৰি।</translation>
 <translation id="3635353578505343390">Googleলৈ মতামত পঠিয়াওক</translation>
@@ -2271,7 +2280,6 @@
 <translation id="3971764089670057203">এই সুৰক্ষা চাবিটোত থকা ফিংগাৰপ্ৰিণ্টসমূহ</translation>
 <translation id="3973660817924297510">পাছৱর্ডসমূহ পৰীক্ষা কৰি থকা হৈছে (<ph name="TOTAL_PASSWORDS" /> টাৰ ভিতৰত <ph name="CHECKED_PASSWORDS" /> টা)…</translation>
 <translation id="3975565978598857337">ক্ষেত্ৰ বিফল হোৱাৰ বাবে ছার্ভাৰৰ সৈতে যোগাযোগ কৰি থকা হৈছে</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" />এ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰে। পাছত পুনৰ চেষ্টা কৰক।</translation>
 <translation id="3976108569178263973">উপলব্ধ কোনো প্ৰিণ্টাৰ নাই।</translation>
 <translation id="397703832102027365">সম্পূৰ্ণ কৰি থকা হৈছে...</translation>
 <translation id="3977886311744775419">এই প্ৰকাৰৰ নেটৱৰ্কত স্বয়ংক্ৰিয় আপডে’টসমূহ ডাউনল’ড নহয়, কিন্তু আপুনি আপডে’টসমূহ মেনুৱেলী বিচাৰিব পাৰে।</translation>
@@ -2571,7 +2579,6 @@
 <translation id="4421932782753506458">নোমাল</translation>
 <translation id="4423376891418188461">ছেটিংসমূহ পুনঃস্থাপন কৰক</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, আপোনাৰ প্ৰশাসকে আপুনি নিজৰ পাছৱৰ্ডটো সলনি কৰাটো বিচাৰে।</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" />এ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰে। ২৪ ঘণ্টাৰ পাছত পুনৰ চেষ্টা কৰক।</translation>
 <translation id="4429030830601238961">এই ডেটাখিনিয়ে আপোনাৰ প্ৰতিষ্ঠানৰ সুৰক্ষা নীতিসমূহ উলংঘা কৰে আৰু সেয়েহে এইখিনি পে’ষ্ট কৰিব নোৱাৰি।</translation>
 <translation id="4430019312045809116">ভলিউম</translation>
 <translation id="4430369329743628066">বুকমাৰ্ক যোগ কৰা হ’ল</translation>
@@ -2584,7 +2591,6 @@
 <translation id="4441124369922430666">আপুনি মেচিনটো অন হ’লে স্বয়ংক্ৰিয়ভাৱে এই এপৰ কার্যকলাপ আৰম্ভ হোৱাটো বিচাৰেনে?</translation>
 <translation id="4441147046941420429">অব্যাহত ৰাখিবলৈ আপোনাৰ ডিভাইচৰ পৰা আপোনাৰ সুৰক্ষা চাবিটো আঁতৰাওক, তাৰ পাছত সেইটো পুনৰ ভৰাই তাত স্পৰ্শ কৰক</translation>
 <translation id="444134486829715816">বিস্তাৰ কৰক...</translation>
-<translation id="4442329324652245220">আপুনি নিজৰ Google একাউণ্টটোৰ জৰিয়তে ছাইন ইন কৰিলে <ph name="IDS_SHORT_PRODUCT_NAME" />এ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব পাৰে</translation>
 <translation id="4442424173763614572">DNS বিচাৰিব পৰা নগ'ল</translation>
 <translation id="4443536555189480885">&amp;সহায়তা</translation>
 <translation id="4444304522807523469">ইউএছবি বা অন্য স্থানীয় নেটৱৰ্কৰ দ্বাৰা সংলগ্ন কৰা নথি স্কেনাৰৰ এক্সেছ</translation>
@@ -2611,7 +2617,6 @@
 <translation id="4476659815936224889">এই ক’ডটো স্কেন কৰিবলৈ আপুনি নিজৰ ফ’নটোত এটা কিউআৰ স্কেনাৰ এপ্‌ অথবা কোনো কেমেৰা এপ্‌ ব্যৱহাৰ কৰিব পাৰে।</translation>
 <translation id="4477015793815781985">Ctrl, Alt, বা ⌘ অন্তৰ্ভুক্ত হয়</translation>
 <translation id="4478664379124702289">এইবুলি লিং&amp;কটো ছেভ কৰক...</translation>
-<translation id="4478777936860197922">ছেভ কৰা কোনো পাছৱৰ্ড নাই। আপুনি নিজৰ পাছৱর্ডসমূহ ছেভ কৰিলে <ph name="IDS_SHORT_PRODUCT_NAME" />এ সেইবোৰ পৰীক্ষা কৰিব পাৰে।</translation>
 <translation id="4479424953165245642">কিঅ'স্ক এপ্লিকেশ্বন পৰিচালনা কৰক</translation>
 <translation id="4479639480957787382">ইথাৰনেট</translation>
 <translation id="4479877282574735775">ভাৰ্ছুৱেল মেচিনটো কনফিগাৰ কৰি থকা হৈছে। এই কামটোত কেইমিনিটমান সময় লাগিব পাৰে।</translation>
@@ -2856,7 +2861,6 @@
 <translation id="4849517651082200438">ইনষ্টল নকৰিব</translation>
 <translation id="4850669014075537160">স্ক্ৰ’লিং</translation>
 <translation id="4850886885716139402">চাওক</translation>
-<translation id="485197095346966382">আপুনি কোনো হেক কৰা পাছৱৰ্ডৰ জৰিয়তে ছাইন ইন কৰিলে <ph name="IDS_SHORT_PRODUCT_NAME" />এ আপোনাক জাননী দিব</translation>
 <translation id="4853020600495124913">&amp;নতুন ৱিণ্ড'ত খোলক</translation>
 <translation id="4854317507773910281">অনুমোদনৰ বাবে অভিভাৱকৰ একাউণ্ট বাছনি কৰক</translation>
 <translation id="485480310608090163">অধিক ছেটিং আৰু অনুমতিসমূহ</translation>
@@ -3928,6 +3932,7 @@
 <translation id="6298962879096096191">Androidৰ এপ্‌ ইনষ্টল কৰিবলৈ Google Play ব্যৱহাৰ কৰক</translation>
 <translation id="630065524203833229">প্ৰ&amp;স্থান কৰক</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" />ক স্বয়ংক্রিয়ভাৱে কনফিগাৰ কৰিব পৰা নগ’ল। অনুগ্ৰহ কৰি প্ৰিণ্টাৰৰ উচ্চখাপৰ সবিশেষ নিৰ্দিষ্ট কৰক। <ph name="LINK_BEGIN" />অধিক জানক<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">ব্যক্তিগত তথ্যৰ পৰামৰ্শ</translation>
 <translation id="6305607932814307878">গ্ল’বেল নীতি:</translation>
 <translation id="6307990684951724544">ছিষ্টেম ব্যস্ত আছে</translation>
 <translation id="6308493641021088955">ছাইন ইনটো <ph name="EXTENSION_NAME" />এ প্ৰদান কৰিছে</translation>
@@ -4006,6 +4011,7 @@
 <translation id="641081527798843608">বিষয়ৰ মিল</translation>
 <translation id="6412673304250309937">Chromeত ষ্ট'ৰ কৰি ৰখা অসুৰক্ষিত ছাইটসমূহৰ এখন সূচীৰ সৈতে URLসমূহ পৰীক্ষা কৰে। যদি কোনোবা ছাইটে আপোনাৰ পাছৱর্ড চুৰি কৰিবলৈ চেষ্টা কৰে অথবা আপুনি কোনো ক্ষতিকাৰক ফাইল ডাউনল'ড কৰাৰ সময়ত Chromeএ পৃষ্ঠাৰ সমলৰ বিটসমূহকে ধৰি URLসমূহ সুৰক্ষিত ব্ৰাউজিঙলৈ পঠিয়াব পাৰে।</translation>
 <translation id="6412931879992742813">নতুন ইনক’গনিট’ ৱিণ্ড’</translation>
+<translation id="6413591858632097328">এই কাৰ্যই <ph name="ORIGIN_NAME" /> আৰু ইয়াৰ ইনষ্টল হৈ থকা এপ্‌সমূহে ষ্ট’ৰ কৰা সকলো ডেটা আৰু কুকি মচিব।</translation>
 <translation id="641469293210305670">আপডে’ট আৰু এপ্‌সমূহ ইনষ্টল কৰক</translation>
 <translation id="6414888972213066896">আপুনি নিজৰ অভিভাৱকক এই ছাইটটোলৈ যোৱাটো ঠিক হ’বনে নহয় সুধিছে</translation>
 <translation id="6415900369006735853">আপোনাৰ ফ'নৰ জৰিয়তে ইণ্টাৰনেট সংযোগ কৰক</translation>
@@ -4812,7 +4818,6 @@
 <translation id="7530016656428373557">চ্চাৰ্জ খৰচ হোৱাৰ হাৰ ৱাট এককত</translation>
 <translation id="7531779363494549572">ছেটিংসমূহ &gt; এপ্ আৰু জাননী &gt; জাননী-লৈ যাওক</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" />এ সঁহাৰি দিয়া নাই। এপ্‌টো বন্ধ কৰিবলৈ "জোৰকৈ বন্ধ কৰক" সুবিধাটো বাছনি কৰক।</translation>
-<translation id="7536333565791380193">উচ্চখাপৰ সুৰক্ষা</translation>
 <translation id="7537451260744431038">ছাইটসমূহে আপোনাৰ ব্ৰাউজিঙৰ অভিজ্ঞতা উন্নত কৰিবলৈ কুকিসমূহ ব্যৱহাৰ কৰিব নোৱাৰে, যেনে, আপোনাক ছাইন ইন কৰি ৰাখিবলৈ অথবা আপোনাৰ শ্বপিং কার্টত থকা বস্তুবোৰ মনত ৰাখিবলৈ</translation>
 <translation id="7539856059004947393">ব্লুটুথ সুৰক্ষা চাবি</translation>
 <translation id="7540972813190816353">আপডেট পৰীক্ষা কৰাৰ সময়ত এটা আসোঁৱাহ পোৱা গৈছে: <ph name="ERROR" /></translation>
@@ -5051,7 +5056,6 @@
     <ph name="BEGIN_BOLD" />টোকা:<ph name="END_BOLD" />  প্ৰক্ৰিয়াটো চলি থাকোতে ছিষ্টেমটো ৰিবুট হ‘ব।</translation>
 <translation id="7828731929332799387">এইটোৱে তৃতীয় পক্ষৰ প্ৰসংগত উপলব্ধ সকলো কুকি আৰু ছাইটৰ ডেটা মচিব। আপুনি অব্যাহত ৰাখিবলৈ বিচাৰেনে?</translation>
 <translation id="7829298379596169484">অডিঅ’ ইনপুট এক্সেছ কৰি আছে</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" />এ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰে। আপোনাৰ ইণ্টাৰনেট সংযোগ পৰীক্ষা কৰি চাওক।</translation>
 <translation id="7829877209233347340">বিদ্যালয়ৰ এটা একাউণ্ট যোগ দিয়াৰ অনুমতি দিবলৈ এগৰাকী অভিভাৱকক ছাইন ইন কৰিবলৈ কওক</translation>
 <translation id="7830594666202422257">Linuxৰ সৈতে সংযোগ কৰক</translation>
 <translation id="7831491651892296503">নেটৱৰ্ক কনফিগাৰ কৰাত আসোঁৱাহ</translation>
@@ -5388,7 +5392,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" />এ আপোনাৰ মাউছৰ কাৰ্ছৰ অক্ষম কৰিছে।</translation>
 <translation id="8264024885325823677">এই ছেটিংটো আপোনাৰ প্ৰশাসকে পৰিচালনা কৰে।</translation>
 <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />"এ সম্পূৰ্ণ স্ক্রীণৰ ম’ডটো সক্রিয় কৰিলে।</translation>
-<translation id="826511437356419340">ৱিণ্ড’ ৰূপৰেখা ম‘ডত প্ৰৱেশ কৰা হৈছে। নেভিগে’ট কৰিবলৈ ছোৱাই কৰক অথবা কীব’ৰ্ড ব্যৱহাৰ কৰি আছে যদি টেব দবাওক।</translation>
+<translation id="826511437356419340">ৱিণ্ড’ ৰূপৰেখা ম‘ডত প্ৰৱেশ কৰা হৈছে। নেভিগে’ট কৰিবলৈ ছোৱাইপ কৰক অথবা কীব’ৰ্ড ব্যৱহাৰ কৰি আছে যদি টেব দবাওক।</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />এইখিনি হৈছে এই ডিভাইচটোৰ আৰু সেইটোৰ ব্যৱহাৰৰ বিষয়ে (যেনে- বেটাৰীৰ স্তৰ, ছিষ্টেম আৰু এপৰ কাৰ্যকলাপ আৰু তাত হোৱা আসোঁৱাহৰ) সাধাৰণ তথ্য। এই ডেটাখিনি Androidক অধিক ব্যৱহাৰোপোযোগী কৰিবলৈ ব্যৱহাৰ কৰা হ’ব আৰু কিছুমান একত্ৰিত তথ্যই Google এপ্‌ আৰু Android বিকাশকৰ্তাৰ দৰে অংশীদাৰকো তেওঁলোকৰ এপ্‌ আৰু প্ৰ’ডাক্টক অধিক ফলপ্ৰসূ কৰাত সহায় কৰিব।<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />এই সুবিধাটো বন্ধ কৰিলেও আপোনাৰ ডিভাইচটোৱে ছিষ্টেম আপডে’ট আৰু সুৰক্ষাৰ দৰে অত্যাৱশ্যকীয় সেৱাসমূহৰ বাবে দৰকাৰী তথ্য পঠিয়াওঁতে কোনো অসুবিধাৰ সৃষ্টি নকৰে।<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />গৰাকীজনে এই সুবিধাটো ছেটিং &gt; উন্নত ছেটিং &gt; Googleলৈ স্বয়ংক্রিয়ভাৱে ডাইগন‘ষ্টিক আৰু ব্যৱহাৰৰ ডেটা পঠিয়াওক<ph name="END_PARAGRAPH3" />
@@ -5924,7 +5928,6 @@
 <translation id="8966870118594285808">আপুনি দুৰ্ঘটনাবশতঃ কোনো টেব বন্ধ কৰিলে সেইটো পুনৰ খোলক</translation>
 <translation id="8967866634928501045">দেখুৱাবলৈ Alt Shift A টিপক</translation>
 <translation id="8968766641738584599">কার্ড ছেভ কৰক</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" />এ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰে। ২৪ ঘণ্টাৰ পাছত পুনৰ চেষ্টা কৰক অথবা <ph name="BEGIN_LINK" />আপোনাৰ Google একাউণ্টত পাছৱর্ডসমূহ পৰীক্ষা কৰক<ph name="END_LINK" />।</translation>
 <translation id="89720367119469899">ESCAPE</translation>
 <translation id="8972513834460200407">ফায়াৰৱাল-এ যাতে Google ছাৰ্ভাৰৰ পৰা ডাউনল’ড অৱৰোধ কৰি থোৱা নাই সেয়া নিশ্চিত কৰিবলৈ আপোনাৰ নেটৱৰ্ক প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation>
 <translation id="8973557916016709913">জুমৰ স্তৰ আঁতৰাওক</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index e31714b..d4a15f3e 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -92,6 +92,7 @@
 <translation id="1122960773616686544">Əlfəcin adı</translation>
 <translation id="1124772482545689468">İstifadəçi</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (Lokal)</translation>
+<translation id="1126809382673880764">Sizi təhlükəli veb sayt, endirmə və artırmalardan qorumur. Hələ də Gmail və Axtarış kimi digər Google xidmətlərində mümkün olduğu qədər Təhlükəsiz Baxış qoruması əldə edəcəksiniz.</translation>
 <translation id="1128109161498068552">MIDI cihazlarına giriş üçün saytlara icraedici mesajlar istifadə etməsinə icazə verməyin</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Axtarış mühərrikinə düzəliş edin</translation>
@@ -183,6 +184,7 @@
 <translation id="1235458158152011030">Tanış şəbəkələr</translation>
 <translation id="123578888592755962">Disk doludur</translation>
 <translation id="1238191093934674082">VPN-ni açın</translation>
+<translation id="1239439601391236986">Daxiletmə əsasında şəxsi məlumat təkliflərini göstərin</translation>
 <translation id="1239594683407221485">Fayllar tətbiqində cihazın kontentini kəşf edin.</translation>
 <translation id="124116460088058876">Digər dillər</translation>
 <translation id="1241753985463165747">Lazım gəldiyi zaman cari veb səhifədə olan datanı oxuyun və dəyişdirin</translation>
@@ -299,6 +301,7 @@
 <translation id="140723521119632973">Mobil Aktivasiya</translation>
 <translation id="1407489512183974736">Mərkəzi Kəsimli</translation>
 <translation id="1408504635543854729">Fayllar tətbiqində cihazın kontentini kəşf edin. Kontent admin tərəfindən məhdudlaşdırıldığı üçün dəyişdirilə bilməz.</translation>
+<translation id="1408980562518920698">Şəxsi məlumatı idarə edin</translation>
 <translation id="1410197035576869800">Tətbiq İkonası</translation>
 <translation id="1410616244180625362"><ph name="HOST" /> hostuna daxil olmaq icazəsi verməyə davam edin</translation>
 <translation id="1414648216875402825"><ph name="PRODUCT_NAME" /> məhsulunun inkişafda olan qeyri-stabil versiyasını güncəlləşdirirsiniz. Gözlənilməyən xətalar ola bilər. Diqqətli olun.</translation>
@@ -430,6 +433,7 @@
 <translation id="1585717515139318619">Kompüterinizdə başqa bir proqram Chrome'un necə işlədiyini dəyişdirən tema əlavə etdi.  <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">JavaScript konsolu</translation>
 <translation id="1587907146729660231">Barmağınızla yandırıb-söndürmə düyməsinə toxunun</translation>
+<translation id="1588200577109872591">Ağıllı daxiletmələr</translation>
 <translation id="1588438908519853928">Normal</translation>
 <translation id="158849752021629804">Ev şəbəkəsi lazımdır</translation>
 <translation id="1588870296199743671">Linki bununla açın:</translation>
@@ -665,6 +669,7 @@
 <translation id="1879000426787380528">Belə daxil olun</translation>
 <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" sertifikatı silinsin?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> şəbəkə, <ph name="NETWORK_NAME" />, Qoşulun</translation>
+<translation id="1884705339276589024">Linux diskinin ölçüsünü dəyişin</translation>
 <translation id="1886996562706621347">Saytlara defolt protokol icraçıları olmağa icazə verin (tövsiyə olunur)</translation>
 <translation id="1887442540531652736">Giriş xətası</translation>
 <translation id="1887597546629269384">Yenidən "Hey Google" deyin</translation>
@@ -734,6 +739,7 @@
 <translation id="1979280758666859181">Köhnə versiyalı <ph name="PRODUCT_NAME" /> ilə kanala keçirsiniz.</translation>
 <translation id="197989455406964291">KDC şifrələmə növünü dəstəkləmir</translation>
 <translation id="1982354452682152483">Təsvir əlçatan deyil.</translation>
+<translation id="1984417487208496350">Qoruma yoxdur (tövsiyə edilmir)</translation>
 <translation id="1987317783729300807">Hesablar</translation>
 <translation id="1989112275319619282">Baxın</translation>
 <translation id="1990512225220753005">Bu səhifədə qısayollar göstərməyin</translation>
@@ -803,6 +809,7 @@
 <translation id="2090165459409185032">Hesab məlumatlarını bərpa üçün getmək üçün: Google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Sistem güvənlik ayarı</translation>
 <translation id="2091887806945687916">Səs</translation>
+<translation id="2096478741073211388">Şəxsi məlumat təklifləri müəyyən sözləri yazdığınız zaman adınız, ünvanınız və ya telefon nömrənizi təklif etməklə sürətli yazmanıza yardım edir. Hesabınız üçün şəxsi təklifləri yalnız siz görürsünüz.</translation>
 <translation id="2096715839409389970">Üçüncü tərəf kukilərini təmizləyin</translation>
 <translation id="2097372108957554726">Yeni cihazları qeydiyyat etmək üçün Chrome'a daxil olmalısınız</translation>
 <translation id="2099172618127234427">Chrome OS baq ləğvini aktivləşdirirsiniz ki, sshd daemon quraşdırır və USB cihazlarından yüklənməyə imkan verir.</translation>
@@ -819,6 +826,7 @@
 <translation id="2114326799768592691">Çərçivəni Yenidən Yükləyin</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> adlı şəxsin fotosu</translation>
 <translation id="2119349053129246860"><ph name="APP" /> tətbiqində açın</translation>
+<translation id="2119461801241504254">Təhlükəsiz Baxış aktivdir və sizi zərərli saytlardan və endirmələrdən qoruyur</translation>
 <translation id="2120297377148151361">Fəaliyyət və əlaqələr</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> bloklanıb</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Kukilər bloklanıb}=1{Kukilər bloklanıb, 1 istisna var}other{Kukilər bloklanıb, {COUNT} istisna var}}</translation>
@@ -999,7 +1007,6 @@
 <translation id="2342740338116612727">Əlfəcinlər əlavə edildi</translation>
 <translation id="2343747224442182863">Bu Tabı Mərkəzə Gətirin</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> üçün 1 səhifə</translation>
-<translation id="2346953515226895098">SODA Xidməti</translation>
 <translation id="2347644257713614136">Hangouts və Təhsil üçün Yayımının istifadəsi Google Məxfilik Siyasəti ilə tənzimlənir.</translation>
 <translation id="2348176352564285430">Tətbiq: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Datanı yükləyərkən xəta oldu</translation>
@@ -1886,6 +1893,7 @@
 <translation id="3515983984924808886">Sıfırlamanı təsdiq etmək üçün təhlükəsizlik açarınıza yenidən toxunun. PIN kod daxil olmaqla təhlükəsizlik açarında saxlanılan bütün məlumatlar silinəcək.</translation>
 <translation id="3518985090088779359">Qəbul edin və davam edin</translation>
 <translation id="351952459507671940">Yeni qrupa əlavə edin</translation>
+<translation id="3521606918211282604">Disk ölçüsünü dəyişin</translation>
 <translation id="3523642406908660543">Sayt kompüterinizə daxil olmaq üçün plaqin işlədərsə, icazə alsın (tövsiyə olunur)</translation>
 <translation id="3524965460886318643">Eksport Fəaliyyətləri</translation>
 <translation id="3526034519184079374">Sayt Datasını Oxumaq, yaxud Dəyişmək Mümkün Deyil</translation>
@@ -1973,6 +1981,7 @@
 <translation id="3629631988386925734">Smart Lock'u aktiv etmək üçün parolunuzu yazın. 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="3630132874740063857">Telefonunuz</translation>
 <translation id="3630995161997703415">Hər hansı bir vaxt istifadə etmək üçün bu saytı rəfinizə əlavə edin</translation>
+<translation id="3633309367764744750">Hələ ziyarət etmədiyiniz səhifələr daxil olmaqla, səhifələrdən məlumatları öncədən əldə edir. Kukilərə icazə verdiyiniz halda, əldə edilən məlumatlara kukilər daxil ola bilər.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> şəbəkə, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, Administratorunuz tərəfindən idarə olunur, Detallar</translation>
 <translation id="3635241501480133979">Bu datanın daşınması təşkilatınızın təhlükəsizlik siyasətlərini pozduğu üçün mümkün deyil.</translation>
 <translation id="3635353578505343390">Google'a rəy göndərin</translation>
@@ -2271,7 +2280,6 @@
 <translation id="3971764089670057203">Bu təhlükəsizlik açarında barmaq izləri</translation>
 <translation id="3973660817924297510">Parollar yoxlanır (<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Sahə üçün serverin qoşulması alınmadı</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> parollarınızı yoxlaya bilmir. Sonra cəhd edin.</translation>
 <translation id="3976108569178263973">Əlçatan printer yoxdur.</translation>
 <translation id="397703832102027365">Yekunlaşır...</translation>
 <translation id="3977886311744775419">Avtomatik güncəlləmələr bu şəbəkə növündə endirilmir, lakin manual olaraq güncəlləmələri yoxlaya bilərsiniz.</translation>
@@ -2570,7 +2578,6 @@
 <translation id="4421932782753506458">Tüklü</translation>
 <translation id="4423376891418188461">Ayarları Bərpa Edin</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, administrator parolu dəyişməyinizi tələb edir.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> parollarınızı yoxlaya bilmir. 24 saat sonra yenidən cəhd edin.</translation>
 <translation id="4429030830601238961">Bu datanın əlavə edilməsi təşkilatınızın təhlükəsizlik siyasətlərini pozduğu üçün mümkün deyil.</translation>
 <translation id="4430019312045809116">Həcm</translation>
 <translation id="4430369329743628066">Əlfəcin əlavə olundu</translation>
@@ -2583,7 +2590,6 @@
 <translation id="4441124369922430666">Cihaz aktivləşdirildikdə bu tətbiqin avtomatik açılmasını istəyirsiniz?</translation>
 <translation id="4441147046941420429">Davam etmək üçün təhlükəsizlik açarını cihazınızdan çıxarıb yenidən daxil edin və ona toxunun</translation>
 <translation id="444134486829715816">Genişləndirin...</translation>
-<translation id="4442329324652245220">Google Hesabınız ilə daxil olduqda <ph name="IDS_SHORT_PRODUCT_NAME" /> parollarınızı yoxlaya bilər.</translation>
 <translation id="4442424173763614572">DNS sistemi uğursuz oldu</translation>
 <translation id="4443536555189480885">Yardım</translation>
 <translation id="4444304522807523469">USB vasitəsilə qoşulmuş və ya lokal şəbəkədə olan sənəd skanerlərinə girin</translation>
@@ -2610,7 +2616,6 @@
 <translation id="4476659815936224889">Bu kodu skan etmək üçün telefonunuzdakı QR skaner tətbiqini və ya bəzi kamera tətbiqlərini istifadə edə bilərsiniz.</translation>
 <translation id="4477015793815781985">Ctrl, Alt və ya ⌘ daxil edin</translation>
 <translation id="4478664379124702289">Linki saxlama formatı:</translation>
-<translation id="4478777936860197922">Yadda saxlanmış parol yoxdur. Parollarınızı yadda saxladıqda <ph name="IDS_SHORT_PRODUCT_NAME" /> onları yoxlaya bilər.</translation>
 <translation id="4479424953165245642">Kiosk tətbiqlərini idarə edin</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Virtual cihaz konfiqurasiya edilir. Bir neçə dəqiqə çəkə bilər.</translation>
@@ -2856,7 +2861,6 @@
 <translation id="4849517651082200438">Quraşdırmayın</translation>
 <translation id="4850669014075537160">Sürüşmə</translation>
 <translation id="4850886885716139402">Görünüş</translation>
-<translation id="485197095346966382">Oğurlanmış parol ilə daxil olduqda <ph name="IDS_SHORT_PRODUCT_NAME" /> sizə bildiriş göndərəcək</translation>
 <translation id="4853020600495124913">Yeni pəncərədə açın</translation>
 <translation id="4854317507773910281">Təsdiq üçün valideyn hesabı seçin</translation>
 <translation id="485480310608090163">Daha çox ayar və icazələr</translation>
@@ -3928,6 +3932,7 @@
 <translation id="6298962879096096191">Android tətbiqlərini quraşdırmaq üçün Google Play istifadə edin</translation>
 <translation id="630065524203833229">Çıxış</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> avtomatik konfiqurasiya edilə bilmədi. Qabaqcıl printer məlumatlarını təyin edin. <ph name="LINK_BEGIN" />Ətraflı məlumat<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Şəxsi məlumat təklifləri</translation>
 <translation id="6305607932814307878">Qlobal Siyasət:</translation>
 <translation id="6307990684951724544">Sistem məşğuldur</translation>
 <translation id="6308493641021088955">Giriş <ph name="EXTENSION_NAME" /> tərəfindən təmin edilib</translation>
@@ -4006,6 +4011,7 @@
 <translation id="641081527798843608">Subyekt uyğunluğu</translation>
 <translation id="6412673304250309937">URL'ləri Chrome'da saxlanılan təhlükəli saytların siyahısı ilə yoxlayır. Sayt parolunuzu oğurlamağa çalışdıqda və ya zərərli fayl endirdiyinizdə Chrome səhifə məzmunundan kiçik nümunələr də daxil olmaqla, URL'ləri Təhlükəsiz Baxışa göndərə bilər.</translation>
 <translation id="6412931879992742813">Yeni gizli pəncərə</translation>
+<translation id="6413591858632097328">Bununla <ph name="ORIGIN_NAME" /> tərəfindən saxlanılan bütün data, kukilər və orada quraşdırılmış tətbiqlər silinəcək.</translation>
 <translation id="641469293210305670">Güncəlləmə və Tətbiqləri Quraşdırın</translation>
 <translation id="6414888972213066896">Bu sayta daxil olmaq üçün valideyninizdən icazə istədiniz.</translation>
 <translation id="6415900369006735853">İnternetə telefonla bağlanın</translation>
@@ -4816,7 +4822,6 @@
 <translation id="7530016656428373557">Reyti Vatda hesablayın</translation>
 <translation id="7531779363494549572">Ayarlar &gt; Tətbiq və bildirişlər &gt; Bildirişlər ünvanına daxil olun.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> cavab vermir. Tətbiqi bağlamaq üçün "Məcbur bağlayın" seçin.</translation>
-<translation id="7536333565791380193">Qabaqcıl təhlükəsizlik</translation>
 <translation id="7537451260744431038">Saytlar baxış təcrübənizi yaxşılaşdırmaq üçün, məsələn, sizi daxil olmuş vəziyyətdə saxlamaq və ya alış-veriş səbətindəki elementləri yadda saxlamaq üçün kukilərdən istifadə edə bilmir</translation>
 <translation id="7539856059004947393">Bluetooth təhlükəsizlik açarı</translation>
 <translation id="7540972813190816353">Güncəlləşmələri yoxlayarkən xəta baş verdi: <ph name="ERROR" /></translation>
@@ -5057,7 +5062,6 @@
     <ph name="BEGIN_BOLD" />Qeyd:<ph name="END_BOLD" />  Əməliyyat zamanı sistem yenidən işə başlayacaq.</translation>
 <translation id="7828731929332799387">Bu zaman üçüncü tərəf kontekstlərində əlçatan olan bütün kuki və sayt datası silinəcək. Davam etmək istəyirsiniz?</translation>
 <translation id="7829298379596169484">Audio daxiletmə əldə olunur</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> parollarınızı yoxlaya bilmir. İnternet bağlantınızı yoxlayın.</translation>
 <translation id="7829877209233347340">Məktəb hesabı əlavə etmək icazəsi verməsi üçün valideyndən daxil olmasını istəyin</translation>
 <translation id="7830594666202422257">Linux'a qoşulun</translation>
 <translation id="7831491651892296503">Şəbəkə konfiqurasiya xətası</translation>
@@ -5928,7 +5932,6 @@
 <translation id="8966870118594285808">Tab səhvən bağlanarsa, yenidən açın</translation>
 <translation id="8967866634928501045">Göstərmək üçün Alt Shift A düymələrinə basın</translation>
 <translation id="8968766641738584599">Kartı yadda saxlayın</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> parollarınızı yoxlaya bilmir. 24 saat sonra 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="89720367119469899">Çıxın</translation>
 <translation id="8972513834460200407">Şəbəkə administratorunuz ilə yoxlayaraq əmin olun ki, brandmauer Google serverlərindən olan endirmələri blok etmir.</translation>
 <translation id="8973557916016709913">Miqyas səviyyəsini silin</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index 3ba75af..f408b5b 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Назва закладкі</translation>
 <translation id="1124772482545689468">Карыстальнік</translation>
 <translation id="1125550662859510761">Здаецца, гэта <ph name="WIDTH" /> × <ph name="HEIGHT" /> (уласная)</translation>
+<translation id="1126809382673880764">Не абараняе ад небяспечных вэб-сайтаў, спамповак і пашырэнняў. Вы застаняцеся пад абаронай Бяспечнага прагляду пры карыстанні іншымі сэрвісамі Google, у якіх ён даступны, такімі як Gmail і Пошук.</translation>
 <translation id="1128109161498068552">Не дазваляць сайтам выкарыстоўваць сістэмныя эксклюзіўныя паведамленні для доступу да прылад MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Змяніць сістэму пошуку</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Вядомыя сеткі</translation>
 <translation id="123578888592755962">Дыск запоўнены</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">Паказваць прапановы асабістых даных пры ўводзе</translation>
 <translation id="1239594683407221485">Глядзець змесціва прылады ў праграме "Файлы".</translation>
 <translation id="124116460088058876">Іншыя мовы</translation>
 <translation id="1241753985463165747">Прагляд і змяненне любых вашых даных на бягучым вэб-сайце (пры выкліку)</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Актывацыя SIM-карты ў мабільнай сетцы</translation>
 <translation id="1407489512183974736">Адцэнтравана і абрэзана</translation>
 <translation id="1408504635543854729">Глядзець змесціва прылады ў праграме "Файлы". Змесціва нельга мадыфікаваць: дазволы на яго абмежаваны адміністратарам.</translation>
+<translation id="1408980562518920698">Кіраваць асабістай інфармацыяй</translation>
 <translation id="1410197035576869800">Значок праграмы</translation>
 <translation id="1410616244180625362">І далей даваць <ph name="HOST" /> доступ да камеры</translation>
 <translation id="1414648216875402825">Вы абнаўляеце <ph name="PRODUCT_NAME" /> да нестабільнай версіі з функцыямі, якія яшчэ ў распрацоўцы. Могуць адбывацца збоі і нечаканыя памылкі. Будзьце асцярожнымі.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;Кансоль JavaScript</translation>
 <translation id="1587907146729660231">Дакраніцеся пальцам да кнопкі сілкавання</translation>
+<translation id="1588200577109872591">Разумны ўвод</translation>
 <translation id="1588438908519853928">Звычайны</translation>
 <translation id="158849752021629804">Патрабуецца хатняя сетка</translation>
 <translation id="1588870296199743671">Адкрыць спасылку з дапамогай...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Уваход з уліковага запісу</translation>
 <translation id="1880905663253319515">Выдаліць сертыфікат "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="1884013283844450420">Сетка <ph name="NETWORK_INDEX" /> з <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, падключыцца</translation>
+<translation id="1884705339276589024">Змяненне памеру дыска Linux</translation>
 <translation id="1886996562706621347">Дазволіць сайтам запытваць права быць стандартнымі апрацоўшчыкамі пратаколаў (рэкамендуецца)</translation>
 <translation id="1887442540531652736">Памылка ўваходу</translation>
 <translation id="1887597546629269384">Скажыце "Hey Google" яшчэ раз</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Вы пераходзіце на канал са старэйшай версіяй <ph name="PRODUCT_NAME" />. Змена канала адбудзецца, калі версія канала будзе адпавядаць версіі, усталяванай на вашай прыладзе.</translation>
 <translation id="197989455406964291">KDC не падтрымлівае шыфраванне гэтых тыпаў</translation>
 <translation id="1982354452682152483">Апісанне недаступнае.</translation>
+<translation id="1984417487208496350">Без абароны (не рэкамендуецца)</translation>
 <translation id="1987317783729300807">Уліковыя запісы</translation>
 <translation id="1989112275319619282">Агляд</translation>
 <translation id="1990512225220753005">Не паказваць ярлыкі на гэтай старонцы</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Каб аднавіць даныя ўліковага запісу, перайдзіце па спасылцы: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Налада бяспекі сістэмы</translation>
 <translation id="2091887806945687916">Гук</translation>
+<translation id="2096478741073211388">Прапановы асабістых даных дапамогуць хутчэй набіраць тэкст: пры ўводзе пэўных слоў вам будуць прапаноўвацца вашы імя, адрас або нумар тэлефона. Бачыць асабістыя персаналізаваныя прапановы для вашага ўліковага запісу можаце толькі вы.</translation>
 <translation id="2096715839409389970">Выдаліць староннія файлы cookie</translation>
 <translation id="2097372108957554726">Каб рэгістраваць новыя прылады, трэба ўвайсці ў Chrome</translation>
 <translation id="2099172618127234427">Вы ўключаеце функцыі адладкі Chrome OS. Будзе наладжаны дэман SSHD і дазволена загрузка з USB-дыскаў.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Перазагрузіць &amp;фрэйм</translation>
 <translation id="2114896190328250491">Фота ад аўтара <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Адкрыць у праграме <ph name="APP" /></translation>
+<translation id="2119461801241504254">"Бяспечны прагляд" уключаны і абараняе вас ад шкодных сайтаў і спамповак</translation>
 <translation id="2120297377148151361">Дзеянні і ўзаемадзеянні</translation>
 <translation id="2120639962942052471">Блакіроўка (<ph name="PERMISSION" />)</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Файлы cookie заблакіраваны}=1{Файлы cookie заблакіраваны, 1 выключэнне}one{Файлы cookie заблакіраваны, {COUNT} выключэнне}few{Файлы cookie заблакіраваны, {COUNT} выключэнні}many{Файлы cookie заблакіраваны, {COUNT} выключэнняў}other{Файлы cookie заблакіраваны, {COUNT} выключэння}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Закладкі дададзены</translation>
 <translation id="2343747224442182863">Перайсці на гэту ўкладку</translation>
 <translation id="2345723121311404059">1 старонка – на прынтар "<ph name="PRINTER_NAME" />"</translation>
-<translation id="2346953515226895098">Сэрвісы SODA</translation>
 <translation id="2347644257713614136">Выкарыстанне Hangouts і Cast for Education рэгулюецца Палітыкай прыватнасці Google.</translation>
 <translation id="2348176352564285430">Праграма: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Памылка загрузкі даных</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">Каб пацвердзіць скід, дакраніцеся да ключа бяспекі яшчэ раз. Уся захаваная на ключы бяспекі інфармацыя, у тым ліку яго PIN-код, будзе выдалена.</translation>
 <translation id="3518985090088779359">Прыняць і працягнуць</translation>
 <translation id="351952459507671940">Дадаць у новую групу</translation>
+<translation id="3521606918211282604">Змяніць памер дыска</translation>
 <translation id="3523642406908660543">Пытацца, калі сайт спрабуе атрымаць доступ да камп'ютара з дапамогай убудовы (рэкамендуецца)</translation>
 <translation id="3524965460886318643">Экспартаваць дзеянні</translation>
 <translation id="3526034519184079374">Не можа чытаць або змяняць даныя сайта</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Каб уключыць Smart Lock, увядзіце пароль. Наступны раз прылада <ph name="DEVICE_TYPE" /> будзе разблакіравана з дапамогай вашага тэлефона. Вы можаце выключыць Smart Lock у Наладах.</translation>
 <translation id="3630132874740063857">Ваш тэлефон</translation>
 <translation id="3630995161997703415">Дадайце гэты сайт на вашу паліцу, каб мець да яго доступ у любы час</translation>
+<translation id="3633309367764744750">Загадзя атрымлівае інфармацыю са старонак, у тым ліку з тых, якія вы яшчэ не наведалі. Калі вы дазволілі файлы cookie, яны таксама могуць быць атрыманы.</translation>
 <translation id="3634507049637220048">Сетка <ph name="NETWORK_INDEX" /> з <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, знаходзіцца пад кіраваннем адміністратара, падрабязныя звесткі</translation>
 <translation id="3635241501480133979">Гэтыя даныя парушаюць палітыку бяспекі вашай арганізацыі і таму не могуць быць перацягнуты.</translation>
 <translation id="3635353578505343390">Адправіць водгук у Google</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">Лічбавыя адбіткі на гэтым ключы бяспекі</translation>
 <translation id="3973660817924297510">Праверка пароляў (<ph name="CHECKED_PASSWORDS" /> з <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Памылка сувязі з серверам па ўказанай вобласці</translation>
-<translation id="3975884715086515476">Браўзеру <ph name="IDS_SHORT_PRODUCT_NAME" /> не ўдаецца праверыць паролі. Паўтарыце спробу пазней.</translation>
 <translation id="3976108569178263973">Няма даступных прынтараў.</translation>
 <translation id="397703832102027365">Завяршэнне...</translation>
 <translation id="3977886311744775419">Сетка гэтага тыпу не падтрымлівае спампоўку аўтаматычных абнаўленняў, але вы можаце праверыць наяўнасць абнаўленняў уручную.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">Пушок</translation>
 <translation id="4423376891418188461">Аднавіць налады</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ваш адміністратар патрабуе, каб вы змянілі пароль.</translation>
-<translation id="4426209360861763174">Браўзеру <ph name="IDS_SHORT_PRODUCT_NAME" /> не ўдаецца праверыць паролі. Паўтарыце спробу праз 24 гадзіны.</translation>
 <translation id="4429030830601238961">Гэтыя даныя парушаюць палітыку бяспекі вашай арганізацыі і таму не могуць быць устаўлены.</translation>
 <translation id="4430019312045809116">Гучнасць</translation>
 <translation id="4430369329743628066">Дададзена закладка</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">Ці запускаць аўтаматычна гэту праграму пры ўключэнні прылады?</translation>
 <translation id="4441147046941420429">Каб працягнуць, дастаньце ключ бяспекі з прылады, затым зноў устаўце і дакраніцеся да яго</translation>
 <translation id="444134486829715816">Разгарнуць...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> зможа праверыць паролі толькі пасля таго, як вы ўвойдзеце ва Уліковы запіс Google</translation>
 <translation id="4442424173763614572">Не ўдалося выканаць пошук DNS</translation>
 <translation id="4443536555189480885">&amp;Даведка</translation>
 <translation id="4444304522807523469">Доступ для сканераў дакументаў, падключаных праз USB або па лакальнай сетцы</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">Гэты код можна адсканіраваць з дапамогай праграмы сканіравання QR-кодаў на тэлефоне або некаторых праграм для камеры.</translation>
 <translation id="4477015793815781985">Дадайце Ctrl, Alt або клавішу ⌘</translation>
 <translation id="4478664379124702289">Захаваць &amp;спасылку як...</translation>
-<translation id="4478777936860197922">Няма захаваных пароляў. <ph name="IDS_SHORT_PRODUCT_NAME" /> можа правяраць толькі захаваныя паролі.</translation>
 <translation id="4479424953165245642">Кіраванне праграмамі-кіёскамі</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Ідзе наладжванне віртуальнай машыны. Гэта можа заняць некалькі хвілін.</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">Не ўсталёўваць</translation>
 <translation id="4850669014075537160">Прагортка</translation>
 <translation id="4850886885716139402">Праглядзець</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> адправіць вам апавяшчэнне, калі вы ўвойдзеце ва ўліковы запіс, выкарыстаўшы раскрыты пароль</translation>
 <translation id="4853020600495124913">Адкрыць у &amp;новым акне</translation>
 <translation id="4854317507773910281">Для ўхвалення выберыце бацькоўскі ўліковы запіс</translation>
 <translation id="485480310608090163">Іншыя налады і дазволы</translation>
@@ -3937,6 +3941,7 @@
 <translation id="6298962879096096191">Для ўсталявання праграм Android выкарыстоўвайце Google Play</translation>
 <translation id="630065524203833229">В&amp;ыйсці</translation>
 <translation id="6300718114348072351">Не ўдалося аўтаматычна наладзіць <ph name="PRINTER_NAME" />. Укажыце пашыраныя звесткі пра прынтар. <ph name="LINK_BEGIN" />Даведацца больш<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Прапановы асабістых даных</translation>
 <translation id="6305607932814307878">Глабальная палітыка:</translation>
 <translation id="6307990684951724544">Сістэма занятая</translation>
 <translation id="6308493641021088955">Уваход забяспечвае сэрвіс <ph name="EXTENSION_NAME" /></translation>
@@ -4015,6 +4020,7 @@
 <translation id="641081527798843608">Супадзенне суб'екта</translation>
 <translation id="6412673304250309937">Правярае, ці знаходзяцца URL-адрасы ў спісе небяспечных сайтаў, захаваным у Chrome. Пры спробе сайта выкрасці пароль або пры спампоўванні шкоднага файла браўзер Chrome можа таксама адпраўляць у Бяспечны прагляд URL-адрасы, уключаючы фрагменты змесціва старонкі.</translation>
 <translation id="6412931879992742813">Новае акно ў рэжыме інкогніта</translation>
+<translation id="6413591858632097328">Будуць выдалены файлы cookie і даныя, захаваныя сайтам <ph name="ORIGIN_NAME" />, а таксама ўсталяваныя ім праграмы.</translation>
 <translation id="641469293210305670">Усталяванне абнаўленняў і праграм</translation>
 <translation id="6414888972213066896">Вы спыталі бацьку ці маці, ці можна наведваць гэты сайт</translation>
 <translation id="6415900369006735853">Падключыцеся да інтэрнэту праз тэлефон</translation>
@@ -4825,7 +4831,6 @@
 <translation id="7530016656428373557">Індыкатар разрадкі ў ватах</translation>
 <translation id="7531779363494549572">Перайдзіце ў раздзел "Налады &gt; Праграмы і апавяшчэнні &gt; Апавяшчэнні".</translation>
 <translation id="7532009420053991888">Праграма <ph name="LINUX_APP_NAME" /> не адказвае. Каб закрыць яе, націсніце "Прымусова закрыць".</translation>
-<translation id="7536333565791380193">Пашыраныя налады бяспекі</translation>
 <translation id="7537451260744431038">Сайты не могуць выкарыстоўваць файлы cookie для паляпшэння сваёй функцыянальнасці – напрыклад, для захавання інфармацыі пра тое, што вы ўвайшлі ва ўліковы запіс, або каб запамінаць тавары ў кошыку</translation>
 <translation id="7539856059004947393">Ключ бяспекі Bluetooth</translation>
 <translation id="7540972813190816353">Адбылася памылка пры праверцы наяўнасці абнаўленняў: <ph name="ERROR" /></translation>
@@ -5066,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Заўвага:<ph name="END_BOLD" />  пасля запуску гэтага працэсу сістэма перазагрузіцца.</translation>
 <translation id="7828731929332799387">Будуць выдалены ўсе файлы cookie і даныя сайтаў, даступныя ў старонніх кантэкстах. Працягнуць?</translation>
 <translation id="7829298379596169484">Выкарыстоўваецца доступ да аўдыяўваходу</translation>
-<translation id="7829528495815477379">Браўзеру <ph name="IDS_SHORT_PRODUCT_NAME" /> не ўдаецца праверыць паролі. Паспрабуйце праверыць падключэнне да інтэрнэту.</translation>
 <translation id="7829877209233347340">Папрасіце кагосьці з бацькоў увайсці і дазволіць дадаць навучальны ўліковы запіс</translation>
 <translation id="7830594666202422257">Падключыць да Linux</translation>
 <translation id="7831491651892296503">Памылка наладжвання сеткі</translation>
@@ -5940,7 +5944,6 @@
 <translation id="8966870118594285808">Калі вы выпадкова закрылі ўкладку, адкрыйце яе зноў</translation>
 <translation id="8967866634928501045">Націсніце "Al+ Shift+A", каб паказаць</translation>
 <translation id="8968766641738584599">Захаваць картку</translation>
-<translation id="8971800409073702505">Браўзеру <ph name="IDS_SHORT_PRODUCT_NAME" /> не ўдаецца праверыць паролі. Паўтарыце спробу праз 24 гадзіны або <ph name="BEGIN_LINK" />праверце паролі ва Уліковым запісе Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Даведайцеся ў адміністратара сеткі, ці не блакіруе брандмаўэр спампоўкі з сервераў Google.</translation>
 <translation id="8973557916016709913">Выдаліць узровень маштабу дысплэя</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 978f020..1263cb7 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Име на отметката</translation>
 <translation id="1124772482545689468">Потребител</translation>
 <translation id="1125550662859510761">Разделителната способност е <ph name="WIDTH" /> x <ph name="HEIGHT" /> (стандартна)</translation>
+<translation id="1126809382673880764">Няма защита срещу опасни уебсайтове, изтеглени файлове и разширения. Пак ще получавате защита посредством Безопасно сърфиране в други услуги на Google, където функцията се поддържа – например Gmail и Търсене.</translation>
 <translation id="1128109161498068552">Да не се разрешава на сайтовете да използват специални системни съобщения за достъп до MIDI устройствата</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Редактиране на търсещата машина</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Известни мрежи</translation>
 <translation id="123578888592755962">Дискът е пълен</translation>
 <translation id="1238191093934674082">Отворена VPN</translation>
+<translation id="1239439601391236986">Показване на предложения за въвеждане на лична информация</translation>
 <translation id="1239594683407221485">Прегледайте съдържанието на устройството в приложението „Файлове“.</translation>
 <translation id="124116460088058876">Още езици</translation>
 <translation id="1241753985463165747">Четене и промяна на всичките ви данни в текущия уебсайт (при извикване)</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Активиране на мобилна мрежа</translation>
 <translation id="1407489512183974736">Центриране с подрязване</translation>
 <translation id="1408504635543854729">Разгледайте съдържанието на устройството в приложението Файлове. Съдържанието е ограничено от администратор и не може да се променя.</translation>
+<translation id="1408980562518920698">Управление на личната информация</translation>
 <translation id="1410197035576869800">Икона на приложението</translation>
 <translation id="1410616244180625362">Достъпът на <ph name="HOST" /> до камерата ви да продължава да е разрешен</translation>
 <translation id="1414648216875402825">Актуализирате до нестабилна версия на <ph name="PRODUCT_NAME" />, съдържаща функции, по които се работи. Ще има сривове и неочаквани програмни дефекти. Моля, действайте внимателно.</translation>
@@ -431,6 +434,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;Конзола на JavaScript</translation>
 <translation id="1587907146729660231">Докоснете бутона за захранване с пръста си</translation>
+<translation id="1588200577109872591">Интелигентно въвеждане</translation>
 <translation id="1588438908519853928">Нормално</translation>
 <translation id="158849752021629804">Необходима е собствена мрежа</translation>
 <translation id="1588870296199743671">Отваряне на връзката със...</translation>
@@ -666,6 +670,7 @@
 <translation id="1879000426787380528">Вход като</translation>
 <translation id="1880905663253319515">Да се изтрие ли сертификатът „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="1884013283844450420">Мрежа <ph name="NETWORK_INDEX" /> от <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, свързване</translation>
+<translation id="1884705339276589024">Преоразмеряване на диска на Linux</translation>
 <translation id="1886996562706621347">Разрешаване на питания от сайтове дали да са манипулаторите по подразбиране за протоколите (препоръчително)</translation>
 <translation id="1887442540531652736">Грешка при влизането</translation>
 <translation id="1887597546629269384">Кажете „Hey Google“ отново</translation>
@@ -735,6 +740,7 @@
 <translation id="1979280758666859181">Преминавате към канал с по-стара версия на <ph name="PRODUCT_NAME" />. Промяната на канала ще се приложи, когато версията в него вече съответства на инсталираната понастоящем на устройството ви.</translation>
 <translation id="197989455406964291">Типът шифроване не се поддържа от KDC</translation>
 <translation id="1982354452682152483">Няма налично описание.</translation>
+<translation id="1984417487208496350">Без защита (не се препоръчва)</translation>
 <translation id="1987317783729300807">Профили</translation>
 <translation id="1989112275319619282">Сърфиране</translation>
 <translation id="1990512225220753005">Преките пътища да не се показват на тази страница</translation>
@@ -804,6 +810,7 @@
 <translation id="2090165459409185032">За да възстановите информацията за профила си, отворете google.bg/accounts/recovery</translation>
 <translation id="2090876986345970080">Системни защитни настройки</translation>
 <translation id="2091887806945687916">Звук</translation>
+<translation id="2096478741073211388">Предложенията за лична информация ви помагат да пишете по-бързо чрез извеждане на името, адреса или телефонния ви номер при въвеждане на конкретни думи. Само вие виждате частните персонализирани предложения за профила ви.</translation>
 <translation id="2096715839409389970">Изчистване на „бисквитките“ на трети страни</translation>
 <translation id="2097372108957554726">За да регистрирате нови устройства, трябва да влезете в Chrome</translation>
 <translation id="2099172618127234427">Активирате функциите за отстраняване на грешки в Chrome OS, които ще настроят демон sshd и ще позволят стартирането от USB дискове.</translation>
@@ -820,6 +827,7 @@
 <translation id="2114326799768592691">Презареждане на рамката</translation>
 <translation id="2114896190328250491">Снимка от <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Отваряне в/ъв <ph name="APP" /></translation>
+<translation id="2119461801241504254">Функцията „Безопасно сърфиране“ е включена и ви предпазва от злонамерени сайтове и изтегляния</translation>
 <translation id="2120297377148151361">Активност и взаимодействия</translation>
 <translation id="2120639962942052471">„<ph name="PERMISSION" />“ е блокирано</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{„Бисквитките“ са блокирани}=1{„Бисквитките“ са блокирани – 1 изключение}other{„Бисквитките“ са блокирани – {COUNT} изключения}}</translation>
@@ -1000,7 +1008,6 @@
 <translation id="2342740338116612727">Отметките бяха добавени</translation>
 <translation id="2343747224442182863">Фокус върху този раздел</translation>
 <translation id="2345723121311404059">1 страница до „<ph name="PRINTER_NAME" />“</translation>
-<translation id="2346953515226895098">Услуга SODA</translation>
 <translation id="2347644257713614136">Използването на Hangouts и Cast for Education се урежда от Декларацията за поверителност на Google.</translation>
 <translation id="2348176352564285430">Приложение: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Грешка при зареждането на данните</translation>
@@ -1888,6 +1895,7 @@
 <translation id="3515983984924808886">Докоснете отново ключа си за сигурност, за да потвърдите нулирането. Цялата съхранявана в ключа информация, включително ПИН кодът му, ще бъде изтрита.</translation>
 <translation id="3518985090088779359">Приемам и напред</translation>
 <translation id="351952459507671940">Добавяне към нова група</translation>
+<translation id="3521606918211282604">Промяна на размера на диска</translation>
 <translation id="3523642406908660543">Извеждане на запитване, когато сайт иска да използва приставка за достъп до компютъра ви (препоръчително)</translation>
 <translation id="3524965460886318643">Експортиране на активностите</translation>
 <translation id="3526034519184079374">Данните на сайта не могат да бъдат прочетени или променени</translation>
@@ -1975,6 +1983,7 @@
 <translation id="3629631988386925734">Въведете паролата си, за да активирате Smart Lock. Следващия път телефонът ви ще отключи устройството ви <ph name="DEVICE_TYPE" />. Можете да изключите Smart Lock от настройките.</translation>
 <translation id="3630132874740063857">Вашият телефон</translation>
 <translation id="3630995161997703415">Добавете този сайт към лавицата си, за да го използвате по всяко време</translation>
+<translation id="3633309367764744750">Предварително се извлича информация от страниците, включително от тези, които още не сте посетили. Тези данни може да включват „бисквитките“, ако сте ги разрешили.</translation>
 <translation id="3634507049637220048">Мрежа <ph name="NETWORK_INDEX" /> от <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, управлява се от администратора ви, подробности</translation>
 <translation id="3635241501480133979">Тези данни нарушават правилата за сигурност на организацията ви и не могат да бъдат преместени.</translation>
 <translation id="3635353578505343390">Изпращане на отзиви до Google</translation>
@@ -2275,7 +2284,6 @@
 <translation id="3971764089670057203">Отпечатъци, регистрирани на този ключ за сигурност</translation>
 <translation id="3973660817924297510">Паролите се проверяват (<ph name="CHECKED_PASSWORDS" /> от <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Свързването със сървъра за областта не бе успешно</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да провери паролите ви. Опитайте отново по-късно.</translation>
 <translation id="3976108569178263973">Няма принтери.</translation>
 <translation id="397703832102027365">Довършва се...</translation>
 <translation id="3977886311744775419">Автоматичните актуализации не се изтеглят при този тип мрежа, но можете ръчно да проверявате за актуализации.</translation>
@@ -2576,7 +2584,6 @@
 <translation id="4421932782753506458">Пухчо</translation>
 <translation id="4423376891418188461">Възстановяване на настройките</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, администраторът ви изисква да промените паролата си.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да провери паролите ви. Опитайте отново след 24 часа.</translation>
 <translation id="4429030830601238961">Тези данни нарушават правилата за сигурност на организацията ви и не могат да бъдат поставени.</translation>
 <translation id="4430019312045809116">Звук</translation>
 <translation id="4430369329743628066">Отметката бе добавена</translation>
@@ -2589,7 +2596,6 @@
 <translation id="4441124369922430666">Искате ли това приложение да стартира автоматично при включването на компютъра?</translation>
 <translation id="4441147046941420429">За да продължите, премахнете ключа за сигурност от устройството си, след което го поставете отново и го докоснете</translation>
 <translation id="444134486829715816">Разгъване...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> може да проверява паролите ви, когато влизате с профила си в Google</translation>
 <translation id="4442424173763614572">Търсенето в DNS не бе успешно</translation>
 <translation id="4443536555189480885">&amp;Помощ</translation>
 <translation id="4444304522807523469">Достъп до скенери на документи, свързани чрез USB или с локалната мрежа</translation>
@@ -2616,7 +2622,6 @@
 <translation id="4476659815936224889">За да сканирате този код, можете да използвате приложение за сканиране на QR кодове на телефона си или някои приложения за камера.</translation>
 <translation id="4477015793815781985">Добавете Ctrl, Alt или ⌘</translation>
 <translation id="4478664379124702289">Запазване на вр&amp;ъзката като...</translation>
-<translation id="4478777936860197922">Няма запазени пароли. <ph name="IDS_SHORT_PRODUCT_NAME" /> може да проверява паролите ви, когато ги запазите.</translation>
 <translation id="4479424953165245642">Управление на павилионните приложения</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Виртуалната машина се конфигурира. Това може да отнеме няколко минути.</translation>
@@ -2862,7 +2867,6 @@
 <translation id="4849517651082200438">Да не се инсталира</translation>
 <translation id="4850669014075537160">Превъртане</translation>
 <translation id="4850886885716139402">Изглед</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> ще ви уведоми, когато влизате в профил с компрометирана парола</translation>
 <translation id="4853020600495124913">Отваряне в &amp;нов прозорец</translation>
 <translation id="4854317507773910281">Изберете профил на родител за одобрение</translation>
 <translation id="485480310608090163">Още настройки и разрешения</translation>
@@ -3937,6 +3941,7 @@
 <translation id="6298962879096096191">Използване на Google Play за инсталиране на приложения за Android</translation>
 <translation id="630065524203833229">Из&amp;ход</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> не се конфигурира автоматично. Моля, посочете разширени подробности за принтера. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Предложения за лична информация</translation>
 <translation id="6305607932814307878">Глобално правило:</translation>
 <translation id="6307990684951724544">Системата е заета</translation>
 <translation id="6308493641021088955">Влизането се осигурява от <ph name="EXTENSION_NAME" /></translation>
@@ -4015,6 +4020,7 @@
 <translation id="641081527798843608">Съвпадение на субекта</translation>
 <translation id="6412673304250309937">Проверка на URL адресите в съхраняван в Chrome списък с опасни сайтове. Ако сайт се опита да открадне паролата ви или изтеглите опасен файл от сайт, Chrome може също така да изпрати до „Безопасно сърфиране“ URL адресите и част от съдържанието на страницата.</translation>
 <translation id="6412931879992742813">Нов прозорец в режим „инкогнито“</translation>
+<translation id="6413591858632097328">Всички данни и „бисквитки“, съхранявани от <ph name="ORIGIN_NAME" /> и инсталираните приложения, ще бъдат изчистени.</translation>
 <translation id="641469293210305670">Инсталиране на актуализации и приложения</translation>
 <translation id="6414888972213066896">Попитахте родителя си дали може да посетите този сайт</translation>
 <translation id="6415900369006735853">Връзка с интернет през телефона ви</translation>
@@ -4825,7 +4831,6 @@
 <translation id="7530016656428373557">Скорост на разреждане във ватове</translation>
 <translation id="7531779363494549572">Отворете Настройки &gt; „Приложения и известия“ &gt; „Известия“.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> не реагира. Изберете „Принудително затваряне“, за да затворите приложението.</translation>
-<translation id="7536333565791380193">Разширени настройки за сигурност</translation>
 <translation id="7537451260744431038">Сайтовете не могат да използват „бисквитки“ с цел по-добро сърфиране, например за да оставате в профила си или за да запомнят артикулите в пазарската ви кошница</translation>
 <translation id="7539856059004947393">Ключ за сигурност с Bluetooth</translation>
 <translation id="7540972813190816353">При проверката за актуализации възникна грешка: <ph name="ERROR" /></translation>
@@ -5066,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Забележка:<ph name="END_BOLD" />  Системата ще се рестартира по време на процеса.</translation>
 <translation id="7828731929332799387">Така ще бъдат изтрити всички „бисквитки“ и данни за сайтове, налични в контексти на трети страни. Искате ли да продължите?</translation>
 <translation id="7829298379596169484">Осъществява се достъп до аудиовхода</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да провери паролите ви. Проверете връзката си с интернет.</translation>
 <translation id="7829877209233347340">Поискайте от родител да влезе в профила си, за да разреши добавянето на училищен профил</translation>
 <translation id="7830594666202422257">Свързване с Linux</translation>
 <translation id="7831491651892296503">Грешка при конфигурирането на мрежата</translation>
@@ -5941,7 +5945,6 @@
 <translation id="8966870118594285808">Повторно отваряне на раздел, ако случайно сте го затворили</translation>
 <translation id="8967866634928501045">За показване натиснете Alt Shift A</translation>
 <translation id="8968766641738584599">Запазване на картата</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да провери паролите ви. Опитайте отново след 24 часа или <ph name="BEGIN_LINK" />ги проверете в профила си в Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Моля, обърнете се към системния си администратор, за да се уверите, че защитната стена не блокира изтеглянията от сървърите на Google.</translation>
 <translation id="8973557916016709913">Премахване на мащаба</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 8073615..b959acf 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -201,7 +201,7 @@
 <translation id="1259152067760398571">গতকাল নিরাপত্তা সংক্রান্ত পরীক্ষা চালানো হয়েছে</translation>
 <translation id="1260451001046713751"><ph name="HOST" /> থেকে সবসময় পপ-আপ এবং রিডাইরেক্টের অনুমতি দিন</translation>
 <translation id="126156426083987769">ডেমো মোড ডিভাইস লাইসেন্স নিয়ে সমস্যা হয়েছে।</translation>
-<translation id="1263490604593716556">এই অ্যাকাউন্ট <ph name="FIRST_PARENT_EMAIL" /> এবং <ph name="SECOND_PARENT_EMAIL" /> ম্যানেজ করছেন। এই ডিভাইসের প্রাইমারি অ্যাকাউন্ট থেকে সাইন-আউট করতে, স্ক্রিনে 'সময়' আইকনে ক্লিক করুন। যে মেনু দেখা যাচ্ছে, সেখানে "সাইন-আউট" বিকল্পে ক্লিক করুন।</translation>
+<translation id="1263490604593716556">এই অ্যাকাউন্ট <ph name="FIRST_PARENT_EMAIL" /> এবং <ph name="SECOND_PARENT_EMAIL" /> ম্যানেজ করছে। এই ডিভাইসের প্রাইমারি অ্যাকাউন্ট থেকে সাইন-আউট করতে, স্ক্রিনে 'সময়' আইকনে ক্লিক করুন। স্ক্রিনে দেখানো মেনুটিতে থাকা "সাইন-আউট" বিকল্পে ক্লিক করুন।</translation>
 <translation id="126710816202626562">অনুবাদের ভাষা:</translation>
 <translation id="126768002343224824">১৬x</translation>
 <translation id="1272079795634619415">বন্ধ</translation>
@@ -872,7 +872,7 @@
 <translation id="2172784515318616985">এগিয়ে যান</translation>
 <translation id="2173302385160625112">আপনার ইন্টারনেট কানেকশন ঠিক আছে কিনা ভাল করে দেখে নিন</translation>
 <translation id="2173801458090845390">এই ডিভাইসে অনুরোধ করার আইডি যোগ করুন</translation>
-<translation id="2174948148799307353">এই অ্যাকাউন্ট <ph name="PARENT_EMAIL" /> ম্যানেজ করছেন। এই ডিভাইসের প্রাইমারি অ্যাকাউন্ট থেকে সাইন-আউট করতে, স্ক্রিনে 'সময়' আইকনে ক্লিক করুন। যে মেনু দেখা যাচ্ছে, সেখানে "সাইন-আউট" বিকল্পে ক্লিক করুন।</translation>
+<translation id="2174948148799307353">এই অ্যাকাউন্ট <ph name="PARENT_EMAIL" /> ম্যানেজ করছে। এই ডিভাইসের প্রাইমারি অ্যাকাউন্ট থেকে সাইন-আউট করতে, স্ক্রিনে 'সময়' আইকনে ক্লিক করুন। স্ক্রিনে দেখানো মেনুটিতে থাকা "সাইন-আউট" বিকল্পে ক্লিক করুন।</translation>
 <translation id="2175607476662778685">দ্রুত প্রবর্তন দণ্ড</translation>
 <translation id="217576141146192373">প্রিন্টার যোগ করা যায়নি। প্রিন্টারের কনফিগারেশন চেক করে আবার চেষ্টা করুন।</translation>
 <translation id="2177950615300672361">ছদ্মবেশী ট্যাব: <ph name="TAB_NAME" /></translation>
@@ -1003,7 +1003,6 @@
 <translation id="2342740338116612727">বুকমার্ক যোগ করা হয়েছে</translation>
 <translation id="2343747224442182863">এই ট্যাবে ফোকাস করুন</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> এ ১ পাতা</translation>
-<translation id="2346953515226895098">SODA পরিষেবা</translation>
 <translation id="2347644257713614136">Hangouts এবং শিক্ষার জন্য Cast-এর ব্যবহার Google-এর গোপনীয়তা নীতি দ্বারা পরিচালিত হয়।</translation>
 <translation id="2348176352564285430">অ্যাপ্লিকেশান: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ডেটা লোড হওয়ার সময় কোনও সমস্যা হয়েছে</translation>
@@ -1850,7 +1849,7 @@
 <translation id="3468999815377931311">Android ফোন</translation>
 <translation id="3470442499439619530">এই ব্যবহারকারীকে সরান</translation>
 <translation id="3471876058939596279">ভিডিওর জন্য একসাথে HDMI এবং USB টাইপ-সি পোর্ট ব্যবহার করা যাবে না। অন্য ভিডিও পোর্ট ব্যবহার করুন।</translation>
-<translation id="3473241910002674503">ট্যাবলেট মোডে বোতাম ব্যবহার করে হোম পেজে যান, ফিরে আসুন এবং কোনও অ্যাপ থেকে অন্য অ্যাপে যান।</translation>
+<translation id="3473241910002674503">ট্যাবলেট মোডে বোতাম ব্যবহার করে হোম পেজে যান, ফিরে আসুন এবং একটি অ্যাপ থেকে আরেকটি অ্যাপে যান।</translation>
 <translation id="3473479545200714844">স্ক্রিন ম্যাগনিফায়ার</translation>
 <translation id="3475843873335999118">দুঃখিত, আপনার আঙ্গুলের ছাপ এখনো শনাক্ত করা যায়নি। অনুগ্রহ করে আপনার পাসওয়ার্ড লিখুন।</translation>
 <translation id="3476303763173086583">ব্যবহার এবং ডায়াগনস্টিক ডেটা পাঠান। Google-এ নিজে থেকে ডায়াগনস্টিক, ডিভাইস এবং অ্যাপ ব্যবহারের ডেটা পাঠিয়ে, আপনার সন্তানের Android অভিজ্ঞতাকে উন্নত করতে সাহায্য করুন। এটি আপনার সন্তানকে শনাক্ত করতে ব্যবহার করা হবে না এবং সিস্টেম ও অ্যাপের স্থিতিশীলতা এবং অন্যান্য উন্নতিতে সাহায্য করবে। ব্যবহারকারীদের কিছু সম্মিলিত ডেটা Google অ্যাপ এবং Android ডেভেলপারদের মতো পার্টনারদের কাজে লাগবে। এই <ph name="BEGIN_LINK1" />সেটিং<ph name="END_LINK1" /> মালিকের নিয়ন্ত্রণে রয়েছে। এই ডিভাইসের জন্য Google-কে ডায়গনস্টিক এবং ব্যবহারের ডেটা পাঠানোর বিষয়টি মালিক বেছে নিতে পারেন। অতিরিক্ত ওয়েব ও অ্যাপ অ্যাক্টিভিটি সেটিংটি আপনার সন্তানের ডিভাইসের জন্য চালু করা থাকলে, এই ডেটা তাদের Google অ্যাকাউন্টে সেভ করা হতে পারে। <ph name="BEGIN_LINK2" />আরও জানুন<ph name="END_LINK2" /></translation>
@@ -2274,7 +2273,6 @@
 <translation id="3971764089670057203">এই নিরাপত্তা কীতে এনরোল করা ফিঙ্গারপ্রিন্ট</translation>
 <translation id="3973660817924297510">(<ph name="TOTAL_PASSWORDS" />টির মধ্যে <ph name="CHECKED_PASSWORDS" />টি) পাসওয়ার্ড চেক করা হচ্ছে…</translation>
 <translation id="3975565978598857337">রিলমের জন্য সার্ভারের সাথে কানেক্ট করা যায়নি</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> আপনার পাসওয়ার্ড চেক করতে পারছে না। আবার চেষ্টা করুন।</translation>
 <translation id="3976108569178263973">কোনও প্রিন্টার উপলভ্য নেই।</translation>
 <translation id="397703832102027365">চূড়ান্ত হচ্ছে...</translation>
 <translation id="3977886311744775419">এই ধরনের নেটওয়ার্কে অটোমেটিক আপডেট ডাউনলোড হয় না, কিন্তু আপনি নিজে কোনও আপডেট আছে কিনা তা দেখে নিতে পারেন।</translation>
@@ -2338,7 +2336,7 @@
 <translation id="4068506536726151626">এই পৃষ্ঠাতে নিম্নলিখিত সাইটগুলি থেকে এমন উপাদান রয়েছে যা আপনার লোকেশন নির্ধারণ করে:</translation>
 <translation id="4068776064906523561">সংরক্ষিত আঙ্গুলের ছাপগুলি</translation>
 <translation id="407173827865827707">ক্লিক করা হলে</translation>
-<translation id="4073520450811433493">সেটিংস সিঙ্ক</translation>
+<translation id="4073520450811433493">সেটিংস সিঙ্ক করা</translation>
 <translation id="4074900173531346617">ইমেল স্বাক্ষরকারী সার্টিফিকেট</translation>
 <translation id="407520071244661467">স্কেল</translation>
 <translation id="4075639477629295004"><ph name="FILE_NAME" /> কে কাস্ট করা যায়নি।</translation>
@@ -2575,7 +2573,6 @@
 <translation id="4421932782753506458">ফুঁয়োফুঁয়ো</translation>
 <translation id="4423376891418188461">সেটিংস পুনরুদ্ধার করুন</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, আপনার প্রশাসক চায় যে আপনি আপনার পাসওয়ার্ড পরিবর্তন করুন।</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> আপনার পাসওয়ার্ড চেক করতে পারছে না। ২৪ ঘণ্টা পরে আবার চেষ্টা করুন।</translation>
 <translation id="4429030830601238961">এই ডেটা আপনার সংস্থার নিরাপত্তার নীতি লঙ্ঘন করেছে, তাই এটি এখানে পেস্ট করা যাবে না।</translation>
 <translation id="4430019312045809116">ভলিউম</translation>
 <translation id="4430369329743628066">বুকমার্ক যুক্ত হয়েছে</translation>
@@ -2588,7 +2585,6 @@
 <translation id="4441124369922430666">আপনি কি মেশিন চালু হওয়ার সময় স্বয়ংক্রিয়ভাবে এই অ্যাপ্লিকেশানটিকে চালু করতে চান?</translation>
 <translation id="4441147046941420429">চালিয়ে যেতে, আপনার ডিভাইস থেকে নিরাপত্তা কী সরিয়ে দিন, তারপর আবার ইনসার্ট করে টাচ করুন</translation>
 <translation id="444134486829715816">প্রসারিত করুন...</translation>
-<translation id="4442329324652245220">আপনি Google অ্যাকাউন্ট দিয়ে সাইন-ইন করলে <ph name="IDS_SHORT_PRODUCT_NAME" /> আপনার পাসওয়ার্ড চেক করতে পারবে</translation>
 <translation id="4442424173763614572">ডিএনএস খোঁজ ব্যর্থ হয়েছে</translation>
 <translation id="4443536555189480885">&amp;Help</translation>
 <translation id="4444304522807523469">USB বা স্থানীয় নেটওয়ার্কের মাধ্যমে সংযুক্ত দস্তাবেজ স্ক্যানার অ্যাক্সেস করে</translation>
@@ -2615,7 +2611,6 @@
 <translation id="4476659815936224889">এই কোড স্ক্যান করতে আপনার ফোনে QR স্ক্যানার অ্যাপ অথবা কিছু ক্যামেরা অ্যাপ ব্যবহার করতে পারেন।</translation>
 <translation id="4477015793815781985">Ctrl, Alt অথবা ⌘ ব্যবহার করতে হবে</translation>
 <translation id="4478664379124702289">লি&amp;ঙ্ক সেভ করুন...</translation>
-<translation id="4478777936860197922">কোনও পাসওয়ার্ড সেভ করা নেই। আপনি পাসওয়ার্ড সেভ করলে <ph name="IDS_SHORT_PRODUCT_NAME" /> সেটি চেক করতে পারবে।</translation>
 <translation id="4479424953165245642">kiosk অ্যাপ্লিকেশানগুলি পরিচালনা করুন</translation>
 <translation id="4479639480957787382">ইথারনেট</translation>
 <translation id="4479877282574735775">ভার্চুয়াল মেশিন কনফিগার করা হচ্ছে। এর জন্য কয়েক মিনিট সময় লাগতে পারে।</translation>
@@ -2861,7 +2856,6 @@
 <translation id="4849517651082200438">ইনস্টল করবেন না</translation>
 <translation id="4850669014075537160">স্ক্রোলিং</translation>
 <translation id="4850886885716139402">দেখুন</translation>
-<translation id="485197095346966382">কোনও চুরি যাওয়া পাসওয়ার্ড দিয়ে আপনি সাইন-ইন করলে <ph name="IDS_SHORT_PRODUCT_NAME" /> আপনাকে সেই বিষয়ে জানাবে</translation>
 <translation id="4853020600495124913">&amp;নতুন উইন্ডোতে খুলুন</translation>
 <translation id="4854317507773910281">অনুমোদন করানোর জন্য অভিভাবকের অ্যাকাউন্ট বেছে নিন</translation>
 <translation id="485480310608090163">আরও সেটিংস এবং অনুমতি</translation>
@@ -4825,7 +4819,6 @@
 <translation id="7530016656428373557">ওয়াটে ডিসচার্জের হার</translation>
 <translation id="7531779363494549572">সেটিংস &gt; অ্যাপ এবং বিজ্ঞপ্তি &gt; বিজ্ঞপ্তিতে যান।</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> উত্তর দিচ্ছে না। অ্যাপটি বন্ধ করতে "জোর করে বন্ধ করুন" বিকল্পটি বেছে নিন।</translation>
-<translation id="7536333565791380193">উন্নত সুরক্ষা</translation>
 <translation id="7537451260744431038">আপনার শপিং কার্টে বেছে নেওয়া আইটেমগুলি মনে রাখা বা সাইন-ইন সংক্রান্ত তথ্য সেভ করার মতো ব্রাউজিং অভিজ্ঞতা আরও ভাল করার জন্য সাইটগুলি কুকি ব্যবহার করতে পারবে না</translation>
 <translation id="7539856059004947393">ব্লুটুথ নিরাপত্তা কী</translation>
 <translation id="7540972813190816353">আপডেট পরীক্ষা করার সময় একটি ত্রুটি হয়েছে: <ph name="ERROR" /></translation>
@@ -4964,7 +4957,7 @@
 <translation id="7716781361494605745">Netscape শংসাপত্র কর্তৃপক্ষ নীতি URL</translation>
 <translation id="7717014941119698257">ডাউনলোড হচ্ছে: <ph name="STATUS" /></translation>
 <translation id="7717845620320228976">আপডেটগুলির জন্য চেক করুন</translation>
-<translation id="7719070594859855691">ক্যামেরায় অ্যাক্সেস দিন</translation>
+<translation id="7719070594859855691">ক্যামেরা অ্যাক্সেস করার অনুমতি দিন</translation>
 <translation id="7719367874908701697">পৃষ্ঠা জুম</translation>
 <translation id="7721179060400456005">উইন্ডোগুলিকে স্ক্রিন জুড়ে দেখানোর অনুমতি দিন।</translation>
 <translation id="7722040605881499779">আপডেটের জন্য প্রয়োজন: <ph name="NECESSARY_SPACE" /></translation>
@@ -5065,7 +5058,6 @@
     <ph name="BEGIN_BOLD" />দ্রষ্টব্য:<ph name="END_BOLD" />  এটি করলে সিস্টেম রিবুট করা হবে।</translation>
 <translation id="7828731929332799387">এটি থার্ড-পার্টি সম্পর্কিত সব কুকিজ এবং সাইট ডেটা মুছে দেবে। আপনি কি চালিয়ে যেতে চান?</translation>
 <translation id="7829298379596169484">অডিও ইনপুট অ্যাক্সেস করা হচ্ছে</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> আপনার পাসওয়ার্ড চেক করতে পারছে না। আপনার ইন্টারনেট কানেকশন চেক করে নিন।</translation>
 <translation id="7829877209233347340">স্কুল অ্যাকাউন্ট যোগ করতে অভিভাবককে সাইন-ইন করে অনুমতি দিতে বলুন</translation>
 <translation id="7830594666202422257">Linux-এ কানেক্ট করুন</translation>
 <translation id="7831491651892296503">নেটওয়ার্ক কনফিগার করার সময় ত্রুটি</translation>
@@ -5283,7 +5275,7 @@
 <translation id="8107015733319732394">আপনার <ph name="DEVICE_TYPE" /> এ Google Play স্টোর ইনস্টল করা হচ্ছে। এতে কয়েক মিনিট সময় লাগতে পারে।</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{কোনও থার্ড-পার্টি কুকি নেই}=1{১টি থার্ড-পার্টি কুকি ব্লক করা হয়েছে}one{#টি থার্ড-পার্টি কুকি ব্লক করা হয়েছে}other{#টি থার্ড-পার্টি কুকি ব্লক করা হয়েছে}}</translation>
 <translation id="810875025413331850">কাছাকাছি কোনও ডিভাইস পাওয়া যায়নি।</translation>
-<translation id="8114199541033039755">ট্যাবলেট মোডে বোতাম ব্যবহার করে হোম পেজে যান, ফিরে আসুন এবং কোনও অ্যাপ থেকে অন্য অ্যাপে যান। ChromeVox বা অটোমেটিক ক্লিক করার ফিচার চালু থাকলে এই বোতাম কাজ করা শুরু করে।</translation>
+<translation id="8114199541033039755">ট্যাবলেট মোডে বোতাম ব্যবহার করে হোম পেজে যান, ফিরে আসুন এবং একটি অ্যাপ থেকে আরেকটি অ্যাপে যান। ChromeVox বা অটোমেটিক ক্লিক করার ফিচার চালু থাকলে এই বোতাম কাজ করা শুরু করে।</translation>
 <translation id="8114875720387900039">হরিজন্টাল স্প্লিট করুন</translation>
 <translation id="8116972784401310538">&amp;বুকমার্ক পরিচালক</translation>
 <translation id="8117620576188476503">স্টেটাস ট্রে থেকে সংযোগ, আপডেট এবং সেটিংস পরিচালনা করুন। কীবোর্ডের সাহায্যে এখানে পেতে Alt + Shift + S বোতামটি টিপুন।</translation>
@@ -5574,7 +5566,7 @@
 <translation id="851263357009351303">ছবিগুলি দেখানোর জন্য সর্বদা <ph name="HOST" />-কে অনুমতি দিন </translation>
 <translation id="8513108775083588393">নিজে থেকে ঘুরবে</translation>
 <translation id="8514746246728959655">অন্য একটি নিরাপত্তা কী ব্যবহার করে দেখুন</translation>
-<translation id="851960115758509829">আপনার Google অ্যাকাউন্ট দিয়ে সাইন-ইন করা সব Chrome OS ডিভাইসে আপনার অ্যাপ, সেটিংস এবং অন্য কাস্টমাইজেশনগুলি সিঙ্ক হয়ে যাবে।</translation>
+<translation id="851960115758509829">আপনার Google অ্যাকাউন্ট দিয়ে সাইন-ইন করা সব Chrome OS ডিভাইসে আপনার অ্যাপ, সেটিংস এবং অন্যান্য কাস্টমাইজেশন সিঙ্ক হয়ে যাবে।</translation>
 <translation id="8521475323816527629">আপনার অ্যাপগুলি দ্রুত চালু করুন</translation>
 <translation id="8523493869875972733">পরিবর্তনগুলি সেভ করুন</translation>
 <translation id="8523849605371521713">নীতির মাধ্যমে যোগ করা হয়েছে</translation>
@@ -5939,7 +5931,6 @@
 <translation id="8966870118594285808">ভুল করে কোন ট্যাব বন্ধ করে থাকলে সেটি আবার খুলুন</translation>
 <translation id="8967866634928501045">দেখতে Alt Shift A টিপুন</translation>
 <translation id="8968766641738584599">কার্ড সেভ করুন</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> আপনার পাসওয়ার্ড চেক করতে পারছে না। ২৪ ঘণ্টা পরে আবার চেষ্টা করুন বা <ph name="BEGIN_LINK" />আপনার Google অ্যাকাউন্টে পাসওয়ার্ড চেক করুন<ph name="END_LINK" />।</translation>
 <translation id="89720367119469899">অব্যাহতি</translation>
 <translation id="8972513834460200407">Google সার্ভারগুলি থেকে ডাউনলোডগুলিকে ফায়ারওয়াল ব্লক করছে না তা নিশ্চিত করতে অনুগ্রহ করে আপনার নেটওয়ার্ক অ্যাডমিনিস্ট্রেটরের মাধ্যমে পরীক্ষা করুন৷</translation>
 <translation id="8973557916016709913">জুম লেভেল সরান</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 495abad..7c10384 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Dodana je oznaka</translation>
 <translation id="2343747224442182863">Fokusiraj ovu stranicu</translation>
 <translation id="2345723121311404059">1 stranica na štampaču <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Usluga SODA</translation>
 <translation id="2347644257713614136">Korištenje aplikacija Hangouts i Cast for Education podliježe Googleovim Pravilima privatnosti.</translation>
 <translation id="2348176352564285430">Aplikacija: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Greška prilikom učitavanja podataka</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Otisci prsta na ovom sigurnosnom ključu</translation>
 <translation id="3973660817924297510">Provjeravanje lozinki (<ph name="CHECKED_PASSWORDS" /> od <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Povezivanje servera za okruženje nije uspjelo</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može provjeravati vaše lozinke. Pokušajte ponovo kasnije.</translation>
 <translation id="3976108569178263973">Nema dostupnih štampača.</translation>
 <translation id="397703832102027365">Završavanje...</translation>
 <translation id="3977886311744775419">Automatska ažuriranja se ne preuzimaju na ovoj vrsti mreže, ali možete ručno provjeriti ima li ažuriranja.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Fluffy</translation>
 <translation id="4423376891418188461">Vrati postavke</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, vaš administrator traži da promijenite svoju lozinku.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može provjeravati vaše lozinke. Pokušajte ponovo za 24 sata.</translation>
 <translation id="4429030830601238961">Ovi podaci krše sigurnosna pravila vaše organizacije te ih nije moguće zalijepiti.</translation>
 <translation id="4430019312045809116">Jačina zvuka</translation>
 <translation id="4430369329743628066">Oznaka je dodana</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Želite li automatski pokrenuti ovu aplikaciju prilikom uključivanja uređaja?</translation>
 <translation id="4441147046941420429">Da nastavite, uklonite sigurnosni ključ iz uređaja, a zatim ga ponovo umetnite i dodirnite</translation>
 <translation id="444134486829715816">Proširi...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> može provjeravati vaše lozinke kada se prijavite pomoću Google računa</translation>
 <translation id="4442424173763614572">Traženje DNS-a nije uspjelo</translation>
 <translation id="4443536555189480885">&amp;Pomoć</translation>
 <translation id="4444304522807523469">Pristupi skenerima dokumenata spojenim putem USB-a ili lokalne mreže</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Da skenirate ovaj kôd, možete koristiti aplikaciju za skeniranje QR kodova na telefonu ili neke aplikacije s kamerom.</translation>
 <translation id="4477015793815781985">Uključite Ctrl, Alt, ili ⌘</translation>
 <translation id="4478664379124702289">Sačuvaj lin&amp;k kao...</translation>
-<translation id="4478777936860197922">Nema sačuvanih lozinki. <ph name="IDS_SHORT_PRODUCT_NAME" /> može provjeravati vaše lozinke kada ih sačuvate.</translation>
 <translation id="4479424953165245642">Upravljaj aplikacijama za kiosk</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Konfiguriranje virtualne mašine. Ovo može potrajati nekoliko minuta.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Ne instaliraj</translation>
 <translation id="4850669014075537160">Klizanje</translation>
 <translation id="4850886885716139402">Prikaz</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> će vas obavijestiti kada se prijavite s ugroženom lozinkom</translation>
 <translation id="4853020600495124913">Otvori u &amp;novom prozoru</translation>
 <translation id="4854317507773910281">Odaberi roditeljski račun za odobrenje</translation>
 <translation id="485480310608090163">Više postavki i odobrenja</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Stopa pražnjenja u vatima</translation>
 <translation id="7531779363494549572">Otvorite Postavke &gt; Aplikacije i obavijesti &gt; Obavijesti.</translation>
 <translation id="7532009420053991888">Aplikacija <ph name="LINUX_APP_NAME" /> ne reagira. Odaberite "Prisilno zatvori" da zatvorite aplikaciju.</translation>
-<translation id="7536333565791380193">Napredna sigurnost</translation>
 <translation id="7537451260744431038">Web lokacije ne mogu koristiti kolačiće da poboljšaju vaše iskustvo pregledanja, naprimjer, da ostanete prijavljeni ili da stavke u korpi za kupovinu ostanu sačuvane</translation>
 <translation id="7539856059004947393">Bluetooth sigurnosni ključ</translation>
 <translation id="7540972813190816353">Došlo je do greške prilikom provjeravanja ažuriranja: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Napomena:<ph name="END_BOLD" />  Sistem će se ponovo pokrenuti za vrijeme ovog postupka.</translation>
 <translation id="7828731929332799387">Ovim će se obrisati svi kolačići i podaci o web lokacijama koji su dostupni u kontekstima treće strane. Želite li nastaviti?</translation>
 <translation id="7829298379596169484">Pristupanje audioulazu</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može provjeravati vaše lozinke. Predlažemo da provjerite internetsku vezu.</translation>
 <translation id="7829877209233347340">Pitaj roditelja da se prijavi kako bi dodijelio odobrenje za dodavanje školskog računa</translation>
 <translation id="7830594666202422257">Poveži na Linux</translation>
 <translation id="7831491651892296503">Greška prilikom konfiguriranja mreže</translation>
@@ -5588,7 +5580,7 @@
 <translation id="851263357009351303">Uvijek dozvoli da <ph name="HOST" /> prikazuje slike</translation>
 <translation id="8513108775083588393">Automatsko rotiranje</translation>
 <translation id="8514746246728959655">Probajte drugi sigurnosni ključ</translation>
-<translation id="851960115758509829">Vaše aplikacije, postavke i druga prilagođavanja će se sinhronizirati na svim Chrome OS uređajima na kojima ste prijavljeni putem svog Google računa.</translation>
+<translation id="851960115758509829">Vaše aplikacije, postavke i druga prilagođavanja će se sinhronizirati na svim Chrome OS uređajima na kojima ste prijavljeni putem svog Google računa.</translation>
 <translation id="8521475323816527629">Dođite brzo do svojih aplikacija</translation>
 <translation id="8523493869875972733">Zadrži izmjene</translation>
 <translation id="8523849605371521713">Dodano pravilom</translation>
@@ -5953,7 +5945,6 @@
 <translation id="8966870118594285808">Ponovo otvorite karticu ako ste je slučajno zatvorili</translation>
 <translation id="8967866634928501045">Pritisnite Alt Shift A za prikaz</translation>
 <translation id="8968766641738584599">Sačuvaj karticu</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može provjeravati vaše lozinke. Pokušajte ponovo za 24 sata ili <ph name="BEGIN_LINK" />provjerite lozinke na Google računu<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Provjerite s administratorom mreže da budete sigurni da zaštitni zid ne blokira preuzimanja s Google servera.</translation>
 <translation id="8973557916016709913">Uklonite nivo zumiranja</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 61fa355..5807b48 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Les adreces d'interès s'han afegit</translation>
 <translation id="2343747224442182863">Posa el focus en aquesta pestanya</translation>
 <translation id="2345723121311404059">1 pàgina a <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Servei SODA</translation>
 <translation id="2347644257713614136">L'ús de Hangouts i Cast for Education està regit per la política de privadesa de Google.</translation>
 <translation id="2348176352564285430">Aplicació: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">S'ha produït un error en carregar les dades</translation>
@@ -1794,7 +1793,7 @@
 <translation id="3396800784455899911">En fer clic al botó Accepta i continua, acceptes el processament descrit anteriorment per a aquests serveis de Google.</translation>
 <translation id="3399432415385675819">Les notificacions es desactivaran</translation>
 <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertzs): entrellaçat</translation>
-<translation id="3402585168444815892">S'està fent la inscripció al mode de demostració</translation>
+<translation id="3402585168444815892">S'està fent la inscripció en mode de demostració</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">No hi ha cap contrasenya desada per a aquest lloc web</translation>
 <translation id="3405664148539009465">Personalitza els tipus de lletra</translation>
@@ -2283,7 +2282,6 @@
 <translation id="3971764089670057203">Empremtes digitals d'aquesta clau de seguretat</translation>
 <translation id="3973660817924297510">S'estan comprovant les contrasenyes (<ph name="CHECKED_PASSWORDS" /> de <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">No s'ha pogut contactar amb el servidor del domini</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> no pot comprovar les teves contrasenyes. Torna-ho a provar més tard.</translation>
 <translation id="3976108569178263973">No hi ha cap impressora disponible.</translation>
 <translation id="397703832102027365">S'està finalitzant...</translation>
 <translation id="3977886311744775419">Les actualitzacions automàtiques no es baixen en aquest tipus de xarxa, però pots comprovar manualment si hi ha actualitzacions.</translation>
@@ -2584,7 +2582,6 @@
 <translation id="4421932782753506458">Gatet</translation>
 <translation id="4423376891418188461">Restaura la configuració</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, l'administrador necessita que canviïs la contrasenya.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> no pot comprovar les teves contrasenyes. Torna-ho a provar al cap de 24 hores.</translation>
 <translation id="4429030830601238961">Aquestes dades infringeixen les polítiques de seguretat de la teva organització i no es poden enganxar.</translation>
 <translation id="4430019312045809116">Volum</translation>
 <translation id="4430369329743628066">S'ha afegit a les adreces d'interès</translation>
@@ -2597,7 +2594,6 @@
 <translation id="4441124369922430666">Voleu que aquesta aplicació s'iniciï automàticament en engegar l'ordinador?</translation>
 <translation id="4441147046941420429">Per continuar, suprimeix la clau de seguretat del dispositiu; tot seguit, torna a inserir-la i toca-la</translation>
 <translation id="444134486829715816">Amplia...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> pot comprovar les teves contrasenyes quan inicies la sessió amb el Compte de Google</translation>
 <translation id="4442424173763614572">La cerca de DNS ha fallat</translation>
 <translation id="4443536555189480885">&amp;Ajuda</translation>
 <translation id="4444304522807523469">Accedir als escàners del document adjunts mitjançant USB o a la xarxa local</translation>
@@ -2624,7 +2620,6 @@
 <translation id="4476659815936224889">Per escanejar aquest codi, pots fer servir una aplicació d'escaneig QR al telèfon o algunes aplicacions de la càmera.</translation>
 <translation id="4477015793815781985">Inclou la tecla Ctrl, Alt o ⌘</translation>
 <translation id="4478664379124702289">Anomena i desa &amp;l'enllaç...</translation>
-<translation id="4478777936860197922">No hi ha cap contrasenya desada. <ph name="IDS_SHORT_PRODUCT_NAME" /> pot comprovar les teves contrasenyes quan les deses.</translation>
 <translation id="4479424953165245642">Gestiona les aplicacions de quiosc</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">S'està configurant la màquina virtual. Aquest procés pot tardar uns quants minuts.</translation>
@@ -2870,7 +2865,6 @@
 <translation id="4849517651082200438">No instal·lis</translation>
 <translation id="4850669014075537160">Desplaçament</translation>
 <translation id="4850886885716139402">Mostra</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> t'enviarà una notificació quan iniciïs la sessió amb una contrasenya en perill</translation>
 <translation id="4853020600495124913">Obre en una &amp;finestra nova</translation>
 <translation id="4854317507773910281">Tria un compte parental per a l'aprovació</translation>
 <translation id="485480310608090163">Més opcions de configuració i permisos</translation>
@@ -4836,7 +4830,6 @@
 <translation id="7530016656428373557">Velocitat de descàrrega en watts</translation>
 <translation id="7531779363494549572">Ves a Configuració &gt; Aplicacions i notificacions &gt; Notificacions.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> no respon. Selecciona "Força el tancament" per tancar l'aplicació.</translation>
-<translation id="7536333565791380193">Seguretat avançada</translation>
 <translation id="7537451260744431038">Els llocs web no poden fer servir galetes per millorar la teva experiència de navegació, per exemple, per mantenir la teva sessió iniciada o per recordar els elements que tens al carretó de la compra</translation>
 <translation id="7539856059004947393">Clau de seguretat per Bluetooth</translation>
 <translation id="7540972813190816353">S'ha produït un error durant la cerca d'actualitzacions: <ph name="ERROR" /></translation>
@@ -5077,7 +5070,6 @@
     <ph name="BEGIN_BOLD" />Nota<ph name="END_BOLD" />: el sistema es reiniciarà durant el procés.</translation>
 <translation id="7828731929332799387">Se suprimiran totes les galetes i les dades de llocs web disponibles en contexts de tercers. Vols continuar?</translation>
 <translation id="7829298379596169484">S'està accedint a l'entrada d'àudio</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> no pot comprovar les teves contrasenyes. Comprova la connexió a Internet.</translation>
 <translation id="7829877209233347340">Demana als pares que iniciïn la sessió per atorgar-te permís per afegir un compte de centre educatiu.</translation>
 <translation id="7830594666202422257">Connecta a Linux</translation>
 <translation id="7831491651892296503">S'ha produït un error en configurar la xarxa</translation>
@@ -5587,7 +5579,7 @@
 <translation id="851263357009351303">Permet sempre que <ph name="HOST" /> mostri imatges</translation>
 <translation id="8513108775083588393">Rotació automàtica</translation>
 <translation id="8514746246728959655">Prova una altra clau de seguretat</translation>
-<translation id="851960115758509829">Les teves aplicacions, opcions de configuració i altres personalitzacions se sincronitzaran amb tots els dispositius Chrome OS en què hagis iniciat la sessió amb el teu Compte de Google.</translation>
+<translation id="851960115758509829">Les teves aplicacions, opcions de configuració i altres personalitzacions se sincronitzaran en tots els dispositius Chrome OS en què hagis iniciat la sessió amb el teu Compte de Google.</translation>
 <translation id="8521475323816527629">Accedeix a les teves aplicacions ràpidament</translation>
 <translation id="8523493869875972733">Mantén els canvis</translation>
 <translation id="8523849605371521713">Afegida per la política</translation>
@@ -5952,7 +5944,6 @@
 <translation id="8966870118594285808">Torna a obrir una pestanya si l'has tancat per error</translation>
 <translation id="8967866634928501045">Prem Alt+Maj+A perquè es mostri</translation>
 <translation id="8968766641738584599">Desa la targeta</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> no pot comprovar les teves contrasenyes. Torna-ho a provar al cap de 24 hores o <ph name="BEGIN_LINK" />comprova les contrasenyes al teu Compte de Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Consulteu amb l'administrador de xarxa per assegurar-vos que el tallafoc no estigui bloquejant les baixades dels servidors de Google.</translation>
 <translation id="8973557916016709913">Suprimeix el nivell de zoom</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index b426b3f..15876df 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Název záložky</translation>
 <translation id="1124772482545689468">Uživatel</translation>
 <translation id="1125550662859510761">Vypadá jako <ph name="WIDTH" /> × <ph name="HEIGHT" /> (nativní)</translation>
+<translation id="1126809382673880764">Nebudete chráněni před nebezpečnými weby, soubory ke stažení a rozšířeními. V jiných službách Google, v nichž je ochrana pomocí Bezpečného prohlížení k dispozici (např. Gmail a Vyhledávání), ji budete mít i nadále.</translation>
 <translation id="1128109161498068552">Nepovolovat žádným webům využívání exkluzivních zpráv systému pro přístup k zařízením MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Úprava vyhledávače</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Známé sítě</translation>
 <translation id="123578888592755962">Disk je plný</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">Zobrazovat návrhy zadávaných osobních údajů</translation>
 <translation id="1239594683407221485">Prozkoumejte obsah zařízení v aplikaci Soubory.</translation>
 <translation id="124116460088058876">Další jazyky</translation>
 <translation id="1241753985463165747">Při zavolání číst a měnit všechna data na aktuálním webu</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Aktivace mobilní sítě</translation>
 <translation id="1407489512183974736">Ořezat na střed</translation>
 <translation id="1408504635543854729">Prozkoumejte obsah zařízení v aplikaci Soubory. Přístup k obsahu je administrátorem omezen a nelze jej upravovat.</translation>
+<translation id="1408980562518920698">Spravovat osobní údaje</translation>
 <translation id="1410197035576869800">Ikona aplikace</translation>
 <translation id="1410616244180625362">Povolit webu <ph name="HOST" /> přístup ke kameře i nadále</translation>
 <translation id="1414648216875402825">Provádíte upgrade na nestabilní verzi systému <ph name="PRODUCT_NAME" />, která obsahuje funkce ve fázi vývoje. Bude docházet k selháním a neočekávaným chybám. Pokračujte s nejvyšší opatrností.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">Konzole JavaScriptu</translation>
 <translation id="1587907146729660231">Položte prst na vypínač</translation>
+<translation id="1588200577109872591">Chytré zadávání</translation>
 <translation id="1588438908519853928">Normální</translation>
 <translation id="158849752021629804">Je potřeba domácí síť</translation>
 <translation id="1588870296199743671">Otevřít odkaz pomocí...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Přihlásit se jako</translation>
 <translation id="1880905663253319515">Smazat certifikát <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="1884013283844450420">Síť <ph name="NETWORK_INDEX" /> z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, připojit</translation>
+<translation id="1884705339276589024">Změna velikosti disku Linuxu</translation>
 <translation id="1886996562706621347">Povolit dotazy stránek, zda je chcete použít jako výchozí obslužný nástroj protokolů (doporučeno)</translation>
 <translation id="1887442540531652736">Chyba přihlášení</translation>
 <translation id="1887597546629269384">Znovu řekněte „Hej Google“</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Přepínáte na kanál s nižší verzí <ph name="PRODUCT_NAME" />. Změna kanálu bude použita, až bude verze v nově zvoleném kanálu odpovídat verzi nainstalované v zařízení.</translation>
 <translation id="197989455406964291">KDC nepodporuje typ šifrování</translation>
 <translation id="1982354452682152483">Popis není k dispozici.</translation>
+<translation id="1984417487208496350">Bez ochrany (nedoporučujeme)</translation>
 <translation id="1987317783729300807">Účty</translation>
 <translation id="1989112275319619282">Procházet</translation>
 <translation id="1990512225220753005">Nezobrazovat zkratky na této stránce</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Chcete-li obnovit informace o svém účtu, přejděte na web google.com/accounts/recovery.</translation>
 <translation id="2090876986345970080">Bezpečnostní nastavení systému</translation>
 <translation id="2091887806945687916">Zvuk</translation>
+<translation id="2096478741073211388">Návrhy osobních údajů vám pomáhají psát rychleji, protože vám zobrazují návrhy jména, adresy nebo telefonního čísla, když zadáváte určitá slova. Návrhy personalizované pro váš účet jsou soukromé, takže je vidíte jen vy.</translation>
 <translation id="2096715839409389970">Vymazat soubory cookie třetích stran</translation>
 <translation id="2097372108957554726">Chcete-li zaregistrovat nová zařízení, musíte se přihlásit do Chromu.</translation>
 <translation id="2099172618127234427">Aktivujete funkce ladění systému Chrome OS, které nastaví démona sshd a umožní spouštění z jednotek USB.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Znovu načíst &amp;rámec</translation>
 <translation id="2114896190328250491">Autor fotografie: <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Otevřít v aplikaci <ph name="APP" /></translation>
+<translation id="2119461801241504254">Bezpečné prohlížení je zapnuté a chrání vás před škodlivými weby a soubory ke stažení</translation>
 <translation id="2120297377148151361">Aktivita a interakce</translation>
 <translation id="2120639962942052471">Zablokované oprávnění: <ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Soubory cookie jsou blokovány}=1{Soubory cookie jsou blokovány, 1 výjimka}few{Soubory cookie jsou blokovány, {COUNT} výjimky}many{Soubory cookie jsou blokovány, {COUNT} výjimky}other{Soubory cookie jsou blokovány, {COUNT} výjimek}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Byly přidány záložky</translation>
 <translation id="2343747224442182863">Vybrat tuto kartu</translation>
 <translation id="2345723121311404059">1 stránka pro tiskárnu <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Služba SODA</translation>
 <translation id="2347644257713614136">Použití služeb Hangouts a Cast for Education se řídí zásadami ochrany soukromí společnosti Google.</translation>
 <translation id="2348176352564285430">Aplikace: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Při načítání dat došlo k chybě</translation>
@@ -1890,6 +1897,7 @@
 <translation id="3515983984924808886">Potvrďte reset tím, že se znovu dotknete bezpečnostního klíče. Všechny informace uložené na bezpečnostním klíči, včetně kódu PIN, se vymažou.</translation>
 <translation id="3518985090088779359">PŘIJMOUT A POKRAČOVAT</translation>
 <translation id="351952459507671940">Přidat do nové skupiny</translation>
+<translation id="3521606918211282604">Změnit velikost disku</translation>
 <translation id="3523642406908660543">Dotázat se, pokud chce web použít plugin k přístupu do počítače (doporučeno)</translation>
 <translation id="3524965460886318643">Exportovat aktivity</translation>
 <translation id="3526034519184079374">Nelze přečíst či změnit data webu</translation>
@@ -1977,6 +1985,7 @@
 <translation id="3629631988386925734">Chcete-li zapnout funkci Smart Lock, zadejte heslo. Příště váš telefon zařízení <ph name="DEVICE_TYPE" /> odemkne. Funkci Smart Lock můžete vypnout v Nastavení.</translation>
 <translation id="3630132874740063857">Váš telefon</translation>
 <translation id="3630995161997703415">Pokud si tento web přidáte na poličku, budete jej moci kdykoliv použít</translation>
+<translation id="3633309367764744750">Předběžně načítá informace ze stránek, včetně stránek, které jste dosud nenavštívili. Načtené informace mohou zahrnovat soubory cookie, pokud je povolíte.</translation>
 <translation id="3634507049637220048">Síť <ph name="NETWORK_INDEX" /> z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, spravováno administrátorem, podrobnosti</translation>
 <translation id="3635241501480133979">Tato data porušují bezpečnostní zásady organizace a nelze je přetáhnout.</translation>
 <translation id="3635353578505343390">Odeslat Googlu zpětnou vazbu</translation>
@@ -2274,7 +2283,6 @@
 <translation id="3971764089670057203">Otisky prstů na tomto bezpečnostním klíči</translation>
 <translation id="3973660817924297510">Probíhá kontrola hesel (<ph name="CHECKED_PASSWORDS" /> z <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Kontaktování serveru pro sféru se nezdařilo</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> nemůže zkontrolovat vaše hesla. Zkuste to později.</translation>
 <translation id="3976108569178263973">Nejsou k dispozici žádné tiskárny.</translation>
 <translation id="397703832102027365">Dokončování...</translation>
 <translation id="3977886311744775419">Automatické aktualizace se v tomto typu sítě nestahují, ale můžete aktualizace vyhledat ručně.</translation>
@@ -2575,7 +2583,6 @@
 <translation id="4421932782753506458">Kotě</translation>
 <translation id="4423376891418188461">Obnovit nastavení</translation>
 <translation id="442397852638519243">Zpráva pro uživatele <ph name="USER_NAME" />: váš administrátor vyžaduje, abyste si změnili heslo.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> nemůže zkontrolovat vaše hesla. Zkuste to znovu za 24 hodin.</translation>
 <translation id="4429030830601238961">Tato data porušují bezpečnostní zásady organizace a nelze je vložit.</translation>
 <translation id="4430019312045809116">Hlasitost</translation>
 <translation id="4430369329743628066">Byla přidána záložka</translation>
@@ -2588,7 +2595,6 @@
 <translation id="4441124369922430666">Chcete tuto aplikaci automaticky spustit, když se zařízení zapne?</translation>
 <translation id="4441147046941420429">Chcete-li pokračovat, vyjměte ze zařízení bezpečnostní klíč a poté ho znovu vložte a dotkněte se ho</translation>
 <translation id="444134486829715816">Rozbalit...</translation>
-<translation id="4442329324652245220">Když se přihlásíte k účtu Google, může vám <ph name="IDS_SHORT_PRODUCT_NAME" /> kontrolovat hesla</translation>
 <translation id="4442424173763614572">Nepodařilo se nalézt server DNS.</translation>
 <translation id="4443536555189480885">&amp;Nápověda</translation>
 <translation id="4444304522807523469">Přístup ke skenerům dokumentů připojeným přes USB nebo v místní síti</translation>
@@ -2615,7 +2621,6 @@
 <translation id="4476659815936224889">K naskenování tohoto kódu můžete použít aplikaci na skenování QR kódů na telefonu nebo některé aplikace pro fotografování.</translation>
 <translation id="4477015793815781985">Zahrňte klávesu Ctrl, Alt, nebo ⌘</translation>
 <translation id="4478664379124702289">Uložit od&amp;kaz jako...</translation>
-<translation id="4478777936860197922">Nemáte žádná uložená hesla. <ph name="IDS_SHORT_PRODUCT_NAME" /> může hesla zkontrolovat, pouze když si je uložíte.</translation>
 <translation id="4479424953165245642">Spravovat aplikace pro režim veřejného terminálu</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Probíhá konfigurace virtuálního počítače. Může to trvat několik minut.</translation>
@@ -2861,7 +2866,6 @@
 <translation id="4849517651082200438">Neinstalovat</translation>
 <translation id="4850669014075537160">Posouvání</translation>
 <translation id="4850886885716139402">Zobrazit</translation>
-<translation id="485197095346966382">Pokud se přihlásíte pomocí prolomeného hesla, <ph name="IDS_SHORT_PRODUCT_NAME" /> vám to oznámí</translation>
 <translation id="4853020600495124913">Otevřít v &amp;novém okně</translation>
 <translation id="4854317507773910281">Vyber účet rodiče, který to schválí</translation>
 <translation id="485480310608090163">Další nastavení a oprávnění</translation>
@@ -3935,6 +3939,7 @@
 <translation id="6298962879096096191">Používat Google Play k instalaci aplikací pro Android</translation>
 <translation id="630065524203833229">Konec</translation>
 <translation id="6300718114348072351">Tiskárnu <ph name="PRINTER_NAME" /> se nepodařilo nakonfigurovat automaticky. Zadejte rozšířené podrobnosti o tiskárně. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Návrhy osobních údajů</translation>
 <translation id="6305607932814307878">Globální zásada:</translation>
 <translation id="6307990684951724544">Systém je zaneprázděný</translation>
 <translation id="6308493641021088955">Poskytovatel přihlášení: <ph name="EXTENSION_NAME" /></translation>
@@ -4013,6 +4018,7 @@
 <translation id="641081527798843608">Shoda předmětu</translation>
 <translation id="6412673304250309937">Kontroluje adresy URL oproti seznamu nebezpečných webů uloženému v Chromu. Pokud se web pokusí odcizit vám heslo nebo když stáhnete škodlivý soubor, může Chrome Bezpečnému prohlížení odeslat také adresy URL, včetně částí obsahu stránky.</translation>
 <translation id="6412931879992742813">Nové anonymní okno</translation>
+<translation id="6413591858632097328">Tímto vymažete všechny soubory cookie a data, která uložil web <ph name="ORIGIN_NAME" /> nebo jeho nainstalovaná aplikace.</translation>
 <translation id="641469293210305670">Instalace aktualizací a aplikací</translation>
 <translation id="6414888972213066896">Zeptal(a) ses rodiče, zda můžeš navštívit tento web.</translation>
 <translation id="6415900369006735853">Připojit se k internetu přes telefon</translation>
@@ -4823,7 +4829,6 @@
 <translation id="7530016656428373557">Rychlost vybíjení ve wattech</translation>
 <translation id="7531779363494549572">Přejděte na Nastavení &gt; Aplikace a oznámení &gt; Oznámení</translation>
 <translation id="7532009420053991888">Aplikace <ph name="LINUX_APP_NAME" /> neodpovídá. Chcete-li ji zavřít, vyberte Ukončit aplikaci.</translation>
-<translation id="7536333565791380193">Pokročilé zabezpečení</translation>
 <translation id="7537451260744431038">Weby nemohou používat soubory cookie ke zlepšování prostředí při prohlížení, například si pomocí nich nemohou pamatovat vaše přihlášení a položky v nákupním košíku</translation>
 <translation id="7539856059004947393">Bezpečnostní klíč Bluetooth</translation>
 <translation id="7540972813190816353">Při kontrole aktualizací došlo k chybě: <ph name="ERROR" /></translation>
@@ -5064,7 +5069,6 @@
 <ph name="BEGIN_BOLD" />Poznámka:<ph name="END_BOLD" /> Systém se během tohoto procesu restartuje.</translation>
 <translation id="7828731929332799387">Tímto vymažete všechny soubory cookie a data webu dostupná v kontextech třetích stran. Chcete pokračovat?</translation>
 <translation id="7829298379596169484">Přístup ke zvukovému vstupu</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> nemůže zkontrolovat vaše hesla. Zkuste zkontrolovat připojení k internetu.</translation>
 <translation id="7829877209233347340">Požádej rodiče, aby se přihlásil a udělil oprávnění k přidání školního účtu</translation>
 <translation id="7830594666202422257">Připojit k Linuxu</translation>
 <translation id="7831491651892296503">Chyba při konfiguraci sítě</translation>
@@ -5938,7 +5942,6 @@
 <translation id="8966870118594285808">Pokud jste nějakou kartu zavřeli omylem, můžete ji znovu otevřít</translation>
 <translation id="8967866634928501045">Zobrazíte stisknutím Alt + Shift + A</translation>
 <translation id="8968766641738584599">Uložit kartu</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> nemůže zkontrolovat vaše hesla. Zkuste to znovu zítra, případně <ph name="BEGIN_LINK" />hesla zkontrolujte v účtu Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escapovat</translation>
 <translation id="8972513834460200407">Obraťte se na svého správce sítě a ověřte, že stahování ze serverů Google neblokuje firewall.</translation>
 <translation id="8973557916016709913">Odstranit úroveň přiblížení</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 7d9cbcd0..b3519d7 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Bogmærkerne blev tilføjet</translation>
 <translation id="2343747224442182863">Sæt denne fane i fokus</translation>
 <translation id="2345723121311404059">1 side til <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA-tjeneste</translation>
 <translation id="2347644257713614136">Brugen af Hangouts og Cast for Education styres af Googles privatlivspolitik.</translation>
 <translation id="2348176352564285430">App: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Der kunne ikke indlæses data</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Fingeraftryk på denne sikkerhedsnøgle</translation>
 <translation id="3973660817924297510">Tjekker adgangskoder (<ph name="CHECKED_PASSWORDS" /> af <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Det var ikke muligt at kontakte serveren for domænet</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan ikke tjekke dine adgangskoder. Prøv igen senere.</translation>
 <translation id="3976108569178263973">Der er ingen tilgængelige printere.</translation>
 <translation id="397703832102027365">Afslutter...</translation>
 <translation id="3977886311744775419">Automatiske opdateringer downloades ikke på denne netværkstype, men du kan kigge efter opdateringer manuelt.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Pjuske</translation>
 <translation id="4423376891418188461">Gendan indstillinger</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, din administrator kræver, at du ændrer din adgangskode.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan ikke tjekke dine adgangskoder. Prøv igen efter 24 timer.</translation>
 <translation id="4429030830601238961">Disse data overtræder din organisations sikkerhedspolitikker og kan ikke sættes ind.</translation>
 <translation id="4430019312045809116">Lydstyrke</translation>
 <translation id="4430369329743628066">Bogmærket er tilføjet</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Skal denne app startes automatisk, når du tænder computeren?</translation>
 <translation id="4441147046941420429">Hvis du vil fortsætte, skal du fjerne sikkerhedsnøglen fra din enhed og derefter sætte den i igen og trykke på den</translation>
 <translation id="444134486829715816">Udvid...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan tjekke dine adgangskoder, når du er logget ind med din Google-konto</translation>
 <translation id="4442424173763614572">DNS-opslag mislykkedes</translation>
 <translation id="4443536555189480885">&amp;Hjælp</translation>
 <translation id="4444304522807523469">Få adgang til dokumentscannere, der er forbundet via USB eller det lokale netværk</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Du kan scanne denne kode ved at bruge en app til scanning af QR-koder på din telefon eller visse kameraapps.</translation>
 <translation id="4477015793815781985">Medtag Ctrl, Alt eller ⌘</translation>
 <translation id="4478664379124702289">Gem lin&amp;k som...</translation>
-<translation id="4478777936860197922">Der er ingen gemte adgangskoder. <ph name="IDS_SHORT_PRODUCT_NAME" /> kan tjekke dine adgangskoder, når du gemmer dem.</translation>
 <translation id="4479424953165245642">Administrer kioskapplikationer</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Konfigurerer den virtuelle maskine. Dette kan tage et par minutter.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Installer ikke</translation>
 <translation id="4850669014075537160">Rulning</translation>
 <translation id="4850886885716139402">Vis</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> giver dig besked, når du logger ind med en kompromitteret adgangskode</translation>
 <translation id="4853020600495124913">Åbn i &amp;nyt vindue</translation>
 <translation id="4854317507773910281">Vælg en forældrekonto, der skal godkende</translation>
 <translation id="485480310608090163">Flere indstillinger og tilladelser</translation>
@@ -4838,7 +4832,6 @@
 <translation id="7530016656428373557">Afladningshastighed i Watt</translation>
 <translation id="7531779363494549572">Gå til Indstillinger &gt; Apps og notifikationer &gt; Notifikationer.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> svarer ikke. Vælg "Tving til at lukke" for at lukke appen.</translation>
-<translation id="7536333565791380193">Avanceret sikkerhed</translation>
 <translation id="7537451260744431038">Websites kan ikke anvende cookies til at forbedre din browseroplevelse ved f.eks. at sørge for, at du forbliver logget ind, eller ved at huske varerne i din kurv</translation>
 <translation id="7539856059004947393">Bluetooth-sikkerhedsnøgle</translation>
 <translation id="7540972813190816353">Der opstod en fejl ved søgning efter opdateringer: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Bemærk!<ph name="END_BOLD" />  Systemet genstarter under processen.</translation>
 <translation id="7828731929332799387">Dette sletter alle cookies og websitedata, der er tilgængelig i tredjepartssammenhænge. Vil du fortsætte?</translation>
 <translation id="7829298379596169484">Åbner lydinput</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan ikke tjekke dine adgangskoder. Prøv at tjekke din internetforbindelse.</translation>
 <translation id="7829877209233347340">Bed din forælder om at logge ind og give tilladelse til, at skolekontoen tilføjes</translation>
 <translation id="7830594666202422257">Opret forbindelse til Linux</translation>
 <translation id="7831491651892296503">Der opstod en fejl under konfigurationen af netværket</translation>
@@ -5954,7 +5946,6 @@
 <translation id="8966870118594285808">Åbn en fane igen, hvis du lukkede den ved et uheld</translation>
 <translation id="8967866634928501045">Tryk på Alt+Shift+A for at vise</translation>
 <translation id="8968766641738584599">Gem kort</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan ikke tjekke dine adgangskoder. Prøv igen efter 24 timer, eller <ph name="BEGIN_LINK" />tjek adgangskoder på din Google-konto<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Kontakt din netværksadministrator for at sikre, at firewallen ikke blokerer downloads fra Google-servere.</translation>
 <translation id="8973557916016709913">Fjern zoomniveau</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 238e00b..45139c6 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -1008,7 +1008,6 @@
 <translation id="2342740338116612727">Lesezeichen hinzugefügt</translation>
 <translation id="2343747224442182863">Diesen Tab fokussieren</translation>
 <translation id="2345723121311404059">1 Seite an <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA-Dienst</translation>
 <translation id="2347644257713614136">Die Nutzung von Hangouts und Cast for Education unterliegt der Datenschutzerklärung von Google.</translation>
 <translation id="2348176352564285430">App: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Fehler beim Laden der Daten</translation>
@@ -2282,7 +2281,6 @@
 <translation id="3971764089670057203">Fingerabdrücke für diesen Sicherheitsschlüssel</translation>
 <translation id="3973660817924297510">Passwörter werden geprüft (<ph name="CHECKED_PASSWORDS" /> von <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Fehler bei Verbindungsaufbau mit Server für diesen Bereich</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> kann Ihre Passwörter nicht prüfen. Versuchen Sie es später noch einmal.</translation>
 <translation id="3976108569178263973">Es sind keine Drucker verfügbar.</translation>
 <translation id="397703832102027365">Aktualisierung wird abgeschlossen...</translation>
 <translation id="3977886311744775419">Bei diesem Netzwerktyp werden keine automatischen Updates heruntergeladen. Sie können aber manuell nach Updates suchen.</translation>
@@ -2583,7 +2581,6 @@
 <translation id="4421932782753506458">Miez</translation>
 <translation id="4423376891418188461">Einstellungen wiederherstellen</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, Ihr Administrator fordert Sie zum Ändern Ihres Passworts auf.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> kann Ihre Passwörter nicht prüfen. Bitte versuchen Sie es in 24 Stunden noch einmal.</translation>
 <translation id="4429030830601238961">Diese Daten verstoßen gegen die Sicherheitsrichtlinien Ihres Unternehmens und können nicht eingefügt werden.</translation>
 <translation id="4430019312045809116">Lautstärke</translation>
 <translation id="4430369329743628066">Lesezeichen hinzugefügt</translation>
@@ -2596,7 +2593,6 @@
 <translation id="4441124369922430666">Soll diese App beim Einschalten des Geräts automatisch gestartet werden?</translation>
 <translation id="4441147046941420429">Entfernen Sie zum Fortfahren den Sicherheitsschlüssel von Ihrem Gerät, stecken Sie ihn noch einmal ein und tippen Sie darauf</translation>
 <translation id="444134486829715816">Anzeigen...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> kann Ihre Passwörter prüfen, wenn Sie sich mit Ihrem Google-Konto anmelden</translation>
 <translation id="4442424173763614572">DNS-Suche fehlgeschlagen</translation>
 <translation id="4443536555189480885">&amp;Hilfe</translation>
 <translation id="4444304522807523469">Auf Dokumentenscanner zugreifen, die per USB angeschlossen sind oder sich im lokalen Netzwerk befinden</translation>
@@ -2623,7 +2619,6 @@
 <translation id="4476659815936224889">Sie können eine QR-Scanner-App oder bestimmte Kamera-Apps auf Ihrem Smartphone verwenden, um diesen Code zu scannen.</translation>
 <translation id="4477015793815781985">Verwenden Sie Strg, Alt oder ⌘</translation>
 <translation id="4478664379124702289">Lin&amp;k speichern unter...</translation>
-<translation id="4478777936860197922">Keine gespeicherten Passwörter. <ph name="IDS_SHORT_PRODUCT_NAME" /> kann Ihre Passwörter prüfen, wenn Sie sie speichern.</translation>
 <translation id="4479424953165245642">Kioskanwendungen verwalten</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Die virtuelle Maschine wird konfiguriert. Dies kann einige Minuten dauern.</translation>
@@ -2869,7 +2864,6 @@
 <translation id="4849517651082200438">Nicht installieren</translation>
 <translation id="4850669014075537160">Scrollen</translation>
 <translation id="4850886885716139402">Anzeigen</translation>
-<translation id="485197095346966382">Sie werden von <ph name="IDS_SHORT_PRODUCT_NAME" /> benachrichtigt, falls Sie sich mit einem gehackten Passwort anmelden</translation>
 <translation id="4853020600495124913">In &amp;neuem Fenster öffnen</translation>
 <translation id="4854317507773910281">Elternkonto für die Genehmigung auswählen</translation>
 <translation id="485480310608090163">Weitere Einstellungen und Berechtigungen</translation>
@@ -4833,7 +4827,6 @@
 <translation id="7530016656428373557">Entladerate in Watt</translation>
 <translation id="7531779363494549572">Gehen Sie zu "Einstellungen" &gt; "Apps &amp; Benachrichtigungen" &gt; "Benachrichtigungen".</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> reagiert nicht. Wählen Sie "Schließen erzwingen" aus, um die App zu beenden.</translation>
-<translation id="7536333565791380193">Erweiterte Sicherheit</translation>
 <translation id="7537451260744431038">Websites können keine Cookies verwenden, um Ihnen das Surfen zu erleichtern; zum Beispiel, damit Sie angemeldet oder Artikel in Ihrem Einkaufswagen gespeichert bleiben</translation>
 <translation id="7539856059004947393">Bluetooth-Sicherheitsschlüssel</translation>
 <translation id="7540972813190816353">Fehler beim Suchen nach Updates: <ph name="ERROR" /></translation>
@@ -5074,7 +5067,6 @@
     <ph name="BEGIN_BOLD" />Hinweis<ph name="END_BOLD" />: Das System wird während des Vorgangs neu gestartet.</translation>
 <translation id="7828731929332799387">Dadurch werden alle Cookies und Websitedaten von Drittanbietern gelöscht. Möchten Sie fortfahren?</translation>
 <translation id="7829298379596169484">Zugriff auf Audio-Eingang</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> kann Ihre Passwörter nicht prüfen. Prüfen Sie Ihre Internetverbindung.</translation>
 <translation id="7829877209233347340">Es muss sich zuerst ein Elternteil anmelden und seine Zustimmung geben, damit das Konto einer Bildungseinrichtung hinzugefügt werden kann</translation>
 <translation id="7830594666202422257">Mit Linux verbinden</translation>
 <translation id="7831491651892296503">Fehler bei der Netzwerkkonfiguration</translation>
@@ -5948,7 +5940,6 @@
 <translation id="8966870118594285808">Versehentlich geschlossenen Tab wieder öffnen</translation>
 <translation id="8967866634928501045">Zum Anzeigen drücken Sie Alt + Umschalttaste + A</translation>
 <translation id="8968766641738584599">Karte speichern</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> kann Ihre Passwörter nicht prüfen. Versuchen Sie es in 24 Stunden noch einmal oder <ph name="BEGIN_LINK" />prüfen Sie die Passwörter in Ihrem Google-Konto<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Esc-Taste</translation>
 <translation id="8972513834460200407">Bitten Sie Ihren Netzwerkadministrator, zu überprüfen, ob Downloads von Google-Servern von der Firewall blockiert werden.</translation>
 <translation id="8973557916016709913">Zoomstufe entfernen</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index a3cfcb9..4a30d46 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Προστέθηκαν σελιδοδείκτες</translation>
 <translation id="2343747224442182863">Εστίαση σε αυτήν την καρτέλα</translation>
 <translation id="2345723121311404059">1 σελίδα στον εκτυπωτή <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Υπηρεσία SODA</translation>
 <translation id="2347644257713614136">Η χρήση του Hangouts και του Cast for Education διέπεται από την Πολιτική απορρήτου της Google.</translation>
 <translation id="2348176352564285430">Εφαρμογή: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Σφάλμα κατά τη φόρτωση δεδομένων</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Δακτυλικά αποτυπώματα σε αυτό το κλειδί ασφαλείας</translation>
 <translation id="3973660817924297510">Γίνεται έλεγχος κωδικών πρόσβασης (<ph name="CHECKED_PASSWORDS" /> από <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Η επικοινωνία με τον διακομιστή για realm απέτυχε</translation>
-<translation id="3975884715086515476">Το <ph name="IDS_SHORT_PRODUCT_NAME" /> δεν μπορεί να ελέγξει τους κωδικούς πρόσβασής σας. Δοκιμάστε αργότερα.</translation>
 <translation id="3976108569178263973">Δεν υπάρχουν διαθέσιμοι εκτυπωτές.</translation>
 <translation id="397703832102027365">Ολοκλήρωση…</translation>
 <translation id="3977886311744775419">Δεν πραγματοποιείται λήψη αυτόματων ενημερώσεων σε αυτόν τον τύπο δικτύου, αλλά μπορείτε να ελέγξετε για ενημερώσεις με μη αυτόματο τρόπο.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Χνουδωτός</translation>
 <translation id="4423376891418188461">Επαναφορά ρυθμίσεων</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ο διαχειριστής σας απαιτεί να αλλάξετε τον κωδικό πρόσβασης.</translation>
-<translation id="4426209360861763174">Το <ph name="IDS_SHORT_PRODUCT_NAME" /> δεν μπορεί να ελέγξει τους κωδικούς πρόσβασής σας. Δοκιμάστε ξανά σε 24 ώρες.</translation>
 <translation id="4429030830601238961">Αυτά τα δεδομένα παραβαίνουν τις πολιτικές ασφάλειας του οργανισμού σας και η επικόλλησή τους δεν είναι δυνατή.</translation>
 <translation id="4430019312045809116">Ένταση</translation>
 <translation id="4430369329743628066">Προστέθηκε σελιδοδείκτης</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Θέλετε να ξεκινά αυτόματα αυτή η εφαρμογή όταν η συσκευή τίθεται σε λειτουργία;</translation>
 <translation id="4441147046941420429">Για να συνεχίσετε, αφαιρέστε το κλειδί ασφαλείας από τη συσκευή σας, τοποθετήστε το ξανά και αγγίξτε το</translation>
 <translation id="444134486829715816">Ανάπτυξη...</translation>
-<translation id="4442329324652245220">Το <ph name="IDS_SHORT_PRODUCT_NAME" /> μπορεί να ελέγξει τους κωδικούς πρόσβασής σας όταν συνδέεστε με τον Λογαριασμό σας Google.</translation>
 <translation id="4442424173763614572">Η αναζήτηση DNS απέτυχε</translation>
 <translation id="4443536555189480885">&amp;Βοήθεια</translation>
 <translation id="4444304522807523469">Πρόσβαση στους σαρωτές εγγράφων που προσαρτώνται μέσω USB ή σε κάποιο τοπικό δίκτυο</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Για να σαρώσετε αυτόν τον κωδικό, μπορείτε να χρησιμοποιήσετε μια εφαρμογή σαρωτή QR στο τηλέφωνό σας ή ορισμένες εφαρμογές κάμερας.</translation>
 <translation id="4477015793815781985">Συμπεριλάβετε το Ctrl, το Alt ή το ⌘</translation>
 <translation id="4478664379124702289">Αποθήκευση Συν&amp;δέσμου Ως...</translation>
-<translation id="4478777936860197922">Δεν υπάρχουν αποθηκευμένοι κωδικοί πρόσβασης. Το <ph name="IDS_SHORT_PRODUCT_NAME" /> μπορεί να ελέγξει τους κωδικούς πρόσβασής σας όταν τους αποθηκεύσετε.</translation>
 <translation id="4479424953165245642">Διαχειριστείτε τις εφαρμογές kiosk</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Διαμόρφωση της εικονικής μηχανής. Ενδέχεται να χρειαστούν μερικά λεπτά.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Να μην γίνει εγκατάσταση</translation>
 <translation id="4850669014075537160">Κύλιση</translation>
 <translation id="4850886885716139402">Προβολή</translation>
-<translation id="485197095346966382">Το <ph name="IDS_SHORT_PRODUCT_NAME" /> θα σας ειδοποιήσει όταν συνδεθείτε με έναν παραβιασμένο κωδικό πρόσβαση.</translation>
 <translation id="4853020600495124913">Άνοιγμα σε &amp;νέο παράθυρο</translation>
 <translation id="4854317507773910281">Επιλογή λογαριασμού γονέα για έγκριση</translation>
 <translation id="485480310608090163">Περισσότερες ρυθμίσεις και άδειες</translation>
@@ -4838,7 +4832,6 @@
 <translation id="7530016656428373557">Ρυθμός αποφόρτισης σε Watt</translation>
 <translation id="7531779363494549572">Μεταβείτε στις Ρυθμίσεις &gt; Εφαρμογές και ειδοποιήσεις &gt; Ειδοποιήσεις.</translation>
 <translation id="7532009420053991888">Η εφαρμογή <ph name="LINUX_APP_NAME" /> δεν αποκρίνεται. Για να κλείσετε την εφαρμογή, επιλέξτε Αναγκαστικό κλείσιμο.</translation>
-<translation id="7536333565791380193">Προηγμένη ασφάλεια</translation>
 <translation id="7537451260744431038">Οι ιστότοποι δεν μπορούν να χρησιμοποιούν cookie για να βελτιώσουν την εμπειρία περιήγησής σας, για παράδειγμα, για να παραμείνετε συνδεδεμένοι ή να διατηρηθούν τα προϊόντα στο καλάθι αγορών σας.</translation>
 <translation id="7539856059004947393">Κλειδί ασφαλείας Bluetooth</translation>
 <translation id="7540972813190816353">Παρουσιάστηκε σφάλμα κατά τον έλεγχο για ενημερώσεις: <ph name="ERROR" /></translation>
@@ -5079,7 +5072,6 @@
     <ph name="BEGIN_BOLD" />Σημείωση:<ph name="END_BOLD" />  Θα γίνει επανεκκίνηση του συστήματος κατά τη διάρκεια της διαδικασίας.</translation>
 <translation id="7828731929332799387">Με αυτή την ενέργεια θα διαγραφούν όλα τα cookie και τα δεδομένα ιστοτόπων που διατίθενται σε περιβάλλοντα τρίτου μέρους. Θέλετε να συνεχίσετε;</translation>
 <translation id="7829298379596169484">Πρόσβαση στην είσοδο ήχου</translation>
-<translation id="7829528495815477379">Το <ph name="IDS_SHORT_PRODUCT_NAME" /> δεν μπορεί να ελέγξει τους κωδικούς πρόσβασής σας. Δοκιμάστε να ελέγξετε τη σύνδεσή σας στο διαδίκτυο.</translation>
 <translation id="7829877209233347340">Ζήτα από έναν γονέα να συνδεθεί για να εκχωρήσει δικαίωμα προσθήκης ενός λογαριασμού σχολείου.</translation>
 <translation id="7830594666202422257">Σύνδεση σε Linux</translation>
 <translation id="7831491651892296503">Σφάλμα κατά τη διαμόρφωση του δικτύου</translation>
@@ -5952,7 +5944,6 @@
 <translation id="8966870118594285808">Ανοίξτε ξανά μια καρτέλα εάν την κλείσατε τυχαία</translation>
 <translation id="8967866634928501045">Πατήστε τα πλήκτρα Alt, Shift και A για εμφάνιση</translation>
 <translation id="8968766641738584599">Αποθήκευση κάρτας</translation>
-<translation id="8971800409073702505">Το <ph name="IDS_SHORT_PRODUCT_NAME" /> δεν μπορεί να ελέγξει τους κωδικούς πρόσβασής σας. Δοκιμάστε ξανά μετά από 24 ώρες ή <ph name="BEGIN_LINK" />ελέγξτε τους κωδικούς πρόσβασης στον Λογαριασμό σας Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Πραγματοποιήστε έλεγχο με το διαχειριστή του δικτύου σας, για να βεβαιωθείτε ότι το τείχος προστασίας δεν αποκλείει λήψεις από τους διακομιστές της Google.</translation>
 <translation id="8973557916016709913">Κατάργηση επιπέδου εστίασης</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 9741fd5..967130a 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Bookmarks added</translation>
 <translation id="2343747224442182863">Focus This Tab</translation>
 <translation id="2345723121311404059">1 page to <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA Service</translation>
 <translation id="2347644257713614136">Use of Hangouts and Cast for Education is governed by the Google Privacy Policy.</translation>
 <translation id="2348176352564285430">App: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Error loading data</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Fingerprints on this security key</translation>
 <translation id="3973660817924297510">Checking passwords (<ph name="CHECKED_PASSWORDS" /> of <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Contacting server for realm failed</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> can't check your passwords. Try again later.</translation>
 <translation id="3976108569178263973">There are no available printers.</translation>
 <translation id="397703832102027365">Finalising...</translation>
 <translation id="3977886311744775419">Automatic updates don't download on this network type, but you can check for updates manually.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Fluffy</translation>
 <translation id="4423376891418188461">Restore Settings</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, your administrator requires you to change your password.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> can't check your passwords. Try again after 24 hours.</translation>
 <translation id="4429030830601238961">This data violates your organisation's security policies and can't be pasted.</translation>
 <translation id="4430019312045809116">volume</translation>
 <translation id="4430369329743628066">Bookmark added</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Do you want to automatically start this app when the machine turns on?</translation>
 <translation id="4441147046941420429">To continue, remove your security key from your device, then reinsert and touch it</translation>
 <translation id="444134486829715816">Expand...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> can check your passwords when you sign in with your Google Account</translation>
 <translation id="4442424173763614572">DNS lookup failed</translation>
 <translation id="4443536555189480885">&amp;Help</translation>
 <translation id="4444304522807523469">Access document scanners attached via USB or on the local network</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">To scan this code, you can use a QR scanner app on your phone, or some camera apps.</translation>
 <translation id="4477015793815781985">Include Ctrl, Alt or ⌘</translation>
 <translation id="4478664379124702289">Save Lin&amp;k As...</translation>
-<translation id="4478777936860197922">No saved passwords. <ph name="IDS_SHORT_PRODUCT_NAME" /> can check your passwords when you save them.</translation>
 <translation id="4479424953165245642">Manage kiosk applications</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Configuring the virtual machine. This may take a few minutes.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Don't Install</translation>
 <translation id="4850669014075537160">Scrolling</translation>
 <translation id="4850886885716139402">View</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> will notify you when you sign in with a compromised password</translation>
 <translation id="4853020600495124913">Open in &amp;new window</translation>
 <translation id="4854317507773910281">Choose parent account for approval</translation>
 <translation id="485480310608090163">More settings and permissions</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Discharge Rate in Watts</translation>
 <translation id="7531779363494549572">Go to Settings &gt; Apps &amp; notifications &gt; Notifications.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> is not responding. Select 'Force close' to close the app.</translation>
-<translation id="7536333565791380193">Advanced security</translation>
 <translation id="7537451260744431038">Sites can't use cookies to improve your browsing experience, for example to keep you signed in or to remember items in your shopping basket</translation>
 <translation id="7539856059004947393">Bluetooth security key</translation>
 <translation id="7540972813190816353">An error occurred while checking for updates: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Note:<ph name="END_BOLD" /> The system will reboot during the process.</translation>
 <translation id="7828731929332799387">This will delete all cookies and site data available in third-party contexts. Do you want to continue?</translation>
 <translation id="7829298379596169484">Accessing audio input</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> can't check your passwords. Try checking your Internet connection.</translation>
 <translation id="7829877209233347340">Ask a parent to sign in to grant permission to add a school account</translation>
 <translation id="7830594666202422257">Connect to Linux</translation>
 <translation id="7831491651892296503">Error configuring network</translation>
@@ -5953,7 +5945,6 @@
 <translation id="8966870118594285808">Reopen a tab if you accidentally closed it</translation>
 <translation id="8967866634928501045">Press Alt Shift A to show</translation>
 <translation id="8968766641738584599">Save card</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> can't check your passwords. Try again after 24 hours or <ph name="BEGIN_LINK" />check passwords in your Google Account<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Please check with your network administrator to make sure that the firewall is not blocking downloads from Google servers.</translation>
 <translation id="8973557916016709913">Remove zoom level</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index a4b1c7a..7f8c635 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Nombre del marcador</translation>
 <translation id="1124772482545689468">Usuario</translation>
 <translation id="1125550662859510761">Resolución: <ph name="WIDTH" /> × <ph name="HEIGHT" /> (nativa)</translation>
+<translation id="1126809382673880764">No te protege contra descargas, extensiones ni sitios web peligrosos. Seguirás teniendo la protección (donde esté disponible) de la Navegación segura en otros servicios de Google, como Gmail y la Búsqueda.</translation>
 <translation id="1128109161498068552">No permitir que los sitios usen mensajes exclusivos del sistema para acceder a dispositivos MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Editar el motor de búsqueda</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Redes conocidas</translation>
 <translation id="123578888592755962">Disco lleno</translation>
 <translation id="1238191093934674082">OpenVPN</translation>
+<translation id="1239439601391236986">Mostrar sugerencias de entrada con información personal</translation>
 <translation id="1239594683407221485">Explora el contenido del dispositivo en la app Archivos.</translation>
 <translation id="124116460088058876">Más idiomas</translation>
 <translation id="1241753985463165747">Leer y modificar todos los datos del sitio web actual cuando se invoca</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Activación del teléfono celular</translation>
 <translation id="1407489512183974736">Centrar imagen recortada</translation>
 <translation id="1408504635543854729">Explora el contenido del dispositivo en la app de Archivos. Un administrador restringió el contenido, por lo que no puede modificarse.</translation>
+<translation id="1408980562518920698">Administrar la información personal</translation>
 <translation id="1410197035576869800">Ícono de la app</translation>
 <translation id="1410616244180625362">Seguir permitiendo que <ph name="HOST" /> acceda a la cámara</translation>
 <translation id="1414648216875402825">Estás por actualizar a una versión inestable de <ph name="PRODUCT_NAME" /> en la que se incluyen funciones que aún se están desarrollando. Se producirán bloqueos y errores inesperados. Continúa con precaución.</translation>
@@ -431,6 +434,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">Consola &amp;JavaScript</translation>
 <translation id="1587907146729660231">Toca el botón de encendido con el dedo</translation>
+<translation id="1588200577109872591">Entradas inteligentes</translation>
 <translation id="1588438908519853928">Normal</translation>
 <translation id="158849752021629804">Se necesita red local</translation>
 <translation id="1588870296199743671">Abrir vínculo con...</translation>
@@ -666,6 +670,7 @@
 <translation id="1879000426787380528">Acceder como</translation>
 <translation id="1880905663253319515">¿Eliminar certificado "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="1884013283844450420">Red <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, conectar</translation>
+<translation id="1884705339276589024">Cambiar el tamaño del disco de Linux</translation>
 <translation id="1886996562706621347">Permitir que los sitios web soliciten convertirse en controladores predeterminados de protocolos (recomendado)</translation>
 <translation id="1887442540531652736">Error de acceso</translation>
 <translation id="1887597546629269384">Di "Ok Google" nuevamente</translation>
@@ -735,6 +740,7 @@
 <translation id="1979280758666859181">Estás por cambiar a un canal que tiene una versión anterior de <ph name="PRODUCT_NAME" />. El cambio de canal se aplicará cuando la versión del canal coincida con la versión que esté instalada en ese momento en tu dispositivo.</translation>
 <translation id="197989455406964291">KDC no es compatible con el tipo de encriptación</translation>
 <translation id="1982354452682152483">No hay descripciones disponibles.</translation>
+<translation id="1984417487208496350">Sin protección (opción no recomendada)</translation>
 <translation id="1987317783729300807">Cuentas</translation>
 <translation id="1989112275319619282">Navegar</translation>
 <translation id="1990512225220753005">No se muestran accesos directos en esta página</translation>
@@ -804,6 +810,7 @@
 <translation id="2090165459409185032">Para recuperar la información de la cuenta, accede a google.com/accounts/recovery.</translation>
 <translation id="2090876986345970080">Configuración de seguridad del sistema</translation>
 <translation id="2091887806945687916">Sonido</translation>
+<translation id="2096478741073211388">Cuando escribes palabras específicas, las sugerencias de información personal te proponen tu nombre, dirección o número de teléfono, lo que te permite escribir más rápido. Solo tú verás las sugerencias privadas y personalizadas para tu cuenta.</translation>
 <translation id="2096715839409389970">Borrar cookies de terceros</translation>
 <translation id="2097372108957554726">Debes acceder a Chrome para registrar nuevos dispositivos.</translation>
 <translation id="2099172618127234427">Estás habilitando las funciones de depuración del Sistema operativo Chrome que configurarán el daemon sshd y habilitarán el inicio desde unidades USB.</translation>
@@ -820,6 +827,7 @@
 <translation id="2114326799768592691">Volver a cargar &amp;marco</translation>
 <translation id="2114896190328250491">Foto de <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Abrir en <ph name="APP" /></translation>
+<translation id="2119461801241504254">La Navegación segura está activada y te protege contra descargas y sitios dañinos</translation>
 <translation id="2120297377148151361">Interacciones y actividad</translation>
 <translation id="2120639962942052471">Se bloqueó <ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Se bloquearon las cookies}=1{Se bloquearon las cookies; hay 1 excepción}other{Se bloquearon las cookies; hay {COUNT} excepciones}}</translation>
@@ -1000,7 +1008,6 @@
 <translation id="2342740338116612727">Se agregaron favoritos</translation>
 <translation id="2343747224442182863">Enfocar esta pestaña</translation>
 <translation id="2345723121311404059">1 página a <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Servicio de SODA</translation>
 <translation id="2347644257713614136">El uso de Hangouts y Cast for Education está regido por la Política de Privacidad de Google.</translation>
 <translation id="2348176352564285430">App: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Se produjo un error al cargar los datos</translation>
@@ -1888,6 +1895,7 @@
 <translation id="3515983984924808886">Vuelve a tocar tu llave de seguridad para confirmar el restablecimiento. Se borrará toda la información almacenada en la llave de seguridad, incluido su PIN.</translation>
 <translation id="3518985090088779359">Aceptar y continuar</translation>
 <translation id="351952459507671940">Agregar a un nuevo grupo</translation>
+<translation id="3521606918211282604">Cambiar el tamaño del disco</translation>
 <translation id="3523642406908660543">Preguntarme cuando un sitio intente usar un complemento para acceder a la computadora (recomendado)</translation>
 <translation id="3524965460886318643">Exportar actividades</translation>
 <translation id="3526034519184079374">No se pueden leer ni cambiar los datos del sitio</translation>
@@ -1975,6 +1983,7 @@
 <translation id="3629631988386925734">Ingresa tu contraseña para habilitar Smart Lock. La próxima vez, tu teléfono desbloqueará tu <ph name="DEVICE_TYPE" />. Puedes desactivar Smart Lock en la configuración.</translation>
 <translation id="3630132874740063857">Tu teléfono</translation>
 <translation id="3630995161997703415">Agrega el sitio a tu biblioteca para usarlo en cualquier momento</translation>
+<translation id="3633309367764744750">Precarga información de páginas, incluso de aquellas que aún no has visitado. Estos datos pueden incluir cookies (si están habilitadas).</translation>
 <translation id="3634507049637220048">Red <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, administrada por tu administrador, detalles</translation>
 <translation id="3635241501480133979">No se pueden arrastrar estos datos porque infringen las políticas de seguridad de tu organización.</translation>
 <translation id="3635353578505343390">Enviar comentarios a Google</translation>
@@ -2273,7 +2282,6 @@
 <translation id="3971764089670057203">Huellas digitales en esta llave de seguridad</translation>
 <translation id="3973660817924297510">Verificando contraseñas (<ph name="CHECKED_PASSWORDS" /> de <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Comunicándose con el servidor debido a un error en el dominio</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> no puede revisar las contraseñas. Inténtalo más tarde.</translation>
 <translation id="3976108569178263973">No hay impresoras disponibles.</translation>
 <translation id="397703832102027365">Finalizando...</translation>
 <translation id="3977886311744775419">Las actualizaciones automáticas no se descargan en este tipo de red, pero puedes buscar actualizaciones de forma manual.</translation>
@@ -2574,7 +2582,6 @@
 <translation id="4421932782753506458">Peludito</translation>
 <translation id="4423376891418188461">Restaurar configuración</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, tu administrador te solicita que cambies la contraseña.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> no puede revisar las contraseñas. Vuelve a intentarlo después de 24 horas.</translation>
 <translation id="4429030830601238961">No se pueden pegar estos datos porque infringen las políticas de seguridad de tu organización.</translation>
 <translation id="4430019312045809116">Volumen</translation>
 <translation id="4430369329743628066">Se agregó el marcador</translation>
@@ -2587,7 +2594,6 @@
 <translation id="4441124369922430666">¿Quieres que esta aplicación se inicie de forma automática cuando se encienda el equipo?</translation>
 <translation id="4441147046941420429">Para continuar, quita la llave de seguridad del dispositivo y, luego, vuelve a colocarla y tócala</translation>
 <translation id="444134486829715816">Mostrar...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> puede revisar las contraseñas solo cuando accedes con tu Cuenta de Google</translation>
 <translation id="4442424173763614572">Error al buscar DNS</translation>
 <translation id="4443536555189480885">&amp;Ayuda</translation>
 <translation id="4444304522807523469">Acceder a los escáneres de documentos conectados vía USB o en la red local</translation>
@@ -2614,7 +2620,6 @@
 <translation id="4476659815936224889">Para escanear este código, puedes usar una app de lectura de código QR en tu teléfono o algunas apps de cámara.</translation>
 <translation id="4477015793815781985">Incluye Ctrl, Alt o ⌘</translation>
 <translation id="4478664379124702289">Guardar vín&amp;culo como...</translation>
-<translation id="4478777936860197922">No hay contraseñas guardadas. <ph name="IDS_SHORT_PRODUCT_NAME" /> puede revisar las contraseñas cuando las guardas.</translation>
 <translation id="4479424953165245642">Administrar las aplicaciones del kiosco</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Se está configurando la máquina virtual. Es posible que este proceso demore unos minutos.</translation>
@@ -2860,7 +2865,6 @@
 <translation id="4849517651082200438">No instalar</translation>
 <translation id="4850669014075537160">Desplazamiento</translation>
 <translation id="4850886885716139402">Ver</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> te notificará cuando accedas con una contraseña hackeada</translation>
 <translation id="4853020600495124913">Abrir en una ventana &amp;nueva</translation>
 <translation id="4854317507773910281">Elige la cuenta parental para la aprobación</translation>
 <translation id="485480310608090163">Más opciones de configuración y permisos</translation>
@@ -3934,6 +3938,7 @@
 <translation id="6298962879096096191">Usar Google Play para instalar apps de Android</translation>
 <translation id="630065524203833229">&amp;Salir</translation>
 <translation id="6300718114348072351">No se pudo configurar <ph name="PRINTER_NAME" /> automáticamente. Especifica los detalles avanzados de la impresora. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Sugerencias de información personal</translation>
 <translation id="6305607932814307878">Política global:</translation>
 <translation id="6307990684951724544">Sistema ocupado</translation>
 <translation id="6308493641021088955">Acceso proporcionado por <ph name="EXTENSION_NAME" /></translation>
@@ -4012,6 +4017,7 @@
 <translation id="641081527798843608">Coincidencia de asunto</translation>
 <translation id="6412673304250309937">Revisa las URL con una lista de sitios no seguros almacenados en Chrome. Si un sitio intenta robar tu contraseña, o cuando descargas un archivo dañino, es posible que Chrome también envíe las URL, con partes del contenido de la página, a la Navegación segura.</translation>
 <translation id="6412931879992742813">Nueva ventana de incógnito</translation>
+<translation id="6413591858632097328">Esta acción borrará todos los datos y cookies que almacenó <ph name="ORIGIN_NAME" /> y sus apps instaladas.</translation>
 <translation id="641469293210305670">Instalar actualizaciones y apps</translation>
 <translation id="6414888972213066896">Les preguntaste a tus padres si puedes visitar este sitio</translation>
 <translation id="6415900369006735853">Conéctate a Internet a través de tu teléfono</translation>
@@ -4822,7 +4828,6 @@
 <translation id="7530016656428373557">Tasa de descarga en vatios</translation>
 <translation id="7531779363494549572">Ve a Configuración &gt; Apps y notificaciones &gt; Notificaciones.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> no responde. Selecciona "Forzar cierre" para cerrar la app.</translation>
-<translation id="7536333565791380193">Seguridad avanzada</translation>
 <translation id="7537451260744431038">Los sitios no pueden usar cookies para mejorar la experiencia de navegación, por ejemplo, para mantener el acceso a ellos o recordar elementos del carrito de compras.</translation>
 <translation id="7539856059004947393">Llave de seguridad Bluetooth</translation>
 <translation id="7540972813190816353">Se produjo un error al buscar actualizaciones: <ph name="ERROR" /></translation>
@@ -5063,7 +5068,6 @@
     <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> El sistema se reiniciará durante el proceso.</translation>
 <translation id="7828731929332799387">Esta acción borrará todas las cookies y datos de sitios disponibles en contextos de terceros. ¿Quieres continuar?</translation>
 <translation id="7829298379596169484">Accediendo a la entrada de audio</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> no puede revisar las contraseñas. Revisa la conexión a Internet.</translation>
 <translation id="7829877209233347340">Pídele a tu padre o madre que acceda a su cuenta a fin de otorgarte permiso para agregar la cuenta de una institución educativa</translation>
 <translation id="7830594666202422257">Conectar a Linux</translation>
 <translation id="7831491651892296503">Se produjo un error cuando se configuraba la red</translation>
@@ -5938,7 +5942,6 @@
 <translation id="8966870118594285808">Volver a abrir una pestaña si la cerraste por accidente</translation>
 <translation id="8967866634928501045">Presiona Alt+mayúscula+A para mostrar</translation>
 <translation id="8968766641738584599">Guardar la tarjeta</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> no puede revisar las contraseñas. Vuelve a intentarlo dentro de 24 horas o <ph name="BEGIN_LINK" />revisa las contraseñas en tu Cuenta de Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Esc</translation>
 <translation id="8972513834460200407">Consulta con tu administrador de red para asegurarte de que el firewall no esté bloqueando las descargas de los servidores de Google.</translation>
 <translation id="8973557916016709913">Quitar el nivel de zoom</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 046b9867..cbb66361 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -37,7 +37,7 @@
 <translation id="1041263367839475438">Dispositivos disponibles</translation>
 <translation id="1042174272890264476">El ordenador también incluye la biblioteca RLZ de <ph name="SHORT_PRODUCT_NAME" />. RLZ asigna una etiqueta identificable, no exclusiva y no personal para medir las búsquedas y el uso de <ph name="SHORT_PRODUCT_NAME" /> derivados de una determinada campaña promocional. Estas etiquetas aparecen a veces en las consultas de la Búsqueda de Google realizadas en <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1043818413152647937">¿Quieres borrar también los datos de estas aplicaciones?</translation>
-<translation id="1045448422538531528">Añadir al grupo</translation>
+<translation id="1045448422538531528">Añadir a grupo</translation>
 <translation id="1046635659603195359">Parece que ya has configurado Voice Match con el Asistente de Google en otro dispositivo. Esas grabaciones anteriores pueden servir para crear un modelo de voz en este dispositivo. No debería llevar más de un minuto.</translation>
 <translation id="104710386808485638">¿Quieres reiniciar Linux?</translation>
 <translation id="1047431265488717055">Copiar te&amp;xto de enlace</translation>
@@ -203,7 +203,7 @@
 <translation id="1259152067760398571">La comprobación de seguridad se ejecutó ayer</translation>
 <translation id="1260451001046713751">Permitir siempre ventanas emergentes y redirecciones de <ph name="HOST" /></translation>
 <translation id="126156426083987769">Ha habido un problema con las licencias del modo de demostración del dispositivo.</translation>
-<translation id="1263490604593716556">Cuenta gestionada por <ph name="FIRST_PARENT_EMAIL" /> y <ph name="SECOND_PARENT_EMAIL" />. Para cerrar la sesión en la cuenta principal de este dispositivo, haz clic en la hora que aparece en la pantalla. En el menú que aparecerá, haz clic en Cerrar sesión.</translation>
+<translation id="1263490604593716556">Cuenta gestionada por <ph name="FIRST_PARENT_EMAIL" /> y <ph name="SECOND_PARENT_EMAIL" />. Para cerrar la sesión en la cuenta principal de este dispositivo, haz clic en la hora que se muestra en la pantalla. En el menú que aparecerá, haz clic en Cerrar sesión.</translation>
 <translation id="126710816202626562">Idioma de traducción:</translation>
 <translation id="126768002343224824">16x</translation>
 <translation id="1272079795634619415">Interrumpir</translation>
@@ -880,7 +880,7 @@
 <translation id="2172784515318616985">Continuar</translation>
 <translation id="2173302385160625112">Comprueba tu conexión a Internet</translation>
 <translation id="2173801458090845390">Añadir solicitud de ID para este dispositivo</translation>
-<translation id="2174948148799307353">Cuenta gestionada por <ph name="PARENT_EMAIL" />. Para cerrar la sesión en la cuenta principal de este dispositivo, haz clic en la hora que aparece en la pantalla. En el menú que aparecerá, haz clic en Cerrar sesión.</translation>
+<translation id="2174948148799307353">Cuenta gestionada por <ph name="PARENT_EMAIL" />. Para cerrar la sesión en la cuenta principal de este dispositivo, haz clic en la hora que se muestra en la pantalla. En el menú que aparecerá, haz clic en Cerrar sesión.</translation>
 <translation id="2175607476662778685">Barra de inicio rápido</translation>
 <translation id="217576141146192373">No se ha podido añadir la impresora. Revisa la configuración de tu impresora y vuelve a intentarlo.</translation>
 <translation id="2177950615300672361">Pestaña de incógnito: <ph name="TAB_NAME" /></translation>
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Se han añadido marcadores</translation>
 <translation id="2343747224442182863">Destacar esta pestaña</translation>
 <translation id="2345723121311404059">1 página a <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Servicio SODA</translation>
 <translation id="2347644257713614136">El uso de Hangouts y Cast for Education está sujeto a la política de privacidad de Google.</translation>
 <translation id="2348176352564285430">Aplicación: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Error al cargar los datos</translation>
@@ -1859,7 +1858,7 @@
 <translation id="3468999815377931311">Teléfono Android</translation>
 <translation id="3470442499439619530">Eliminar este usuario</translation>
 <translation id="3471876058939596279">No se pueden usar los puertos HDMI y USB tipo C para vídeo al mismo tiempo. Usa otro puerto de vídeo.</translation>
-<translation id="3473241910002674503">Desplázate al escritorio, vuelve y cambia de aplicación con botones en el modo tablet.</translation>
+<translation id="3473241910002674503">Desplázate al menú de aplicaciones, vuelve atrás y cambia de aplicación con botones en el modo tablet.</translation>
 <translation id="3473479545200714844">Lupa</translation>
 <translation id="3475843873335999118">Sigue sin reconocerse tu huella digital. Introduce la contraseña.</translation>
 <translation id="3476303763173086583">Enviar datos de uso y diagnóstico. Contribuye a mejorar la experiencia de Android de tu hijo enviando automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos recogidos también ayudarán a las aplicaciones y los colaboradores de Google, como los desarrolladores de Android. El propietario ha aplicado este <ph name="BEGIN_LINK1" />ajuste<ph name="END_LINK1" />. El propietario puede elegir si se envían a Google datos de uso y diagnóstico de este dispositivo. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo. <ph name="BEGIN_LINK2" />Más información<ph name="END_LINK2" /></translation>
@@ -2285,7 +2284,6 @@
 <translation id="3971764089670057203">Huellas digitales de esta llave de seguridad</translation>
 <translation id="3973660817924297510">Comprobando contraseñas (<ph name="CHECKED_PASSWORDS" /> de <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Se ha producido un error al contactar con el servidor del dominio</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> no puede comprobar tus contraseñas. Vuelve a intentarlo más tarde.</translation>
 <translation id="3976108569178263973">No hay impresoras disponibles.</translation>
 <translation id="397703832102027365">Finalizando...</translation>
 <translation id="3977886311744775419">Este tipo de red no admite que se descarguen actualizaciones de forma automática, pero puedes buscar actualizaciones manualmente.</translation>
@@ -2586,7 +2584,6 @@
 <translation id="4421932782753506458">Gatito</translation>
 <translation id="4423376891418188461">Restaurar configuración</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, tu administrador solicita que cambies la contraseña.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> no puede comprobar tus contraseñas. Vuelve a intentarlo en 24 horas.</translation>
 <translation id="4429030830601238961">Estos datos infringen las políticas de seguridad de tu organización y no se pueden pegar.</translation>
 <translation id="4430019312045809116">Volumen</translation>
 <translation id="4430369329743628066">Añadida a Marcadores</translation>
@@ -2599,7 +2596,6 @@
 <translation id="4441124369922430666">¿Quieres que esta aplicación se inicie de forma automática cuando se active el ordenador?</translation>
 <translation id="4441147046941420429">Para seguir, saca la llave de seguridad del dispositivo, vuelve a meterla y pulsa el botón de activación.</translation>
 <translation id="444134486829715816">Ampliar...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> puede comprobar tus contraseñas si inicias sesión con tu cuenta de Google.</translation>
 <translation id="4442424173763614572">Error al buscar DNS</translation>
 <translation id="4443536555189480885">&amp;Ayuda</translation>
 <translation id="4444304522807523469">Acceder a escáneres de documentos conectados a través de USB o en la red local</translation>
@@ -2626,7 +2622,6 @@
 <translation id="4476659815936224889">Para escanear este código, puedes usar una aplicación de escaneo de QR de tu teléfono o algunas aplicaciones de cámara.</translation>
 <translation id="4477015793815781985">Incluye Ctrl, Alt o ⌘</translation>
 <translation id="4478664379124702289">Guardar enlac&amp;e como...</translation>
-<translation id="4478777936860197922">No hay ninguna contraseña guardada. <ph name="IDS_SHORT_PRODUCT_NAME" /> puede comprobar tus contraseñas cuando las guardas.</translation>
 <translation id="4479424953165245642">Administrar aplicaciones del kiosco</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Se está configurando la máquina virtual. Este proceso puede tardar unos minutos.</translation>
@@ -2872,7 +2867,6 @@
 <translation id="4849517651082200438">No instalar</translation>
 <translation id="4850669014075537160">Desplazamiento</translation>
 <translation id="4850886885716139402">Ver</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> te enviará una notificación cuando inicies sesión con una contraseña vulnerada</translation>
 <translation id="4853020600495124913">Abrir en una ventana &amp;nueva</translation>
 <translation id="4854317507773910281">Elige una cuenta parental para la aprobación</translation>
 <translation id="485480310608090163">Más ajustes y permisos</translation>
@@ -2891,7 +2885,7 @@
 <translation id="4871322859485617074">El PIN contiene caracteres no válidos</translation>
 <translation id="4871370605780490696">Añadir marcador</translation>
 <translation id="4871719318659334896">Cerrar grupo</translation>
-<translation id="4871852311166078968">Añadir al grupo</translation>
+<translation id="4871852311166078968">Añadir a grupo</translation>
 <translation id="4873312501243535625">Comprobador de archivos multimedia</translation>
 <translation id="4876273079589074638">Cuéntanos lo que ocurrió paso a paso para que nuestros ingenieros puedan investigar y solucionar el error. Cualquier detalle es importante.</translation>
 <translation id="4876895919560854374">Bloquear y desbloquear la pantalla</translation>
@@ -4836,7 +4830,6 @@
 <translation id="7530016656428373557">Tasa de descarga en vatios</translation>
 <translation id="7531779363494549572">Accede a Ajustes &gt; Aplicaciones y notificaciones &gt; Notificaciones.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> no responde. Selecciona "Forzar cierre" para cerrar la aplicación.</translation>
-<translation id="7536333565791380193">Seguridad avanzada</translation>
 <translation id="7537451260744431038">Los sitios web no pueden usar cookies para mejorar tu experiencia de navegación, por ejemplo, para mantener tu sesión iniciada o recordar los artículos de tu carrito de la compra</translation>
 <translation id="7539856059004947393">Llave de seguridad Bluetooth</translation>
 <translation id="7540972813190816353">Se ha producido un error al comprobar las actualizaciones: <ph name="ERROR" /></translation>
@@ -5077,7 +5070,6 @@
     <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> El sistema se reiniciará durante el proceso.</translation>
 <translation id="7828731929332799387">Se eliminarán todas las cookies y los datos de sitios web disponibles en contextos de terceros. ¿Quieres continuar?</translation>
 <translation id="7829298379596169484">Accediendo a la entrada de audio</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> no puede comprobar tus contraseñas. Revisa tu conexión a Internet.</translation>
 <translation id="7829877209233347340">Pídele a tu padre o a tu madre que inicie sesión para permitir que se añada una cuenta de centro educativo</translation>
 <translation id="7830594666202422257">Conectar a Linux</translation>
 <translation id="7831491651892296503">No se ha podido configurar la red</translation>
@@ -5295,7 +5287,7 @@
 <translation id="8107015733319732394">Se está instalando Google Play Store en tu <ph name="DEVICE_TYPE" />. Este proceso puede tardar unos minutos.</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{No hay cookies de terceros}=1{Se ha bloqueado 1 cookie de terceros}other{Se han bloqueado # cookies de terceros}}</translation>
 <translation id="810875025413331850">No se ha encontrado ningún dispositivo cerca.</translation>
-<translation id="8114199541033039755">Desplázate al escritorio, vuelve y cambia de aplicación con botones en el modo tablet. Se activa cuando ChromeVox o los clics automáticos están habilitados.</translation>
+<translation id="8114199541033039755">Desplázate al menú de aplicaciones, vuelve atrás y cambia de aplicación con botones en el modo tablet. Se activa cuando están habilitados ChromeVox o los clics automáticos.</translation>
 <translation id="8114875720387900039">División horizontal</translation>
 <translation id="8116972784401310538">Administrador de &amp;marcadores</translation>
 <translation id="8117620576188476503">Administra los ajustes, conexiones y actualizaciones con la bandeja de estado. Para acceder a ella con el teclado, pulsa Alt + Mayús + S.</translation>
@@ -5415,7 +5407,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> ha inhabilitado el cursor de tu ratón.</translation>
 <translation id="8264024885325823677">Este ajuste lo gestiona tu administrador.</translation>
 <translation id="8264718194193514834"><ph name="EXTENSION_NAME" /> ha activado el modo de pantalla completa.</translation>
-<translation id="826511437356419340">Se ha cambiado al modo de vista general. Desliza el dedo para desplazarte o pulsa el tabulador si usas un teclado.</translation>
+<translation id="826511437356419340">Se ha cambiado al modo de vista general de la ventana. Desliza el dedo para desplazarte o pulsa el tabulador si estás utilizando un teclado.</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Se trata de información general sobre el dispositivo y su uso, como el nivel de batería, la actividad de las aplicaciones y del sistema, y los errores. Sirve para mejorar Android, y parte de los datos recogidos también ayudan a las aplicaciones y partners de Google, como los desarrolladores de Android, a mejorar sus productos y aplicaciones.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />Si la opción se desactiva, esto no afectará a la capacidad del dispositivo de enviar la información necesaria para recibir servicios esenciales, como actualizaciones del sistema y funciones de seguridad.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />El propietario puede controlar esta función en Ajustes &gt; Configuración avanzada &gt; Enviar automáticamente los datos de uso y diagnóstico a Google.<ph name="END_PARAGRAPH3" />
@@ -5952,7 +5944,6 @@
 <translation id="8966870118594285808">Vuelve a abrir una pestaña si se cierra por error</translation>
 <translation id="8967866634928501045">Pulsa Alt + Mayús + A para mostrarlo</translation>
 <translation id="8968766641738584599">Guardar tarjeta</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> no puede comprobar tus contraseñas. Vuelve a intentarlo en 24 horas o <ph name="BEGIN_LINK" />comprueba las contraseñas en tu cuenta de Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Esc</translation>
 <translation id="8972513834460200407">Consulta al administrador de tu red para asegurarte de que el cortafuegos no está bloqueando las descargas procedentes de los servidores de Google.</translation>
 <translation id="8973557916016709913">Quitar el nivel de zoom</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 8e6ee82..c3913bb0 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Järjehoidja nimi</translation>
 <translation id="1124772482545689468">Kasutaja</translation>
 <translation id="1125550662859510761">Näib kui <ph name="WIDTH" /> × <ph name="HEIGHT" /> (loomulik eraldusvõime)</translation>
+<translation id="1126809382673880764">Ei kaitse teid ohtlike veebisaitide, allalaadimiste ega laienduste eest. Google'i ohutu sirvimine kaitseb teid siiski muudes Google'i teenustes, kus see saadaval on (nt Gmail ja Otsing).</translation>
 <translation id="1128109161498068552">Ära luba ühelgi saidil kasutada süsteemi eksklusiivseid sõnumeid MIDI-seadmetele juurdepääsu saamiseks</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Otsingumootori muutmine</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Teadaolevad võrgud</translation>
 <translation id="123578888592755962">Ketas on täis</translation>
 <translation id="1238191093934674082">Avatud VPN</translation>
+<translation id="1239439601391236986">Kuva sisestamisel isiklike andmete soovitusi</translation>
 <translation id="1239594683407221485">Avastage seadme sisu rakenduses Failid.</translation>
 <translation id="124116460088058876">Rohkem keeli</translation>
 <translation id="1241753985463165747">Aktiveerimisel saate praegusel veebisaidil lugeda ja muuta kõiki oma andmeid</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Mobiilsidevõrgu aktiveerimine</translation>
 <translation id="1407489512183974736">Keskel, kärbitud</translation>
 <translation id="1408504635543854729">Avastage seadme sisu rakenduses Failid. Sisu piirab administraator ja seda ei saa muuta.</translation>
+<translation id="1408980562518920698">Isiklike andmete haldamine</translation>
 <translation id="1410197035576869800">Rakenduse ikoon</translation>
 <translation id="1410616244180625362">Luba saidil <ph name="HOST" /> ka edaspidi kaamera juurde pääseda</translation>
 <translation id="1414648216875402825">Kavatsete üle minna rakenduse <ph name="PRODUCT_NAME" /> ebastabiilsele versioonile, mis sisaldab pooleliolevaid funktsioone. Tekivad krahhid ja ootamatud vead. Olge jätkamisel ettevaatlik.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript i konsool</translation>
 <translation id="1587907146729660231">Puudutage sõrmega toitenuppu</translation>
+<translation id="1588200577109872591">Nutikad sisendid</translation>
 <translation id="1588438908519853928">Tavaline</translation>
 <translation id="158849752021629804">Vajalik koduvõrk</translation>
 <translation id="1588870296199743671">Lingi avamine rakendusega ...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Logi sisse kasutajanimega</translation>
 <translation id="1880905663253319515">Kas kustutada sertifikaat „<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_INDEX" />. võrk <ph name="NETWORK_COUNT" />-st, <ph name="NETWORK_NAME" />, ühenda</translation>
+<translation id="1884705339276589024">Linuxi ketta suuruse muutmine</translation>
 <translation id="1886996562706621347">Võimalda saitidel küsida luba protokollide vaikimisi töötlemiseks (soovitatav)</translation>
 <translation id="1887442540531652736">Viga sisselogimisel</translation>
 <translation id="1887597546629269384">Öelge uuesti „Hey Google”</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Lülitute teenuse <ph name="PRODUCT_NAME" /> vanema versiooniga kanalile. Kanalivahetus rakendub, kui kanali versioon kattub teie seadmesse parajasti installitud versiooniga.</translation>
 <translation id="197989455406964291">KDC ei toeta krüpteerimistüüpi</translation>
 <translation id="1982354452682152483">Kirjeldus ei ole saadaval.</translation>
+<translation id="1984417487208496350">Kaitseta (ei ole soovitatav)</translation>
 <translation id="1987317783729300807">Kontod</translation>
 <translation id="1989112275319619282">Sirvi</translation>
 <translation id="1990512225220753005">Ära kuva sellel lehel otseteid</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Konto teabe taastamiseks minge aadressile: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Süsteemi turvaseade</translation>
 <translation id="2091887806945687916">Heli</translation>
+<translation id="2096478741073211388">Isiklike andmete soovitused aitavad teil kiiremini kirjutada, soovitades teatud sõnade kirjutamisel teie nime, aadressi või telefoninumbrit. Ainult teie näete oma konto privaatseid ja isikupärastatud soovitusi.</translation>
 <translation id="2096715839409389970">Kustuta kolmanda osapoole küpsisefailid</translation>
 <translation id="2097372108957554726">Uute seadmete registreerimiseks peate Chrome'i sisse logima</translation>
 <translation id="2099172618127234427">Soovite lubada Chrome OS-i silumisfunktsioonid, mis seadistavad üksuse sshd daemon ja lubavad käivitamise USB-kettalt.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Laadi &amp;raam uuesti</translation>
 <translation id="2114896190328250491">Foto autor: <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Avamine rakenduses <ph name="APP" /></translation>
+<translation id="2119461801241504254">Google'i ohutu sirvimine on sisse lülitatud ning kaitseb teid ohtlike saitide ja allalaadimiste eest</translation>
 <translation id="2120297377148151361">Tegevused ja interaktsioonid</translation>
 <translation id="2120639962942052471">Blokeeriti <ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Küpsisefailid on blokeeritud}=1{Küpsisefailid on blokeeritud; 1 erand}other{Küpsisefailid on blokeeritud; {COUNT} erandit}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Järjehoidjad on lisatud</translation>
 <translation id="2343747224442182863">Tõsta see vaheleht esile</translation>
 <translation id="2345723121311404059">Üks leht printerisse <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA teenus</translation>
 <translation id="2347644257713614136">Hangoutsi ja Cast for Educationi kasutamisel kehtivad Google'i privaatsuseeskirjad.</translation>
 <translation id="2348176352564285430">Rakendus: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Viga andmete laadimisel</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">Lähtestamise kinnitamiseks puudutage turvavõtit. Kogu turvavõtmele salvestatud teave, sh selle PIN-kood, kustutatakse.</translation>
 <translation id="3518985090088779359">Nõustu ja jätka</translation>
 <translation id="351952459507671940">Uude gruppi lisamine</translation>
+<translation id="3521606918211282604">Ketta suuruse muutmine</translation>
 <translation id="3523642406908660543">Küsi, kui sait soovib arvutile juurdepääsemiseks kasutada pistikprogrammi (soovitatav)</translation>
 <translation id="3524965460886318643">Ekspordi tegevused</translation>
 <translation id="3526034519184079374">Saidi andmeid ei saa lugeda ega muuta</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Sisestage oma parool, et Smart Lock sisse lülitada. Järgmisel korral avab seadme <ph name="DEVICE_TYPE" /> teie telefon. Funktsiooni Smart Lock saab välja lülitada menüüs Seaded.</translation>
 <translation id="3630132874740063857">Teie telefon</translation>
 <translation id="3630995161997703415">Lisage sait riiulisse, et see oleks alati käepärast</translation>
+<translation id="3633309367764744750">Hangib lehtedelt (sh nendelt, mida te pole veel külastanud) teavet ette. Hangitud teave võib hõlmata küpsisefaile, kui olete need lubanud.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_INDEX" />. võrk <ph name="NETWORK_COUNT" />-st, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, võrku haldab teie administraator, üksikasjad</translation>
 <translation id="3635241501480133979">Need andmed rikuvad teie organisatsiooni turvaeeskirju ja neid ei saa pukseerida.</translation>
 <translation id="3635353578505343390">Google’ile tagasiside saatmine</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">Sellel turvavõtmel olevad sõrmejäljed</translation>
 <translation id="3973660817924297510">Paroolide kontrollimine (<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />) …</translation>
 <translation id="3975565978598857337">Valduse jaoks serveriga ühenduse loomine nurjus</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ei saa teie paroole kontrollida. Proovige hiljem uuesti.</translation>
 <translation id="3976108569178263973">Ühtegi printerit pole saadaval.</translation>
 <translation id="397703832102027365">Lõpetamine ...</translation>
 <translation id="3977886311744775419">See võrgu tüüp ei toeta automaatsete värskenduste allalaadimist, kuid võite värskendusi kontrollida käsitsi.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">Miisu</translation>
 <translation id="4423376891418188461">Taasta seaded</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, administraator nõuab, et muudaksite parooli.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ei saa teie paroole kontrollida. Proovige uuesti 24 tunni pärast.</translation>
 <translation id="4429030830601238961">Need andmed rikuvad teie organisatsiooni turvaeeskirju ja neid ei saa kleepida.</translation>
 <translation id="4430019312045809116">Helitugevus</translation>
 <translation id="4430369329743628066">Järjehoidja on lisatud</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">Kas soovite selle rakenduse seadme sisselülitamisel automaatselt käivitada?</translation>
 <translation id="4441147046941420429">Jätkamiseks eemaldage turvavõti oma seadmest, sisestage see uuesti ja puudutage seda</translation>
 <translation id="444134486829715816">Laienda ...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> saab teie paroole kontrollida siis, kui logite sisse oma Google'i kontoga</translation>
 <translation id="4442424173763614572">DNS-i otsing nurjus</translation>
 <translation id="4443536555189480885">&amp;Abi</translation>
 <translation id="4444304522807523469">Juurdepääs dokumendiskänneritele USB või kohaliku võrgu kaudu</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">Selle koodi skannimiseks võite oma telefonis kasutada QR-skannerit või mõnda kaamerarakendust.</translation>
 <translation id="4477015793815781985">Kaasake Ctrl, Alt või ⌘</translation>
 <translation id="4478664379124702289">&amp;Salvesta link nimega...</translation>
-<translation id="4478777936860197922">Salvestatud paroole ei ole. <ph name="IDS_SHORT_PRODUCT_NAME" /> saab teie paroole kontrollida, kui olete need salvestanud.</translation>
 <translation id="4479424953165245642">Halda kioski rakendusi</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Virtuaalseadme seadistamine. See võib võtta mitu minutit.</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">Ära installi</translation>
 <translation id="4850669014075537160">Kerimine</translation>
 <translation id="4850886885716139402">Kuva</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> teavitab teid, kui logite sisse ohustatud parooliga</translation>
 <translation id="4853020600495124913">Ava &amp;uues aknas</translation>
 <translation id="4854317507773910281">Vali kinnitamiseks vanema konto</translation>
 <translation id="485480310608090163">Rohkem seadeid ja lube</translation>
@@ -3937,6 +3941,7 @@
 <translation id="6298962879096096191">Androidi rakenduste installimiseks kasutatakse Google Playd</translation>
 <translation id="630065524203833229">V&amp;älju</translation>
 <translation id="6300718114348072351">Printerit <ph name="PRINTER_NAME" /> ei saanud automaatselt seadistada. Esitage printeri täpsemad üksikasjad. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Isiklike andmete soovitused</translation>
 <translation id="6305607932814307878">Üldised eeskirjad:</translation>
 <translation id="6307990684951724544">Süsteem on hõivatud</translation>
 <translation id="6308493641021088955">Sisselogimise funktsiooni pakub <ph name="EXTENSION_NAME" /></translation>
@@ -4015,6 +4020,7 @@
 <translation id="641081527798843608">Teema vaste</translation>
 <translation id="6412673304250309937">Kontrollib URL-e Chrome'i talletatud ohtlike saitide loendi alusel. Kui sait üritab teie parooli varastada või laadite alla kahjuliku faili, võib Chrome saata URL-id ja lehe sisu osad teenusesse Google'i ohutu sirvimine.</translation>
 <translation id="6412931879992742813">Uus inkognitoaken</translation>
+<translation id="6413591858632097328">See kustutab kõik saidi <ph name="ORIGIN_NAME" /> ning selle installitud rakenduste salvestatud andmed ja küpsisefailid.</translation>
 <translation id="641469293210305670">Värskenduste ja rakenduste installimine</translation>
 <translation id="6414888972213066896">Küsisite vanemalt, kas võite seda saiti külastada</translation>
 <translation id="6415900369006735853">Looge Interneti-ühendus telefoni kaudu</translation>
@@ -4825,7 +4831,6 @@
 <translation id="7530016656428373557">Tühjenemise määr vattides</translation>
 <translation id="7531779363494549572">Avage jaotis Seaded &gt; Rakendused ja märguanded &gt; Märguanded.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ei reageeri. Rakenduse sulgemiseks valige käsk „Sundpeata”.</translation>
-<translation id="7536333565791380193">Täiustatud turvalisus</translation>
 <translation id="7537451260744431038">Saidid ei saa kasutada küpsisefaile teie sirvimiskogemuse täiustamiseks, näiteks selleks, et hoida teid sisselogituna või jätta meelde teie ostukorvis olevad esemed</translation>
 <translation id="7539856059004947393">Bluetoothi turvavõti</translation>
 <translation id="7540972813190816353">Värskenduste otsimisel ilmnes viga: <ph name="ERROR" /></translation>
@@ -5066,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Märkus.<ph name="END_BOLD" />  Protsessi käigus süsteem taaskäivitatakse.</translation>
 <translation id="7828731929332799387">See kustutab kõik kolmanda osapoole pakutavad küpsisefailid ja saidi andmed. Kas soovite jätkata?</translation>
 <translation id="7829298379596169484">Juurdepääs helisisendile</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ei saa teie paroole kontrollida. Kontrollige internetiühendust.</translation>
 <translation id="7829877209233347340">Palu vanemal sisse logida, et ta annaks loa koolikonto lisamiseks</translation>
 <translation id="7830594666202422257">Ühenda Linuxiga</translation>
 <translation id="7831491651892296503">Viga võrgu seadistamisel</translation>
@@ -5941,7 +5945,6 @@
 <translation id="8966870118594285808">Saate kogemata suletud vahelehe uuesti avada</translation>
 <translation id="8967866634928501045">Kuvamiseks vajutage klahvi Alt + tõstuklahvi + klahvi A</translation>
 <translation id="8968766641738584599">Salvesta kaart</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ei saa teie paroole kontrollida. Proovige uuesti 24 tunni pärast või <ph name="BEGIN_LINK" />kontrollige oma Google'i kontol paroole<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Klahv Escape</translation>
 <translation id="8972513834460200407">Paluge oma võrguadministraatoril tagada, et tulemüür ei blokeeriks allalaaditavaid faile Google'i serveritest.</translation>
 <translation id="8973557916016709913">Suumitaseme eemaldamine</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index cbb54b63..21bb64bb 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Laster-markaren izena</translation>
 <translation id="1124772482545689468">Erabiltzailea</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> dirudi (natiboa)</translation>
+<translation id="1126809382673880764">Ez zaitu babesten webgune, deskarga eta luzapen kaltegarrien aurka. Erabilgarri dagoenean, arakatze seguruaren babesa jasotzen jarraituko duzu Google-ren beste zerbitzu batzuetan (Gmail-en eta Bilaketa zerbitzuan, esaterako).</translation>
 <translation id="1128109161498068552">Ez baimendu webguneei sistemaren mezu esklusiboak MIDI gailuak atzitzeko erabiltzea</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Editatu bilatzailea</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Sare ezagunak</translation>
 <translation id="123578888592755962">Diskoa beteta dago</translation>
 <translation id="1238191093934674082">VPN sare irekia</translation>
+<translation id="1239439601391236986">Erakutsi informazio pertsonalari buruzko iradokizunak</translation>
 <translation id="1239594683407221485">Arakatu gailuko edukia Fitxategiak aplikazioan.</translation>
 <translation id="124116460088058876">Hizkuntza gehiago</translation>
 <translation id="1241753985463165747">Abiarazitakoan, irakurri eta aldatu uneko webgunean dituzun datu guztiak</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Sare mugikorretarako SIM txartelak aktibatzea</translation>
 <translation id="1407489512183974736">Moztu erdialdea uzteko</translation>
 <translation id="1408504635543854729">Arakatu gailuko eduki guztia Fitxategiak aplikazioan. Edukiaren inguruko aukerak murriztuta daude: administratzaileak bakarrik egin ditzake aldaketak.</translation>
+<translation id="1408980562518920698">Kudeatu informazio pertsonala</translation>
 <translation id="1410197035576869800">Aplikazioaren ikonoa</translation>
 <translation id="1410616244180625362">Jarraitu <ph name="HOST" /> ostalariari zure kamera atzitzea baimentzen</translation>
 <translation id="1414648216875402825">Garatzen ari diren eginbideak dituen <ph name="PRODUCT_NAME" /> sistemaren bertsio ezegonkor batera eguneratzen ari zara. Hutsegiteak eta ustekabeko erroreak gertatuko dira. Ibil zaitez kontuz.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript kontsola</translation>
 <translation id="1587907146729660231">Sakatu etengailua hatzarekin</translation>
+<translation id="1588200577109872591">Idazketa adimenduna</translation>
 <translation id="1588438908519853928">Arrunta</translation>
 <translation id="158849752021629804">Sare lokala behar da</translation>
 <translation id="1588870296199743671">Ireki esteka honekin…</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Hasi saioa kontu honekin:</translation>
 <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" ziurtagiria ezabatu nahi duzu?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> sarea. <ph name="NETWORK_NAME" />. Konektatu.</translation>
+<translation id="1884705339276589024">Aldatu Linux-eko diskoaren tamaina</translation>
 <translation id="1886996562706621347">Baimendu webguneei protokoloen kudeatzaile lehenetsi bihurtzeko baimena eskatzea (gomendatua)</translation>
 <translation id="1887442540531652736">Errore bat gertatu da saioa hastean</translation>
 <translation id="1887597546629269384">Esan berriro "Ok Google"</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181"><ph name="PRODUCT_NAME" /> sistemaren bertsio zaharragoa duen kanal batera aldatzen ari zara. Kanalaren bertsioa gailuan instalatutakoarekin bat datorrenean aldatuko da kanala.</translation>
 <translation id="197989455406964291">KDC zentroak ez du onartzen enkriptatze mota hori</translation>
 <translation id="1982354452682152483">Ez dago azalpenik.</translation>
+<translation id="1984417487208496350">Babesik gabe (ez da gomendatzen)</translation>
 <translation id="1987317783729300807">Kontuak</translation>
 <translation id="1989112275319619282">Arakatu</translation>
 <translation id="1990512225220753005">Ez erakutsi lasterbideak orri honetan</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Kontuko informazioa berreskuratzeko, joan hona: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Sistemaren segurtasun-ezarpena</translation>
 <translation id="2091887806945687916">Soinua</translation>
+<translation id="2096478741073211388">Informazio pertsonalari buruzko iradokizunek izena, helbidea edo telefono-zenbakia iradokitzen dizute hitz zehatz batzuk azkarrago idatz ditzazun. Kontuan gorde dituzun iradokizun pribatuak eta pertsonalizatuak zuk bakarrik ikusten dituzu.</translation>
 <translation id="2096715839409389970">Garbitu hirugarrenen cookieak</translation>
 <translation id="2097372108957554726">Gailu gehiago erregistratzeko, saioa hasi behar duzu Chrome-n</translation>
 <translation id="2099172618127234427">Chrome OS sistemarekin arazte-eginbideak gaitzen ari zara. Eginbide horiek sshd daemon konfiguratuko dute, eta USB memorietatik abiaraztea gaitu.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">&amp;Kargatu markoa berriro</translation>
 <translation id="2114896190328250491">Argazkiaren egilea: <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Ireki <ph name="APP" /> aplikazioan</translation>
+<translation id="2119461801241504254">Arakatze segurua aktibatuta dago, eta webgune eta deskarga kaltegarrietatik babesten zaitu</translation>
 <translation id="2120297377148151361">Jarduerak eta interakzioak</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> blokeatu da</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Cookieak blokeatuta daude}=1{Cookieak blokeatuta daude, salbuespen batekin}other{Cookieak blokeatuta daude, {COUNT} salbuespenekin}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Laster-markak gehitu dira</translation>
 <translation id="2343747224442182863">Fokuratu fitxa</translation>
 <translation id="2345723121311404059">1 orri <ph name="PRINTER_NAME" /> inprimagailura</translation>
-<translation id="2346953515226895098">SODA zerbitzua</translation>
 <translation id="2347644257713614136">Google-ren Pribatutasun-gidalerroek arautzen dute Hangouts-en eta Cast for Education-en erabilera.</translation>
 <translation id="2348176352564285430">Aplikazioa: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Errore bat gertatu da datuak kargatzean</translation>
@@ -1789,7 +1796,7 @@
 <translation id="3396800784455899911">"Onartu eta egin aurrera" botoia sakatuta, onartu egingo duzu Google-ren zerbitzuok prozesatzeko modua, arestian aipatu bezala.</translation>
 <translation id="3399432415385675819">Desgaitu egingo dira jakinarazpenak</translation>
 <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertz) - gurutzatuta</translation>
-<translation id="3402585168444815892">Demo moduan erregistratu</translation>
+<translation id="3402585168444815892">Demo moduan erregistratzen</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Ez da gorde webgune honetako pasahitzik</translation>
 <translation id="3405664148539009465">Pertsonalizatu letrak</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">Berrezarri nahi duzula berresteko, sakatu segurtasun-giltza. Ezabatu egingo da segurtasun-giltzan gordetako informazio guztia (PIN kodea barne).</translation>
 <translation id="3518985090088779359">Onartu eta jarraitu</translation>
 <translation id="351952459507671940">Gehitu talde berrian</translation>
+<translation id="3521606918211282604">Aldatu diskoaren tamaina</translation>
 <translation id="3523642406908660543">Galdetu webguneek plugin bat erabili nahi dutenean ordenagailua atzitzeko (gomendatua)</translation>
 <translation id="3524965460886318643">Esportatu jarduerak</translation>
 <translation id="3526034519184079374">Ezin dira irakurri edo aldatu webgunearen datuak</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Smart Lock gaitzeko, idatzi pasahitza. Hurrengoan, telefonoak desblokeatuko du <ph name="DEVICE_TYPE" /> gailua. Smart Lock desaktibatzeko, joan ezarpenetara.</translation>
 <translation id="3630132874740063857">Zure telefonoa</translation>
 <translation id="3630995161997703415">Gehitu webgunea biltegian edonoiz erabili ahal izateko</translation>
+<translation id="3633309367764744750">Orrien informazioa aurretik kargatzen du, oraindik ikusi ez dituzun orriak barne. Kargatutako informazioaren artean baliteke cookie-ak egotea, haiek onartzen badituzu.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> sarea. <ph name="NETWORK_NAME" /> (<ph name="CONNECTION_STATUS" />). Administratzaileak kudeatua. Xehetasunak.</translation>
 <translation id="3635241501480133979">Datu hauek erakundearen segurtasun-gidalerroak urratzen dituzte eta ezin dira jaregin.</translation>
 <translation id="3635353578505343390">Bidali oharrak Google-ri</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">Segurtasun-fitxa honetako hatz-markak</translation>
 <translation id="3973660817924297510">Pasahitzak egiaztatzen (<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Ezin izan da jarri domeinuaren zerbitzariarekin harremanetan</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ez da pasahitzak egiaztatzeko gai. Saiatu geroago.</translation>
 <translation id="3976108569178263973">Ez dago inprimagailurik erabilgarri.</translation>
 <translation id="397703832102027365">Amaitzen…</translation>
 <translation id="3977886311744775419">Eguneratze automatikoak ez dira deskargatuko mota honetako sareetan, baina eskuz bila ditzakezu.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">Katutxoa</translation>
 <translation id="4423376891418188461">Berrezarri ezarpenak</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, pasahitza aldatzeko eskatu dizu administratzaileak.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ez da pasahitzak egiaztatzeko gai. Saiatu berriro 24 ordu barru.</translation>
 <translation id="4429030830601238961">Datu hauek erakundearen segurtasun-gidalerroak urratzen dituzte eta ezin dira itsatsi.</translation>
 <translation id="4430019312045809116">Bolumena</translation>
 <translation id="4430369329743628066">Gehitu da laster-marka</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">Gailua pizten duzunean aplikazioa automatikoki hastea nahi duzu?</translation>
 <translation id="4441147046941420429">Aurrera egiteko, atera segurtasun-giltza gailutik, sar ezazu berriro eta, ondoren, sakatu</translation>
 <translation id="444134486829715816">Zabaldu…</translation>
-<translation id="4442329324652245220">Saioa Google-ko kontu batekin hasten baduzu, pasahitzak egiaztatzeko gai izango da <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4442424173763614572">DNS bilaketak huts egin du</translation>
 <translation id="4443536555189480885">&amp;Laguntza</translation>
 <translation id="4444304522807523469">Atzitu USB bidez konektatuta edo sare lokalean dauden dokumentu-eskaneatzaileak</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">Kode hau eskaneatzeko, QR kodeak eskaneatzeko berariazko aplikazio bat edo kamera-aplikazio batzuk erabil ditzakezu.</translation>
 <translation id="4477015793815781985">Erabili Ktrl, Alt edo ⌘</translation>
 <translation id="4478664379124702289">Gorde &amp;esteka honela…</translation>
-<translation id="4478777936860197922">Ez dago pasahitzik gordeta. Gordetako pasahitzak egiaztatzeko gai da <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="4479424953165245642">Kudeatu aplikazio espezializatuak</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Makina birtuala konfiguratzen. Agian minutu batzuk beharko dira.</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">Ez instalatu</translation>
 <translation id="4850669014075537160">Desplazamendua</translation>
 <translation id="4850886885716139402">Ikusi</translation>
-<translation id="485197095346966382">Arriskuan dagoen pasahitz batekin hasten baduzu saioa, horren berri emateaz arduratuko da <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4853020600495124913">Ireki leiho &amp;berrian</translation>
 <translation id="4854317507773910281">Aukeratu gurasoaren zer kontu erabili nahi duzun onartzeko</translation>
 <translation id="485480310608090163">Ezarpen eta baimen gehiago</translation>
@@ -3937,6 +3941,7 @@
 <translation id="6298962879096096191">Erabili Google Play Android-erako aplikazioak instalatzeko</translation>
 <translation id="630065524203833229">Irt&amp;en</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> ezin izan da konfiguratu automatikoki. Zehaztu inprimagailuaren xehetasun aurreratuak. <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Informazio pertsonalari buruzko iradokizunak</translation>
 <translation id="6305607932814307878">Gidalerro orokorra:</translation>
 <translation id="6307990684951724544">Sistema lanpetuta dago</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> luzapenaren bidezko saio-hasiera</translation>
@@ -4015,6 +4020,7 @@
 <translation id="641081527798843608">Gaiaren bat-etortzea</translation>
 <translation id="6412673304250309937">URLak Chrome-n gordetako webgune ez-seguruen zerrendan dauden ala ez egiaztatzen du. Webguneren bat pasahitza lapurtzen saiatzen bada, edo fitxategi kaltegarriren bat deskargatzen baduzu, baliteke Chrome-k URLak ere bidaltzea (orriko edukiaren zati batzuk barne) Arakatze segurua eginbideari.</translation>
 <translation id="6412931879992742813">Ezkutuko leiho berria</translation>
+<translation id="6413591858632097328"><ph name="ORIGIN_NAME" /> webguneak eta hark instalatutako aplikazioek gorde dituzten datu eta cookie guztiak ezabatuko dira.</translation>
 <translation id="641469293210305670">Instalatu eguneratzeak eta aplikazioak</translation>
 <translation id="6414888972213066896">Webgune honetan sar zaitezkeen galdetu diezu gurasoei</translation>
 <translation id="6415900369006735853">Konektatu Internetera telefonoa erabiliz</translation>
@@ -4727,7 +4733,7 @@
 <translation id="7400418766976504921">URLa</translation>
 <translation id="7400839060291901923">Konfiguratu konexioa <ph name="PHONE_NAME" /> gailuan</translation>
 <translation id="7401778920660465883">Baztertu mezu hau</translation>
-<translation id="7403642243184989645">Baliabideak deskargatu</translation>
+<translation id="7403642243184989645">Baliabideak deskargatzen</translation>
 <translation id="7405938989981604410">{NUM_HOURS,plural, =1{Duela ordubete egin da segurtasun-egiaztapena}other{Duela {NUM_HOURS} ordu egin da segurtasun-egiaztapena}}</translation>
 <translation id="740624631517654988">Leiho gainerakorra blokeatu da</translation>
 <translation id="7407430846095439694">Inportatu eta lotu</translation>
@@ -4825,7 +4831,6 @@
 <translation id="7530016656428373557">Deskarga-abiadura wattetan</translation>
 <translation id="7531779363494549572">Joan Ezarpenak &gt; Aplikazioak eta jakinarazpenak &gt; Jakinarazpenak atalera.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> aplikazioak ez du erantzuten. Ixteko, hautatu "Behartu ixtera".</translation>
-<translation id="7536333565791380193">Segurtasun aurreratua</translation>
 <translation id="7537451260744431038">Webguneek ezin dituzte erabili cookieak arakatze-zerbitzua hobetzeko; adibidez, saioa hasita mantentzeko edo erosketa-saskiko produktuak gogoratzeko.</translation>
 <translation id="7539856059004947393">Bluetooth bidezko segurtasun-giltza</translation>
 <translation id="7540972813190816353">Errore bat gertatu da eguneratzeak bilatzean: <ph name="ERROR" /></translation>
@@ -5066,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Oharra:<ph name="END_BOLD" /> sistema berrabiarazi egingo da prozesuan zehar.</translation>
 <translation id="7828731929332799387">Cookie eta webguneen datu guztiak ezabatuko ditu hirugarrenen testuinguruetatik. Aurrera egin nahi duzu?</translation>
 <translation id="7829298379596169484">Audio-sarrera atzitzen</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ez da pasahitzak egiaztatzeko gai. Egiaztatu Internetera konektatuta zaudela.</translation>
 <translation id="7829877209233347340">Eskatu guraso bati saioa hasteko, ikastetxeko kontu bat gehitzeko baimena eman diezazun</translation>
 <translation id="7830594666202422257">Konektatu Linux-era</translation>
 <translation id="7831491651892296503">Errore bat gertatu da sarea konfiguratzean</translation>
@@ -5403,7 +5407,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> orriak saguaren kurtsorea desgaitu du.</translation>
 <translation id="8264024885325823677">Administratzaileak kudeatzen du ezarpen hau.</translation>
 <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" luzapenak pantaila osoa abiarazi du.</translation>
-<translation id="826511437356419340">Leihoen informazio orokorraren moduan sartu zara. Pasatu hatza nabigatzeko edo, teklatu bat erabiltzen ari bazara, sakatu tabuladorea.</translation>
+<translation id="826511437356419340">Leihoen ikuspegi orokorraren moduan sartu zara. Pasatu hatza nabigatzeko edo, teklatu bat erabiltzen ari bazara, sakatu tabuladorea.</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Gailuari eta hura erabiltzeko moduari buruzko informazio orokorra da hori (adibidez, bateria-maila, sistemako eta aplikazioetako jarduerak, eta erroreak). Android hobetzeko erabiliko dira datuok. Gainera, multzokatutako datu batzuk oso baliagarriak dira Google-ren aplikazioak hobetzeko eta bazkideei (adibidez, Android garatzaileei) euren aplikazio eta produktuak hobetzen laguntzeko.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />Eginbidea desaktibatuta ere, gailuak beharrezko informazioa bidaltzen jarraitu ahal izango du funtsezko zerbitzuak jasotzeko, hala nola sistemaren eguneratzeak eta segurtasun-neurriak.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />Jabeak kontrolatu nahi badu, atal honetara joan beharko du: Ezarpenak &gt; Aurreratuak &gt; Bidali Google-ri diagnostikoak eta erabilera-datuak automatikoki.<ph name="END_PARAGRAPH3" />
@@ -5575,7 +5579,7 @@
 <translation id="851263357009351303">Eman beti irudiak erakusteko baimena <ph name="HOST" /> webguneari</translation>
 <translation id="8513108775083588393">Biratu automatikoki</translation>
 <translation id="8514746246728959655">Erabili beste segurtasun-giltza bat</translation>
-<translation id="851960115758509829">Aplikazioak, ezarpenak eta beste pertsonalizazio batzuk sinkronizatu egingo dira Chrome OS darabilten eta Google-ko kontuan saioa hasita duten gailu guztien artean.</translation>
+<translation id="851960115758509829">Aplikazioak, ezarpenak eta pertsonalizatzeko beste aukera batzuk sinkronizatu egingo dira Chrome OS darabilten eta Google-ko kontuan saioa hasita daukaten gailu guztien artean.</translation>
 <translation id="8521475323816527629">Atzitu aplikazioak bizkor</translation>
 <translation id="8523493869875972733">Mantendu aldaketak</translation>
 <translation id="8523849605371521713">Gidalerroei jarraikiz gehitu da</translation>
@@ -5940,7 +5944,6 @@
 <translation id="8966870118594285808">Ireki berriro nahi gabe itxi duzun fitxa</translation>
 <translation id="8967866634928501045">Sakatu Alt + Maius + A ikusteko</translation>
 <translation id="8968766641738584599">Gorde txartela</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ez da pasahitzak egiaztatzeko gai. Saiatu berriro 24 ordu barru edo <ph name="BEGIN_LINK" />egiaztatu pasahitzak Google-ko kontuan<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Ihes-tekla</translation>
 <translation id="8972513834460200407">Galdetu sarearen administratzaileari suebakia Google-ren zerbitzariaren deskargak blokeatzen ari den.</translation>
 <translation id="8973557916016709913">Kendu zooma</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 1b44df0..ea9fd4b 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -1008,7 +1008,6 @@
 <translation id="2342740338116612727">نشانک‌ها اضافه شد</translation>
 <translation id="2343747224442182863">متمرکز کردن این برگه</translation>
 <translation id="2345723121311404059">۱ صفحه برای <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">‏سرویس SODA</translation>
 <translation id="2347644257713614136">‏استفاده از Hangouts و Cast for Education تحت کنترل «خط‌مشی رازداری Google» است.</translation>
 <translation id="2348176352564285430">برنامه: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">خطا در بارگیری اطلاعات</translation>
@@ -2283,7 +2282,6 @@
 <translation id="3971764089670057203">اثر انگشت‌ها در این کلید امنیتی</translation>
 <translation id="3973660817924297510">درحال بررسی کردن گذرواژه‌ها (<ph name="CHECKED_PASSWORDS" /> از <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">برقراری ارتباط با سرور برای گستره ناموفق بود</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> نمی‌تواند گذرواژه‌هایتان را بررسی کند. بعداً دوباره امتحان کنید.</translation>
 <translation id="3976108569178263973">چاپگری دردسترس نیست.</translation>
 <translation id="397703832102027365">نهایی‌سازی…</translation>
 <translation id="3977886311744775419">به‌روزرسانی‌های خودکار در این نوع شبکه بارگیری نمی‌شود، اما می‌توانید به‌صورت دستی دردسترس بودن آن‌ها را بررسی کنید.</translation>
@@ -2584,7 +2582,6 @@
 <translation id="4421932782753506458">پشمالو</translation>
 <translation id="4423376891418188461">بازیابی تنظیمات</translation>
 <translation id="442397852638519243">سرپرستتان (<ph name="USER_NAME" />)، از شما می‌خواهد که گذرواژه‌تان را عوض کنید.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> نمی‌تواند گذرواژه‌هایتان را بررسی کند. بعد از ۲۴ ساعت دوباره امتحان کنید.</translation>
 <translation id="4429030830601238961">این داده‌ها خط‌مشی‌های امنیتی سازمانتان را نقض می‌کند و نمی‌تواند جای‌گذاری شود.</translation>
 <translation id="4430019312045809116">میزان صدا</translation>
 <translation id="4430369329743628066">نشانک اضافه شد</translation>
@@ -2597,7 +2594,6 @@
 <translation id="4441124369922430666">آیا می‌خواهید با روشن شدن دستگاه، این برنامه به‌طور خودکار شروع شود؟</translation>
 <translation id="4441147046941420429">برای ادامه کار، کلید امنیتی‌تان را از دستگاه جدا کنید و سپس آن را دوباره وارد کنید و لمس کنید</translation>
 <translation id="444134486829715816">گسترده کردن...</translation>
-<translation id="4442329324652245220">‏<ph name="IDS_SHORT_PRODUCT_NAME" /> زمانی می‌تواند گذرواژه‌هایتان را بررسی کند که با «حساب Google» خود به سیستم وارد شوید</translation>
 <translation id="4442424173763614572">‏جستجوی DNS انجام نشد</translation>
 <translation id="4443536555189480885">&amp;راهنما</translation>
 <translation id="4444304522807523469">‏دسترسی به اسکنرهای سند متصل شده از طریق USB یا در شبکه محلی</translation>
@@ -2624,7 +2620,6 @@
 <translation id="4476659815936224889">‏برای اسکن کردن این کد، می‌توانید از برنامه اسکنر QR در تلفن یا دیگر برنامه‌های دوربین استفاده کنید.</translation>
 <translation id="4477015793815781985">‏باید شامل Ctrl، ‏Alt یا ⌘ باشد</translation>
 <translation id="4478664379124702289">ذخیره پی&amp;وند به‌عنوان...</translation>
-<translation id="4478777936860197922">گذرواژه ذخیره‌شده‌ای وجود ندارد. <ph name="IDS_SHORT_PRODUCT_NAME" /> زمانی می‌تواند گذرواژه‌هایتان را بررسی کند که آن‌ها را ذخیره کرده باشید.</translation>
 <translation id="4479424953165245642">مدیریت برنامه‌های کاربردی کیوسک</translation>
 <translation id="4479639480957787382">اترنت</translation>
 <translation id="4479877282574735775">درحال پیکربندی ماشین مجازی. ممکن است چند دقیقه طول بکشد.</translation>
@@ -2870,7 +2865,6 @@
 <translation id="4849517651082200438">نصب نشود</translation>
 <translation id="4850669014075537160">پیمایش</translation>
 <translation id="4850886885716139402">نما</translation>
-<translation id="485197095346966382">وقتی با گذرواژه لورفته به سیستم وارد شوید، <ph name="IDS_SHORT_PRODUCT_NAME" /> به شما اطلاع می‌دهد</translation>
 <translation id="4853020600495124913">باز کردن در پنجره &amp;جدید</translation>
 <translation id="4854317507773910281">حساب ولی را برای تأیید انتخاب کنید</translation>
 <translation id="485480310608090163">تنظیمات و اجازه‌های بیشتر</translation>
@@ -4834,7 +4828,6 @@
 <translation id="7530016656428373557">نسبت تخلیه به وات</translation>
 <translation id="7531779363494549572">به «تنظیمات &gt; برنامه‌ها و اعلان‌ها &gt; اعلان‌ها» بروید.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> پاسخ نمی‌دهد. برای بستن برنامه، «بستن اجباری» را انتخاب کنید.</translation>
-<translation id="7536333565791380193">امنیت پیشرفته</translation>
 <translation id="7537451260744431038">سایت‌ها نمی‌توانند از کوکی‌ها برای بهبود تجربه مرورتان استفاده کنند، مثلاً برای اینکه شما را درحالت واردشده به سیستم نگه دارند یا موارد موجود در سبد خریدتان را به‌خاطر بسپارند</translation>
 <translation id="7539856059004947393">کلید امنیتی بلوتوث</translation>
 <translation id="7540972813190816353">در هنگام بررسی برای وجود به‌روزرسانی خطایی رخ داد: <ph name="ERROR" /></translation>
@@ -5075,7 +5068,6 @@
     <ph name="BEGIN_BOLD" />نکته:<ph name="END_BOLD" /> سیستم هنگام پردازش راه‌اندازی مجدد می‌شود.</translation>
 <translation id="7828731929332799387">با این کار همه کوکی‌ها و داده‌های سایت موجود در بافت‌های شخص ثالث حذف می‌شود. می‌خواهید ادامه دهید؟</translation>
 <translation id="7829298379596169484">در حال دسترسی به ورودی صوتی</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> نمی‌تواند گذرواژه‌هایتان را بررسی کند. اتصال اینترنت را بررسی کنید.</translation>
 <translation id="7829877209233347340">از ولی خود بخواهید به سیستم وارد شود و با افزودن حساب محل تحصیل موافقت کند</translation>
 <translation id="7830594666202422257">‏اتصال به Linux</translation>
 <translation id="7831491651892296503">خطا در پیکربندی شبکه</translation>
@@ -5950,7 +5942,6 @@
 <translation id="8966870118594285808">اگر به اشتباه برگه‌ای را بستید، دوباره آن را باز کنید</translation>
 <translation id="8967866634928501045">‏Alt Shift A را برای نمایش فشار دهید</translation>
 <translation id="8968766641738584599">ذخیره کارت</translation>
-<translation id="8971800409073702505">‏<ph name="IDS_SHORT_PRODUCT_NAME" /> نمی‌تواند گذرواژه‌هایتان را بررسی کند. بعد از ۲۴ ساعت دوباره امتحان کنید یا <ph name="BEGIN_LINK" />گذرواژه‌ها را در «حساب Google» خود بررسی کنید<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">فرار</translation>
 <translation id="8972513834460200407">‏لطفاً با سرپرست شبکه خود بررسی کنید تا مطمئن شوید فایروال از بارگیری از سرورهای Google جلوگیری نمی‌کند.</translation>
 <translation id="8973557916016709913">برداشتن سطح بزرگ‌نمایی</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 9c7a162..b4753ee 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Kirjanmerkit lisätty</translation>
 <translation id="2343747224442182863">Aseta tämä välilehti aktiiviseksi</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> tulostaa yhden sivun</translation>
-<translation id="2346953515226895098">SODA-palvelu</translation>
 <translation id="2347644257713614136">Hangoutsin ja Cast for Educationin käyttö kuuluu Googlen tietosuojakäytännön piiriin.</translation>
 <translation id="2348176352564285430">Sovellus: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Dataa ladattaessa tapahtui virhe</translation>
@@ -2283,7 +2282,6 @@
 <translation id="3971764089670057203">Tämän suojausavaimen sormenjäljet</translation>
 <translation id="3973660817924297510">Tarkistetaan salasanoja (<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Alueen hakeminen palvelimelta epäonnistui</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ei voi tarkistaa salasanojasi. Kokeile myöhemmin.</translation>
 <translation id="3976108569178263973">Tulostimia ei ole saatavilla.</translation>
 <translation id="397703832102027365">Viimeistellään...</translation>
 <translation id="3977886311744775419">Automaattisia päivityksiä ei ladata tässä verkkotyypissä, mutta voit tarkistaa päivitykset manuaalisesti.</translation>
@@ -2584,7 +2582,6 @@
 <translation id="4421932782753506458">Pörrö</translation>
 <translation id="4423376891418188461">Palauta asetukset</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, järjestelmänvalvojasi vaatii sinua vaihtamaan salasanasi.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ei voi tarkistaa salasanojasi. Yritä uudelleen 24 tunnin päästä.</translation>
 <translation id="4429030830601238961">Tämä data rikkoo organisaatiosi suojauskäytäntöjä eikä sitä voi liittää.</translation>
 <translation id="4430019312045809116">Äänenvoimakkuus</translation>
 <translation id="4430369329743628066">Kirjanmerkki lisättiin</translation>
@@ -2597,7 +2594,6 @@
 <translation id="4441124369922430666">Haluatko käynnistää tämän sovelluksen automaattisesti koneen käynnistyessä?</translation>
 <translation id="4441147046941420429">Jos haluat jatkaa, poista suojausavain laitteesta, aseta se takaisin ja kosketa sitä</translation>
 <translation id="444134486829715816">Laajenna...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> voi tarkistaa salasanasi, kun kirjaudut sisään Google-tililläsi.</translation>
 <translation id="4442424173763614572">DNS-haku epäonnistui</translation>
 <translation id="4443536555189480885">O&amp;hje</translation>
 <translation id="4444304522807523469">Käyttää USB:n tai lähiverkon kautta yhdistettyjä dokumenttiskannereita</translation>
@@ -2624,7 +2620,6 @@
 <translation id="4476659815936224889">Voit skannata koodin puhelimen QR-skannaussovelluksella tai joillakin kamerasovelluksilla.</translation>
 <translation id="4477015793815781985">Sisällytä Ctrl, Alt tai ⌘</translation>
 <translation id="4478664379124702289">Tallenna lin&amp;kki nimellä...</translation>
-<translation id="4478777936860197922">Ei tallennettuja salasanoja. <ph name="IDS_SHORT_PRODUCT_NAME" /> voi tarkistaa salasanasi, kun tallennat niitä.</translation>
 <translation id="4479424953165245642">Hallinnoi kioskisovelluksia</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Määritetään virtuaalikonetta. Tämä voi kestää muutaman minuutin.</translation>
@@ -2870,7 +2865,6 @@
 <translation id="4849517651082200438">Älä asenna</translation>
 <translation id="4850669014075537160">Vieritys</translation>
 <translation id="4850886885716139402">Näytä</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> ilmoittaa, kun kirjaudut sisään vaarantuneella salasanalla</translation>
 <translation id="4853020600495124913">Avaa uudessa ikkunassa</translation>
 <translation id="4854317507773910281">Valitse vanhemman tili hyväksymistä varten</translation>
 <translation id="485480310608090163">Lisää asetuksia ja käyttöoikeuksia</translation>
@@ -4836,7 +4830,6 @@
 <translation id="7530016656428373557">Purkautumisnopeus watteina</translation>
 <translation id="7531779363494549572">Valitse Asetukset &gt; Sovellukset ja ilmoitukset &gt; Ilmoitukset.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ei vastaa. Sulje sovellus valitsemalla Pakota sulkeutumaan.</translation>
-<translation id="7536333565791380193">Edistyksellinen suojaus</translation>
 <translation id="7537451260744431038">Sivustot eivät voi käyttää evästeitä selauskokemuksesi parantamiseen, esimerkiksi pitää sinua kirjautuneena tai muistaa ostoskorisi sisältöä</translation>
 <translation id="7539856059004947393">Bluetooth-suojausavain</translation>
 <translation id="7540972813190816353">Virhe tarkistettaessa päivityksiä: <ph name="ERROR" /></translation>
@@ -5076,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />Huom.<ph name="END_BOLD" /> Järjestelmä käynnistyy uudelleen prosessin aikana.</translation>
 <translation id="7828731929332799387">Tämä poistaa kaikki kolmansien osapuolten yhteydessä saatavilla olevat evästeet ja sivustodatan. Haluatko jatkaa?</translation>
 <translation id="7829298379596169484">Äänituloa käytetään</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ei voi tarkistaa salasanojasi. Tarkista internetyhteytesi.</translation>
 <translation id="7829877209233347340">Pyydä vanhempaa kirjautumaan, jotta hän voi antaa luvan koulutilin lisäämiseen</translation>
 <translation id="7830594666202422257">Yhdistä Linuxiin</translation>
 <translation id="7831491651892296503">Verkon määritysvirhe</translation>
@@ -5951,7 +5943,6 @@
 <translation id="8966870118594285808">Avaa välilehti uudelleen, jos suljit sen vahingossa</translation>
 <translation id="8967866634928501045">Näytä painamalla Alt Vaihto A</translation>
 <translation id="8968766641738584599">Tallenna kortti</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ei voi tarkistaa salasanojasi. Yritä uudelleen 24 tunnin kuluttua tai <ph name="BEGIN_LINK" />tarkista salasanat Google-tililtä<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Ota yhteyttä verkon järjestelmänvalvojaan ja varmista, ettei palomuuri estä latauksia Googlen palvelimilta.</translation>
 <translation id="8973557916016709913">Poista zoomaustaso</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 771fde5..19019c3 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Nagdagdag ng mga bookmark</translation>
 <translation id="2343747224442182863">I-focus ang Tab na Ito</translation>
 <translation id="2345723121311404059">1 page sa <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Serbisyo ng SODA</translation>
 <translation id="2347644257713614136">Ang paggamit ng Hangouts at Cast for Education ay nasasaklawan ng Patakaran sa Privacy ng Google.</translation>
 <translation id="2348176352564285430">App: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Nagka-error sa pag-load ng data</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Mga fingerprint sa security key na ito</translation>
 <translation id="3973660817924297510">Sinusuri ang mga password (<ph name="CHECKED_PASSWORDS" /> sa <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Hindi nagawang makipag-ugnayan sa server para sa realm</translation>
-<translation id="3975884715086515476">Hindi masuri ng <ph name="IDS_SHORT_PRODUCT_NAME" /> ang iyong mga password. Subukan ulit sa ibang pagkakataon.</translation>
 <translation id="3976108569178263973">Walang available na printer.</translation>
 <translation id="397703832102027365">Tinatapos...</translation>
 <translation id="3977886311744775419">Hindi nada-download ang mga awtomatikong update sa ganitong uri ng network, pero puwede kang tumingin ng mga update nang manual.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Mingming</translation>
 <translation id="4423376891418188461">I-restore ang Mga Setting</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, hinihiling sa iyo ng administrator mo na palitan ang iyong password.</translation>
-<translation id="4426209360861763174">Hindi masuri ng <ph name="IDS_SHORT_PRODUCT_NAME" /> ang iyong mga password. Subukan ulit pagkalipas ng 24 na oras.</translation>
 <translation id="4429030830601238961">Nilalabag ng data na ito ang mga patakaran sa seguridad ng iyong organisasyon at hindi ito puwedeng i-paste.</translation>
 <translation id="4430019312045809116">Volume</translation>
 <translation id="4430369329743628066">Naidagdag na ang bookmark</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Nais mo bang awtomatikong simulan ang app na ito kapag nag-on ang makina?</translation>
 <translation id="4441147046941420429">Para magpatuloy, alisin ang iyong security key mula sa device mo, pagkatapos ay ilagay ulit at pindutin ito</translation>
 <translation id="444134486829715816">Palawakin...</translation>
-<translation id="4442329324652245220">Magagawang suriin ng <ph name="IDS_SHORT_PRODUCT_NAME" /> ang iyong mga password kapag nag-sign in ka gamit ang Google Account mo</translation>
 <translation id="4442424173763614572">Nabigo ang paghahanap sa DNS</translation>
 <translation id="4443536555189480885">&amp;Tulong</translation>
 <translation id="4444304522807523469">I-access ang mga scanner ng dokumento na naka-attach sa pamamagitan ng USB o sa lokal na network</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Para i-scan ang code na ito, puwede kang gumamit ng QR scanner app sa iyong telepono, o ilang camera app.</translation>
 <translation id="4477015793815781985">Dapat may kasabay na Ctrl, Alt, o ⌘</translation>
 <translation id="4478664379124702289">I-save ang Lin&amp;k Bilang...</translation>
-<translation id="4478777936860197922">Walang naka-save na password. Masusuri ng <ph name="IDS_SHORT_PRODUCT_NAME" /> ang iyong mga password kapag na-save mo ang mga ito.</translation>
 <translation id="4479424953165245642">Pamahalaan ang mga kiosk application</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Kino-configure ang virtual machine. Puwede itong tumagal nang ilang minuto.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Huwag I-install</translation>
 <translation id="4850669014075537160">Pag-ii-scroll</translation>
 <translation id="4850886885716139402">View</translation>
-<translation id="485197095346966382">Aabisuhan ka ng <ph name="IDS_SHORT_PRODUCT_NAME" /> kapag nag-sign in ka gamit ang isang nakompromisong password</translation>
 <translation id="4853020600495124913">Buksan sa &amp;bagong window</translation>
 <translation id="4854317507773910281">Pumili ng account ng magulang para sa pag-apruba</translation>
 <translation id="485480310608090163">Higit pang setting at pahintulot</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Rate ng Pagdiskarga sa Watts</translation>
 <translation id="7531779363494549572">Pumunta sa Mga Setting &gt; Mga app at notification &gt; Mga Notification.</translation>
 <translation id="7532009420053991888">Hindi tumutugon ang <ph name="LINUX_APP_NAME" />. Piliin ang "Puwersahang isara" para isara ang app.</translation>
-<translation id="7536333565791380193">Advanced na seguridad</translation>
 <translation id="7537451260744431038">Hindi puwedeng gumamit ng cookies ang mga site para pahusayin ang iyong karanasan sa pag-browse, halimbawa, para mapanatili kang naka-sign in o para maalala ang mga item sa shopping cart mo</translation>
 <translation id="7539856059004947393">Bluetooth security key</translation>
 <translation id="7540972813190816353">Naganap ang isang error habang nagsusuri ng mga update: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Tandaan:<ph name="END_BOLD" />  Mare-reboot ang system sa panahon ng proseso.</translation>
 <translation id="7828731929332799387">Ide-delete nito ang lahat ng cookies at data ng site na available sa mga konteksto ng third party. Gusto mo bang magpatuloy?</translation>
 <translation id="7829298379596169484">Ina-access ang input ng audio</translation>
-<translation id="7829528495815477379">Hindi masuri ng <ph name="IDS_SHORT_PRODUCT_NAME" /> ang iyong mga password. Subukang tingnan ang iyong koneksyon sa internet.</translation>
 <translation id="7829877209233347340">Hilingin sa magulang na mag-sign in para magbigay ng pahintulot na magdagdag ng pampaaralang account</translation>
 <translation id="7830594666202422257">Ikonekta sa Linux</translation>
 <translation id="7831491651892296503">Nagkaroon ng error sa pag-configure sa network</translation>
@@ -5955,7 +5947,6 @@
 <translation id="8966870118594285808">Muling magbukas ng tab kung naisara mo ito nang hindi sinasadya</translation>
 <translation id="8967866634928501045">Pindutin ang Alt Shift A upang ipakita</translation>
 <translation id="8968766641738584599">I-save ang card</translation>
-<translation id="8971800409073702505">Hindi masuri ng <ph name="IDS_SHORT_PRODUCT_NAME" /> ang iyong mga password. Subukan ulit pagkalipas ng 24 na oras o <ph name="BEGIN_LINK" />suriin ang mga password sa iyong Google Account<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Pakisuri sa administrator ng iyong network upang matiyak na hindi bina-block ng firewall ang mga pag-download mula sa mga server ng Google.</translation>
 <translation id="8973557916016709913">Mag-alis ng antas ng zoom</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index 79e071d..abbadab 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Nom du favori</translation>
 <translation id="1124772482545689468">Utilisateur</translation>
 <translation id="1125550662859510761">Semblable à <ph name="WIDTH" /> x <ph name="HEIGHT" /> (résolution native)</translation>
+<translation id="1126809382673880764">Ce mode ne vous protège pas contre les téléchargements, les extensions ni les sites Web dangereux. Vous profitez toujours de la protection de navigation sécurisée, lorsqu'elle est offerte, dans d'autres services Google, comme Gmail et la recherche.</translation>
 <translation id="1128109161498068552">N'autoriser aucun site à utiliser des messages système exclusifs pour accéder à des appareils MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Modifier le moteur de recherche</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Réseaux connus</translation>
 <translation id="123578888592755962">Le disque est plein</translation>
 <translation id="1238191093934674082">RPV ouvert</translation>
+<translation id="1239439601391236986">Afficher les suggestions d'entrée de renseignements personnels</translation>
 <translation id="1239594683407221485">Explorer le contenu de l'appareil dans l'application Fichiers.</translation>
 <translation id="124116460088058876">Plus de langues</translation>
 <translation id="1241753985463165747">Lire et modifier toutes vos données sur le site Web actuel, lorsqu'il est invoqué</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Activation cellulaire</translation>
 <translation id="1407489512183974736">Rogner et centrer</translation>
 <translation id="1408504635543854729">Explorer le contenu de l'appareil dans l'application Fichiers. Le contenu est restreint par un administrateur et ne peut pas être modifié.</translation>
+<translation id="1408980562518920698">Gérer les renseignements personnels</translation>
 <translation id="1410197035576869800">Icône de l'application</translation>
 <translation id="1410616244180625362">Continuer à autoriser <ph name="HOST" /> à accéder à votre caméra</translation>
 <translation id="1414648216875402825">Vous passez à une version instable de <ph name="PRODUCT_NAME" /> qui contient des fonctionnalités en cours de développement. Des plantages et des bogues inattendus peuvent se produire. Nous vous recommandons d'agir avec précaution.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">Console &amp;JavaScript</translation>
 <translation id="1587907146729660231">Touchez l'interrupteur avec votre doigt</translation>
+<translation id="1588200577109872591">Entrées intelligentes</translation>
 <translation id="1588438908519853928">Normal</translation>
 <translation id="158849752021629804">Réseau domestique requis</translation>
 <translation id="1588870296199743671">Ouvrir le lien avec…</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Se connecter en tant que</translation>
 <translation id="1880905663253319515">Supprimer le certificat « <ph name="CERTIFICATE_NAME" /> »?</translation>
 <translation id="1884013283844450420">Réseau <ph name="NETWORK_INDEX" /> sur <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, connexion</translation>
+<translation id="1884705339276589024">Redimensionner le disque Linux</translation>
 <translation id="1886996562706621347">Permettre aux sites de demander l'autorisation de devenir gestionnaires par défaut des protocoles (recommandé)</translation>
 <translation id="1887442540531652736">Erreur de connexion</translation>
 <translation id="1887597546629269384">Dites « Hey Google » de nouveau</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Vous passez à un canal ayant une ancienne version de <ph name="PRODUCT_NAME" />. Le changement de canal sera appliqué lorsque la version du canal correspondra à la version actuellement installée sur votre appareil.</translation>
 <translation id="197989455406964291">KDC ne prend pas en charge ce type de chiffrement</translation>
 <translation id="1982354452682152483">Aucune description n'est proposée.</translation>
+<translation id="1984417487208496350">Aucune protection (non recommandé)</translation>
 <translation id="1987317783729300807">Comptes</translation>
 <translation id="1989112275319619282">Parcourir</translation>
 <translation id="1990512225220753005">Ne pas afficher les raccourcis sur cette page</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Pour récupérer les données de votre compte, accédez à l'adresse google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Paramètre de sécurité du système</translation>
 <translation id="2091887806945687916">Son</translation>
+<translation id="2096478741073211388">Les suggestions de renseignements personnels vous aident à entrer plus rapidement votre nom, votre adresse ou votre numéro de téléphone lorsque vous tapez certains mots. Vous seul verrez vos suggestions privées et personnalisées pour votre compte.</translation>
 <translation id="2096715839409389970">Effacer les témoins tiers</translation>
 <translation id="2097372108957554726">Vous devez vous connecter à Chrome pour enregistrer de nouveaux appareils.</translation>
 <translation id="2099172618127234427">Vous activez les fonctions de débogage de Chrome OS qui vont installer le démon sshd et activer le démarrage depuis les appareils USB.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Actualiser le &amp;cadre</translation>
 <translation id="2114896190328250491">Photo de <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Ouvrir dans <ph name="APP" /></translation>
+<translation id="2119461801241504254">La navigation sécurisée est activée et vous protège contre les sites et les téléchargements nuisibles</translation>
 <translation id="2120297377148151361">Activité et interactions</translation>
 <translation id="2120639962942052471">Bloqué <ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Les témoins sont bloqués}=1{Les témoins sont bloqués, avec 1 exception}one{Les témoins sont bloqués, avec {COUNT} exception}other{Les témoins sont bloqués, avec {COUNT} exceptions}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Favoris ajoutés</translation>
 <translation id="2343747224442182863">Mettre cet onglet en évidence</translation>
 <translation id="2345723121311404059">1 page vers <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Service SODA</translation>
 <translation id="2347644257713614136">L'utilisation de Hangouts et de Cast for Education est régie par la politique de confidentialité de Google.</translation>
 <translation id="2348176352564285430">Application : <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Erreur lors du chargement des données</translation>
@@ -1892,6 +1899,7 @@
 <translation id="3515983984924808886">Touchez votre clé de sécurité à nouveau pour confirmer la réinitialisation. Toutes les données stockées sur la clé de sécurité, y compris son NIP, seront supprimées.</translation>
 <translation id="3518985090088779359">Accepter et continuer</translation>
 <translation id="351952459507671940">Ajouter au nouveau groupe</translation>
+<translation id="3521606918211282604">Modifier la taille du disque</translation>
 <translation id="3523642406908660543">Demander une autorisation lorsqu’un site souhaite utiliser un plugiciel pour accéder à mon ordinateur (recommandé)</translation>
 <translation id="3524965460886318643">Activités d'exportation</translation>
 <translation id="3526034519184079374">Impossible de lire ou de modifier les données du site</translation>
@@ -1979,6 +1987,7 @@
 <translation id="3629631988386925734">Entrez votre mot de passe pour activer Smart Lock. 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="3630132874740063857">Votre téléphone</translation>
 <translation id="3630995161997703415">Ajoutez ce site à votre étagère pour pouvoir l'utiliser à tout moment</translation>
+<translation id="3633309367764744750">Récupère d'avance de l'information sur les pages, y compris celles que vous n'avez pas encore visitées. L'information récupérée peut comprendre des témoins, si vous les autorisez.</translation>
 <translation id="3634507049637220048">Réseau <ph name="NETWORK_INDEX" /> sur <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, géré par votre administrateur, détails</translation>
 <translation id="3635241501480133979">Ces données violent les politiques de sécurité de votre organisation et ne peuvent pas être déposées.</translation>
 <translation id="3635353578505343390">Envoyer un commentaire à Google</translation>
@@ -2277,7 +2286,6 @@
 <translation id="3971764089670057203">Empreintes digitales sur cette clé de sécurité</translation>
 <translation id="3973660817924297510">Vérification des mots de passe en cours… (<ph name="CHECKED_PASSWORDS" /> sur <ph name="TOTAL_PASSWORDS" />)</translation>
 <translation id="3975565978598857337">Échec de la tentative de contact du serveur associé à ce domaine</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne peut pas vérifier vos mots de passe. Réessayez plus tard.</translation>
 <translation id="3976108569178263973">Il n'y a aucune imprimante à proximité.</translation>
 <translation id="397703832102027365">Finalisation en cours...</translation>
 <translation id="3977886311744775419">Les mises à jour automatiques ne seront pas téléchargées sur ce type de réseau, mais vous pouvez vérifier manuellement la présence de mises à jour.</translation>
@@ -2578,7 +2586,6 @@
 <translation id="4421932782753506458">Félix</translation>
 <translation id="4423376891418188461">Restaurer les paramètres</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, votre administrateur vous demande de changer votre mot de passe.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne peut pas vérifier vos mots de passe. Réessayez après 24 heures.</translation>
 <translation id="4429030830601238961">Ces données violent les politiques de sécurité de votre organisation et ne peuvent pas être collées.</translation>
 <translation id="4430019312045809116">Volume</translation>
 <translation id="4430369329743628066">Favori ajouté</translation>
@@ -2591,7 +2598,6 @@
 <translation id="4441124369922430666">Voulez-vous lancer automatiquement cette application au démarrage de l'ordinateur?</translation>
 <translation id="4441147046941420429">Pour continuer, retirez votre clé de sécurité de votre appareil, puis réinsérez-la et touchez-la</translation>
 <translation id="444134486829715816">Développer...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> peut vérifier vos mots de passe lorsque vous vous connectez avec votre compte Google</translation>
 <translation id="4442424173763614572">Échec de la consultation de DNS.</translation>
 <translation id="4443536555189480885">A&amp;ide</translation>
 <translation id="4444304522807523469">Accéder aux analyseurs de documents joints par USB ou sur le réseau local</translation>
@@ -2618,7 +2624,6 @@
 <translation id="4476659815936224889">Pour numériser ce code, vous pouvez utiliser une application de numérisation de code QR sur votre téléphone ou certaines applications d'appareil photo.</translation>
 <translation id="4477015793815781985">Incluez la touche Ctrl, Alt ou ⌘</translation>
 <translation id="4478664379124702289">Enregistrer le lie&amp;n sous...</translation>
-<translation id="4478777936860197922">Aucun mot de passe enregistré. <ph name="IDS_SHORT_PRODUCT_NAME" /> ne peut vérifier vos mots de passe que si vous les enregistrez.</translation>
 <translation id="4479424953165245642">Gérer les applications de kiosque</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Configuration de la machine virtuelle. Cette opération peut prendre quelques minutes.</translation>
@@ -2864,7 +2869,6 @@
 <translation id="4849517651082200438">Ne pas installer</translation>
 <translation id="4850669014075537160">Défilement</translation>
 <translation id="4850886885716139402">Affichage</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> vous avisera lorsque vous utilisez un mot de passe compromis pour vous connecter</translation>
 <translation id="4853020600495124913">Ouvrir dans une &amp;nouvelle fenêtre</translation>
 <translation id="4854317507773910281">Sélectionner le compte parental pour l'approbation</translation>
 <translation id="485480310608090163">Plus de paramètres et d'autorisations</translation>
@@ -3938,6 +3942,7 @@
 <translation id="6298962879096096191">Utilisez Google Play pour installer des applications Android</translation>
 <translation id="630065524203833229">&amp;Quitter</translation>
 <translation id="6300718114348072351">Impossible de configurer automatiquement l'imprimante <ph name="PRINTER_NAME" />. Veuillez spécifier les détails avancés de l'imprimante. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Suggestions de renseignements personnels</translation>
 <translation id="6305607932814307878">Politique globale :</translation>
 <translation id="6307990684951724544">Système occupé</translation>
 <translation id="6308493641021088955">Service de connexion fourni par <ph name="EXTENSION_NAME" /></translation>
@@ -4016,6 +4021,7 @@
 <translation id="641081527798843608">Correspondance d'objet</translation>
 <translation id="6412673304250309937">Il vérifie les URL en fonction d'une liste de sites non sécuritaires stockée dans Chrome. Si un site tente de voler votre mot de passe ou si vous téléchargez un fichier dangereux, Chrome peut également envoyer les URL concernées, y compris des extraits du contenu de pages, à la navigation sécurisée.</translation>
 <translation id="6412931879992742813">Nouvelle fenêtre de navigation privée</translation>
+<translation id="6413591858632097328">Cette action effacera toutes les données et tous les témoins stockés par <ph name="ORIGIN_NAME" /> et ses applications installées.</translation>
 <translation id="641469293210305670">Installer les mises à jour et les applications</translation>
 <translation id="6414888972213066896">Tu as demandé à l'un de tes parents l'autorisation de consulter ce site</translation>
 <translation id="6415900369006735853">Connectez-vous à Internet au moyen de votre téléphone</translation>
@@ -4826,7 +4832,6 @@
 <translation id="7530016656428373557">Taux de décharge en watts</translation>
 <translation id="7531779363494549572">Accédez à Paramètres &gt; Applications et notifications &gt; Notifications.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ne répond pas. Sélectionnez « Forcer la fermeture » pour fermer l'application.</translation>
-<translation id="7536333565791380193">Sécurité avancée</translation>
 <translation id="7537451260744431038">Les sites ne peuvent pas utiliser de témoins pour améliorer votre expérience de navigation, par exemple en vous permettant de rester connecté ou en mémorisant des articles de votre panier d'achats</translation>
 <translation id="7539856059004947393">Clé de sécurité Bluetooth</translation>
 <translation id="7540972813190816353">Une erreur s'est produite pendant la vérification des mises à jour : <ph name="ERROR" /></translation>
@@ -5067,7 +5072,6 @@
     <ph name="BEGIN_BOLD" />Note :<ph name="END_BOLD" />  Le système va redémarrer durant le processus.</translation>
 <translation id="7828731929332799387">Cela supprimera tous les témoins et les données des sites proposés dans les contextes tiers. Voulez-vous continuer?</translation>
 <translation id="7829298379596169484">Accès à l'entrée audio en cours…</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne peut pas vérifier vos mots de passe. Essayez de vérifier votre connexion Internet.</translation>
 <translation id="7829877209233347340">Demande à un parent de se connecter afin d'accorder l'autorisation d'ajouter un compte scolaire</translation>
 <translation id="7830594666202422257">Connexion à Linux</translation>
 <translation id="7831491651892296503">Erreur de configuration réseau</translation>
@@ -5941,7 +5945,6 @@
 <translation id="8966870118594285808">Rouvrir un onglet fermé par accident</translation>
 <translation id="8967866634928501045">Appuyez sur Alt+Maj+A pour afficher</translation>
 <translation id="8968766641738584599">Enregistrer la carte</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne peut pas vérifier vos mots de passe. Réessayez après 24 heures ou <ph name="BEGIN_LINK" />effectuez une vérification des mots de passe dans votre compte Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Échappement</translation>
 <translation id="8972513834460200407">Veuillez vérifier auprès de votre administrateur réseau que le pare-feu ne bloque pas les téléchargements des serveurs Google.</translation>
 <translation id="8973557916016709913">Supprimer le niveau de zoom</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 69e81f7b..ed9c6df 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Nom du favori</translation>
 <translation id="1124772482545689468">Utilisateur</translation>
 <translation id="1125550662859510761">La résolution est de <ph name="WIDTH" /> x <ph name="HEIGHT" /> (native)</translation>
+<translation id="1126809382673880764">Ce mode ne vous protège pas contre les téléchargements, les extensions et les sites Web dangereux. Le cas échéant, vous bénéficierez toujours de la protection offerte par la navigation sécurisée dans d'autres services Google, tels que Gmail et la recherche.</translation>
 <translation id="1128109161498068552">N'autoriser aucun site à utiliser des messages spécifiques au système pour accéder aux appareils MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Modifier le moteur de recherche</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Réseaux connus</translation>
 <translation id="123578888592755962">Disque saturé.</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">Afficher les suggestions d'informations personnelles</translation>
 <translation id="1239594683407221485">Explorez le contenu de l'appareil dans l'application Fichiers.</translation>
 <translation id="124116460088058876">Plus de langues</translation>
 <translation id="1241753985463165747">Accéder à toutes vos données sur le site Web actuellement consulté et les modifier</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Activation mobile</translation>
 <translation id="1407489512183974736">Recadrer et centrer</translation>
 <translation id="1408504635543854729">Explorez le contenu de l'appareil dans l'application Fichiers. L'accès à ce contenu étant limité par un administrateur, vous ne pouvez pas le modifier.</translation>
+<translation id="1408980562518920698">Gérer les informations personnelles</translation>
 <translation id="1410197035576869800">Icône de l'application</translation>
 <translation id="1410616244180625362">Continuer à autoriser <ph name="HOST" /> à accéder à votre caméra</translation>
 <translation id="1414648216875402825">Vous passez à une version instable de <ph name="PRODUCT_NAME" /> qui contient des fonctionnalités en cours de développement. Des plantages et des bugs inattendus peuvent se produire. Procédez avec prudence.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">Console &amp;JavaScript</translation>
 <translation id="1587907146729660231">Appuyez sur le bouton Marche/Arrêt avec votre doigt</translation>
+<translation id="1588200577109872591">Saisies intelligentes</translation>
 <translation id="1588438908519853928">Standard</translation>
 <translation id="158849752021629804">Réseau domestique requis</translation>
 <translation id="1588870296199743671">Ouvrir le lien avec...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Se connecter à l'aide du compte</translation>
 <translation id="1880905663253319515">Supprimer le certificat "<ph name="CERTIFICATE_NAME" />" ?</translation>
 <translation id="1884013283844450420">Réseau <ph name="NETWORK_INDEX" /> sur <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, connexion</translation>
+<translation id="1884705339276589024">Redimensionner le disque Linux</translation>
 <translation id="1886996562706621347">Permettre aux sites de demander l'autorisation de devenir gestionnaires par défaut des protocoles (recommandé)</translation>
 <translation id="1887442540531652736">Erreur de connexion</translation>
 <translation id="1887597546629269384">Dites à nouveau "Ok Google"</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Vous souhaitez installer une ancienne version de <ph name="PRODUCT_NAME" />. Ce changement sera appliqué dès que cette version correspondra à celle qui est installée sur votre appareil.</translation>
 <translation id="197989455406964291">KDC n'est pas compatible avec ce type de chiffrement</translation>
 <translation id="1982354452682152483">Aucune description n'est disponible.</translation>
+<translation id="1984417487208496350">Aucune protection (non recommandé)</translation>
 <translation id="1987317783729300807">Comptes</translation>
 <translation id="1989112275319619282">Parcourir</translation>
 <translation id="1990512225220753005">Ne pas afficher de raccourcis sur cette page</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Pour récupérer les informations de votre compte, consultez la page google.com/accounts/recovery.</translation>
 <translation id="2090876986345970080">Paramètres de sécurité du système</translation>
 <translation id="2091887806945687916">Son</translation>
+<translation id="2096478741073211388">Les suggestions d'informations personnelles permettent d'accélérer la saisie de texte en vous proposant votre nom, adresse ou numéro de téléphone lorsque vous saisissez certains mots. Ces suggestions privées, spécifiques à votre compte, ne sont visibles que par vous.</translation>
 <translation id="2096715839409389970">Effacer les cookies tiers</translation>
 <translation id="2097372108957554726">Vous devez vous connecter à Chrome pour enregistrer de nouveaux périphériques.</translation>
 <translation id="2099172618127234427">Les fonctionnalités de débogage de Chrome OS que vous activez configurent le démon sshd et autorisent le démarrage à partir de clés USB.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Actualiser le &amp;cadre</translation>
 <translation id="2114896190328250491">Photo : <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Ouvrir dans <ph name="APP" /></translation>
+<translation id="2119461801241504254">La navigation sécurisée est activée, et vous protège contre les sites et les téléchargements dangereux</translation>
 <translation id="2120297377148151361">Activité et interactions</translation>
 <translation id="2120639962942052471">Autorisation "<ph name="PERMISSION" />" bloquée</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Les cookies sont bloqués}=1{Les cookies sont bloqués, 1 exception}one{Cookies are blocked, {COUNT} exceptions}other{Les cookies sont bloqués, {COUNT} exceptions}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Favoris ajoutés</translation>
 <translation id="2343747224442182863">Sélectionner cet onglet</translation>
 <translation id="2345723121311404059">1 page sur <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Service SODA</translation>
 <translation id="2347644257713614136">L'utilisation de Hangouts et de Cast for Education est régie par les règles de confidentialité de Google.</translation>
 <translation id="2348176352564285430">Application : <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Erreur lors du chargement des données.</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">Appuyez à nouveau sur votre clé de sécurité pour confirmer la réinitialisation. Cette opération effacera toutes les informations stockées sur la clé de sécurité, y compris son code.</translation>
 <translation id="3518985090088779359">Accepter et continuer</translation>
 <translation id="351952459507671940">Ajouter à un nouveau groupe</translation>
+<translation id="3521606918211282604">Modifier la taille du disque</translation>
 <translation id="3523642406908660543">Me demander lorsqu'un plug-in doit être utilisé pour qu'un site puisse accéder à mon ordinateur (recommandé)</translation>
 <translation id="3524965460886318643">Exporter les activités</translation>
 <translation id="3526034519184079374">Impossible de lire ou de modifier les données du site</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Saisissez votre mot de passe pour activer Smart Lock. La prochaine fois, votre téléphone déverrouillera votre <ph name="DEVICE_TYPE" />. Vous pouvez désactiver Smart Lock dans les paramètres.</translation>
 <translation id="3630132874740063857">Votre téléphone</translation>
 <translation id="3630995161997703415">Ajoutez ce site à votre étagère pour l'utiliser à tout moment</translation>
+<translation id="3633309367764744750">Précharge les informations des pages, y compris des pages que nous n'avez pas encore consultées. Les informations préchargées peuvent inclure des cookies, si vous les autorisez.</translation>
 <translation id="3634507049637220048">Réseau <ph name="NETWORK_INDEX" /> sur <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, géré par votre administrateur, détails</translation>
 <translation id="3635241501480133979">Impossible de déposer ces données, car elles ne respectent pas les règles de sécurité de votre organisation.</translation>
 <translation id="3635353578505343390">Envoyer des commentaires à Google</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">Empreintes sur cette clé de sécurité</translation>
 <translation id="3973660817924297510">Vérification des mots de passe (<ph name="CHECKED_PASSWORDS" /> sur <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Échec de la tentative de contact du serveur correspondant à ce domaine</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne parvient pas à vérifier vos mots de passe. Réessayez plus tard.</translation>
 <translation id="3976108569178263973">Aucune imprimante n'est disponible.</translation>
 <translation id="397703832102027365">Finalisation en cours…</translation>
 <translation id="3977886311744775419">Les mises à jour automatiques ne sont pas téléchargées sur ce type de réseau. Cependant, vous pouvez rechercher les mises à jour manuellement.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">Félix</translation>
 <translation id="4423376891418188461">Rétablir les paramètres</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, votre administrateur exige que vous changiez votre mot de passe.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne parvient pas à vérifier vos mots de passe. Réessayez dans 24 heures.</translation>
 <translation id="4429030830601238961">Impossible de coller ces données, car elles ne respectent pas les règles de sécurité de votre organisation.</translation>
 <translation id="4430019312045809116">Volume</translation>
 <translation id="4430369329743628066">Favori ajouté</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">Voulez-vous démarrer automatiquement cette application à la mise sous tension de l'ordinateur ?</translation>
 <translation id="4441147046941420429">Pour continuer, retirez la clé de sécurité de votre appareil, puis réinsérez-la et appuyez dessus</translation>
 <translation id="444134486829715816">Développer...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> peut vérifier vos mots de passe lorsque vous vous connectez à votre compte Google</translation>
 <translation id="4442424173763614572">Échec de la résolution DNS.</translation>
 <translation id="4443536555189480885">&amp;Aide</translation>
 <translation id="4444304522807523469">Accéder aux scanners de documents connectés via USB ou sur le réseau local</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">Pour scanner ce code, vous pouvez utiliser une application de lecture de codes QR sur votre téléphone ou certaines applications d'appareil photo.</translation>
 <translation id="4477015793815781985">Incluez les touches Ctrl, Alt ou ⌘</translation>
 <translation id="4478664379124702289">Enregistrer le lie&amp;n sous...</translation>
-<translation id="4478777936860197922">Aucun mot de passe enregistré. <ph name="IDS_SHORT_PRODUCT_NAME" /> ne peut vérifier vos mots de passe que si vous les enregistrez.</translation>
 <translation id="4479424953165245642">Gérer les applications du kiosque</translation>
 <translation id="4479639480957787382">Ethernet </translation>
 <translation id="4479877282574735775">Configuration de la machine virtuelle… Cette opération peut prendre quelques minutes.</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">Ne pas installer</translation>
 <translation id="4850669014075537160">Défilement</translation>
 <translation id="4850886885716139402">Afficher</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> vous avertira si vous vous connectez avec un mot de passe compromis</translation>
 <translation id="4853020600495124913">Ouvrir dans une &amp;nouvelle fenêtre</translation>
 <translation id="4854317507773910281">Sélectionnez un compte parental pour la demande d'autorisation</translation>
 <translation id="485480310608090163">Plus de paramètres et d'autorisations</translation>
@@ -3938,6 +3942,7 @@
 <translation id="6298962879096096191">Utilise Google Play pour installer des applications Android</translation>
 <translation id="630065524203833229">&amp;Quitter</translation>
 <translation id="6300718114348072351">Impossible de configurer automatiquement <ph name="PRINTER_NAME" />. Veuillez définir des paramètres avancés pour cette imprimante. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Suggestions d'informations personnelles</translation>
 <translation id="6305607932814307878">Règlement global :</translation>
 <translation id="6307990684951724544">Système occupé.</translation>
 <translation id="6308493641021088955">Connexion fournie par <ph name="EXTENSION_NAME" /></translation>
@@ -4016,6 +4021,7 @@
 <translation id="641081527798843608">Correspondance d'objet</translation>
 <translation id="6412673304250309937">Il vérifie les URL d'après une liste de sites dangereux stockée dans Chrome. Si un site tente de voler votre mot de passe ou si vous téléchargez un fichier dangereux, Chrome peut également envoyer les URL concernées, y compris des extraits du contenu de pages, à la fonctionnalité de navigation sécurisée.</translation>
 <translation id="6412931879992742813">Nouvelle fenêtre de navigation privée</translation>
+<translation id="6413591858632097328">Cette action entraînera la suppression de l'ensemble des données et des cookies stockés par <ph name="ORIGIN_NAME" /> ainsi que les applications installées correspondantes.</translation>
 <translation id="641469293210305670">Installer des mises à jour et des applications</translation>
 <translation id="6414888972213066896">Une demande d'autorisation a été envoyée à tes parents pour la consultation de ce site</translation>
 <translation id="6415900369006735853">Se connecter à Internet via votre téléphone</translation>
@@ -4826,7 +4832,6 @@
 <translation id="7530016656428373557">Taux de décharge en watts</translation>
 <translation id="7531779363494549572">Accédez à Paramètres &gt; Applications et notifications &gt; Notifications.</translation>
 <translation id="7532009420053991888">L'application <ph name="LINUX_APP_NAME" /> ne répond pas. Sélectionnez "Forcer la fermeture" pour la fermer.</translation>
-<translation id="7536333565791380193">Sécurité avancée</translation>
 <translation id="7537451260744431038">Les sites ne peuvent pas utiliser de cookies pour améliorer votre expérience de navigation, par exemple pour maintenir votre connexion ou mémoriser les articles de votre panier</translation>
 <translation id="7539856059004947393">Clé de sécurité Bluetooth</translation>
 <translation id="7540972813190816353">Une erreur s'est produite pendant la vérification des mises à jour : <ph name="ERROR" />.</translation>
@@ -5067,7 +5072,6 @@
     <ph name="BEGIN_BOLD" />Remarque<ph name="END_BOLD" /> : Le système redémarre au cours de ce processus.</translation>
 <translation id="7828731929332799387">Cette action supprimera l'ensemble des cookies et données de sites disponibles dans des contextes tiers. Voulez-vous continuer ?</translation>
 <translation id="7829298379596169484">Accès à l'entrée audio en cours…</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne parvient pas à vérifier vos mots de passe. Vérifiez votre connexion Internet.</translation>
 <translation id="7829877209233347340">Demande à l'un de tes parents de t'autoriser à ajouter un compte scolaire</translation>
 <translation id="7830594666202422257">Connecter à Linux</translation>
 <translation id="7831491651892296503">Erreur lors de la configuration du réseau</translation>
@@ -5942,7 +5946,6 @@
 <translation id="8966870118594285808">Permet de rouvrir un onglet fermé par erreur</translation>
 <translation id="8967866634928501045">Appuyez sur Alt+Maj+A pour afficher</translation>
 <translation id="8968766641738584599">Enregistrer la carte</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne parvient pas à vérifier vos mots de passe. Réessayez dans 24 heures ou <ph name="BEGIN_LINK" />vérifiez les mots de passe enregistrés dans votre compte Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Échap</translation>
 <translation id="8972513834460200407">Vérifiez auprès de votre administrateur réseau que le pare-feu ne bloque pas les téléchargements effectués depuis les serveurs Google.</translation>
 <translation id="8973557916016709913">Supprimer le niveau de zoom</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index 315e4ee..ed555326 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -37,7 +37,7 @@
 <translation id="1041263367839475438">Dispositivos dispoñibles</translation>
 <translation id="1042174272890264476">O ordenador tamén inclúe a biblioteca de <ph name="SHORT_PRODUCT_NAME" />. RLZ asigna unha etiqueta que non é exclusiva e sen identificación persoal para medir as buscas e o uso de <ph name="SHORT_PRODUCT_NAME" /> derivados dunha determinada campaña promocional. En ocasións estas etiquetas aparecen nas consultas de Busca de Google en <ph name="PRODUCT_NAME" />.</translation>
 <translation id="1043818413152647937">Tamén queres borrar os datos destas aplicacións?</translation>
-<translation id="1045448422538531528">Engadir pestana(s) a un grupo</translation>
+<translation id="1045448422538531528">Engadir a un grupo</translation>
 <translation id="1046635659603195359">Parece que xa configuraches a Voice Match co teu Asistente de Google noutro dispositivo. As gravacións anteriores pódense usar para crear un modelo de voz neste dispositivo. Esta acción debería levar menos dun minuto.</translation>
 <translation id="104710386808485638">Queres reiniciar Linux?</translation>
 <translation id="1047431265488717055">Copiar te&amp;xto da ligazón</translation>
@@ -1010,7 +1010,6 @@
 <translation id="2342740338116612727">Engadíronse marcadores</translation>
 <translation id="2343747224442182863">Enfocar esta pestana</translation>
 <translation id="2345723121311404059">1 páxina a: <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Servizo SODA</translation>
 <translation id="2347644257713614136">O uso de Hangouts e Cast for Education réxese pola Política de privacidade de Google.</translation>
 <translation id="2348176352564285430">Aplicación: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Produciuse un erro ao cargar os datos</translation>
@@ -2285,7 +2284,6 @@
 <translation id="3971764089670057203">Impresións dixitais nesta chave de seguranza</translation>
 <translation id="3973660817924297510">Comprobando contrasinais (<ph name="CHECKED_PASSWORDS" /> de <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Produciuse un erro durante o contacto co servidor do dominio</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> non puido comprobar os teus contrasinais. Téntao de novo máis tarde.</translation>
 <translation id="3976108569178263973">Non hai impresoras dispoñibles.</translation>
 <translation id="397703832102027365">Finalizando...</translation>
 <translation id="3977886311744775419">As actualizacións automáticas non se descargan neste tipo de rede, pero podes buscar actualizacións manualmente.</translation>
@@ -2586,7 +2584,6 @@
 <translation id="4421932782753506458">Gatiño</translation>
 <translation id="4423376891418188461">Restaurar configuración</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, o teu administrador require que cambies o contrasinal.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> non puido comprobar os teus contrasinais. Téntao de novo dentro de 24 horas.</translation>
 <translation id="4429030830601238961">Estes datos infrinxen as políticas de seguranza da túa organización e non se poden pegar.</translation>
 <translation id="4430019312045809116">Volume</translation>
 <translation id="4430369329743628066">Engadiuse o marcador</translation>
@@ -2599,7 +2596,6 @@
 <translation id="4441124369922430666">Queres que se inicie automaticamente esta aplicación cando se acenda o equipo?</translation>
 <translation id="4441147046941420429">Para continuar, quita a chave de seguranza do teu dispositivo, volve inserila e toca o botón de activación</translation>
 <translation id="444134486829715816">Expandir...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> pode comprobar os teus contrasinais cando inicies sesión coa túa Conta de Google</translation>
 <translation id="4442424173763614572">Erro ao buscar o DNS</translation>
 <translation id="4443536555189480885">A&amp;xuda</translation>
 <translation id="4444304522807523469">Acceso aos escáneres de documentos conectados a través de USB ou que se atopan na rede local</translation>
@@ -2626,7 +2622,6 @@
 <translation id="4476659815936224889">Para escanear este código, podes utilizar unha aplicación de escáner de QR do teu teléfono ou algunhas aplicacións de cámara.</translation>
 <translation id="4477015793815781985">Inclúea Ctrl, Alt ou ⌘</translation>
 <translation id="4478664379124702289">Gardar liga&amp;zón como...</translation>
-<translation id="4478777936860197922">Non hai contrasinais gardados. <ph name="IDS_SHORT_PRODUCT_NAME" /> pode comprobar os teus contrasinais cando os gardes.</translation>
 <translation id="4479424953165245642">Xestionar as aplicacións de quiosco</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Configurando a máquina virtual. Esta acción pode tardar uns minutos.</translation>
@@ -2872,7 +2867,6 @@
 <translation id="4849517651082200438">Non instalar</translation>
 <translation id="4850669014075537160">Desprazamento</translation>
 <translation id="4850886885716139402">Vista</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> enviarache unha notificación cando inicies sesión cun contrasinal vulnerado</translation>
 <translation id="4853020600495124913">Abrir nunha ventá &amp;nova</translation>
 <translation id="4854317507773910281">Escolle a conta parental para a aprobación</translation>
 <translation id="485480310608090163">Máis opcións de configuración e permisos</translation>
@@ -2891,7 +2885,7 @@
 <translation id="4871322859485617074">O PIN contén caracteres non válidos</translation>
 <translation id="4871370605780490696">Engadir marcador</translation>
 <translation id="4871719318659334896">Pechar grupo</translation>
-<translation id="4871852311166078968">Engadir pestana(s) a un grupo</translation>
+<translation id="4871852311166078968">Engadir a un grupo</translation>
 <translation id="4873312501243535625">Comprobador de ficheiros multimedia</translation>
 <translation id="4876273079589074638">Indica exactamente o que aconteceu paso a paso para axudar aos nosos enxeñeiros a investigar e solucionar este fallo. Calquera detalle é importante.</translation>
 <translation id="4876895919560854374">Bloquear e desbloquear a pantalla</translation>
@@ -4836,7 +4830,6 @@
 <translation id="7530016656428373557">Índice de descarga en watts</translation>
 <translation id="7531779363494549572">Accede a Configuración &gt; Aplicacións e notificacións &gt; Notificacións.</translation>
 <translation id="7532009420053991888">A aplicación <ph name="LINUX_APP_NAME" /> non responde. Para pechala, selecciona Forzar peche.</translation>
-<translation id="7536333565791380193">Seguranza avanzada</translation>
 <translation id="7537451260744431038">Os sitios non poden utilizar cookies para mellorar a túa experiencia de navegación a través de funcións como manter a sesión iniciada ou lembrar artigos da túa cesta da compra</translation>
 <translation id="7539856059004947393">Chave de seguranza por Bluetooth</translation>
 <translation id="7540972813190816353">Produciuse un erro mentres se comprobaba se había actualizacións: <ph name="ERROR" /></translation>
@@ -5077,7 +5070,6 @@
     <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> O sistema reiniciarase durante o proceso.</translation>
 <translation id="7828731929332799387">Ao realizar esta acción, eliminaranse todas as cookies e os datos dos sitios de terceiros. Queres continuar?</translation>
 <translation id="7829298379596169484">Accedendo á entrada de audio</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> non puido comprobar os teus contrasinais. Verifica a conexión a Internet.</translation>
 <translation id="7829877209233347340">Pídelle a teu pai ou a túa nai que inicie sesión e che dea permiso para engadir unha conta de centro educativo</translation>
 <translation id="7830594666202422257">Conectar a Linux</translation>
 <translation id="7831491651892296503">Produciuse un erro ao configurar a rede</translation>
@@ -5414,7 +5406,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> desactivou o cursor do rato.</translation>
 <translation id="8264024885325823677">O teu administrador xestiona esta opción de configuración.</translation>
 <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" activou a pantalla completa.</translation>
-<translation id="826511437356419340">Modo de vista xeral da ventá activado. Pasar dedo para navegar. Premer tabulador no teclado.</translation>
+<translation id="826511437356419340">Modo de vista xeral da ventá activado. Pasa o dedo para navegar ou preme o tabulador no teclado.</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Trátase de información xeral acerca deste dispositivo e do seu uso, como o nivel de batería, a actividade da aplicación e do sistema, e os erros. Os datos utilizaranse coa finalidade de mellorar Android e algunha información adicional tamén axudará ás aplicacións de Google e aos socios, como os programadores de Android, a mellorar as súas aplicacións e os produtos.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />A desactivación desta función non afecta á capacidade deste dispositivo de enviar a información necesaria para os servizos esenciais, como a seguranza e as actualizacións do sistema.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />O propietario pode controlar esta función desde Configuración &gt; Configuración avanzada &gt; Enviar de forma automática datos de uso e diagnóstico a Google.<ph name="END_PARAGRAPH3" />
@@ -5951,7 +5943,6 @@
 <translation id="8966870118594285808">Volve abrir unha pestana se a pechaches accidentalmente</translation>
 <translation id="8967866634928501045">Preme Alt+Maiús+A para mostrar o contido</translation>
 <translation id="8968766641738584599">Gardar tarxeta</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> non puido comprobar os teus contrasinais. Téntao de novo dentro de 24 horas ou <ph name="BEGIN_LINK" />comproba os contrasinais na túa Conta de Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Esc</translation>
 <translation id="8972513834460200407">Consulta ao administrador da rede para asegurarte de que o firewall non estea bloqueando as descargas dos servidores de Google.</translation>
 <translation id="8973557916016709913">Quitar o nivel de zoom</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index bd2edcc4..c3e7ed9d 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">બુકમાર્ક નામ</translation>
 <translation id="1124772482545689468">વપરાશકર્તા</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> જેવું લાગે છે (મૂળ)</translation>
+<translation id="1126809382673880764">જોખમકારક વેબસાઇટ, ડાઉનલોડ અને એક્સ્ટેંશન સામે તમારું રક્ષણ કરતું નથી. Gmail અને Search જેવી Googleની અન્ય સેવાઓમાં, જ્યાં ઉપલબ્ધ હોય, ત્યાં તમને હજી પણ Safe Browsing સંરક્ષણ મળશે.</translation>
 <translation id="1128109161498068552">MIDI ઉપકરણોને ઍક્સેસ કરવા માટે સિસ્ટમના એકમાત્ર સંદેશાઓનો ઉપયોગ કરવાની કોઇપણ સાઇટ્સને  મંજૂરી આપશો નહીં</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">શોધ એંજિનમાં ફેરફાર કરો</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">જાણીતા નેટવર્ક્સ</translation>
 <translation id="123578888592755962">ડિસ્ક સંપૂર્ણ ભરેલી છે</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">વ્યક્તિગત માહિતીના સૂચનો ઇનપુટ કરો બતાવો</translation>
 <translation id="1239594683407221485">Files ઍપમાં ડિવાઇસના કન્ટેન્ટ વિશે શોધખોળ કરો.</translation>
 <translation id="124116460088058876">વધુ ભાષાઓ</translation>
 <translation id="1241753985463165747">માગવામાં આવે ત્યારે વર્તમાન વેબસાઇટ પર તમારો બધો ડેટા વાંચો અને બદલો</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">સેલ્યુલર સક્રિયકરણ</translation>
 <translation id="1407489512183974736">મધ્યમાં કાપેલું</translation>
 <translation id="1408504635543854729">Files ઍપ્લિકેશનમાં ડિવાઇસના કન્ટેન્ટમાં નવું શોધો. કન્ટેન્ટ એડમિન દ્વારા પ્રતિબંધિત છે અને બદલી શકતા નથી.</translation>
+<translation id="1408980562518920698">વ્યક્તિગત માહિતીને મેનેજ કરો</translation>
 <translation id="1410197035576869800">ઍપ આઇકન</translation>
 <translation id="1410616244180625362"><ph name="HOST" /> ને તમારા કૅમેરાને ઍક્સેસ કરવા દેવાનું ચાલુ રાખો</translation>
 <translation id="1414648216875402825">તમે <ph name="PRODUCT_NAME" />ના કામચલાઉ વર્ઝનમાં અપડેટ કરી રહ્યા છો, જે હજી વિકસી રહેલી સુવિધાઓ ધરાવે છે. ક્રેશ અને અનપેક્ષિત બગ આવશે. કૃપા કરીને સાવધાનીથી આગળ વધો.</translation>
@@ -430,6 +433,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript કન્સોલ</translation>
 <translation id="1587907146729660231">તમારી આંગળી વડે પાવર બટનને સ્પર્શ કરો</translation>
+<translation id="1588200577109872591">સ્માર્ટ ઇનપુટ</translation>
 <translation id="1588438908519853928">સામાન્ય</translation>
 <translation id="158849752021629804">હોમ નેટવર્કની આવશ્યકતા છે</translation>
 <translation id="1588870296199743671">આની સાથે લિંક ખોલો...</translation>
@@ -665,6 +669,7 @@
 <translation id="1879000426787380528">આ એકાઉન્ટથી સાઇન ઇન કરો</translation>
 <translation id="1880905663253319515">પ્રમાણપત્ર "<ph name="CERTIFICATE_NAME" />" ડિલીટ કરી દઈએ?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" />માંથી નેટવર્ક <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, કનેક્ટ કરો</translation>
+<translation id="1884705339276589024">Linux ડિસ્કનું કદ બદલો</translation>
 <translation id="1886996562706621347">પ્રોટોકૉલ્સ માટે ડિફૉલ્ટ હેન્ડલર્સ બનવા માટે સાઇટને પૂછવાની મંજૂરી આપો (ભલામણ કરેલ)</translation>
 <translation id="1887442540531652736">સાઇન-ઇનમાં ભૂલ</translation>
 <translation id="1887597546629269384">ફરી "હે Google" કહો</translation>
@@ -734,6 +739,7 @@
 <translation id="1979280758666859181">તમે ચેનલને <ph name="PRODUCT_NAME" />ના જૂના વર્ઝન સાથે બદલી રહ્યા છો. જ્યારે ચેનલ વર્ઝન હાલમાં તમારા ડિવાઇસ પર ઇન્સ્ટૉલ કરેલા વર્ઝનથી મેળ ખાતું હોય ત્યારે ચેનલ ફેરફાર લાગુ થશે.</translation>
 <translation id="197989455406964291">KDCમાં એન્ક્રિપ્શન પ્રકારની સુવિધા નથી</translation>
 <translation id="1982354452682152483">કોઈ વર્ણન ઉપલબ્ધ નથી.</translation>
+<translation id="1984417487208496350">કોઈ સંરક્ષણ નથી (સુઝાવ આપતા નથી)</translation>
 <translation id="1987317783729300807">એકાઉન્ટ્સ</translation>
 <translation id="1989112275319619282">બ્રાઉઝ કરો</translation>
 <translation id="1990512225220753005">આ પેજ પર શૉર્ટકટ બતાવશો નહીં</translation>
@@ -803,6 +809,7 @@
 <translation id="2090165459409185032">તમારી એકાઉન્ટ માહિતી ફરીથી મેળવવા માટે, આના પર જાઓ: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">સિસ્ટમ સુરક્ષા સેટિંગ</translation>
 <translation id="2091887806945687916">ધ્વનિ</translation>
+<translation id="2096478741073211388">જ્યારે તમે કેટલાક વિશેષ શબ્દો ટાઇપ કરો ત્યારે વ્યક્તિગત માહિતીના સૂચનો તમારું નામ, સરનામું અથવા ફોન નંબર સૂચવીને તમને વધુ ઝડપથી લખવામાં સહાય કરે છે. તમને માત્ર તમારા એકાઉન્ટ માટેના ખાનગી તેમજ વ્યક્તિગત કરેલા સૂચનો દેખાય છે.</translation>
 <translation id="2096715839409389970">ત્રીજા પક્ષની કુકીને સાફ કરો</translation>
 <translation id="2097372108957554726">નવા ડિવાઇસને નોંધવા માટે તમારે Chromeમાં સાઇન ઇન કરવાની જરૂર છે</translation>
 <translation id="2099172618127234427">તમે Chrome OS ડિબગીંગ સુવિધાઓને ચાલુ કરી રહ્યાં છો જે sshd daemon સેટ કરશે અને USB ડ્રાઇવથી બૂટ કરવું ચાલુ કરશે.</translation>
@@ -819,6 +826,7 @@
 <translation id="2114326799768592691">&amp;ફ્રેમ ફરીથી લોડ કરો</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> દ્વારા ફોટો</translation>
 <translation id="2119349053129246860"><ph name="APP" />માં ખોલો</translation>
+<translation id="2119461801241504254">Safe Browsing ચાલુ છે અને હાનિકારક સાઇટ તથા ડાઉનલોડથી તમારું રક્ષણ કરે છે</translation>
 <translation id="2120297377148151361">પ્રવૃત્તિ અને ક્રિયાપ્રતિક્રિયાઓ</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" />ને બ્લૉક કરેલી છે</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{કુકી બ્લૉક કરેલી છે}=1{કુકી બ્લૉક કરેલી છે, જેમાં 1 અપવાદ છે}one{કુકી બ્લૉક કરેલી છે, જેમાં {COUNT} અપવાદ છે}other{કુકી બ્લૉક કરેલી છે, જેમાં {COUNT} અપવાદ છે}}</translation>
@@ -999,7 +1007,6 @@
 <translation id="2342740338116612727">બુકમાર્ક ઉમેર્યા</translation>
 <translation id="2343747224442182863">આ ટૅબ પર ફોકસ કરો</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> પર 1 પેજ</translation>
-<translation id="2346953515226895098">SODA સેવા</translation>
 <translation id="2347644257713614136">Hangoutsનો ઉપયોગ અને Cast for Education એ Google ગોપનીયતા નીતિ દ્વારા સંચાલિત છે.</translation>
 <translation id="2348176352564285430">ઍપ્લિકેશન: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ડેટા લોડ કરવામાં ભૂલ</translation>
@@ -1887,6 +1894,7 @@
 <translation id="3515983984924808886">રીસેટ કન્ફર્મ કરવા માટે તમારી સિક્યુરિટી કીને સ્પર્શ કરો. સિક્યુરિટી કી પરની, તેના પિન સહિતની તેમાં સ્ટોર કરેલી બધી માહિતી ડિલીટ કરવામાં આવશે.</translation>
 <translation id="3518985090088779359">સ્વીકારો અને ચાલુ રાખો</translation>
 <translation id="351952459507671940">નવા ગ્રૂપમાં ઉમેરો</translation>
+<translation id="3521606918211282604">ડિસ્કનું કદ બદલો</translation>
 <translation id="3523642406908660543">જ્યારે કોઈ સાઇટ તમારા કમ્પ્યુટરને ઍક્સેસ કરવા માટે પ્લગિનનો ઉપયોગ કરવા માગે, તો પૂછો (ભલામણ કરેલ)</translation>
 <translation id="3524965460886318643">પ્રવૃત્તિઓ નિકાસ કરો</translation>
 <translation id="3526034519184079374">સાઇટના ડેટાને વાંચી કે બદલી શકતા નથી</translation>
@@ -1974,6 +1982,7 @@
 <translation id="3629631988386925734">Smart Lock ચાલુ કરવા માટે તમારો પાસવર્ડ દાખલ કરો. આગલી વખતે, તમારો ફોન તમારા <ph name="DEVICE_TYPE" />ને અનલૉક કરશે. તમે સેટિંગમાં Smart Lock બંધ કરી શકો છો.</translation>
 <translation id="3630132874740063857">તમારો ફોન</translation>
 <translation id="3630995161997703415">આ સાઇટને ગમે ત્યારે ઉપયોગમાં લેવા માટે તેને તમારા શેલ્ફમાં ઉમેરો</translation>
+<translation id="3633309367764744750">તમે હજુ સુધી મુલાકાત લીધી ન હોય એવા પેજ સહિતના, પેજમાંથી માહિતી પહેલેથી મેળવી લે છે. જો તમે કુકીની મંજૂરી આપી હોય, તો મેળવેલી માહિતીમાં કુકી શામેલ હોય છે.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />માંથી નેટવર્ક <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, તમારા વ્યવસ્થાપક દ્વારા મેનેજ કરવામાં આવે છે, વિગતો</translation>
 <translation id="3635241501480133979">આ ડેટા તમારી સંસ્થાની સુરક્ષા નીતિઓનું ઉલ્લંઘન કરે છે અને તેને છોડી શકાશે નહીં.</translation>
 <translation id="3635353578505343390">Googleને પ્રતિસાદ મોકલો</translation>
@@ -2272,7 +2281,6 @@
 <translation id="3971764089670057203">આ સિક્યુરિટી કીમાંના ફિંગરપ્રિન્ટ</translation>
 <translation id="3973660817924297510">પાસવર્ડ ચેક કરી રહ્યાં છીએ (<ph name="TOTAL_PASSWORDS" />માંથી <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">ક્ષેત્ર માટે સર્વરનો સંપર્ક કરવામાં નિષ્ફળ થયાં</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> તમારા પાસવર્ડ ચેક કરી શકતું નથી. થોડા સમય પછી ફરી પ્રયાસ કરો.</translation>
 <translation id="3976108569178263973">કોઈ પ્રિન્ટર ઉપલબ્ધ નથી.</translation>
 <translation id="397703832102027365">ફાઇનલ કરી રહ્યું છે...</translation>
 <translation id="3977886311744775419">ઑટોમૅટિક અપડેટ આ નેટવર્ક પ્રકાર પર ડાઉનલોડ થતાં નથી, પણ તમે અપડેટ મેન્યુઅલી ચેક કરી શકો છો.</translation>
@@ -2573,7 +2581,6 @@
 <translation id="4421932782753506458">ફ્લફી</translation>
 <translation id="4423376891418188461">સેટિંગ્સ પુનઃસ્થાપિત કરો</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, તમારા વ્યવસ્થાપક માટે આવશ્યક છે કે તમે તમારો પાસવર્ડ બદલો.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> તમારા પાસવર્ડ ચેક કરી શકતું નથી. 24 કલાક પછી ફરી પ્રયાસ કરો.</translation>
 <translation id="4429030830601238961">આ ડેટા તમારી સંસ્થાની સુરક્ષા નીતિઓનું ઉલ્લંઘન કરે છે અને તેને પેસ્ટ કરી શકાશે નહીં.</translation>
 <translation id="4430019312045809116">વૉલ્યૂમ</translation>
 <translation id="4430369329743628066">બુકમાર્ક ઉમેરાયો</translation>
@@ -2586,7 +2593,6 @@
 <translation id="4441124369922430666">શું જ્યારે મશીન ચાલુ થાય ત્યારે તમે આ એપ્લિકેશનને આપમેળે પ્રારંભ કરવા માંગો છો?</translation>
 <translation id="4441147046941420429">આગળ વધવા માટે, તમારા ડિવાઇસમાંથી તમારી સિક્યુરિટી કી કાઢી નાખો, ત્યાર બાદ તેને ફરી દાખલ કરીને તેનો સ્પર્શ કરો</translation>
 <translation id="444134486829715816">વિસ્તૃત કરો...</translation>
-<translation id="4442329324652245220">જ્યારે તમે તમારા Google એકાઉન્ટ વડે સાઇન ઇન કરો ત્યારે <ph name="IDS_SHORT_PRODUCT_NAME" /> તમારા પાસવર્ડ ચેક કરી શકે છે</translation>
 <translation id="4442424173763614572">DNS લુકઅપ નિષ્ફળ ગયું</translation>
 <translation id="4443536555189480885">&amp;Help</translation>
 <translation id="4444304522807523469">USB અથવા સ્થાનિક નેટવર્ક મારફતે જોડાયેલ દસ્તાવેજ સ્કેનર્સની ઍક્સેસ</translation>
@@ -2613,7 +2619,6 @@
 <translation id="4476659815936224889">આ કોડ સ્કૅન કરવા માટે, તમે તમારા ફોન પર QR સ્કૅનર ઍપ અથવા અમુક કૅમેરા ઍપનો ઉપયોગ કરી શકો છો.</translation>
 <translation id="4477015793815781985">Ctrl, Alt અથવા ⌘ શામેલ કરો</translation>
 <translation id="4478664379124702289">લિં&amp;કને આ રીતે સાચવો...</translation>
-<translation id="4478777936860197922">કોઈ સાચવેલા પાસવર્ડ નથી. જ્યારે તમે તમારા પાસવર્ડ સાચવો ત્યારે <ph name="IDS_SHORT_PRODUCT_NAME" /> તેને ચેક કરી શકે છે.</translation>
 <translation id="4479424953165245642">કિઓસ્ક એપ્લિકેશન્સનું સંચાલન કરો</translation>
 <translation id="4479639480957787382">ઇથરનેટ</translation>
 <translation id="4479877282574735775">વર્ચ્યુઅલ મશીનની ગોઠવણી કરી રહ્યાં છીએ. આમાં થોડો સમય લાગી શકે છે.</translation>
@@ -2859,7 +2864,6 @@
 <translation id="4849517651082200438">ઇન્સ્ટોલ કરશો નહીં</translation>
 <translation id="4850669014075537160">સ્ક્રોલિંગ</translation>
 <translation id="4850886885716139402">જુઓ</translation>
-<translation id="485197095346966382">જ્યારે તમે ચેડાં કરવામાં આવેલા પાસવર્ડ વડે સાઇન ઇન કરશો ત્યારે <ph name="IDS_SHORT_PRODUCT_NAME" /> તમને સૂચિત કરશે</translation>
 <translation id="4853020600495124913">&amp;નવી વિંડોમાં ખોલો</translation>
 <translation id="4854317507773910281">મંજૂરી માટે માતાપિતાનું એકાઉન્ટ પસંદ કરો</translation>
 <translation id="485480310608090163">વધુ સેટિંગ અને પરવાનગીઓ</translation>
@@ -3935,6 +3939,7 @@
 <translation id="6298962879096096191">Android ઍપ્લિકેશનોને ઇન્સ્ટૉલ કરવા માટે Google Play નો ઉપયોગ કરો</translation>
 <translation id="630065524203833229">&amp;બહાર નીકળો</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" />ને ઑટોમૅટિક રીતે ગોઠવી શકાતું નથી. કૃપા કરીને વિગતવાર પ્રિન્ટરની વિગતો જણાવો. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">વ્યક્તિગત માહિતીના સૂચનો</translation>
 <translation id="6305607932814307878">વૈશ્વિક નીતિ:</translation>
 <translation id="6307990684951724544">સિસ્ટમ વ્યસ્ત છે</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> દ્વારા આપવામાં આવેલું સાઇન-ઇન</translation>
@@ -4013,6 +4018,7 @@
 <translation id="641081527798843608">વિષય મેળ</translation>
 <translation id="6412673304250309937">URLsને Chromeમાં સંગ્રહિત અસુરક્ષિત સાઇટની સૂચિ સાથે ચેક કરે છે. જો કોઈ સાઇટ તમારો પાસવર્ડ ચોરી કરવાનો પ્રયાસ કરે અથવા તમે કોઈ નુકસાનકારક ફાઇલ ડાઉનલોડ કરો, ત્યારે Chrome પેજ કન્ટેન્ટના બિટની સાથોસાથ URLs પણ Safe Browsingને મોકલી શકે છે.</translation>
 <translation id="6412931879992742813">નવી છુપી વિંડો</translation>
+<translation id="6413591858632097328">આનાથી <ph name="ORIGIN_NAME" /> અને તેની ઇન્સ્ટૉલ કરેલી ઍપ દ્વારા સ્ટોર કરવામાં આવેલો બધો ડેટા અને કુકી સાફ કરવામાં આવશે.</translation>
 <translation id="641469293210305670">અપડેટ અને ઍપ ઇન્સ્ટૉલ કરો</translation>
 <translation id="6414888972213066896">આ પૃષ્ઠની મુલાકાત લો છો તે ઠીક છે કે કેમ તેવું તમે તમારા માતાપિતાને પૂછ્યું</translation>
 <translation id="6415900369006735853">તમારા ફોન મારફત ઇન્ટરનેટ સાથે કનેક્ટ કરો</translation>
@@ -4823,7 +4829,6 @@
 <translation id="7530016656428373557">ડિસ્ચાર્જ દર વોટ્સમાં</translation>
 <translation id="7531779363494549572">સેટિંગ &gt; ઍપ અને નોટિફિકેશન &gt; નોટિફિકેશન પર જાઓ.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ચાલી રહી નથી. ઍપ બંધ કરવા માટે "ફરજિયાત બંધ" પસંદ કરો.</translation>
-<translation id="7536333565791380193">વિગતવાર સુરક્ષા</translation>
 <translation id="7537451260744431038">તમને વધુ સારો બ્રાઉઝિંગ અનુભવ આપવા માટે, ઉદાહરણ તરીકે, તમને સાઇન ઇન કરીને રાખવા અથવા તમારા શૉપિંગ કાર્ટની આઇટમ યાદ રાખવા માટે, સાઇટ કુકીનો ઉપયોગ કરી શકતી નથી</translation>
 <translation id="7539856059004947393">બ્લૂટૂથ સુરક્ષા કોડ</translation>
 <translation id="7540972813190816353">અપડેટ્સ માટે તપાસ કરતી વખતે એક ભૂલ આવી: <ph name="ERROR" /></translation>
@@ -5063,7 +5068,6 @@
     <ph name="BEGIN_BOLD" />નોંધ:<ph name="END_BOLD" /> પ્રક્રિયા દરમ્યાન આ સિસ્ટમ રીબૂટ થશે.</translation>
 <translation id="7828731929332799387">આનાથી ત્રીજા પક્ષ સંદર્ભમાં ઉપલબ્ધ બધી કુકી અને સાઇટ ડેટા ડિલીટ થઈ જશે. શું તમે ચાલુ રાખવા માગો છો?</translation>
 <translation id="7829298379596169484">ઑડિઓ ઇનપુટને ઍક્સેસ કરી રહ્યું છે</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> તમારા પાસવર્ડ ચેક કરી શકતું નથી. તમારું ઇન્ટરનેટ કનેક્શન ચેક કરવાનો પ્રયાસ કરો.</translation>
 <translation id="7829877209233347340">સ્કૂલ એકાઉન્ટ ઉમેરવાની પરવાનગી આપવા માટે તમારા માતાપિતાને સાઇન ઇન કરવાનું કહો</translation>
 <translation id="7830594666202422257">Linux સાથે કનેક્ટ કરો</translation>
 <translation id="7831491651892296503">નેટવર્કની ગોઠવણી કરતી વખતે ભૂલ આવી</translation>
@@ -5933,7 +5937,6 @@
 <translation id="8966870118594285808">જો તમે ટૅબ અકસ્માતે બંધ કર્યું હોય, તો તે ફરી ખોલો</translation>
 <translation id="8967866634928501045">બતાવવા માટે Alt Shift A દબાવો</translation>
 <translation id="8968766641738584599">કાર્ડ સાચવો</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> તમારા પાસવર્ડ ચેક કરી શકતું નથી. 24 કલાક પછી ફરી પ્રયાસ કરજો અથવા <ph name="BEGIN_LINK" />તમારા Google એકાઉન્ટમાં પાસવર્ડ ચેક કરો<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">બહાર નીકળો</translation>
 <translation id="8972513834460200407">ફાયરવોલ Google સર્વર્સથી ડાઉનલોડ્સ અવરોધિત તો નથી કરતું તેની ખાતરી કરવા માટે કૃપા કરીને તમારા નેટવર્ક વ્યવસ્થાપક સાથે તપાસ કરો.</translation>
 <translation id="8973557916016709913">ઝૂમ સ્તર દૂર કરો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 2b40951..5c938a73 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">बुकमार्क का नाम</translation>
 <translation id="1124772482545689468">उपयोगकर्ता</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> जैसा लगता है (मूल)</translation>
+<translation id="1126809382673880764">इस मोड में आपको नुकसान पहुंचाने वाली वेबसाइटों, डाउनलोड, और एक्सटेंशन से सुरक्षा नहीं मिलती. Gmail और Search जैसी दूसरी Google की सेवाओं में, आपको अब भी सुरक्षित ब्राउज़िंग की सुरक्षा मिल सकती है.</translation>
 <translation id="1128109161498068552">जब कोई साइट MIDI डिवाइस को एक्सेस करने के लिए सिस्टम के खास संदेशों का इस्तेमाल करना चाहे, तो अनुमति न दें</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">खोज इंजन में बदलाव करें</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">ज्ञात नेटवर्क</translation>
 <translation id="123578888592755962">डिस्‍क भरी हुई है</translation>
 <translation id="1238191093934674082">खुला VPN</translation>
+<translation id="1239439601391236986">निजी जानकारी के सुझाव दिखाएं</translation>
 <translation id="1239594683407221485">Files ऐप्लिकेशन में डिवाइस की सामग्री देखें.</translation>
 <translation id="124116460088058876">ज़्यादा भाषाएं</translation>
 <translation id="1241753985463165747">लागू किए जाने पर अभी वाली वेबसाइट पर मौजूद आपका डेटा पढ़ और बदल सकता है</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">सेल्युलर एक्टिवेशन</translation>
 <translation id="1407489512183974736">मध्य में काटा गया</translation>
 <translation id="1408504635543854729">डिवाइस की सामग्री फ़ाइल ऐप्लिकेशन में एक्सप्लोर करें. सामग्री किसी एडमिन ने प्रतिबंधित की है और उसे बदला नहीं जा सकता.</translation>
+<translation id="1408980562518920698">निजी जानकारी को प्रबंधित करें</translation>
 <translation id="1410197035576869800">ऐप्लिकेशन आइकॉन</translation>
 <translation id="1410616244180625362"><ph name="HOST" /> को अपना कैमरा एक्सेस करते रहने दें</translation>
 <translation id="1414648216875402825">आप <ph name="PRODUCT_NAME" /> के ऐसे अस्थिर वर्शन में अपडेट कर रहे हैं जिसकी सुविधाओं पर काम चल रहा है. क्रैश और अप्रत्याशित बग उत्पन्न होंगे. कृपया सावधानी से आगे बढ़ें.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript कंसोल</translation>
 <translation id="1587907146729660231">अपनी उंगली से पावर बटन को छुएं</translation>
+<translation id="1588200577109872591">स्मार्ट इनपुट</translation>
 <translation id="1588438908519853928">सामान्य</translation>
 <translation id="158849752021629804">होम नेटवर्क की आवश्यकता है</translation>
 <translation id="1588870296199743671">इनके साथ लिंक खोलें...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">इस रूप में साइन इन करें</translation>
 <translation id="1880905663253319515">प्रमाणपत्र "<ph name="CERTIFICATE_NAME" />" मिटाएं?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" /> में से <ph name="NETWORK_INDEX" /> नेटवर्क, <ph name="NETWORK_NAME" />, कनेक्ट करें</translation>
+<translation id="1884705339276589024">Linux डिस्क का साइज़ बदलें</translation>
 <translation id="1886996562706621347">साइटों को प्रोटोकॉल के लिए डिफ़ॉल्‍ट हैंडलर बनने के लिए पूछने देने की अनुमति दें (सुझाव)</translation>
 <translation id="1887442540531652736">साइन इन में गड़बड़ी</translation>
 <translation id="1887597546629269384">दोबारा "Hey Google" बोलें</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">आप <ph name="PRODUCT_NAME" /> के पुराने वर्शन वाले चैनल में बदल रहे हैं. चैनल बदलाव तब लागू किया जाएगा जब चैनल का वर्शन आपके डिवाइस पर वर्तमान में इंस्टॉल किए गए वर्शन से मिलान करेगा.</translation>
 <translation id="197989455406964291">केडीसी में सुरक्षित करने का यह तरीका इस्तेमाल नहीं किया जा सकता.</translation>
 <translation id="1982354452682152483">कोई जानकारी मौजूद नहीं है.</translation>
+<translation id="1984417487208496350">कोई सुरक्षा नहीं (हम ऐसा करने का सुझाव नहीं देते)</translation>
 <translation id="1987317783729300807">खाते</translation>
 <translation id="1989112275319619282">ब्राउज़ करें</translation>
 <translation id="1990512225220753005">इस पेज पर शॉर्टकट न दिखाएं</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">अपनी खाता जानकारी पुनर्प्राप्‍त करने के लिए, यहां जाएं: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">सिस्‍टम सुरक्षा सेटिंग</translation>
 <translation id="2091887806945687916">आवाज़</translation>
+<translation id="2096478741073211388">निजी जानकारी के सुझावों की मदद से आप ज़्यादा तेज़ी से लिख सकते हैं. जब आप कुछ खास शब्द लिखते हैं, तो आपको नाम, पते या फ़ाेन नंबर का सुझाव मिलता है. आपके खाते पर दिए जाने वाले, निजी और मनमुताबिक सुझाव सिर्फ़ आपको दिखते हैं.</translation>
 <translation id="2096715839409389970">तीसरे पक्ष की कुकी मिटाएं</translation>
 <translation id="2097372108957554726">नए डिवाइस रजिस्टर करने के लिए आपको Chrome में साइन इन करना होगा.</translation>
 <translation id="2099172618127234427">आप Chrome OS की डीबग करने वाली सुविधाएं चालू कर रहे हैं जिससे sshd daemon सेट हो जाएगा और यूएसबी डिवाइस से बूट करना चालू हो जाएगा.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">फ़्रेम को फिर से लोड करें</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> की फ़ोटो</translation>
 <translation id="2119349053129246860"><ph name="APP" /> में खोलें</translation>
+<translation id="2119461801241504254">सुरक्षित ब्राउज़िंग की सुविधा चालू है. यह आपको नुकसान पहुंचाने वाली साइटों और डाउनलोड से बचाती है</translation>
 <translation id="2120297377148151361">गतिविधि और इंटरैक्शन</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> को ब्लॉक किया गया है</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{कुकी ब्लॉक की गई हैं}=1{कुकी ब्लॉक की गई हैं, 1 अपवाद}one{कुकी ब्लॉक की गई हैं, {COUNT} अपवाद}other{कुकी ब्लॉक की गई हैं, {COUNT} अपवाद}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">बुकमार्क जोड़े गए</translation>
 <translation id="2343747224442182863">इस टैब पर फ़ोकस करें</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> में 1 पेज</translation>
-<translation id="2346953515226895098">एसओडीए की सेवा</translation>
 <translation id="2347644257713614136">Hangouts और Cast for Education का इस्तेमाल 'Google निजता नीति' से नियंत्रित होता है.</translation>
 <translation id="2348176352564285430">ऐप्लिकेशन: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">डेटा लोड होने में कोई गड़बड़ी हुई</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">रीसेट की पुष्टि करने के लिए, अपनी सुरक्षा कुंजी फिर से छुएं. ऐसा करने से सुरक्षा कुंजी का पिन और उस पर मौजूद पूरी जानकारी मिट जाएगी.</translation>
 <translation id="3518985090088779359">स्‍वीकार करें और जारी रखें</translation>
 <translation id="351952459507671940">नए समूह में जोड़ें</translation>
+<translation id="3521606918211282604">डिस्क का साइज़ बदलें</translation>
 <translation id="3523642406908660543">जब कोई साइट आपका कंप्यूटर एक्सेस करने के लिए किसी प्लग इन का इस्तेमाल करना चाहे, तो इसके लिए पूछें (सुझाया गया)</translation>
 <translation id="3524965460886318643">गतिविधियां एक्सपोर्ट करें</translation>
 <translation id="3526034519184079374">साइट का डेटा पढ़ा या बदला नहीं जा सकता</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Smart Lock चालू करने के लिए अपना पासवर्ड डालें. अगली बार, आपका फ़ोन आपके <ph name="DEVICE_TYPE" /> को अनलॉक कर देगा. आप सेटिंग में जाकर Smart Lock को बंद कर सकते हैं.</translation>
 <translation id="3630132874740063857">आपका फ़ोन</translation>
 <translation id="3630995161997703415">इस साइट को अपनी अलमारी में जोड़ें ताकि आप किसी भी समय इसका उपयोग कर सकें</translation>
+<translation id="3633309367764744750">पेजाें से जानकारी पहले ही फ़ेच करता है. इनमें वे पेज भी शामिल हाेते हैं जिन्हें आपने अभी तक नहीं देखा है. अगर आपने कुकी की अनुमति दे रखी है, तो फ़ेच की गई जानकारी में कुकी शामिल हो सकती हैं.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_COUNT" /> में से <ph name="NETWORK_INDEX" /> नेटवर्क, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, आपका एडमिन प्रबंधित करता है, जानकारी</translation>
 <translation id="3635241501480133979">यह डेटा आपके संगठन की सुरक्षा नीतियों का उल्लंघन करता है. इसलिए, इसे अपलोड नहीं किया जा सकता.</translation>
 <translation id="3635353578505343390">Google को सुझाव भेजें</translation>
@@ -2275,7 +2284,6 @@
 <translation id="3971764089670057203">इस सुरक्षा कुंजी के लिए दर्ज किए गए फ़िंगरप्रिंट</translation>
 <translation id="3973660817924297510">पासवर्ड की जांच की जा रही है (<ph name="TOTAL_PASSWORDS" /> में से <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">दिए गए क्षेत्र के लिए सर्वर से संपर्क नहीं हो पाया</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> आपके पासवर्ड की जांच नहीं कर सकता. कुछ देर बाद कोशिश करें.</translation>
 <translation id="3976108569178263973">कोई भी प्रिंटर उपलब्ध नहीं है</translation>
 <translation id="397703832102027365">अंतिम रूप दिया जा रहा है...</translation>
 <translation id="3977886311744775419">इस नेटवर्क प्रकार पर अपडेट अपने आप डाउनलोड नहीं होते, लेकिन आप मैन्युअल रूप से अपडेट के लिए देख सकते हैं.</translation>
@@ -2576,7 +2584,6 @@
 <translation id="4421932782753506458">फ्लफ़ी</translation>
 <translation id="4423376891418188461">सेटिंग फिर से स्थापित करें</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, आपके व्यवस्थापक के लिए ज़रूरी है कि आप अपना पासवर्ड बदलें.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> आपके पासवर्ड की जांच नहीं कर सकता. 24 घंटे बाद कोशिश करें.</translation>
 <translation id="4429030830601238961">यह डेटा आपके संगठन की सुरक्षा नीतियों का उल्लंघन करता है. इसलिए, इसे चिपकाया नहीं जा सकता.</translation>
 <translation id="4430019312045809116">मात्रा</translation>
 <translation id="4430369329743628066">बुकमार्क जोड़ा गया</translation>
@@ -2589,7 +2596,6 @@
 <translation id="4441124369922430666">क्या आप चाहते हैं कि मशीन चालू होने पर यह ऐप्लिकेशन अपने आप शुरू हो जाए?</translation>
 <translation id="4441147046941420429">जारी रखने के लिए, अपनी सुरक्षा कुंजी को अपने डिवाइस से हटाएं. इसके बाद, उसे दाेबारा डालें और छुएं.</translation>
 <translation id="444134486829715816">पूरा खोलें...</translation>
-<translation id="4442329324652245220">आप जब अपने Google खाते से साइन इन करते हैं, तब <ph name="IDS_SHORT_PRODUCT_NAME" /> आपके पासवर्ड की जांच कर सकता है</translation>
 <translation id="4442424173763614572">DNS लुकअप विफल</translation>
 <translation id="4443536555189480885">&amp;मदद</translation>
 <translation id="4444304522807523469">यूएसबी के ज़रिए अटैच किए गए या स्‍थानीय नेटवर्क पर मौजूद दस्‍तावेज़ स्‍कैनर को ऐक्‍सेस करें</translation>
@@ -2616,7 +2622,6 @@
 <translation id="4476659815936224889">इस कोड को स्कैन करने के लिए, आप अपने फ़ोन पर क्यूआर स्कैनर या कुछ कैमरा ऐप्लिकेशन का इस्तेमाल कर सकते हैं.</translation>
 <translation id="4477015793815781985">Ctrl, Alt या ⌘ को शामिल करें</translation>
 <translation id="4478664379124702289">लिंक को इस रूप में सेव करें...</translation>
-<translation id="4478777936860197922">कोई भी पासवर्ड सेव नहीं किया गया है. <ph name="IDS_SHORT_PRODUCT_NAME" /> आपके पासवर्ड की जांच तब ही कर सकता है, जब वे पहले से सेव हाेते हैं.</translation>
 <translation id="4479424953165245642">कियोस्क ऐप्स  प्रबंधित करें</translation>
 <translation id="4479639480957787382">इथरनेट</translation>
 <translation id="4479877282574735775">वर्चुअल मशीन कॉन्फ़िगर हो रही है. इसमें कुछ मिनट लग सकते हैं.</translation>
@@ -2862,7 +2867,6 @@
 <translation id="4849517651082200438">इंस्‍टॉल न करें</translation>
 <translation id="4850669014075537160">स्क्रॉल करना</translation>
 <translation id="4850886885716139402">देखें</translation>
-<translation id="485197095346966382">जब आप किसी हैक हो चुके या चोरी हो चुके पासवर्ड से साइन इन करेंगे, तो <ph name="IDS_SHORT_PRODUCT_NAME" /> आपको इसकी सूचना देगा</translation>
 <translation id="4853020600495124913">&amp;नई विंडो में खोलें</translation>
 <translation id="4854317507773910281">मंज़ूरी के लिए माता-पिता का खाता चुनें</translation>
 <translation id="485480310608090163">ज़्यादा सेटिंग और अनुमतियां</translation>
@@ -3936,6 +3940,7 @@
 <translation id="6298962879096096191">Android ऐप्लिकेशन इंस्टॉल करने के लिए Google Play का उपयोग करें</translation>
 <translation id="630065524203833229">&amp;बाहर निकलें</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> को अपने-आप कॉन्फ़िगर नहीं किया जा सका. कृपया प्रिंटर की बेहतर जानकारी के बारे में बताएं. <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">निजी जानकारी के सुझाव</translation>
 <translation id="6305607932814307878">वैश्विक नीति:</translation>
 <translation id="6307990684951724544">सिस्‍टम व्‍यस्‍त है</translation>
 <translation id="6308493641021088955">साइन-इन की सुविधा <ph name="EXTENSION_NAME" /> ने दी है</translation>
@@ -4014,6 +4019,7 @@
 <translation id="641081527798843608">विषय मिलान</translation>
 <translation id="6412673304250309937">Chrome में पहले से सेव असुरक्षित साइटों के साथ यूआरएल की जांच करता है. अगर कोई साइट आपका पासवर्ड चुराने की कोशिश करती है या आप कोई नुकसान पहुंचाने वाली फ़ाइल डाउनलोड करते हैं, तो Chrome सुरक्षित ब्राउज़िंग की सेवा को उनका यूआरएल भेजता है. यूआरएल के साथ इनमें उन पेज की कुछ सामग्री भी शामिल होती है.</translation>
 <translation id="6412931879992742813">नई गुप्त विंडो</translation>
+<translation id="6413591858632097328">इससे वे सभी डेटा और कुकी मिट जाएंगे जिन्हें <ph name="ORIGIN_NAME" /> और इंस्टॉल किए गए ऐप्लिकेशन ने सेव किया है.</translation>
 <translation id="641469293210305670">अपडेट और ऐप्लिकेशन इंस्टॉल करें</translation>
 <translation id="6414888972213066896">आपने अपने अभिभावक से पूछा है कि इस साइट पर जाना ठीक है या नहीं</translation>
 <translation id="6415900369006735853">अपने फ़ोन पर इंटरनेट चालू करें</translation>
@@ -4824,7 +4830,6 @@
 <translation id="7530016656428373557">डिस्चार्ज दर वॉट में</translation>
 <translation id="7531779363494549572">सेटिंग &gt; ऐप्लिकेशन और सूचनाएं &gt; सूचनाएं पर जाएं.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> काम नहीं कर रहा है. ऐप्लिकेशन को बंद करने के लिए "ज़बरदस्ती बंद करें" चुनें.</translation>
-<translation id="7536333565791380193">बेहतर सुरक्षा</translation>
 <translation id="7537451260744431038">साइटें आपके ब्राउज़ करने के अनुभव को बेहतर बनाने के लिए कुकी का इस्तेमाल नहीं कर सकतीं. जैसे, आपको साइन इन बनाए रखने के लिए या आपने शॉपिंग कार्ट में जो आइटम सेव किए हैं उन्हें याद रखने के लिए</translation>
 <translation id="7539856059004947393">ब्लूटूथ सुरक्षा चाबी</translation>
 <translation id="7540972813190816353">अपडेट की जाँच करते समय कोई गड़बड़ी आई: <ph name="ERROR" /></translation>
@@ -5064,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />नोट:<ph name="END_BOLD" />  इस प्रक्रिया के दौरान सिस्टम फिर चालू होगा.</translation>
 <translation id="7828731929332799387">इससे तीसरे पक्ष से जुड़ी सभी उपलब्ध कुकी और साइट डेटा मिट जाएंगे. क्या आप जारी रखना चाहते हैं?</translation>
 <translation id="7829298379596169484">ऑडियो इनपुट ऐक्सेस हो रहा है</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> आपके पासवर्ड की जांच नहीं कर सकता. अपने इंटरनेट कनेक्शन की जांच करें.</translation>
 <translation id="7829877209233347340">स्कूल वाला खाता जोड़ने की अनुमति देने के लिए, अपने माता-पिता से साइन इन करने को कहें</translation>
 <translation id="7830594666202422257">Linux से कनेक्ट करें</translation>
 <translation id="7831491651892296503">नेटवर्क कॉन्फ़िगर करने में गड़बड़ी</translation>
@@ -5939,7 +5943,6 @@
 <translation id="8966870118594285808">अगर आपने गलती से किसी टैब को बंद कर दिया था तो उसे फिर से खोलें</translation>
 <translation id="8967866634928501045">दिखाने के लिए Alt Shift A दबाएं</translation>
 <translation id="8968766641738584599">कार्ड सेव करें</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> आपके पासवर्ड की जांच नहीं कर सकता. 24 घंटे बाद कोशिश करें या <ph name="BEGIN_LINK" />अपने Google खाते के पासवर्ड की जांच करें<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">यह पक्का करने के लिए कृपया अपने नेटवर्क एडमिन से बात करें कि फ़ायरवॉल Google के सर्वर से होने वाले डाउनलोड को ब्लॉक नहीं कर रहा है.</translation>
 <translation id="8973557916016709913">ज़ूम लेवल निकालें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 6e36228..85e1e12 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Oznake su dodane</translation>
 <translation id="2343747224442182863">Fokusiraj tu karticu</translation>
 <translation id="2345723121311404059">1 stranica na pisač <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Usluga SODA</translation>
 <translation id="2347644257713614136">Upotrebu usluga Hangouts i Cast for Education reguliraju Googleova pravila o privatnosti.</translation>
 <translation id="2348176352564285430">Aplikacija: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Pogreška prilikom učitavanja podataka</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Otisci prsta na ovom sigurnosnom ključu</translation>
 <translation id="3973660817924297510">Provjera zaporki (<ph name="CHECKED_PASSWORDS" /> od <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Kontaktiranje poslužitelja za domenu nije uspjelo</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može provjeriti vaše zaporke. Pokušajte opet kasnije.</translation>
 <translation id="3976108569178263973">Nema dostupnih pisača.</translation>
 <translation id="397703832102027365">Dovršavanje...</translation>
 <translation id="3977886311744775419">Na ovoj vrsti mreže ne preuzimaju se automatska ažuriranja, no možete ih potražiti ručno.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Pahuljica</translation>
 <translation id="4423376891418188461">Vrati postavke</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, vaš administrator traži da promijenite zaporku.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može provjeriti vaše zaporke. Pokušajte ponovno nakon 24 sata.</translation>
 <translation id="4429030830601238961">Ovi podaci krše sigurnosna pravila vaše organizacije, pa se ne mogu zalijepiti.</translation>
 <translation id="4430019312045809116">Glasnoća</translation>
 <translation id="4430369329743628066">Oznaka je dodana</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Želite li automatski pokrenuti tu aplikaciju kada se uređaj uključi?</translation>
 <translation id="4441147046941420429">Da biste nastavili, uklonite sigurnosni ključ iz uređaja, a zatim ga ponovo umetnite i dodirnite</translation>
 <translation id="444134486829715816">Proširi...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> može provjeriti vaše zaporke kad se prijavite Google računom</translation>
 <translation id="4442424173763614572">Nije uspjelo pretraživanje DNS poslužitelja</translation>
 <translation id="4443536555189480885">&amp;Help (Pomoć)</translation>
 <translation id="4444304522807523469">pristupiti skenerima dokumenata priključenim preko USB-a ili na lokalnu mrežu</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Taj kôd možete skenirati pomoću aplikacije za skeniranje QR kodova na svojem telefonu ili pomoću nekih aplikacija za kamere.</translation>
 <translation id="4477015793815781985">Mora sadržavati Ctrl, Alt ili ⌘</translation>
 <translation id="4478664379124702289">Spremi ve&amp;zu kao...</translation>
-<translation id="4478777936860197922">Nema nijedne spremljene zaporke. <ph name="IDS_SHORT_PRODUCT_NAME" /> može provjeriti vaše zaporke kad ih spremite.</translation>
 <translation id="4479424953165245642">Upravljanje aplikacijama kioska</translation>
 <translation id="4479639480957787382">Eternet</translation>
 <translation id="4479877282574735775">Konfigurira se virtualno računalo. To može potrajati nekoliko minuta.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Ne instaliraj</translation>
 <translation id="4850669014075537160">Pomicanje</translation>
 <translation id="4850886885716139402">Prikaz</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> će vas obavijestiti kada se prijavite ugroženom zaporkom</translation>
 <translation id="4853020600495124913">Otvaranje u &amp;novom prozoru</translation>
 <translation id="4854317507773910281">Odaberi roditeljski račun za odobrenje</translation>
 <translation id="485480310608090163">Više postavki i dopuštenja</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Stopa pražnjenja u vatima</translation>
 <translation id="7531779363494549572">Otvorite Postavke &gt; Aplikacije i obavijesti &gt; Obavijesti.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ne reagira. Odaberite "Prisilno zatvori" da biste zatvorili tu aplikaciju.</translation>
-<translation id="7536333565791380193">Napredna sigurnost</translation>
 <translation id="7537451260744431038">Web-lokacije ne mogu upotrebljavati kolačiće za poboljšanje vašeg doživljaja pregledavanja, primjerice da biste ostali prijavljeni ili da bi stavke u vašoj košarici ostale zapamćene</translation>
 <translation id="7539856059004947393">Bluetooth sigurnosni ključ</translation>
 <translation id="7540972813190816353">Došlo je do pogreške prilikom traženja ažuriranja: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Napomena:<ph name="END_BOLD" /> sustav će se ponovo pokrenuti tijekom postupka.</translation>
 <translation id="7828731929332799387">Time će se izbrisati svi kolačići i podaci o web-lokaciji treće strane. Želite li nastaviti?</translation>
 <translation id="7829298379596169484">Pristupanje audioulazu</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može provjeriti vaše zaporke. Provjerite internetsku vezu.</translation>
 <translation id="7829877209233347340">Zamoli roditelja da se prijavi i da ti da dopuštenje za dodavanje školskog računa</translation>
 <translation id="7830594666202422257">Poveži s Linuxom</translation>
 <translation id="7831491651892296503">Pogreška prilikom konfiguriranja mreže</translation>
@@ -5296,7 +5288,7 @@
 <translation id="8107015733319732394">Trgovina Google Play instalira se na vašem uređaju <ph name="DEVICE_TYPE" />. To bi moglo potrajati nekoliko minuta.</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{Bez kolačića treće strane}=1{Blokiran je jedan kolačić treće strane}one{Blokiran je # kolačić treće strane}few{Blokirana su # kolačića treće strane}other{Blokirano je # kolačića treće strane}}</translation>
 <translation id="810875025413331850">Nije pronađen nijedan uređaj u blizini.</translation>
-<translation id="8114199541033039755">U načinu rada tableta gumbima idite na početnu stranicu, natrag i prelazite s jedne aplikacije na drugu. Uključeno kad su omogućeni ChromeVox ili automatski klikovi.</translation>
+<translation id="8114199541033039755">U načinu rada tableta gumbima idite na početnu stranicu, natrag i prelazite s jedne aplikacije na drugu. Uključeno kad je omogućen ChromeVox ili automatski klikovi.</translation>
 <translation id="8114875720387900039">Podijeli vodoravno</translation>
 <translation id="8116972784401310538">&amp;Upravitelj oznaka</translation>
 <translation id="8117620576188476503">Upravljajte vezama, ažuriranjima i postavkama pomoću ladice statusa. Da biste je otvorili pomoću tipkovnice, pritisnite Alt + Shift + S.</translation>
@@ -5953,7 +5945,6 @@
 <translation id="8966870118594285808">Ponovo otvorite karticu ako ste je slučajno zatvorili</translation>
 <translation id="8967866634928501045">Pritisnite Alt + Shift + A za prikaz</translation>
 <translation id="8968766641738584599">Spremanje kartice</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može provjeriti vaše zaporke. Pokušajte ponovno nakon 24 sata ili <ph name="BEGIN_LINK" />provjerite zaporke na svojem Google računu<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Obratite se administratoru mreže i provjerite blokira li vatrozid preuzimanja s Googleovih poslužitelja.</translation>
 <translation id="8973557916016709913">Ukloni razinu zuma</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 7ddc246..afe44a8 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Könyvjelzők hozzáadva</translation>
 <translation id="2343747224442182863">Fókusz erre a lapra</translation>
 <translation id="2345723121311404059">1 oldal nyomtatása a következőn: <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA-szolgáltatás</translation>
 <translation id="2347644257713614136">A Hangouts és a Cast for Education használatára a Google Adatvédelmi irányelvei vonatkoznak.</translation>
 <translation id="2348176352564285430">Alkalmazás: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Hiba történt az adatok betöltése során</translation>
@@ -2285,7 +2284,6 @@
 <translation id="3971764089670057203">A biztonsági kulcson található ujjlenyomatok</translation>
 <translation id="3973660817924297510">Jelszavak ellenőrzése (<ph name="TOTAL_PASSWORDS" />/<ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Nem sikerült kapcsolódni a tartomány szerveréhez</translation>
-<translation id="3975884715086515476">A(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> nem tudja ellenőrizni a jelszavait. Próbálkozzon újra később.</translation>
 <translation id="3976108569178263973">Nincsenek rendelkezésre álló nyomtatók.</translation>
 <translation id="397703832102027365">Véglegesítés...</translation>
 <translation id="3977886311744775419">A rendszer nem tölt le automatikus frissítéseket ilyen hálózattípusnál, de manuálisan kereshet frissítéseket.</translation>
@@ -2586,7 +2584,6 @@
 <translation id="4421932782753506458">Bolyhos</translation>
 <translation id="4423376891418188461">A beállítások visszaállítása</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, az Ön rendszergazdája jelszómódosításra kéri.</translation>
-<translation id="4426209360861763174">A(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> nem tudja ellenőrizni a jelszavait. Próbálja újra 24 óra múlva.</translation>
 <translation id="4429030830601238961">Ezek az adatok sértik szervezete biztonsági szabályait, ezért nem illeszthetők be.</translation>
 <translation id="4430019312045809116">Hangerő</translation>
 <translation id="4430369329743628066">Könyvjelző hozzáadva</translation>
@@ -2599,7 +2596,6 @@
 <translation id="4441124369922430666">Szeretné automatikusan elindítani ezt az alkalmazást, amikor bekapcsolja a számítógépet?</translation>
 <translation id="4441147046941420429">A folytatáshoz távolítsa el a biztonsági kulcsot az eszközből, majd helyezze vissza, és érintse meg.</translation>
 <translation id="444134486829715816">Részletes nézet...</translation>
-<translation id="4442329324652245220">A(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> ellenőrizni tudja a mentett jelszavakat, ha Ön bejelentkezik Google-fiókjával.</translation>
 <translation id="4442424173763614572">A DNS keresése sikertelen</translation>
 <translation id="4443536555189480885">&amp;Súgó</translation>
 <translation id="4444304522807523469">USB-kapcsolaton vagy a helyi hálózaton keresztül csatlakoztatott szkennerek elérése</translation>
@@ -2626,7 +2622,6 @@
 <translation id="4476659815936224889">A kód beolvasásához használhat a telefonján QR-kódok olvasására szolgáló alkalmazást, illetve bizonyos kameraalkalmazásokat.</translation>
 <translation id="4477015793815781985">Használja a Ctrl, az Alt vagy a ⌘ billentyűk egyikét</translation>
 <translation id="4478664379124702289">Link mentése &amp;másként...</translation>
-<translation id="4478777936860197922">Nincsenek mentett jelszavak. A(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> képes a jelszavak ellenőrzésére, amikor Ön menti őket.</translation>
 <translation id="4479424953165245642">Kiosk-alkalmazások kezelése</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">A virtuális gép konfigurálása folyamatban van. Ez eltarthat néhány percig.</translation>
@@ -2872,7 +2867,6 @@
 <translation id="4849517651082200438">Ne telepítse</translation>
 <translation id="4850669014075537160">Görgetés</translation>
 <translation id="4850886885716139402">Nézet</translation>
-<translation id="485197095346966382">A(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> figyelmezteti Önt, amikor olyan jelszóval jelentkezik be, amelyhez illetéktelenül hozzáfértek.</translation>
 <translation id="4853020600495124913">Megnyitás új &amp;ablakban</translation>
 <translation id="4854317507773910281">Szülői fiók kiválasztása a jóváhagyáshoz</translation>
 <translation id="485480310608090163">További beállítások és engedélyek</translation>
@@ -4838,7 +4832,6 @@
 <translation id="7530016656428373557">Kisütési teljesítmény wattban</translation>
 <translation id="7531779363494549572">Nyissa meg a Beállítások &gt; Alkalmazások és értesítések &gt; Értesítések menüpontot.</translation>
 <translation id="7532009420053991888">A(z) <ph name="LINUX_APP_NAME" /> nem válaszol. A bezárásához válassza a „Bezárás most” gombot.</translation>
-<translation id="7536333565791380193">Haladó biztonsági beállítások</translation>
 <translation id="7537451260744431038">A webhelyek nem használhatnak cookie-kat a böngészési élmény javítására például úgy, hogy bejelentkezve tartják Önt, illetve megjegyzik a kosarában lévő termékeket.</translation>
 <translation id="7539856059004947393">Bluetooth-os biztonsági hardverkulcs</translation>
 <translation id="7540972813190816353">Hiba történt a frissítések keresése közben: <ph name="ERROR" /></translation>
@@ -5079,7 +5072,6 @@
     <ph name="BEGIN_BOLD" />Megjegyzés:<ph name="END_BOLD" /> A rendszer újraindul a folyamat során.</translation>
 <translation id="7828731929332799387">Ezzel törli a harmadik felek kontextusaiban rendelkezésre álló cookie-kat és webhelyadatokat. Biztosan folytatja?</translation>
 <translation id="7829298379596169484">Hozzáférés a hangbemenethez</translation>
-<translation id="7829528495815477379">A(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> nem tudja ellenőrizni a jelszavait. Ellenőrizze az internetkapcsolatot.</translation>
 <translation id="7829877209233347340">Kérd meg az egyik szülődet, hogy jelentkezzen be, és adjon engedélyt iskolai fiók hozzáadásához</translation>
 <translation id="7830594666202422257">Csatlakoztatás Linuxhoz</translation>
 <translation id="7831491651892296503">Hiba történt a hálózat konfigurálásakor</translation>
@@ -5417,7 +5409,7 @@
 <translation id="8263744495942430914">A(z) <ph name="FULLSCREEN_ORIGIN" /> letiltotta az egérmutatót.</translation>
 <translation id="8264024885325823677">Ezt a beállítást a rendszergazdája kezeli.</translation>
 <translation id="8264718194193514834">A(z) „<ph name="EXTENSION_NAME" />” aktiválta a teljes képernyős módot.</translation>
-<translation id="826511437356419340">Ablakáttekintési módba lépett. A navigáció csúsztatással – illetve billentyűzet használata esetén – a Tab gombbal lehetséges.</translation>
+<translation id="826511437356419340">Ablakáttekintési módba lépett. A navigáció csúsztatással, illetve billentyűzet használata esetén a Tab gombbal lehetséges.</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Általános információ az eszközről és használatáról (például az akkumulátor töltöttségi szintjéről, a rendszer- és alkalmazástevékenységekről, valamint a hibákról). Az adatokat arra használjuk fel, hogy továbbfejlesszük az Androidot, bizonyos összesített adatok pedig a Google-alkalmazásoknak és -partnereknek, például az Android-fejlesztőknek segítenek alkalmazásaik és termékeik fejlesztésében.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />A funkció kikapcsolása nem korlátozza az eszközt abban, hogy elküldje az alapvető fontosságú szolgáltatásokkal (pl. a rendszerfrissítésekkel és -biztonsággal) kapcsolatos információkat.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />A tulajdonos a következő menüben módosíthatja ezt a funkciót: Beállítások &gt; Speciális &gt; Diagnosztikai és használati adatok automatikus elküldése a Google-nak.<ph name="END_PARAGRAPH3" />
@@ -5589,7 +5581,7 @@
 <translation id="851263357009351303"><ph name="HOST" /> mindig mutathasson képeket</translation>
 <translation id="8513108775083588393">Automatikus forgatás</translation>
 <translation id="8514746246728959655">Próbálkozzon másik biztonsági hardverkulccsal</translation>
-<translation id="851960115758509829">Az Ön alkalmazásai, beállításai és egyéb személyre szabott elemei szinkronizálódnak minden olyan Chrome OS-eszközön, amelyen Google-fiókjával van bejelentkezve.</translation>
+<translation id="851960115758509829">Alkalmazásai, beállításai és egyéb személyre szabott elemei szinkronizálódnak minden olyan Chrome OS-eszközön, amelyen Google-fiókjával van bejelentkezve.</translation>
 <translation id="8521475323816527629">Gyorsan eljuthat alkalmazásaihoz</translation>
 <translation id="8523493869875972733">Módosítások megtartása</translation>
 <translation id="8523849605371521713">Házirend adta hozzá</translation>
@@ -5954,7 +5946,6 @@
 <translation id="8966870118594285808">Lap újramegnyitása, ha véletlenül bezárja</translation>
 <translation id="8967866634928501045">A megjelenítéshez nyomja le az Alt+Shift+A billentyűparancsot</translation>
 <translation id="8968766641738584599">Kártya mentése</translation>
-<translation id="8971800409073702505">A(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> nem tudja ellenőrizni a jelszavait. Próbálja újra 24 óra múlva, vagy <ph name="BEGIN_LINK" />ellenőrizze jelszavait a Google-fiókjában<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Vezérlő</translation>
 <translation id="8972513834460200407">Kérdezze meg a hálózati rendszergazdától, hogy a tűzfal nem tiltja-e le a Google szervereiről érkező letöltéseket.</translation>
 <translation id="8973557916016709913">Nagyítási szint eltávolítása</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index 4f050df..e323134 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -203,7 +203,7 @@
 <translation id="1259152067760398571">Անվտանգության ստուգումը երեկ է արվել</translation>
 <translation id="1260451001046713751">Միշտ թույլ տալ ելնող պատուհաններն ու վերահասցեավորումը <ph name="HOST" /> կայքում</translation>
 <translation id="126156426083987769">Դեմո ռեժիմում աշխատող սարքերի արտոնագրերի հետ խնդիր է առաջացել։</translation>
-<translation id="1263490604593716556">Հաշվի կառավարիչներ՝ <ph name="FIRST_PARENT_EMAIL" /> և <ph name="SECOND_PARENT_EMAIL" />։ Այս սարքում հիմնական հաշվից դուրս գրվելու համար սեղմեք ժամի վրա ձեր էկրանին։ Բացվող ընտրացանկում սեղմեք «Դուրս գալ»։</translation>
+<translation id="1263490604593716556">Հաշվի կառավարիչներ՝ <ph name="FIRST_PARENT_EMAIL" /> և <ph name="SECOND_PARENT_EMAIL" />։ Այս սարքում հիմնական հաշվից դուրս գալու համար սեղմեք ժամի վրա ձեր էկրանին։ Բացվող ընտրացանկում սեղմեք «Դուրս գալ»։</translation>
 <translation id="126710816202626562">Թարգմանության լեզուն՝</translation>
 <translation id="126768002343224824">16x</translation>
 <translation id="1272079795634619415">Դադարեցնել</translation>
@@ -880,7 +880,7 @@
 <translation id="2172784515318616985">Շարունակել</translation>
 <translation id="2173302385160625112">Ստուգեք կապը</translation>
 <translation id="2173801458090845390">Ավելացնել սարքին հայտի ID-ն</translation>
-<translation id="2174948148799307353">Հաշվի կառավարիչ՝ <ph name="PARENT_EMAIL" />։ Այս սարքում հիմնական հաշվից դուրս գրվելու համար սեղմեք ժամի վրա ձեր էկրանին։ Բացվող ընտրացանկում սեղմեք «Դուրս գալ»։</translation>
+<translation id="2174948148799307353">Հաշվի կառավարիչ՝ <ph name="PARENT_EMAIL" />։ Այս սարքում հիմնական հաշվից դուրս գալու համար սեղմեք ժամի վրա ձեր էկրանին։ Բացվող ընտրացանկում սեղմեք «Դուրս գալ»։</translation>
 <translation id="2175607476662778685">Արագ գործարկման գոտի</translation>
 <translation id="217576141146192373">Չհաջողվեց ավելացնել տպիչը: Ստուգեք դրա կարգավորումները և նորից փորձեք:</translation>
 <translation id="2177950615300672361">Ինկոգնիտո ներդիր` <ph name="TAB_NAME" /></translation>
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Էջանիշներն ավելացվեցին</translation>
 <translation id="2343747224442182863">Ֆոկուսավորել այս ներդիրը</translation>
 <translation id="2345723121311404059">1 էջ <ph name="PRINTER_NAME" /> տպիչով</translation>
-<translation id="2346953515226895098">SODA ծառայություն</translation>
 <translation id="2347644257713614136">Hangouts-ի և Cast for Education-ի օգտագործումը կարգավորվում է Google-ի գաղտնիության քաղաքականությամբ:</translation>
 <translation id="2348176352564285430">Հավելված՝ <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Տվյալների բեռնման սխալ</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Այս անվտանգության բանալու մատնահետքերը</translation>
 <translation id="3973660817924297510">Գաղտնաբառերը ստուգվում են (<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Չհաջողվեց կապվել սերվերի հետ այս տիրույթի համար</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" />-ը չի կարող ստուգել ձեր գաղտնաբառերը։ Փորձեք ավելի ուշ։</translation>
 <translation id="3976108569178263973">Հասանելի տպիչներ չկան</translation>
 <translation id="397703832102027365">Ավարտվում է…</translation>
 <translation id="3977886311744775419">Ավտոմատ թարմացումները այս տեսակի ցանցում չեն ներբեռնվում, սակայն դուք կարող եք ձեռքով ստուգել թարմացումների առկայությունը:</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Փափկամազիկ</translation>
 <translation id="4423376891418188461">Վերականգնել կարգավորումները</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ձեր ադմինիստրատորը պահանջում է, որ փոխեք ձեր գաղտնաբառը:</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" />-ը չի կարող ստուգել ձեր գաղտնաբառերը։ 24 ժամ հետո նորից փորձեք։</translation>
 <translation id="4429030830601238961">Այս տվյալները չեն տեղադրվի, քանի որ խախտում են կազմակերպության անվտանգության կանոնները։</translation>
 <translation id="4430019312045809116">Ձայնի ուժգնություն</translation>
 <translation id="4430369329743628066">Էջանիշն ավելացվեց</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Ուզո՞ւմ եք, որ այս հավելվածն ավտոմատ մեկնարկվի համակարգիչը միացնելիս:</translation>
 <translation id="4441147046941420429">Շարունակելու համար հանեք անվտանգության բանալին սարքից, ապա նորից տեղադրեք ու հպեք դրան:</translation>
 <translation id="444134486829715816">Ընդարձակել…</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" />-ը կարող է ստուգել ձեր գաղտնաբառերը, երբ մտնեք Google հաշիվ։</translation>
 <translation id="4442424173763614572">DNS սերվերը որոնելիս սխալ տեղի ունեցավ</translation>
 <translation id="4443536555189480885">&amp;Օգնություն</translation>
 <translation id="4444304522807523469">Մուտք գործել փաստաթղթի տեսածրիչներ, որոնց կցված են USB-ի կամ տեղային ցանցի միջոցով</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Դուք կարող եք սկանավորել այս կոդը հեռախոսի QR սկաների կամ տեսախցիկի որոշ հավելվածների միջոցով:</translation>
 <translation id="4477015793815781985">Սկզբում սեղմեք Ctrl, Alt կամ ⌘</translation>
 <translation id="4478664379124702289">Պահել հղում&amp;ը որպես…</translation>
-<translation id="4478777936860197922">Պահված գաղտնաբառեր չկան։ <ph name="IDS_SHORT_PRODUCT_NAME" />-ը կարող է ստուգել ձեր գաղտնաբառերը, երբ պահում եք դրանք։</translation>
 <translation id="4479424953165245642">Կարգավորել կրպակ-հավելվածները</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Վիրտուալ մեքենան կարգավորվում է: Սա կարող է մի քանի րոպե տևել։</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Չտեղադրել</translation>
 <translation id="4850669014075537160">Ոլորում</translation>
 <translation id="4850886885716139402">Տեսք</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" />-ը կտեղեկացնի ձեզ, երբ կոտրված գաղտնաբառ օգտագործեք։</translation>
 <translation id="4853020600495124913">Բացել &amp;նոր պատուհանում</translation>
 <translation id="4854317507773910281">Հաստատման համար ընտրեք ծնողի հաշիվը</translation>
 <translation id="485480310608090163">Այլ կարգավորումներ և թույլտվություններ</translation>
@@ -4840,7 +4834,6 @@
 <translation id="7530016656428373557">Լիցքաթափման արագությունը վատտերով</translation>
 <translation id="7531779363494549572">Անցեք Կարգավորումներ &gt; Հավելվածներ և ծանուցումներ &gt; Ծանուցումներ։</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> հավելվածը չի արձագանքում: Ընտրեք «Ստիպողաբար փակել» տարբերակը:</translation>
-<translation id="7536333565791380193">Լրացուցիչ անվտանգություն</translation>
 <translation id="7537451260744431038">Ձեր աշխատանքը բարելավելու նպատակով կայքերը չեն կարող օգտագործել քուքիներ, օրինակ, որպեսզի պահեն ձեր ընտրած ապրանքները զամբյուղում կամ հիշեն ձեր մուտքը հաշիվ։</translation>
 <translation id="7539856059004947393">Bluetooth անվտանգության բանալի</translation>
 <translation id="7540972813190816353">Թարմացումներն ստուգելիս սխալ տեղի ունեցավ` <ph name="ERROR" /></translation>
@@ -4979,7 +4972,7 @@
 <translation id="7716781361494605745">Netscape-ի հավաստագրման կենտրոնի քաղաքականության URL</translation>
 <translation id="7717014941119698257">Ներբեռնում` <ph name="STATUS" /></translation>
 <translation id="7717845620320228976">Ստուգել թարմացումները</translation>
-<translation id="7719070594859855691">Հասանելի դարձնել տեսախցիկը</translation>
+<translation id="7719070594859855691">Տեսախցիկն օգտագործելու թույլտվություն տալ</translation>
 <translation id="7719367874908701697">Էջի մասշտաբավորում</translation>
 <translation id="7721179060400456005">Թույլատրել պատուհանի ցուցադրումը տարբեր սարքերում</translation>
 <translation id="7722040605881499779">Թարմացման համար հարկավոր է <ph name="NECESSARY_SPACE" /></translation>
@@ -5080,7 +5073,6 @@
     <ph name="BEGIN_BOLD" />Ուշադրություն.<ph name="END_BOLD" /> գործողության ժամանակ համակարգը կվերաբեռնվի:</translation>
 <translation id="7828731929332799387">Երրորդ կողմի բոլոր քուքիներն ու կայքերի տվյալները կջնջվեն։ Շարունակե՞լ։</translation>
 <translation id="7829298379596169484">Ձայնային մուտքի մատչում</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" />-ը չի կարող ստուգել ձեր գաղտնաբառերը։ Ստուգեք ինտերնետ կապը։</translation>
 <translation id="7829877209233347340">Խնդրեք ծնողին մուտք գործել հաշիվ և ուսումնական հաշիվ ավելացնելու թույլտվություն տալ</translation>
 <translation id="7830594666202422257">Միացնել Լինուքսին</translation>
 <translation id="7831491651892296503">Չհաջողվեց կազմաձևել ցանցը</translation>
@@ -5954,7 +5946,6 @@
 <translation id="8966870118594285808">Նորից բացեք ներդիրը, եթե այն պատահաբար փակել եք</translation>
 <translation id="8967866634928501045">Ցուցադրելու համար սեղմեք Alt + Shift + A ստեղները</translation>
 <translation id="8968766641738584599">Պահել քարտը</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" />-ը չի կարող ստուգել ձեր գաղտնաբառերը։ 24 ժամ հետո նորից փորձեք կամ <ph name="BEGIN_LINK" />ստուգեք ձեր Google հաշվի գաղտնաբառերը<ph name="END_LINK" />։</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Ճշտեք ձեր ցանցի ադմինիստրատորից՝ արդյոք հրապատը չի արգելափակում ներբեռնումները Google սերվերներից:</translation>
 <translation id="8973557916016709913">Չեղարկել մասշտաբավորումը</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index e43a7a3..6d2f705 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Nama bookmark</translation>
 <translation id="1124772482545689468">Pengguna</translation>
 <translation id="1125550662859510761">Sepertinya <ph name="WIDTH" /> x <ph name="HEIGHT" /> (Asli)</translation>
+<translation id="1126809382673880764">Tidak melindungi Anda terhadap situs, download, dan ekstensi berbahaya. Anda akan tetap mendapatkan perlindungan Safe Browsing, jika tersedia, di layanan Google lainnya, seperti Gmail dan Penelusuran.</translation>
 <translation id="1128109161498068552">Jangan izinkan situs apa pun untuk menggunakan pesan eksklusif sistem untuk mengakses perangkat MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Edit mesin telusur</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Jaringan yang dikenal</translation>
 <translation id="123578888592755962">Disk penuh</translation>
 <translation id="1238191093934674082">VPN Terbuka</translation>
+<translation id="1239439601391236986">Tampilkan masukan saran informasi pribadi</translation>
 <translation id="1239594683407221485">Jelajahi konten perangkat di aplikasi File.</translation>
 <translation id="124116460088058876">Bahasa lainnya</translation>
 <translation id="1241753985463165747">Membaca dan mengubah semua data di situs saat ini jika diminta</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Aktivasi Seluler</translation>
 <translation id="1407489512183974736">Dipangkas di Tengah</translation>
 <translation id="1408504635543854729">Jelajahi konten perangkat di aplikasi File. Konten dibatasi oleh admin dan tidak dapat diubah.</translation>
+<translation id="1408980562518920698">Kelola informasi pribadi</translation>
 <translation id="1410197035576869800">Ikon Aplikasi</translation>
 <translation id="1410616244180625362">Terus izinkan <ph name="HOST" /> mengakses kamera Anda</translation>
 <translation id="1414648216875402825">Anda memperbarui ke versi tidak stabil dari <ph name="PRODUCT_NAME" /> yang berisi fitur yang sedang dalam proses. Akan terjadi mogok dan bug tidak terduga. Lanjutkan dengan hati-hati.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">Konsol &amp;JavaScript</translation>
 <translation id="1587907146729660231">Sentuh tombol power dengan jari Anda</translation>
+<translation id="1588200577109872591">Masukan smart</translation>
 <translation id="1588438908519853928">Normal</translation>
 <translation id="158849752021629804">Memerlukan jaringan rumah</translation>
 <translation id="1588870296199743671">Buka Tautan Dengan...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Login sebagai</translation>
 <translation id="1880905663253319515">Hapus sertifikat "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="1884013283844450420">Jaringan <ph name="NETWORK_INDEX" /> dari <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, Sambungkan</translation>
+<translation id="1884705339276589024">Ubah ukuran disk Linux</translation>
 <translation id="1886996562706621347">Izinkan situs meminta untuk menjadi pengendali default bagi protokol (disarankan)</translation>
 <translation id="1887442540531652736">Terjadi error saat login</translation>
 <translation id="1887597546629269384">Ucapkan lagi "Hai Google"</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Anda mengubah ke saluran dengan versi <ph name="PRODUCT_NAME" /> yang lebih lama. Perubahan saluran ini akan berlaku jika versi saluran cocok dengan versi yang saat ini terpasang pada perangkat Anda.</translation>
 <translation id="197989455406964291">KDC tidak mendukung jenis enkripsi</translation>
 <translation id="1982354452682152483">Tidak ada deskripsi yang tersedia.</translation>
+<translation id="1984417487208496350">Tidak ada perlindungan (tidak direkomendasikan)</translation>
 <translation id="1987317783729300807">Akun</translation>
 <translation id="1989112275319619282">Jelajahi</translation>
 <translation id="1990512225220753005">Jangan tampilkan pintasan di halaman ini</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Untuk memulihkan informasi akun Anda, buka: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Setelan keamanan sistem</translation>
 <translation id="2091887806945687916">Suara</translation>
+<translation id="2096478741073211388">Saran informasi pribadi membantu Anda menulis lebih cepat dengan menyarankan nama, alamat, atau nomor telepon saat Anda mengetik kata tertentu. Hanya Anda yang dapat melihat saran pribadi yang dipersonalisasi untuk akun Anda.</translation>
 <translation id="2096715839409389970">Hapus cookie pihak ketiga</translation>
 <translation id="2097372108957554726">Anda perlu masuk ke Chrome untuk mendaftarkan perangkat baru</translation>
 <translation id="2099172618127234427">Anda mengaktifkan fitur debug Chrome OS yang akan menyiapkan daemon sshd dan memungkinkan booting dari perangkat USB.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Muat ulang &amp;Frame</translation>
 <translation id="2114896190328250491">Foto oleh <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Buka di <ph name="APP" /></translation>
+<translation id="2119461801241504254">Safe Browsing sudah aktif dan melindungi Anda dari situs dan download berbahaya</translation>
 <translation id="2120297377148151361">Aktivitas dan interaksi</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> diblokir</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Cookie diblokir}=1{Cookie diblokir, 1 pengecualian}other{Cookie diblokir, {COUNT} pengecualian}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Bookmark ditambahkan</translation>
 <translation id="2343747224442182863">Fokuskan Tab Ini</translation>
 <translation id="2345723121311404059">1 halaman ke <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Layanan SODA</translation>
 <translation id="2347644257713614136">Penggunaan Hangouts dan Cast for Education diatur oleh Kebijakan Privasi Google.</translation>
 <translation id="2348176352564285430">Aplikasi: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Terjadi error saat memuat data</translation>
@@ -1787,7 +1794,7 @@
 <translation id="3396800784455899911">Dengan mengklik tombol "Setuju dan lanjutkan", Anda menyetujui pemrosesan yang dijelaskan di atas terkait layanan Google ini.</translation>
 <translation id="3399432415385675819">Notifikasi akan dinonaktifkan</translation>
 <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hertz) - saling bertautan</translation>
-<translation id="3402585168444815892">Mendaftar dalam Mode Demo</translation>
+<translation id="3402585168444815892">Mendaftar ke Mode Demo</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Tidak ada sandi yang tersimpan untuk situs ini</translation>
 <translation id="3405664148539009465">Sesuaikan font</translation>
@@ -1889,6 +1896,7 @@
 <translation id="3515983984924808886">Sentuh kunci keamanan Anda sekali lagi untuk mengonfirmasi penyetelan ulang. Semua informasi yang tersimpan di kunci keamanan, termasuk PIN-nya, akan dihapus.</translation>
 <translation id="3518985090088779359">Terima &amp; lanjutkan</translation>
 <translation id="351952459507671940">Tambahkan ke grup baru</translation>
+<translation id="3521606918211282604">Ubah ukuran disk</translation>
 <translation id="3523642406908660543">Tanyakan saat situs ingin menggunakan plugin untuk mengakses komputer Anda (disarankan)</translation>
 <translation id="3524965460886318643">Ekspor Aktivitas</translation>
 <translation id="3526034519184079374">Tidak Dapat Membaca atau Mengubah Data Situs</translation>
@@ -1976,6 +1984,7 @@
 <translation id="3629631988386925734">Masukkan sandi Anda untuk mengaktifkan Smart Lock. Saat digunakan lagi, ponsel Anda akan membuka kunci <ph name="DEVICE_TYPE" /> ini. Anda dapat menonaktifkan Smart Lock di Setelan.</translation>
 <translation id="3630132874740063857">Telepon Anda</translation>
 <translation id="3630995161997703415">Tambahkan situs ini ke rak Anda agar dapat digunakan setiap saat</translation>
+<translation id="3633309367764744750">Mengambil data di awal dari halaman, termasuk halaman yang belum Anda kunjungi. Informasi yang diambil dapat mencakup cookie, jika Anda mengizinkan cookie.</translation>
 <translation id="3634507049637220048">Jaringan <ph name="NETWORK_INDEX" /> dari <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, Dikelola oleh Administrator Anda, Detail</translation>
 <translation id="3635241501480133979">Data ini melanggar kebijakan keamanan organisasi Anda dan tidak dapat dilepaskan.</translation>
 <translation id="3635353578505343390">Kirim masukan ke Google</translation>
@@ -2274,7 +2283,6 @@
 <translation id="3971764089670057203">Sidik jari pada kunci keamanan ini</translation>
 <translation id="3973660817924297510">Memeriksa sandi (<ph name="CHECKED_PASSWORDS" /> dari <ph name="TOTAL_PASSWORDS" />) …</translation>
 <translation id="3975565978598857337">Menghubungi server untuk area yang gagal</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> tidak dapat memeriksa sandi Anda. Coba lagi nanti.</translation>
 <translation id="3976108569178263973">Tidak ada printer yang tersedia.</translation>
 <translation id="397703832102027365">Mengakhiri...</translation>
 <translation id="3977886311744775419">Update otomatis tidak didownload pada jenis jaringan ini, namun Anda dapat memeriksa update secara manual.</translation>
@@ -2575,7 +2583,6 @@
 <translation id="4421932782753506458">Si Manis</translation>
 <translation id="4423376891418188461">Pulihkan Setelan</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, administrator mewajibkan Anda untuk mengganti sandi.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> tidak dapat memeriksa sandi Anda. Coba lagi setelah 24 jam.</translation>
 <translation id="4429030830601238961">Data ini melanggar kebijakan keamanan organisasi Anda dan tidak dapat ditempel.</translation>
 <translation id="4430019312045809116">Volume</translation>
 <translation id="4430369329743628066">Bookmark ditambahkan</translation>
@@ -2588,7 +2595,6 @@
 <translation id="4441124369922430666">Ingin memulai aplikasi ini secara otomatis saat komputer diaktifkan?</translation>
 <translation id="4441147046941420429">Untuk melanjutkan, hapus kunci keamanan Anda dari perangkat, lalu masukkan kembali dan sentuh tombol</translation>
 <translation id="444134486829715816">Luaskan...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> dapat memeriksa sandi saat Anda login dengan Akun Google.</translation>
 <translation id="4442424173763614572">Pencarian DNS gagal</translation>
 <translation id="4443536555189480885">&amp;Bantuan</translation>
 <translation id="4444304522807523469">Mengakses pemindai dokumen yang terpasang melalui USB atau pada jaringan lokal</translation>
@@ -2615,7 +2621,6 @@
 <translation id="4476659815936224889">Untuk memindai kode ini, Anda dapat menggunakan aplikasi pemindai QR di ponsel, atau beberapa aplikasi kamera.</translation>
 <translation id="4477015793815781985">Sertakan Ctrl, Alt, atau ⌘</translation>
 <translation id="4478664379124702289">Simpan Tauta&amp;n Sebagai...</translation>
-<translation id="4478777936860197922">Tidak ada sandi yang tersimpan. <ph name="IDS_SHORT_PRODUCT_NAME" /> dapat memeriksa sandi Anda saat menyimpannya.</translation>
 <translation id="4479424953165245642">Kelola aplikasi kios</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Mengonfigurasi mesin virtual. Proses ini mungkin memerlukan waktu beberapa menit.</translation>
@@ -2861,7 +2866,6 @@
 <translation id="4849517651082200438">Jangan Dipasang</translation>
 <translation id="4850669014075537160">Gulir</translation>
 <translation id="4850886885716139402">Lihat</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> akan memberi tahu Anda saat Anda login dengan sandi yang telah dibobol</translation>
 <translation id="4853020600495124913">Buka di &amp;jendela baru</translation>
 <translation id="4854317507773910281">Pilih akun orang tua yang akan memberi persetujuan</translation>
 <translation id="485480310608090163">Setelan dan izin lainnya</translation>
@@ -3935,6 +3939,7 @@
 <translation id="6298962879096096191">Menggunakan Google Play untuk memasang aplikasi Android</translation>
 <translation id="630065524203833229">K&amp;eluar</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> tidak dapat dikonfigurasi secara otomatis. Harap tentukan detail printer lanjutan. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Saran informasi pribadi</translation>
 <translation id="6305607932814307878">Kebijakan Global:</translation>
 <translation id="6307990684951724544">Sistem sibuk</translation>
 <translation id="6308493641021088955">Login disediakan oleh <ph name="EXTENSION_NAME" /></translation>
@@ -4013,6 +4018,7 @@
 <translation id="641081527798843608">Kecocokan subjek</translation>
 <translation id="6412673304250309937">Memeriksa kesesuaian URL dengan daftar situs tidak aman yang disimpan di Chrome. Jika situs berusaha mencuri sandi Anda, atau jika Anda mendownload file berbahaya, Chrome mungkin juga mengirim URL, termasuk bit konten halaman, ke Safe Browsing.</translation>
 <translation id="6412931879992742813">Jendela samaran baru</translation>
+<translation id="6413591858632097328">Ini akan menghapus semua data dan cookie yang disimpan oleh <ph name="ORIGIN_NAME" /> dan aplikasi yang terinstal di dalamnya.</translation>
 <translation id="641469293210305670">Instal Update dan Aplikasi</translation>
 <translation id="6414888972213066896">Kamu telah meminta izin kepada orang tua untuk mengunjungi situs ini</translation>
 <translation id="6415900369006735853">Terhubung ke internet melalui ponsel Anda</translation>
@@ -4823,7 +4829,6 @@
 <translation id="7530016656428373557">Laju Penggunaan Daya dalam Watt</translation>
 <translation id="7531779363494549572">Buka Setelan &gt; Aplikasi &amp; notifikasi &gt; Notifikasi.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> tidak merespons. Pilih "Tutup paksa" untuk menutup aplikasi.</translation>
-<translation id="7536333565791380193">Keamanan tingkat lanjut</translation>
 <translation id="7537451260744431038">Situs tidak dapat menggunakan cookie untuk menyempurnakan pengalaman penjelajahan Anda, misalnya untuk membuat Anda tetap login atau untuk mengingat item di keranjang belanja Anda</translation>
 <translation id="7539856059004947393">Kunci keamanan Bluetooth</translation>
 <translation id="7540972813190816353">Terjadi kesalahan saat memeriksa untuk pembaruan: <ph name="ERROR" /></translation>
@@ -5064,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />Catatan:<ph name="END_BOLD" />  Sistem akan reboot selama proses berlangsung.</translation>
 <translation id="7828731929332799387">Ini akan menghapus semua cookie dan data situs yang tersedia dalam konteks pihak ketiga. Ingin melanjutkan?</translation>
 <translation id="7829298379596169484">Mengakses masukan audio</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> tidak dapat memeriksa sandi Anda. Coba periksa koneksi internet Anda.</translation>
 <translation id="7829877209233347340">Minta orang tua login dan memberikan izin untuk menambahkan akun sekolah</translation>
 <translation id="7830594666202422257">Sambungkan ke Linux</translation>
 <translation id="7831491651892296503">Terjadi error saat mengonfigurasi jaringan</translation>
@@ -5939,7 +5943,6 @@
 <translation id="8966870118594285808">Membuka kembali tab jika Anda menutupnya secara tidak sengaja</translation>
 <translation id="8967866634928501045">Tekan Alt Shift A untuk menampilkan</translation>
 <translation id="8968766641738584599">Simpan kartu</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> tidak dapat memeriksa sandi Anda. Coba lagi setelah 24 jam atau <ph name="BEGIN_LINK" />periksa sandi di Akun Google Anda<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Hubungi administrator jaringan Anda untuk memastikan bahwa firewall tidak memblokir download dari server Google.</translation>
 <translation id="8973557916016709913">Menghapus tingkat zoom</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index c49e092..b733022 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Bókamerkjum bætt við</translation>
 <translation id="2343747224442182863">Setja þennan flipa í fókus</translation>
 <translation id="2345723121311404059">Ein síða til <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA Service</translation>
 <translation id="2347644257713614136">Notkun Hangouts og Cast for Education fellur undir persónuverndarstefnu Google.</translation>
 <translation id="2348176352564285430">Forrit: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Villa við að hlaða gögn</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Fingraför á þessum öryggislykli</translation>
 <translation id="3973660817924297510">Athugar aðgangsorð (<ph name="CHECKED_PASSWORDS" /> af <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Ekki náðist samband við þjón svæðis</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> getur ekki athugað aðgangsorðin þín. Reyndu aftur síðar.</translation>
 <translation id="3976108569178263973">Engir prentarar eru til staðar.</translation>
 <translation id="397703832102027365">Lýkur...</translation>
 <translation id="3977886311744775419">Þessi tegund netkerfis styður ekki sjálfvirkar uppfærslur en þú getur leitað að uppfærslum handvirkt.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Flippkisi</translation>
 <translation id="4423376891418188461">Endurheimta stillingar</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, kerfisstjóri krefst þess að þú breytir aðgangsorðinu þínu.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> getur ekki athugað aðgangsorðin þín. Reyndu aftur eftir sólarhring.</translation>
 <translation id="4429030830601238961">Þessi gögn brjóta gegn öryggisreglum fyrirtækisins þíns og því ekki hægt að líma þau.</translation>
 <translation id="4430019312045809116">Hljóðstyrkur</translation>
 <translation id="4430369329743628066">Bókamerki bætt við</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Viltu ræsa þetta forrit sjálfkrafa þegar kveikt er á vélinni?</translation>
 <translation id="4441147046941420429">Til að halda áfram skaltu fjarlægja öryggislykilinn úr tækinu, setja hann svo aftur inn og snerta hann</translation>
 <translation id="444134486829715816">Stækka...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> getur athugað aðgangsorðin þín þegar þú skráir þig inn með Google reikningnum þínum</translation>
 <translation id="4442424173763614572">DNS-uppfletting mistókst</translation>
 <translation id="4443536555189480885">&amp;Hjálp</translation>
 <translation id="4444304522807523469">Fá aðgang að skjalaskönnum sem tengdir eru um USB eða á staðarnetinu</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Þú getur notað QR-skönnunarforrit í símanum þínum eða ýmis myndavélaforrit til að skanna þennan kóða.</translation>
 <translation id="4477015793815781985">Notaðu Ctrl, Alt eða ⌘</translation>
 <translation id="4478664379124702289">Vista tengil sem...</translation>
-<translation id="4478777936860197922">Engin vistuð aðgangsorð. <ph name="IDS_SHORT_PRODUCT_NAME" /> getur athugað aðgangsorðin þín þegar þú vistar þau.</translation>
 <translation id="4479424953165245642">Stjórna sjálfsalaforritum</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Stillir sýndarvélina. Þetta getur tekið nokkrar mínútur.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Ekki setja upp</translation>
 <translation id="4850669014075537160">Fletting</translation>
 <translation id="4850886885716139402">Yfirlit</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> lætur þig vita þegar þú skráir þig inn með aðgangsorði í hættu</translation>
 <translation id="4853020600495124913">Opna í &amp;nýjum glugga</translation>
 <translation id="4854317507773910281">Veldu reikning foreldris sem á að samþykkja</translation>
 <translation id="485480310608090163">Fleiri stillingar og heimildir</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Afhleðslustraumstyrkur í vöttum</translation>
 <translation id="7531779363494549572">Farðu í Stillingar &gt; Forrit og tilkynningar &gt; Tilkynningar.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> svarar ekki. Veldu „Þvinga fram lokun“ til að loka forritinu.</translation>
-<translation id="7536333565791380193">Ítarlegt öryggi</translation>
 <translation id="7537451260744431038">Vefsvæði geta ekki notað fótspor til að bjóða þér upp á betri vefnotkun, til dæmis að vera áfram skráð(ur) inn eða muna hvað þú setur í innkaupakörfu</translation>
 <translation id="7539856059004947393">Bluetooth-öryggislykill</translation>
 <translation id="7540972813190816353">Villa kom upp við að leita að uppfærslum: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
 <ph name="BEGIN_BOLD" />Athugaðu:<ph name="END_BOLD" />  Kerfið mun endurræsa sig í ferlinu.</translation>
 <translation id="7828731929332799387">Þetta mun eyða öllum fótsporum og vefsvæðisgögnum frá þriðju aðilum. Ertu viss um að þú viljir halda áfram?</translation>
 <translation id="7829298379596169484">Fær aðgang að hljóðinntaki</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> getur ekki athugað aðgangsorðin þín. Athugaðu nettenginguna þína.</translation>
 <translation id="7829877209233347340">Biddu foreldri þitt að skrá sig inn og gefa þér heimild til að bæta við skólareikningi</translation>
 <translation id="7830594666202422257">Tengja við Linux</translation>
 <translation id="7831491651892296503">Villa við að stilla netkerfi</translation>
@@ -5952,7 +5944,6 @@
 <translation id="8966870118594285808">Opnaðu flipann aftur ef þú lokaðir honum óvart</translation>
 <translation id="8967866634928501045">Ýttu á Alt Shift A til að sýna</translation>
 <translation id="8968766641738584599">Viltu vista kort?</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> getur ekki athugað aðgangsorðin þín. Reyndu aftur eftir sólarhring eða <ph name="BEGIN_LINK" />athugaðu aðgangsorðin á Google reikningnum þínum<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Esc</translation>
 <translation id="8972513834460200407">Hafðu samband við kerfisstjórann til að ganga úr skugga um að eldveggur hindri ekki niðurhal frá þjónum Google.</translation>
 <translation id="8973557916016709913">Fjarlægja aðdráttarstig</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index c712d56a..e52907c 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Preferiti aggiunti</translation>
 <translation id="2343747224442182863">Imposta stato attivo su questa scheda</translation>
 <translation id="2345723121311404059">1 pagina con <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Servizio SODA</translation>
 <translation id="2347644257713614136">L'utilizzo di Hangouts e Cast for Education è regolato dalle Norme sulla privacy di Google.</translation>
 <translation id="2348176352564285430">App: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Errore durante il caricamento dei dati</translation>
@@ -2285,7 +2284,6 @@
 <translation id="3971764089670057203">Impronte registrate con questo token di sicurezza</translation>
 <translation id="3973660817924297510">Verifica delle password (<ph name="CHECKED_PASSWORDS" /> di <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Tentativo di contatto del server per area di autenticazione non riuscito</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> non può controllare le tue password. Riprova più tardi.</translation>
 <translation id="3976108569178263973">Non ci sono stampanti disponibili.</translation>
 <translation id="397703832102027365">Finalizzazione in corso...</translation>
 <translation id="3977886311744775419">Gli aggiornamenti automatici non vengono scaricati su questo tipo di rete, ma puoi verificare la presenza di aggiornamenti manualmente.</translation>
@@ -2586,7 +2584,6 @@
 <translation id="4421932782753506458">Micio</translation>
 <translation id="4423376891418188461">Ripristina impostazioni</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, il tuo amministratore ti chiede di cambiare la password.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> non può controllare le tue password. Riprova tra 24 ore.</translation>
 <translation id="4429030830601238961">Questi dati violano le norme di sicurezza della tua organizzazione e non possono essere incollati.</translation>
 <translation id="4430019312045809116">Volume</translation>
 <translation id="4430369329743628066">Aggiunto ai preferiti</translation>
@@ -2599,7 +2596,6 @@
 <translation id="4441124369922430666">Vuoi avviare automaticamente questa app all'accensione del computer?</translation>
 <translation id="4441147046941420429">Per continuare, rimuovi il token di sicurezza dal dispositivo, quindi inseriscilo nuovamente e toccalo</translation>
 <translation id="444134486829715816">Espandi...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> può controllare le tue password quando accedi con il tuo Account Google</translation>
 <translation id="4442424173763614572">Ricerca DNS non riuscita</translation>
 <translation id="4443536555189480885">&amp;Guida</translation>
 <translation id="4444304522807523469">Accesso a scanner di documenti aggiunti tramite USB o sulla rete locale</translation>
@@ -2626,7 +2622,6 @@
 <translation id="4476659815936224889">Per eseguire la scansione di questo codice, puoi usare un'app scanner QR sul telefono oppure alcune app fotocamera.</translation>
 <translation id="4477015793815781985">Includi CTRL, ALT o ⌘</translation>
 <translation id="4478664379124702289">Salva lin&amp;k con nome...</translation>
-<translation id="4478777936860197922">Nessuna password salvata. <ph name="IDS_SHORT_PRODUCT_NAME" /> può controllare le password quando le salvi.</translation>
 <translation id="4479424953165245642">Gestisci applicazioni kiosk</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Configurazione della macchina virtuale. Questa operazione potrebbe richiedere alcuni minuti.</translation>
@@ -2872,7 +2867,6 @@
 <translation id="4849517651082200438">Non installare</translation>
 <translation id="4850669014075537160">Scorrimento</translation>
 <translation id="4850886885716139402">Visualizza</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> ti invierà una notifica quando accederai con una password compromessa</translation>
 <translation id="4853020600495124913">Apri in &amp;un'altra finestra</translation>
 <translation id="4854317507773910281">Scegli un account genitore per l'approvazione</translation>
 <translation id="485480310608090163">Altre impostazioni e autorizzazioni</translation>
@@ -4836,7 +4830,6 @@
 <translation id="7530016656428373557">Velocità di esaurimento in watt</translation>
 <translation id="7531779363494549572">Seleziona Impostazioni &gt; App e notifiche &gt; Notifiche.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> non risponde. Seleziona "Termina" per chiudere l'app.</translation>
-<translation id="7536333565791380193">Sicurezza avanzata</translation>
 <translation id="7537451260744431038">I siti non possono utilizzare i cookie per migliorare la tua esperienza di navigazione, ad esempio per mantenere l'accesso o memorizzare gli articoli aggiunti al carrello</translation>
 <translation id="7539856059004947393">Token di sicurezza Bluetooth</translation>
 <translation id="7540972813190816353">Si è verificato un errore durante il controllo della disponibilità di aggiornamenti: <ph name="ERROR" /></translation>
@@ -5077,7 +5070,6 @@
     <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> il sistema viene riavviato durante la procedura.</translation>
 <translation id="7828731929332799387">Verranno eliminati tutti i cookie e i dati dei siti disponibili in contesti di terze parti. Vuoi continuare?</translation>
 <translation id="7829298379596169484">Accesso all'input audio in corso</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> non può controllare le tue password. Prova a controllare la connessione a Internet.</translation>
 <translation id="7829877209233347340">Chiedi a un genitore di accedere per autorizzare l'aggiunta di un account della scuola</translation>
 <translation id="7830594666202422257">Connetti a Linux</translation>
 <translation id="7831491651892296503">Errore durante la configurazione della rete</translation>
@@ -5951,7 +5943,6 @@
 <translation id="8966870118594285808">Riapri una scheda chiusa accidentalmente</translation>
 <translation id="8967866634928501045">Premi ALT + MAIUSC + A per mostrare</translation>
 <translation id="8968766641738584599">Salva carta</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> non può controllare le tue password. Riprova tra 24 ore oppure <ph name="BEGIN_LINK" />controlla le password nel tuo Account Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Esc</translation>
 <translation id="8972513834460200407">Rivolgiti al tuo amministratore di rete per verificare che il firewall non blocchi i download dai server di Google.</translation>
 <translation id="8973557916016709913">Rimuovi livello di zoom</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index ff8517c..65c2284 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -1000,7 +1000,6 @@
 <translation id="2342740338116612727">סימניות נוספו</translation>
 <translation id="2343747224442182863">הדגשת הכרטיסייה הזו</translation>
 <translation id="2345723121311404059">עמוד אחד אל <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">‏שירות SODA</translation>
 <translation id="2347644257713614136">‏השימוש ב-Hangouts וב-Cast for Education כפוף למדיניות הפרטיות של Google.</translation>
 <translation id="2348176352564285430">יישום: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">אירעה שגיאה במהלך טעינת הנתונים</translation>
@@ -2274,7 +2273,6 @@
 <translation id="3971764089670057203">טביעות אצבעות במפתח האבטחה הזה</translation>
 <translation id="3973660817924297510">המערכת בודקת סיסמאות (<ph name="CHECKED_PASSWORDS" /> מתוך <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">יצירת הקשר עם השרת של התחום נכשלה</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> לא יכול לבדוק את הסיסמאות. כדאי לנסות שוב מאוחר יותר.</translation>
 <translation id="3976108569178263973">אין מדפסות זמינות.</translation>
 <translation id="397703832102027365">מסיים...</translation>
 <translation id="3977886311744775419">ברשת מסוג זה לא יכולים להתבצע עדכונים אוטומטיים, אבל אפשר לבדוק ידנית אם יש עדכונים.</translation>
@@ -2575,7 +2573,6 @@
 <translation id="4421932782753506458">לקיק</translation>
 <translation id="4423376891418188461">שחזר הגדרות</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, מנהל המערכת מבקש ממך לשנות את הסיסמה שלך.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> לא יכול לבדוק את הסיסמאות. אפשר לנסות שוב בעוד 24 שעות.</translation>
 <translation id="4429030830601238961">הנתונים האלה מפרים את מדיניות האבטחה של הארגון שלך ולא ניתן להדביק אותם.</translation>
 <translation id="4430019312045809116">עוצמת קול</translation>
 <translation id="4430369329743628066">הסימנייה נוספה</translation>
@@ -2588,7 +2585,6 @@
 <translation id="4441124369922430666">האם ברצונך להפעיל יישום זה באופן אוטומטי בעת הפעלת המחשב?</translation>
 <translation id="4441147046941420429">כדי להמשיך, יש לנתק את מפתח האבטחה מהמכשיר, לחבר אותו מחדש ולגעת בו</translation>
 <translation id="444134486829715816">הרחב...</translation>
-<translation id="4442329324652245220">‏<ph name="IDS_SHORT_PRODUCT_NAME" /> יכול לבדוק את הסיסמאות כשנכנסים באמצעות חשבון Google</translation>
 <translation id="4442424173763614572">‏חיפוש ה-DNS נכשל</translation>
 <translation id="4443536555189480885">&amp;עזרה</translation>
 <translation id="4444304522807523469">‏גישה לסורקי מסמכים המחוברים באמצעות USB או ברשת המקומית</translation>
@@ -2615,7 +2611,6 @@
 <translation id="4476659815936224889">‏כדי לסרוק את הקוד הזה, ניתן להשתמש באפליקציה של סורק קודי ה-QR בטלפון או באפליקציות מצלמה מתאימות.</translation>
 <translation id="4477015793815781985">‏צריך לכלול Ctrl, ‏Alt או ⌘</translation>
 <translation id="4478664379124702289">שמור קישו&amp;ר כ...</translation>
-<translation id="4478777936860197922">אין סיסמאות שמורות. <ph name="IDS_SHORT_PRODUCT_NAME" /> יכול לבדוק את הסיסמאות שלך רק אם שמרת אותן.</translation>
 <translation id="4479424953165245642">נהל יישומי קיוסק</translation>
 <translation id="4479639480957787382">אתרנט</translation>
 <translation id="4479877282574735775">המערכת מגדירה את המכונה הוירטואלית. הפעולה עשויה להימשך כמה דקות.</translation>
@@ -2861,7 +2856,6 @@
 <translation id="4849517651082200438">אל תתקין</translation>
 <translation id="4850669014075537160">גלילה</translation>
 <translation id="4850886885716139402">הצגה</translation>
-<translation id="485197095346966382">אם מערכת <ph name="IDS_SHORT_PRODUCT_NAME" /> תזהה שנכנסת עם סיסמה שנחשפה, היא תתריע לך על כך</translation>
 <translation id="4853020600495124913">פתח ב&amp;חלון חדש</translation>
 <translation id="4854317507773910281">בחירת חשבון הורה לשליחת בקשת אישור</translation>
 <translation id="485480310608090163">עוד הגדרות והרשאות</translation>
@@ -4823,7 +4817,6 @@
 <translation id="7530016656428373557">שיעור פריקה בוואט</translation>
 <translation id="7531779363494549572">עוברים אל 'הגדרות' &gt; 'אפליקציות והודעות' &gt; 'הודעות'.</translation>
 <translation id="7532009420053991888">האפליקציה <ph name="LINUX_APP_NAME" /> לא מגיבה. כדי לסגור את האפליקציה, יש לבחור באפשרות "אילוץ סגירה".</translation>
-<translation id="7536333565791380193">אבטחה מתקדמת</translation>
 <translation id="7537451260744431038">‏אתרים לא יכולים להשתמש בקובצי cookie כדי לשפר את חוויית הגלישה – למשל, כדי למנוע ניתוק שלך מהחשבון או כדי לזכור את הפריטים שהוספת לעגלת הקניות</translation>
 <translation id="7539856059004947393">‏מפתח אבטחה בחיבור Bluetooth</translation>
 <translation id="7540972813190816353">אירעה שגיאה בעת בדיקת עדכונים: <ph name="ERROR" /></translation>
@@ -5063,7 +5056,6 @@
     <ph name="BEGIN_BOLD" />הערה:<ph name="END_BOLD" /> המערכת תבצע הפעלה מחדש בזמן התהליך.</translation>
 <translation id="7828731929332799387">‏הפעולה הזו תמחק את כל קובצי ה-cookie ונתוני האתרים הזמינים בהקשרים של צד שלישי. להמשיך?</translation>
 <translation id="7829298379596169484">גישה לקלט אודיו</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> לא יכול לבדוק את הסיסמאות. כדאי לבדוק את החיבור לאינטרנט.</translation>
 <translation id="7829877209233347340">צריך לבקש מהורה להיכנס לחשבון כדי לאשר הוספה של חשבון בית ספרי</translation>
 <translation id="7830594666202422257">‏חיבור ל-Linux</translation>
 <translation id="7831491651892296503">אירעה שגיאה בהגדרת הרשת</translation>
@@ -5940,7 +5932,6 @@
 <translation id="8966870118594285808">ניתן לפתוח כרטיסייה מחדש אם סגרת אותה בטעות</translation>
 <translation id="8967866634928501045">‏כדי להציג, יש להקיש על Alt+Shift+A</translation>
 <translation id="8968766641738584599">שמירת הכרטיס</translation>
-<translation id="8971800409073702505">‏<ph name="IDS_SHORT_PRODUCT_NAME" /> לא יכול לבדוק את הסיסמאות. אפשר לנסות שוב בעוד 24 שעות או <ph name="BEGIN_LINK" />לבדוק את הסיסמאות בחשבון Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Esc</translation>
 <translation id="8972513834460200407">‏פנה אל מנהל המערכת של הרשת שלך כדי לוודא שחומת האש אינה חוסמת הורדות משרתי Google.</translation>
 <translation id="8973557916016709913">הסר את רמת המרחק מהתצוגה</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 7d34ecf6..c0bdac5 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">ブックマーク名</translation>
 <translation id="1124772482545689468">ユーザー</translation>
 <translation id="1125550662859510761">表示上のサイズ: <ph name="WIDTH" />x<ph name="HEIGHT" />(ネイティブ)</translation>
+<translation id="1126809382673880764">危険なウェブサイト、ダウンロード、拡張機能から保護されていません。セーフ ブラウジングによる保護については、Gmail や Google 検索といった他の Google サービスで利用可能な場合は引き続き保護されます。</translation>
 <translation id="1128109161498068552">システム エクスクルーシブ メッセージを使用して MIDI デバイスにアクセスすることをサイトに許可しない</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">検索エンジンの編集</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">既知のネットワーク</translation>
 <translation id="123578888592755962">ディスクがいっぱいです</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">個人情報の入力候補を表示する</translation>
 <translation id="1239594683407221485">ファイルアプリでデバイスのコンテンツを検索します。</translation>
 <translation id="124116460088058876">その他の言語</translation>
 <translation id="1241753985463165747">呼び出しの時点でアクセスしているウェブサイト上の全データの読み取りと変更</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">モバイル有効化</translation>
 <translation id="1407489512183974736">中央トリミング</translation>
 <translation id="1408504635543854729">ファイルアプリでデバイスの内容を確認できます。ただし管理者が制限を設定しているため、デバイスの内容を変更することはできません。</translation>
+<translation id="1408980562518920698">個人情報の管理</translation>
 <translation id="1410197035576869800">アプリのアイコン</translation>
 <translation id="1410616244180625362"><ph name="HOST" /> によるカメラへのアクセスを引き続き許可する</translation>
 <translation id="1414648216875402825">アップデートしようとしているバージョンの <ph name="PRODUCT_NAME" /> には開発中の機能が含まれており、不安定です。クラッシュや予期しないバグが発生します。続行する場合は十分にご注意ください。</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">JavaScript コンソール(&amp;J)</translation>
 <translation id="1587907146729660231">電源ボタンを指でタップしてください</translation>
+<translation id="1588200577109872591">スマート入力</translation>
 <translation id="1588438908519853928">ノーマル</translation>
 <translation id="158849752021629804">ホーム ネットワークが必要です</translation>
 <translation id="1588870296199743671">次のプログラムでリンクを開く...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">次のアカウントでログイン</translation>
 <translation id="1880905663253319515">証明書「<ph name="CERTIFICATE_NAME" />」を削除しますか?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_INDEX" /> 番目のネットワーク(全 <ph name="NETWORK_COUNT" /> 件)、<ph name="NETWORK_NAME" />、接続</translation>
+<translation id="1884705339276589024">Linux ディスクのサイズ変更</translation>
 <translation id="1886996562706621347">サイトからのプロトコルのデフォルト ハンドラとしての登録要求を許可する(推奨)</translation>
 <translation id="1887442540531652736">ログインエラー</translation>
 <translation id="1887597546629269384">もう一度「OK Google」と話しかけてください</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">古いバージョンの <ph name="PRODUCT_NAME" /> のチャンネルに変更しようとしています。このチャンネル変更は、チャンネルのバージョンとお使いのデバイスにインストールされているバージョンとが一致したときに適用されます。</translation>
 <translation id="197989455406964291">KDC でサポートされていない暗号化タイプです</translation>
 <translation id="1982354452682152483">説明がありません。</translation>
+<translation id="1984417487208496350">保護なし(推奨されません)</translation>
 <translation id="1987317783729300807">アカウント</translation>
 <translation id="1989112275319619282">閲覧</translation>
 <translation id="1990512225220753005">このページではショートカットを表示しません</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">アカウント情報を復旧するには google.com/accounts/recovery に移動します。</translation>
 <translation id="2090876986345970080">システム セキュリティの設定</translation>
 <translation id="2091887806945687916">音声</translation>
+<translation id="2096478741073211388">個人情報の候補表示を有効にすると、特定の単語を入力したときに、あなたの名前や住所、電話番号が候補として表示され、すばやく入力できるようになります。個人用にカスタマイズされた候補は、そのアカウントを使用するユーザーにのみ表示されます。</translation>
 <translation id="2096715839409389970">サードパーティの Cookie を消去</translation>
 <translation id="2097372108957554726">新しいデバイスを登録するには、Chrome にログインする必要があります</translation>
 <translation id="2099172618127234427">Chrome OS デバッグ機能を有効にしています。この機能を有効にすると、sshd デーモンが設定され USB デバイスからの起動が可能になります。</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">フレームを再読み込み(&amp;F)</translation>
 <translation id="2114896190328250491">撮影者: <ph name="NAME" /></translation>
 <translation id="2119349053129246860"><ph name="APP" /> で開く</translation>
+<translation id="2119461801241504254">セーフ ブラウジングは有効で、有害なサイトやダウンロードから保護されています</translation>
 <translation id="2120297377148151361">アクティビティと操作</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" />をブロック</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Cookie がブロックされています}=1{Cookie がブロックされています(1 件の例外)}other{Cookie がブロックされています({COUNT} 件の例外)}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">ブックマークを追加しました</translation>
 <translation id="2343747224442182863">このタブをフォーカス</translation>
 <translation id="2345723121311404059">1 ページを <ph name="PRINTER_NAME" /> に送信しました</translation>
-<translation id="2346953515226895098">SODA サービス</translation>
 <translation id="2347644257713614136">ハングアウトと Cast for Education のご利用には、Google プライバシー ポリシーが適用されます。</translation>
 <translation id="2348176352564285430">アプリ: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">データの読み込み中にエラーが発生しました</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">リセットを確定するには、セキュリティ キーをもう一度タップしてください。セキュリティ キーに保存されているすべての情報(PIN を含む)が削除されます。</translation>
 <translation id="3518985090088779359">同意して続行</translation>
 <translation id="351952459507671940">新しいグループに追加</translation>
+<translation id="3521606918211282604">ディスクのサイズを変更</translation>
 <translation id="3523642406908660543">サイトがプラグインを使用してパソコンにアクセスしようとしたときに確認する(推奨)</translation>
 <translation id="3524965460886318643">アクティビティをエクスポート</translation>
 <translation id="3526034519184079374">サイトのデータを読み取れないか、変更できません</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">パスワードを入力すると Smart Lock が有効になり、次回から、スマートフォンで <ph name="DEVICE_TYPE" /> のロックを解除できます。Smart Lock を無効にするには [設定] をご利用ください。</translation>
 <translation id="3630132874740063857">スマートフォン</translation>
 <translation id="3630995161997703415">このサイトをシェルフに追加するといつでも使えるようになります</translation>
+<translation id="3633309367764744750">ウェブページ(アクセスしたことのないページを含む)から情報を事前取得します。この情報の一部として Cookie(許可している場合)が取得される可能性があります。</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_INDEX" /> 番目のネットワーク(全 <ph name="NETWORK_COUNT" /> 件)、<ph name="NETWORK_NAME" />、<ph name="CONNECTION_STATUS" />、管理者によって管理、詳細</translation>
 <translation id="3635241501480133979">このデータは、組織のセキュリティ ポリシーに違反しているためドロップできません。</translation>
 <translation id="3635353578505343390">Google にフィードバックを送信</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">このセキュリティ キーのフィンガープリント</translation>
 <translation id="3973660817924297510">パスワードを確認しています(<ph name="CHECKED_PASSWORDS" /> 件目 / <ph name="TOTAL_PASSWORDS" /> 件中)…</translation>
 <translation id="3975565978598857337">レルムのサーバーに接続できませんでした</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> でパスワードを確認できません。しばらくしてからもう一度お試しください。</translation>
 <translation id="3976108569178263973">利用できるプリンタがありません。</translation>
 <translation id="397703832102027365">最終処理中...</translation>
 <translation id="3977886311744775419">このネットワーク タイプでは自動更新はダウンロードされませんが、手動で更新を確認できます。</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">フワフワ</translation>
 <translation id="4423376891418188461">設定を元に戻す</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" /> さん、管理者がパスワードの変更をリクエストしています。</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> でパスワードを確認できません。24 時間後にもう一度お試しください。</translation>
 <translation id="4429030830601238961">このデータは、組織のセキュリティ ポリシーに違反しているため貼り付けできません。</translation>
 <translation id="4430019312045809116">音量</translation>
 <translation id="4430369329743628066">ブックマークを追加しました</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">マシンの起動時にこのアプリを自動的に起動しますか?</translation>
 <translation id="4441147046941420429">続行するには、デバイスからセキュリティ キーを取り外し、もう一度差し込んでからタッチしてください</translation>
 <translation id="444134486829715816">展開...</translation>
-<translation id="4442329324652245220">Google アカウントでログインすると、<ph name="IDS_SHORT_PRODUCT_NAME" /> でパスワードを確認できるようになります。</translation>
 <translation id="4442424173763614572">DNS を検索できませんでした</translation>
 <translation id="4443536555189480885">ヘルプ(&amp;H)</translation>
 <translation id="4444304522807523469">USB 接続またはローカル ネットワーク上のドキュメント スキャナーへのアクセス</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">このコードをスキャンするには、スマートフォンの QR スキャンアプリまたはカメラアプリを使用してください。</translation>
 <translation id="4477015793815781985">Ctrl キー、Alt キー、⌘ キーのいずれかが必要です</translation>
 <translation id="4478664379124702289">リンク先を別名で保存(&amp;K)...</translation>
-<translation id="4478777936860197922">保存されているパスワードがありません。パスワードを保存すると、<ph name="IDS_SHORT_PRODUCT_NAME" /> で確認できるようになります。</translation>
 <translation id="4479424953165245642">キオスク アプリケーションを管理</translation>
 <translation id="4479639480957787382">イーサネット</translation>
 <translation id="4479877282574735775">仮想マシンを設定しています。この処理には数分かかることがあります。</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">インストールしない</translation>
 <translation id="4850669014075537160">スクロール</translation>
 <translation id="4850886885716139402">表示</translation>
-<translation id="485197095346966382">不正使用されたパスワードでログインした場合、<ph name="IDS_SHORT_PRODUCT_NAME" /> で通知します</translation>
 <translation id="4853020600495124913">新しいウィンドウで開く(&amp;N)</translation>
 <translation id="4854317507773910281">承認してもらう保護者のアカウントを選択</translation>
 <translation id="485480310608090163">その他の設定と権限</translation>
@@ -3937,6 +3941,7 @@
 <translation id="6298962879096096191">Google Play を使用して Android アプリをインストールします</translation>
 <translation id="630065524203833229">終了(&amp;X)</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> を自動的に設定できませんでした。プリンタの詳細設定を指定してください。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">個人情報の候補表示</translation>
 <translation id="6305607932814307878">グローバル ポリシー:</translation>
 <translation id="6307990684951724544">システムがビジー状態です</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> によるログイン</translation>
@@ -4015,6 +4020,7 @@
 <translation id="641081527798843608">件名の一致</translation>
 <translation id="6412673304250309937">Chrome に保存されている安全でないサイトのリストと URL を照合します。サイトがパスワードを不正に取得しようとしている場合や、ユーザーが安全でないファイルをダウンロードしようとした場合は、URL とページ コンテンツの一部をセーフ ブラウジングに送信することがあります。</translation>
 <translation id="6412931879992742813">新しいシークレット ウィンドウ</translation>
+<translation id="6413591858632097328"><ph name="ORIGIN_NAME" /> により保存されたすべてのデータと Cookie、インストールされたアプリが削除されます。</translation>
 <translation id="641469293210305670">アップデートとアプリのインストール</translation>
 <translation id="6414888972213066896">このサイトを開いてもよいかの問い合わせを保護者に送信しました</translation>
 <translation id="6415900369006735853">スマートフォンを使用してインターネットに接続します</translation>
@@ -4825,7 +4831,6 @@
 <translation id="7530016656428373557">放電率(ワット)</translation>
 <translation id="7531779363494549572">[設定] &gt; [アプリと通知] &gt; [通知] の順に選択します。</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> から応答がありません。終了するには [強制終了] を選択してください。</translation>
-<translation id="7536333565791380193">高度なセキュリティ設定</translation>
 <translation id="7537451260744431038">サイトは、Cookie を使用してブラウジングの利便性を改善できません(ログイン状態の維持、ショッピング カートの中身の保存などが行えません)</translation>
 <translation id="7539856059004947393">Bluetooth セキュリティ キー</translation>
 <translation id="7540972813190816353">更新の確認中にエラーが発生しました: <ph name="ERROR" /></translation>
@@ -5066,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />注:<ph name="END_BOLD" /> この処理中、システムの再起動が行われます。</translation>
 <translation id="7828731929332799387">サードパーティのコンテキストで使用される Cookie とサイトデータがすべて削除されます。続行しますか?</translation>
 <translation id="7829298379596169484">音声入力にアクセスしています</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> でパスワードを確認できません。インターネット接続を確認してみてください。</translation>
 <translation id="7829877209233347340">保護者の方に、ログインして学校用アカウントの追加を許可してもらってください。</translation>
 <translation id="7830594666202422257">Linux に接続</translation>
 <translation id="7831491651892296503">ネットワークの設定中にエラーが発生しました</translation>
@@ -5941,7 +5945,6 @@
 <translation id="8966870118594285808">間違って閉じたタブをもう一度開きます</translation>
 <translation id="8967866634928501045">Alt+Shift+A キーで表示します</translation>
 <translation id="8968766641738584599">カードを保存</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> でパスワードを確認できません。24 時間後にもう一度お試しいただくか、<ph name="BEGIN_LINK" />Google アカウントのパスワードをご確認ください<ph name="END_LINK" />。</translation>
 <translation id="89720367119469899">Esc</translation>
 <translation id="8972513834460200407">ファイアウォールが Google のサーバーからのダウンロードをブロックしていないかどうかをネットワーク管理者に確認してください。</translation>
 <translation id="8973557916016709913">拡大縮小値の指定を削除</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index d399d15..751d9f6 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">სანიშნის სახელი</translation>
 <translation id="1124772482545689468">მომხმარებელი</translation>
 <translation id="1125550662859510761">როგორც ჩანს, გარჩევადობა არის <ph name="WIDTH" /> x <ph name="HEIGHT" /> (საკუთარი)</translation>
+<translation id="1126809382673880764">არ დაგიცავთ სახიფათო ვებსაიტებისგან, ჩამოტვირთვებისა თუ გაფართოებებისგან. Safe Browsing-ის დაცვით (ხელმისაწვდომობის მიხედვით) მაინც ისარგებლებთ სხვა Google სერვისებში, როგორიცაა Gmail თუ Search.</translation>
 <translation id="1128109161498068552">არ დაუშვათ რომელიმე ვებგვერდმა გამოიყენოს ექსკლუზიური შეტყობინებები MIDI მოწყობილობასთან წვდომისთვის</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">საძიებო სისტემის რედაქტირება</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">ცნობილი ქსელები</translation>
 <translation id="123578888592755962">დისკი სავსეა</translation>
 <translation id="1238191093934674082">OpenVPN</translation>
+<translation id="1239439601391236986">პერსონალური ინფორმაციის შემოთავაზებების ჩვენება</translation>
 <translation id="1239594683407221485">დაათვალიერეთ მოწყობილობის შიგთავსი ფაილების აპში.</translation>
 <translation id="124116460088058876">სხვა ენები</translation>
 <translation id="1241753985463165747">გამოძახებისას მიმდინარე ვებსაიტზე არსებული თქვენი ყველა მონაცემების წაკითხვა და შეცვლა</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">მობილური ქსელის გააქტიურება</translation>
 <translation id="1407489512183974736">ცენტრი ჩამოჭრილია</translation>
 <translation id="1408504635543854729">დაათვალიერეთ მოწყობილობის კონტენტი ფაილების აპში. კონტენტზე წვდომა შეზღუდულია ადმინისტრატორის მიერ და მისი შეცვლა ვერ მოხერხდება.</translation>
+<translation id="1408980562518920698">პერსონალური ინფორმაციის მართვა</translation>
 <translation id="1410197035576869800">აპის ხატულა</translation>
 <translation id="1410616244180625362">გაგრძელება <ph name="HOST" />-ისთვის კამერაზე წვდომის მიცემით</translation>
 <translation id="1414648216875402825">თქვენ ანახლებთ <ph name="PRODUCT_NAME" />-ის არასტაბილურ ვერსიას, რომელიც შეიცავს პროგრესში მყოფ ფუნქციებს. ავარიები და მოულოდნელი შეცდომები მოხდება. გთხოვთ იმოქმედოთ სიფრთხილით.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript კონსოლი</translation>
 <translation id="1587907146729660231">შეეხეთ ელკვების ღილაკს თითით</translation>
+<translation id="1588200577109872591">გონიერი შეყვანა</translation>
 <translation id="1588438908519853928">ნორმალური</translation>
 <translation id="158849752021629804">საჭიროა სახლის ქსელი</translation>
 <translation id="1588870296199743671">გახსენით ბმულები-ის მეშვეობით…</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">შესვლა, როგორც</translation>
 <translation id="1880905663253319515">წავშალოთ სერთიფიკატი „<ph name="CERTIFICATE_NAME" />“?</translation>
 <translation id="1884013283844450420">ქსელი <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />-დან, <ph name="NETWORK_NAME" />, დაკავშირება</translation>
+<translation id="1884705339276589024">Linux-ის დისკის ზომის შეცვლა</translation>
 <translation id="1886996562706621347">ნება მიეცი საიტებს, გახდნენ პროტოკოლების ნაგულისხმევი დამმუშავებლები (რეკომენდებულია)</translation>
 <translation id="1887442540531652736">სისტემაში შესვლისას წარმოიქმნა შეცდომა</translation>
 <translation id="1887597546629269384">ხელახლა თქვით „Hey Google“</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">მიმდინარეობს არხის შეცვლა <ph name="PRODUCT_NAME" />-ის ძველი ვერსიით. არხის ცვლილება გააქტიურდება, როდესაც არხის ვერსია დაემთხვევა მოწყობილობაში ამჟამად დაინსტალირებულ ვერსიას.</translation>
 <translation id="197989455406964291">დაშიფვრის ტიპი მხარდაუჭერელია KDC-ის მიერ</translation>
 <translation id="1982354452682152483">აღწერილობა მიუწვდომელია.</translation>
+<translation id="1984417487208496350">დაცვის გარეშე (არარეკომენდებული)</translation>
 <translation id="1987317783729300807">ანგარიშები</translation>
 <translation id="1989112275319619282">დათვალიერება</translation>
 <translation id="1990512225220753005">მალსახმობების დამალვა ამ გვერდზე</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">თქვენი ანგარიშის ინფორმაციის აღსადგენად, ეწვიეთ: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">სისტემის უსაფრთხოების პარამეტრები</translation>
 <translation id="2091887806945687916">ხმა</translation>
+<translation id="2096478741073211388">შემოთავაზებული პერსონალური ინფორმაცია დაგეხმარებათ სწრაფად წერაში. მაგალითად, კონკრეტული სიტყვების აკრეფისას შემოგთავაზებთ თქვენს სახელს, მისამართს ან ტელეფონის ნომერს. თქვენს ანგარიშზე მორგებულ და კონფიდენციალურ შემოთავაზებებს მხოლოდ თქვენ დაინახავთ.</translation>
 <translation id="2096715839409389970">მესამე მხარის ქუქი-ჩანაწერების გასუფთავება</translation>
 <translation id="2097372108957554726">ახალი მოწყობილობების რეგისრტაციისთვის უნდა შეხვიდეთ Chrome-ში</translation>
 <translation id="2099172618127234427">თქვენ საშუალებას აძლევთ Chrome OS -ს გამართვოს თვისებები, რომელიც შეიქმნა sshd daemon და რთავს ჩატვირთვას USB დრაივიდან.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">&amp;ფრეიმის ხელახლა ჩატვირთვა</translation>
 <translation id="2114896190328250491">ფოტოს ავტორი: <ph name="NAME" /></translation>
 <translation id="2119349053129246860"><ph name="APP" />-ში გახსნა</translation>
+<translation id="2119461801241504254">Safe Browsing ჩართულია და გიცავთ საზიანო საიტებისა თუ ჩამოტვირთვებისგან</translation>
 <translation id="2120297377148151361">აქტივობა და ინტერაქციები</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> დაბლოკილია</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{ქუქი-ჩანაწერები დაბლოკილია}=1{ქუქი-ჩანაწერები დაბლოკილია, 1 გამონაკლისი}other{ქუქი-ჩანაწერები დაბლოკილია, {COUNT} გამონაკლისი}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">სანიშნეები დამატებულია</translation>
 <translation id="2343747224442182863">ამ ჩანართის ფოკუსში მოქცევა</translation>
 <translation id="2345723121311404059">1 გვერდი გაიგზავნა აქ: <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA Service</translation>
 <translation id="2347644257713614136">Hangouts-ისა და Cast for Education-ის გამოყენებაზე ვრცელდება Google-ის კონფიდენციალურობის დებულება.</translation>
 <translation id="2348176352564285430">აპი: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">შეცდომა მონაცემების ჩატვირთვისას</translation>
@@ -1890,6 +1897,7 @@
 <translation id="3515983984924808886">გადაყენების დასასრულებლად ხელახლა შეეხეთ უსაფრთხოების გასაღებს. უსაფრთხოების გასაღებზე შენახული მთელი ინფორმაცია (მისი PIN-კოდის ჩათვლით) წაიშლება.</translation>
 <translation id="3518985090088779359">მიღება და გაგრძელება</translation>
 <translation id="351952459507671940">ახალ ჯგუფში დამატება</translation>
+<translation id="3521606918211282604">დისკის ზომის შეცვლა</translation>
 <translation id="3523642406908660543">მკითხე, როცა საიტი მოითხოვს დანამატის გამოყენებას კომპიუტერზე წვდომის მისაღებად (რეკომენდებულია)</translation>
 <translation id="3524965460886318643">აქტივობის ექსპორტი</translation>
 <translation id="3526034519184079374">საიტის მონაცემების წაკითხვა თუ შეცვლა ვერ ხერხდება</translation>
@@ -1977,6 +1985,7 @@
 <translation id="3629631988386925734">Smart Lock-ის ჩასართავად შეიყვანეთ თქვენი პაროლი. შემდეგში <ph name="DEVICE_TYPE" /> განიბლოკება თქვენი ტელეფონის მეშვეობით. Smart Lock-ის გამორთვა შესაძლებელია პარამეტრებიდან.</translation>
 <translation id="3630132874740063857">თქვენი ტელეფონი</translation>
 <translation id="3630995161997703415">დაამატეთ ეს საიტი თქვენს თაროს და იქონიეთ მასზე წვდომა ნებისმიერ დროს</translation>
+<translation id="3633309367764744750">წინასწარ ჩატვირთავს ინფორმაციას გვერდებიდან, მათ შორის, გვერდებიდან, რომლებიც ჯერ არ მოგინახულებიათ. წინასწარ ჩატვირთული ინფორმაცია შეიძლება მოიცავდეს ქუქი-ჩანაწერებს (თუ დაუშვებთ მათ).</translation>
 <translation id="3634507049637220048">ქსელი <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />-დან, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, მართავს თქვენი ადმინისტრატორი, დეტალები</translation>
 <translation id="3635241501480133979">ეს მონაცემები არღვევს თქვენი ორგანიზაციის უსაფრთხოებასთან დაკავშირებულ წესებს, ამიტომ ჩავლებით გადმოტანა ვერ მოხერხდება.</translation>
 <translation id="3635353578505343390">გამოხმაურების გაგზავნა Google-ში</translation>
@@ -2275,7 +2284,6 @@
 <translation id="3971764089670057203">თითის ანაბეჭდები უსაფრთხოების ამ გასაღებზე</translation>
 <translation id="3973660817924297510">მიმდინარეობს პაროლების შემოწმება (<ph name="CHECKED_PASSWORDS" /> / <ph name="TOTAL_PASSWORDS" />-დან)…</translation>
 <translation id="3975565978598857337">სერვერთან არის თაობაზე დაკავშირება ვერ მოხერხდა</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ვერ ახერხებს პაროლების შემოწმებას. ცადეთ მოგვიანებით.</translation>
 <translation id="3976108569178263973">ხელმისაწვდომი პრინტერები არ არის.</translation>
 <translation id="397703832102027365">მიმდინარეობს დასრულება…</translation>
 <translation id="3977886311744775419">ავტომატური განახლებები არ ჩამოიტვირთება ქსელის ამ ტიპის მეშვეობით, თუმცა შეგიძლიათ განახლებების ხელით შემოწმება.</translation>
@@ -2576,7 +2584,6 @@
 <translation id="4421932782753506458">ბუსუსი</translation>
 <translation id="4423376891418188461">პარამეტრების აღდგენა</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ადმინისტრატორი თქვენი პაროლის შეცვლას მოითხოვს.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ვერ ახერხებს პაროლების შემოწმებას. ცადეთ 24 საათში.</translation>
 <translation id="4429030830601238961">ეს მონაცემები არღვევს თქვენი ორგანიზაციის უსაფრთხოებასთან დაკავშირებულ წესებს, ამიტომ ჩასმა ვერ მოხერხდება.</translation>
 <translation id="4430019312045809116">ხმა</translation>
 <translation id="4430369329743628066">სანიშნე დამატებულია</translation>
@@ -2589,7 +2596,6 @@
 <translation id="4441124369922430666">გსურთ ავტომატურად გაუშვათ ეს პროგრამა კომპიუტერის ჩართვისას?</translation>
 <translation id="4441147046941420429">გასაგრძელებლად ამოიღეთ უსაფრთხოების გასაღები მოწყობილობიდან, შემდეგ ხელახლა ჩასვით ის და შეეხეთ მას</translation>
 <translation id="444134486829715816">გაშლა…</translation>
-<translation id="4442329324652245220">პაროლების <ph name="IDS_SHORT_PRODUCT_NAME" />-ის მეშვეობით შესამოწმებლად შედით სისტემაში თქვენი Google ანგარიშით</translation>
 <translation id="4442424173763614572">DNS ძიება ვერ განხორციელდა</translation>
 <translation id="4443536555189480885">&amp;დახმარება</translation>
 <translation id="4444304522807523469">მიიღეთ წვდომა დოკუმენტების სკანერებზე, რომლებიც მიმაგრებულია USB-ით ან ლოკალური ქსელის მეშვეობით</translation>
@@ -2616,7 +2622,6 @@
 <translation id="4476659815936224889">ამ კოდის სკანირებისთვის შეგიძლიათ გამოიყენოთ კამერის ზოგიერთი აპი ან QR კოდების სკანირების აპი თქვენს ტელეფონზე.</translation>
 <translation id="4477015793815781985">დაურთეთ Ctrl, Alt ან ⌘</translation>
 <translation id="4478664379124702289">ბმუ&amp;ლების შენახვა როგორც…</translation>
-<translation id="4478777936860197922">შენახული პაროლები არ არის. პაროლების შემოწმებას <ph name="IDS_SHORT_PRODUCT_NAME" /> შეძლებს მათი შენახვის შემდეგ.</translation>
 <translation id="4479424953165245642">kiosk აპლიკაციების მართვა</translation>
 <translation id="4479639480957787382">ეთერნეთი</translation>
 <translation id="4479877282574735775">მიმდინარეობს ვირტუალური მოწყობილობის კონფიგურაცია. ამას შეიძლება რამდენიმე წუთი დასჭირდეს.</translation>
@@ -2862,7 +2867,6 @@
 <translation id="4849517651082200438">არ დააინსტალიროთ</translation>
 <translation id="4850669014075537160">გადაადგილება</translation>
 <translation id="4850886885716139402">გადახედვა</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> შეგატყობინებთ, როცა სისტემაში გატეხილი პაროლით შეხვალთ</translation>
 <translation id="4853020600495124913">&amp;ახალ ფანჯარაში გახსნა</translation>
 <translation id="4854317507773910281">აირჩიეთ მშობლის ანგარიში დასადასტურებლად</translation>
 <translation id="485480310608090163">სხვა პარამეტრები და ნებართვები</translation>
@@ -3936,6 +3940,7 @@
 <translation id="6298962879096096191">Android-ის აპების ინსტალაციისთვის Google Play-ს გამოყენება</translation>
 <translation id="630065524203833229">გ&amp;ასვლა</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> ვერ დაკონფიგურირდა ავტომატურად. გთხოვთ, მიუთითოთ პრინტერის გაფართოებული დეტალები. <ph name="LINK_BEGIN" />შეიტყვეთ მეტი<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">პერსონალური ინფორმაციის შემოთავაზებები</translation>
 <translation id="6305607932814307878">გლობალური წესები:</translation>
 <translation id="6307990684951724544">სისტემა დაკავებულია</translation>
 <translation id="6308493641021088955">შესვლას უზრუნველყოფს <ph name="EXTENSION_NAME" /></translation>
@@ -4014,6 +4019,7 @@
 <translation id="641081527798843608">თემის თანხვედრა</translation>
 <translation id="6412673304250309937">შეამოწმებს URL-ების თანხვედრას Chrome-ში შენახულ არაუსაფრთხო საიტების სიასთან. საიტის მიერ პაროლის მოპარვის მცდელობის ან თქვენ მიერ საზიანო ფაილის ჩამოტვირთვის შემთხვევაში Chrome-ის მიერ Safe Browsing-ს გაეგზავნება URL-ები და შესაბამისი გვერდის კონტენტის გარკვეული ნაწილი.</translation>
 <translation id="6412931879992742813">ახალი ინკოგნიტო ფანჯარა</translation>
+<translation id="6413591858632097328">ეს მოქმედება გაასუფთავებს <ph name="ORIGIN_NAME" />-ისა და მისი დაინსტალირებული აპის მიერ შენახულ ყველა მონაცემსა და ქუქი-ჩანაწერს.</translation>
 <translation id="641469293210305670">განახლებებისა და აპების ინსტალაცია</translation>
 <translation id="6414888972213066896">ამ საიტზე წვდომის მოთხოვნა გაეგზავნა თქვენს მშობელს</translation>
 <translation id="6415900369006735853">დაუკავშირდით ინტერნეტს თქვენი ტელეფონის მეშვეობით</translation>
@@ -4824,7 +4830,6 @@
 <translation id="7530016656428373557">განტვირთვის მაჩვენებელი (ვატი)</translation>
 <translation id="7531779363494549572">გადადით აქ: პარამეტრები &gt; აპები და შეტყობინებები &gt; შეტყობინებები.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> არ რეაგირებს. მის დასახურად აირჩიეთ „იძულებით დახურვა“.</translation>
-<translation id="7536333565791380193">დაცვის გაფართოებული ვარიანტები</translation>
 <translation id="7537451260744431038">საიტები ვერ გამოიყენებს ქუქი-ჩანაწერებს დათვალიერების პროცესის გასაუმჯობესებლად, მაგალითად, სისტემაში შესული მდგომარეობის შესანარჩუნებლად ან საყიდლების კალათაში დამატებული ერთეულების დასამახსოვრებლად</translation>
 <translation id="7539856059004947393">Bluetooth უსაფრთხოების გასაღები</translation>
 <translation id="7540972813190816353">განახლებების შემოწმებისას შეცდომა მოხდა: <ph name="ERROR" /></translation>
@@ -5065,7 +5070,6 @@
     <ph name="BEGIN_BOLD" />შენიშვნა:<ph name="END_BOLD" /> პროცესის მსვლელობისას სისტემა გადაიტვირთება.</translation>
 <translation id="7828731929332799387">ეს ქმედება წაშლის ყველა იმ ქუქი-ჩანაწერსა და საიტების მონაცემს, რომელიც ხელმისაწვდომია მესამე მხარის კონტექსტებში. გსურთ გაგრძელება?</translation>
 <translation id="7829298379596169484">შემომავალ აუდიოზე წვდომა</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ვერ ახერხებს პაროლების შემოწმებას. შეამოწმეთ კავშირი ინტერნეტთან.</translation>
 <translation id="7829877209233347340">სასწავლებლის ანგარიშის დამატების ნებართვის მოსანიჭებლად სთხოვეთ მშობელს სისტემაში შესვლა</translation>
 <translation id="7830594666202422257">Linux-თან დაკავშირება</translation>
 <translation id="7831491651892296503">შეცდომა ქსელის კონფიგურაციისას</translation>
@@ -5938,7 +5942,6 @@
 <translation id="8966870118594285808">გახსენით ჩანართი ხელახლა მისი შემთხვევით დახურვის შემთხვევაში</translation>
 <translation id="8967866634928501045">საჩვენებლად დააჭირეთ კლავიშთა შემდეგ კომბინაციას: Alt+Shift+A</translation>
 <translation id="8968766641738584599">ბარათის შენახვა</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ვერ ახერხებს პაროლების შემოწმებას. ცადეთ 24 საათში ან <ph name="BEGIN_LINK" />შეამოწმეთ პაროლები თქვენს Google ანგარიშში<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">ჰკითხეთ ქსელის ადმინისტრატორს, ხომ არ ბლოკავს ქსელური დაცვა ჩამოტვირთვებს Google-ის სერვერებიდან.</translation>
 <translation id="8973557916016709913">მასშტაბირების დონის ამოშლა</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index 6c07f2cd..3e8e0207 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Бетбелгі атауы</translation>
 <translation id="1124772482545689468">Пайдаланушы</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (жергілікті) болып көрінеді</translation>
+<translation id="1126809382673880764">Қауіпті веб-сайттардан, жүктеп алынатын файлдардан және кеңейтімдерден қорғамайды. Gmail және Search сияқты басқа Google қызметтерінде "Қауіпсіз шолу" функциясы қорғайтын болады.</translation>
 <translation id="1128109161498068552">Кез келген сайттардың MIDI құрылғыларына қатынасу үшін жүйенің эксклюзивті хабарларын пайдалануына рұқсат етпеу</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Іздеу жүйесін өзгерту</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Сақталған желілер</translation>
 <translation id="123578888592755962">Диск толы</translation>
 <translation id="1238191093934674082">VPN ашу</translation>
+<translation id="1239439601391236986">Теру кезінде жеке ақпарат ұсыныстарын көрсету</translation>
 <translation id="1239594683407221485">Files қолданбасында құрылғының мазмұнын көріңіз.</translation>
 <translation id="124116460088058876">Қосымша тілдер</translation>
 <translation id="1241753985463165747">Шақырылған кезде ағымдағы вебсайттағы барлық деректерді оқу және өзгерту</translation>
@@ -201,7 +203,7 @@
 <translation id="1259152067760398571">Қауіпсіздік шарасы кеше қолданылды.</translation>
 <translation id="1260451001046713751">Қалқымалы терезелердің шығуына және <ph name="HOST" /> хостынан бағыттауға әрқашан рұқсат беру</translation>
 <translation id="126156426083987769">Демо режиміндегі құрылғы лицензияларына қатысты ақау орын алды.</translation>
-<translation id="1263490604593716556"><ph name="FIRST_PARENT_EMAIL" /> және <ph name="SECOND_PARENT_EMAIL" /> басқаратын есептік жазба. Құрылғыдағы негізгі есептік жазбадан шығу үшін экрандағы сағатты басыңыз. Мәзірден "Шығу" опциясын таңдаңыз.</translation>
+<translation id="1263490604593716556"><ph name="FIRST_PARENT_EMAIL" /> және <ph name="SECOND_PARENT_EMAIL" /> басқаратын есептік жазба. Құрылғыдағы негізгі есептік жазбадан шығу үшін экрандағы уақытты басыңыз. Мәзірден "Шығу" опциясын таңдаңыз.</translation>
 <translation id="126710816202626562">Аударма тілі:</translation>
 <translation id="126768002343224824">16x</translation>
 <translation id="1272079795634619415">Тоқтату</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Ұялы байланысты іске қосу</translation>
 <translation id="1407489512183974736">Ортасы қиып алынған</translation>
 <translation id="1408504635543854729">Файлдар қолданбасында құрылғының мазмұнын қарап шығыңыз. Мазмұнға әкімші шектеу қойған және оны өзгертуге болмайды.</translation>
+<translation id="1408980562518920698">Жеке ақпаратты басқару</translation>
 <translation id="1410197035576869800">Қолданба белгішесі</translation>
 <translation id="1410616244180625362"><ph name="HOST" /> хостына берген камераны қолдану рұқсатын сақтау</translation>
 <translation id="1414648216875402825">Сіз <ph name="PRODUCT_NAME" /> тұрақсыз нұсқасы жаңартудасыз, онда әлі орындалып жатқан мүмкіндіктер бар. Бұзылулар, күтпеген қателер орын алады. Сақтықпен жалғастыруыңызды сұраймыз.</translation>
@@ -431,6 +434,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript консолі</translation>
 <translation id="1587907146729660231">Қуат түймесін саусағыңызбен түртіңіз.</translation>
+<translation id="1588200577109872591">Ақылды енгізу әдістері</translation>
 <translation id="1588438908519853928">Қалыпты</translation>
 <translation id="158849752021629804">Үй желісі қажет</translation>
 <translation id="1588870296199743671">Сілтемені келесі арқылы ашу…</translation>
@@ -666,6 +670,7 @@
 <translation id="1879000426787380528">Келесі есептік жазбаға кіру:</translation>
 <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" сертификатын жою керек пе?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> желі, <ph name="NETWORK_NAME" />, қоcылу</translation>
+<translation id="1884705339276589024">Linux дискісінің көлемін өзгерту</translation>
 <translation id="1886996562706621347">Барлық сайттарға протоколдар үшін әдепкі өңдегіш болу рұқсатын беру (ұсынылады)</translation>
 <translation id="1887442540531652736">Есептік жазбаға кіру кезінде қате шықты</translation>
 <translation id="1887597546629269384">"Hey Google" деп қайта айтыңыз</translation>
@@ -735,6 +740,7 @@
 <translation id="1979280758666859181"><ph name="PRODUCT_NAME" /> ескірек нұсқасы орнатылған арнаға ауысып жатырсыз. Арнаның нұсқасы құрылғыңызға орнатылған нұсқаға сәйкес келгенде ғана ауыса алады.</translation>
 <translation id="197989455406964291">KDC шифрлау түрін қолданбайды.</translation>
 <translation id="1982354452682152483">Сипаттамасы жоқ.</translation>
+<translation id="1984417487208496350">Қорғау режимін өшіру (ұсынылмайды)</translation>
 <translation id="1987317783729300807">Есептік жазбалар</translation>
 <translation id="1989112275319619282">Шолу</translation>
 <translation id="1990512225220753005">Бұл бетте таңбашаларды көрсетпеу</translation>
@@ -804,6 +810,7 @@
 <translation id="2090165459409185032">Есептік жазба ақпаратын қалпына келтіру үшін мына сілтемеге өтіңіз: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Жүйелік қауіпсіздік параметрі</translation>
 <translation id="2091887806945687916">Дыбыс</translation>
+<translation id="2096478741073211388">Ұсынылатын жеке ақпарат (мысалы, аты, мекенжайы немесе телефон нөмірі) көмексөздерін пайдаланып, жылдам жазуға болады. Есептік жазбаңызға арналған құпия әрі жекелендірілген ұсыныстарды тек сіз көресіз.</translation>
 <translation id="2096715839409389970">Бөгде сайттардың cookie файлдарын тазалау</translation>
 <translation id="2097372108957554726">Жаңа құрылғыларды тіркеу үшін Chrome жүйесіне кіру қажет</translation>
 <translation id="2099172618127234427">Сіз Chrome OS жөндеу мүмкіндіктерін қосқалы жатырсыз. Олар sshd демонын орнатып, USB дискілерінен жүктеу мүмкіндігін береді.</translation>
@@ -820,6 +827,7 @@
 <translation id="2114326799768592691">&amp;Кадрды қайта жүктеу</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> суреті</translation>
 <translation id="2119349053129246860"><ph name="APP" /> қолданбасынан ашу</translation>
+<translation id="2119461801241504254">"Қауіпсіз шолу" функциясы қосулы және ол зиянды сайттар мен жүктеп алынатын файлдардан қорғайды.</translation>
 <translation id="2120297377148151361">Белсенділік және өзара әрекеттер</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> бөгелді.</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Cookie файлдары бөгелді}=1{Cookie файлдары бөгелді (1 ерекше жағдай)}other{Cookie файлдары бөгелді ({COUNT} ерекше жағдай)}}</translation>
@@ -869,7 +877,7 @@
 <translation id="2172784515318616985">Жалғастыру</translation>
 <translation id="2173302385160625112">Интернет байланысын тексеріңіз</translation>
 <translation id="2173801458090845390">Осы құрылғыға сұрау идентификаторын енгізу</translation>
-<translation id="2174948148799307353"><ph name="PARENT_EMAIL" /> басқаратын есептік жазба. Құрылғыдағы негізгі есептік жазбадан шығу үшін экрандағы сағатты басыңыз. Мәзірден "Шығу" опциясын таңдаңыз.</translation>
+<translation id="2174948148799307353"><ph name="PARENT_EMAIL" /> басқаратын есептік жазба. Құрылғыдағы негізгі есептік жазбадан шығу үшін экрандағы уақытты басыңыз. Мәзірден "Шығу" опциясын таңдаңыз.</translation>
 <translation id="2175607476662778685">Жылдам іске қосу жолағы</translation>
 <translation id="217576141146192373">Принтер енгізілмеді. Принтердің конфигурациясын тексеріп, қайталап көріңіз.</translation>
 <translation id="2177950615300672361">Инкогнито қойындысы: <ph name="TAB_NAME" /></translation>
@@ -1000,7 +1008,6 @@
 <translation id="2342740338116612727">Бетбелгілер енгізілді</translation>
 <translation id="2343747224442182863">Осы қойындыны ерекшелеу</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> үшін бір бет</translation>
-<translation id="2346953515226895098">SODA қызметі</translation>
 <translation id="2347644257713614136">Hangouts және Cast for Education қолданбаларын Google құпиялылық саясатына сәйкес пайдалану керек.</translation>
 <translation id="2348176352564285430">Қолданба: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Деректерді жүктеу кезінде қате шықты.</translation>
@@ -1888,6 +1895,7 @@
 <translation id="3515983984924808886">Бастапқы күйге қайтаруды растау үшін қауіпсіздік кілтін қайта түртіңіз. Қауіпсіздік кілтінде сақталған барлық ақпарат, оның ішінде PIN коды жойылатын болады.</translation>
 <translation id="3518985090088779359">Қабылдап, жалғастыру</translation>
 <translation id="351952459507671940">Жаңа топқа қосу</translation>
+<translation id="3521606918211282604">Дискінің көлемін өзгерту</translation>
 <translation id="3523642406908660543">Компьютеріңізге кіру үшін сайт плагинді пайдаланғысы келгенде сұрау (ұсынылған)</translation>
 <translation id="3524965460886318643">Әрекеттер тарихын экспорттау</translation>
 <translation id="3526034519184079374">Сайттың деректерін оқу немесе өзгерту мүмкін емес</translation>
@@ -1975,6 +1983,7 @@
 <translation id="3629631988386925734">Құпия сөзді енгізіп, Smart Lock функциясын қосыңыз. Келесіде телефоныңыз <ph name="DEVICE_TYPE" /> құрылғысының құлпын ашады. Smart Lock функциясын "Параметрлер" бөлімінен өшіруге болады.</translation>
 <translation id="3630132874740063857">Телефоныңыз</translation>
 <translation id="3630995161997703415">Бұл сайтты кез келген уақытта пайдалану үшін оны сөреңізге енгізіңіз</translation>
+<translation id="3633309367764744750">Ақпаратты сіз кірген және әлі кірмеген беттерден алдын ала алады. Алынған ақпаратта cookie файлдары болады (cookie файлдарына рұқсат берілген жағдайда).</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> желі, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, әкімшіңіз басқарады, мәліметтер</translation>
 <translation id="3635241501480133979">Бұл деректер ұйымыңыздың қауіпсіздік саясаттарына қайшы келеді. Оларды қою мүмкін емес.</translation>
 <translation id="3635353578505343390">Google-ға пікір жіберу</translation>
@@ -2273,7 +2282,6 @@
 <translation id="3971764089670057203">Осы қауіпсіздік кілтіндегі саусақ іздері</translation>
 <translation id="3973660817924297510">Құпия сөздерді (<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />) тексеру…</translation>
 <translation id="3975565978598857337">Аймақ серверіне қосылмады.</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> сіздің құпия сөздеріңізді тексере алмайды. Кейінірек қайталаңыз.</translation>
 <translation id="3976108569178263973">Қолжетімді принтерлер жоқ.</translation>
 <translation id="397703832102027365">Аяқталуда…</translation>
 <translation id="3977886311744775419">Автоматты жаңартулар мұндай желіде жүктеп алынбайды, бірақ жаңартулардың бар-жоғын қолмен тексеруге болады.</translation>
@@ -2574,7 +2582,6 @@
 <translation id="4421932782753506458">Fluffy</translation>
 <translation id="4423376891418188461">Параметрлерді қалпына келтіру</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, әкімшіңіз құпия сөздің өзгертілуін талап етеді.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> сіздің құпия сөздеріңізді тексере алмайды. 24 сағаттан кейін қайталап көріңіз.</translation>
 <translation id="4429030830601238961">Бұл деректер ұйымыңыздың қауіпсіздік саясаттарына қайшы келеді. Оларды қою мүмкін емес.</translation>
 <translation id="4430019312045809116">Дыбыс деңгейі</translation>
 <translation id="4430369329743628066">Бетбелгі қосылды</translation>
@@ -2587,7 +2594,6 @@
 <translation id="4441124369922430666">Машина іске қосылғанда, бұл қолданба автоматты түрде ашылсын ба?</translation>
 <translation id="4441147046941420429">Жалғастыру үшін құрылғыдан қауіпсіздік кілтін алып, қайта салыңыз, одан кейін оны түртіңіз.</translation>
 <translation id="444134486829715816">Жаю…</translation>
-<translation id="4442329324652245220">Google есептік жазбаңызбен кіргенде, <ph name="IDS_SHORT_PRODUCT_NAME" /> сіздің құпия сөздеріңізді тексере алады.</translation>
 <translation id="4442424173763614572">DNS іздеу сәтсіз аяқталды</translation>
 <translation id="4443536555189480885">&amp;Анықтама</translation>
 <translation id="4444304522807523469">USB арқылы немесе жергілікті желіде тіркелген құжат сканерлеріне кіру</translation>
@@ -2614,7 +2620,6 @@
 <translation id="4476659815936224889">Бұл кодты сканерлеу үшін телефоныңыздағы QR кодын сканерлейтін қолданбаны немесе камераға арналған кейбір қолданбаларды пайдалануыңызға болады.</translation>
 <translation id="4477015793815781985">Ctrl, Alt не ⌘ пернесінен басталуы керек</translation>
 <translation id="4478664379124702289">Сілт&amp;емені басқаша сақтау…</translation>
-<translation id="4478777936860197922">Ешқандай құпия сөз сақталмаған. Құпия сөздер сақталған кезде, <ph name="IDS_SHORT_PRODUCT_NAME" /> оларды тексере алады.</translation>
 <translation id="4479424953165245642">Киоск қолданбаларын басқару</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Виртуалдық құрылғы конфигурацияланып жатыр. Бұл бірнеше минут алуы мүмкін.</translation>
@@ -2860,7 +2865,6 @@
 <translation id="4849517651082200438">Орнатпау</translation>
 <translation id="4850669014075537160">Айналдыру</translation>
 <translation id="4850886885716139402">Көрініс</translation>
-<translation id="485197095346966382">Қолданған құпия сөзіңіз ұрланған болса, <ph name="IDS_SHORT_PRODUCT_NAME" /> сізге бұл туралы хабарлайды.</translation>
 <translation id="4853020600495124913">&amp;Жаңа терезеде ашу</translation>
 <translation id="4854317507773910281">Мақұлдау үшін ата-атаның есептік жазбасын таңдаңыз</translation>
 <translation id="485480310608090163">Басқа параметрлер мен рұқсаттар</translation>
@@ -3934,6 +3938,7 @@
 <translation id="6298962879096096191">Android қолданбаларын Google Play арқылы орнату</translation>
 <translation id="630065524203833229">Ш&amp;ығу</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> принтері автоматты түрде конфигурацияланбады. Принтердің қосымша мәліметтерін көрсетіңіз. <ph name="LINK_BEGIN" />Толығырақ<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Жеке ақпарат ұсыныстары</translation>
 <translation id="6305607932814307878">Ғаламдық саясат:</translation>
 <translation id="6307990684951724544">Жүйе бос емес</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> кеңейтімі арқылы кіру керек</translation>
@@ -4012,6 +4017,7 @@
 <translation id="641081527798843608">Тақырып сәйкестігі</translation>
 <translation id="6412673304250309937">Chrome браузерінде сақталған қауіпсіз емес сайттар тізімімен URL сілтемелерін салыстырып тексереді. Егер сайт құпия сөзіңізді ұрлағысы келсе немесе сіз зиянды файл жүктеп алған кезде, Chrome браузері URL мекенжайларын, сонымен қатар бет мазмұны бөліктерін, "Қауіпсіз шолу" функциясына жіберуі мүмкін.</translation>
 <translation id="6412931879992742813">Жаңа жасырын терезе</translation>
+<translation id="6413591858632097328"><ph name="ORIGIN_NAME" /> және оның орнатқан қолданбалары сақтаған деректер мен cookie файлдарының барлығы өшіріледі.</translation>
 <translation id="641469293210305670">Жаңартылған нұсқалар мен қолданбаларды орнату</translation>
 <translation id="6414888972213066896">Ата-анаңыздан осы сайтқа кіру рұқсатын сұрадыңыз</translation>
 <translation id="6415900369006735853">Телефон арқылы интернетке жалғану</translation>
@@ -4822,7 +4828,6 @@
 <translation id="7530016656428373557">Зарядтың азаю жылдамдығы ватпен берілген</translation>
 <translation id="7531779363494549572">"Параметрлер &gt; Қолданбалар мен хабарландырулар &gt; Хабарландырулар" тармағына өтіңіз.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> жауап бермей жатыр. Оны жабу үшін "Қолмен жабу" опциясын таңдаңыз.</translation>
-<translation id="7536333565791380193">Күшейтілген қорғаныс</translation>
 <translation id="7537451260744431038">Сайттар шолуды жақсарту (мысалы, есептік жазбадан шығармау не сатып алу себетіңіздегі нәрселерді есте сақтау) үшін cookie файлдарын пайдалана алмайды.</translation>
 <translation id="7539856059004947393">Bluetooth қауіпсіздік кілті</translation>
 <translation id="7540972813190816353">Жаңартуларды тексеру кезінде қате пайда болды: <ph name="ERROR" /></translation>
@@ -5063,7 +5068,6 @@
     <ph name="BEGIN_BOLD" />Ескертпе:<ph name="END_BOLD" /> бұл процесс барысында жүйе қайта жүктеледі.</translation>
 <translation id="7828731929332799387">Бөгде сайттардағы cookie файлдары мен сайт деректерінің барлығы жойылады. Жалғастырғыңыз келе ме?</translation>
 <translation id="7829298379596169484">Аудио кіріс қолжетімді</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> сіздің құпия сөздеріңізді тексере алмайды. Интернет байланысын тексеріп көріңіз.</translation>
 <translation id="7829877209233347340">Ата-анаңыздан кіріп, мектеп есептік жазбасын енгізуге рұқсат беруін сұраңыз.</translation>
 <translation id="7830594666202422257">Linux жүйесіне жалғану</translation>
 <translation id="7831491651892296503">Желіні конфигурациялауда қате болды</translation>
@@ -5937,7 +5941,6 @@
 <translation id="8966870118594285808">Қойындыны абайсызда жапқан болсаңыз, оны қайта ашыңыз</translation>
 <translation id="8967866634928501045">Көрсету үшін "Alt"+"Shift"+"A" пернелерін басыңыз</translation>
 <translation id="8968766641738584599">Картаны сақтау</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> сіздің құпия сөздеріңізді тексере алмайды. 24 сағаттан кейін қайталап көріңіз немесе <ph name="BEGIN_LINK" />оларды Google есептік жазбасынан тексеріңіз<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Шығу</translation>
 <translation id="8972513834460200407">Әкімшіге хабарласып, брандмауэр Google серверлерінен келген жүктеулерді бөгемейтінін тексеріңіз.</translation>
 <translation id="8973557916016709913">Масштабтау деңгейін өшіру</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index cc5679c4..6d5d0f7f 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">ឈ្មោះចំណាំ</translation>
 <translation id="1124772482545689468">អ្នកប្រើ</translation>
 <translation id="1125550662859510761">មើល​ទៅដូចជា <ph name="WIDTH" /> x <ph name="HEIGHT" /> (ដើម)</translation>
+<translation id="1126809382673880764">មិនការពារអ្នក​ពីគេហទំព័រ ការទាញយក ឬកម្មវិធី​បន្ថែម​ដែលមានគ្រោះថ្នាក់ទេ។ អ្នក​នឹង​នៅតែ​ទទួលបាន​ការការពារ​ការរុករក​ដោយសុវត្ថិភាព (ប្រសិនបើមាន) នៅក្នុង​សេវាកម្ម Google ផ្សេងទៀត​ដូចជា Gmail និង​កម្មវិធីស្វែងរកជាដើម។</translation>
 <translation id="1128109161498068552">មិនអនុញ្ញាតឲ្យគេហទំព័រណាមួយប្រើសារផ្តាច់់មុខប្រព័ន្ធដើម្បីចូលប្រើឧបករណ៍  MIDI ទេ។</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">កែសម្រួលម៉ាស៊ីនស្វែងរក</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">បណ្តាញដែលស្គាល់</translation>
 <translation id="123578888592755962">ឌីសពេញ</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">បង្ហាញ​ការណែនាំ​ព័ត៌មានផ្ទាល់ខ្លួន​សម្រាប់ការបញ្ចូល</translation>
 <translation id="1239594683407221485">រុករក​ខ្លឹមសារ​របស់ឧបករណ៍​នៅក្នុង​កម្មវិធី Files ។</translation>
 <translation id="124116460088058876">ភាសា​ច្រើន​ទៀត</translation>
 <translation id="1241753985463165747">អាន និងផ្លាស់ប្តូរទិន្នន័យទាំងអស់របស់អ្នកនៅលើគេហទំព័របច្ចុប្បន្ន នៅពេលដែលវាត្រូវបានប្រើប្រាស់</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">ការបើកដំណើរការ​បណ្ដាញចល័ត</translation>
 <translation id="1407489512183974736">ចំណុចកណ្តាលត្រូវបានច្រឹប</translation>
 <translation id="1408504635543854729">រុករក​មាតិកា​របស់​ឧបករណ៍​នៅក្នុង​កម្មវិធី​ឯកសារ។ មាតិកា​នេះត្រូវ​បាន​រឹតបន្តឹង​ដោយ​អ្នក​គ្រប់គ្រង និង​មិនអាច​កែសម្រួល​បាន​ឡើយ។</translation>
+<translation id="1408980562518920698">គ្រប់គ្រង​ព័ត៌មានផ្ទាល់ខ្លួន</translation>
 <translation id="1410197035576869800">រូបតំណាង​កម្មវិធី</translation>
 <translation id="1410616244180625362">បន្តអនុញ្ញាត <ph name="HOST" /> ឲ្យចូលប្រើកាមេរ៉ារបស់អ្នក</translation>
 <translation id="1414648216875402825">អ្នកកំពុងធ្វើបច្ចុប្បន្នភាពកំណែមិនថេរនៃ <ph name="PRODUCT_NAME" /> ដែលផ្ទុកលក្ខណៈពិសេសដែលនៅក្នុងប្រតិបត្តិការនៅឡើយ។ ការគាំង និងកំហុសដែលបានមិនបានរំពឹងទុកនឹងកើតមាន។ សូមបន្តដោយប្រុងប្រយ័ត្ន។</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">ខនសូល JavaScript</translation>
 <translation id="1587907146729660231">ចុចប៊ូតុង​ថាមពល​ដោយប្រើម្រាម​ដៃរបស់អ្នក</translation>
+<translation id="1588200577109872591">ការបញ្ចូល​ឆ្លាតវៃ</translation>
 <translation id="1588438908519853928">ធម្មតា</translation>
 <translation id="158849752021629804">ត្រូវការបណ្តាញនៅតាមផ្ទះ</translation>
 <translation id="1588870296199743671">បើកដំណជាមួយ...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">ចូលជា</translation>
 <translation id="1880905663253319515">លុបវិញ្ញាបនប័ត្រ "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="1884013283844450420">បណ្ដាញ <ph name="NETWORK_INDEX" /> នៃ <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, ភ្ជាប់</translation>
+<translation id="1884705339276589024">ប្ដូរទំហំ​ថាស Linux</translation>
 <translation id="1886996562706621347">អនុញ្ញាតឲ្យគេហទំព័រសួរដើម្បីឲ្យក្លាយទៅជាឧបករណ៍ដោះស្រាយលំនាំដើមសម្រាប់ប្រូតូកូល (បានណែនាំ)</translation>
 <translation id="1887442540531652736">មាន​បញ្ហា​ក្នុង​ការ​ចូលគណនី</translation>
 <translation id="1887597546629269384">និយាយ​ថា "Hey Google" ម្ដងទៀត</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">អ្នកកំពុងប្តូរទៅបណ្តាញដែលមានកំណែចាស់នៃ <ph name="PRODUCT_NAME" />។ ការប្តូរបណ្តាញនឹងត្រូវបានអនុវត្ត នៅពេលដែលកំណែបណ្តាញនោះត្រូវគ្នាជាមួយកំណែបច្ចុប្បន្នដែលបានតំឡើងនៅលើឧបករណ៍របស់អ្នក។</translation>
 <translation id="197989455406964291">KDC មិនស្គាល់ប្រភេទ​អ៊ីនគ្រីបទេ</translation>
 <translation id="1982354452682152483">មិនមាន​ការពណ៌នាទេ។</translation>
+<translation id="1984417487208496350">គ្មានការការពារទេ (មិនណែនាំ)</translation>
 <translation id="1987317783729300807">គណនី</translation>
 <translation id="1989112275319619282">រុករក</translation>
 <translation id="1990512225220753005">កុំ​បង្ហាញ​ផ្លូវកាត់​នៅលើ​ទំព័រ​នេះ</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">ដើម្បីសង្គ្រោះទិន្នន័យគណនីរបស់អ្នក សូមចូលទៅកាន់៖ google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">ការកំណត់សុវត្ថិភាពប្រព័ន្ធ</translation>
 <translation id="2091887806945687916">សំឡេង</translation>
+<translation id="2096478741073211388">ការណែនាំ​ព័ត៌មានផ្ទាល់ខ្លួន​ជួយឱ្យអ្នកសរសេរ​លឿនជាងមុន​ដោយណែនាំ​ឈ្មោះ អាសយដ្ឋាន ឬលេខទូរសព្ទ​របស់អ្នក នៅពេល​អ្នកវាយបញ្ចូល​ពាក្យជាក់លាក់​មួយចំនួន។ មានតែអ្នកប៉ុណ្ណោះ​ដែលមើលឃើញ​ការណែនាំផ្ទាល់ខ្លួនលក្ខណៈឯកជនសម្រាប់គណនីរបស់អ្នក។</translation>
 <translation id="2096715839409389970">សម្អាតខូគីភាគីទីបី</translation>
 <translation id="2097372108957554726">អ្នកត្រូវចូលទៅ Chrome ដើម្បីចុះឈ្មោះឧបករណ៍ថ្មី</translation>
 <translation id="2099172618127234427">អ្នកកំពុងបើកដំណើរការលក្ខណៈពិសេសកម្ចាត់កំហុស Chrome OS ដែលនឹងកំណត់  sshd daemon និងបើកដំណើរការចាប់ផ្តើមចេញពីឧបករណ៍ USB។</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">ដំណើរការហ្វ្រេមឡើងវិញ</translation>
 <translation id="2114896190328250491">រូបថតដោយ <ph name="NAME" /></translation>
 <translation id="2119349053129246860">បើកនៅក្នុង <ph name="APP" /></translation>
+<translation id="2119461801241504254">ការរុករក​ដោយសុវត្ថិភាព​ត្រូវបានបើក និងការពារអ្នកពីការទាញយក និងគេហទំព័រ​ដែលបង្កគ្រោះថ្នាក់ផ្សេងៗ</translation>
 <translation id="2120297377148151361">សកម្មភាព និងអន្តរ​កម្ម</translation>
 <translation id="2120639962942052471">បាន​ទប់ស្កាត់ <ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{បាន​ទប់ស្កាត់​ខូគី​}=1{បានទប់ស្កាត់ខូគី ដោយមានការលើកលែង 1}other{បាន​ទប់ស្កាត់​ខូគី ដោយមាន​ការលើកលែង {COUNT}}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">បានបញ្ចូល​ចំណាំ</translation>
 <translation id="2343747224442182863">ផ្ដោត​ផ្ទាំងនេះ</translation>
 <translation id="2345723121311404059">1 ទំព័រទៅកាន់ <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">សេវាកម្ម SODA</translation>
 <translation id="2347644257713614136">ការប្រើប្រាស់​កម្មវិធី Hangouts និង Cast សម្រាប់​ការអប់រំត្រូវបាន​គ្រប់គ្រង​ដោយ​គោលការណ៍​ឯកជនភាព Google ។</translation>
 <translation id="2348176352564285430">កម្មវិធី៖ <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">មានបញ្ហា​ក្នុងការ​ផ្ទុក​ទិន្នន័យ</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">ចុច​សោសុវត្ថិភាព​របស់អ្នក​ម្ដងទៀត ដើម្បី​បញ្ជាក់​ការកំណត់​ឡើងវិញ។ នឹងលុបព័ត៌មាន​ទាំងអស់​ដែលរក្សាទុក​នៅក្នុង​សោសុវត្ថិភាព រួមទាំងកូដ PIN របស់វា​ផងដែរ។</translation>
 <translation id="3518985090088779359">ព្រមទទួល និងបន្ត</translation>
 <translation id="351952459507671940">បញ្ចូលទៅក្រុមថ្មី</translation>
+<translation id="3521606918211282604">ប្ដូរ​ទំហំ​ថាស</translation>
 <translation id="3523642406908660543">សួរនៅពេលគេហទំព័រចង់ប្រើកម្មវិធីជំនួយដើម្បីចូលប្រើកុំព្យូទ័ររបស់អ្នក (បានណែនាំ)</translation>
 <translation id="3524965460886318643">នាំចេញ​សកម្មភាព</translation>
 <translation id="3526034519184079374">មិនអាចអាន ឬប្ដូរទិន្នន័យរបស់​គេហទំព័របានទេ</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">បញ្ចូលពាក្យសម្ងាត់របស់អ្នក​ដើម្បីបើក Smart Lock ។ លើកក្រោយ ទូរសព្ទរបស់អ្នក​នឹងដោះសោ <ph name="DEVICE_TYPE" /> របស់អ្នក។ អ្នក​អាច​បិទ Smart Lock នៅក្នុង​ការកំណត់។</translation>
 <translation id="3630132874740063857">ទូរសព្ទ​របស់អ្នក</translation>
 <translation id="3630995161997703415">បញ្ចូល​ទំព័រនេះ​ទៅ​ធ្នើរ​របស់អ្នក​ ដើម្បី​ប្រើ​វាបាន​គ្រប់ពេល</translation>
+<translation id="3633309367764744750">ទាញយក​ព័ត៌មានពីទំព័រ​ជាមុន រួមទាំង​ទំព័រដែលអ្នក​មិនទាន់បានចូលទៅកាន់ផងដែរ។ ព័ត៌មាន​ដែលបានទាញយក​អាចរួមបញ្ចូលខូគី ប្រសិនបើអ្នក​អនុញ្ញាតខូគី។</translation>
 <translation id="3634507049637220048">បណ្ដាញ <ph name="NETWORK_INDEX" /> នៃ <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, គ្រប់គ្រងដោយ​អ្នកគ្រប់គ្រង​របស់អ្នក, ព័ត៌មាន​លម្អិត</translation>
 <translation id="3635241501480133979">ទិន្នន័យនេះ​បំពាន​គោលការណ៍សុវត្ថិភាព​ស្ថាប័នរបស់អ្នក​ និងមិនអាចអូសចូលបានទេ។</translation>
 <translation id="3635353578505343390">ផ្ញើ​មតិ​កែលម្អ​ទៅ Google</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">ស្នាម​ម្រាមដៃនៅលើ​សោសុវត្ថិភាពនេះ</translation>
 <translation id="3973660817924297510">កំពុងពិនិត្យពាក្យសម្ងាត់ (<ph name="CHECKED_PASSWORDS" /> នៃ <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">មិនអាចទាក់ទងទៅ​ម៉ាស៊ីនមេសម្រាប់​ដែនបានទេ</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> មិន​អាចពិនិត្យ​ពាក្យសម្ងាត់របស់អ្នកបានទេ។ ព្យាយាមម្តងទៀតពេលក្រោយ។</translation>
 <translation id="3976108569178263973">មិនមាន​ម៉ាស៊ីនបោះពុម្ពទេ។</translation>
 <translation id="397703832102027365">កំពុងបញ្ចប់...</translation>
 <translation id="3977886311744775419">បច្ចុប្បន្នភាព​ស្វ័យប្រវត្តិមិនទាញយក​នៅលើប្រភេទ​បណ្ដាញនេះទេ ប៉ុន្តែ​អ្នកអាចពិនិត្យមើល​បច្ចុប្បន្នភាព​ដោយខ្លួនឯងបាន។</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">ថ្លុះគួរឲ្យស្រលាញ់</translation>
 <translation id="4423376891418188461">ស្តារការកំណត់</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, អ្នកគ្រប់គ្រង​របស់អ្នក​តម្រូវឲ្យ​អ្នកប្តូរ​ពាក្យសម្ងាត់​របស់​អ្នក។</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> មិន​អាចពិនិត្យ​ពាក្យសម្ងាត់របស់អ្នកបានទេ។ សូមព្យាយាមម្ដងទៀតក្រោយរយៈពេល 24 ម៉ោង។</translation>
 <translation id="4429030830601238961">ទិន្នន័យនេះ​បំពាន​គោលការណ៍សុវត្ថិភាព​ស្ថាប័ន​របស់អ្នក និងមិនអាចដាក់ចូលបានទេ។</translation>
 <translation id="4430019312045809116">សម្លេង</translation>
 <translation id="4430369329743628066">បានបន្ថែមចំណាំ</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">តើអ្នកចង់ចាប់ផ្តើមកម្មវិធីនេះដោយស្វ័យប្រវត្តិ នៅពេលម៉ាស៊ីននេះបើកទេ?</translation>
 <translation id="4441147046941420429">ដើម្បី​បន្ត សូម​ដក​សោសុវត្ថិភាព​ចេញពី​ឧបករណ៍​របស់អ្នក បន្ទាប់មក​ដោតបញ្ចូល​វិញ រួច​ចុច​ប៊ូតុង​បើកដំណើរការ</translation>
 <translation id="444134486829715816">ពង្រីក...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> អាចពិនិត្យពាក្យសម្ងាត់របស់អ្នក នៅពេលអ្នកចូល​ដោយប្រើគណនី Google របស់អ្នក</translation>
 <translation id="4442424173763614572">DNS lookup បានបរាជ័យ</translation>
 <translation id="4443536555189480885">ជំនួយ</translation>
 <translation id="4444304522807523469">ចូលប្រើម៉ាស៊ីនស្កេនឯកសារដែលបានភ្ជាប់តាមរយៈ USB ឬនៅលើបណ្តាញមូលដ្ឋាន។</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">ដើម្បី​ស្កេនកូដ​នេះ អ្នកអាច​ប្រើ​កម្មវិធី​ស្កេនកូដ QR នៅលើទូរសព្ទ​របស់អ្នក ឬនៅលើ​កម្មវិធី​កាមេរ៉ា​មួយចំនួន។</translation>
 <translation id="4477015793815781985">រួម​បញ្ចូល Ctrl, Alt ឬ ⌘</translation>
 <translation id="4478664379124702289">រក្សាតំណជា...</translation>
-<translation id="4478777936860197922">គ្មានពាក្យសម្ងាត់ដែលបានរក្សាទុកទេ។ <ph name="IDS_SHORT_PRODUCT_NAME" /> អាចពិនិត្យពាក្យសម្ងាត់របស់អ្នក នៅពេលអ្នករក្សាទុកពាក្យសម្ងាត់ទាំងនោះ។</translation>
 <translation id="4479424953165245642">គ្រប់គ្រងកម្មវិធីបញ្ជរ</translation>
 <translation id="4479639480957787382">ខ្សែអ៊ីនធឺណិត</translation>
 <translation id="4479877282574735775">កំពុងកំណត់រចនាសម្ព័ន្ធ​ម៉ាស៊ីននិម្មិត។ ការកំណត់រចនាសម្ព័ន្ធនេះ​អាចនឹងចំណាយពេល​ពីរបីនាទី។</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">កុំតំឡើង</translation>
 <translation id="4850669014075537160">ការេមូរ</translation>
 <translation id="4850886885716139402">មើល</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> នឹង​ជូនដំណឹងទៅអ្នក នៅពេលអ្នកចូល​គណនី​ដោយប្រើពាក្យសម្ងាត់ដែល​រងការលុកលុយ</translation>
 <translation id="4853020600495124913">បើកនៅក្នុងផ្ទាំងថ្មី</translation>
 <translation id="4854317507773910281">ជ្រើសរើស​គណនីមាតាបិតា​សម្រាប់ការយល់ព្រម</translation>
 <translation id="485480310608090163">ការកំណត់ និងការអនុញ្ញាតច្រើនទៀត</translation>
@@ -3938,6 +3942,7 @@
 <translation id="6298962879096096191">ប្រើ Google Play ដើម្បីដំឡើងកម្មវិធី Android</translation>
 <translation id="630065524203833229">ចាកចេញ</translation>
 <translation id="6300718114348072351">មិនអាចកំណត់​រចនាសម្ព័ន្ធ <ph name="PRINTER_NAME" /> ដោយស្វ័យប្រវត្តិ​បានទេ។ សូមបញ្ជាក់​ព័ត៌មានលម្អិត​ម៉ាស៊ីនបោះពុម្ព​កម្រិតខ្ពស់។ <ph name="LINK_BEGIN" />ស្វែងយល់បន្ថែម<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">ការណែនាំ​ព័ត៌មានផ្ទាល់ខ្លួន</translation>
 <translation id="6305607932814307878">គោលការណ៍​សកល៖</translation>
 <translation id="6307990684951724544">ប្រព័ន្ធជាប់រវល់</translation>
 <translation id="6308493641021088955">ការចូល​គណនី​ដែលផ្ដល់ដោយ <ph name="EXTENSION_NAME" /></translation>
@@ -4016,6 +4021,7 @@
 <translation id="641081527798843608">ប្រធានបទ​ត្រូវគ្នា</translation>
 <translation id="6412673304250309937">ពិនិត្យ URL ធៀបនឹងបញ្ជីគេហទំព័រគ្មានសុវត្ថិភាព ដែលរក្សាទុកនៅក្នុង Chrome។ ប្រសិនបើគេហទំព័រណាមួយ​ព្យាយាមលួចពាក្យសម្ងាត់របស់អ្នក ឬនៅពេលអ្នកទាញយក​ឯកសារដែលអាចបង្កគ្រោះថ្នាក់នោះ Chrome ក៏ប្រហែលជាបញ្ជូន URL រួមជាមួយផ្នែកនៃខ្លឹមសារទំព័រ ទៅការរុករកដោយសុវត្ថិភាពផងដែរ។</translation>
 <translation id="6412931879992742813">ផ្ទាំងអនាមិកថ្មី</translation>
+<translation id="6413591858632097328">សកម្មភាពនេះនឹង​សម្អាត​ទិន្នន័យ និងខូគីទាំងអស់​ដែល <ph name="ORIGIN_NAME" /> បានរក្សាទុក និងកម្មវិធីដែលវាបានដំឡើង។</translation>
 <translation id="641469293210305670">ដំឡើង​កំណែថ្មី និងកម្មវិធី</translation>
 <translation id="6414888972213066896">អ្នកបានសាកសួរមាតាបិតារបស់អ្នក ថាអ្នកអាចចូលទៅទំព័រនេះបានដែរទេ</translation>
 <translation id="6415900369006735853">ភ្ជាប់​​អ៊ីនធឺណិតតាមរយៈទូរសព្ទរបស់អ្នក</translation>
@@ -4826,7 +4832,6 @@
 <translation id="7530016656428373557">កម្រិតទាញយកថាមពលជាវ៉ាត់</translation>
 <translation id="7531779363494549572">ចូល​ទៅ​កាន់​ការកំណត់ &gt; កម្មវិធី និង​ការ​ជូន​ដំណឹង &gt; ការ​ជូន​ដំណឹង។</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> មិន​ដំណើរការ​ទេ។ សូមជ្រើសរើស "បង្ខំឱ្យបិទ" ដើម្បីបិទ​កម្មវិធី។</translation>
-<translation id="7536333565791380193">សុវត្ថិភាព​កម្រិតខ្ពស់</translation>
 <translation id="7537451260744431038">គេហទំព័រ​មិនអាច​ប្រើ​ខូគី ដើម្បី​កែលម្អ​បទពិសោធន៍​រុករក​របស់អ្នក ឧទាហរណ៍ ដើម្បីឱ្យអ្នក​បន្តចូលគណនី ឬ​ចងចាំ​ទំនិញ​នៅក្នុង​រទេះ​ទិញទំនិញ​របស់អ្នក​បានទេ</translation>
 <translation id="7539856059004947393">សោសុវត្ថិភាព​ប៊្លូធូស</translation>
 <translation id="7540972813190816353">កំហុសឆ្គងបានកើតឡើង ខណៈកំពុងពិនិត្យរកការធ្វើបច្ចុប្បន្នភាព៖ <ph name="ERROR" /></translation>
@@ -5067,7 +5072,6 @@
     <ph name="BEGIN_BOLD" />ចំណាំ៖<ph name="END_BOLD" />  ប្រព័ន្ធ​នឹង​ចាប់ផ្ដើម​ឡើងវិញ​អំឡុង​ពេលការដំណើរការ។</translation>
 <translation id="7828731929332799387">សកម្មភាព​នេះនឹងលុបខូគីទាំងអស់ និងទិន្នន័យគេហទំព័រ​ដែលមាននៅក្នុងបរិបទភាគីទីបី។ តើ​អ្នក​ចង់​បន្ត​ដែរទេ?</translation>
 <translation id="7829298379596169484">ការចូលប្រើការបញ្ចូលសម្លេង</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> មិន​អាចពិនិត្យ​ពាក្យសម្ងាត់របស់អ្នកបានទេ។ សូមសាកល្បងពិនិត្យ​ការតភ្ជាប់អ៊ីនធឺណិត​របស់អ្នក។</translation>
 <translation id="7829877209233347340">ស្នើសុំ​ឱ្យមាតាបិតា​ចូលគណនី ដើម្បីផ្ដល់ការអនុញ្ញាតឱ្យបញ្ចូល​គណនី​សាលារៀន</translation>
 <translation id="7830594666202422257">ភ្ជាប់ Linux</translation>
 <translation id="7831491651892296503">មានបញ្ហាក្នុងការកំណត់រចនាសម្ព័ន្ធបណ្តាញ</translation>
@@ -5941,7 +5945,6 @@
 <translation id="8966870118594285808">បើកផ្ទាំងនេះ​ឡើងវិញ ប្រសិនបើ​អ្នកបានបិទវា​ដោយអចេតនា</translation>
 <translation id="8967866634928501045">ចុច Alt Shift A ដើម្បី​បង្ហាញ</translation>
 <translation id="8968766641738584599">រក្សាទុក​បណ្ណ</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> មិន​អាចពិនិត្យ​ពាក្យសម្ងាត់របស់អ្នកបានទេ។ សូមព្យាយាមម្ដងទៀតក្រោយរយៈពេល 24 ម៉ោង ឬ<ph name="BEGIN_LINK" />ពិនិត្យពាក្យសម្ងាត់នៅក្នុងគណនី Google របស់អ្នក<ph name="END_LINK" />។</translation>
 <translation id="89720367119469899">គេច</translation>
 <translation id="8972513834460200407">សូមពិនិត្យជាមួយអ្នកគ្រប់គ្រងបណ្តាញរបស់អ្នកដើម្បីប្រាកដថា ហ្វាយអ័រវលមិនកំពុងត្រូវបានរារាំងពីម៉ាស៊ីនមេ Google ទេ។</translation>
 <translation id="8973557916016709913">ដក​កម្រិត​ពង្រីក/បង្រួម​ចេញ</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index e605b8e..058a334 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">ಬುಕ್‌ಮಾರ್ಕ್‌ ಹೆಸರು</translation>
 <translation id="1124772482545689468">ಬಳಕೆದಾರ</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (ಸ್ಥಳೀಯ) ನಂತೆ ತೋರುತ್ತಿದೆ</translation>
+<translation id="1126809382673880764">ಅಪಾಯಕಾರಿ ವೆಬ್‌ಸೈಟ್‌ಗಳು, ಡೌನ್‌ಲೋಡ್‌ಗಳು ಮತ್ತು ವಿಸ್ತರಣೆಗಳ ವಿರುದ್ಧ ನಿಮಗೆ ರಕ್ಷಣೆ ನೀಡುವುದಿಲ್ಲ. Gmail ಮತ್ತು Search ನಂತಹ ಲಭ್ಯವಿರುವ ಇತರ Google ಸೇವೆಗಳಲ್ಲಿ, ನೀವು ಈಗಲೂ ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ರಕ್ಷಣೆಯನ್ನು ಪಡೆಯುತ್ತೀರಿ.</translation>
 <translation id="1128109161498068552">MIDI ಸಾಧನಗಳನ್ನು ಪ್ರವೇಶಿಸುವುದಕ್ಕೆ ಸಿಸ್ಟಂ ವಿಶೇಷ ಸಂದೇಶಗಳನ್ನು ಬಳಸಲು ಯಾವುದೇ ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಬೇಡಿ</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">ಹುಡುಕಾಟ ಇಂಜಿನ್ ಅನ್ನು ಎಡಿಟ್ ಮಾಡಿ</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">ತಿಳಿದಿರುವ ನೆಟ್‌ವರ್ಕ್‌ಗಳು</translation>
 <translation id="123578888592755962">ಡಿಸ್ಕ್ ಪೂರ್ಣವಾಗಿದೆ</translation>
 <translation id="1238191093934674082">VPN ತೆರೆಯಿರಿ</translation>
+<translation id="1239439601391236986">ಇನ್‌ಪುಟ್ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿ ಸಲಹೆಗಳನ್ನು ತೋರಿಸಿ</translation>
 <translation id="1239594683407221485">'ಫೈಲ್‌ಗಳು' ಆ್ಯಪ್‌ನಲ್ಲಿ ಸಾಧನದ ವಿಷಯವನ್ನು ಅನ್ವೇಷಿಸಿ.</translation>
 <translation id="124116460088058876">ಹೆಚ್ಚಿನ ಭಾಷೆಗಳು</translation>
 <translation id="1241753985463165747">ಮನವಿ ಸಲ್ಲಿಸಿದಾಗ, ಪ್ರಸ್ತುತ ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿ ನಿಮ್ಮ ಎಲ್ಲ ಡೇಟಾವನ್ನು ಓದಿ, ಬದಲಾಯಿಸಿ</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">ಸೆಲ್ಯುಲರ್ ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ</translation>
 <translation id="1407489512183974736">ಮಧ್ಯಕ್ಕೆ ಕತ್ತರಿಸಲಾಗಿರುವುದು</translation>
 <translation id="1408504635543854729">ಫೈಲ್‌ಗಳ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಸಾಧನದ ವಿಷಯವನ್ನು ಅನ್ವೇಷಿಸಿ. ನಿರ್ವಾಹಕರಿಂದ ವಿಷಯವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ ಮತ್ತು ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
+<translation id="1408980562518920698">ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="1410197035576869800">ಅಪ್ಲಿಕೇಶನ್ ಐಕಾನ್</translation>
 <translation id="1410616244180625362">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಪ್ರವೇಶಿಸಲು <ph name="HOST" /> ಗೆ ಅನುಮತಿಸುವುದನ್ನು ಮುಂದುವರೆಸಿ</translation>
 <translation id="1414648216875402825">ನೀವು ಪ್ರಗತಿ ಹಂತದಲ್ಲಿರುವ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿರುವ <ph name="PRODUCT_NAME" /> ದ ಒಂದು ಅಸ್ಥಿರ ಆವೃತ್ತಿಯನ್ನು ನವೀಕರಿಸುತ್ತಿರುವಿರಿ. ವಿಫಲತೆಗಳು ಮತ್ತು ಅನರೀಕ್ಷಿತ ದೋಷಗಳು ಸಂಭವಿಸುತ್ತವೆ. ದಯವಿಟ್ಟು ಎಚ್ಚರಿಕೆಯಿಂದ ಮುಂದುವರಿಯಿರಿ.</translation>
@@ -435,6 +438,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript ಕನ್ಸೋಲ್</translation>
 <translation id="1587907146729660231">ನಿಮ್ಮ ಬೆರಳಿನಿಂದ ಪವರ್ ಬಟನ್ ಅನ್ನು ಸ್ಪರ್ಶಿಸಿ</translation>
+<translation id="1588200577109872591">ಸ್ಮಾರ್ಟ್ ಇನ್‌ಪುಟ್‌ಗಳು</translation>
 <translation id="1588438908519853928">ಸಾಮಾನ್ಯ</translation>
 <translation id="158849752021629804">ಹೋಮ್ ನೆಟ್‌ವರ್ಕ್ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="1588870296199743671">ಇದರೊಂದಿಗೆ Open Link...</translation>
@@ -670,6 +674,7 @@
 <translation id="1879000426787380528">ಇದರಂತೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" ಪ್ರಮಾಣಪತ್ರವನ್ನು ಅಳಿಸುವುದೆ?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" /> ರಲ್ಲಿ <ph name="NETWORK_INDEX" /> ನೆಟ್‌ವರ್ಕ್, <ph name="NETWORK_NAME" />, ಕನೆಕ್ಟ್</translation>
+<translation id="1884705339276589024">Linux ಡಿಸ್ಕ್ ಅನ್ನು ಮರುಗಾತ್ರಗೊಳಿಸಿ</translation>
 <translation id="1886996562706621347">ಪ್ರೊಟೋಕಾಲ್‌ಗಳಿಗಾಗಿ ಡಿಫಾಲ್ಟ್ ಹ್ಯಾಂಡ್ಲರ್‌‌ಗಳಾಗಲು ಸೈಟ್‌ಗಳನ್ನು ಅನುಮತಿಸಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="1887442540531652736">ಸೈನ್‌ ಇನ್‌ ದೋಷ</translation>
 <translation id="1887597546629269384">ಮತ್ತೊಮ್ಮೆ "ಹೇ Google" ಎಂದು ಹೇಳಿ</translation>
@@ -739,6 +744,7 @@
 <translation id="1979280758666859181">ನೀವು <ph name="PRODUCT_NAME" /> ದ ಹಳೆಯ ಆವೃತ್ತಿಯೊಂದಿಗೆ ಚಾನಲ್‌ಗೆ ಬದಲಾಯಿಸುತ್ತಿರುವಿರಿ. ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ರಸ್ತುತ ಸ್ಥಾಪನೆ ಮಾಡಲಾಗಿರುವ ಆವೃತ್ತಿಗೆ ಹೊಂದಾಣಿಕೆಯಾದಾಗ ಮಾತ್ರ ಚಾನಲ್ ಬದಲಾವಣೆಯನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="197989455406964291">KDC ಯು ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಪ್ರಕಾರವನ್ನು ಬೆಂಬಲಿಸುತ್ತಿಲ್ಲ</translation>
 <translation id="1982354452682152483">ಯಾವುದೇ ವಿವರಣೆಯು ಲಭ್ಯವಿಲ್ಲ.</translation>
+<translation id="1984417487208496350">ಸುರಕ್ಷತೆ ಇಲ್ಲ (ಇದನ್ನು ನಾವು ಶಿಫಾರಸು ಮಾಡುವುದಿಲ್ಲ)</translation>
 <translation id="1987317783729300807">ಖಾತೆಗಳು</translation>
 <translation id="1989112275319619282">ಬ್ರೌಸ್ ಮಾಡಿ</translation>
 <translation id="1990512225220753005">ಈ ಪುಟದಲ್ಲಿ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳನ್ನು ತೋರಿಸಬೇಡಿ</translation>
@@ -808,6 +814,7 @@
 <translation id="2090165459409185032">ನಿಮ್ಮ ಖಾತೆಯ ಮಾಹಿತಿಯನ್ನು ಮರುಪಡೆಯಲು, ಇಲ್ಲಿಗೆ ಹೋಗಿ: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">ಸಿಸ್ಟಂ ಸುರಕ್ಷತಾ ಸೆಟ್ಟಿಂಗ್</translation>
 <translation id="2091887806945687916">ಶಬ್ಧ</translation>
+<translation id="2096478741073211388">ಕೆಲವು ನಿರ್ದಿಷ್ಟ ಪದಗಳನ್ನು ನೀವು ಟೈಪ್ ಮಾಡುವಾಗ, ನಿಮ್ಮ ಹೆಸರು, ವಿಳಾಸ ಅಥವಾ ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಸೂಚಿಸುವ ಮೂಲಕ ವೇಗವಾಗಿ ಬರೆಯಲು ವೈಯಕ್ತಿಕ ಮಾಹಿತಿ ಸಲಹೆಗಳು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತವೆ. ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಬಂಧಿಸಿದ ನಿಮ್ಮದೇ ಆದ ಖಾಸಗಿ, ವೈಯಕ್ತಿಕಗೊಳಿಸಿದ ಸಲಹೆಗಳನ್ನು ನೀವು ಮಾತ್ರ ನೋಡುತ್ತೀರಿ.</translation>
 <translation id="2096715839409389970">ಮೂರನೇ ವ್ಯಕ್ತಿ ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="2097372108957554726">ಹೊಸ ಸಾಧನಗಳನ್ನು ನೋಂದಾಯಿಸಲು ನೀವು Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ</translation>
 <translation id="2099172618127234427">sshd daemon ಅನ್ನು ಹೊಂದಿಸುವಂತಹ Chrome OS ಡೀಬಗ್ ಮಾಡುವಿಕೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನೀವು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತಿರುವಿರಿ ಮತ್ತು USB ಡ್ರೈವ್‌ಗಳಿಂದ ಬೂಟ್ ಮಾಡುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation>
@@ -824,6 +831,7 @@
 <translation id="2114326799768592691">ರೀಲೋಡ್ &amp;ಫ್ರೇಮ್</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> ಅವರಿಂದ ಫೋಟೋ</translation>
 <translation id="2119349053129246860"><ph name="APP" /> ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation>
+<translation id="2119461801241504254">ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಆನ್ ಆಗಿದೆ ಮತ್ತು ಹಾನಿಕಾರಕ ಸೈಟ್‌ಗಳು ಹಾಗೂ ಡೌನ್‌ಲೋಡ್‌ಗಳ ವಿರುದ್ಧ ನಿಮಗೆ ರಕ್ಷಣೆ ನೀಡುತ್ತಿದೆ</translation>
 <translation id="2120297377148151361">ಚಟುವಟಿಕೆ ಮತ್ತು ಸಂವಹನಗಳು</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ}=1{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ, 1 ವಿನಾಯಿತಿಯಿದೆ}one{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ, {COUNT} ವಿನಾಯಿತಿಯಿದೆ}other{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ, {COUNT} ವಿನಾಯಿತಿಯಿದೆ}}</translation>
@@ -1004,7 +1012,6 @@
 <translation id="2342740338116612727">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ</translation>
 <translation id="2343747224442182863">ಈ ಟ್ಯಾಬ್ ಮೇಲೆ ಗಮನಹರಿಸಿ</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> ಗೆ 1 ಪುಟ</translation>
-<translation id="2346953515226895098">SODA ಸೇವೆ</translation>
 <translation id="2347644257713614136">Hangouts ನ ಬಳಕೆ ಮತ್ತು ಶಿಕ್ಷಣಕ್ಕಾಗಿರುವ Cast - ಇವು Google ಗೌಪ್ಯತಾ ಕಾರ್ಯನೀತಿಯ ಅಧಿಕಾರಕ್ಕೆ ಒಳಪಟ್ಟಿವೆ.</translation>
 <translation id="2348176352564285430">ಅಪ್ಲಿಕೇಶನ್: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ಡೇಟಾ ಲೋಡ್ ಮಾಡುವಾಗ ದೋಷ ಉಂಟಾಗಿದೆ</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">ಮರುಹೊಂದಿಸುವಿಕೆಯನ್ನು ಖಚಿತಪಡಿಸಲು, ನಿಮ್ಮ ಭದ್ರತೆ ಕೀಯನ್ನು ಮತ್ತೊಮ್ಮೆ ಸ್ಪರ್ಶಿಸಿ. ಭದ್ರತೆ ಕೀಯಲ್ಲಿ ಸಂಗ್ರಹಣೆ ಮಾಡಿರುವ ಎಲ್ಲಾ ಮಾಹಿತಿಯನ್ನು ಮತ್ತು ಅದರ ಪಿನ್ ಅನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="3518985090088779359">ಸಮ್ಮತಿಸು &amp; ಮುಂದುವರಿಸು</translation>
 <translation id="351952459507671940">ಹೊಸ ಗುಂಪಿಗೆ ಸೇರಿಸಿ</translation>
+<translation id="3521606918211282604">ಡಿಸ್ಕ್ ಗಾತ್ರವನ್ನು ಬದಲಾಯಿಸಿ</translation>
 <translation id="3523642406908660543">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಪ್ರವೇಶಿಸಲು ಸೈಟ್ ಪ್ಲಗ್ಇನ್ ಬಳಸಲು ಬಯಸಿದಾಗ ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="3524965460886318643">ಚಟುವಟಿಕೆಗಳನ್ನು ರಫ್ತು ಮಾಡಿ</translation>
 <translation id="3526034519184079374">ಸೈಟ್‌ನ ಡೇಟಾವನ್ನು ಓದಲು ಅಥವಾ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Smart Lock ಸಕ್ರಿಯಗೊಳಿಸಲು ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ. ಮುಂದಿನ ಬಾರಿ, ನಿಮ್ಮ ಫೋನ್ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡುತ್ತದೆ. ನೀವು ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ Smart Lock ಅನ್ನು ಆಫ್ ಮಾಡಬಹುದು.</translation>
 <translation id="3630132874740063857">ನಿಮ್ಮ ಫೋನ್</translation>
 <translation id="3630995161997703415">ಈ ಸೈಟ್‌ ಅನ್ನು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಬಳಸಲು ನಿಮ್ಮ ಶೆಲ್ಫ್‌ಗೆ ಅದನ್ನು ಸೇರಿಸಿ</translation>
+<translation id="3633309367764744750">ನೀವು ಇನ್ನೂ ಭೇಟಿ ನೀಡದ ಪುಟಗಳನ್ನು ಒಳಗೊಂಡಂತೆ, ಪುಟಗಳಲ್ಲಿರುವ ಮಾಹಿತಿಯನ್ನು ಮೊದಲೇ ಪಡೆದುಕೊಳ್ಳುತ್ತದೆ. ನೀವು ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಿದರೆ, ಪಡೆದುಕೊಂಡ ಮಾಹಿತಿಯು ಕುಕೀಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_COUNT" /> ರಲ್ಲಿ <ph name="NETWORK_INDEX" /> ನೆಟ್‌ವರ್ಕ್, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸಿದ್ದಾರೆ, ವಿವರಗಳು</translation>
 <translation id="3635241501480133979">ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ಭದ್ರತಾ ನೀತಿಗಳನ್ನು ಈ ಡೇಟಾ ಉಲ್ಲಂಘಿಸುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಡ್ರಾಪ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="3635353578505343390">Google ಗೆ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಕಳುಹಿಸಿ</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">ಈ ಭದ್ರತೆ ಕೀನಲ್ಲಿರುವ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ಗಳು</translation>
 <translation id="3973660817924297510">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ (<ph name="TOTAL_PASSWORDS" /> ರಲ್ಲಿ <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">ಕ್ಷೇತ್ರಕ್ಕಾಗಿ ಸರ್ವರ್ ಸಂಪರ್ಕಿಸುವುದು ವಿಫಲವಾಗಿದೆ</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="3976108569178263973">ಯಾವುದೇ ಲಭ್ಯ ಪ್ರಿಂಟರ್‌ಗಳಿಲ್ಲ.</translation>
 <translation id="397703832102027365">ಅಂತಿಮಗೊಳಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="3977886311744775419">ಈ ಪ್ರಕಾರದ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತ ಅಪ್‌ಡೇಟ್‌ಗಳು ಡೌನ್‌ಲೋಡ್ ಆಗುವುದಿಲ್ಲ, ಆದರೆ ಅಪ್‌ಡೇಟ್‌ಗಳಿವೆಯೇ ಎಂದು ನೀವು ಹಸ್ತಚಾಲಿತವಾಗಿ ಪರಿಶೀಲಿಸಬಹುದು.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">ಫ್ಲುಫಿ</translation>
 <translation id="4423376891418188461">ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸು</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ನೀವು ಬದಲಾಯಿಸವುದು ಅಗತ್ಯವಿರುತ್ತದೆ.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. 24 ಗಂಟೆಗಳ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="4429030830601238961">ಈ ಡೇಟಾವು ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ಭದ್ರತಾ ನೀತಿಗಳನ್ನು ಉಲ್ಲಂಘಿಸುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಅಂಟಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="4430019312045809116">ವಾಲ್ಯೂಮ್</translation>
 <translation id="4430369329743628066">ಬುಕ್‌ಮಾರ್ಕ್ ಸೇರಿಸಲಾಗಿದೆ</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">ಯಂತ್ರವು ಆನ್ ಆದ ಸಂದರ್ಭದಲ್ಲಿ ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನೀವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆರಂಭಿಸಲು ಬಯಸುವಿರಾ?</translation>
 <translation id="4441147046941420429">ಮುಂದುವರಿಸಲು, ನಿಮ್ಮ ಸಾಧನದಿಂದ ನಿಮ್ಮ ಸುರಕ್ಷತಾ ಕೀಯನ್ನು ತೆಗೆಯಿರಿ, ನಂತರ ಅದನ್ನು ಪುನಃ ಸೇರಿಸಿ ಮತ್ತು ಸ್ಪರ್ಶಿಸಿ.</translation>
 <translation id="444134486829715816">ವಿಸ್ತರಿಸಿ...</translation>
-<translation id="4442329324652245220">ನೀವು Google ಖಾತೆಯ ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, <ph name="IDS_SHORT_PRODUCT_NAME" /> ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಬಹುದು</translation>
 <translation id="4442424173763614572">DNS ಲುಕಪ್ ವಿಫಲವಾಗಿದೆ</translation>
 <translation id="4443536555189480885">&amp;ಸಹಾಯ</translation>
 <translation id="4444304522807523469">USB ಅಥವಾ ಸ್ಥಳೀಯ ನೆಟ್‌ವರ್ಕ್ ಮೂಲಕ ಲಗತ್ತಿಸಲಾದ ಡಾಕ್ಯುಮೆಂಟ್ ಸ್ಕ್ಯಾನರ್‌ಗಳನ್ನು ಪ್ರವೇಶಿಸಿ</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">ಈ ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಲು, ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಅಥವಾ ಕೆಲವು ಕ್ಯಾಮರಾ ಆ್ಯಪ್‌ಗಳಲ್ಲಿ QR ಸ್ಕ್ಯಾನರ್ ಆ್ಯಪ್ ಅನ್ನು ನೀವು ಬಳಸಬಹುದು.</translation>
 <translation id="4477015793815781985">Ctrl, Alt, ಅಥವಾ ⌘ ಸೇರಿಸಿ</translation>
 <translation id="4478664379124702289">ಇದರಂತೆ ಲಿಂ&amp;ಕ್ ಅನ್ನು ಉಳಿಸಿ...</translation>
-<translation id="4478777936860197922">ಯಾವುದೇ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಉಳಿಸಿಲ್ಲ. ನೀವು ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಉಳಿಸಿದಾಗ, <ph name="IDS_SHORT_PRODUCT_NAME" /> ಅವುಗಳನ್ನು ಪರಿಶೀಲಿಸಬಹುದು.</translation>
 <translation id="4479424953165245642">ಕಿಯೋಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="4479639480957787382">ಈಥರ್ನೆಟ್</translation>
 <translation id="4479877282574735775">ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗುತ್ತಿದೆ. ಇದು ಕೆಲವು ನಿಮಿಷಗಳ ಕಾಲಾವಕಾಶವನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು.</translation>
@@ -2864,7 +2869,6 @@
 <translation id="4849517651082200438">ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಬೇಡಿ</translation>
 <translation id="4850669014075537160">ಸ್ಕ್ರಾಲಿಂಗ್</translation>
 <translation id="4850886885716139402">ವೀಕ್ಷಣೆ</translation>
-<translation id="485197095346966382">ಅಪಾಯಕ್ಕೀಡಾದ ಪಾಸ್‌ವರ್ಡ್ ಮೂಲಕ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, <ph name="IDS_SHORT_PRODUCT_NAME" /> ನಿಮಗೆ ಸೂಚನೆ ನೀಡುತ್ತದೆ</translation>
 <translation id="4853020600495124913">&amp;ಹೊಸ ವಿಂಡೋನಲ್ಲಿ ತೆರೆಯಿರಿ</translation>
 <translation id="4854317507773910281">ಅನುಮೋದನೆ ಪಡೆಯಲು, ಪೋಷಕರ ಖಾತೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</translation>
 <translation id="485480310608090163">ಇನ್ನಷ್ಟು ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಹಾಗೂ ಅನುಮತಿಗಳು</translation>
@@ -3939,6 +3943,7 @@
 <translation id="6298962879096096191">Android ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು Google Play ಬಳಸಿ</translation>
 <translation id="630065524203833229">ನಿರ್ಗ&amp;ಮನ</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಸುಧಾರಿತ ಪ್ರಿಂಟರ್ ವಿವರಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">ವೈಯಕ್ತಿಕ ಮಾಹಿತಿ ಸಲಹೆಗಳು</translation>
 <translation id="6305607932814307878">ಜಾಗತಿಕ ನೀತಿ:</translation>
 <translation id="6307990684951724544">ಸಿಸ್ಟಂ ಕಾರ್ಯನಿರತವಾಗಿದೆ</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" />, ಸೈನ್ ಇನ್ ಅನ್ನು ಒದಗಿಸಿದೆ</translation>
@@ -4017,6 +4022,7 @@
 <translation id="641081527798843608">ವಿಷಯದ ಹೊಂದಾಣಿಕೆ</translation>
 <translation id="6412673304250309937">Chrome ನಲ್ಲಿ ಸಂಗ್ರಹಣೆ ಮಾಡಲಾಗಿರುವ ಅಸುರಕ್ಷಿತ ಸೈಟ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಬಳಸಿ, URL ಗಳನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ. ಯಾವುದಾದರೂ ಸೈಟ್, ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಕದಿಯಲು ಪ್ರಯತ್ನಿಸಿದರೆ ಅಥವಾ ನೀವು ಹಾನಿಕಾರಕ ಫೈಲ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದಾಗ, ಪುಟದ ಕಂಟೆಂಟ್‌ನ ತುಣುಕುಗಳನ್ನು ಒಳಗೊಂಡ URL ಗಳನ್ನು ಸಹ Chrome, ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್‌ಗೆ ಕಳುಹಿಸಬಹುದು.</translation>
 <translation id="6412931879992742813">ಹೊಸ &amp;ಅಜ್ಞಾತ ವಿಂಡೋ</translation>
+<translation id="6413591858632097328">ಇದು <ph name="ORIGIN_NAME" /> ಮತ್ತು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾದ ಅದರ ಆ್ಯಪ್‌ಗಳ ಮೂಲಕ ಸಂಗ್ರಹಿಸಲಾದ ಎಲ್ಲಾ ಡೇಟಾ ಮತ್ತು ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ.</translation>
 <translation id="641469293210305670">ಅಪ್‌ಡೇಟ್‌ಗಳು ಮತ್ತು ಆ್ಯಪ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ</translation>
 <translation id="6414888972213066896">ಈ ಸೈಟ್‌ಗೆ ಭೇಟಿ ನೀಡುವುದು ಸರಿಯೇ ಎಂದು ನೀವು ನಿಮ್ಮ ಪೋಷಕರನ್ನು ಕೇಳಿರುವಿರಿ</translation>
 <translation id="6415900369006735853">ನಿಮ್ಮ ಫೋನ್‌ನ ಮೂಲಕ ಇಂಟರ್ನೆಟ್‌ಗೆ ಸಂಪರ್ಕಗೊಳಿಸಿ</translation>
@@ -4828,7 +4834,6 @@
 <translation id="7530016656428373557">ವ್ಯಾಟ್‌ಗಳಲ್ಲಿ ಡಿಸ್‌ಚಾರ್ಜ್ ದರ</translation>
 <translation id="7531779363494549572">ಸೆಟ್ಟಿಂಗ್‌ಗಳು &gt; ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳು &gt; ಅಧಿಸೂಚನೆಗಳಿಗೆ ಹೋಗಿ.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತಿಲ್ಲ. ಆ್ಯಪ್ ಅನ್ನು ಮುಚ್ಚಲು "ಬಲವಂತವಾಗಿ ಮುಚ್ಚಿ" ಆಯ್ಕೆಮಾಡಿ.</translation>
-<translation id="7536333565791380193">ಸುಧಾರಿತ ಭದ್ರತೆ</translation>
 <translation id="7537451260744431038">ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಅನುಭವವನ್ನು ಸುಧಾರಿಸಲು, ಉದಾಹರಣೆಗೆ, ನಿಮ್ಮನ್ನು ಸೈನ್ ಇನ್ ಆಗಿರಿಸಲು ಅಥವಾ ನಿಮ್ಮ ಶಾಪಿಂಗ್ ಕಾರ್ಟ್‌ನಲ್ಲಿರುವ ಐಟಂಗಳನ್ನು ನೆನಪಿಟ್ಟುಕೊಳ್ಳಲು ಕುಕೀಗಳನ್ನು ಬಳಸಲು, ಸೈಟ್‌ಗಳಿಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ</translation>
 <translation id="7539856059004947393">ಬ್ಲೂಟೂತ್ ಸುರಕ್ಷತಾ ಕೀ</translation>
 <translation id="7540972813190816353">ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸುತ್ತಿರುವಾಗ ದೋಷವೊಂದು ಸಂಭವಿಸಿದೆ: <ph name="ERROR" /></translation>
@@ -5068,7 +5073,6 @@
     <ph name="BEGIN_BOLD" />ಗಮನಿಸಿ:<ph name="END_BOLD" /> ಪ್ರಕ್ರಿಯೆಯು ನಡೆಯುವಾಗ ಸಿಸ್ಟಂ ರೀಬೂಟ್ ಆಗುತ್ತದೆ.</translation>
 <translation id="7828731929332799387">ಇದು ಮೂರನೇ-ವ್ಯಕ್ತಿ ಸಂದರ್ಭಗಳಲ್ಲಿ ಲಭ್ಯವಿರುವ ಎಲ್ಲಾ ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ. ನೀವು ಮುಂದುವರಿಯಲು ಬಯಸುತ್ತೀರಾ?</translation>
 <translation id="7829298379596169484">ಆಡಿಯೊ ಇನ್‌ಪುಟ್ ಪ್ರವೇಶಿಸಲಾಗುತ್ತಿದೆ</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಕನೆಕ್ಷನ್ ಪರಿಶೀಲಿಸಿ ನೋಡಿ.</translation>
 <translation id="7829877209233347340">ಶಾಲಾ ಖಾತೆಯನ್ನು ಸೇರಿಸುವುದಕ್ಕೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಅನುಮತಿ ನೀಡುವುದಕ್ಕೆ ಪೋಷಕರಿಗೆ ಹೇಳಿ</translation>
 <translation id="7830594666202422257">Linux ಗೆ ಸಂಪರ್ಕಿಸಿ</translation>
 <translation id="7831491651892296503">ನೆಟ್‌ವರ್ಕ್‌ ಕಾನ್ಫಿಗರ್‌ ಮಾಡುವಲ್ಲಿ ದೋಷ</translation>
@@ -5940,7 +5944,6 @@
 <translation id="8966870118594285808">ನೀವು ಆಕಸ್ಮಿಕವಾಗಿ ಒಂದು ಟ್ಯಾಬ್ ಅನ್ನು ಮುಚ್ಚಿದ್ದರೆ ಅದನ್ನು ಪುನಃ ತೆರೆಯಿರಿ</translation>
 <translation id="8967866634928501045">ತೋರಿಸಲು Alt Shift A ಒತ್ತಿರಿ</translation>
 <translation id="8968766641738584599">ಕಾರ್ಡ್‌ ಉಳಿಸಿ</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. 24 ಗಂಟೆಗಳ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ <ph name="BEGIN_LINK" />ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿರುವ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">ಎಸ್ಕೇಪ್</translation>
 <translation id="8972513834460200407">Google ಸರ್ವರ್‌ಗಳಿಂದ ಮಾಡಲಾಗುವ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ಫೈರ್‌‌ವಾಲ್‌ ನಿರ್ಬಂಧಿಸುತ್ತಿಲ್ಲ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ದಯವಿಟ್ಟು ನೀವು ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ನಿರ್ವಾಹಕರೊಂದಿಗೆ ಚರ್ಚಿಸಿ.</translation>
 <translation id="8973557916016709913">ಝೂಮ್‌ ಮಟ್ಟವನ್ನು ತೆಗೆದುಹಾಕಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 5a18a44..d382c45a 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -67,7 +67,7 @@
 <translation id="1076818208934827215">Microsoft Internet Explorer</translation>
 <translation id="1079766198702302550">카메라 액세스 항상 차단</translation>
 <translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" />에서 Chrome 설정을 기본값으로 복원하려 합니다. 홈페이지, 새 탭 페이지, 검색엔진이 초기화되고, 확장 프로그램이 사용 중지되며, 모든 탭이 고정 해제됩니다. 쿠키, 콘텐츠 데이터, 사이트 데이터 등 기타 임시 데이터와 캐시된 데이터도 삭제됩니다.</translation>
-<translation id="1084096383128641877">비밀번호를 삭제해도 <ph name="DOMAIN" /> 계정이 삭제되지 않습니다. 비밀번호를 변경하거나 <ph name="DOMAIN_LINK" /> 계정을 삭제하여 안전하게 보호하세요.</translation>
+<translation id="1084096383128641877">비밀번호를 삭제해도 <ph name="DOMAIN" /> 계정은 삭제되지 않습니다. 비밀번호를 변경하거나 <ph name="DOMAIN_LINK" /> 계정을 삭제하여 보안을 유지하세요.</translation>
 <translation id="1084824384139382525">링크 주소 복사(&amp;E)</translation>
 <translation id="1085697365578766383">가상 머신을 시작하는 동안 문제가 발생했습니다. 다시 시도해 주세요.</translation>
 <translation id="1090126737595388931">실행 중인 백그라운드 앱 없음</translation>
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">북마크 이름</translation>
 <translation id="1124772482545689468">사용자</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" />x<ph name="HEIGHT" />(기본)처럼 보입니다.</translation>
+<translation id="1126809382673880764">위험한 웹사이트, 다운로드 항목, 확장 프로그램으로부터 사용자를 보호하지 않습니다. Gmail, Google 검색과 같은 다른 Google 서비스에서는 가능한 경우 세이프 브라우징 보호가 계속 제공됩니다.</translation>
 <translation id="1128109161498068552">사이트에서 시스템 전용 메시지를 사용하여 MIDI 기기에 액세스하도록 허용하지 않음</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">검색엔진 수정</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">알려진 네트워크</translation>
 <translation id="123578888592755962">디스크가 가득 참</translation>
 <translation id="1238191093934674082">공개 VPN</translation>
+<translation id="1239439601391236986">입력 중 개인정보 기반 추천 표시</translation>
 <translation id="1239594683407221485">파일 앱에서 기기의 콘텐츠를 탐색하세요.</translation>
 <translation id="124116460088058876">다른 언어</translation>
 <translation id="1241753985463165747">호출할 경우 현재 웹사이트에 있는 모든 데이터를 읽고 변경합니다.</translation>
@@ -201,7 +203,7 @@
 <translation id="1259152067760398571">안전 확인이 어제 실행됨</translation>
 <translation id="1260451001046713751"><ph name="HOST" />에서 팝업 및 리디렉션을 항상 허용</translation>
 <translation id="126156426083987769">데모 모드 기기 라이선스에 문제가 발생했습니다.</translation>
-<translation id="1263490604593716556"><ph name="FIRST_PARENT_EMAIL" /> 및 <ph name="SECOND_PARENT_EMAIL" />님이 관리하는 계정입니다. 기기의 기본 계정에서 로그아웃하려면 화면에 표시된 시간을 클릭하세요. 이때 표시되는 메뉴에서 '로그아웃'을 클릭합니다.</translation>
+<translation id="1263490604593716556"><ph name="FIRST_PARENT_EMAIL" />님과 <ph name="SECOND_PARENT_EMAIL" />님이 관리하는 계정입니다. 기기의 기본 계정에서 로그아웃하려면 화면에 표시된 시간을 클릭하세요. 이때 표시되는 메뉴에서 '로그아웃'을 클릭합니다.</translation>
 <translation id="126710816202626562">번역 언어:</translation>
 <translation id="126768002343224824">16배</translation>
 <translation id="1272079795634619415">중지</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">모바일 활성화</translation>
 <translation id="1407489512183974736">가운데 부분 자르기</translation>
 <translation id="1408504635543854729">파일 앱에서 기기의 콘텐츠를 탐색합니다. 콘텐츠는 관리자에 의해 제한되며 수정할 수 없습니다.</translation>
+<translation id="1408980562518920698">개인정보 관리</translation>
 <translation id="1410197035576869800">앱 아이콘</translation>
 <translation id="1410616244180625362"><ph name="HOST" />에서 카메라에 액세스하도록 계속 허용</translation>
 <translation id="1414648216875402825">개발 중인 기능을 포함하는 <ph name="PRODUCT_NAME" />의 불안정한 버전으로 업데이트합니다. 기기가 비정상 종료되거나 예기치 않은 버그가 발생할 수 있습니다. 주의해서 진행하시기 바랍니다.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">자바스크립트 콘솔(&amp;J)</translation>
 <translation id="1587907146729660231">전원 버튼을 손가락으로 터치하세요.</translation>
+<translation id="1588200577109872591">스마트 입력</translation>
 <translation id="1588438908519853928">일반</translation>
 <translation id="158849752021629804">홈 네크워크가 필요합니다.</translation>
 <translation id="1588870296199743671">다음으로 링크 열기...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">다음 사용자로 로그인</translation>
 <translation id="1880905663253319515">인증서 '<ph name="CERTIFICATE_NAME" />'을(를) 삭제하시겠습니까?</translation>
 <translation id="1884013283844450420">네트워크 <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, 연결</translation>
+<translation id="1884705339276589024">Linux 디스크 크기 조정</translation>
 <translation id="1886996562706621347">사이트에서 프로토콜 기본 핸들러로 사용할지 여부를 묻도록 허용(권장)</translation>
 <translation id="1887442540531652736">로그인 오류</translation>
 <translation id="1887597546629269384">"Hey Google"이라고 다시 말하세요.</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181"><ph name="PRODUCT_NAME" />의 이전 버전으로 채널을 변경하려 합니다. 채널 버전이 현재 기기에 설치되어 있는 버전과 일치할 때 채널 변경이 적용됩니다.</translation>
 <translation id="197989455406964291">KDC가 암호화 유형을 지원하지 않습니다.</translation>
 <translation id="1982354452682152483">설명이 없습니다.</translation>
+<translation id="1984417487208496350">보호되지 않음(권장되지 않음)</translation>
 <translation id="1987317783729300807">계정</translation>
 <translation id="1989112275319619282">찾아보기</translation>
 <translation id="1990512225220753005">이 페이지에 바로가기를 표시하지 않습니다.</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">계정 정보를 복구하려면 google.com/accounts/recovery 페이지로 이동하세요.</translation>
 <translation id="2090876986345970080">시스템 보안 설정</translation>
 <translation id="2091887806945687916">소리</translation>
+<translation id="2096478741073211388">개인정보를 기반으로 한 추천 기능은 특정 단어를 입력할 때 이름, 주소 또는 전화번호를 추천하여 사용자가 더 빠르게 작성할 수 있도록 도와줍니다. 이러한 추천 항목은 내 계정을 기반으로 맞춤설정되며 나만 볼 수 있습니다.</translation>
 <translation id="2096715839409389970">타사 쿠키 삭제</translation>
 <translation id="2097372108957554726">새 기기를 등록하려면 Chrome에 로그인하세요.</translation>
 <translation id="2099172618127234427">sshd 데몬을 설정하고 USB 드라이브에서 부팅하도록 사용 설정하는 Chrome OS 디버깅 기능을 사용 설정 중입니다.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">프레임 새로고침(&amp;F)</translation>
 <translation id="2114896190328250491">사진 제공: <ph name="NAME" /></translation>
 <translation id="2119349053129246860"><ph name="APP" />에서 열기</translation>
+<translation id="2119461801241504254">세이프 브라우징이 사용 중이며 유해한 사이트와 다운로드를 차단하고 있습니다.</translation>
 <translation id="2120297377148151361">활동 및 상호작용</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> 권한이 차단됨</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{쿠키가 차단됨}=1{쿠키가 차단됨, 예외 1개}other{쿠키가 차단됨, 예외 {COUNT}개}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">북마크 추가됨</translation>
 <translation id="2343747224442182863">이 탭에 포커스</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" />에서 1페이지 인쇄</translation>
-<translation id="2346953515226895098">SODA 서비스</translation>
 <translation id="2347644257713614136">행아웃 및 교육용 Cast 사용에는 Google 개인정보처리방침이 적용됩니다.</translation>
 <translation id="2348176352564285430">앱: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">데이터를 로드하는 중에 오류가 발생했습니다.</translation>
@@ -1477,7 +1484,7 @@
 <translation id="2948300991547862301"><ph name="PAGE_TITLE" />(으)로 이동</translation>
 <translation id="29488703364906173">최신 웹에 맞게 구축된 빠르고 단순하며 안전한 웹 브라우저입니다.</translation>
 <translation id="2949289451367477459">위치를 사용합니다. 위치 정보 액세스 권한이 있는 앱 및 서비스가 이 기기의 위치를 사용하도록 허용합니다. Google에서는 위치 정확도와 위치 기반 서비스를 개선하기 위해 위치 데이터를 주기적으로 수집하여 익명으로 사용할 수 있습니다. <ph name="BEGIN_LINK1" />자세히 알아보기<ph name="END_LINK1" /></translation>
-<translation id="2950666755714083615">가입</translation>
+<translation id="2950666755714083615">신청</translation>
 <translation id="2956070239128776395">그룹에 섹션이 중첩됨: <ph name="ERROR_LINE" /></translation>
 <translation id="2957117904572187936">사이트에서 기기의 파일 또는 폴더를 수정하는 것을 허용하지 않음</translation>
 <translation id="2958721676848865875">확장 프로그램 패키지 경고</translation>
@@ -1851,7 +1858,7 @@
 <translation id="3468999815377931311">Android 휴대전화</translation>
 <translation id="3470442499439619530">이 사용자 삭제</translation>
 <translation id="3471876058939596279">HDMI 및 USB 타입-C 포트를 동시에 비디오용으로 사용할 수 없습니다. 다른 비디오 포트를 사용하세요.</translation>
-<translation id="3473241910002674503">태블릿 모드에서 버튼을 사용하여 홈으로 이동하고 뒤로 가거나 앱 간에 전환합니다.</translation>
+<translation id="3473241910002674503">태블릿 모드에서 버튼을 사용하여 홈이나 뒤로 이동하고 앱 간에 전환합니다.</translation>
 <translation id="3473479545200714844">화면 돋보기</translation>
 <translation id="3475843873335999118">죄송합니다. 지문이 인식되지 않았습니다. 비밀번호를 입력하세요.</translation>
 <translation id="3476303763173086583">사용 및 진단 데이터를 보냅니다. 진단, 기기, 앱 사용 데이터를 Google에 자동으로 보내 자녀의 Android 사용 환경 개선에 참여합니다. 이 데이터는 자녀를 식별하는 용도로 사용되지 않으며, 시스템 및 앱 안정성 등을 개선하는 데 활용됩니다. 일부 수집 데이터는 Google 앱과 파트너(Android 개발자 등)에게도 도움을 줍니다. 이 <ph name="BEGIN_LINK1" />설정<ph name="END_LINK1" />은 소유자가 지정합니다. 소유자가 이 기기의 진단 및 사용 데이터를 Google에 전송할지 선택할 수 있습니다. 자녀의 추가 웹 및 앱 활동이 사용 설정되어 있다면 이 데이터가 자녀의 Google 계정에 저장될 수 있습니다. <ph name="BEGIN_LINK2" />자세히 알아보기<ph name="END_LINK2" /></translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">보안 키를 다시 터치하여 초기화 여부를 확인하세요. PIN을 비롯하여 보안 키에 저장된 모든 정보가 삭제됩니다.</translation>
 <translation id="3518985090088779359">동의하고 계속</translation>
 <translation id="351952459507671940">새 그룹에 추가</translation>
+<translation id="3521606918211282604">디스크 크기 변경</translation>
 <translation id="3523642406908660543">사이트에서 플러그인을 사용하여 내 컴퓨터에 액세스하려고 할 때 확인(권장)</translation>
 <translation id="3524965460886318643">활동 내보내기</translation>
 <translation id="3526034519184079374">사이트 데이터를 읽거나 변경할 수 없음</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">비밀번호를 입력하여 Smart Lock을 사용 설정하세요. 다음번에는 휴대전화를 통해 <ph name="DEVICE_TYPE" />이(가) 잠금 해제됩니다. 설정에서 Smart Lock을 사용 중지할 수 있습니다.</translation>
 <translation id="3630132874740063857">휴대전화</translation>
 <translation id="3630995161997703415">이 사이트를 언제든지 사용할 수 있도록 실행기에 추가합니다</translation>
+<translation id="3633309367764744750">아직 방문하지 않은 페이지를 포함하여 페이지에서 정보를 미리 가져옵니다. 쿠키를 허용한 경우 가져온 정보에 쿠키가 포함될 수 있습니다.</translation>
 <translation id="3634507049637220048">네트워크 <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, 관리자가 관리함, 세부정보</translation>
 <translation id="3635241501480133979">이 데이터는 조직의 보안 정책을 위반하므로 드래그 앤 드롭할 수 없습니다.</translation>
 <translation id="3635353578505343390">Google에 의견 보내기</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">보안 키의 지문</translation>
 <translation id="3973660817924297510">비밀번호 확인 중(<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">영역 서버에 연락을 취하지 못했습니다.</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" />에서 비밀번호를 확인할 수 없습니다. 나중에 다시 시도해 보세요.</translation>
 <translation id="3976108569178263973">사용 가능한 프린터가 없습니다.</translation>
 <translation id="397703832102027365">완료 중...</translation>
 <translation id="3977886311744775419">이러한 네트워크 유형에서는 자동 업데이트가 다운로드되지 않지만 수동으로 업데이트를 확인할 수 있습니다.</translation>
@@ -2575,7 +2583,6 @@
 <translation id="4421932782753506458">복실이</translation>
 <translation id="4423376891418188461">설정 복원</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />님, 관리자가 비밀번호 변경을 요청했습니다.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" />에서 비밀번호를 확인할 수 없습니다. 24시간 후 다시 시도해 보세요.</translation>
 <translation id="4429030830601238961">이 데이터는 조직의 보안 정책을 위반하므로 붙여넣을 수 없습니다.</translation>
 <translation id="4430019312045809116">볼륨</translation>
 <translation id="4430369329743628066">북마크 추가됨</translation>
@@ -2588,7 +2595,6 @@
 <translation id="4441124369922430666">컴퓨터를 켤 때 이 앱을 자동으로 시작하시겠습니까?</translation>
 <translation id="4441147046941420429">계속하려면 기기에서 보안 키를 제거한 후 다시 삽입하고 터치하세요.</translation>
 <translation id="444134486829715816">펼치기...</translation>
-<translation id="4442329324652245220">Google 계정으로 로그인하면 <ph name="IDS_SHORT_PRODUCT_NAME" />에서 비밀번호를 확인할 수 있습니다.</translation>
 <translation id="4442424173763614572">DNS 조회 실패</translation>
 <translation id="4443536555189480885">도움말(&amp;H)</translation>
 <translation id="4444304522807523469">USB나 로컬 네트워크에 포함된 문서 스캐너에 액세스</translation>
@@ -2615,7 +2621,6 @@
 <translation id="4476659815936224889">스마트폰의 QR 스캐너 앱 또는 일부 카메라 앱을 사용하여 이 코드를 스캔할 수 있습니다.</translation>
 <translation id="4477015793815781985">Ctrl, Alt 또는 ⌘ 키를 포함하세요</translation>
 <translation id="4478664379124702289">다른 이름으로 링크 저장(&amp;K)...</translation>
-<translation id="4478777936860197922">저장된 비밀번호가 없습니다. 비밀번호를 저장하면 <ph name="IDS_SHORT_PRODUCT_NAME" />에서 확인할 수 있습니다.</translation>
 <translation id="4479424953165245642">키오스크 애플리케이션 관리</translation>
 <translation id="4479639480957787382">이더넷</translation>
 <translation id="4479877282574735775">가상 머신을 구성하고 있습니다. 몇 분 정도 소요될 수 있습니다.</translation>
@@ -2861,7 +2866,6 @@
 <translation id="4849517651082200438">설치 안함</translation>
 <translation id="4850669014075537160">스크롤</translation>
 <translation id="4850886885716139402">보기</translation>
-<translation id="485197095346966382">유출된 비밀번호로 로그인하면 <ph name="IDS_SHORT_PRODUCT_NAME" />에서 알림을 표시합니다.</translation>
 <translation id="4853020600495124913">새 창에서 열기(&amp;N)</translation>
 <translation id="4854317507773910281">승인을 요청할 부모 계정 선택</translation>
 <translation id="485480310608090163">추가 설정 및 권한</translation>
@@ -3520,7 +3524,7 @@
 <translation id="5739235828260127894">확인을 기다리는 중입니다. <ph name="LINK_BEGIN" />자세히 알아보기<ph name="LINK_END" /></translation>
 <translation id="5739458112391494395">아주 크게</translation>
 <translation id="574209121243317957">높낮이</translation>
-<translation id="5745136023067925867"><ph name="DEVICE_TYPE" />에 관한 도움말. 혜택 및 소식을 받아 보고 의견을 공유하세요.</translation>
+<translation id="5745136023067925867"><ph name="DEVICE_TYPE" />에 관한 도움말, 혜택 및 소식을 받아 보고 의견을 공유하세요.</translation>
 <translation id="5746169159649715125">PDF로 저장</translation>
 <translation id="5747552184818312860">만료</translation>
 <translation id="5747785204778348146">개발자 - 불안정</translation>
@@ -3935,6 +3939,7 @@
 <translation id="6298962879096096191">Google Play를 사용하여 Android 앱을 설치합니다.</translation>
 <translation id="630065524203833229">종료(&amp;X)</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" />을(를) 자동으로 설정할 수 없습니다. 고급 프린터 세부정보를 지정해 주세요. <ph name="LINK_BEGIN" />자세히 알아보기<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">개인정보 추천</translation>
 <translation id="6305607932814307878">전체 정책:</translation>
 <translation id="6307990684951724544">시스템 사용 중</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" />에서 제공한 로그인</translation>
@@ -4013,6 +4018,7 @@
 <translation id="641081527798843608">주제 일치</translation>
 <translation id="6412673304250309937">Chrome에 저장된 안전하지 않은 사이트 목록을 사용하여 URL을 검사합니다. 사이트에서 사용자의 비밀번호를 도용하려고 하거나 사용자가 유해한 파일을 다운로드하는 경우, Chrome에서 페이지 콘텐츠 일부를 비롯한 URL을 세이프 브라우징 서비스에 보낼 수 있습니다.</translation>
 <translation id="6412931879992742813">새 시크릿 창</translation>
+<translation id="6413591858632097328"><ph name="ORIGIN_NAME" />과(와) 이를 통해 설치된 앱에서 저장한 모든 데이터와 쿠키가 삭제됩니다.</translation>
 <translation id="641469293210305670">업데이트 및 앱 설치</translation>
 <translation id="6414888972213066896">이 사이트를 방문해도 괜찮은지 부모님께 문의했습니다.</translation>
 <translation id="6415900369006735853">휴대전화를 통해 인터넷에 연결합니다.</translation>
@@ -4725,7 +4731,7 @@
 <translation id="7400418766976504921">URL</translation>
 <translation id="7400839060291901923"><ph name="PHONE_NAME" />에서 연결 설정</translation>
 <translation id="7401778920660465883">닫기</translation>
-<translation id="7403642243184989645">리소스 다운로드 중</translation>
+<translation id="7403642243184989645">리소스 다운로드</translation>
 <translation id="7405938989981604410">{NUM_HOURS,plural, =1{안전 확인이 1시간 전에 실행됨}other{안전 확인이 {NUM_HOURS}시간 전에 실행됨}}</translation>
 <translation id="740624631517654988">팝업 차단됨</translation>
 <translation id="7407430846095439694">가져오기 및 연결</translation>
@@ -4823,7 +4829,6 @@
 <translation id="7530016656428373557">방전율(와트)</translation>
 <translation id="7531779363494549572">설정 &gt; 앱 및 알림 &gt; 알림으로 이동합니다.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> 앱이 응답하지 않습니다. '강제 종료'를 선택하여 앱을 닫으세요.</translation>
-<translation id="7536333565791380193">고급 보안</translation>
 <translation id="7537451260744431038">사이트에서 사용자의 로그인 상태를 유지하거나 장바구니에 담긴 상품을 기억하는 등 탐색 환경을 개선하기 위해 쿠키를 사용할 수 없습니다.</translation>
 <translation id="7539856059004947393">블루투스 보안 키</translation>
 <translation id="7540972813190816353">업데이트를 확인하는 동안 오류가 발생했습니다. <ph name="ERROR" /></translation>
@@ -5064,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />참고:<ph name="END_BOLD" /> 시스템이 절차 진행 중에 재부팅됩니다.</translation>
 <translation id="7828731929332799387">타사와 관련하여 제공되는 모든 쿠키 및 사이트 데이터가 삭제됩니다. 계속하시겠습니까?</translation>
 <translation id="7829298379596169484">오디오 입력 장치에 액세스 중</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" />에서 비밀번호를 확인할 수 없습니다. 인터넷 연결 상태를 확인하세요.</translation>
 <translation id="7829877209233347340">부모님에게 로그인하여 학교 계정을 추가할 권한을 부여해 달라고 요청하세요.</translation>
 <translation id="7830594666202422257">Linux에 연결</translation>
 <translation id="7831491651892296503">네트워크를 설정하는 중에 오류가 발생했습니다</translation>
@@ -5282,7 +5286,7 @@
 <translation id="8107015733319732394"><ph name="DEVICE_TYPE" />에 Google Play 스토어를 설치합니다. 설치하는 데 몇 분 정도 걸릴 수 있습니다.</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{타사 쿠키 없음}=1{타사 쿠키 1개가 차단됨}other{타사 쿠키 #개가 차단됨}}</translation>
 <translation id="810875025413331850">주변 기기를 찾을 수 없습니다.</translation>
-<translation id="8114199541033039755">태블릿 모드에서 버튼을 사용하여 홈으로 이동하고 뒤로 가거나 앱 간에 전환합니다. ChromeVox 또는 자동 클릭을 사용 중일 때 켜집니다.</translation>
+<translation id="8114199541033039755">태블릿 모드에서 버튼을 사용하여 홈이나 뒤로 이동하고 앱 간에 전환합니다. ChromeVox 또는 자동 클릭을 사용 중일 때 켜집니다.</translation>
 <translation id="8114875720387900039">수평 분할</translation>
 <translation id="8116972784401310538">북마크 관리자(&amp;B)</translation>
 <translation id="8117620576188476503">상태 표시줄에서 연결, 업데이트, 설정을 관리하세요. 키보드를 사용하여 이동하려면 Alt + Shift + S를 누르면 됩니다.</translation>
@@ -5402,7 +5406,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" />에서 마우스 커서를 사용 중지했습니다.</translation>
 <translation id="8264024885325823677">관리자가 관리하는 설정입니다.</translation>
 <translation id="8264718194193514834"><ph name="EXTENSION_NAME" />에서 전체 화면을 실행합니다.</translation>
-<translation id="826511437356419340">창 개요 모드를 시작했습니다. 스와이프하여 이동하거나 키보드를 사용하는 경우 Tab 키를 누르세요.</translation>
+<translation id="826511437356419340">창 개요 모드를 시작했습니다. 이동하려면 스와이프하거나 키보드를 사용하는 경우에는 Tab 키를 누르세요.</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />기기 및 기기 사용 방식(예: 배터리 잔량, 시스템 및 앱 활동, 오류)에 관한 일반 정보입니다. 이 데이터는 Android를 개선하는 데 사용되며, 집계된 일부 정보는 Android 개발자 등의 Google 앱 및 파트너가 앱과 제품을 개선하는 데도 사용됩니다.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />이 기능을 사용 중지해도 기기에서 시스템 업데이트 및 보안과 같은 필수 서비스에 필요한 정보를 전송하는 데는 영향을 미치지 않습니다.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />소유자는 설정 &gt; 고급 &gt; 진단 및 사용 데이터를 Google에 자동 전송에서 이 기능을 제어할 수 있습니다.<ph name="END_PARAGRAPH3" />
@@ -5939,7 +5943,6 @@
 <translation id="8966870118594285808">실수로 탭을 닫은 경우 탭 다시 열기</translation>
 <translation id="8967866634928501045">표시하려면 Alt Shift A를 누르세요</translation>
 <translation id="8968766641738584599">카드 저장</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" />에서 비밀번호를 확인할 수 없습니다. 24시간 후에 다시 시도하거나 <ph name="BEGIN_LINK" />Google 계정에서 비밀번호를 확인<ph name="END_LINK" />하세요.</translation>
 <translation id="89720367119469899">Esc</translation>
 <translation id="8972513834460200407">네트워크 관리자에게 문의하여 방화벽이 Google 서버에서 다운로드를 차단하지 않는지 확인하시기 바랍니다.</translation>
 <translation id="8973557916016709913">확대/축소 레벨 삭제</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index f5e01ce..8b3a1f9d 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Кыстарманын аталышы</translation>
 <translation id="1124772482545689468">Колдонуучу</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> сыяктуу көрүнөт (аппараттык дааналыгы)</translation>
+<translation id="1126809382673880764">Кооптуу вебсайттардан, жүктөлүп алынган файлдардан жана кеңейтүүлөрдөн коргобойт. Gmail жана Издөө сыяктуу Google'дун башка кызматтарында мүмкүн болгондо Коопсуз серептөө иштетилет.</translation>
 <translation id="1128109161498068552">Бир да сайт MIDI түзмөктөрүн пайдалануу мүмкүнчүлүгүн алуу үчүн тутумдун эксклюзивдүү билдирүүлөрүн колдонбосун</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Издөө каражатын түзөтүү</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Белгилүү тармактар</translation>
 <translation id="123578888592755962">Диск толуп калды</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">Жеке маалымат сунуштарын көрсөтүү</translation>
 <translation id="1239594683407221485">Түзмөктүн мазмунун Файлдар колдонмосунан изилдеңиз.</translation>
 <translation id="124116460088058876">Дагы тилдер</translation>
 <translation id="1241753985463165747">Учурдагы вебсайт ачылганда, андагы бардык дайын-даректериңизди окуп, өзгөртүңүз</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Мобилдик тармакты жандыруу</translation>
 <translation id="1407489512183974736">Ортосунан кесүү</translation>
 <translation id="1408504635543854729">Түзмөктүн мазмунун Файлдар колдонмосунан издеңиз. Администратор мазмунду өзгөртүүгө тыюу салган.</translation>
+<translation id="1408980562518920698">Жеке маалыматты башкаруу</translation>
 <translation id="1410197035576869800">Колдонмонун сүрөтчөсү</translation>
 <translation id="1410616244180625362"><ph name="HOST" /> камераны пайдалана берсин</translation>
 <translation id="1414648216875402825"><ph name="PRODUCT_NAME" /> туруксуз версиясын жаңыртып жатасыз, анда иштетилип жаткан мүмкүнчүлүктөр бар. Андыктан кыйлоолор жана күтүүсүз мүчүлүштүктөр келип чыгышы мүмкүн. Этияттык менен улантыңыз.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript консолу</translation>
 <translation id="1587907146729660231">Күйгүзүү/өчүрүү баскычын басыңыз</translation>
+<translation id="1588200577109872591">Акылдуу киргизүүлөр</translation>
 <translation id="1588438908519853928">Кадыресе</translation>
 <translation id="158849752021629804">Үй тармагы талап кылынат</translation>
 <translation id="1588870296199743671">Шилтемени төмөнкү менен ачуу…</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Төмөнкү катары кирүү:</translation>
 <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" тастыктамасы жок кылынсынбы?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" /> ичинен <ph name="NETWORK_INDEX" />-тармак, <ph name="NETWORK_NAME" />, Туташуу</translation>
+<translation id="1884705339276589024">Linux дискинин өлчөмүн өзгөртүү</translation>
 <translation id="1886996562706621347">Сайттарга сурап туруп протоколдордун демейки иштетүүчүсү болууга уруксат берүү (сунушталат)</translation>
 <translation id="1887442540531652736">Аккаунтка кирүү катасы</translation>
 <translation id="1887597546629269384">"Окей Google" деп кайра айтыңыз</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Эскирип калган <ph name="PRODUCT_NAME" /> версиясын камтыган нукка которулуп жатасыз. Нуктун версиясы учурда түзмөгүңүздө орнотулуп турган версияга дал келгенде гана нук которулат.</translation>
 <translation id="197989455406964291">KDC шифрлөө түрүн колдоого албайт</translation>
 <translation id="1982354452682152483">Сүрөттөмөсү жок.</translation>
+<translation id="1984417487208496350">Корголбойт (сунушталбайт)</translation>
 <translation id="1987317783729300807">Аккаунттар</translation>
 <translation id="1989112275319619282">Серептөө</translation>
 <translation id="1990512225220753005">Ыкчам баскычтар бул бетте көрсөтүлбөсүн</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Аккаунтуңуздун маалыматын калыбына келтирүү үчүн, төмөнкүгө өтүңүз: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Тутумдун коопсуздук жөндөөсү</translation>
 <translation id="2091887806945687916">Үн</translation>
+<translation id="2096478741073211388">Жеке маалыматты сунуштоо белгилүү бир сөздү тергенде аты-жөнүңүздү, дарегиңизди же телефонуңуздун номерин сунуштап, тез терүүгө жардам берет. Аккаунтуңуздагы купуя жана жекелештирилген сунуштар сизге гана көрүнөт.</translation>
 <translation id="2096715839409389970">Үчүнчү тараптын cookie файлдары тазалансын</translation>
 <translation id="2097372108957554726">Жаңы түзмөктөрдү каттоо үчүн Chrome'го киришиңиз керек</translation>
 <translation id="2099172618127234427">sshd демонду орнотуп, USB дисктерден жүктөөнү иштете турган Chrome OS мүчүлүштүктөрдү оңдоо өзгөчөлүктөрүн иштетип жатасыз.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Алкакты кайра жүктөө</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> тарткан сүрөт</translation>
 <translation id="2119349053129246860"><ph name="APP" /> колдонмосунда ачуу</translation>
+<translation id="2119461801241504254">Коопсуз серептөө күйүк, ал сизди зыянкеч сайттар менен жүктөп алуулардан коргоп турат</translation>
 <translation id="2120297377148151361">Серепчидеги аракеттер</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> – бөгөттөлгөн</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Cookie файлдары бөгөттөлдү}=1{Cookie файлдары бөгөттөлдү. 1 өзгөчө учур бар}other{Cookie файлдары бөгөттөлдү. {COUNT} өзгөчө учур бар}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Кыстармалар кошулду</translation>
 <translation id="2343747224442182863">Бул өтмөктү фокустоо</translation>
 <translation id="2345723121311404059">1 баракты <ph name="PRINTER_NAME" /> принтерине жөнөтүү</translation>
-<translation id="2346953515226895098">SODA кызматы</translation>
 <translation id="2347644257713614136">Hangouts менен Cast for Education кызматынын колдонулушу Google'дун Купуялык саясаты аркылуу көзөмөлдөнөт.</translation>
 <translation id="2348176352564285430">Колдонмо: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Маалыматты жүктөөдө ката кетти</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">Баштапкы абалга келтирүүнү ырастоо үчүн коопсуздук ачкычына кайра тийип коюңуз. Коопсуздук ачкычында сакталган бардык маалымат, анын ичинде PIN код өчүрүлөт.</translation>
 <translation id="3518985090088779359">Кабыл алып, улантуу</translation>
 <translation id="351952459507671940">Жаңы топко кошуу</translation>
+<translation id="3521606918211282604">Дисктин өлчөмүн өзгөртүү</translation>
 <translation id="3523642406908660543">Сайт компьютерди пайдалануу үчүн плагинди сурап колдонсун (сунушталат)</translation>
 <translation id="3524965460886318643">Экспорттоо аракеттери</translation>
 <translation id="3526034519184079374">Сайттын дайындары окулбай же өзгөрбөй жатат</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Smart Lock'ту күйгүзүү үчүн, сырсөзүңүздү киргизиңиз. Эми <ph name="DEVICE_TYPE" /> түзмөгүнүн кулпусун телефонуңуз менен ача аласыз. Жөндөөлөргө өтүп, Smart Lock'ту өчүрүп коюңуз.</translation>
 <translation id="3630132874740063857">Телефонуңуз</translation>
 <translation id="3630995161997703415">Каалаган убакта колдонуу үчүн бул сайтты текчеңизге кошуңуз</translation>
+<translation id="3633309367764744750">Барактардагы, анын ичинде сиз өтө элек барактардагы маалыматты алдын ала алып коёт. Cookie файлдарына уруксат берсеңиз, алынган маалыматта cookie файлдары камтылышы мүмкүн.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_COUNT" /> ичинен <ph name="NETWORK_INDEX" />-тармак,<ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, Администраторуңуз башкарат, Чоо-жайы</translation>
 <translation id="3635241501480133979">Бул дайын-даректер уюмуңуздун коопсуздук саясаттарын бузгандыктан көчүрүлбөйт.</translation>
 <translation id="3635353578505343390">Google'га пикир билдирүү</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">Бул коопсуздук ачкычы менен катталган манжа издери</translation>
 <translation id="3973660817924297510">Сырсөздөр өзгөртүлүүдө (<ph name="TOTAL_PASSWORDS" /> ичинен <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Чөйрө үчүн серверге туташуу ишке ашкан жок</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> сырсөздөрүңүздү текшере албай жатат. Кийинчерээк кайталаңыз.</translation>
 <translation id="3976108569178263973">Жеткиликтүү принтерлер жок.</translation>
 <translation id="397703832102027365">Жыйынтыкталууда…</translation>
 <translation id="3977886311744775419">Автоматтык жаңыртуулар тармактын бул түрүндө жүктөлүп алынбайт, бирок жаңыртууларды кол менен издесеңиз болот.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">Телчигип жаткан</translation>
 <translation id="4423376891418188461">Жөндөөлөрдү калыбына келтирүү</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, администраторуңуз сырсөздү өзгөртүүнү талап кылууда.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> сырсөздөрүңүздү текшере албай жатат. 24 сааттан кийин кайра аракет кылыңыз.</translation>
 <translation id="4429030830601238961">Бул дайын-даректер уюмуңуздун коопсуздук саясаттарын бузгандыктан чапталбайт.</translation>
 <translation id="4430019312045809116">Үндүн катуулугу</translation>
 <translation id="4430369329743628066">Кыстарма кошулду</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">Шайман иштетилгенде бул колдонмо да автоматтык түрдө иштеп баштасынбы?</translation>
 <translation id="4441147046941420429">Улантуу үчүн коопсуздук ачкычын түзмөгүңүздөн чыгарып, кайра киргизип, ага тийип коюңуз.</translation>
 <translation id="444134486829715816">Жайып көрсөтүү…</translation>
-<translation id="4442329324652245220">Google аккаунтуңуз менен киргенде <ph name="IDS_SHORT_PRODUCT_NAME" /> сырсөздөрүңүздү текшерет.</translation>
 <translation id="4442424173763614572">DNS каралбай калды</translation>
 <translation id="4443536555189480885">&amp;Жардам</translation>
 <translation id="4444304522807523469">USB аркылуу же жергиликтүү тармакта тиркелген документ сканерлерин пайдалануу мүмкүнчүлүгү</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">Бул кодду телефонуңуздагы QR сканери же камера колдонмолорунун бирөө менен скандаңыз.</translation>
 <translation id="4477015793815781985">Ctrl, Alt же ⌘ камтылсын</translation>
 <translation id="4478664379124702289">Шил&amp;темени төмөнкүдөй сактоо…</translation>
-<translation id="4478777936860197922">Сакталган сырсөздөр жок. Сырсөздөрүңүздү сактаганда <ph name="IDS_SHORT_PRODUCT_NAME" /> аларды текшере алат.</translation>
 <translation id="4479424953165245642">Киоск колдонмолорун башкаруу</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Виртуалдык машина конфигурацияланууда. Бул бир нече мүнөткө созулушу мүмкүн.</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">Орнотулбасын</translation>
 <translation id="4850669014075537160">Сыдыруу</translation>
 <translation id="4850886885716139402">Көрүнүш</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> уурдалган сырсөз менен киргениңизде эскертет</translation>
 <translation id="4853020600495124913">&amp;Жаңы терезеде ачуу</translation>
 <translation id="4854317507773910281">Уруксат берүү үчүн ата-эненин аккаунтун тандаңыз</translation>
 <translation id="485480310608090163">Кошумча жөндөөлөр жана сунуштар</translation>
@@ -3937,6 +3941,7 @@
 <translation id="6298962879096096191">Android колдонмолорун орнотуу үчүн Google Play'ди пайдаланыңыз</translation>
 <translation id="630065524203833229">Ч&amp;ыгуу</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> автоматтык түрдө конфигурацияланган жок. Өркүндөтүлгөн принтердин чоо-жайын көрсөтүңүз. <ph name="LINK_BEGIN" />Кеңири маалымат<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Жеке маалыматты сунуштоо</translation>
 <translation id="6305607932814307878">Глобалдык саясат:</translation>
 <translation id="6307990684951724544">Тутум бош эмес</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> менен кирдиңиз</translation>
@@ -4015,6 +4020,7 @@
 <translation id="641081527798843608">Темасы дал келди</translation>
 <translation id="6412673304250309937">Chrome'догу кооптуу сайттардын тизмесиндеги URL даректерин текшерет. Эгер сайт сырсөзүңүздү уурдоого аракет кылса же кооптуу файлды жүктөп алсаңыз, Chrome URL даректерди, анын ичинде барактардагы мазмунду Коопсуз серептөөгө жөнөтүшү мүмкүн.</translation>
 <translation id="6412931879992742813">Жаңы жашыруун терезе</translation>
+<translation id="6413591858632097328">Ушуну менен <ph name="ORIGIN_NAME" /> сакталган бардык маалымат жана cookie-файлдары, ошондой эле ал орноткон колдонмолор тазаланат.</translation>
 <translation id="641469293210305670">Жаңыртууларды жана колдонмолорду орнотуу</translation>
 <translation id="6414888972213066896">Ата-энеңизден бул сайтка кирүүгө уруксат сурадыңыз</translation>
 <translation id="6415900369006735853">Интернетке телефонуңуздан туташыңыз</translation>
@@ -4825,7 +4831,6 @@
 <translation id="7530016656428373557">Кубаттын түгөнүү ылдамдыгы Ватт менен</translation>
 <translation id="7531779363494549572">Жөндөөлөр &gt; Колдонмолор жана билдирмелер &gt; Билдирмелер бөлүмүнө өтүңүз.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> жооп бербей жатат. Аны жабуу үчүн "Мажбурлап токтотуу" баскычын басыңыз.</translation>
-<translation id="7536333565791380193">Өркүндөтүлгөн коопсуздук</translation>
 <translation id="7537451260744431038">Серептөөнү ыңгайлаштыруу, мисалы, аккаунттан чыгарбоо же арабадагы сатып алган нерселериңизди эстеп калуу үчүн сайттар cookie файлдарын колдоно алышат</translation>
 <translation id="7539856059004947393">Bluetooth коопсуздук ачкычы</translation>
 <translation id="7540972813190816353">Жаңыртуулар изделип жаткан учурунда ката кетти: <ph name="ERROR" /></translation>
@@ -5066,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Эскертүү:<ph name="END_BOLD" /> Мүчүлүштүктөрдү оңдоо учурунда тутум кайра өчүрүлүп-күйгүзүлөт.</translation>
 <translation id="7828731929332799387">Бул аракет үчүнчү тараптын булактарындагы бардык cookie файлдарын жана сайттын дайындарын өчүрөт. Улантасызбы?</translation>
 <translation id="7829298379596169484">Аудио киришти колдонууда</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> сырсөздөрүңүздү текшере албай жатат. Интернет байланышын текшерип көрүңүз.</translation>
 <translation id="7829877209233347340">Мектеп аккаунтун кошууга уруксат берүү үчүн ата-энеңден аккаунтуна кирүүнү суран</translation>
 <translation id="7830594666202422257">Linux'ка туташтыруу</translation>
 <translation id="7831491651892296503">Тармакты конфигурациялоо учурунда ката кетти</translation>
@@ -5940,7 +5944,6 @@
 <translation id="8966870118594285808">Өтмөктү кокустан жаап алсаңыз, аны кайра ачыңыз</translation>
 <translation id="8967866634928501045">Көрсөтүү үчүн Alt+Shift+A баскычтарын басыңыз</translation>
 <translation id="8968766641738584599">Картаны сактоо</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> сырсөздөрүңүздү текшере албай жатат. 24 сааттан кийин кайра аракет кылыңыз же <ph name="BEGIN_LINK" />Google аккаунтуңуздагы сырсөздөрдү текшериңиз<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Google серверлеринен жүктөп алуу аракеттери файрвол тарабынан бөгөттөлбөгөндүгүн тармактык администраторуңуздан тактаңыз.</translation>
 <translation id="8973557916016709913">Чоңойтуп/кичирейтүү деңгээлин алып салуу</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 0eb635df..79d73747 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">ຊື່ບຸກມາກສ໌</translation>
 <translation id="1124772482545689468">ຜູ້​ໃຊ້</translation>
 <translation id="1125550662859510761">ຄວາມລະອຽດ <ph name="WIDTH" /> x <ph name="HEIGHT" /> (ເດີມ)</translation>
+<translation id="1126809382673880764">ບໍ່ປົກປ້ອງທ່ານຈາກເວັບໄຊ, ການດາວໂຫຼດ ແລະ ສ່ວນຂະຫຍາຍທີ່ເປັນອັນຕະລາຍ. ທ່ານຈະຍັງໄດ້ຮັບການປົກປ້ອງ Safe Browsing, ຢູ່ບ່ອນທີ່ໃຊ້ໄດ້, ຢູ່ໃນການບໍລິການອື່ນຂອງ Google ເຊັ່ນ: Gmail ແລະ ຊອກຫາ.</translation>
 <translation id="1128109161498068552">ຢ່າ​ອະ​ນຸ​ຍາດໃຫ້ເວັບໄຊທ໌ໃດໜຶ່ງໃຊ້ຂໍ້ຄວາມສະ​ເພາະລະບົບ ເພື່ອເຂົ້າໃຊ້ອຸປະກອນ MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">ແກ້ໄຂໂປຣແກຣມຊອກຫາ</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">ເຄືອຂ່າຍທີ່ຮູ້ຈັກ</translation>
 <translation id="123578888592755962">ດິສກ໌​ເຕັມ</translation>
 <translation id="1238191093934674082">ເປີດ VPN</translation>
+<translation id="1239439601391236986">ສະແດງການແນະນຳຂໍ້ມູນສ່ວນຕົວເພື່ອຊ່ວຍປ້ອນຂໍ້ມູນ</translation>
 <translation id="1239594683407221485">ສຳຫຼວດເນື້ອຫາຂອງອຸປະກອນຢູ່ໃນແອັບໄຟລ໌.</translation>
 <translation id="124116460088058876">ພາສາເພີ່ມເຕີມ</translation>
 <translation id="1241753985463165747">ອ່ານ ແລະ ປ່ຽນທຸກຂໍ້ມູນຂອງທ່ານໃນເວັບໄຊປັດຈຸບັນເມື່ອມີການຮ້ອງຂໍ</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">ການເປີດນຳໃຊ້ເຄືອຂ່າຍມືຖື</translation>
 <translation id="1407489512183974736">ຕັດໃຈກາງແລ້ວ</translation>
 <translation id="1408504635543854729">ສຳຫຼວດເບິ່ງເນື້ອຫາຂອງອຸປະກອນໃນແອັບໄຟລ໌. ເນື້ອຫາຖືກຈຳກັດໂດຍຜູ້ເບິ່ງແຍງລະບົບ ແລະ ບໍ່ສາມາດປ່ຽນແປງໄດ້.</translation>
+<translation id="1408980562518920698">ຈັດການຂໍ້ມູນສ່ວນຕົວ</translation>
 <translation id="1410197035576869800">ໄອຄອນແອັບ</translation>
 <translation id="1410616244180625362">ສືບ​ຕໍ່​ໃຫ້ <ph name="HOST" /> ​ເຂົ້າຫາ​ກ້ອງ​ຖ່າຍ​ຮູບ​ຂອງ​ທ່ານ</translation>
 <translation id="1414648216875402825">ທ່ານກໍາລັງອັບເດດເປັນ <ph name="PRODUCT_NAME" /> ລຸ້ນບໍ່ໝັ້ນທ່ຽງ ເຊິ່ງມີຄຸນສົມບັດທີ່ດໍາເນີນການຢູ່. ການຂັດຂ້ອງ ແລະບັນຫາທີ່ບໍ່ຄາດຄິດໄວ້ຈະເກີດຂຶ້ນ. ກະລຸນາດໍາເນີນການຕໍ່ດ້ວຍຄວາມລະມັດລະວັງ.</translation>
@@ -432,6 +435,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">JavaScript console</translation>
 <translation id="1587907146729660231">ແຕະປຸ່ມປິດເປີດເຄື່ອງດ້ວຍນິ້ວມື</translation>
+<translation id="1588200577109872591">ການປ້ອນຂໍ້ມູນອັດສະລິຍະ</translation>
 <translation id="1588438908519853928">ປົກ​ກະ​ຕິ</translation>
 <translation id="158849752021629804">ຕ້ອງມີເຄືອຂ່າຍພາຍໃນ</translation>
 <translation id="1588870296199743671">ເປີດລິ້ງກັບ...</translation>
@@ -667,6 +671,7 @@
 <translation id="1879000426787380528">ເຂົ້າສູ່ລະບົບເປັນ</translation>
 <translation id="1880905663253319515">ລຶບໃບຢັ້ງຢືນ "<ph name="CERTIFICATE_NAME" />" ບໍ?</translation>
 <translation id="1884013283844450420">ເຄືອຂ່າຍທີ <ph name="NETWORK_INDEX" /> ຈາກທັງໝົດ <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, ເຊື່ອມຕໍ່</translation>
+<translation id="1884705339276589024">ປັບຂະໜາດດິສ Linux</translation>
 <translation id="1886996562706621347">ອະນຸຍາດໃຫ້ເວັບໄຊທ໌ຖາມ ເພື່ອເປັນຕົວຈັດການມາດຕະຖານສໍາລັບໂປຣໂຕໂຄລ (ແນະນໍາ)</translation>
 <translation id="1887442540531652736">ການເຂົ້າສູ່ລະບົບຜິດພາດ</translation>
 <translation id="1887597546629269384">ເວົ້າ "Hey Google" ອີກຄັ້ງ</translation>
@@ -736,6 +741,7 @@
 <translation id="1979280758666859181">ທ່ານກໍາລັງປ່ຽນຊ່ອງດ້ວຍ <ph name="PRODUCT_NAME" /> ລຸ້ນເກົ່າກ່ວາ. ການປ່ຽນຊ່ອງຈະຖືກນໍາໃຊ້ ເມື່ອລຸ້ນຂອງຊ່ອງກົງກັບລຸ້ນທີ່ໄດ້ຕິດຕັ້ງໄວ້ກັບອຸປະກອນຂອງທ່ານໃນປະຈຸບັນ.</translation>
 <translation id="197989455406964291">KDC ບໍ່ຮອງຮັບປະເພດການເຂົ້າລະຫັດ</translation>
 <translation id="1982354452682152483">ບໍ່ມີລາຍລະອຽດ.</translation>
+<translation id="1984417487208496350">ບໍ່ມີການປົກປ້ອງ (ບໍ່ແນະນຳ)</translation>
 <translation id="1987317783729300807">ບັນ​ຊີ</translation>
 <translation id="1989112275319619282">ເປີດ​ເບິ່ງ</translation>
 <translation id="1990512225220753005">ຢ່າສະແດງທາງລັດໃນໜ້ານີ້</translation>
@@ -805,6 +811,7 @@
 <translation id="2090165459409185032">ເພື່ອ​ກູ້​ຂໍ້​ມູນ​ບັນ​ຊີ​ຂອງ​ທ່ານ​ຄືນ, ໃຫ້ໄປ​ທີ່: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">ການຕັ້ງ​ຄ່າຄວາມ​ປອດ​ໄພ​ລະ​ບົບ</translation>
 <translation id="2091887806945687916">ສຽງ</translation>
+<translation id="2096478741073211388">ການແນະນຳຂໍ້ມູນສ່ວນຕົວຊ່ວຍທ່ານຂຽນໄດ້ໄວຂຶ້ນໂດຍການແນະນຳຊື່, ທີ່ຢູ່ ຫຼື ເບີໂທລະສັບຂອງທ່ານໃນເວລາທີ່ທ່ານພິມບາງຄຳສະເພາະ. ທ່ານສາມາດເຫັນການແນະນຳທີ່ເປັນແບບສ່ວນຕົວຂອງທ່ານເອງສຳລັບບັນຊີຂອງທ່ານເທົ່ານັ້ນ.</translation>
 <translation id="2096715839409389970">ລຶບລ້າງຄຸກກີ້ພາກສ່ວນທີສາມ</translation>
 <translation id="2097372108957554726">ທ່ານ​ຈໍາ​ເປັນ​ຕ້ອງ​ລົງຊື່ເຂົ້າ​ໃຊ້​ Chrome ເພື່ອ​ລົງທະບຽນ​ອຸ​ປະ​ກອນ​ໃໝ່</translation>
 <translation id="2099172618127234427">ທ່ານ​ກຳ​ລັງ​ເປີດ​ໃຊ້​ງານ​ຄຸນສົມບັດ​ການ​ແກ້​ໄຂ​ບັນ​ຫາ Chrome OS ເຊິ່ງ​ຈະ​ຕັ້ງ sshd daemon ແລaະ​ເປີດ​ໃຊ້​ງານ​ການ​ບູດnຈາກ​ອຸ​ປະ​ກອນ USB.</translation>
@@ -821,6 +828,7 @@
 <translation id="2114326799768592691">ໂຫຼດ&amp;ເຟຣມຄືນໃໝ່</translation>
 <translation id="2114896190328250491">ຮູບຖ່າຍໂດຍ <ph name="NAME" /></translation>
 <translation id="2119349053129246860">ເປີດໃນ <ph name="APP" /></translation>
+<translation id="2119461801241504254">Safe Browsing ເປີດຢູ່ ແລະ ກຳລັງປົກປ້ອງທ່ານຈາກເວັບໄຊ ແລະ ການດາວໂຫຼດທີ່ອັນຕະລາຍ</translation>
 <translation id="2120297377148151361">ການເຄື່ອນໄຫວ ແລະ ການໂຕ້ຕອບ</translation>
 <translation id="2120639962942052471">ບລັອກ <ph name="PERMISSION" /> ແລ້ວ</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{ບລັອກຄຸກກີ້ໄວ້}=1{ບລັອກຄຸກກີ້, ຍົກເວັ້ນ 1 ລາຍການ}other{ບລັອກຄຸກກີ້ໄວ້, ຍົກເວັ້ນ {COUNT} ລາຍການ}}</translation>
@@ -1001,7 +1009,6 @@
 <translation id="2342740338116612727">ເພີ່ມບຸກມາກແລ້ວ</translation>
 <translation id="2343747224442182863">ໂຟກັສແຖບນີ້</translation>
 <translation id="2345723121311404059">1 ໜ້າຫາ <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">ການບໍລິການ SODA</translation>
 <translation id="2347644257713614136">ການໃຊ້ Hangouts ແລະ Cast for Education ແມ່ນເປັນໄປຕາມນະໂຍບາຍຄວາມເປັນສ່ວນຕົວຂອງ Google.</translation>
 <translation id="2348176352564285430">ແອັບ: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ເກີດຂໍ້ຜິດພາດໃນການໂຫຼດຂໍ້ມູນ</translation>
@@ -1889,6 +1896,7 @@
 <translation id="3515983984924808886">ສຳຜັດກະແຈຄວາມປອດໄພຂອງທ່ານອີກຄັ້ງເພື່ອຢືນຢັນການຣີເຊັດ. ລະບົບຈະລຶບຂໍ້ມູນທັງໝົດທີ່ເກັບໄວ້ໃນກະແຈຄວາມປອດໄພ, ຮວມທັງ PIN ຂອງມັນ.</translation>
 <translation id="3518985090088779359">ຍອມ​ຮັບ​ ແລະ​ສືບ​ຕໍ່</translation>
 <translation id="351952459507671940">ເພີ່ມໃສ່ກຸ່ມໃໝ່</translation>
+<translation id="3521606918211282604">ປ່ຽນຂະໜາດດິສ</translation>
 <translation id="3523642406908660543">ຖາມເມື່ອເວັບໄຊທ໌ຕ້ອງການໃຊ້ປລັກອິນ ເພື່ອເຂົ້າຫາຄອມ​ພິວ​ເຕີ​ຂອງ​ທ່ານ (ແນະ​ນໍາ​)</translation>
 <translation id="3524965460886318643">ສົ່ງອອກກິດຈະກຳ</translation>
 <translation id="3526034519184079374">ບໍ່ສາມາດອ່ານ ຫຼື ປ່ຽນຂໍ້ມູນເວັບໄຊໄດ້</translation>
@@ -1976,6 +1984,7 @@
 <translation id="3629631988386925734">ປ້ອນລະຫັດຜ່ານຂອງທ່ານເພື່ອເປີດນຳໃຊ້ Smart Lock. ຄັ້ງຕໍ່ໄປ, ໂທລະສັບຂອງທ່ານຈະປົດລັອກ <ph name="DEVICE_TYPE" /> ຂອງທ່ານ. ທ່ານສາມາດປິດ Smart Lock ໄດ້ໃນການຕັ້ງຄ່າ.</translation>
 <translation id="3630132874740063857">ໂທລະສັບຂອງທ່ານ</translation>
 <translation id="3630995161997703415">ເພີ່ມເວັບໄຊນີ້ໃສ່ຖ້ານຂອງທ່ານເພື່ອໃຊ້ມັນໄດ້ທຸກເວລາ</translation>
+<translation id="3633309367764744750">ດຶງຂໍ້ມູນລ່ວງໜ້າຈາກໜ້າເວັບ, ຮວມທັງໜ້າເວັບທີ່ທ່ານຍັງບໍ່ທັນເຂົ້າເບິ່ງເທື່ອ. ຂໍ້ມູນທີ່ດຶງມາອາດຈະຮວມມີຄຸກກີ້, ຖ້າທ່ານອະນຸຍາດຄຸກກີ້.</translation>
 <translation id="3634507049637220048">ເຄືອຂ່າຍທີ <ph name="NETWORK_INDEX" /> ຈາກທັງໝົດ <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, ຈັດການໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ, ລາຍລະອຽດ</translation>
 <translation id="3635241501480133979">ຂໍ້ມູນນີ້ລະເມີດນະໂຍບາຍຄວາມປອດໄພຂອງອົງການຂອງທ່ານ ແລະ ບໍ່ສາມາດວາງລົງໄດ້.</translation>
 <translation id="3635353578505343390">ສົ່ງຄຳຕິຊົມຫາ Google</translation>
@@ -2274,7 +2283,6 @@
 <translation id="3971764089670057203">ລາຍນິ້ວມືໃນກະແຈຄວາມປອດໄພນີ້</translation>
 <translation id="3973660817924297510">ກຳລັງກວດລະຫັດຜ່ານ (<ph name="CHECKED_PASSWORDS" /> ລາຍການຈາກທັງໝົດ <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">ການຕິດຕໍ່ຫາເຊີບເວີສຳລັບ realm ບໍ່ສຳເລັດ</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ລອງໃໝ່ໃນພາຍຫລັງ.</translation>
 <translation id="3976108569178263973">ບໍ່ມີເຄື່ອງພິມທີ່ສາມາດໃຊ້ໄດ້.</translation>
 <translation id="397703832102027365">ກໍາລັງເຮັດໃຫ້ແລ້ວ...</translation>
 <translation id="3977886311744775419">ການດາວໂຫຼດອັດຕະໂນມັດບໍ່ດາວໂຫຼດໃນເຄືອຂ່າຍປະເພດນີ້, ແຕ່ທ່ານສາມາດກວດຫາການອັບເດດດ້ວຍຕົນເອງໄດ້.</translation>
@@ -2575,7 +2583,6 @@
 <translation id="4421932782753506458">ຟູ</translation>
 <translation id="4423376891418188461">ກູ້ຄືນການຕັ້ງຄ່າ</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານກຳນົດໃຫ້ທ່ານປ່ຽນລະຫັດຜ່ານຂອງທ່ານ.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ກະລຸນາລອງໃໝ່ຫຼັງຈາກ 24 ຊົ່ວໂມງ.</translation>
 <translation id="4429030830601238961">ຂໍ້ມູນນີ້ລະເມີດນະໂຍບາຍຄວາມປອດໄພຂອງອົງການຂອງທ່ານ ແລະ ບໍ່ສາມາດວາງໃສ່ໄດ້.</translation>
 <translation id="4430019312045809116">ລະດັບສຽງ</translation>
 <translation id="4430369329743628066">ເພີ່ມບຸກມາກແລ້ວ</translation>
@@ -2588,7 +2595,6 @@
 <translation id="4441124369922430666">ທ່ານ​ຕ້ອງ​ການເລີ່ມແອັບນີ້ອັດ​ຕະ​ໂນ​ມັດບໍ ເມື່ອເຄື່ອງຈັກເປີດ​?</translation>
 <translation id="4441147046941420429">ເພື່ອສືບຕໍ່, ກະລຸນາຖອດກະແຈຄວາມປອດໄພຂອງທ່ານອອກຈາກອຸປະກອນ, ຈາກນັ້ນ ສຽບເຂົ້າຄືນ ແລ້ວແຕະມັນ</translation>
 <translation id="444134486829715816">ຂະຫຍາຍ...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານ ເມື່ອທ່ານເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ Google ຂອງທ່ານໄດ້</translation>
 <translation id="4442424173763614572">ການຊອກເບິ່ງ DNS ບໍ່ສໍາເລັດ</translation>
 <translation id="4443536555189480885">ຊ່ວຍ​ເຫຼືອ</translation>
 <translation id="4444304522807523469">ເຂົ້າ​ຫາ​ເຄື່ອງ​ສະ​ແກນ​ເອ​ກະ​ສານ​ຄັດ​ຕິດ​ຜ່ານ USB ຫຼື​ຢູ່​ເທິງ​ເຄືອ​ຂ່າຍ​ກັບ​ທີ່</translation>
@@ -2615,7 +2621,6 @@
 <translation id="4476659815936224889">ເພື່ອສະແກນລະຫັດນີ້, ທ່ານສາມາດໃຊ້ແອັບໂປຣແກຣມສະແກນ QR ໃນໂທລະສບຂອງທ່ານ ຫຼື ບາງແອັບກ້ອງຖ່າຍຮູບອື່ນ.</translation>
 <translation id="4477015793815781985">ລວມມີ Ctrl, Alt ຫຼື ⌘</translation>
 <translation id="4478664379124702289">ບັນທຶກລິ້ງເປັນ...</translation>
-<translation id="4478777936860197922">ບໍ່ມີລະຫັດຜ່ານທີ່ບັນທຶກໄວ້. <ph name="IDS_SHORT_PRODUCT_NAME" /> ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານເມື່ອທ່ານບັນທຶກພວກມັນໄວ້.</translation>
 <translation id="4479424953165245642">ຈັດການແອັບພລິເຄຊັນ Kiosk</translation>
 <translation id="4479639480957787382">ອີເທີເນັດ</translation>
 <translation id="4479877282574735775">ກຳລັງກຳນົດຄ່າເຄື່ອງສະເໝືອນຈິງ. ນີ້ອາດຈະໃຊ້ເວລາສອງສາມນາທີ.</translation>
@@ -2861,7 +2866,6 @@
 <translation id="4849517651082200438">ຢ່າຕິດຕັ້ງ</translation>
 <translation id="4850669014075537160">ການເລື່ອນ</translation>
 <translation id="4850886885716139402">ເບິ່ງ</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> ຈະແຈ້ງບອກທ່ານເມື່ອທ່ານເຂົ້າສູ່ລະບົບດ້ວຍລະຫັດຜ່ານທີ່ຖືກລະເມີດ</translation>
 <translation id="4853020600495124913">ເປີດ​ຢູ່​ໃນໜ້າ​ຕ່າງ​ໃຫມ່</translation>
 <translation id="4854317507773910281">ເລືອກບັນຊີພໍ່ແມ່ສຳລັບການອະນຸມັດ</translation>
 <translation id="485480310608090163">ການຕັ້ງຄ່າ ແລະ ການອະນຸຍາດເພີ່ມເຕີມ</translation>
@@ -3935,6 +3939,7 @@
 <translation id="6298962879096096191">ໃຊ້ Google Play ເພື່ອຕິດຕັ້ງແອັບ Android</translation>
 <translation id="630065524203833229">ອອກ</translation>
 <translation id="6300718114348072351">ບໍ່ສາມາດຕັ້ງຄ່າ <ph name="PRINTER_NAME" /> ໂດຍອັດຕະໂນມັດໄດ້. ກະລຸນາລະບຸລາຍລະອຽດເຄື່ອງພິມຂັ້ນສູງ. <ph name="LINK_BEGIN" />ສຶກສາເພີ່ມເຕີມ<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">ການແນະນຳຂໍ້ມູນສ່ວນຕົວ</translation>
 <translation id="6305607932814307878">ນະໂຍບາຍທົ່ວໂລກ:</translation>
 <translation id="6307990684951724544">ລະ​ບົບ​ບໍ່ຫວ່າງ</translation>
 <translation id="6308493641021088955">ການເຂົ້າສູ່ລະບົບທີ່ໃຫ້ໂດຍ <ph name="EXTENSION_NAME" /></translation>
@@ -4013,6 +4018,7 @@
 <translation id="641081527798843608">ຫົວຂໍ້ກົງກັນ</translation>
 <translation id="6412673304250309937">ກວດສອບ URL ກັບລາຍການເວັບໄຊທີ່ບໍ່ປອດໄພທີ່ເກັບໄວ້ໃນ Chrome. ຖ້າເວັບໄຊພະຍາຍາມລັກເອົາລະຫັດຜ່ານຂອງທ່ານ ຫຼື ເມື່ອທ່ານດາວໂຫຼດໄຟລ໌ອັນຕະລາຍ, Chrome ອາດຈະສົ່ງ URL, ຮວມທັງເນື້ອຫາບາງສ່ວນໃນໜ້າໄປໃຫ້ Safe Browsing.</translation>
 <translation id="6412931879992742813">ໜ້າ​ຕ່າງ​ທີ່ບໍ່ເປີດເຜີຍຕົນຕົວໃໝ່</translation>
+<translation id="6413591858632097328">ນີ້ຈະລຶບລ້າງຂໍ້ມູນ ແລະ ຄຸກກີ້ທັງໝົດທີ່ເກັບໄວ້ໂດຍ <ph name="ORIGIN_NAME" /> ແລະ ແອັບທີ່ຕິດຕັ້ງຂອງມັນ.</translation>
 <translation id="641469293210305670">ຕິດຕັ້ງການອັບເດດ ແລະ ແອັບ</translation>
 <translation id="6414888972213066896">ທ່ານໄດ້ຖາມພໍ່ແມ່ຂອງທ່ານວ່າທ່ານສາມາດເຂົ້າເບິ່ງເວັບໄຊນີ້ໄດ້ຫຼືບໍ່</translation>
 <translation id="6415900369006735853">ເຊື່ອມຕໍ່ກັບອິນເຕີເນັດຜ່ານໂທລະສັບຂອງທ່ານ</translation>
@@ -4823,7 +4829,6 @@
 <translation id="7530016656428373557">ອັດຕາປ່ອຍອອກມາເປັນວັດຕ໌</translation>
 <translation id="7531779363494549572">ໄປຫາການຕັ້ງຄ່າ &gt; ແອັບ ແລະ ການແຈ້ງເຕືອນ &gt; ການແຈ້ງເຕືອນ.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ບໍ່ຕອບສະໜອງ. ເລືອກ "ບັງຄັບປິດ" ເພື່ອປິດແອັບ.</translation>
-<translation id="7536333565791380193">ການຮັກສາຄວາມປອດໄພຂັ້ນສູງ</translation>
 <translation id="7537451260744431038">ເວັບໄຊສາມາດໃຊ້ຄຸກກີ້ເພື່ອປັບປຸງປະສົບການທ່ອງເວັບຂອງທ່ານ, ຕົວຢ່າງ: ເພື່ອໃຫ້ທ່ານສືບຕໍ່ຢູ່ໃນລະບົບ ຫຼື ຈື່ລາຍການຕ່າງໆໃນກະຕ່າຊື້ເຄື່ອງຂອງທ່ານ</translation>
 <translation id="7539856059004947393">ກະແຈຄວາມປອດໄພແບບ Bluetooth</translation>
 <translation id="7540972813190816353">ເກີດຄວາມຜິດພາດຂຶ້ນໃນຂະນະທີ່ກໍາລັງກວດຫາການອັບເດດ: <ph name="ERROR" /></translation>
@@ -5063,7 +5068,6 @@
     <ph name="BEGIN_BOLD" />ໝາຍເຫດ:<ph name="END_BOLD" /> ລະບົບຈະປິດເປີດເຄື່ອງຄືນໃໝ່ໃນລະຫວ່າງຂະບວນການນັ້ນ.</translation>
 <translation id="7828731929332799387">ນີ້ຈະລຶບຄຸກກີ້ ແລະ ຂໍ້ມູນເວັບໄຊທັງໝົດທີ່ມີໃຫ້ໃນບໍລິບົດພາກສ່ວນທີສາມ. ທ່ານຕ້ອງການດຳເນີນການຕໍ່ບໍ?</translation>
 <translation id="7829298379596169484">ການ​ເຂົ້າ​ໃຊ້ການປ້ອນຂໍ້ມູນ​ສຽງ</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ລອງກວດເບິ່ງການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານ.</translation>
 <translation id="7829877209233347340">ຂໍໃຫ້ພໍ່ແມ່ເຂົ້າສູ່ລະບົບເພື່ອອະນຸຍາດໃຫ້ເພີ່ມບັນຊີໂຮງຮຽນ</translation>
 <translation id="7830594666202422257">ເຊື່ອມຕໍ່ກັບ Linux</translation>
 <translation id="7831491651892296503">ມີຄວາມຜິດພາດໃນການກຳນົດຄ່າເຄືອຂ່າຍ</translation>
@@ -5400,7 +5404,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> ປິດໃຊ້ງານເຄີເຊີເມົາສ໌ຂອງທ່ານແລ້ວ.</translation>
 <translation id="8264024885325823677">ການຕັ້ງຄ່ານີ້ຈັດການໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ.</translation>
 <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" ໄດ້ກະຕຸ້ນໜ້າຈໍເຕັມ.</translation>
-<translation id="826511437356419340">ເຂົ້າສູ່ໂໝດພາບຮວມໜ້າຈໍແລ້ວ. ປັດເພື່ອໄປຍັງສ່ວນຕ່າງໆ ຫຼື ກົດຖ້າກຳລັງໃຊ້ແປ້ນພິມຢູ່.</translation>
+<translation id="826511437356419340">ເຂົ້າສູ່ໂໝດພາບຮວມໜ້າຈໍແລ້ວ. ປັດເພື່ອໄປຍັງສ່ວນຕ່າງໆ ຫຼື ກົດ Tab ຖ້າກຳລັງໃຊ້ແປ້ນພິມຢູ່.</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />ນີ້ແມ່ນຂໍ້ມູນທົ່ວໄປກ່ຽວກັບອຸປະກອນນີ້ ແລະ ມັນຖືກໃຊ້ມັນແນວໃດ (ເຊັ່ນ: ລະດັບແບັດເຕີຣີ, ການເຄື່ອນໄຫວໃນລະບົບ ແລະ ແອັບ ແລະ ຂໍ້ຜິດພາດຕ່າງໆ). ຂໍ້ມູນຈະຖືກໃຊ້ເພື່ອປັບປຸງ Android ແລະ ບາງຂໍ້ມູນແບບຮວມກັນຈະຊ່ວຍແອັບ ແລະ ບັນດາຮຸ້ນສ່ວນຂອງ Google ເຊັ່ນ ຜູ້ພັດທະນາ Android ເຮັດໃຫ້ແອັບ ແລະ ຜະລິດຕະພັນຂອງເຂົາເຈົ້າດີຂຶ້ນ.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />ການປິດຄຸນສົມບັດນີ້ບໍ່ມີຜົນຕໍ່ກັບຄວາມສາມາດຂອງອຸປະກອນນີ້ໃນການສົ່ງຂໍ້ມູນທີ່ຈຳເປັນເພື່ອໄດ້ຮັບການບໍລິການທີ່ສຳຄັນ ເຊັ່ນ: ການອັບເດດລະບົບ ແລະ ຄວາມປອດໄພ.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />ເຈົ້າຂອງສາມາດຄວບຄຸມຄຸນສົມບັດນີ້ຈາກການຕັ້ງຄ່າ &gt; ຂັ້ນສູງ &gt; ສົ່ງຂໍ້ມູນການວິເຄາະ ແລະ ການໃຊ້ໃຫ້ Google ໂດຍອັດຕະໂນມັດ.<ph name="END_PARAGRAPH3" />
@@ -5937,7 +5941,6 @@
 <translation id="8966870118594285808">ເປີດແຖບຄືນໃໝ່ຖ້າທ່ານປິດມັນໂດຍບໍ່ຕັ້ງໃຈ</translation>
 <translation id="8967866634928501045">ກົດປຸ່ມ Alt Shift A ເພື່ອສະແດງ</translation>
 <translation id="8968766641738584599">ບັນທຶກບັດໄວ້</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ລອງໃໝ່ຫຼັງຈາກ 24 ຊົ່ວໂມງ ຫຼື <ph name="BEGIN_LINK" />ກວດລະຫັດຜ່ານໃນບັນຊີ Google ຂອງທ່ານ<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">ກະລຸນາກວດເບິ່ງກັບຜູ້ຄຸ້ມຄອງເຄືອຂ່າຍຂອງທ່ານ ເພື່ອເບິ່ງໃຫ້ແນ່ໃຈວ່າ ບໍ່ມີໄຟວອລບລັອກການດາວໂຫຼດຈາກເຊີບເວີ Google ແລ້ວ.</translation>
 <translation id="8973557916016709913">ລຶບລະດັບການຊູມອອກ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 5f74181..a09fb1c 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Žymės pavadinimas</translation>
 <translation id="1124772482545689468">Naudotojas</translation>
 <translation id="1125550662859510761">Atrodo kaip <ph name="WIDTH" /> × <ph name="HEIGHT" /> (savasis)</translation>
+<translation id="1126809382673880764">Neapsaugo jūsų nuo pavojingų svetainių, atsisiuntimų ir plėtinių. Kai yra galimybė, vis tiek gausite saugaus naršymo pranešimus kitose „Google“ paslaugose, pvz., „Gmail“ ir paieškoje.</translation>
 <translation id="1128109161498068552">Neleisti jokioms svetainėms naudoti sistemos išskirtinių pranešimų MIDI įrenginiams pasiekti</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Paieškos variklio redagavimas</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Žinomi tinklai</translation>
 <translation id="123578888592755962">Diskas pilnas</translation>
 <translation id="1238191093934674082">Atidaryti VPN</translation>
+<translation id="1239439601391236986">Rodyti asmens informacijos įvesčių pasiūlymus</translation>
 <translation id="1239594683407221485">Naršykite įrenginio turinį programoje „Failai“.</translation>
 <translation id="124116460088058876">Daugiau kalbų</translation>
 <translation id="1241753985463165747">Skaityti ir keisti visus dabartinės svetainės duomenis, kai suaktyvinama</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Mobiliojo ryšio aktyvinimas</translation>
 <translation id="1407489512183974736">Apkarpytas centre</translation>
 <translation id="1408504635543854729">Naršykite įrenginio turinį programoje „Failai“. Turinį riboja administratorius, todėl jo negalima keisti.</translation>
+<translation id="1408980562518920698">Tvarkyti asmens informaciją</translation>
 <translation id="1410197035576869800">Programos piktograma</translation>
 <translation id="1410616244180625362">Toliau leisti <ph name="HOST" /> pasiekti fotoaparatą</translation>
 <translation id="1414648216875402825">Atnaujinate į nestabilią „<ph name="PRODUCT_NAME" />“ versiją, kuri apima vis dar kuriamas funkcijas. Bus strigčių ir netikėtų trikčių. Būkite atsargūs.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;„JavaScript“ pultas</translation>
 <translation id="1587907146729660231">Pirštu palieskite maitinimo mygtuką</translation>
+<translation id="1588200577109872591">Išmaniosios įvestys</translation>
 <translation id="1588438908519853928">Įprastas</translation>
 <translation id="158849752021629804">Reikalingas namų tinklas</translation>
 <translation id="1588870296199743671">Atidaryti nuorodą naudojant...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Prisijungti kaip</translation>
 <translation id="1880905663253319515">Ištrinti „<ph name="CERTIFICATE_NAME" />“ sertifikatą?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_INDEX" /> tinklas iš <ph name="NETWORK_COUNT" />, „<ph name="NETWORK_NAME" />“, prisijungti</translation>
+<translation id="1884705339276589024">„Linux“ disko dydžio keitimas</translation>
 <translation id="1886996562706621347">Leisti svetainėms prašyti tapti numatytosiomis protokolų doroklėmis (rekomenduojama)</translation>
 <translation id="1887442540531652736">Prisijungimo klaida</translation>
 <translation id="1887597546629269384">Dar kartą pasakykite „Hey Google“</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Keičiate į kanalą, kuriame naudojama senesnė „<ph name="PRODUCT_NAME" />“ versija. Kanalo pakeitimas bus pritaikytas, kai kanalo versija atitiks šiuo metu įrenginyje įdiegtą versiją.</translation>
 <translation id="197989455406964291">KDC nepalaiko šifruotės tipo</translation>
 <translation id="1982354452682152483">Aprašo nėra.</translation>
+<translation id="1984417487208496350">Apsaugos nėra (nerekomenduojama)</translation>
 <translation id="1987317783729300807">Paskyros</translation>
 <translation id="1989112275319619282">Naršyti</translation>
 <translation id="1990512225220753005">Nerodyti sparčiųjų klavišų šiame puslapyje</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Jei norite atkurti paskyros informaciją, apsilankykite adresu google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Sistemos saugos nustatymas</translation>
 <translation id="2091887806945687916">Garsas</translation>
+<translation id="2096478741073211388">Pasinaudoję asmens informacijos pasiūlymais galėsite rašyti greičiau. Pradėjus vesti konkrečius žodžius, bus pasiūlytas jūsų vardas, pavardė, adresas ar telefono numeris. Privačius, suasmenintus jūsų paskyrai skirtus pasiūlymus matote tik jūs.</translation>
 <translation id="2096715839409389970">Išvalyti trečiųjų šalių slapukus</translation>
 <translation id="2097372108957554726">Reikia prisijungti prie „Chrome“, kad būtų galima užregistruoti naujus įrenginius</translation>
 <translation id="2099172618127234427">Įgalinsite „Chrome“ OS derinimo funkcijas ir bus nustatyta „sshd daemon“, kad būtų galima paleisti programas iš atmintuko.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Įkelti &amp;rėmelį iš naujo</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> nuotrauka</translation>
 <translation id="2119349053129246860">Atidaryti naudojant „<ph name="APP" />“</translation>
+<translation id="2119461801241504254">Saugaus naršymo funkcija įjungta ir saugo jus nuo žalingų svetainių bei atsisiuntimų</translation>
 <translation id="2120297377148151361">Veikla ir sąveikos</translation>
 <translation id="2120639962942052471">Blokuojama: <ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Slapukai užblokuoti}=1{Slapukai užblokuoti, 1 išimtis}one{Slapukai užblokuoti, {COUNT} išimtis}few{Slapukai užblokuoti, {COUNT} išimtys}many{Slapukai užblokuoti, {COUNT} išimties}other{Slapukai užblokuoti, {COUNT} išimčių}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Žymės pridėtos</translation>
 <translation id="2343747224442182863">Šio skirtuko paryškinimas</translation>
 <translation id="2345723121311404059">1 psl. į „<ph name="PRINTER_NAME" />“</translation>
-<translation id="2346953515226895098">SODA paslauga</translation>
 <translation id="2347644257713614136">„Hangout“ ir „Cast for Education“ naudojimas reglamentuojamas pagal „Google“ privatumo politiką.</translation>
 <translation id="2348176352564285430">Programa: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Klaida įkeliant duomenis</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">Palieskite saugos raktą dar kartą patvirtindami nustatymą iš naujo. Visa saugos rakte saugoma informacija, įskaitant jo PIN kodą, bus ištrinta.</translation>
 <translation id="3518985090088779359">Sutikti ir tęsti</translation>
 <translation id="351952459507671940">Pridėti prie naujos grupės</translation>
+<translation id="3521606918211282604">Keisti disko dydį</translation>
 <translation id="3523642406908660543">Paklausti, kai svetainė nori naudoti papildinį, kad pasiektų kompiuterį (rekomenduojama)</translation>
 <translation id="3524965460886318643">Eksportuoti veiklos duomenis</translation>
 <translation id="3526034519184079374">Nepavyko nuskaityti arba pakeisti svetainės duomenų</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Įveskite slaptažodį, kad įgalintumėte „Smart Lock“. Kitą kartą telefonu galėsite atrakinti „<ph name="DEVICE_TYPE" />“. Funkciją „Smart Lock“ galite išjungti „Nustatymų“ skiltyje.</translation>
 <translation id="3630132874740063857">Jūsų telefonas</translation>
 <translation id="3630995161997703415">Pridėkite šią svetainę prie lentynos, kad galėtumėte ją bet kada naudoti</translation>
+<translation id="3633309367764744750">Iš anksto iškviečiama informacija iš puslapių, įskaitant tuos, kuriuose dar nesate lankęsi. Iškviesta informacija gali būti slapukai, jei juos leidžiate.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_INDEX" /> tinklas iš <ph name="NETWORK_COUNT" />, „<ph name="NETWORK_NAME" />“, <ph name="CONNECTION_STATUS" />, tvarko administratorius, išsami informacija</translation>
 <translation id="3635241501480133979">Šie duomenys pažeidžia organizacijos saugos politiką, todėl jų negalima nuvilkti.</translation>
 <translation id="3635353578505343390">Atsiliepimų siuntimas sistemai „Google“</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">Šio saugos rakto kontroliniai kodai</translation>
 <translation id="3973660817924297510">Tikrinami slaptažodžiai (<ph name="CHECKED_PASSWORDS" /> iš <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Nepavyko susisiekti su serveriu dėl srities</translation>
-<translation id="3975884715086515476">„<ph name="IDS_SHORT_PRODUCT_NAME" />“ negali patikrinti jūsų slaptažodžių. Vėliau bandykite dar kartą.</translation>
 <translation id="3976108569178263973">Nėra pasiekiamų spausdintuvų.</translation>
 <translation id="397703832102027365">Užbaigiama...</translation>
 <translation id="3977886311744775419">Automatiniai naujiniai iš šio tipo tinklo neatsisiunčiami, bet galite ieškoti naujinių patys.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">Pūkuotasis</translation>
 <translation id="4423376891418188461">Atkurti nustatymus</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, jūsų administratoriui reikia pakeisti jūsų slaptažodį.</translation>
-<translation id="4426209360861763174">„<ph name="IDS_SHORT_PRODUCT_NAME" />“ negali patikrinti jūsų slaptažodžių. Bandykite dar kartą po 24 val.</translation>
 <translation id="4429030830601238961">Šie duomenys pažeidžia organizacijos saugos politiką, todėl jų negalima įklijuoti.</translation>
 <translation id="4430019312045809116">Apimtis</translation>
 <translation id="4430369329743628066">Žymė pridėta</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">Norite automatiškai paleisti šią programą, kai įjungiamas įrenginys?</translation>
 <translation id="4441147046941420429">Norėdami tęsti išimkite saugos raktą iš įrenginio, įdėkite iš naujo ir palieskite</translation>
 <translation id="444134486829715816">Išskleisti...</translation>
-<translation id="4442329324652245220">„<ph name="IDS_SHORT_PRODUCT_NAME" />“ gali tikrinti jūsų slaptažodžius, kai prisijungiate naudodami „Google“ paskyrą</translation>
 <translation id="4442424173763614572">Įvyko DNS paieškos klaida</translation>
 <translation id="4443536555189480885">&amp;Pagalba</translation>
 <translation id="4444304522807523469">Pasiekti dokumentų skaitytuvus, prijungtus per USB jungtį ar vietiniame tinkle</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">Jei norite nuskaityti šį kodą, galite naudoti QR skaitytuvo programą telefone arba tam tikras fotoaparato programas.</translation>
 <translation id="4477015793815781985">Naudokite „Ctrl“, „Alt“ arba ⌘</translation>
 <translation id="4478664379124702289">Išsaugoti nuoro&amp;dą kaip...</translation>
-<translation id="4478777936860197922">Nėra išsaugotų slaptažodžių. „<ph name="IDS_SHORT_PRODUCT_NAME" />“ gali tikrinti jūsų slaptažodžius, kai juos išsaugote.</translation>
 <translation id="4479424953165245642">Tvarkyti viešojo terminalo programas</translation>
 <translation id="4479639480957787382">Eternetas</translation>
 <translation id="4479877282574735775">Konfigūruojamas virtualus įrenginys. Tai gali užtrukti kelias minutes.</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">Neįdiegti</translation>
 <translation id="4850669014075537160">Slinkimas</translation>
 <translation id="4850886885716139402">Žiūrėti</translation>
-<translation id="485197095346966382">„<ph name="IDS_SHORT_PRODUCT_NAME" />“ praneš jums, kai prisijungsite naudodami pažeistą slaptažodį</translation>
 <translation id="4853020600495124913">Atidaryti &amp;naujame lange</translation>
 <translation id="4854317507773910281">Pasirinkite vieno iš tėvų paskyrą norėdami patvirtinti</translation>
 <translation id="485480310608090163">Daugiau nustatymų ir leidimų</translation>
@@ -3938,6 +3942,7 @@
 <translation id="6298962879096096191">Naudoti „Google Play“ diegiant „Android“ programas</translation>
 <translation id="630065524203833229">I&amp;šeiti</translation>
 <translation id="6300718114348072351">„<ph name="PRINTER_NAME" />“ nepavyko sukonfigūruoti automatiškai. Nurodykite išplėstinius spausdintuvo duomenis. <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Asmens informacijos pasiūlymai</translation>
 <translation id="6305607932814307878">Visuotinė politika:</translation>
 <translation id="6307990684951724544">Sistema užimta</translation>
 <translation id="6308493641021088955">Prisijungimo duomenis pateikė „<ph name="EXTENSION_NAME" />“</translation>
@@ -4016,6 +4021,7 @@
 <translation id="641081527798843608">Temos atitiktis</translation>
 <translation id="6412673304250309937">Tikrinami URL pagal nesaugių svetainių sąrašą, saugomą naršyklėje „Chrome“. Jei svetainė bando pavogti slaptažodį ar atsisiuntėte žalingą failą, „Chrome“ taip pat gali siųsti URL, įskaitant puslapio turinio dalis, Saugaus naršymo funkcijai.</translation>
 <translation id="6412931879992742813">Naujas inkognito langas</translation>
+<translation id="6413591858632097328">Bus išvalyti visi <ph name="ORIGIN_NAME" /> ir įdiegtų programų saugomi duomenys ir slapukai.</translation>
 <translation id="641469293210305670">Naujinių ir programų diegimas</translation>
 <translation id="6414888972213066896">Paprašėte vieno iš tėvų leidimo apsilankyti šiame puslapyje</translation>
 <translation id="6415900369006735853">Prisijunkite prie interneto per telefoną</translation>
@@ -4826,7 +4832,6 @@
 <translation id="7530016656428373557">Iškrovos koeficientas vatais</translation>
 <translation id="7531779363494549572">Eikite į skiltį „Nustatymai“ &gt; „Programos ir pranešimai“ &gt; „Pranešimai“.</translation>
 <translation id="7532009420053991888">„<ph name="LINUX_APP_NAME" />“ nereaguoja. Pasirinkite „Priverstinai uždaryti“, kad uždarytumėte programą.</translation>
-<translation id="7536333565791380193">Išplėstinė sauga</translation>
 <translation id="7537451260744431038">Svetainės negali naudoti slapukų naršymo kokybei pagerinti, pavyzdžiui, kad liktumėte prisijungę ar būtų įsimintos pirkinių krepšelyje esančios prekės</translation>
 <translation id="7539856059004947393">„Bluetooth“ saugos raktas</translation>
 <translation id="7540972813190816353">Tikrinant, ar yra naujinių, įvyko klaida: <ph name="ERROR" /></translation>
@@ -5067,7 +5072,6 @@
     <ph name="BEGIN_BOLD" />Pastaba:<ph name="END_BOLD" /> vykdant procesą sistema bus paleista iš naujo.</translation>
 <translation id="7828731929332799387">Bus ištrinti visi su trečiosiomis šalimis susiję slapukai ir svetainių duomenys. Ar norite tęsti?</translation>
 <translation id="7829298379596169484">Pasiekiama garso įrašų įvestis</translation>
-<translation id="7829528495815477379">„<ph name="IDS_SHORT_PRODUCT_NAME" />“ negali patikrinti jūsų slaptažodžių. Pabandykite patikrinti interneto ryšį.</translation>
 <translation id="7829877209233347340">Paprašykite vieno iš tėvų prisijungti, kad suteiktų leidimą pridėti mokyklos paskyrą</translation>
 <translation id="7830594666202422257">Prijungti prie „Linux“</translation>
 <translation id="7831491651892296503">Klaida konfigūruojant tinklą</translation>
@@ -5942,7 +5946,6 @@
 <translation id="8966870118594285808">Atidaryti netyčia uždarytą skirtuką</translation>
 <translation id="8967866634928501045">Kad būtų parodyta, paspauskite „Alt“ + „Shift“ + A</translation>
 <translation id="8968766641738584599">Išsaugoti kortelę</translation>
-<translation id="8971800409073702505">„<ph name="IDS_SHORT_PRODUCT_NAME" />“ negali patikrinti jūsų slaptažodžių. Bandykite dar kartą po 24 val. arba <ph name="BEGIN_LINK" />patikrinkite slaptažodžius „Google“ paskyroje<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Grįžimo klavišas</translation>
 <translation id="8972513834460200407">Paklauskite tinklo administratoriaus, kad įsitikintumėte, jog užkarda neblokuoja atsisiuntimų iš „Google“ serverių.</translation>
 <translation id="8973557916016709913">Pašalinti mastelio keitimo lygį</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index bf35f72..789f28a9 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Grāmatzīmes nosaukums</translation>
 <translation id="1124772482545689468">Lietotājs</translation>
 <translation id="1125550662859510761">Noteiktā izšķirtspēja: <ph name="WIDTH" /> x <ph name="HEIGHT" /> (iebūvētā)</translation>
+<translation id="1126809382673880764">Netiek nodrošināta aizsardzība pret bīstamām vietnēm, lejupielādēm un paplašinājumiem. Jūs joprojām saņemsiet drošas pārlūkošanas aizsardzību, ja tā ir pieejama, citos Google pakalpojumos, piemēram, Gmail un Meklēšana.</translation>
 <translation id="1128109161498068552">Neļaut nevienai vietnei izmantot ekskluzīvus sistēmas ziņojumus, lai piekļūtu MIDI ierīcēm</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Meklētājprogrammas rediģēšana</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Zināmie tīkli</translation>
 <translation id="123578888592755962">Disks ir pilns.</translation>
 <translation id="1238191093934674082">Atvērt VPN</translation>
+<translation id="1239439601391236986">Rādīt teksta ievadei paredzētus personas informācijas ieteikumus</translation>
 <translation id="1239594683407221485">Pārlūkojiet ierīces saturu lietotnē Faili.</translation>
 <translation id="124116460088058876">Citas valodas…</translation>
 <translation id="1241753985463165747">Lasīt un mainīt visus jūsu datus pašreizējā vietnē, kad aktivizēts</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Mobilā tīkla aktivizācija</translation>
 <translation id="1407489512183974736">Apgriezt un centrēt</translation>
 <translation id="1408504635543854729">Pārlūkojiet ierīces saturu lietotnē Faili. Saturu ierobežo administrators, un to nevar mainīt.</translation>
+<translation id="1408980562518920698">Pārvaldīt personas informāciju</translation>
 <translation id="1410197035576869800">Lietotnes ikona</translation>
 <translation id="1410616244180625362">Arī turpmāk ļaut vietnei <ph name="HOST" /> piekļūt kamerai</translation>
 <translation id="1414648216875402825">Jūs atjaunināt uz nestabilu <ph name="PRODUCT_NAME" /> versiju, kurā ietvertas funkcijas, kas vēl tiek izstrādātas. Radīsies avārijas un neparedzētas kļūdas. Rīkojieties apdomīgi!</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">JavaScript pults</translation>
 <translation id="1587907146729660231">Ar pirkstu pieskarieties barošanas pogai.</translation>
+<translation id="1588200577109872591">Vieda ievade</translation>
 <translation id="1588438908519853928">Parasts</translation>
 <translation id="158849752021629804">Nepieciešams mājas tīkls</translation>
 <translation id="1588870296199743671">Atvērt saiti ar...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Pierakstīties kā</translation>
 <translation id="1880905663253319515">Vai dzēst sertifikātu “<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_INDEX" />. tīkls no <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, savienojums</translation>
+<translation id="1884705339276589024">Linux diska lieluma mainīšana</translation>
 <translation id="1886996562706621347">Ļaut vietnēm lūgt kļūt par protokolu noklusējuma apdarinātājiem (ieteicams)</translation>
 <translation id="1887442540531652736">Pierakstīšanās kļūda</translation>
 <translation id="1887597546629269384">Vēlreiz izrunājiet “Hey Google”</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Jūs gatavojaties pāriet uz kanālu ar vecāku <ph name="PRODUCT_NAME" /> versiju. Kanāla maiņa tiks piemērota, kad kanāla versija atbildīs versijai, kas pašreiz instalēta jūsu ierīcē.</translation>
 <translation id="197989455406964291">KDC neatbalsta šifrējuma veidu</translation>
 <translation id="1982354452682152483">Apraksts nav pieejams</translation>
+<translation id="1984417487208496350">Bez aizsardzības (nav ieteicams)</translation>
 <translation id="1987317783729300807">Konti</translation>
 <translation id="1989112275319619282">Pārlūkot</translation>
 <translation id="1990512225220753005">Šajā lapā nerādīt saīsnes</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Lai atgūtu konta informāciju, apmeklējiet vietni google.com/accounts/recovery.</translation>
 <translation id="2090876986345970080">Sistēmas drošības iestatījumi</translation>
 <translation id="2091887806945687916">Signāls</translation>
+<translation id="2096478741073211388">Personas informācijas ieteikumi palīdz jums rakstīt ātrāk, parādot jūsu vārdu, adresi vai tālruņa numuru, kad rakstāt konkrētus vārdus. Jūsu konta privātie, personalizētie ieteikumi ir redzami tikai jums.</translation>
 <translation id="2096715839409389970">Notīrīt trešo pušu sīkfailus</translation>
 <translation id="2097372108957554726">Lai reģistrētu jaunas ierīces, jums ir jāpierakstās pārlūkā Chrome.</translation>
 <translation id="2099172618127234427">Jūs iespējojat operētājsistēmas Chrome OS atkļūdošanas funkcijas, kas iestatīs sshd dēmonu un iespējos palaišanu no USB diskiem.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Atkārtoti ielādēt &amp;ietvaru</translation>
 <translation id="2114896190328250491">Fotogrāfs: <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Atvērt lietotnē <ph name="APP" /></translation>
+<translation id="2119461801241504254">Droša pārlūkošana ir ieslēgta un aizsargā jūs pret kaitīgām vietnēm un lejupielādēm.</translation>
 <translation id="2120297377148151361">Darbības un mijiedarbības</translation>
 <translation id="2120639962942052471">Bloķēta atļauja “<ph name="PERMISSION" />”</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Sīkfaili ir bloķēti}=1{Sīkfaili ir bloķēti (1 izņēmums)}zero{Sīkfaili ir bloķēti ({COUNT} izņēmumu)}one{Sīkfaili ir bloķēti ({COUNT} izņēmums)}other{Sīkfaili ir bloķēti ({COUNT} izņēmumi)}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Grāmatzīmes pievienotas</translation>
 <translation id="2343747224442182863">Izcelt šo cilni</translation>
 <translation id="2345723121311404059">1 lapa nosūtīta printerim <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA pakalpojums</translation>
 <translation id="2347644257713614136">Uz funkcijas Hangouts un paplašinājuma Cast for Education izmantošanu attiecas Google konfidencialitātes politika.</translation>
 <translation id="2348176352564285430">Lietotne: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Ielādējot datus, radās kļūda.</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">Vēlreiz pieskarieties drošības atslēgai, lai apstiprinātu atiestatīšanu. Tiks dzēsta visa drošības atslēgā saglabātā informācija, tostarp tās PIN.</translation>
 <translation id="3518985090088779359">Piekrist un turpināt</translation>
 <translation id="351952459507671940">Pievienot jaunai grupai</translation>
+<translation id="3521606918211282604">Mainīt diska lielumu</translation>
 <translation id="3523642406908660543">Vaicāt, ja vietne vēlas izmantot spraudni, lai piekļūtu datoram (ieteicams)</translation>
 <translation id="3524965460886318643">Eksportēt darbības</translation>
 <translation id="3526034519184079374">Nevar lasīt vai mainīt vietnes datus</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Ievadiet paroli, lai iespējotu funkciju Smart Lock. Nākamajā reizē šīs ierīces <ph name="DEVICE_TYPE" /> atbloķēšanai tiks izmantots jūsu tālrunis. Iestatījumos varat izslēgt funkciju Smart Lock.</translation>
 <translation id="3630132874740063857">Jūsu tālrunis</translation>
 <translation id="3630995161997703415">Lai varētu izmantot šo vietni jebkurā laikā, pievienojiet to savam plauktam.</translation>
+<translation id="3633309367764744750">Tiek pirmsielādēta informācija no lapām, tostarp no lapām, kuras vēl neesat apmeklējis. Pirmsielādētajā informācijā var būt ietverti sīkfaili, ja esat atļāvis tos izmantot.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_INDEX" />. tīkls no <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, pārvalda jūsu administrators, informācija</translation>
 <translation id="3635241501480133979">Ar šiem datiem tiek pārkāptas jūsu organizācijas drošības politikas, un tos nevar nomest.</translation>
 <translation id="3635353578505343390">Atsauksmju sūtīšana uzņēmumam Google</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">Šai drošības atslēgai ir pirkstu nospiedumi</translation>
 <translation id="3973660817924297510">Notiek paroļu pārbaude (<ph name="CHECKED_PASSWORDS" /> no <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Sazināšanās ar serveri nozarojumam neizdevās</translation>
-<translation id="3975884715086515476">Pārlūkprogrammā <ph name="IDS_SHORT_PRODUCT_NAME" /> nevar pārbaudīt jūsu paroles. Vēlāk mēģiniet vēlreiz.</translation>
 <translation id="3976108569178263973">Neviens printeris nav pieejams.</translation>
 <translation id="397703832102027365">Notiek pabeigšana...</translation>
 <translation id="3977886311744775419">Kad izveidots savienojums ar šāda veida tīklu, atjauninājumi netiek lejupielādēti automātiski, taču varat manuāli pārbaudīt, vai tie ir pieejami.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">Minka</translation>
 <translation id="4423376891418188461">Atjaunot iestatījumus</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, jūsu administrators pieprasa paroles maiņu.</translation>
-<translation id="4426209360861763174">Pārlūkprogrammā <ph name="IDS_SHORT_PRODUCT_NAME" /> nevar pārbaudīt jūsu paroles. Mēģiniet vēlreiz pēc 24 stundām.</translation>
 <translation id="4429030830601238961">Ar šiem datiem tiek pārkāptas jūsu organizācijas drošības politikas, un tos nevar ielīmēt.</translation>
 <translation id="4430019312045809116">Skaļums</translation>
 <translation id="4430369329743628066">Grāmatzīme pievienota</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">Vai vēlaties automātiski startēt šo lietotni, kad tiek ieslēgta ierīce?</translation>
 <translation id="4441147046941420429">Lai turpinātu, noņemiet drošības atslēgu no savas ierīces, pēc tam ievietojiet to atkārtoti un pieskarieties tās aktivizācijas pogai.</translation>
 <translation id="444134486829715816">Izvērst...</translation>
-<translation id="4442329324652245220">Pārlūkprogrammā <ph name="IDS_SHORT_PRODUCT_NAME" /> var pārbaudīt jūsu paroles, ja esat pierakstījies savā Google kontā.</translation>
 <translation id="4442424173763614572">DNS uzmeklēšana neizdevās</translation>
 <translation id="4443536555189480885">&amp;Palīdzība</translation>
 <translation id="4444304522807523469">Piekļūt dokumentu skeneriem, kas pievienoti, izmantojot USB vai lokālajā tīklā</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">Lai skenētu šo kodu, varat izmantot QR skenēšanas lietotni tālrunī vai noteiktas kameras lietotnes.</translation>
 <translation id="4477015793815781985">Iekļaujiet taustiņu Ctrl, Alt vai ⌘</translation>
 <translation id="4478664379124702289">Saglabāt saiti &amp;kā...</translation>
-<translation id="4478777936860197922">Nav saglabātu paroļu. Pārlūkprogrammā <ph name="IDS_SHORT_PRODUCT_NAME" /> var pārbaudīt jūsu paroles, ja jūs tās saglabājat.</translation>
 <translation id="4479424953165245642">Pārvaldīt kioska lietojumprogrammas</translation>
 <translation id="4479639480957787382">tīkls Ethernet</translation>
 <translation id="4479877282574735775">Notiek virtuālās mašīnas konfigurēšana. Tas var ilgt dažas minūtes.</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">Neinstalēt</translation>
 <translation id="4850669014075537160">Ritināšana</translation>
 <translation id="4850886885716139402">Skatīt</translation>
-<translation id="485197095346966382">Ja pierakstīsieties ar uzlauztu paroli, pārlūkprogrammā <ph name="IDS_SHORT_PRODUCT_NAME" /> tiks parādīts paziņojums.</translation>
 <translation id="4853020600495124913">Atvērt &amp;jaunā logā</translation>
 <translation id="4854317507773910281">Izvēlieties vecāku kontu apstiprinājuma saņemšanai.</translation>
 <translation id="485480310608090163">Citi iestatījumi un atļaujas</translation>
@@ -3937,6 +3941,7 @@
 <translation id="6298962879096096191">Izmantojiet Google Play, lai instalētu Android lietotnes</translation>
 <translation id="630065524203833229">I&amp;ziet</translation>
 <translation id="6300718114348072351">Printeri (<ph name="PRINTER_NAME" />) neizdevās konfigurēt automātiski. Lūdzu, norādiet detalizētu informāciju par printeri. <ph name="LINK_BEGIN" />Uzzināt vairāk<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Personas informācijas ieteikumi</translation>
 <translation id="6305607932814307878">Globālā politika:</translation>
 <translation id="6307990684951724544">Sistēma ir aizņemta.</translation>
 <translation id="6308493641021088955">Pierakstīšanos nodrošina <ph name="EXTENSION_NAME" /></translation>
@@ -4015,6 +4020,7 @@
 <translation id="641081527798843608">Temata atbilstība</translation>
 <translation id="6412673304250309937">Vietrāži URL tiek pārbaudīti, salīdzinot ar nedrošu vietņu sarakstu, kas glabājas pārlūkprogrammā Chrome. Ja kādā vietnē tiek mēģināts nozagt jūsu paroli vai ja jūs lejupielādējat kaitīgu failu, Chrome var nosūtīt attiecīgo URL un lapas satura fragmentus uz funkciju Droša pārlūkošana.</translation>
 <translation id="6412931879992742813">Jauns inkognito logs</translation>
+<translation id="6413591858632097328">Tādējādi tiks notīrīti visi vietnes <ph name="ORIGIN_NAME" /> un tās instalēto lietotņu saglabātie dati un sīkfaili.</translation>
 <translation id="641469293210305670">Atjauninājumu un lietotņu saglabāšana</translation>
 <translation id="6414888972213066896">Jūs lūdzāt vienam no vecākiem atļauju apmeklēt šo vietni</translation>
 <translation id="6415900369006735853">Piekļūstiet internetam, izmantojot tālruni</translation>
@@ -4825,7 +4831,6 @@
 <translation id="7530016656428373557">Izlādes ātrums vatos</translation>
 <translation id="7531779363494549572">Pārejiet uz sadaļu Iestatījumi &gt; Lietotnes un paziņojumi &gt; Paziņojumi.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> nereaģē. Lai aizvērtu lietotni, atlasiet vienumu “Aizvērt piespiedu kārtā”.</translation>
-<translation id="7536333565791380193">Papildu drošība</translation>
 <translation id="7537451260744431038">Vietnes nedrīkst izmantot sīkfailus, lai uzlabotu pārlūkošanas pieredzi, piemēram, lai nodrošinātu ilgstošu pierakstīšanos vai saglabātu iepirkumu grozā ievietotās preces.</translation>
 <translation id="7539856059004947393">Bluetooth drošības atslēga</translation>
 <translation id="7540972813190816353">Pārbaudot atjauninājumus, radās kļūda: <ph name="ERROR" /></translation>
@@ -5065,7 +5070,6 @@
     <ph name="BEGIN_BOLD" />Piezīme.<ph name="END_BOLD" /> Procesa laikā sistēma tiks atkārtoti palaista.</translation>
 <translation id="7828731929332799387">Tiks dzēsti visi sīkfaili un vietņu dati, kas pieejami trešo pušu kontekstā. Vai vēlaties turpināt?</translation>
 <translation id="7829298379596169484">Notiek piekļūšana audio ievadei</translation>
-<translation id="7829528495815477379">Pārlūkprogrammā <ph name="IDS_SHORT_PRODUCT_NAME" /> nevar pārbaudīt jūsu paroles. Pārbaudiet interneta savienojumu.</translation>
 <translation id="7829877209233347340">Lūdziet vienam no vecākiem pierakstīties, lai piešķirtu atļauju mācību iestādes konta pievienošanai</translation>
 <translation id="7830594666202422257">Izveidot savienojumu ar Linux</translation>
 <translation id="7831491651892296503">Tīkla konfigurācijas kļūda</translation>
@@ -5940,7 +5944,6 @@
 <translation id="8966870118594285808">Ja nejauši aizvērāt cilni, atveriet to atkārtoti</translation>
 <translation id="8967866634928501045">Lai skatītu saturu, nospiediet Alt+Shift+A.</translation>
 <translation id="8968766641738584599">Saglabāt karti</translation>
-<translation id="8971800409073702505">Pārlūkprogrammā <ph name="IDS_SHORT_PRODUCT_NAME" /> nevar pārbaudīt jūsu paroles. Mēģiniet vēlreiz pēc 24 stundām vai <ph name="BEGIN_LINK" />pārbaudiet paroles savā Google kontā<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Lūdzu, sazinieties ar savu tīkla administratoru, lai pārliecinātos, vai ugunsmūris nebloķē lejupielādes no Google serveriem.</translation>
 <translation id="8973557916016709913">Noņemt tālummaiņas līmeni</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index dc01ffde..7fdf85dff 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Додадени се обележувачи</translation>
 <translation id="2343747224442182863">Фокусирајте ја картичкава</translation>
 <translation id="2345723121311404059">1 страница на <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Услуга SODA</translation>
 <translation id="2347644257713614136">Користењето на Hangouts и „Cast за образование“ е регулирано со „Политиката за приватност на Google“.</translation>
 <translation id="2348176352564285430">Апликација: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Грешка при вчитувањето податоци</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Отпечатоци на овој безбедносен клуч</translation>
 <translation id="3973660817924297510">Се проверуваат лозинките (<ph name="CHECKED_PASSWORDS" /> од <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Контактирањето со серверот за домен не успеа</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да ги провери вашите лозинки. Обидете се пак подоцна.</translation>
 <translation id="3976108569178263973">Нема достапни печатачи.</translation>
 <translation id="397703832102027365">Се финализира...</translation>
 <translation id="3977886311744775419">Автоматските ажурирања не се преземаат автоматски на овој тип мрежа, но може да проверите дали има ажурирања рачно.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Fluffy</translation>
 <translation id="4423376891418188461">Обнови поставки</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, администраторот бара да ја смените лозинката.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да ги провери вашите лозинки. Обидете се пак по 24 часа.</translation>
 <translation id="4429030830601238961">Овие податоци ги прекршуваат безбедносните правила на вашата организација и не може да се залепат.</translation>
 <translation id="4430019312045809116">Гласност</translation>
 <translation id="4430369329743628066">Додаден е обележувач</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Дали сакате автоматски да ја стартувате оваа апликација кога се вклучува машината?</translation>
 <translation id="4441147046941420429">За да продолжите, отстранете го безбедносниот клуч од уредот, а потоа повторно вметнете го и допрете го</translation>
 <translation id="444134486829715816">Прошири…</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> може да ги проверува вашите лозинки кога ќе се најавите со вашата сметка на Google.</translation>
 <translation id="4442424173763614572">Барањето DNS не успеа</translation>
 <translation id="4443536555189480885">&amp;Помош</translation>
 <translation id="4444304522807523469">Пристап до скенери за документи поврзани преку USB или на локалната мрежа</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">За да го скенирате кодов, може да користите апликација за QR-скенер на вашиот телефон или некои апликации за камера.</translation>
 <translation id="4477015793815781985">Опфатете Ctrl, Alt или ⌘</translation>
 <translation id="4478664379124702289">Сними ја врс&amp;ката како…</translation>
-<translation id="4478777936860197922">Нема зачувани лозинки. <ph name="IDS_SHORT_PRODUCT_NAME" /> може да ги проверува вашите лозинки кога ги зачувувате.</translation>
 <translation id="4479424953165245642">Управување со киоск-апликации</translation>
 <translation id="4479639480957787382">Етернет</translation>
 <translation id="4479877282574735775">Се конфигурира виртуелната машина. Ова може да потрае неколку минути.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Не инсталирај</translation>
 <translation id="4850669014075537160">Лизгање</translation>
 <translation id="4850886885716139402">Приказ</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> ќе ве извести кога ќе се најавите со компромитирана лозинка</translation>
 <translation id="4853020600495124913">Отвори во &amp;нов прозорец</translation>
 <translation id="4854317507773910281">Избери сметка на родител за одобрување</translation>
 <translation id="485480310608090163">Повеќе лозинки и дозволи</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Стапка на празнење во вати</translation>
 <translation id="7531779363494549572">Одете во „Поставки &gt; Апликации и известувања &gt; Известувања“.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> не одговара. Изберете „Затвори присилно“ за да ја затворите.</translation>
-<translation id="7536333565791380193">Напредна безбедност</translation>
 <translation id="7537451260744431038">Сајтовите не може да користат колачиња за да го подобрат вашето доживување со прелистувањето, на пример, да ве одржат најавени или да запомнат ставки во кошничката за купување</translation>
 <translation id="7539856059004947393">Bluetooth безбедносен клуч</translation>
 <translation id="7540972813190816353">Настана грешка при проверка за ажурирања: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Напомена:<ph name="END_BOLD" /> системот ќе се рестартира во текот на процесот.</translation>
 <translation id="7828731929332799387">Ова ќе ги избрише сите колачиња и податоците за сајтовите што се достапни во контексти на трета страна. Дали сакате да продолжите?</translation>
 <translation id="7829298379596169484">Пристап до аудиовлез</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да ги провери вашите лозинки. Проверете ја интернет-врската.</translation>
 <translation id="7829877209233347340">Побарај од родителот да се најави за да даде дозвола за додавање училишна сметка</translation>
 <translation id="7830594666202422257">Поврзи се со Linux</translation>
 <translation id="7831491651892296503">Грешка при конфигурирање на мрежата</translation>
@@ -5955,7 +5947,6 @@
 <translation id="8966870118594285808">Повторно отворете картичка ако случајно сте ја затвориле</translation>
 <translation id="8967866634928501045">Притиснете Alt+Shift+A за да се прикаже</translation>
 <translation id="8968766641738584599">Зачувај ја картичката</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да ги провери вашите лозинки. Обидете се пак по 24 часа или <ph name="BEGIN_LINK" />проверете ги лозинките во сметката на Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Проверете кај мрежниот администратор за да се осигурите дека заштитниот ѕид не ги блокира преземањата од серверите на Google.</translation>
 <translation id="8973557916016709913">Отстрани ниво на зумирање</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index ce348dc..ecec3a3 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -37,7 +37,7 @@
 <translation id="1041263367839475438">ലഭ്യമായ ഉപകരണങ്ങൾ</translation>
 <translation id="1042174272890264476">നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ <ph name="SHORT_PRODUCT_NAME" /> എന്നതിന്റെ RLZ ലൈബ്രറി അന്തർനിർമ്മിതവുമാണ്. RLZ, ഒരു നിർദ്ദിഷ്‌ട പ്രമോഷണൽ കാമ്പെയ്‌നിലൂടെ ലഭിക്കുന്ന തിരയലുകളും <ph name="SHORT_PRODUCT_NAME" /> ഉപയോഗവും കണക്കാക്കുന്നതിന് അദ്വിതീയമല്ലാത്തതും വ്യക്തിപരമായി തിരിച്ചറിയാനാകാത്തതുമായ ഒരു ടാഗ് നിയുക്തമാക്കുന്നു. ഈ ലേബലുകൾ ചിലസമയത്ത് <ph name="PRODUCT_NAME" /> എന്നതിലെ Google തിരയലിൽ ദൃശ്യമാകുന്നു.</translation>
 <translation id="1043818413152647937">ഈ ആപ്പുകളിൽ നിന്നുള്ള ഡാറ്റയും മായ്ക്കണോ?</translation>
-<translation id="1045448422538531528">ഗ്രൂപ്പിലേക്ക് ചേര്‍‌ക്കുക</translation>
+<translation id="1045448422538531528">ഗ്രൂപ്പിലേക്ക് ചേർക്കുക</translation>
 <translation id="1046635659603195359">മറ്റൊരു ഉപകരണത്തിൽ മുമ്പേ നിങ്ങൾ Google അസിസ്റ്റന്‍റിനൊപ്പം Voice Match സജ്ജമാക്കിയിട്ടുള്ളതായി തോന്നുന്നു. ഈ ഉപകരണത്തിൽ ഒരു ശബ്‌ദ മോഡൽ സൃഷ്ടിക്കുന്നതിന് പഴയ റെക്കോർഡിംഗുകൾ ഉപയോഗപ്പെടുത്താം. ഇതിന് ഒരു മിനിറ്റിൽ കുറവ് സമയമേ എടുക്കൂ.</translation>
 <translation id="104710386808485638">Linux റീസ്റ്റാർട്ട് ചെയ്യണോ?</translation>
 <translation id="1047431265488717055">ലിങ്ക് ടെ&amp;ക്‌സ്റ്റ് പകർത്തുക</translation>
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">ബുക്ക്മാർക്ക് പേര്</translation>
 <translation id="1124772482545689468">ഉപയോക്താവ്</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (നേറ്റീവ്) പോലെ തോന്നുന്നു</translation>
+<translation id="1126809382673880764">അപകടകരമായ വെബ്‌സൈറ്റുകൾ ഡൗൺലോഡുകൾ, വിപുലീകരണങ്ങൾ എന്നിവയിൽ നിന്ന് നിങ്ങളെ പരിരക്ഷിക്കില്ല. Gmail, Search പോലുള്ള മറ്റ് Google സേവനങ്ങളിൽ ഉള്ള സുരക്ഷിത ബ്രൗസിംഗ് പരിരക്ഷ നിങ്ങൾക്ക് തുടർന്നും ലഭിക്കും.</translation>
 <translation id="1128109161498068552">MIDI ഉപകരണങ്ങൾ ആക്‌സസ്സുചെയ്യുന്നതിന് സിസ്റ്റം എക്‌സ്‌ക്ലൂസീവ് സന്ദേശങ്ങൾ ഉപയോഗിക്കുന്നതിന് ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്.</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">തിരയൽ യന്ത്രം എഡിറ്റ് ചെയ്യുക</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">അറിയാവുന്ന നെറ്റ്‌വർക്കുകൾ</translation>
 <translation id="123578888592755962">ഡിസ്‌ക് നിറഞ്ഞു</translation>
 <translation id="1238191093934674082">VPN തുറക്കുക</translation>
+<translation id="1239439601391236986">വ്യക്തിപര വിവര ഇന്‍‌പുട്ട് നിർദ്ദേശങ്ങൾ കാണിക്കുക</translation>
 <translation id="1239594683407221485">ഫയലുകള്‍ ആപ്പിൽ ഉപകരണത്തിന്റെ ഉള്ളടക്കം അടുത്തറിയൂ.</translation>
 <translation id="124116460088058876">കൂടുതൽ ഭാഷകൾ</translation>
 <translation id="1241753985463165747">നിർദ്ദേശിക്കപ്പെടുമ്പോൾ നിലവിലെ വെബ്‌സൈറ്റിലെ നിങ്ങളുടെ ഡാറ്റ മുഴുവൻ വായിച്ച് അതിൽ മാറ്റം വരുത്തുക</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">സെല്ലുലാൽ നെറ്റ്‌വർക്ക് സജീവമാക്കൽ</translation>
 <translation id="1407489512183974736">മധ്യഭാഗത്ത് മുറിക്കുക</translation>
 <translation id="1408504635543854729">'ഫയലുകൾ' ആപ്പിലെ ഉപകരണ ഉള്ളടക്കം അടുത്തറിയുക. ഒരു അഡ്‌മിൻ, ഉള്ളടക്കം നിയന്ത്രിതമാക്കിയതിനാൽ അതിൽ മാറ്റം വരുത്താനാകില്ല.</translation>
+<translation id="1408980562518920698">വ്യക്തിപര വിവരങ്ങൾ മാനേജ് ചെയ്യുക</translation>
 <translation id="1410197035576869800">ആപ്പ് ഐക്കൺ</translation>
 <translation id="1410616244180625362">നിങ്ങളുടെ ക്യാമറ ആക്‌സസ് ചെയ്യുന്നതിന് <ph name="HOST" />-നെ അനുവദിക്കുന്നത് തുടരുക</translation>
 <translation id="1414648216875402825">നിങ്ങൾ പുരോഗതിയിലുള്ള സവിശേഷതകൾ അടങ്ങിയ <ph name="PRODUCT_NAME" />-ന്റെ അസ്ഥിരമായ പതിപ്പിലേക്ക് അപ്‌ഡേറ്റ് ചെയ്യുന്നു. ക്രാഷുകളും അപ്രതീക്ഷിത ബഗ്ഗുകളും ഉണ്ടാകും. കരുതലോടെ മുന്നോട്ടുപോകുക.</translation>
@@ -431,6 +434,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript കണ്‍സോള്‍</translation>
 <translation id="1587907146729660231">നിങ്ങളുടെ വിരൽ ഉപയോഗിച്ച് പവര്‍ ബട്ടൺ സ്‌പർശിക്കുക</translation>
+<translation id="1588200577109872591">സ്‌മാർട്ട് ഇൻപുട്ടുകൾ</translation>
 <translation id="1588438908519853928">സാധാരണം</translation>
 <translation id="158849752021629804">ഹോം നെറ്റ്‍വര്‍ക്ക് ആവശ്യമുണ്ട്</translation>
 <translation id="1588870296199743671">ഇതിനൊപ്പം ലിങ്ക് തുറക്കുക...</translation>
@@ -666,6 +670,7 @@
 <translation id="1879000426787380528">എന്ന പേരിൽ സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" എന്ന സർട്ടിഫിക്കറ്റ് ഇല്ലാതാക്കണോ?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" />-ൽ <ph name="NETWORK_INDEX" /> നെറ്റ്‌വർക്ക്, <ph name="NETWORK_NAME" />, കണക്‌റ്റ് ചെയ്യുക</translation>
+<translation id="1884705339276589024">Linux ഡിസ്‌ക്കിന്റെ വലുപ്പം‌ മാറ്റുക</translation>
 <translation id="1886996562706621347">പ്രോട്ടോകോളുകള്‍ക്കായി ഡിഫോൾട്ട് ഹാന്‍ഡ്‌ലറുകള്‍ ആകുന്നത് ആവശ്യപ്പെടാൻ സൈറ്റുകളെ അനുവദിക്കുന്നു (ശുപാർശ ചെയ്തിരിക്കുന്നത്)</translation>
 <translation id="1887442540531652736">സൈൻ-ഇൻ പിശക്</translation>
 <translation id="1887597546629269384">"Hey Google" എന്ന് വീണ്ടും പറയുക</translation>
@@ -735,6 +740,7 @@
 <translation id="1979280758666859181"><ph name="PRODUCT_NAME" />-ന്‍റെ പഴയ പതിപ്പിലുള്ള ചാനലിലേക്ക് നിങ്ങൾ മാറുന്നു. ഉപകരണത്തിൽ നിലവിൽ ഇൻസ്റ്റാൾ ചെയ്‌തിരിക്കുന്ന പതിപ്പുമായി ചാനൽ പതിപ്പ് പൊരുത്തപ്പെടുമ്പോൾ മാറ്റം ബാധകമാക്കും.</translation>
 <translation id="197989455406964291">എൻക്രിപ്ഷൻ രീതി KDC പിന്തുണയ്ക്കുന്നില്ല</translation>
 <translation id="1982354452682152483">വിവരണം ലഭ്യമല്ല.</translation>
+<translation id="1984417487208496350">പരിരക്ഷയില്ല (ശുപാർശ ചെയ്യുന്നില്ല)</translation>
 <translation id="1987317783729300807">അക്കൗണ്ടുകൾ</translation>
 <translation id="1989112275319619282">ബ്രൗസ് ചെയ്യുക</translation>
 <translation id="1990512225220753005">ഈ പേജിൽ കുറുക്കുവഴികൾ കാണിക്കരുത്</translation>
@@ -804,6 +810,7 @@
 <translation id="2090165459409185032">അക്കൗണ്ട് വിവരങ്ങൾ വീണ്ടെടുക്കാൻ, ഇതിലേക്ക് പോകുക: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">സിസ്റ്റം സുരക്ഷ ക്രമീകരണങ്ങള്‍</translation>
 <translation id="2091887806945687916">ശബ്‌ദം</translation>
+<translation id="2096478741073211388">ചില നിർദ്ദിഷ്ട പദങ്ങൾ ടൈപ്പ് ചെയ്യുമ്പോൾ നിങ്ങളുടെ പേരോ വിലാസമോ ഫോൺ നമ്പറോ നിർദ്ദേശിച്ച് വേഗത്തിൽ എഴുതാൻ വ്യക്തിപര വിവര നിർദ്ദേശങ്ങൾ നിങ്ങളെ സഹായിക്കുന്നു. നിങ്ങളുടെ അക്കൗണ്ടിനുള്ള സ്വകാര്യവും വ്യക്തിപരമാക്കിയതുമായ നിർദ്ദേശങ്ങൾ നിങ്ങൾ മാത്രം കാണുന്നു.</translation>
 <translation id="2096715839409389970">മൂന്നാം കക്ഷി കുക്കികൾ മായ്‌ക്കുക</translation>
 <translation id="2097372108957554726">പുതിയ ഉപകരണങ്ങൾ രജിസ്റ്റർ ചെയ്യാൻ നിങ്ങൾ Chrome-ൽ സൈൻ ഇൻ ചെയ്യണം</translation>
 <translation id="2099172618127234427">sshd daemon സജ്ജീകരിക്കുന്നതും USB ഡ്രൈവുകളിൽ നിന്ന് ബൂട്ട് ചെയ്യൽ പ്രവർത്തനക്ഷമമാക്കുന്നതുമായ Chrome OS ഡീബഗ് ചെയ്യൽ ഫീച്ചറുകൾ നിങ്ങൾ പ്രവർത്തനക്ഷമമാക്കുന്നു.</translation>
@@ -820,6 +827,7 @@
 <translation id="2114326799768592691">റീലോഡും ഫ്രെയിമും</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> എന്നയാൾ എടുത്ത ഫോട്ടോ</translation>
 <translation id="2119349053129246860"><ph name="APP" /> ആപ്പിൽ തുറക്കുക</translation>
+<translation id="2119461801241504254">സുരക്ഷിത ബ്രൗസിംഗ് ഓണാണ്, കൂടാതെ ദോഷകരമായ സൈറ്റുകളിൽ നിന്നും ഡൗൺലോഡുകളിൽ നിന്നും നിങ്ങളെ പരിരക്ഷിക്കുന്നു</translation>
 <translation id="2120297377148151361">പ്രവർത്തനവും ആശയവിനിമയങ്ങളും</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{കുക്കികൾ ബ്ലോക്ക് ചെയ്‌തിരിക്കുന്നു}=1{കുക്കികൾ ബ്ലോക്ക് ചെയ്‌തിരിക്കുന്നു, ഒരു ഒഴിവാക്കൽ}other{കുക്കികൾ ബ്ലോക്ക് ചെയ്‌തിരിക്കുന്നു, {COUNT} ഒഴിവാക്കലുകൾ}}</translation>
@@ -1000,7 +1008,6 @@
 <translation id="2342740338116612727">ബുക്ക്‌മാര്‍ക്കുകള്‍ ചേര്‍ത്തു</translation>
 <translation id="2343747224442182863">ഈ ടാബ് ഫോക്കസ് ചെയ്യുക</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> പ്രിന്ററിലേക്ക് ഒരു പേജ്</translation>
-<translation id="2346953515226895098">SODA സേവനം</translation>
 <translation id="2347644257713614136">Hangouts, വിദ്യാഭ്യാസത്തിനുള്ള Cast എന്നിവയുടെ ഉപയോഗത്തെ നിയന്ത്രിക്കുന്നത് Google സ്വകാര്യതാ നയമാണ്.</translation>
 <translation id="2348176352564285430">ആപ്പ്: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ഡാറ്റ ലോഡ് ചെയ്യുന്നതിൽ പിശക്</translation>
@@ -1888,6 +1895,7 @@
 <translation id="3515983984924808886">റീസെറ്റ് ചെയ്യൽ സ്ഥിരീകരിക്കാൻ വീണ്ടും നിങ്ങളുടെ സുരക്ഷാ കീ സ്‌പർശിക്കുക. പിൻ ഉൾപ്പെടെ സുരക്ഷാ കീയിൽ സംഭരിച്ചിരിക്കുന്ന എല്ലാ വിവരങ്ങളും ഇല്ലാതാക്കപ്പെടും.</translation>
 <translation id="3518985090088779359">അംഗീകരിച്ച് തുടരുക</translation>
 <translation id="351952459507671940">പുതിയ ഗ്രൂപ്പിലേക്ക് ചേർക്കുക</translation>
+<translation id="3521606918211282604">ഡിസ്ക്കിന്റെ വലുപ്പം മാറ്റുക</translation>
 <translation id="3523642406908660543">നിങ്ങളുടെ കമ്പ്യൂട്ടർ ആക്‌സസ് ചെയ്യാൻ ഒരു സൈറ്റ്, പ്ലഗ്-ഇൻ ഉപയോഗിക്കാൻ താൽപ്പര്യപ്പെടുമ്പോൾ എന്നോട് ചോദിക്കുക (ശുപാർശ ചെയ്യുന്നു)</translation>
 <translation id="3524965460886318643">ആക്‌റ്റിവിറ്റികൾ എക്‌സ്‌പോർട്ട് ചെയ്യുക</translation>
 <translation id="3526034519184079374">സൈറ്റിന്‍റെ ഡാറ്റ വായിക്കാനോ മാറ്റാനോ കഴിയില്ല</translation>
@@ -1975,6 +1983,7 @@
 <translation id="3629631988386925734">Smart Lock പ്രവർത്തനക്ഷമമാക്കാൻ നിങ്ങളുടെ പാസ്‌വേഡ് നൽകുക. അടുത്ത തവണ നിങ്ങളുടെ ഫോൺ <ph name="DEVICE_TYPE" /> അൺലോക്ക് ചെയ്യും. ക്രമീകരണത്തിൽ Smart Lock ഓഫാക്കാം.</translation>
 <translation id="3630132874740063857">നിങ്ങളുടെ ഫോൺ</translation>
 <translation id="3630995161997703415">എപ്പോൾ വേണമെങ്കിലും ഉപയോഗിക്കാൻ ഈ സൈറ്റിനെ നിങ്ങളുടെ ഷെൽഫിൽ ചേർക്കുക</translation>
+<translation id="3633309367764744750">നിങ്ങൾ ഇതുവരെ സന്ദർശിച്ചിട്ടില്ലാത്ത പേജുകൾ ഉൾപ്പെടെയുള്ള പേജുകളിൽ നിന്ന് വിവരങ്ങൾ മുൻ‌കൂട്ടി ലഭ്യമാക്കുന്നു. നിങ്ങൾ കുക്കികൾ അനുവദിക്കുകയാണെങ്കിൽ, ലഭിച്ച വിവരങ്ങളിൽ കുക്കികൾ ഉൾപ്പെട്ടേക്കാം.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />-ൽ <ph name="NETWORK_INDEX" /> നെറ്റ്‌വർക്ക്, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, നിങ്ങളുടെ അഡ്‌മിൻ മാനേജ് ചെയ്യുന്നത്, വിശദാംശങ്ങൾ</translation>
 <translation id="3635241501480133979">ഈ ഡാറ്റ നിങ്ങളുടെ ഓർഗനൈസേഷന്റെ സുരക്ഷാ നയങ്ങൾ ലംഘിക്കുന്നതിനാൽ ഇത് വലിച്ചിടാനാവില്ല.</translation>
 <translation id="3635353578505343390">Google-ലേക്ക് ഫീഡ്ബാക്ക് അയയ്ക്കുക</translation>
@@ -2272,7 +2281,6 @@
 <translation id="3971764089670057203">ഈ സുരക്ഷാ കീയിലെ ഫിംഗർപ്രിന്റുകൾ</translation>
 <translation id="3973660817924297510">പാസ്‌വേഡുകൾ പരിശോധിക്കുന്നു (<ph name="TOTAL_PASSWORDS" />-ൽ <ph name="CHECKED_PASSWORDS" /> എണ്ണം)…</translation>
 <translation id="3975565978598857337">മേഖലയ്ക്കുള്ള സെർവറുമായി ബന്ധപ്പെടുന്നത് പരാജയപ്പെട്ടു</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" />-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവുന്നില്ല. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="3976108569178263973">ലഭ്യമായ പ്രിന്ററുകളൊന്നുമില്ല.</translation>
 <translation id="397703832102027365">തീര്‍ച്ചപ്പെടുത്തുന്നു...</translation>
 <translation id="3977886311744775419">ഈ നെറ്റ്‌വർക്ക് തരത്തിൽ സ്വയമേവയുള്ള അപ്‌ഡേറ്റുകൾ ഡൗൺലോഡ് ആകില്ല, എന്നാൽ നേരിട്ടുള്ള അപ്‌ഡേറ്റുകൾക്കായി നിങ്ങൾക്ക് പരിശോധിക്കാവുന്നതാണ്.</translation>
@@ -2573,7 +2581,6 @@
 <translation id="4421932782753506458">ഫ്ലഫി</translation>
 <translation id="4423376891418188461">ക്രമീകരണം പുനഃസ്ഥാപിക്കുക</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, അഡ്‌മിൻ നിങ്ങളുടെ പാസ്‌വേഡ് മാറ്റാൻ ആവശ്യപ്പെടുന്നു.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" />-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവുന്നില്ല. 24 മണിക്കൂറിന് ശേഷം വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="4429030830601238961">ഈ ഡാറ്റ നിങ്ങളുടെ ഓർഗനൈസേഷന്റെ സുരക്ഷാ നയങ്ങൾ ലംഘിക്കുന്നതിനാൽ ഇത് ഒട്ടിക്കാനാവില്ല.</translation>
 <translation id="4430019312045809116">അളവ്</translation>
 <translation id="4430369329743628066">ബുക്ക്‌മാർക്ക് ചേർത്തു</translation>
@@ -2586,7 +2593,6 @@
 <translation id="4441124369922430666">മെഷീൻ ഓണാകുമ്പോൾ ഈ ആപ്പ് സ്വയമേവ ആരംഭിക്കാൻ നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടോ?</translation>
 <translation id="4441147046941420429">തുടരാൻ, നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് സുരക്ഷാ കീ നീക്കം ചെയ്ത ശേഷം അത് വീണ്ടും പ്ലഗ് ഇൻ ചെയ്ത് സ്പർശിക്കുക</translation>
 <translation id="444134486829715816">വികസിപ്പിക്കുക...</translation>
-<translation id="4442329324652245220">നിങ്ങളുടെ Google അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുമ്പോൾ, <ph name="IDS_SHORT_PRODUCT_NAME" />-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവും</translation>
 <translation id="4442424173763614572">DNS തിരയൽ പരാജയപ്പെട്ടു</translation>
 <translation id="4443536555189480885">&amp;സഹായം</translation>
 <translation id="4444304522807523469">USB വഴിയോ പ്രാദേശിക നെറ്റ്‌വർക്കിലോ അറ്റാച്ച് ചെയ്‌ത പ്രമാണ സ്‌കാനറുകൾ ആക്‌സസ് ചെയ്യുക</translation>
@@ -2613,7 +2619,6 @@
 <translation id="4476659815936224889">ഈ കോഡ് സ്കാൻ ചെയ്യാൻ നിങ്ങളുടെ ഫോണിൽ ഒരു QR സ്കാനർ ആപ്പ് ഉപയോഗിക്കാം അല്ലെങ്കിൽ ചില ക്യാമറാ ആപ്പുകൾ ഉപയോഗിക്കാം.</translation>
 <translation id="4477015793815781985">Ctrl, Alt, അല്ലെങ്കിൽ ⌘ ഉൾപ്പെടുത്തുക</translation>
 <translation id="4478664379124702289">ലി&amp;ങ്ക് ഇതായി സംരക്ഷിക്കുക...</translation>
-<translation id="4478777936860197922">സംരക്ഷിച്ച പാസ്‌വേഡുകളൊന്നുമില്ല. നിങ്ങളുടെ പാസ്‌വേഡുകൾ സംരക്ഷിക്കുകയാണങ്കിൽ, <ph name="IDS_SHORT_PRODUCT_NAME" />-ന് അവ പരിശോധിക്കാനാവും.</translation>
 <translation id="4479424953165245642">കിയോസ്‌ക് അപ്ലിക്കേഷനുകൾ നിയന്ത്രിക്കുക</translation>
 <translation id="4479639480957787382">എതെര്‍‌നെറ്റ്</translation>
 <translation id="4479877282574735775">വെർച്വൽ മെഷീൻ കോണ്‍ഫിഗര്‍ ചെയ്യുന്നു. ഇതിന് കുറച്ച് സമയമെടുത്തേക്കാം.</translation>
@@ -2859,7 +2864,6 @@
 <translation id="4849517651082200438">ഇൻസ്റ്റാൾ ചെയ്യരുത്</translation>
 <translation id="4850669014075537160">സ്‌ക്രോൾ ചെയ്യൽ</translation>
 <translation id="4850886885716139402">കാണുക</translation>
-<translation id="485197095346966382">അപഹരിക്കപ്പെട്ട പാസ്‌വേഡ് ഉപയോഗിച്ച് നിങ്ങൾ സൈൻ ഇൻ ചെയ്യുമ്പോൾ <ph name="IDS_SHORT_PRODUCT_NAME" /> നിങ്ങളെ അറിയിക്കും</translation>
 <translation id="4853020600495124913">&amp;പുതിയ വിന്‍‌ഡോയില്‍‌ തുറക്കുക</translation>
 <translation id="4854317507773910281">അംഗീകാരത്തിനായി രക്ഷാകർതൃ അക്കൗണ്ട് തിരഞ്ഞെടുക്കുക</translation>
 <translation id="485480310608090163">കൂടുതൽ ക്രമീകരണവും അനുമതികളും</translation>
@@ -2878,7 +2882,7 @@
 <translation id="4871322859485617074">അസാധുവായ പ്രതീകങ്ങളുള്ള പിൻ</translation>
 <translation id="4871370605780490696">ബുക്ക്‌മാർക്ക് ചേർക്കുക</translation>
 <translation id="4871719318659334896">ഗ്രൂപ്പ് അടയ്ക്കുക</translation>
-<translation id="4871852311166078968">ഗ്രൂപ്പിലേക്ക് ചേര്‍‌ക്കുക</translation>
+<translation id="4871852311166078968">ഗ്രൂപ്പിലേക്ക് ചേർക്കുക</translation>
 <translation id="4873312501243535625">മീഡിയ ഫയൽ ചെക്കർ</translation>
 <translation id="4876273079589074638">ഈ ക്രാഷിനെ കുറിച്ച് അന്വേഷിക്കാനും അത് പരിഹരിക്കാനും ഞങ്ങളുടെ എഞ്ചിനീയർമാരെ സഹായിക്കുക. കഴിയുമെങ്കിൽ കൃത്യമായ ഘട്ടങ്ങൾ ലിസ്‌റ്റ് ചെയ്യുക. ഒരു വിശദാംശവും ചെറുതല്ല!</translation>
 <translation id="4876895919560854374">സ്ക്രീൻ ലോക്ക് ചെയ്യുക, അൺലോക്ക് ചെയ്യുക</translation>
@@ -3935,6 +3939,7 @@
 <translation id="6298962879096096191">Android ആപ്പുകൾ ഇൻസ്‌റ്റാൾ ചെയ്യാൻ Google Play ഉപയോഗിക്കുക</translation>
 <translation id="630065524203833229">&amp;പുറത്തുപോകുക</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> സ്വയമേവ കോൺഫിഗർ ചെയ്യാനായില്ല. വിപുലമായ പ്രിൻ്റർ വിശദാംശങ്ങൾ വ്യക്തമാക്കുക. <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">വ്യക്തിപര വിവര നിർദ്ദേശങ്ങൾ</translation>
 <translation id="6305607932814307878">ആഗോള നയം:</translation>
 <translation id="6307990684951724544">സിസ്റ്റം തിരക്കിലാണ്</translation>
 <translation id="6308493641021088955">സൈൻ ഇൻ ലഭ്യമാക്കിയത് <ph name="EXTENSION_NAME" /></translation>
@@ -4013,6 +4018,7 @@
 <translation id="641081527798843608">പൊരുത്തപ്പെടുന്ന വിഷയം</translation>
 <translation id="6412673304250309937">Chrome-ൽ സംഭരിച്ചിരിക്കുന്ന സുരക്ഷിതമല്ലാത്ത സൈറ്റുകളുടെ ലിസ്റ്റ് ഉപയോഗിച്ച് URL-കൾ പരിശോധിക്കുന്നു. ഒരു സൈറ്റ് നിങ്ങളുടെ പാസ്‌വേഡ് മോഷ്‌ടിക്കാൻ ശ്രമിക്കുമ്പോഴോ നിങ്ങൾ ഒരു ദോഷകരമായ ഫയൽ ഡൗൺലോഡ് ചെയ്യുമ്പോഴോ, പേജ് ഉള്ളടക്കത്തിന്റെ ബിറ്റുകൾ ഉൾപ്പെടെയുള്ള URL-കളും Chrome സുരക്ഷിത ബ്രൗസിംഗിലേക്ക് അയച്ചേക്കാം.</translation>
 <translation id="6412931879992742813">പുതിയ അദൃശ്യ വിൻഡോ</translation>
+<translation id="6413591858632097328">ഇത് <ph name="ORIGIN_NAME" /> എന്നതും ഇതിന്റെ ഇൻസ്‌റ്റാൾ ചെയ്തിരിക്കുന്ന ആപ്പുകളും സംഭരിച്ചിട്ടുള്ള എല്ലാ ഡാറ്റയും കുക്കികളും മായ്ക്കും.</translation>
 <translation id="641469293210305670">അപ്‌ഡേറ്റുകളും ആപ്പുകളും ഇൻസ്‌റ്റാൾ ചെയ്യൽ</translation>
 <translation id="6414888972213066896">ഈ സൈറ്റ് സന്ദർശിക്കുന്നതിന് നിങ്ങൾ രക്ഷിതാവിനോട് അനുമതി ആവശ്യപ്പെട്ടു</translation>
 <translation id="6415900369006735853">ഫോണിലൂടെ ഇന്‍റർനെറ്റ് കണക്‌റ്റ് ചെയ്യുക</translation>
@@ -4823,7 +4829,6 @@
 <translation id="7530016656428373557">ഡിസ്ചാർജ്ജ് നിരക്ക് വാട്‌സിൽ</translation>
 <translation id="7531779363494549572">ക്രമീകരണം &gt; ആപ്പുകളും അറിയിപ്പുകളും &gt; അറിയിപ്പുകൾ എന്നതിലേക്ക് പോവുക.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> പ്രതികരിക്കുന്നില്ല. ആപ്പ് അടയ്ക്കാൻ, "നിർബന്ധിതമായി അടയ്ക്കുക" തിരഞ്ഞെടുക്കുക.</translation>
-<translation id="7536333565791380193">വിപുലീകരിച്ച സുരക്ഷ</translation>
 <translation id="7537451260744431038">നിങ്ങളുടെ ബ്രൗസിംഗ് അനുഭവം മെച്ചപ്പെടുത്താൻ സൈറ്റുകൾക്ക് കുക്കികൾ ഉപയോഗിക്കാനാവില്ല, ഉദാഹരണത്തിന്, സൈൻ ഇൻ ചെയ്‌ത നിലയിൽ തുടരാനോ ഷോപ്പിംഗ് കാർട്ടിലെ ഇനങ്ങൾ ഓർമ്മിക്കാനോ</translation>
 <translation id="7539856059004947393">Bluetooth സുരക്ഷാ കീ</translation>
 <translation id="7540972813190816353">അപ്‌ഡേറ്റുകൾക്കായി പരിശോധിക്കുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു: <ph name="ERROR" /></translation>
@@ -5064,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />കുറിപ്പ്:<ph name="END_BOLD" />  പ്രോസസ് വേളയിൽ സിസ്റ്റം റീബൂട്ട് ചെയ്യും.</translation>
 <translation id="7828731929332799387">മൂന്നാം കക്ഷികളുമായി ബന്ധപ്പെട്ട സന്ദർഭങ്ങളിൽ ലഭ്യമായ എല്ലാ സൈറ്റ് ഡാറ്റയും കുക്കികളും ഇത് ഇല്ലാതാക്കും. തുടരാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?</translation>
 <translation id="7829298379596169484">ഓഡിയോ ഇൻപുട്ട് ആക്‌സസ്സുചെയ്യുന്നു</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" />-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവുന്നില്ല. നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക.</translation>
 <translation id="7829877209233347340">സ്‌കൂൾ അക്കൗണ്ട് ചേർക്കുന്നതിന് അനുമതി നൽകാൻ രക്ഷിതാവിനോട് സൈൻ ഇൻ ചെയ്യാൻ ആവശ്യപ്പെടുക</translation>
 <translation id="7830594666202422257">Linux-ലേക്ക് കണക്റ്റ് ചെയ്യുക</translation>
 <translation id="7831491651892296503">നെറ്റ്‍വര്‍ക്ക് കോണ്‍ഫിഗര്‍ ചെയ്യുന്നതിൽ പിശക്</translation>
@@ -5938,7 +5942,6 @@
 <translation id="8966870118594285808">നിങ്ങൾ അബദ്ധത്തിൽ ഒരു ടാബ് അടച്ചിട്ടുണ്ടെങ്കിൽ അത് വീണ്ടും തുറക്കുക</translation>
 <translation id="8967866634928501045">കാണിക്കാനായി Alt Shift A അമർത്തുക</translation>
 <translation id="8968766641738584599">കാർഡ് സംരക്ഷിക്കുക</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" />-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവുന്നില്ല. 24 മണിക്കൂറിന് ശേഷം വീണ്ടും ശ്രമിക്കുക അല്ലെങ്കിൽ <ph name="BEGIN_LINK" />നിങ്ങളുടെ Google അക്കൗണ്ടിലെ പാസ്‌വേഡുകൾ പരിശോധിക്കുക<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">എസ്‌കേപ്പ്</translation>
 <translation id="8972513834460200407">ഫയർവാൾ Google സെർവറുകളിൽ നിന്ന് ഡൗൺലോഡുകൾ തടയുന്നില്ലെന്ന് ഉറപ്പുവരുത്താൻ, നിങ്ങളുടെ നെറ്റ്‌വർക്ക് അഡ്‌മിനിസ്‌ട്രേറ്ററുടെ സഹായം തേടുക.</translation>
 <translation id="8973557916016709913">സൂം ലെവൽ നീക്കംചെയ്യുക</translation>
@@ -5963,7 +5966,7 @@
 <translation id="899657321862108550">നിങ്ങളുടെ Chrome, എല്ലായിടത്തും</translation>
 <translation id="899676909165543803">നിങ്ങളുടെ കീബോർഡിലെ താഴെ വലതുഭാഗത്തുള്ള കീയാണ് വിരലടയാള സെൻസർ. ഏതെങ്കിലും വിരലുകൊണ്ട് അതിൽ മൃദുവായി സ്‌പർശിക്കുക.</translation>
 <translation id="8999560016882908256">വിഭാഗ വാക്യഘടനാ പിശക്: <ph name="ERROR_LINE" /></translation>
-<translation id="9002878223019487115"><ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /> എന്നിവ</translation>
+<translation id="9002878223019487115"><ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation>
 <translation id="9003647077635673607">എല്ലാ വെബ്‌സൈറ്റുകളിലും അനുവദിക്കുക</translation>
 <translation id="9003677638446136377">വീണ്ടും പരിശോധിക്കുക</translation>
 <translation id="9003704114456258138">ആവൃത്തി</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index abc28cc..4ffc6a6 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Хадгалагдсан хуудасны нэр</translation>
 <translation id="1124772482545689468">Хэрэглэгч</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> юм шиг харагдаж байна (Үндсэн)</translation>
+<translation id="1126809382673880764">Таныг аюултай вэб сайт, таталт болон өргөтгөлөөс хамгаалахгүй. Гэхдээ та Аюулгүй үзэх хамгаалалтыг Gmail, Хайлт зэрэг Google-н боломжтой бусад үйлчилгээнд авсан хэвээр байна.</translation>
 <translation id="1128109161498068552">Системийн тусгай мессеж ашиглан MIDI төхөөрөмжинд хандах үйлдлийг аль ч сайтад үл зөвшөөрөх</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Хайлтын системийг засах</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Мэдэгдэж байгаа сүлжээ</translation>
 <translation id="123578888592755962">Диск дүүрсэн</translation>
 <translation id="1238191093934674082">VPN-г нээх</translation>
+<translation id="1239439601391236986">Оруулах хувийн мэдээллийн зөвлөмжийг харуулах</translation>
 <translation id="1239594683407221485">Файлc апп дээр төхөөрөмжийн агуулгыг судлах</translation>
 <translation id="124116460088058876">Бусад хэл</translation>
 <translation id="1241753985463165747">Одоогийн вэбсайтыг ажиллуулж байх үед бүх өгөгдлөө унших, өөрчлөх</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Үүрэн сүлжээний идэвхжүүлэлт</translation>
 <translation id="1407489512183974736">Төвийг хайчилсан</translation>
 <translation id="1408504635543854729">Файлс апп доторх төхөөрөмжийн агуулгыг судална уу. Агуулгыг админ хязгаарласан ба өөрчлөх боломжгүй.</translation>
+<translation id="1408980562518920698">Хувийн мэдээллийг удирдах</translation>
 <translation id="1410197035576869800">Aппын дүрс тэмдэг</translation>
 <translation id="1410616244180625362"><ph name="HOST" /> нь таны камерт хандах зөвшөөрлийг үргэлжлүүл.</translation>
 <translation id="1414648216875402825">Та <ph name="PRODUCT_NAME" />-ийн боловсруулалтын явцдаа байгаа функцууд агуулсан тогтворгүй хувилбарыг шинэчилж байна. Гэмтэл болон гэнэтийн асуудлууд үүсч болохыг анхаарна уу.</translation>
@@ -430,6 +433,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript системийн удирдлагын мессеж</translation>
 <translation id="1587907146729660231">Асаах товчийг хуруугаараа товшино уу</translation>
+<translation id="1588200577109872591">Ухаалаг оролтууд</translation>
 <translation id="1588438908519853928">Хэвийн</translation>
 <translation id="158849752021629804">Гэрийн сүлжээ хэрэгтэй</translation>
 <translation id="1588870296199743671">Холбоосыг хэрхэн нээх...</translation>
@@ -665,6 +669,7 @@
 <translation id="1879000426787380528">-р нэвтрэх</translation>
 <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" сертификатыг устгах уу?</translation>
 <translation id="1884013283844450420">Сүлжээ: <ph name="NETWORK_COUNT" />-н <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, холбогдох</translation>
+<translation id="1884705339276589024">Linux дискийн хэмжээг өөрчлөх</translation>
 <translation id="1886996562706621347">Сайтуудыг протоколуудын тогмтол удирдагч байхыг зөвшөөр (зөвлж байна)</translation>
 <translation id="1887442540531652736">Нэвтрэлтийн алдаа</translation>
 <translation id="1887597546629269384">"Hey Google" гэж дахин хэлнэ үү</translation>
@@ -734,6 +739,7 @@
 <translation id="1979280758666859181">Та сувгаа <ph name="PRODUCT_NAME" />-ийн хуучин хувилбар луу сольж байна. Сувгийн хувилбар нь одоогоор таны төхөөрөмж дээр суулгасан хувилбартай таарч байгаа үед сувгийн өөрчлөлт хэрэгжинэ.</translation>
 <translation id="197989455406964291">KDC нь шифрлэлтийн төрлийг дэмждэггүй</translation>
 <translation id="1982354452682152483">Боломжтой тайлбар алга.</translation>
+<translation id="1984417487208496350">Хамгаалалт байхгүй (зөвлөдөггүй)</translation>
 <translation id="1987317783729300807">Хаяг</translation>
 <translation id="1989112275319619282">Хөтлөх</translation>
 <translation id="1990512225220753005">Энэ хуудсан дээр товчлолыг бүү үзүүл</translation>
@@ -803,6 +809,7 @@
 <translation id="2090165459409185032">бүртгэлныхаа мэдээллийг сэргээхийн тулд: google.com/accounts/recovery руу орно уу</translation>
 <translation id="2090876986345970080">Системийн аюулгүй байдлын тохиргоо</translation>
 <translation id="2091887806945687916">Дуу</translation>
+<translation id="2096478741073211388">Таныг зарим тусгай үгийг бичих үед хувийн мэдээллийн зөвлөмж нь таны нэр, хаяг, утасны дугаарыг санал болгож, илүү хурдан бичихэд тусалдаг. Зөвхөн та л таны бүртгэлд зориулсан хувийн бөгөөд хувийн болгосон зөвлөмжүүдийг харах боломжтой.</translation>
 <translation id="2096715839409389970">Гуравдагч талын күүкиг устгах</translation>
 <translation id="2097372108957554726">Та шинэ төхөөрөмжүүдийг бүртгүүлэхийн тулд Chrome руу нэвтрэх хэрэгтэй</translation>
 <translation id="2099172618127234427">Та sshd daemon-г тохируулах мөн USB төхөөрөмжийг бүүт хийдэг тохиргоог идэвхжүүлэх Chrome OS-н алдаа засах тохиргоог идэвхжүүлж байна.</translation>
@@ -819,6 +826,7 @@
 <translation id="2114326799768592691">Дахин ачаалах, фрейм</translation>
 <translation id="2114896190328250491"><ph name="NAME" />-н зураг</translation>
 <translation id="2119349053129246860"><ph name="APP" />-д нээх</translation>
+<translation id="2119461801241504254">Аюулгүй үзэх онцлог асаалттай байгаа бөгөөд таныг аюултай сайт болон таталтаас хамгаалж байна</translation>
 <translation id="2120297377148151361">Үйл ажиллагаа болон харилцан үйлчлэл</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" />-г блоклосон</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Күүкиг блоклосон}=1{1-ээс бусад күүкиг блоклосон}other{{COUNT}-с бусад күүкиг блоклосон}}</translation>
@@ -999,7 +1007,6 @@
 <translation id="2342740338116612727">Хавчуурга нэмсэн</translation>
 <translation id="2343747224442182863">Энэ табын фокусыг тохируулах</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" />-р 1 хуудас</translation>
-<translation id="2346953515226895098">SODA үйлчилгээ</translation>
 <translation id="2347644257713614136">Hangouts болон Cast for Education-н хэрэглээг Google-н нууцлалын бодлогын дагуу зохицуулдаг.</translation>
 <translation id="2348176352564285430">Апп: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Өгөгдлийг ачаалахад алдаа гарлаа</translation>
@@ -1886,6 +1893,7 @@
 <translation id="3515983984924808886">Шинэчлэлтийг баталгаажуулахын тулд аюулгүй байдлын түлхүүр дээрээ дахин хүрнэ үү. Аюулгүй байдлын түлхүүрт хадгалсан ПИН зэрэг бүх мэдээллийг устгана.</translation>
 <translation id="3518985090088779359">Зөвшөөрөөд үргэлжлүүлэх</translation>
 <translation id="351952459507671940">Шинэ бүлэгт нэмэх</translation>
+<translation id="3521606918211282604">Дискийн хэмжээг өөрчлөх</translation>
 <translation id="3523642406908660543">Тухайн сайт нь таны компьютер луу нэвтрэхэд нэмэлт өргөтгөл ашиглахыг хүсч байгаа эсэхийг асуу (зөвшөөрөгдсөн)</translation>
 <translation id="3524965460886318643">Үйл ажиллагааг экспортлох</translation>
 <translation id="3526034519184079374">Сайтын өгөгдлийг унших эсвэл өөрчлөх боломжгүй байна</translation>
@@ -1973,6 +1981,7 @@
 <translation id="3629631988386925734">Smart Lock-г идэвхжүүлэхийн тулд нууц үгээ оруулна уу. Дараагийн удаа таны утас таны <ph name="DEVICE_TYPE" />-н түгжээг тайлна. Та Smart Lock-г Тохиргоонд унтрааж болно.</translation>
 <translation id="3630132874740063857">Таны утас</translation>
 <translation id="3630995161997703415">Энэ сайтыг хүссэн үедээ ашиглахын тулд тавиуртаа нэмнэ үү</translation>
+<translation id="3633309367764744750">Таны хараахан зочлоогүй байгаа хуудаснуудыг оролцуулаад хуудаснаас мэдээллийг урьдчилан татдаг. Хэрэв та күүкиг зөвшөөрдөг бол татсан мэдээлэл нь күүки агуулж болзошгүй.</translation>
 <translation id="3634507049637220048">Сүлжээ: <ph name="NETWORK_COUNT" />-н <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, таны администратор удирддаг, дэлгэрэнгүй мэдээлэл</translation>
 <translation id="3635241501480133979">Энэ өгөгдөл нь танай байгууллагын аюулгүй байдлын удирдамжийг зөрчиж байгаа бөгөөд буулгах боломжгүй байна.</translation>
 <translation id="3635353578505343390">Google-д санал хүсэлт илгээх</translation>
@@ -2270,7 +2279,6 @@
 <translation id="3971764089670057203">Энэ аюулгүй байдлын түлхүүр дээр байгаа хурууны хээ</translation>
 <translation id="3973660817924297510">Нууц үгийг шалгаж байна (<ph name="TOTAL_PASSWORDS" />-н <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Домэйнээр серверт холбогдох амжилтгүй боллоо</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> таны нууц үгсийг шалгах боломжгүй байна. Дараа дахин оролдоно уу.</translation>
 <translation id="3976108569178263973">Боломжтой хэвлэгч алга байна.</translation>
 <translation id="397703832102027365">Дуусгаж байна...</translation>
 <translation id="3977886311744775419">Автомат шинэчлэлтийг сүлжээний энэ төрөл дээр татаж авдаггүй боловч та шинэчлэлтийг гар аргаар шалгаж болно.</translation>
@@ -2571,7 +2579,6 @@
 <translation id="4421932782753506458">Найдваргүй</translation>
 <translation id="4423376891418188461">Тохиргоог сэргээх</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, таны админ нууц үгээ солихыг шаардаж байна.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> таны нууц үгсийг шалгах боломжгүй байна. 24 цагийн дараа дахин оролдоно уу.</translation>
 <translation id="4429030830601238961">Энэ өгөгдөл нь танай байгууллагын аюулгүй байдлын удирдамжийг зөрчиж байгаа бөгөөд буулгах боломжгүй байна.</translation>
 <translation id="4430019312045809116">Хэмжээ</translation>
 <translation id="4430369329743628066">Хавчуурга нэмсэн</translation>
@@ -2584,7 +2591,6 @@
 <translation id="4441124369922430666">Машин асахад та энэ програмыг автоматиар эхлүүлэхийг хүсэж байна уу?</translation>
 <translation id="4441147046941420429">Үргэлжлүүлэхийн тулд аюулгүй байдлын түлхүүрээ төхөөрөмжөөсөө устгаж, дараа нь дахин залгаад дээр нь хүрнэ үү</translation>
 <translation id="444134486829715816">Өргөтгө...</translation>
-<translation id="4442329324652245220">Таныг Google Бүртгэлээрээ нэвтрэх үед <ph name="IDS_SHORT_PRODUCT_NAME" /> таны нууц үгсийг шалгах боломжтой</translation>
 <translation id="4442424173763614572">DNS хайлт амжилтгүй боллоо</translation>
 <translation id="4443536555189480885">Тусламж</translation>
 <translation id="4444304522807523469">USB-ээр эсвэл дотоод сүлжээнд холбогдсон бичиг баримт сканердагч руу нэвтрэх</translation>
@@ -2611,7 +2617,6 @@
 <translation id="4476659815936224889">Энэ кодыг скан хийхийн тулд утасныхаа хурдан хариу үйлдлийн кодын сканнерын аппыг эсвэл камерын зарим аппыг ашиглана уу.</translation>
 <translation id="4477015793815781985">Ctrl, Alt эсвэл ⌘-р эхлүүлнэ үү</translation>
 <translation id="4478664379124702289">Холбоосыг хадгалах хэлбэр...</translation>
-<translation id="4478777936860197922">Хадгалсан ямар ч нууц үг алга. Таныг нууц үгсээ хадгалах үед <ph name="IDS_SHORT_PRODUCT_NAME" /> тэднийг шалгах боломжтой.</translation>
 <translation id="4479424953165245642">Kiosk аппуудыг удирдах</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Виртуал машиныг тохируулж байна. Үүнд хэдэн хором шаардлагатай.</translation>
@@ -2857,7 +2862,6 @@
 <translation id="4849517651082200438">Битгий суурьлуул</translation>
 <translation id="4850669014075537160">Гүйлгэх</translation>
 <translation id="4850886885716139402">Харах</translation>
-<translation id="485197095346966382">Таныг алдагдсан нууц үгээр нэвтрэх үед <ph name="IDS_SHORT_PRODUCT_NAME" />-c танд мэдэгдэнэ</translation>
 <translation id="4853020600495124913">&amp; Шинэ цонхонд нээх</translation>
 <translation id="4854317507773910281">Зөвшөөрөл хүсэх эцэг эхийн бүртгэлийг сонгоно уу</translation>
 <translation id="485480310608090163">Бусад тохиргоо болон зөвшөөрөл</translation>
@@ -3931,6 +3935,7 @@
 <translation id="6298962879096096191">Андройд апп суулгахын тулд Google Play-г ашиглана уу</translation>
 <translation id="630065524203833229">Гарах</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" />-г автоматаар тохируулж чадсангүй. Хэвлэгчийн нарийвчилсан дэлгэрэнгүй мэдээллийг тодорхойлно уу. <ph name="LINK_BEGIN" />Нэмэлт мэдээлэл авах<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Хувийн мэдээллийн зөвлөмж</translation>
 <translation id="6305607932814307878">Олон улсын удирдамж:</translation>
 <translation id="6307990684951724544">Систем завгүй байна</translation>
 <translation id="6308493641021088955">Нэвтрэх үйлчилгээ үзүүлэгч: <ph name="EXTENSION_NAME" /></translation>
@@ -4009,6 +4014,7 @@
 <translation id="641081527798843608">Субъект тохируулах</translation>
 <translation id="6412673304250309937">URL-г Chrome-д хадгалсан аюултай сайтын жагсаалттай харьцуулж шалгадаг. Хэрэв сайт таны нууц үгийг хулгайлах гэж оролдвол эсвэл таныг аюултай файл татах үед Chrome нь хуудасны бага зэрэг контентын хамт URL-г Аюулгүй хайлт руу мөн илгээж болзошгүй.</translation>
 <translation id="6412931879992742813">Шинэ нууцлалтай цонх</translation>
+<translation id="6413591858632097328">Энэ нь <ph name="ORIGIN_NAME" />-н болон түүний суулгасан аппуудын хадгалсан бүх өгөгдөл болон күүкиг устгах болно.</translation>
 <translation id="641469293210305670">Шинэчлэлтүүд болон аппууд суулгах</translation>
 <translation id="6414888972213066896">Та эцэг эхээсээ энэ сайтад нэвтрэх зөвшөөрөл хүссэн байна</translation>
 <translation id="6415900369006735853">Утсаараа интернэтэд холбогдох</translation>
@@ -4819,7 +4825,6 @@
 <translation id="7530016656428373557">Ватт хэмжигдэхүүнээр цэнэггүй болгох</translation>
 <translation id="7531779363494549572">Toхиргоо &gt; Апп, мэдэгдэл &gt; Мэдэгдэл рүү очно уу.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> хариулахгүй байна. Аппыг хаахын тулд "Хүчээр хаах"-г сонгоно уу.</translation>
-<translation id="7536333565791380193">Дэвшилтэт аюулгүй байдал</translation>
 <translation id="7537451260744431038">Сайтууд нь, жишээлбэл таныг нэвтэрсэн хэвээр байлгах эсвэл таны худалдан авалтын сагсны зүйлсийг санах зэргээр таны үзэх туршлагыг сайжруулахад күүки ашиглах боломжгүй</translation>
 <translation id="7539856059004947393">Bluetooth-н аюулгүй байдлын түлхүүр</translation>
 <translation id="7540972813190816353">Шинэчлэлтүүдийг шалгаж байх үед алдаа гарлаа: <ph name="ERROR" /></translation>
@@ -5059,7 +5064,6 @@
     <ph name="BEGIN_BOLD" />Санамж:<ph name="END_BOLD" />  Системийг боловсруулалтын үед дахин асаах болно.</translation>
 <translation id="7828731929332799387">Энэ нь гуравдагч талын хам сэдэв дээр боломжтой бүх күүки, сайтын өгөгдлийг устгана. Та үргэлжлүүлмээр байна уу?</translation>
 <translation id="7829298379596169484">Дууны оролтод нэвтэрч байна</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> таны нууц үгсийг шалгах боломжгүй байна. Интернэт холболтоо шалгаж үзнэ үү.</translation>
 <translation id="7829877209233347340">Эцэг эхээсээ нэвтэрч, сургуулийн бүртгэл нэмэх зөвшөөрөл олгохыг хүснэ үү</translation>
 <translation id="7830594666202422257">Linux-д холбогдох</translation>
 <translation id="7831491651892296503">Сүлжээг тохируулахад алдаа гарлаа</translation>
@@ -5929,7 +5933,6 @@
 <translation id="8966870118594285808">Санамсаргүй байдлаар таб хаасан бол түүнийг дахин нээх</translation>
 <translation id="8967866634928501045">Харуулахын тулд Alt Shift A-г дарна уу</translation>
 <translation id="8968766641738584599">Картыг хадгалах</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> таны нууц үгсийг шалгах боломжгүй байна. 24 цагийн дараа дахин оролдоно уу эсвэл <ph name="BEGIN_LINK" />өөрийн Google Бүртгэл дэх нууц үгсийг шалгана уу<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Гарах</translation>
 <translation id="8972513834460200407">Google серверээс юм татаж авахыг firewall блоклосон байж болох тул сүлжээний администратортойгоо шалгана уу.</translation>
 <translation id="8973557916016709913">Томруулах түвшинг хасах</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index f94a006..b021c58 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">बुकमार्क नाव</translation>
 <translation id="1124772482545689468">वापरकर्ता</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (नेटिव्ह) सारखे दिसते</translation>
+<translation id="1126809382673880764">धोकादायक वेबसाइट, डाउनलोड आणि एक्स्टेंशनपासून तुमचे संरक्षण करत नाही. तुम्हाला तरीही Gmail आणि Search यांसारख्या इतर Google सेवांमध्ये, उपलब्ध असेल तेथे, सुरक्षित ब्राउझिंग संरक्षण मिळेल.</translation>
 <translation id="1128109161498068552">MIDI डिव्हाइस ॲक्सेस करण्यासाठी सिस्टम विशेष मेसेज वापरण्याकरिता कोणत्याही साइटला परवानगी  देऊ नका</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">शोध इंजिन संपादित करा</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">ज्ञात नेटवर्क</translation>
 <translation id="123578888592755962">डिस्क भरली</translation>
 <translation id="1238191093934674082">VPN उघडा</translation>
+<translation id="1239439601391236986">इनपुट वैयक्तिक माहिती सूचना दाखवा</translation>
 <translation id="1239594683407221485">Files ॲप मधील डिव्हाइसचा आशय एक्सप्लोर करा.</translation>
 <translation id="124116460088058876">आणखी भाषा...</translation>
 <translation id="1241753985463165747">विनंती केल्यावर सध्याच्या वेबसाइटवर असलेला सर्व डेटा वाचू आणि बदलू शकता</translation>
@@ -201,7 +203,7 @@
 <translation id="1259152067760398571">सुरक्षा तपासणी काल रन केली गेली</translation>
 <translation id="1260451001046713751"><ph name="HOST" /> कडील पॉप-अप आणि रीडिरेक्टना नेहमी अनुमती द्या</translation>
 <translation id="126156426083987769">डेमो मोड डिव्हाइस परवान्यांना समस्या आली.</translation>
-<translation id="1263490604593716556">खाते <ph name="FIRST_PARENT_EMAIL" /> आणि <ph name="SECOND_PARENT_EMAIL" /> ने व्‍यवस्‍थापित केले आहे. या डिव्हाइसवरील प्राथमिक खात्यामधून साइन आउट करण्यासाठी, तुमच्या स्क्रीनवरील वेळेवर क्लिक करा. दिसणाऱ्या मेनूध्ये, "साइन आउट करा" वर क्लिक करा.</translation>
+<translation id="1263490604593716556">खाते <ph name="FIRST_PARENT_EMAIL" /> आणि <ph name="SECOND_PARENT_EMAIL" /> ने व्‍यवस्‍थापित केले आहे. या डिव्हाइसवरील प्राथमिक खात्यामधून साइन आउट करण्यासाठी, तुमच्या स्क्रीनवरील वेळेवर क्लिक करा. दिसणाऱ्या मेनूमध्ये, "साइन आउट करा" वर क्लिक करा.</translation>
 <translation id="126710816202626562">भाषांतर भाषा:</translation>
 <translation id="126768002343224824">१६x</translation>
 <translation id="1272079795634619415">थांबा</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">सेल्युलर अ‍ॅक्टिव्हेशन</translation>
 <translation id="1407489512183974736">मध्यभागी क्रॉप केला</translation>
 <translation id="1408504635543854729">Files ॲपमध्ये डिव्हाइसचा आशय एक्सप्लोर करा. ॲडमिनिस्ट्रेटरने आशय प्रतिबंधित केला आहे आणि त्यात बदल केला जाऊ शकत नाही.</translation>
+<translation id="1408980562518920698">वैयक्तिक माहिती व्यवस्थापित करा</translation>
 <translation id="1410197035576869800">अ‍ॅप आयकन</translation>
 <translation id="1410616244180625362">तुमचा कॅमेरा ॲक्सेस करण्यासाठी <ph name="HOST" /> ला परवानगी  देणे सुरू ठेवा</translation>
 <translation id="1414648216875402825">तुम्ही <ph name="PRODUCT_NAME" /> च्या अस्थिर आवृत्तीवर अपडेट करत आहात ज्यात प्रगतीपथावर असलेली वैशिष्ट्ये आहेत. क्रॅश आणि अनपेक्षित दोष आढळतील. कृपया सावधगिरीसह पुढे जा.</translation>
@@ -433,6 +436,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript कन्सोल</translation>
 <translation id="1587907146729660231">तुमच्या बोटाने पॉवर बटणाला स्पर्श करा</translation>
+<translation id="1588200577109872591">स्‍मार्ट इनपुट</translation>
 <translation id="1588438908519853928">सामान्य</translation>
 <translation id="158849752021629804">होम नेटवर्क आवश्यक</translation>
 <translation id="1588870296199743671">यासह लिंक उघडा...</translation>
@@ -668,6 +672,7 @@
 <translation id="1879000426787380528">हे म्हणून साइन करा</translation>
 <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" सर्टिफिकेट हटवायचे?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" /> पैकी <ph name="NETWORK_INDEX" /> नेटवर्क, <ph name="NETWORK_NAME" />, कनेक्ट करा</translation>
+<translation id="1884705339276589024">Linux डिस्कचा आकार बदला</translation>
 <translation id="1886996562706621347">प्रोटोकॉलकरिता डीफॉल्ट हँडलर होण्यासाठी साइटना विचारण्याची अनुमती द्या</translation>
 <translation id="1887442540531652736">साइन इन एरर</translation>
 <translation id="1887597546629269384">पुन्हा "Hey Google" म्हणा</translation>
@@ -737,6 +742,7 @@
 <translation id="1979280758666859181">तुम्ही <ph name="PRODUCT_NAME" /> च्या जुन्या आवृत्तीसह एका चॅनेलमध्ये बदलत आहात. आपल्या डिव्हाइसवर सध्या इंस्टॉल आवृत्तीशी चॅनेलची आवृत्ती जुळते तेव्हा चॅनेल बदल लागू होईल.</translation>
 <translation id="197989455406964291">KDC एंक्रिप्शन प्रकाराला सपोर्ट करत नाही</translation>
 <translation id="1982354452682152483">वर्णन उपलब्ध नाही.</translation>
+<translation id="1984417487208496350">संरक्षण नाही (शिफारस केली जात नाही)</translation>
 <translation id="1987317783729300807">खाती</translation>
 <translation id="1989112275319619282">ब्राउझ करा</translation>
 <translation id="1990512225220753005">या पेजवर शॉर्टकट दाखवू नका</translation>
@@ -806,6 +812,7 @@
 <translation id="2090165459409185032">तुमची खाते माहिती पुनर्प्राप्त करण्यासाठी, यावर जा: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">सिस्टम सुरक्षा सेटिंग्ज</translation>
 <translation id="2091887806945687916">ध्वनी</translation>
+<translation id="2096478741073211388">तुम्ही काही विशिष्ट शब्द टाइप करत असताना तुमचे नाव, पत्ता किंवा फोन नंबर सुचवून वैयक्तिक माहिती सूचना तुम्हाला आणखी जलद लिहिण्यात मदत करतात. तुमच्या खात्यासाठीच्या तुमच्या स्वतःच्या खाजगी, पर्सनलाइझ केलेल्या सूचना फक्त तुम्हाला दिसतात.</translation>
 <translation id="2096715839409389970">तृतीय पक्ष कुकी साफ करा</translation>
 <translation id="2097372108957554726">नवीन डिव्हाइसेसची नोंदणी करण्यासाठी तुम्हाला Chrome वर साइन इन करणे आवश्यक आहे</translation>
 <translation id="2099172618127234427">तुम्ही Chrome OS डीबगिंग वैशिष्ट्ये सुरू करत आहात जी ssh केलेल्या daemon सेट आणि USB ड्राइव्हवरून बूट करणे सुरू करतील.</translation>
@@ -822,6 +829,7 @@
 <translation id="2114326799768592691">रीलोड आणि फ्रेम करा</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> चे फोटो</translation>
 <translation id="2119349053129246860"><ph name="APP" /> मध्ये उघडा</translation>
+<translation id="2119461801241504254">सुरक्षित ब्राउझिंग सुरू आहे आणि ते तुमचे हानिकारक साइट आणि डाउनलोडपासून संरक्षण करत आहे</translation>
 <translation id="2120297377148151361">ॲक्टिव्हिटी आणि संवाद</translation>
 <translation id="2120639962942052471">ब्लॉक केलेली <ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{कुकी ब्लॉक केल्या आहेत}=1{कुकी ब्लॉक केल्या आहेत, एक अपवाद}other{कुकी ब्लॉक केल्या आहेत, {COUNT} अपवाद}}</translation>
@@ -871,7 +879,7 @@
 <translation id="2172784515318616985">सुरू ठेवा</translation>
 <translation id="2173302385160625112">तुमचे इंटरनेट कनेक्शन तपासा</translation>
 <translation id="2173801458090845390">या डीव्हाइसवर मागणी आयडी जोडा</translation>
-<translation id="2174948148799307353">खाते <ph name="PARENT_EMAIL" /> ने व्‍यवस्‍थापित केले आहे. या डिव्हाइसवरील प्राथमिक खात्यामधून साइन आउट करण्यासाठी, तुमच्या स्क्रीनवरील वेळेवर क्लिक करा. दिसणाऱ्या मेनूध्ये, "साइन आउट करा" वर क्लिक करा.</translation>
+<translation id="2174948148799307353">खाते <ph name="PARENT_EMAIL" /> ने व्‍यवस्‍थापित केले आहे. या डिव्हाइसवरील प्राथमिक खात्यामधून साइन आउट करण्यासाठी, तुमच्या स्क्रीनवरील वेळेवर क्लिक करा. दिसणाऱ्या मेनूमध्ये, "साइन आउट करा" वर क्लिक करा.</translation>
 <translation id="2175607476662778685">द्रुत लाँच बार</translation>
 <translation id="217576141146192373">प्रिंटर जोडू शकत नाही. कृपया तुमच्या प्रिंटरचे कॉन्फिगरेशन तपासा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="2177950615300672361">गुप्त टॅब: <ph name="TAB_NAME" /></translation>
@@ -1002,7 +1010,6 @@
 <translation id="2342740338116612727">बुकमार्क जोडले</translation>
 <translation id="2343747224442182863">या टॅबवर फोकस करा</translation>
 <translation id="2345723121311404059">1 पेज <ph name="PRINTER_NAME" />वर</translation>
-<translation id="2346953515226895098">SODA सेवा</translation>
 <translation id="2347644257713614136">Hangouts आणि Cast for Education चा वापर Google गोपनीयता धोरण संचालित करते.</translation>
 <translation id="2348176352564285430">ॲप: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">डेटा लोड करताना एरर आली</translation>
@@ -1890,6 +1897,7 @@
 <translation id="3515983984924808886">रीसेटची खात्री करण्यासाठी तुमच्या सिक्युरिटी कीला पुन्हा स्पर्श करा. सिक्युरिटी कीवर स्टोअर केलेली सर्व माहिती, तिच्या पिनसह, हटवली जाईल.</translation>
 <translation id="3518985090088779359">स्वीकारा आणि सुरु ठेवा</translation>
 <translation id="351952459507671940">नवीन गटावर जोडा</translation>
+<translation id="3521606918211282604">डिस्कचा आकार बदला</translation>
 <translation id="3523642406908660543">एखादी साइट तुमचा कॉंप्युटर ॲक्सेस करण्यासाठी प्लगिन वापरू इच्छिते तेव्हा विचारा (शिफारस केलेले)</translation>
 <translation id="3524965460886318643">ॲक्टिव्हिटी एक्सपोर्ट करा</translation>
 <translation id="3526034519184079374">साइटचा डेटा रीड करू किंवा बदलू शकत नाही</translation>
@@ -1977,6 +1985,7 @@
 <translation id="3629631988386925734">Smart Lock सुरू करण्यासाठी तुमचा पासवर्ड एंटर करा. पुढील वेळेस तुमचा फोन तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करेल. तुम्ही सेटिंग्जमध्ये Smart Lock बंद करू शकता.</translation>
 <translation id="3630132874740063857">तुमचा फोन</translation>
 <translation id="3630995161997703415">कधीही वापरण्‍यासाठी ही साइट तुमच्या शेल्‍फवर जोडा</translation>
+<translation id="3633309367764744750">तुम्ही अजून भेट न दिलेल्या पेजसह, पेजवरील माहिती आधीच मिळवते. तुम्ही कुकींना अनुमती देत असल्यास, मिळवलेल्या माहितीमध्ये कुकी असू शकतात.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_COUNT" /> पैकी <ph name="NETWORK_INDEX" /> नेटवर्क, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, तुमच्या अ‍ॅडमिनिस्ट्रेटरने व्यवस्थापित केलेले, तपशील</translation>
 <translation id="3635241501480133979">हा डेटा तुमच्या संस्थेच्या सुरक्षितता धोरणांचे उल्लंघन करतो आणि तो ड्रॉप केला जाऊ शकत नाही.</translation>
 <translation id="3635353578505343390">Google ला फीडबॅक पाठवा</translation>
@@ -2275,7 +2284,6 @@
 <translation id="3971764089670057203">या सिक्युरिटी कीवरील फिंगरप्रिंट</translation>
 <translation id="3973660817924297510">पासवर्ड तपासत आहे (<ph name="TOTAL_PASSWORDS" /> पैकी <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">क्षेत्रासाठी सर्व्हरशी कनेक्ट करता आले नाही</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> तुमचे पासवर्ड तपासू शकत नाही. नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="3976108569178263973">तेथे कोणतेही प्रिंटर उपलब्ध नाहीत.</translation>
 <translation id="397703832102027365">पूर्ण करीत आहे...</translation>
 <translation id="3977886311744775419">या नेटवर्क प्रकारावर आपोआप अपडेट डाउनलोड होत नाहीत पण तुम्ही मॅन्युअली अपडेट पाहू शकता.</translation>
@@ -2574,7 +2582,6 @@
 <translation id="4421932782753506458">Fluffy</translation>
 <translation id="4423376891418188461">सेटिंग्ज पुनर्संचयित करा</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, तुम्ही तुमचा पासवर्ड बदलणे तुमच्या ॲडमिनिस्ट्रेटरलााठी आवश्यक आहे.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> तुमचे पासवर्ड तपासू शकत नाही. २४ तासांनंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="4429030830601238961">हा डेटा तुमच्या संस्थेच्या सुरक्षितता धोरणांचे उल्लंघन करतो आणि तो पेस्ट केला जाऊ शकत नाही.</translation>
 <translation id="4430019312045809116">व्हॉल्यूम</translation>
 <translation id="4430369329743628066">बुकमार्क जोडला</translation>
@@ -2587,7 +2594,6 @@
 <translation id="4441124369922430666">मशीन चालू होते तेव्हा तुम्ही हा ॲप स्वयंचलितपणे प्रारंभ करू इच्छिता?</translation>
 <translation id="4441147046941420429">पुढे सुरू ठेवण्यासाठी, तुमच्या डिव्हाइसमधून सिक्युरिटी की काढून टाका आणि नंतर ती पुन्हा घालून तिला स्पर्श करा</translation>
 <translation id="444134486829715816">विस्तार करा...</translation>
-<translation id="4442329324652245220">तुम्ही तुमचे Google खाते वापरून साइन इन करता तेव्हा, <ph name="IDS_SHORT_PRODUCT_NAME" /> तुमचे पासवर्ड तपासू शकते</translation>
 <translation id="4442424173763614572">DNS लुकअप अयश्सवी</translation>
 <translation id="4443536555189480885">&amp;मदत</translation>
 <translation id="4444304522807523469">USB द्वारा संलग्न केलेल्या किंवा स्थानिक नेटवर्कवरील दस्तऐवज स्कॅनर ॲक्सेस करा</translation>
@@ -2614,7 +2620,6 @@
 <translation id="4476659815936224889">हा कोड स्कॅन करण्यासाठी, तुम्ही तुमच्या फोनवरील QR स्कॅनर ॲप किंवा काही कॅमेरा अ‍ॅप्स वापरू शकता.</translation>
 <translation id="4477015793815781985">Ctrl, Alt किंवा ⌘ चा समावेश करा</translation>
 <translation id="4478664379124702289">या फॉरमॅटमध्ये लिंक सेव्ह करा...</translation>
-<translation id="4478777936860197922">सेव्ह केलेले पासवर्ड नाहीत. तुम्ही तुमचे पासवर्ड सेव्ह केल्यावर <ph name="IDS_SHORT_PRODUCT_NAME" /> ते तपासू शकते.</translation>
 <translation id="4479424953165245642">कियोस्क ॲप्लिकेशन व्यवस्थापित करा</translation>
 <translation id="4479639480957787382">इथरनेट</translation>
 <translation id="4479877282574735775">व्हर्च्युअल मशीन कॉन्फिगर करत आहे. यासाठी काही मिनिटे लागू शकतात.</translation>
@@ -2860,7 +2865,6 @@
 <translation id="4849517651082200438">इंस्टॉल करू नका</translation>
 <translation id="4850669014075537160">स्क्रोलिंग</translation>
 <translation id="4850886885716139402">पहा</translation>
-<translation id="485197095346966382">तुम्ही धोक्यात असलेल्या पासवर्डने साइन इन केल्यावर <ph name="IDS_SHORT_PRODUCT_NAME" /> तुम्हाला सूचित करेल</translation>
 <translation id="4853020600495124913">&amp;नवीन विंडोमध्ये उघडा</translation>
 <translation id="4854317507773910281">मंजुरीसाठी पालक खाते निवडा</translation>
 <translation id="485480310608090163">आणखी सेटिंग्ज आणि परवानग्या</translation>
@@ -3935,6 +3939,7 @@
 <translation id="6298962879096096191">Android ॲप्स इंस्टॉल करण्‍यासाठी Google Play वापरा</translation>
 <translation id="630065524203833229">नि&amp;र्गमन</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> आपोआप कॉंफिगर होऊ शकत नाही. कृपया प्रगत प्रिंटर तपशील नमूद करा. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">वैयक्तिक माहिती सूचना</translation>
 <translation id="6305607932814307878">जागतिक धोरण:</translation>
 <translation id="6307990684951724544">सिस्‍टीम व्यस्त</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> ने पुरवलेले साइन इन</translation>
@@ -4013,6 +4018,7 @@
 <translation id="641081527798843608">जुळणारा विषय</translation>
 <translation id="6412673304250309937">Chrome मध्ये स्टोअर केलेल्या असुरक्षित साइटच्या सूचीमध्ये URL तपासतो. साइटने तुमचा पासवर्ड चोरण्याचा प्रयत्न केल्यास किंवा तुम्ही हानीकारक फाइल डाउनलोड केल्यावर, Chrome, पेज आशयाच्या भागांसह, URL सुरक्षित ब्राउझिंग कडे पाठवू शकतो.</translation>
 <translation id="6412931879992742813">नवीन गुप्त विंडो</translation>
+<translation id="6413591858632097328">हे <ph name="ORIGIN_NAME" /> ने स्टोअर केलेला सर्व डेटा आणि कुकी व त्याची इंस्टॉल केलेली अ‍ॅप्स साफ करेल.</translation>
 <translation id="641469293210305670">अपडेट आणि अ‍ॅप्स इंस्टॉल करा</translation>
 <translation id="6414888972213066896">या साइटला भेट देणे ठीक आहे का ते तुम्ही तुमच्या पालकास विचारले</translation>
 <translation id="6415900369006735853">तुमच्या फोनमधून इंटरनेटशी कनेक्ट करा</translation>
@@ -4823,7 +4829,6 @@
 <translation id="7530016656428373557">डिस्चार्ज रेट वॉट्स मध्ये</translation>
 <translation id="7531779363494549572">सेटिंग्‍ज &gt; ॲप्‍स आणि सूचना &gt; सूचना वर जा.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> प्रतिसाद देत नाही. ॲप बंद करण्यासाठी "सक्तीने बंद करा" निवडा.</translation>
-<translation id="7536333565791380193">प्रगत सुरक्षितता</translation>
 <translation id="7537451260744431038">तुमच्या ब्राउझिंग अनुभवात सुधारणा करण्यासाठी, उदाहरणार्थ, तुम्हाला साइन इन केलेले ठेवण्यासाठी किंवा तुमच्या शॉपिंग कार्टमधील आयटम लक्षात ठेवण्यासाठी साइट कुकी वापरू शकत नाहीत</translation>
 <translation id="7539856059004947393">ब्लूटूथ सिक्युरिटी की</translation>
 <translation id="7540972813190816353">अपडेट तपासताना एक एरर आली: <ph name="ERROR" /></translation>
@@ -5062,7 +5067,6 @@
 <ph name="BEGIN_BOLD" />सूचना:<ph name="END_BOLD" /> प्रक्रियेदरम्यान सिस्टम रीबूट होईल.</translation>
 <translation id="7828731929332799387">हे तृतीय पक्ष संदर्भात उपलब्ध असलेल्या कुकी आणि साइट हटवेल. तुम्हाला पुढे सुरू ठेवायचे आहे का?</translation>
 <translation id="7829298379596169484">ऑडिओ इनपुटमध्‍ये प्रवेश करीत आहे</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> तुमचे पासवर्ड तपासू शकत नाही. तुमचे इंटरनेट कनेक्शन तपासून पहा.</translation>
 <translation id="7829877209233347340">शाळा खाते जोडण्याची परवानगी देण्यासाठी, पालकाला साइन इन करण्यास सांगा</translation>
 <translation id="7830594666202422257">Linux शी कनेक्ट करा</translation>
 <translation id="7831491651892296503">नेटवर्क कॉन्फिगर करताना एरर आली</translation>
@@ -5938,7 +5942,6 @@
 <translation id="8966870118594285808">तुम्ही एखादा टॅब चुकून बंद केल्यास, तो पुन्हा उघडा</translation>
 <translation id="8967866634928501045">दाखवण्यासाठी Alt Shift A दाबा</translation>
 <translation id="8968766641738584599">कार्ड सेव्ह करा</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> तुमचे पासवर्ड तपासू शकत नाही. २४ तासांनंतर पुन्हा प्रयत्न करा किंवा <ph name="BEGIN_LINK" />तुमच्या Google खाते मध्ये पासवर्ड तपासा<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">कृपया फायरवॉल Google सर्व्हरवरून डाउनलोड ब्लॉक करत नसल्याची खात्री करण्यासाठी तुमच्या नेटवर्क ॲडमिनिस्ट्रेटरच्या साहाय्याने तपासा.</translation>
 <translation id="8973557916016709913">झूम स्तर काढून टाका</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index dc8a5473..09f7e02 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Penanda halaman ditambahkan</translation>
 <translation id="2343747224442182863">Fokus pada Tab Ini</translation>
 <translation id="2345723121311404059">1 halaman ke <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA Service</translation>
 <translation id="2347644257713614136">Penggunaan Hangouts and Cast for Education dikawal oleh Dasar Privasi Google.</translation>
 <translation id="2348176352564285430">Apl: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Ralat semasa memuatkan data</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Cap jari pada kunci keselamatan ini</translation>
 <translation id="3973660817924297510">Menyemak kata laluan (<ph name="CHECKED_PASSWORDS" /> daripada <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Gagal menghubungi pelayan untuk realma</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> tidak dapat menyemak kata laluan anda. Cuba lagi nanti.</translation>
 <translation id="3976108569178263973">Pencetak tidak tersedia.</translation>
 <translation id="397703832102027365">Menyelesaikan...</translation>
 <translation id="3977886311744775419">Kemas kini automatik tidak memuat turun pada jenis rangkaian ini, tetapi anda boleh menyemak kemas kini secara manual.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Gebu</translation>
 <translation id="4423376891418188461">Pulihkan Tetapan</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, pentadbir anda memerlukan anda untuk menukar kata laluan.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> tidak dapat menyemak kata laluan anda. Cuba lagi selepas 24 jam.</translation>
 <translation id="4429030830601238961">Data ini melanggar dasar keselamatan organisasi anda dan tidak boleh ditampal.</translation>
 <translation id="4430019312045809116">Kelantangan</translation>
 <translation id="4430369329743628066">Penanda halaman ditambahkan</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Adakah anda ingin mulakan apl ini secara automatik apabila mesin ini dihidupkan?</translation>
 <translation id="4441147046941420429">Untuk meneruskan, alih keluar kunci keselamatan daripada peranti anda, kemudian masukkan semula dan sentuh kunci itu.</translation>
 <translation id="444134486829715816">Kembangkan...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> boleh menyemak kata laluan anda apabila anda log masuk menggunakan Akaun Google anda</translation>
 <translation id="4442424173763614572">Carian DNS gagal</translation>
 <translation id="4443536555189480885">&amp;Bantuan</translation>
 <translation id="4444304522807523469">Akses pengimbas dokumen yang disambungkan melalui USB atau pada rangkaian tempatan</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Untuk mengimbas kos ini, anda boleh menggunakan apl pengimbas QR pada telefon anda atau pada sesetengah apl kamera.</translation>
 <translation id="4477015793815781985">Sertakan Ctrl, Alt atau ⌘</translation>
 <translation id="4478664379124702289">Simpan Pau&amp;tan Sebagai...</translation>
-<translation id="4478777936860197922">Tiada kata laluan yang disimpan. <ph name="IDS_SHORT_PRODUCT_NAME" /> boleh menyemak kata laluan anda yang disimpan.</translation>
 <translation id="4479424953165245642">Urus aplikasi kios</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Mengkonfigurasikan mesin maya. Proses ini mungkin mengambil masa beberapa minit.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Jangan Pasang</translation>
 <translation id="4850669014075537160">Menatal</translation>
 <translation id="4850886885716139402">Lihat</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> akan memberitahu anda apabila anda log masuk menggunakan kata laluan yang terjejas</translation>
 <translation id="4853020600495124913">Buka dalam tetingkap &amp;baharu</translation>
 <translation id="4854317507773910281">Pilih akaun ibu/bapa untuk kelulusan</translation>
 <translation id="485480310608090163">Lagi tetapan dan kebenaran</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Kadar Nyahcas dalam Watt</translation>
 <translation id="7531779363494549572">Pergi ke Tetapan &gt; Apl &amp; pemberitahuan &gt; Pemberitahuan.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> tiada respons. Pilih "Paksa tutup" untuk menutup apl.</translation>
-<translation id="7536333565791380193">Keselamatan termaju</translation>
 <translation id="7537451260744431038">Tapak tidak boleh menggunakan kuki untuk memperbaik pengalaman penyemakan imbas anda, contohnya, untuk mengekalkan log masuk anda atau untuk mengingat item dalam troli beli-belah anda</translation>
 <translation id="7539856059004947393">Kunci keselamatan Bluetooth</translation>
 <translation id="7540972813190816353">Ralat berlaku semasa menyemak kemas kini: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" />  Sistem akan mengebut semula semasa proses ini.</translation>
 <translation id="7828731929332799387">Tindakan ini akan memadam semua kuki dan data tapak yang tersedia dalam konteks pihak ketiga. Anda ingin teruskan?</translation>
 <translation id="7829298379596169484">Mengakses input audio</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> tidak dapat menyemak kata laluan anda. Cuba periksa sambungan Internet anda.</translation>
 <translation id="7829877209233347340">Minta ibu atau bapa log masuk untuk memberikan kebenaran bagi penambahan akaun institusi pengajian</translation>
 <translation id="7830594666202422257">Sambungkan ke Linux</translation>
 <translation id="7831491651892296503">Ralat mengkonfigurasi rangkaian</translation>
@@ -5954,7 +5946,6 @@
 <translation id="8966870118594285808">Buka semula tab jika anda menutup tab itu secara tidak sengaja</translation>
 <translation id="8967866634928501045">Tekan Alt Shift A untuk memaparkan</translation>
 <translation id="8968766641738584599">Simpan kad</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> tidak dapat menyemak kata laluan anda. Cuba lagi selepas 24 jam atau <ph name="BEGIN_LINK" />semak kata laluan dalam Akaun Google anda<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Lepas</translation>
 <translation id="8972513834460200407">Sila semak dengan pentadbir rangkaian anda bagi memastikan bahawa tembok api tidak menyekat muat turun dari pelayan Google.</translation>
 <translation id="8973557916016709913">Alih keluar tahap zum</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index 1738a5b3..3c59b37 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -1012,7 +1012,6 @@
 <translation id="2342740338116612727">ဝဘ်လိပ်စာများကို ထည့်ပြီးပါပြီ</translation>
 <translation id="2343747224442182863">ဤတဘ်ကို အထူးဖော်ပြပါ</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> တွင် ၁ မျက်နှာ ပုံနှိပ်ထုတ်ယူရန်</translation>
-<translation id="2346953515226895098">SODA ဝန်ဆောင်မှု</translation>
 <translation id="2347644257713614136">ပညာရေးအတွက် Hangouts နှင့် Cast အသုံးပြုခြင်းကို 'Google ပုဂ္ဂိုလ်ရေးဆိုင်ရာ မူဝါဒ' အရ ထိန်းချုပ်ထားသည်။</translation>
 <translation id="2348176352564285430">အက်ပ် − <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ဒေတာတင်မှု အမှား</translation>
@@ -1988,7 +1987,7 @@
 <translation id="3629631988386925734">Smart Lock ဖွင့်ရန် သင့်စကားဝှက် ထည့်ပါ။ နောက်တစ်ကြိမ်တွင် သင့်ဖုန်းက <ph name="DEVICE_TYPE" /> ကို လော့ခ်ဖွင့်ပေးပါမည်။ Smart Lock ကို 'ဆက်တင်များ' ထဲတွင် ပိတ်နိုင်သည်။</translation>
 <translation id="3630132874740063857">သင့်ဖုန်း</translation>
 <translation id="3630995161997703415">အချိန်မရွေးအသုံးပြုနိုင်ရန် ဤဝက်ဘ်ဆိုက်ကို သင့်စင်တွင် ထည့်ထားပါ</translation>
-<translation id="3633309367764744750">သင်ဝင်ကြည့်ထားခြင်းမရှိသည့် စာမျက်နှာများအပါအဝင် အချက်အလက်များကို ကြိုတင်ရယူထားသည်။ သင်ကွတ်ကီးများကို ခွင့်ပြုထားလျှင် ရယူထားသည့် အချက်အလက်များတွင် ကွတ်ကီးများပါဝင်နိုင်သည်။</translation>
+<translation id="3633309367764744750">သင်ဝင်ကြည့်ထားခြင်းမရှိသည့် စာမျက်နှာများအပါအဝင် အချက်အလက်များကို ကြိုတင်ရယူထားသည်။ ကွတ်ကီးများကို သင်ခွင့်ပြုထားလျှင် ရယူထားသည့် အချက်အလက်များတွင် ကွတ်ကီးများပါဝင်နိုင်သည်။</translation>
 <translation id="3634507049637220048">ကွန်ရက် <ph name="NETWORK_COUNT" /> ခုအနက်မှ <ph name="NETWORK_INDEX" />၊ <ph name="NETWORK_NAME" />၊ <ph name="CONNECTION_STATUS" />၊ သင့် 'စီမံခန့်ခွဲသူ' က ကြီးကြပ်ထားသည်၊ အသေးစိတ်များ</translation>
 <translation id="3635241501480133979">ဤဒေတာသည် သင့်အဖွဲ့အစည်း၏ လုံခြုံရေးမူဝါဒများကို ချိုးဖောက်သည့်အတွက် ကူးထည့်၍မရပါ။</translation>
 <translation id="3635353578505343390">Google သို့ အကြံပြုချက် ပို့ရန်</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">ဤလုံခြုံရေးကီးပေါ်ရှိ လက်ဗွေများ</translation>
 <translation id="3973660817924297510">စကားဝှက်များကို စစ်ဆေးနေသည် (<ph name="TOTAL_PASSWORDS" /> အနက် <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">အဖွဲ့အစည်းအတွက် ဆာဗာသို့ ချိတ်ဆက်၍ မရပါ</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ နောက်မှ ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="3976108569178263973">ရနိုင်သော ပုံနှိပ်စက်များ မရှိပါ။</translation>
 <translation id="397703832102027365">အဆုံးသတ်နေ...</translation>
 <translation id="3977886311744775419">ဤကွန်ရက်အမျိုးအစားတွင် အလိုအလျောက် အပ်ဒိတ်များကို ဒေါင်းလုဒ်မလုပ်သော်လည်း အပ်ဒိတ်များကို ကိုယ်တိုင်စစ်ဆေးနိုင်သည်။</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">အမွေးနု</translation>
 <translation id="4423376891418188461">ဆက်တင်များအား ပြန်ယူရန်</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />၊ သင်၏ စီမံခန့်ခွဲသူက သင်၏စကားဝှက်ကို ပြောင်းစေလိုပါသည်။</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ ၂၄ နာရီအကြာတွင် ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="4429030830601238961">ဤဒေတာသည် သင့်အဖွဲ့အစည်း၏ လုံခြုံရေးမူဝါဒများကို ချိုးဖောက်သည့်အတွက် ကူးထည့်၍မရပါ။</translation>
 <translation id="4430019312045809116">ပမာဏ</translation>
 <translation id="4430369329743628066">ဝဘ်လိပ်စာကို ထည့်ပြီးပါပြီ</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">စက် ပွင့်လာသည့် အခါမှာ ဒီအက်ပ်ကို သင်သည် အလိုအလျောက် စတင်စေလိုပါသလား?</translation>
 <translation id="4441147046941420429">ရှေ့ဆက်ရန် သင်၏စက်မှ လုံခြုံရေးကီး ဖယ်ရှားပါ၊ ထို့နောက် ၎င်းကို ပြန်ထည့်သွင်းပြီး ထိပါ</translation>
 <translation id="444134486829715816">တိုးချဲ့ရန်...</translation>
-<translation id="4442329324652245220">သင်၏ Google Account နှင့် လက်မှတ်ထိုးဝင်သည့်အခါ <ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်စကားဝှက်များကို စစ်ဆေးနိုင်သည်</translation>
 <translation id="4442424173763614572">DNS ကြည့်ရှုမှု မအောင်မြင်ခဲ့</translation>
 <translation id="4443536555189480885">အကူအညီ</translation>
 <translation id="4444304522807523469">USB သို့မဟုတ် ဒေသခံ ကွန်ရက်မှ တစ်ဆင့် ချိတ်ဆက်ထားသည့် စာတမ်း စကင်နာများးကို ရယူသုံးရန်</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">ဤကုဒ်ကို စကင်ဖတ်ရန် သင့်ဖုန်းပေါ်ရှိ QR စကင်ဖတ်စနစ်အက်ပ် သို့မဟုတ် ကင်မရာအက်ပ် အချို့ကို အသုံးပြုနိုင်သည်။</translation>
 <translation id="4477015793815781985">Ctrl၊ Alt၊ သို့မဟုတ် ⌘ ကိုပါ ထည့်ရန်</translation>
 <translation id="4478664379124702289">လင့်&amp;ကို အဖြစ် သိမ်းရန်...</translation>
-<translation id="4478777936860197922">သိမ်းထားသော စကားဝှက် မရှိပါ။ သင်စကားဝှက်များကို သိမ်းသည့်အခါ <ph name="IDS_SHORT_PRODUCT_NAME" /> က ၎င်းတို့ကို စစ်ဆေးနိုင်သည်။</translation>
 <translation id="4479424953165245642">Kiosk အပလီကေးရှင်းများကို စီမံရန်</translation>
 <translation id="4479639480957787382">အီတာနက်</translation>
 <translation id="4479877282574735775">ပကတိအသွင် စက်စနစ်ကို စီစဉ်သတ်မှတ်နေသည်။ မိနစ်အနည်းငယ် ကြာနိုင်ပါသည်။</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">မသွင်းပါနှင့်</translation>
 <translation id="4850669014075537160">အပေါ်အောက်ရွှေ့ခြင်း</translation>
 <translation id="4850886885716139402">မြင်ကွင်း</translation>
-<translation id="485197095346966382">ကျိုးပေါက်ထားသည့် စကားဝှက်ဖြင့် လက်မှတ်ထိုးဝင်သည့်အခါ <ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်ကို ကြောင်းကြားပါမည်</translation>
 <translation id="4853020600495124913">ဝင်ဒိုးအသစ် &amp;ထဲမှာ &amp;ဖွင့်ရန်</translation>
 <translation id="4854317507773910281">အတည်ပြုရန်အတွက် မိဘအကောင့်ကို ရွေးပါ</translation>
 <translation id="485480310608090163">နောက်ထပ် ဆက်တင်များနှင့် ခွင့်ပြုချက်များ</translation>
@@ -4835,7 +4829,6 @@
 <translation id="7530016656428373557">အားကုန်မှုနှုန်း ဝပ်</translation>
 <translation id="7531779363494549572">ဆက်တင်များ &gt; အက်ပ်နှင့် အကြောင်းကြားချက်များ &gt; အကြောင်းကြားချက်များ သို့သွားပါ။</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> က တုံ့ပြန်မှုမရှိပါ။ အက်ပ်ကိုပိတ်ရန် "မဖြစ်မနေပိတ်ရန်" ကို ရွေးပါ။</translation>
-<translation id="7536333565791380193">အဆင့်မြင့် လုံခြုံရေး</translation>
 <translation id="7537451260744431038">သင်၏ဝဘ်ကြည့်ရှုမှု ပိုကောင်းမွန်စေရန် ဥပမာအားဖြင့် အမြဲလက်မှတ်ထိုးဝင်ထားရန် သို့မဟုတ် ဈေးခြင်းတောင်းထဲရှိ အရာများ မှတ်ထားရန်တို့အတွက် ဝဘ်ဆိုက်များက ကွတ်ကီးများကို အသုံးပြု၍မရပါ</translation>
 <translation id="7539856059004947393">ဘလူးတုသ် လုံခြုံရေးကီး</translation>
 <translation id="7540972813190816353">မွမ်းမံမှုများကို စစ်ကြည့်စဉ် အမှား တစ်ခု ကြုံခဲ့ရ: <ph name="ERROR" /></translation>
@@ -5076,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />မှတ်ချက်-<ph name="END_BOLD" />  လုပ်ငန်းစဉ်အတွင်း စနစ် ပြန်လည်စတင်ပါမည်။</translation>
 <translation id="7828731929332799387">၎င်းက ပြင်ပအခြေအနေများတွင် ရရှိနိုင်သော ကွတ်ကီးနှင့် ဝဘ်ဆိုက်ဒေတာအားလုံးကို ဖျက်လိုက်ပါမည်။ ရှေ့ဆက်လိုသလား။</translation>
 <translation id="7829298379596169484">အသံ ထည့်သွင်းမှုကို ရယူနေ</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ သင့်အင်တာနက် ချိတ်ဆက်မှုကို စစ်ဆေးပါ။</translation>
 <translation id="7829877209233347340">ကျောင်းအကောင့်ထည့်ရန်အတွက် ခွင့်ပြုချက်ပေးရန် မိဘကို လက်မှတ်ထိုးဝင်ခိုင်းပါ</translation>
 <translation id="7830594666202422257">Linux သို့ ချိတ်ဆက်ရန်</translation>
 <translation id="7831491651892296503">ကွန်ရက်စီစဉ်သတ်မှတ်ရာတွင် အမှားအယွင်းရှိပါသည်</translation>
@@ -5293,7 +5285,7 @@
 <translation id="8107015733319732394">သင့် <ph name="DEVICE_TYPE" /> တွင် Google Play စတိုးကို ထည့်သွင်းနေပါသည်။ မိနစ်အနည်းငယ် ကြာနိုင်ပါသည်။</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{ပြင်ပအဖွဲ့အစည်း၏ ကွတ်ကီးများ မရှိပါ}=1{ပြင်ပအဖွဲ့အစည်း၏ ကွတ်ကီး ၁ ခုကို ပိတ်ထားသည်}other{ပြင်ပအဖွဲ့အစည်း၏ ကွတ်ကီး # ခုကို ပိတ်ထားသည်}}</translation>
 <translation id="810875025413331850">အနီးအနားတွင် ကိရိယာများ မရှိပါ။</translation>
-<translation id="8114199541033039755">တက်ဘလက်မုဒ်တွင် ခလုတ်များဖြင့် ပင်မစာမျက်နှာသို့ သွားခြင်း၊ နောက်ပြန်သွားခြင်းနှင့် အက်ပ်များပြောင်းခြင်းတို့ ပြုလုပ်နိုင်သည်။ ChromeVox သို့မဟုတ် 'အလိုအလျောက်' ကလစ်များ ပွင့်နေသည့်အခါ ဖွင့်ပေးသည်။</translation>
+<translation id="8114199541033039755">တက်ဘလက်မုဒ်တွင် ခလုတ်များဖြင့် ပင်မစာမျက်နှာသို့ သွားခြင်း၊ နောက်ပြန်သွားခြင်းနှင့် အက်ပ်များပြောင်းခြင်းတို့ ပြုလုပ်နိုင်သည်။ ChromeVox သို့မဟုတ် 'အလိုအလျောက် ကလစ်များ' ပွင့်နေသည့်အခါ ဖွင့်ပေးသည်။</translation>
 <translation id="8114875720387900039">အလျားလိုက် ခွဲရန်</translation>
 <translation id="8116972784401310538">&amp;စာညှပ် မန်နေဂျာ</translation>
 <translation id="8117620576188476503">အခြေအနေပြ အကန့်မှတစ်ဆင့် ချိတ်ဆက်မှုများ၊ အပ်ဒိတ်များနှင့် ဆက်တင်များကို စီမံခန့်ခွဲပါ။ ကီးဘုတ်ကို အသုံးပြုရန် Alt + Shift + S ကို နှိပ်ပါ။</translation>
@@ -5950,7 +5942,6 @@
 <translation id="8966870118594285808">ဝဘ်ကို သင်မတော်တဆပိတ်မိသည့်အခါ ပြန်ဖွင့်ရန်</translation>
 <translation id="8967866634928501045">ပြရန် Alt Shift A ကို နှိပ်ပါ</translation>
 <translation id="8968766641738584599">ကတ်သိမ်းရန်</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ ၂၄ နာရီအကြာတွင် ထပ်စမ်းကြည့်ပါ သို့မဟုတ် <ph name="BEGIN_LINK" />သင်၏ Google Account ရှိ စကားဝှက်များကို စစ်ဆေးပါ<ph name="END_LINK" />။</translation>
 <translation id="89720367119469899">ထွက်</translation>
 <translation id="8972513834460200407">ကျေးဇူးပြုပြီး သင့် ကွန်ရက် စီမံအုပ်ချုပ်သူကို ဆက်သွယ်လျက် Google ဆာဗာများမှ ဒေါင်းလုဒ်များကို ဖိုင်ယာဝေါက ပိတ်ဆို့ခြင်း မရှိတာကို စစ်ကြည့်ခိုင်းပါ။</translation>
 <translation id="8973557916016709913">ဇူးမ်ချဲ့ခြင်းပမာဏကို ဖယ်ရှားရန်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 7b732cc2..cbdb732 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -395,7 +395,7 @@
 <translation id="1531004739673299060">अनुप्रयोगको विन्डो</translation>
 <translation id="1531275250079031713">'नयाँ Wi-Fi थप्नुहोस्' नामक संवाद देखाउनुहोस्</translation>
 <translation id="1536754031901697553">विच्छेद गर्दै...</translation>
-<translation id="15373452373711364">ठूलो माउस कर्सर</translation>
+<translation id="15373452373711364">ठुलो माउस कर्सर</translation>
 <translation id="1540605929960647700">डेमो मोड सक्षम पार्नुहोस्</translation>
 <translation id="1541396123399225659">नयाँ समूहमा थप्नुहोस्</translation>
 <translation id="1542514202066550870">यो ट्याबले एउटा हेडसेटमा VR सामग्री प्रस्तुत गर्दै छ।</translation>
@@ -995,7 +995,6 @@
 <translation id="2342740338116612727">पुस्तक चिन्हहरू थपिए</translation>
 <translation id="2343747224442182863">यो ट्याबमा केन्द्रित गर्नुहोस्</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> का लागि १ पृष्ठ</translation>
-<translation id="2346953515226895098">SODA सेवा</translation>
 <translation id="2347644257713614136">Hangouts र शिक्षाका लागि Cast को प्रयोगलाई Google को गोपनीयता नीतिले नियन्त्रण गर्छ।</translation>
 <translation id="2348176352564285430">अनुप्रयोग: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">डेटा लोड गर्ने क्रममा त्रुटि भयो</translation>
@@ -1487,7 +1486,7 @@
 <translation id="2977480621796371840">समूहबाट हटाउनुहोस्</translation>
 <translation id="2979520980928493164">अझ सुरक्षित, अझ राम्रो Chrome</translation>
 <translation id="2979639724566107830">नयाँ विन्डोमा खोल्नुहोस्</translation>
-<translation id="2981113813906970160">ठूलो माउस कर्सर देखाउँनुहोस्</translation>
+<translation id="2981113813906970160">ठुलो माउस कर्सर देखाउँनुहोस्</translation>
 <translation id="2982970937345031">बेनामी रूपमा रिपोर्ट गर्नुहोस्</translation>
 <translation id="2985348301114641460">आफ्ना प्रशासकलाई "<ph name="EXTENSION_NAME" />" स्थापना गरिदिन आग्रह गर्दै एउटा अनुरोध पठाउने हो?</translation>
 <translation id="2986010903908656993">यो पृष्ठलाई MIDI यन्त्रहरूको पूर्ण नियन्त्रण प्राप्त गर्नबाट ब्लक गरिएको छ।</translation>
@@ -1757,7 +1756,7 @@
 <translation id="3355936511340229503">जडान त्रुटि</translation>
 <translation id="3356580349448036450">पूर्ण</translation>
 <translation id="3359256513598016054">प्रमाणपत्र नीति अवरोधहरू</translation>
-<translation id="3360297538363969800">मुद्रण असफल भयो। कृपया तपाइँको मुद्रक जाँच्नुहोस् र पुन: प्रयास गर्नुहोस्।</translation>
+<translation id="3360297538363969800">प्रिन्टिङ असफल भयो। कृपया तपाइँको मुद्रक जाँच्नुहोस् र पुन: प्रयास गर्नुहोस्।</translation>
 <translation id="3364986687961713424">तपाईंका प्रशासकको सन्देश: <ph name="ADMIN_MESSAGE" /></translation>
 <translation id="3365598184818502391">Ctrl वा Alt मध्ये कुनै एक प्रयोग गर्नुहोस्</translation>
 <translation id="3367047597842238025">आफूले चाहे जसरी नै आफ्नो <ph name="DEVICE_TYPE" /> सेटअप गर्नुहोस् र आफ्नो पहुँच क्षेत्रभित्रै सबै राम्रा राम्रा क्षमताहरू प्राप्त गर्नुहोस्।</translation>
@@ -1919,7 +1918,7 @@
 <translation id="3575919114596668130">तपाईंले अभिभावकका रूपमा Family Link मा तय गर्नुभएका सेटिङ अझै पनि लागू हुने छन्। तपाईंले यसअघि कुनै अनुप्रयोग वा साइटमाथि रोक लगाउनुभएको थियो भने तपाईंले उक्त कार्य फेरि गरिराख्नु पर्दैन।</translation>
 <translation id="3576324189521867626">सफलतापूर्वक स्थापना गरियो</translation>
 <translation id="3578594933904494462">यस ट्याबको सामग्री साझाँ गरिदेँछ।</translation>
-<translation id="357886715122934472">&lt;strong&gt;<ph name="SENDER" />&lt;/strong&gt; ले तपाइँले स्वामित्व गरेको एक समूहसँग एक मुद्रक &lt;strong&gt;<ph name="PRINTER_NAME" />&lt;/strong&gt; साझा गर्न चाहन्छ: &lt;strong&gt;<ph name="GROUP_NAME" />&lt;/strong&gt;। यदि तपाइँले स्वीकार गर्नुभयो भने, सबै समूह सदस्यहरूले मुद्रकमा मुद्रण गर्न सक्नेछ।</translation>
+<translation id="357886715122934472">&lt;strong&gt;<ph name="SENDER" />&lt;/strong&gt; ले तपाइँले स्वामित्व गरेको एक समूहसँग एक मुद्रक &lt;strong&gt;<ph name="PRINTER_NAME" />&lt;/strong&gt; साझा गर्न चाहन्छ: &lt;strong&gt;<ph name="GROUP_NAME" />&lt;/strong&gt;। यदि तपाइँले स्वीकार गर्नुभयो भने, सबै समूह सदस्यहरूले मुद्रकमा प्रिन्टिङ गर्न सक्नेछ।</translation>
 <translation id="357889014807611375">मिटर चढ्ने Wi-Fi</translation>
 <translation id="3582057310199111521">यो पासवर्ड भ्रामक साइटमा प्रविष्टि गरिएको थियो र पासवर्डको खुलासा भएको पाइयो</translation>
 <translation id="3584169441612580296">तपाईंको कम्प्युटरबाट तस्बिरहरू, सङ्गीत र अन्य मिडिया पढ्नुहोस् र परिवर्तन गर्नुहोस्</translation>
@@ -3145,7 +3144,7 @@
 <translation id="5265562206369321422">एक हप्ता भन्दा बढीको लागि अफलाइन</translation>
 <translation id="5265797726250773323">स्थापना गर्ने क्रममा त्रुटि भयो</translation>
 <translation id="5266113311903163739">प्रमाणपत्र प्राधिकरण आयात त्रुटि</translation>
-<translation id="5269977353971873915">मुद्रण असफल भयो</translation>
+<translation id="5269977353971873915">प्रिन्टिङ असफल भयो</translation>
 <translation id="5275352920323889391">कुकुर</translation>
 <translation id="527605982717517565"><ph name="HOST" /> मा सँधै जाभास्क्रिप्टको लागि अनुम</translation>
 <translation id="5280174558369304332">हटाइनु पर्ने विस्तारहरू:</translation>
@@ -3224,7 +3223,7 @@
 <translation id="5372529912055771682">आपूर्ति गरिएएको नामांकन मोडलाई यो संस्करणको अपरेटिङ सिस्टमले समर्थन गर्दैन।  कृपया तपाईंले सबैभन्दा नयाँ संस्करण चलाईरहनुभएको छ भनि सुनिश्चित गर्नुहोस् र पुन: प्रयास गर्नुहोस्।</translation>
 <translation id="5372579129492968947">एक्स्टेन्सन अनपिन गर्नुहोस्</translation>
 <translation id="5376169624176189338">पछि जानको लागि क्लिक गर्नुहोस्, इतिहास हर्न होल्ड गर्नुहोस्</translation>
-<translation id="5376931455988532197">फाइल ज्यादै ठूलो छ</translation>
+<translation id="5376931455988532197">फाइल ज्यादै ठुलो छ</translation>
 <translation id="537813040452600081">तपाइँले यस सन्झ्यालमा हेर्ने पृष्ठहरू ब्राउजर इतिहासमा देखा पर्दैन र तिनीहरूले कम्प्युटरमा, तपइँले साइन आउट गरेपछि अन्य कुनै पनि ट्रेसहरू छाड्दैनन्, जस्तै कुकीहरू। तपाइँले डाउनलोड गर्ने फाइलहरू र सिर्जना गर्ने पृष्ठमञ्जूषाहरू संरक्षण गरिने छैन।</translation>
 <translation id="5379140238605961210">माइक्रोफोन पहुँच रोक्न जारी राख्नुहोस्</translation>
 <translation id="5382591305415226340">समर्थन गरिने लिंकहरूलाई व्यवस्थापन गर्नुहोस्</translation>
@@ -3440,7 +3439,7 @@
 <translation id="5653154844073528838">तपाईंसँग सुरक्षित गरिएका <ph name="PRINTER_COUNT" /> प्रिन्टरहरू छन्।</translation>
 <translation id="5656845498778518563">Google लाई प्रतिक्रिया पठाउनुहोस्</translation>
 <translation id="5657156137487675418">सबै कुकीहरूलाई अनुमति दिनुहोस्</translation>
-<translation id="5657667036353380798">बाह्य विस्तारलाई chrome संस्करण <ph name="MINIMUM_CHROME_VERSION" /> वा ठूलो स्थापित भएको हुन आवश्यक छ।</translation>
+<translation id="5657667036353380798">बाह्य विस्तारलाई chrome संस्करण <ph name="MINIMUM_CHROME_VERSION" /> वा ठुलो स्थापित भएको हुन आवश्यक छ।</translation>
 <translation id="5658415415603568799">अतिरिक्त सुरक्षाका खातिर Smart Lock ले तपाईंलाई २० घन्टापछि आफ्नो पासवर्ड प्रविष्ट गर्न लगाउन सक्छ।</translation>
 <translation id="5659593005791499971">इमेल</translation>
 <translation id="5659833766619490117">यस पृष्ठलाई अनुवाद गर्न सकिएन</translation>
@@ -3499,7 +3498,7 @@
 <translation id="5736796278325406685">कृपया एउटा मान्य प्रयोगकर्ता नाम थप्नुहोस्</translation>
 <translation id="5739017626473506901"><ph name="USER_NAME" /> लाई विद्यालयको खाता थप्न मद्दत गर्न साइन इन गर्नुहोस्</translation>
 <translation id="5739235828260127894">पुष्टिका लागि प्रतीक्षा गर्दै। <ph name="LINK_BEGIN" />थप जान्नुहोस्।<ph name="LINK_END" /></translation>
-<translation id="5739458112391494395">धेरै ठूलो</translation>
+<translation id="5739458112391494395">धेरै ठुलो</translation>
 <translation id="574209121243317957">पिच</translation>
 <translation id="5746169159649715125">पीडीएपको रूपमा बचत गर्नुहोस्</translation>
 <translation id="5747552184818312860">म्याद सकिन्छ</translation>
@@ -3763,7 +3762,7 @@
 <translation id="6091761513005122595">आदान प्रदान माउन्ट गर्ने कार्य सफलतापूर्वक सम्पन्न भयो।</translation>
 <translation id="6093888419484831006">अद्यावधिक रद्द गर्दै...</translation>
 <translation id="6095984072944024315">-</translation>
-<translation id="6096047740730590436">ठूलो बनाइएको खोल्नुहोस्</translation>
+<translation id="6096047740730590436">ठुलो बनाइएको खोल्नुहोस्</translation>
 <translation id="6096326118418049043">X.500 नाम</translation>
 <translation id="609662062217584106">UPI ID</translation>
 <translation id="6097480669505687979">तपाईँले ठाउँ खाली गर्नुभएन भने प्रयोगकर्ता र डेटालाई स्वतः हटाइन सक्छ।</translation>
@@ -3800,7 +3799,7 @@
 <translation id="6141988275892716286">डाउनलोड गर्ने पुष्टि गर्नुहोस्</translation>
 <translation id="6143186082490678276">मद्दत प्राप्त गर्नुहोस्</translation>
 <translation id="6144938890088808325">हामीलाई Chromebooks लाई सुधार गर्न मद्दत गर्नुहोस्</translation>
-<translation id="614611931938947795">यो फाइल क्लाउडमा स्क्यान गर्न नसकिने गरी ठूलो भएकाले यसलाई खोल्न रोक लगाइएको छ।</translation>
+<translation id="614611931938947795">यो फाइल क्लाउडमा स्क्यान गर्न नसकिने गरी ठुलो भएकाले यसलाई खोल्न रोक लगाइएको छ।</translation>
 <translation id="6147020289383635445">छपाइ पूर्वावलोकन असफल भयो।</translation>
 <translation id="6148576794665275391">अहिले खुला छ</translation>
 <translation id="6149015141270619212">इन्टरनेटमा जोड्न सकिएन</translation>
@@ -4486,7 +4485,7 @@
 <translation id="7094434674404953373">अद्यावधिक पूरा भएपछि यन्त्र पुनः सुरु हुने छ।</translation>
 <translation id="7098389117866926363">USB-C यन्त्र (पछाडिमा बाँया पोर्ट)</translation>
 <translation id="7098447629416471489">सुरक्षित गरिएका अन्य खोज इन्जिनहरू यहाँ देखापर्ने छन्</translation>
-<translation id="7099337801055912064">ठूलो आकारको PPD लोड गर्न सकिँदैन। लोड गर्न सकिने अधिकतम आकार २५० के.बि. हो।</translation>
+<translation id="7099337801055912064">ठुलो आकारको PPD लोड गर्न सकिँदैन। लोड गर्न सकिने अधिकतम आकार २५० के.बि. हो।</translation>
 <translation id="7102687220333134671">स्वतःअद्यावधिकहरू सक्रिय गरिएका छन्</translation>
 <translation id="7102832101143475489">यो अनुरोधको समयावधि सकियो</translation>
 <translation id="7102928824073746774">नामविहीन समूह - <ph name="GROUP_CONTENTS" /></translation>
@@ -4708,7 +4707,7 @@
 <translation id="7407430846095439694">आयात गनुहोस् र बाँध्नुहोस्</translation>
 <translation id="7407504355934009739">धेरैजसो मान्छेहरू यो साइटका सूचनाहरूमाथि रोक लगाउँछन्</translation>
 <translation id="740810853557944681">प्रिन्ट सर्भर थप्नुहोस्</translation>
-<translation id="7409549334477097887">ज्यादै ठूलो</translation>
+<translation id="7409549334477097887">ज्यादै ठुलो</translation>
 <translation id="7410344089573941623"><ph name="HOST" />लाई तपाइँको क्यामेरा र माइक्रोफोन पहुँच गर्न चाहन्छ की भनेर सोध्नुहोस्।</translation>
 <translation id="741204030948306876">हुन्छ, म सहमत छु</translation>
 <translation id="7412226954991670867">GPU समृति</translation>
@@ -4800,7 +4799,6 @@
 <translation id="7530016656428373557">वाट्स मा दर डिस्चार्ज गर्नुहोस्</translation>
 <translation id="7531779363494549572">सेटिङहरू &gt; अनुप्रयोग तथा सूचनाहरू &gt; सूचनाहरू नामक विकल्पमा जानुहोस्।</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ले प्रतिक्रिया जनाइरहेको छैन। अनुप्रयोग बन्द गर्न "बलपूर्वक बन्द गर्नुहोस्" चयन गर्नुहोस्।</translation>
-<translation id="7536333565791380193">उन्नत सुरक्षा</translation>
 <translation id="7537451260744431038">साइटहरूले तपाईंलाई राम्रो ब्राउजिङ अनुभव दिन कुकीहरूको प्रयोग गर्न सक्दैनन्। उदाहरणको लागि साइटहरूले कुकीहरूको प्रयोग गरी तपाईंलाई साइन इन अवस्थामै राख्न वा तपाईंको किनमेलको कार्टमा भएका वस्तुहरू सम्झन सक्दैनन्।</translation>
 <translation id="7539856059004947393">ब्लुटुथ सुरक्षा साँचो</translation>
 <translation id="7540972813190816353">अद्यावधिकहरू खोज्दा एक त्रुटि भयो: <ph name="ERROR" /></translation>
@@ -5067,7 +5065,7 @@
 <translation id="7855678561139483478">ट्याब नयाँ विन्डोमा सार्नुहोस्</translation>
 <translation id="7857117644404132472">अपवाद थप्नुहोस्</translation>
 <translation id="7857949311770343000">के यो नै तपाईंले अपेक्षा गर्नुभएको नयाँ ट्याब पृष्ठ हो?</translation>
-<translation id="7859938049767853383">क्लाउडमा स्क्यान गर्नका लागि <ph name="FILE_NAME" /> धेरै ठूलो छ र यसलाई खोल्न रोक लगाइएको छ।</translation>
+<translation id="7859938049767853383">क्लाउडमा स्क्यान गर्नका लागि <ph name="FILE_NAME" /> धेरै ठुलो छ र यसलाई खोल्न रोक लगाइएको छ।</translation>
 <translation id="786073089922909430">सेवा: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;डाउनलोडहरू</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - जोडा बनाइयो</translation>
@@ -5225,7 +5223,7 @@
 <translation id="8063535366119089408">फाइल हेर्नुहोस्</translation>
 <translation id="8068253693380742035">साइन इन गर्न छुनुहोस्</translation>
 <translation id="8068809649322155577">यसले <ph name="SITE_GROUP_NAME" /> ले भण्डारण गरेका सबै डेटा, कुकीहरू र यसअन्तर्गतका सबै साइट र यसमा स्थापना गरिएका अनुप्रयोगहरू हटाउने छ।</translation>
-<translation id="8069615408251337349">Google क्लाउड मुद्रण</translation>
+<translation id="8069615408251337349">Google क्लाउड प्रिन्टिङ</translation>
 <translation id="8071432093239591881">छविको रूपमा प्रिन्ट गर्नुहोस्</translation>
 <translation id="8073499153683482226"><ph name="BEGIN_PARAGRAPH1" />अनुप्रयोगका डेटा भनेको सम्पर्क, सन्देश र तस्बिरहरू जस्ता डेटालगायत कुनै अनुप्रयोगले सुरक्षित गरेको (विकासकर्ताको सेटिङहरूका आधारमा) जुनसुकै डेटा हुन सक्छ।<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />ब्याकअपसम्बन्धी डेटालाई तपाईंका बालकको ड्राइभको भण्डारण कोटामा गणना गरिने छैन।<ph name="END_PARAGRAPH2" />
@@ -5497,7 +5495,7 @@
 <translation id="8443338615972234259">कृपया सुपरिवेक्षण गरिएको आफ्नो प्रयोगकर्ताका लागि अहिले नै नयाँ खाता सिर्जना गर्नुहोस्।</translation>
 <translation id="8446884382197647889">थप जान्नुहोस्</translation>
 <translation id="8447409163267621480">Ctrl वा Alt कुञ्जी समावेश गर्नुहोस्</translation>
-<translation id="8448729345478502352">तपाईंको स्क्रिनमा भएका वस्तुहरूलाई अझ ठूलो वा सानो पार्नुहोस्</translation>
+<translation id="8448729345478502352">तपाईंको स्क्रिनमा भएका वस्तुहरूलाई अझ ठुलो वा सानो पार्नुहोस्</translation>
 <translation id="8449008133205184768">टाँस्नुहोस् र शैली मिलाउनुहोस्</translation>
 <translation id="8449036207308062757">भण्डारणको व्यवस्थापन गर्नुहोस्</translation>
 <translation id="8452135315243592079">SIM कार्ड उपलब्ध छैन</translation>
@@ -5632,7 +5630,7 @@
 <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - पोर्ट</translation>
 <translation id="8639635302972078117">प्रयोग तथा निदानसम्बन्धी डेटा पठाउनुहोस्। यो यन्त्रले हाल निदान, यन्त्र र अनुप्रयोगको प्रयोगसम्बन्धी डेटा स्वतः Google लाई पठाइरहेको छ। यस्तो डेटा तपाईंका बच्चाको पहिचान गर्ने प्रयोजनका लागि प्रयोग गरिने छैन र यसले प्रणाली तथा अनुप्रयोगको स्थिरता र अन्य कुराहरूमा सुधार ल्याउन मद्दत गर्ने छ। केही समग्र डेटाले Google का अनुप्रयोग तथा Android का विकासकर्ता जस्ता साझेदारहरूलाई पनि मद्दत गर्ने छन्। तपाईंका बच्चाका खातामा वेब तथा अनुप्रयोगसम्बन्धी अतिरिक्त गतिविधिको सेटिङ सक्रिय गरिएको छ भने यो डेटा उनको Google खातामा सुरक्षित गरिन सक्छ।</translation>
 <translation id="8642900771896232685">२ सेकेन्ड</translation>
-<translation id="8642947597466641025">पाठ ठूलो बानउनुहोस्</translation>
+<translation id="8642947597466641025">पाठ ठुलो बानउनुहोस्</translation>
 <translation id="8643443571868262066"><ph name="FILE_NAME" /> हानिकारक हुन सक्छ। यो फाइल सुरक्षित छ कि छैन भनी स्क्यान गर्न यसलाई Google को सुरक्षासम्बन्धी उन्नत सुविधामा पठाउने हो?</translation>
 <translation id="8644655801811752511">यो सुरक्षा साँचो रिसेट गर्न सकिएन। साँचो प्रविष्टि गर्नेबित्तिकै यसलाई रिसेट गरी हेर्नुहोस्।</translation>
 <translation id="8645354835496065562">सेन्सरलाई पहुँच राख्ने अनुमति दिन जारी राख्नुहोस्</translation>
@@ -5644,7 +5642,7 @@
 <translation id="8651585100578802546">यो पेज रिलोड गर्न दबाब दिनुहोस्</translation>
 <translation id="8652400352452647993">प्याक विस्तारसम्बन्धी त्रुटि</translation>
 <translation id="8653578191563425126">Crostini का सुरक्षित गरिएको डिस्कको खाली ठाउँ (तपाईं यो कुरा पछि परिवर्तन गर्न सक्नुहुन्छ)।</translation>
-<translation id="8654151524613148204">यो फाइल तपाइँको कम्प्युटरलाई सञ्चालन गर्नको लागि अत्यन्त ठूलो छ। माफ गर्नुहोस्।</translation>
+<translation id="8654151524613148204">यो फाइल तपाइँको कम्प्युटरलाई सञ्चालन गर्नको लागि अत्यन्त ठुलो छ। माफ गर्नुहोस्।</translation>
 <translation id="8655295600908251630">च्यानल</translation>
 <translation id="8655319619291175901">ओहो, केही गलत भयो।</translation>
 <translation id="8655972064210167941">साइन इन असफल भयो किनभने तपाईँको पासवर्ड प्रमाणित गर्न सकिएन। कृपया तपाईँको प्रशासकलाई सम्पर्क गर्नुहोस् वा फेरि प्रयास गर्नुहोस्।</translation>
@@ -5986,7 +5984,7 @@
 <translation id="9064142312330104323">Google प्रोफाइल तस्बिर (लोड हुँदैछ)</translation>
 <translation id="9064275926664971810">एकै क्लिकमा वेबका फारामहरू भर्न स्वत: भरणलाई सक्रिय गर्नुहोस्</translation>
 <translation id="9065203028668620118">सम्पादन गर्नुहोस</translation>
-<translation id="9066773882585798925">पाठलाई ठूलो स्वरमा पढेको सुन्नुहोस्</translation>
+<translation id="9066773882585798925">पाठलाई ठुलो स्वरमा पढेको सुन्नुहोस्</translation>
 <translation id="9066782832737749352">पाठवाचक</translation>
 <translation id="9068849894565669697">रङ चयन गर्नुहोस्</translation>
 <translation id="9073281213608662541">PAP</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index a297f5c..754ae53 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Bladwijzers toegevoegd</translation>
 <translation id="2343747224442182863">Focus op dit tabblad plaatsen</translation>
 <translation id="2345723121311404059">1 pagina naar <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA-service</translation>
 <translation id="2347644257713614136">Het gebruik van Hangouts en Cast for Education valt onder het privacybeleid van Google.</translation>
 <translation id="2348176352564285430">App: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Fout bij laden van gegevens</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Vingerafdrukken op deze beveiligingssleutel</translation>
 <translation id="3973660817924297510">Wachtwoorden controleren (<ph name="CHECKED_PASSWORDS" /> van <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Verbinding maken met server voor domein mislukt</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan je wachtwoorden niet checken. Probeer het opnieuw.</translation>
 <translation id="3976108569178263973">Er zijn geen printers beschikbaar.</translation>
 <translation id="397703832102027365">Wordt voltooid...</translation>
 <translation id="3977886311744775419">Automatische updates worden niet gedownload op dit type netwerk, maar je kunt handmatig op updates controleren.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Pluisje</translation>
 <translation id="4423376891418188461">Instellingen herstellen</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, de beheerder vereist dat je je wachtwoord wijzigt.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan je wachtwoorden niet checken. Probeer het over 24 uur opnieuw.</translation>
 <translation id="4429030830601238961">Deze gegevens voldoen niet aan het beveiligingsbeleid van je organisatie en kunnen niet worden geplakt.</translation>
 <translation id="4430019312045809116">Volume</translation>
 <translation id="4430369329743628066">Bladwijzer toegevoegd</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Wil je dat deze app automatisch start wanneer het apparaat wordt ingeschakeld?</translation>
 <translation id="4441147046941420429">Als je wilt doorgaan, verwijder je de beveiligingssleutel uit je apparaat, steek je hem er opnieuw en tik je erop</translation>
 <translation id="444134486829715816">Uitvouwen...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan je wachtwoorden checken als je inlogt met je Google-account.</translation>
 <translation id="4442424173763614572">DNS-lookup mislukt</translation>
 <translation id="4443536555189480885">&amp;Help</translation>
 <translation id="4444304522807523469">Toegang tot documentscanners die zijn aangesloten via USB of die zich op het lokale netwerk bevinden</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Je kunt een QR-scanner-app op je telefoon of sommige camera-apps gebruiken om deze code te scannen.</translation>
 <translation id="4477015793815781985">Neem Ctrl, Alt of ⌘ op</translation>
 <translation id="4478664379124702289">Lin&amp;k opslaan als...</translation>
-<translation id="4478777936860197922">Geen opgeslagen wachtwoorden. <ph name="IDS_SHORT_PRODUCT_NAME" /> kan je wachtwoorden checken als je deze hebt opgeslagen.</translation>
 <translation id="4479424953165245642">Kiosk-apps beheren</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">De virtuele machine wordt geconfigureerd. Dit kan enkele minuten duren.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Niet installeren</translation>
 <translation id="4850669014075537160">Scrollen</translation>
 <translation id="4850886885716139402">Weergave</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> laat het je weten als je inlogt met een gehackt wachtwoord</translation>
 <translation id="4853020600495124913">Openen in &amp;nieuw venster</translation>
 <translation id="4854317507773910281">Kies een ouderaccount voor goedkeuring</translation>
 <translation id="485480310608090163">Meer instellingen en rechten</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Ontlading in Watt</translation>
 <translation id="7531779363494549572">Ga naar Instellingen &gt; Apps en meldingen &gt; Meldingen.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> reageert niet. Selecteer 'Nu sluiten' om de app te sluiten.</translation>
-<translation id="7536333565791380193">Geavanceerde beveiliging</translation>
 <translation id="7537451260744431038">Sites mogen geen cookies gebruiken om de browsefunctionaliteit te verbeteren, bijvoorbeeld door je ingelogd te houden of door artikelen in je winkelwagen te onthouden</translation>
 <translation id="7539856059004947393">Bluetooth-beveiligingssleutel</translation>
 <translation id="7540972813190816353">Er is een fout opgetreden bij het ​​controleren op updates: <ph name="ERROR" /></translation>
@@ -5077,7 +5070,6 @@
     <ph name="BEGIN_BOLD" />Opmerking:<ph name="END_BOLD" /> Het systeem wordt opnieuw opgestart tijdens het proces.</translation>
 <translation id="7828731929332799387">Dit verwijdert alle cookies en sitegegevens van derden. Wil je doorgaan?</translation>
 <translation id="7829298379596169484">Audio-invoer openen</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan je wachtwoorden niet checken. Check de internetverbinding.</translation>
 <translation id="7829877209233347340">Vraag een ouder om in te loggen en toe te staan dat je een schoolaccount toevoegt</translation>
 <translation id="7830594666202422257">Verbinden met Linux</translation>
 <translation id="7831491651892296503">Fout bij configureren van netwerk</translation>
@@ -5953,7 +5945,6 @@
 <translation id="8966870118594285808">Een tabblad opnieuw openen wanneer je dit per ongeluk hebt gesloten</translation>
 <translation id="8967866634928501045">Druk op Alt+Shift+A om weer te geven</translation>
 <translation id="8968766641738584599">Pas opslaan</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan je wachtwoorden niet checken. Probeer het over 24 uur opnieuw of <ph name="BEGIN_LINK" />check de wachtwoorden in je Google-account<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Neem contact op met je netwerkbeheerder om ervoor te zorgen dat downloads van Google-servers niet door de firewall worden geblokkeerd.</translation>
 <translation id="8973557916016709913">Zoomniveau verwijderen</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 9e92b1b..34cce849 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -1008,7 +1008,6 @@
 <translation id="2342740338116612727">Bokmerkene er lagt til</translation>
 <translation id="2343747224442182863">Fokusér på denne fanen</translation>
 <translation id="2345723121311404059">1 side til <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA Service</translation>
 <translation id="2347644257713614136">Bruk av Hangouts og Cast for Education er underlagt Googles personvernregler.</translation>
 <translation id="2348176352564285430">App: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Feil ved innlasting av data</translation>
@@ -2281,7 +2280,6 @@
 <translation id="3971764089670057203">Fingeravtrykk på denne sikkerhetsnøkkelen</translation>
 <translation id="3973660817924297510">Sjekker passord (<ph name="CHECKED_PASSWORDS" /> av <ph name="TOTAL_PASSWORDS" />) …</translation>
 <translation id="3975565978598857337">Kunne ikke kontakte tjeneren for området</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan ikke sjekke passordene dine. Prøv igjen senere.</translation>
 <translation id="3976108569178263973">Det er ingen tilgjengelige skrivere.</translation>
 <translation id="397703832102027365">Fullfører …</translation>
 <translation id="3977886311744775419">Automatiske oppdateringer lastes ikke ned på denne nettverkstypen, men du kan se etter oppdateringer manuelt.</translation>
@@ -2582,7 +2580,6 @@
 <translation id="4421932782753506458">Pus</translation>
 <translation id="4423376891418188461">Gjenopprett innstillingene</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, administratoren din krever at du endrer passord.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan ikke sjekke passordene dine. Prøv igjen når det har gått 24 timer.</translation>
 <translation id="4429030830601238961">Disse dataene bryter sikkerhetsretningslinjene til organisasjonen din og kan ikke limes inn.</translation>
 <translation id="4430019312045809116">Volum</translation>
 <translation id="4430369329743628066">Bokmerke lagt til</translation>
@@ -2595,7 +2592,6 @@
 <translation id="4441124369922430666">Vil du starte denne appen automatisk når maskinen slås på?</translation>
 <translation id="4441147046941420429">For å fortsette, fjern sikkerhetsnøkkelen fra enheten, sett den inn på nytt, og berør den</translation>
 <translation id="444134486829715816">Utvid</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan sjekke passordene dine når du logger på med Google-kontoen din.</translation>
 <translation id="4442424173763614572">DNS-søk mislyktes</translation>
 <translation id="4443536555189480885">&amp;Hjelp</translation>
 <translation id="4444304522807523469">Få tilgang til dokumentskannere som er tilkoblet via USB eller på det lokale nettverket</translation>
@@ -2622,7 +2618,6 @@
 <translation id="4476659815936224889">For å skanne denne koden kan du bruke en QR-skanningsapp på telefonen eller enkelte kameraapper.</translation>
 <translation id="4477015793815781985">Inkluder Ctrl, Alt eller ⌘</translation>
 <translation id="4478664379124702289">Lagre lin&amp;ken som</translation>
-<translation id="4478777936860197922">Ingen lagrede passord. <ph name="IDS_SHORT_PRODUCT_NAME" /> kan sjekke passordene dine når du lagrer dem.</translation>
 <translation id="4479424953165245642">Administrer kiosk-apper</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Konfigurerer den virtuelle maskinen. Dette kan ta noen minutter.</translation>
@@ -2868,7 +2863,6 @@
 <translation id="4849517651082200438">Ikke installer</translation>
 <translation id="4850669014075537160">Rulling</translation>
 <translation id="4850886885716139402">Visning</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> varsler deg når du logger på med passord som er utsatt for sikkerhetsbrudd</translation>
 <translation id="4853020600495124913">Åpne i &amp;nytt vindu</translation>
 <translation id="4854317507773910281">Velg foreldrekonto for godkjenning</translation>
 <translation id="485480310608090163">Flere innstillinger og tillatelser</translation>
@@ -4832,7 +4826,6 @@
 <translation id="7530016656428373557">Utladningshastighet i watt</translation>
 <translation id="7531779363494549572">Gå til Innstillinger &gt; Apper og varsler &gt; Varsler.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> svarer ikke. Velg «Tving avslutning» for å lukke appen.</translation>
-<translation id="7536333565791380193">Avansert sikkerhet</translation>
 <translation id="7537451260744431038">Nettsteder kan ikke bruke informasjonskapsler for å gi deg en bedre surfeopplevelse, for eksempel for å holde deg pålogget eller huske varene i handlekurven din</translation>
 <translation id="7539856059004947393">Bluetooth-sikkerhetsnøkkel</translation>
 <translation id="7540972813190816353">Det oppsto en feil under søk etter oppdateringer: <ph name="ERROR" /></translation>
@@ -5073,7 +5066,6 @@
     <ph name="BEGIN_BOLD" />Merk:<ph name="END_BOLD" /> Systemet startes på nytt i løpet av prosessen.</translation>
 <translation id="7828731929332799387">Dette sletter alle informasjonskapsler og nettstedsdata som er tilgjengelige i tredjepartskontekster. Vil du fortsette?</translation>
 <translation id="7829298379596169484">Åpner lydinngang</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan ikke sjekke passordene dine. Se om du er koblet til internett.</translation>
 <translation id="7829877209233347340">Be en forelder om å logge på for å gi tillatelse til å legge til en skolekonto</translation>
 <translation id="7830594666202422257">Koble til Linux</translation>
 <translation id="7831491651892296503">En feil oppsto under konfigureringen av nettverket</translation>
@@ -5948,7 +5940,6 @@
 <translation id="8966870118594285808">Åpne faner på nytt hvis du lukket dem ved et uhell</translation>
 <translation id="8967866634928501045">Trykk på Alt + Shift + A for å vise</translation>
 <translation id="8968766641738584599">Lagre kortet</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan ikke sjekke passordene dine. Prøv på nytt om 24 timer, eller <ph name="BEGIN_LINK" />sjekk passordene i Google-kontoen din<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Kontakt nettverksadministratoren din for å sjekke at brannmuren ikke blokkerer nedlastinger fra Google-tjenere.</translation>
 <translation id="8973557916016709913">Fjern zoomnivået</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index d407eba..6764fc17 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">ବୁକ୍‌ମାର୍କର ନାମ</translation>
 <translation id="1124772482545689468">ଉପଯୋଗକର୍ତ୍ତା</translation>
 <translation id="1125550662859510761">ଏପରି ଜଣାପଡ଼ୁଛି <ph name="WIDTH" /> x <ph name="HEIGHT" /> (ମୂଳ)</translation>
+<translation id="1126809382673880764">ବିପଦଜନକ ୱେବସାଇଟ୍, ଡାଉନଲୋଡ୍ ଏବଂ ଏକ୍ସଟେନ୍ସନଗୁଡ଼ିକ ଠାରୁ ଆପଣଙ୍କୁ ରକ୍ଷା କରେ ନାହିଁ। Gmail ଏବଂ Search ପରି ଅନ୍ୟ Google ସେବାଗୁଡ଼ିକରେ ସେଫ୍ ବ୍ରାଉଜିଂ ସୁବିଧା ଉପଲବ୍ଧ ଥିଲେ, ଆପଣ ଏବେ ବି ଏହି ସୁରକ୍ଷା ପାଇବେ।</translation>
 <translation id="1128109161498068552">MIDI ଡିଭାଇସ୍‍ଗୁଡ଼ିକୁ ଆକ୍‌ସେସ୍ କରିବା ପାଇଁ ସିଷ୍ଟମ୍‍ର ବିଶେଷ ମେସେଜ୍‍ଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବା ନିମନ୍ତେ କୌଣସି ସାଇଟ୍‌କୁ ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">ସର୍ଚ୍ଚ ଇଞ୍ଜିନ୍ ଏଡିଟ୍ କରନ୍ତୁ</translation>
@@ -184,6 +185,7 @@
 <translation id="1235458158152011030">ଜଣାଶୁଣା ନେଟ୍‌ୱାର୍କ</translation>
 <translation id="123578888592755962">ଡିସ୍କ ପୂର୍ଣ୍ଣ ଅଛି</translation>
 <translation id="1238191093934674082">VPN ଖୋଲନ୍ତୁ</translation>
+<translation id="1239439601391236986">ଇନପୁଟ୍ ବ୍ୟକ୍ତିଗତ ସୂଚନା ପରାମର୍ଶଗୁଡ଼ିକ ଦେଖାନ୍ତୁ</translation>
 <translation id="1239594683407221485">Files ଆପ୍‌ରେ ଡିଭାଇସ୍‌ର ବିଷୟବସ୍ତୁ ଏକ୍ସପ୍ଲୋର୍ କରନ୍ତୁ।</translation>
 <translation id="124116460088058876">ଅନେକ ଭାଷା</translation>
 <translation id="1241753985463165747">ଲାଗୁ କରାଗଲେ ସାମ୍ପ୍ରତିକ ୱେବ୍‍ସାଇଟ୍‍‍ରେ ଆପଣଙ୍କ ଡାଟା ପଢ଼ନ୍ତୁ ଏବଂ ବଦଳାନ୍ତୁ</translation>
@@ -300,6 +302,7 @@
 <translation id="140723521119632973">ସେଲ୍ୟୁଲାର୍ ସକ୍ରିୟକରଣ</translation>
 <translation id="1407489512183974736">କେନ୍ଦ୍ରସ୍ଥଳରେ କ୍ରପ୍‌ କରାଗଲା</translation>
 <translation id="1408504635543854729">Files ଆପ୍‌ରେ ଡିଭାଇସ୍‌ର ବିଷୟବସ୍ତୁ ଏକ୍ସପ୍ଲୋର୍ କରନ୍ତୁ। ଏହି ବିଷୟବସ୍ତୁ ଜଣେ ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ଵାରା ପ୍ରତିବନ୍ଧିତ ଏବଂ ଏହାକୁ ସଂଶୋଧନ କରାଯାଇ ପାରିବ ନାହିଁ।</translation>
+<translation id="1408980562518920698">ବ୍ୟକ୍ତିଗତ ସୂଚନା ପରିଚାଳନା କରନ୍ତୁ</translation>
 <translation id="1410197035576869800">ଆପ୍ ଆଇକନ୍</translation>
 <translation id="1410616244180625362"><ph name="HOST" />କୁ ଆପଣଙ୍କ କ୍ୟାମେରାର ଆକ୍ସେସ୍ ଦେବା ଜାରି ରଖନ୍ତୁ</translation>
 <translation id="1414648216875402825">ଆପଣ <ph name="PRODUCT_NAME" />ର ଏକ ଅସ୍ଥାୟୀ ସଂସ୍କରଣ ଅପ୍‍‍ଡେଟ୍ କରୁଛନ୍ତି ଯେଉଁଥିରେ ଏପରି ବୈଶିଷ୍ଟ୍ୟ ରହିଛି ଯାହା ପ୍ରଗତିିିିରେ ଅଛି। କ୍ରାସ୍ ଓ ଅପ୍ରତ୍ୟାଶିତ ବଗ୍ ଉତ୍ପନ୍ନ ହେବ। ଦୟାକରି ସତର୍କତାର ସହିତ ଆଗକୁ ବଢ଼ନ୍ତୁ।</translation>
@@ -430,6 +433,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript କନସୋଲେ</translation>
 <translation id="1587907146729660231">ଆପଣଙ୍କର ଆଙ୍ଗୁଠିରେ ପାୱାର୍‌ ବଟନ୍‌କୁ ସ୍ପର୍ଶ କରନ୍ତୁ</translation>
+<translation id="1588200577109872591">ସ୍ମାର୍ଟ ଇନପୁଟଗୁଡ଼ିକ</translation>
 <translation id="1588438908519853928">ସାଧାରଣ</translation>
 <translation id="158849752021629804">ହୋମ୍‌ ନେଟ୍‌ୱର୍କ ଦରକାର</translation>
 <translation id="1588870296199743671">ଏହା ମାଧ୍ୟମରେ ଲିଙ୍କ ଖୋଲନ୍ତୁ...</translation>
@@ -665,6 +669,7 @@
 <translation id="1879000426787380528">ଏହିପରି ଭାବରେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ</translation>
 <translation id="1880905663253319515">ସାର୍ଟିଫିକେଟ୍ "<ph name="CERTIFICATE_NAME" />" ଡିଲିଟ୍ କରିବେ କି?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" />ଟିର <ph name="NETWORK_INDEX" /> ନେଟ୍‌ୱାର୍କ, <ph name="NETWORK_NAME" /> ସଂଯୋଗ କରନ୍ତୁ</translation>
+<translation id="1884705339276589024">Linux ଡିସ୍କର ଆକାର ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation>
 <translation id="1886996562706621347">ସାଇଟ୍‍ଗୁଡ଼ିକୁ ପ୍ରୋଟୋକଲ୍ ପାଇଁ ଡିଫଲ୍ଟ ହ୍ୟାଣ୍ଡଲର୍ ହେବା ପାଇଁ ପଚାରିବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ (ସୁପାରିଶ୍ କରାଯାଇଛି)</translation>
 <translation id="1887442540531652736">ସାଇନ୍‍-ଇନ୍ କରିବାରେ ତ୍ରୁଟି</translation>
 <translation id="1887597546629269384">ପୁଣି "Hey Google" କୁହନ୍ତୁ</translation>
@@ -734,6 +739,7 @@
 <translation id="1979280758666859181">ଆପଣ <ph name="PRODUCT_NAME" />ର ଏକ ପୁରୁଣା ସଂସ୍କରଣ ଥିବା ଏକ ଚ୍ୟାନେଲ୍‍କୁ ପରିବର୍ତ୍ତନ କରୁଛନ୍ତି। ଯେତେବେଳେ ଚ୍ୟାନେଲ୍‍ର ସଂସ୍କରଣ ଆପଣଙ୍କ ଡିଭାଇସ୍‍‍ରେ ବର୍ତ୍ତମାନ ଇନ୍‍ଷ୍ଟଲ୍ ହୋଇଥିବା ସଂସ୍କରଣ ସହିତ ମେଳ ଖାଇବ, ସେତେବଳେ ଚ୍ୟାନେଲ୍ ପରିବର୍ତ୍ତନ କାର୍ଯ୍ୟକାରୀ ହେବ।</translation>
 <translation id="197989455406964291">KDC, ଏନକ୍ରିପସନ୍‌ର ପ୍ରକାର ସମର୍ଥନ କରେ ନାହିଁ</translation>
 <translation id="1982354452682152483">କୌଣସି ଡେସ୍କ୍ରିପସନ୍ ଉପଲବ୍ଧ ନାହିଁ।</translation>
+<translation id="1984417487208496350">କୌଣସି ସୁରକ୍ଷା ନାହିଁ (ସୁପାରିଶ କରାଯାଇ ନାହିଁ)</translation>
 <translation id="1987317783729300807">ଆକାଉଣ୍ଟ</translation>
 <translation id="1989112275319619282">ବ୍ରାଉଜ୍ କରନ୍ତୁ</translation>
 <translation id="1990512225220753005">ଏହି ପୃଷ୍ଠାରେ ସର୍ଟକଟ୍‌ଗୁଡ଼ିକ ଦେଖାନ୍ତୁ ନାହିଁ</translation>
@@ -803,6 +809,7 @@
 <translation id="2090165459409185032">ଆପଣଙ୍କର ଆକାଉଣ୍ଟ ସୂଚନା ପୁନରୁଦ୍ଧାର କରିବାକୁ, ଏଠାକୁ ଯାଆନ୍ତୁ: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">ସିଷ୍ଟମ୍ ସୁରକ୍ଷା ସେଟିଂ</translation>
 <translation id="2091887806945687916">ଧ୍ୱନି</translation>
+<translation id="2096478741073211388">ଯେତେବେଳେ ଆପଣ କିଛି ନିର୍ଦ୍ଦିଷ୍ଟ ଶବ୍ଦ ଟାଇପ୍ କରନ୍ତି, ବ୍ୟକ୍ତିଗତ ସୂଚନା ପ୍ରସ୍ତାବଗୁଡ଼ିକ ଆପଣଙ୍କ ନାମ, ଠିକଣା କିମ୍ବା ଫୋନ୍ ନମ୍ବରର ପ୍ରସ୍ତାବ ଦେଇ ଶୀଘ୍ର ଲେଖିବାରେ ସାହାଯ୍ୟ କରିଥାଏ। ଆପଣଙ୍କ ଆକାଉଣ୍ଟ ପାଇଁ କେବଳ ଆପଣ ଆପଣଙ୍କର ବ୍ୟକ୍ତିଗତ, ବ୍ୟକ୍ତିଗତକୃତ ପରାମର୍ଶଗୁଡ଼ିକ ଦେଖନ୍ତି।</translation>
 <translation id="2096715839409389970">ତୃତୀୟ-ପକ୍ଷ କୁକୀଗୁଡ଼ିକ ଖାଲି କରନ୍ତୁ</translation>
 <translation id="2097372108957554726">ନୂଆ ଡିଭାଇସ୍‍ଗୁଡ଼ିକ ପଞ୍ଜିକୃତ କରିବା ପାଇଁ ଆପଣଙ୍କୁ Chromeରେ ସାଇନ୍ ଇନ୍ କରିବାକୁ ହେବ</translation>
 <translation id="2099172618127234427">ଆପଣ Chrome OS ଡିବଗିଂ ବୈଶିଷ୍ଟ୍ୟକୁ ସକ୍ଷମ କରୁଛନ୍ତି, ଯାହା sshd ଡିମୋନ୍‌କୁ ସେଟ୍ ଅପ୍ କରିବ ଏବଂ USB ଡ୍ରାଇଭ୍‌ଗୁଡିକରୁ ବୁଟିଂ ସକ୍ଷମ କରିବ।</translation>
@@ -819,6 +826,7 @@
 <translation id="2114326799768592691">&amp;ଫ୍ରେମ୍ ରିଲୋଡ୍ କରନ୍ତୁ</translation>
 <translation id="2114896190328250491"><ph name="NAME" />ଙ୍କ ଦ୍ୱାରା ଫଟୋ</translation>
 <translation id="2119349053129246860"><ph name="APP" />ରେ ଖୋଲନ୍ତୁ</translation>
+<translation id="2119461801241504254">ସେଫ୍ ବ୍ରାଉଜିଂ ଚାଲୁ ଅଛି ଏବଂ ଏହା ଆପଣଙ୍କୁ କ୍ଷତିକାରକ ସାଇଟ୍ ଏବଂ ଡାଉନଲୋଡଗୁଡ଼ିକରୁ ସୁରକ୍ଷିତ ରଖିଥାଏ</translation>
 <translation id="2120297377148151361">ଗତିବିଧି ଏବଂ ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> ବ୍ଲକ୍ କରାଯାଇଛି</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{କୁକୀଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରାଯାଇଛି}=1{କୁକୀଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରାଯାଇଛି, 1ଟି ବ୍ୟତିକ୍ରମ}other{କୁକୀଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରାଯାଇଛି, {COUNT}ଟି ବ୍ୟତିକ୍ରମ}}</translation>
@@ -999,7 +1007,6 @@
 <translation id="2342740338116612727">ବୁକ୍‌ମାର୍କ ଯୋଗ କରାଗଲା</translation>
 <translation id="2343747224442182863">ଏହି ଟାବ୍ ପ୍ରତି ଧ୍ୟାନ ଦିଅନ୍ତୁ</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" />ରେ 1ଟି ପୃଷ୍ଠା</translation>
-<translation id="2346953515226895098">SODA ସେବା</translation>
 <translation id="2347644257713614136">Hangouts ଏବଂ ଶିକ୍ଷା ପାଇଁ କାଷ୍ଟର ବ୍ୟବହାର Google ଗୋପନୀୟତା ନୀତି ଦ୍ଵାରା ସଞ୍ଚାଳିତ ହୁଏ।</translation>
 <translation id="2348176352564285430">ଆପ୍: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ଡାଟା ଲୋଡ୍ କରିବା ସମୟରେ ତ୍ରୁଟି</translation>
@@ -1886,6 +1893,7 @@
 <translation id="3515983984924808886">ରିସେଟ୍ ସୁନିଶ୍ଚିତ କରିବା ପାଇଁ ଆପଣଙ୍କର ସୁରକ୍ଷା କୀ'କୁ ପୁଣି ସ୍ପର୍ଶ କରନ୍ତୁ। ସୁରକ୍ଷା କୀ’ର PIN ସମେତ ଏଥିରେ ଷ୍ଟୋର୍ ହୋଇଥିବା ସମସ୍ତ ସୂଚନା ଡିଲିଟ୍ ହୋଇଯିବ।</translation>
 <translation id="3518985090088779359">ସ୍ୱୀକାର କରନ୍ତୁ ଏବଂ ଜାରି ରଖନ୍ତୁ</translation>
 <translation id="351952459507671940">ନୂତନ ଗୋଷ୍ଠୀରେ ଯୋଗ କରନ୍ତୁ</translation>
+<translation id="3521606918211282604">ଡିସ୍କର ଆକାର ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation>
 <translation id="3523642406908660543">ଗୋଟିଏ ସାଇଟ୍ କେତେବେଳେ ଆପଣଙ୍କର କମ୍ପ୍ୟୁଟର୍ ଆକ୍ସେସ୍ କରିବାକୁ ଗୋଟିଏ ପ୍ଲଗ୍‌ଇନ୍ ବ୍ୟବହାର କରିବାକୁ ଚାହୁଁଛି, ତାହା ପଚାରନ୍ତୁ (ସୁପାରିଶ୍ କରାଯାଇଛି)</translation>
 <translation id="3524965460886318643">କାର୍ଯ୍ୟକଳାପଗୁଡ଼ିକୁ ଏକ୍ସପୋର୍ଟ କରନ୍ତୁ</translation>
 <translation id="3526034519184079374">ସାଇଟ୍‌ର ଡାଟା ପଢ଼ିପାରିବ ନାହିଁ କିମ୍ବା ପରିବର୍ତ୍ତନ କରିପାରିବ ନାହିଁ</translation>
@@ -1973,6 +1981,7 @@
 <translation id="3629631988386925734">ସ୍ମାର୍ଟ ଲକ୍‌କୁ ସକ୍ଷମ କରିବା ପାଇଁ ଆପଣଙ୍କର ପାସ୍‌ୱର୍ଡ ଲେଖନ୍ତୁ। ପରବର୍ତ୍ତୀ ସମୟରେ, ଆପଣଙ୍କର ଫୋନ୍‌ ଆପଣଙ୍କର <ph name="DEVICE_TYPE" />କୁ ଅନ୍‌ଲକ୍‌ କରିବ। ସେଟିଂସ୍‌ରେ ଆପଣ ସ୍ମାର୍ଟ ଲକ୍‌ ବନ୍ଦ କରିପାରିବେ।</translation>
 <translation id="3630132874740063857">ଆପଣଙ୍କର ଫୋନ୍</translation>
 <translation id="3630995161997703415">ଯେକୌଣସି ସମୟରେ ଏହାକୁ ବ୍ୟବହାର କରିବାପାଇଁ ଏହି ସାଇଟ୍‌କୁ ଆପଣଙ୍କ ସେଲ୍ଫରେ ଯୋଗ କରନ୍ତୁ</translation>
+<translation id="3633309367764744750">ପୃଷ୍ଠାଗୁଡ଼ିକରୁ ସୂଚନା ପୂର୍ବରୁ-ଫେଚ୍ କରେ ଯେଉଁଥିରେ ଆପଣ ଏପର୍ଯ୍ୟନ୍ତ ଭିଜିଟ୍ କରିନଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକ ଅନ୍ତର୍ଭୁକ୍ତ ଅଛି। ଯଦି ଆପଣ କୁକୀଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତି, ତେବେ ଫେଚ୍ କରାଯାଇଥିବା ସୂଚନାରେ କୁକୀଗୁଡ଼ିକ ଥାଇପାରେ।</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />ଟିର <ph name="NETWORK_INDEX" /> ନେଟ୍‌ୱାର୍କ, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /> ଆପଣଙ୍କ ଆଡ୍‍ମିନିଷ୍ଟ୍ରେଟର୍‌ଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ, ବିବରଣୀ</translation>
 <translation id="3635241501480133979">ଏହି ଡାଟା ଆପଣଙ୍କ ସଂସ୍ଥାର ସୁରକ୍ଷା ନୀତିଗୁଡ଼ିକର ଉଲ୍ଲଙ୍ଘନ କରୁଛି ଏବଂ ଏହାକୁ ଡ୍ରପ୍ କରାଯାଇପାରିବ ନାହିଁ।</translation>
 <translation id="3635353578505343390">Googleକୁ ମତାମତ ପଠାନ୍ତୁ</translation>
@@ -2270,7 +2279,6 @@
 <translation id="3971764089670057203">ଏହି ସୁରକ୍ଷା କୀ’ରେ ଥିବା ଟିପଚିହ୍ନଗୁଡ଼ିକ</translation>
 <translation id="3973660817924297510">ପାସୱାର୍ଡ ଯାଞ୍ଚ କରାଯାଉଛି (<ph name="TOTAL_PASSWORDS" />ଟିରୁ <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">ଏହି କ୍ଷେତ୍ର ପାଇଁ ଯୋଗାଯୋଗ ସର୍ଭର୍ ବିଫଳ ହୋଇଛି</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ଆପଣଙ୍କ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="3976108569178263973">କୌଣସି ପ୍ରିଣ୍ଟର୍ ଉପଲବ୍ଧ ନାହିଁ।</translation>
 <translation id="397703832102027365">ପୂରା ହେବାକୁ ଯାଉଛି...</translation>
 <translation id="3977886311744775419">ଏହି ନେ୍ଟ୍‌ୱାର୍କ ପ୍ରକାରରେ ସ୍ୱଚାଳିତ ଅପ୍‌ଡେଟ୍‌ଗୁଡ଼ିକ ଡାଉନ୍‌ଲୋଡ୍ ହୁଏ ନାହିଁ, କିନ୍ତୁ ଆପଣ ମାନୁଆଲୀ ଅପ୍‌ଡେଟ୍‌ଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବେ।</translation>
@@ -2571,7 +2579,6 @@
 <translation id="4421932782753506458">ଫ୍ଲୁଫି</translation>
 <translation id="4423376891418188461">ସେଟିଂସ୍‍ ରିଷ୍ଟୋର୍‍ କରନ୍ତୁ</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ଆପଣ ଆପଣଙ୍କର ପାସ୍‌ୱର୍ଡ ପରିବର୍ତ୍ତନ କରନ୍ତୁ ବୋଲି ଆପଣଙ୍କର ବ୍ୟବସ୍ଥାପକ ଚାହୁଁଛନ୍ତି।</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ଆପଣଙ୍କ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। 24 ଘଣ୍ଟା ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="4429030830601238961">ଏହି ଡାଟା ଆପଣଙ୍କ ସଂସ୍ଥାର ସୁରକ୍ଷା ନୀତିଗୁଡ଼ିକର ଉଲ୍ଲଙ୍ଘନ କରୁଛି ଏବଂ ଏହାକୁ ପେଷ୍ଟ କରାଯାଇପାରିବ ନାହିଁ।</translation>
 <translation id="4430019312045809116">ଭଲ୍ୟୁମ୍</translation>
 <translation id="4430369329743628066">ବୁକ୍‌ମାର୍କ ଯୋଡାଗଲା</translation>
@@ -2584,7 +2591,6 @@
 <translation id="4441124369922430666">ମେସିନ୍ ଚାଲୁ ହେଉଥିବା ବେଳେ ଏହି ଆପ୍‌କୁ ସ୍ୱଚାଳିତ ଭାବେ ଆରମ୍ଭ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି?</translation>
 <translation id="4441147046941420429">ଜାରି ରଖିବା ପାଇଁ, ଆପଣଙ୍କ ଡିଭାଇସ୍‍ରୁ ଆପଣଙ୍କର ସୁରକ୍ଷା କୀକୁ କାଢ଼ି ଦିଅନ୍ତୁ, ତା'ପରେ ପୁଣି ଭର୍ତ୍ତି କରି ତାହାକୁ ସ୍ପର୍ଶ କରନ୍ତୁ</translation>
 <translation id="444134486829715816">ପ୍ରସାରିତ କରନ୍ତୁ...</translation>
-<translation id="4442329324652245220">ଆପଣ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ମାଧ୍ୟମରେ ସାଇନ୍ ଇନ୍ କଲେ, <ph name="IDS_SHORT_PRODUCT_NAME" /> ଆପଣଙ୍କ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ</translation>
 <translation id="4442424173763614572">DNS ଲୁକ୍‍ଅପ୍ ବିଫଳ ହୋଇଛି</translation>
 <translation id="4443536555189480885">&amp;ସାହାଯ୍ୟ</translation>
 <translation id="4444304522807523469">USB କିମ୍ବା ସ୍ଥାନୀୟ ନେଟ୍‌ୱର୍କ ମାଧ୍ୟମରେ ଆଟାଚ୍‌ ଥିବା ଡକୁମେଣ୍ଟ ସ୍କାନର୍‌କୁ ଆକ୍ସେସ୍‌ କରନ୍ତୁ</translation>
@@ -2611,7 +2617,6 @@
 <translation id="4476659815936224889">ଏହି କୋଡ୍ ସ୍କାନ୍ କରିବା ପାଇଁ, ଆପଣ ଆପଣଙ୍କ ଫୋନ୍‍‍ରେ ଏକ QR ସ୍କାନର୍ ଆପ୍ କିମ୍ବା କିଛି କ୍ୟାମେରା ଆପ୍ସ ବ୍ୟବହାର କରିପାରିବେ।</translation>
 <translation id="4477015793815781985">Ctrl, Alt, କିମ୍ବା ⌘ ଅନ୍ତର୍ଭୁକ୍ତ କରନ୍ତୁ</translation>
 <translation id="4478664379124702289">Lin&amp;k ଏହି ଭାବେ ସେଭ କରନ୍ତୁ...</translation>
-<translation id="4478777936860197922">କୌଣସି ସେଭ୍ କରାଯାଇଥିବା ପାସୱାର୍ଡ ନାହିଁ। ଆପଣ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ସେଭ୍ କଲେ <ph name="IDS_SHORT_PRODUCT_NAME" /> ସେଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ।</translation>
 <translation id="4479424953165245642">କିଓସ୍କ ଆପ୍ଲିକେସନ୍‍ଗୁଡ଼ିକ ପରିଚାଳନା କରନ୍ତୁ</translation>
 <translation id="4479639480957787382">ଇଥର୍‌ନେଟ୍‌</translation>
 <translation id="4479877282574735775">ଭର୍ଚୁଆଲ୍ ମେସିନ୍ କନ୍‌ଫିଗର୍ ହେଉଛି। ଏଥିପାଇଁ କିଛି ସମୟ ଲାଗିପାରେ।</translation>
@@ -2857,7 +2862,6 @@
 <translation id="4849517651082200438">ଇନ୍‌ଷ୍ଟଲ୍ କରନ୍ତୁ ନାହିଁ</translation>
 <translation id="4850669014075537160">ସ୍କ୍ରୋଲିଂ</translation>
 <translation id="4850886885716139402">ଦେଖନ୍ତୁ</translation>
-<translation id="485197095346966382">ଆପଣ ଏକ ଚୋରି ହୋଇଯାଇଥିବା ପାସୱାର୍ଡ ମାଧ୍ୟମରେ ସାଇନ୍ ଇନ୍ କଲେ <ph name="IDS_SHORT_PRODUCT_NAME" /> ଆପଣଙ୍କୁ ସୂଚିତ କରିବ</translation>
 <translation id="4853020600495124913">&amp;ନୂଆ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ</translation>
 <translation id="4854317507773910281">ଅନୁମୋଦନ କରିବା ପାଇଁ ବାପାମାଙ୍କ ଆକାଉଣ୍ଟ ବାଛନ୍ତୁ</translation>
 <translation id="485480310608090163">ଅଧିକ ସେଟିଂସ୍ ଏବଂ ଅନୁମତିଗୁଡ଼ିକ</translation>
@@ -3931,6 +3935,7 @@
 <translation id="6298962879096096191">Android ଆପ୍ସ ଇନ୍‌ଷ୍ଟଲ୍‌ କରିବାକୁ Google Play ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="630065524203833229">&amp;ପ୍ରସ୍ଥାନ କରନ୍ତୁ</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" />କୁ ସ୍ୱଚାଳିତ ଭାବେ କନ୍‌ଫିଗର୍ କରାଯାଇପାରିଲା ନାହିଁ। ଦୟାକରି ଉନ୍ନତ ପ୍ରିଣ୍ଟର୍ ବିବରଣୀ ନିର୍ଦ୍ଦିଷ୍ଟ କରନ୍ତୁ। <ph name="LINK_BEGIN" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">ବ୍ୟକ୍ତିଗତ ସୂଚନା ପରାମର୍ଶଗୁଡ଼ିକ</translation>
 <translation id="6305607932814307878">ବୈଶ୍ୱିକ ନୀତି:</translation>
 <translation id="6307990684951724544">ସିଷ୍ଟମ୍ ବ୍ୟସ୍ତ ଅଛି</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> ଦ୍ୱାରା ସାଇନ୍‌-ଇନ୍ ପ୍ରଦାନ କରାଯାଇଛି</translation>
@@ -4009,6 +4014,7 @@
 <translation id="641081527798843608">ବିଷୟ ମେଳ</translation>
 <translation id="6412673304250309937">Chromeରେ ଷ୍ଟୋର୍ କରାଯାଇଥିବା ଅସୁରକ୍ଷିତ ସାଇଟଗୁଡ଼ିକର ଏକ ତାଲିକା ସହିତ URLଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରେ। ଯଦି କୌଣସି ସାଇଟ୍ ଆପଣଙ୍କ ପାସୱାର୍ଡ ଚୋରି କରିବାକୁ ଚେଷ୍ଟା କରେ କିମ୍ବା ଆପଣ ଏକ କ୍ଷତିକାରକ ଫାଇଲ୍ ଡାଉନଲୋଡ୍ କଲେ, ପୃଷ୍ଠାର କିଛି ବିଷୟବସ୍ତୁ ସହିତ URLଗୁଡ଼ିକୁ ମଧ୍ୟ Chrome ସେଫ୍ ବ୍ରାଉଜିଂକୁ ପଠାଇପାରେ।</translation>
 <translation id="6412931879992742813">ନୂଆ ଇନ୍‌କଗ୍‌ନିଟୋ ୱିଣ୍ଡୋ</translation>
+<translation id="6413591858632097328">ଏହା <ph name="ORIGIN_NAME" /> ଦ୍ୱାରା ଷ୍ଟୋର୍ କରାଯାଇଥିବା ସମସ୍ତ ଡାଟା ଓ କୁକୀକୁ ଏବଂ ଏହାର ଇନଷ୍ଟଲ୍ କରାଯାଇଥିବା ଆପକୁ ଖାଲି କରିଦେବ।</translation>
 <translation id="641469293210305670">ଅପଡେଟ୍ ଏବଂ ଆପଗୁଡ଼ିକ ଇନଷ୍ଟଲ୍ କରନ୍ତୁ</translation>
 <translation id="6414888972213066896">ଆପଣ ନିଜର ମାତାପିତାଙ୍କୁ ଏହି ସାଇଟ୍‌କୁ ଯିବା ଠିକ୍ କି ବୋଲି ପଚାରିଛନ୍ତି</translation>
 <translation id="6415900369006735853">ଆପଣଙ୍କର ଫୋନ୍ ମାଧ୍ୟମରେ ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ କରନ୍ତୁ</translation>
@@ -4821,7 +4827,6 @@
 <translation id="7530016656428373557">ୱାଟ୍‌ରେ ଡିସ୍‌ଚାର୍ଜ୍ ହାର</translation>
 <translation id="7531779363494549572">ସେଟିଂସ୍ &gt; ଆପ୍ସ ଏବଂ ବିଜ୍ଞପ୍ତି &gt; ବିଜ୍ଞପ୍ତିକୁ ଯାଆନ୍ତୁ।</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> କୌଣସି ପ୍ରତିକ୍ରିୟା କରୁନାହିଁ। ଆପ୍‍କୁ ବନ୍ଦ କରିବା ପାଇଁ "ବଳପୂର୍ବକ ବନ୍ଦ କରନ୍ତୁ"କୁ ଚୟନ କରନ୍ତୁ।</translation>
-<translation id="7536333565791380193">ଉନ୍ନତ ସୁରକ୍ଷା</translation>
 <translation id="7537451260744431038">ଆପଣଙ୍କୁ ସାଇନ୍ ଇନ୍ ରଖିବା କିମ୍ବା ଆପଣଙ୍କ ସପିଂ କାର୍ଟରେ ଥିବା ଆଇଟମଗୁଡ଼ିକୁ ମନେରଖିବା ପରି ଆପଣଙ୍କ ବ୍ରାଉଜିଂ ଅନୁଭୂତିକୁ ଉନ୍ନତ କରିବା ନିମନ୍ତେ ସାଇଟଗୁଡ଼ିକ କୁକୀଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରିବ ନାହିଁ</translation>
 <translation id="7539856059004947393">ବ୍ଲୁଟୁଥ୍ ସୁରକ୍ଷା କୀ</translation>
 <translation id="7540972813190816353">ଅପ୍‌ଡେଟ୍ ଖୋଜିବା ସମୟରେ ଏକ ସମସ୍ୟା ଦେଖାଗଲା: <ph name="ERROR" /></translation>
@@ -5062,7 +5067,6 @@
     <ph name="BEGIN_BOLD" />ଟିପ୍ପଣୀ:<ph name="END_BOLD" />  ଏହି ପ୍ରକ୍ରିୟା ଚାଲୁଥିବା ସମୟରେ ସିଷ୍ଟମ୍ ରିବୁଟ୍ ହେବ।</translation>
 <translation id="7828731929332799387">ଏହା ତୃତୀୟ-ପକ୍ଷ ପ୍ରସଙ୍ଗରେ ଉପଲବ୍ଧ ଥିବା ସମସ୍ତ କୁକୀ ଏବଂ ସାଇଟ୍ ଡାଟା ଡିଲିଟ୍ କରିଦେବ। ଆପଣ ଜାରି ରଖିବାକୁ ଚାହୁଁଛନ୍ତି କି?</translation>
 <translation id="7829298379596169484">ଅଡିଓ ଇନ୍‍ପୁଟ୍‍ ଆକ୍ସେସ୍‌ କରୁଛି</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ଆପଣଙ୍କ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। ଆପଣଙ୍କ ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ ଯାଞ୍ଚ କରି ଦେଖନ୍ତୁ।</translation>
 <translation id="7829877209233347340">ଏକ ସ୍କୁଲ ଆକାଉଣ୍ଟ ଯୋଗ କରିବାକୁ ଅନୁମତି ଦେବା ପାଇଁ ଜଣେ ବାପା କିମ୍ବା ମା'ଙ୍କୁ ସାଇନ୍ ଇନ୍ କରିବାକୁ କୁହନ୍ତୁ</translation>
 <translation id="7830594666202422257">Linuxକୁ ସଂଯୋଗ କରନ୍ତୁ</translation>
 <translation id="7831491651892296503">ନେଟ୍‍ୱର୍କ କନ୍‍ଫିଗର୍ କରିବା ସମୟରେ ତ୍ରୁଟି ହୋଇଛି</translation>
@@ -5397,7 +5401,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> ଆପଣଙ୍କ ମାଉସ୍ କର୍‌ସର୍ ନିଷ୍କ୍ରିୟ କରିଦେଇଛି।</translation>
 <translation id="8264024885325823677">ଏହି ସେଟିଂ ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ ହୁଏ।</translation>
 <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍‌ରେ ଟ୍ରିଗର୍ କରିଛନ୍ତି।</translation>
-<translation id="826511437356419340">ୱିଣ୍ଡୋର ଓଭରଭିଉ ମୋଡରେ ଲେଖାଯାଇଛି। ନାଭିଗେଟ୍ କରିବାକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ କିମ୍ବା କୀବୋର୍ଡ ବ୍ୟବହାର କରୁଥିଲେ, ଟାବ୍ ଦବାନ୍ତୁ।</translation>
+<translation id="826511437356419340">ୱିଣ୍ଡୋର ସାରାଂଶ ମୋଡରେ ପ୍ରବେଶ କରିଛନ୍ତି। ନାଭିଗେଟ୍ କରିବାକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ କିମ୍ବା କୀବୋର୍ଡ ବ୍ୟବହାର କରୁଥିଲେ, ଟାବ୍ ଦବାନ୍ତୁ।</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />ଏହା ଏହି ଡିଭାଇସ୍ ଏବଂ ଏହା କିପରି ବ୍ୟବହାର ହୋଇଛି (ଯେପରି ବ୍ୟାଟେରୀ ଲେବଲ୍, ସିଷ୍ଟମ୍, ଆପ୍ ଗତିବିଧି ଓ ତ୍ରୁଟି) ତାହା ବିଷୟରେ ସାଧାରଣ ସୂଚନା ଅଟେ। Androidକୁ ଉନ୍ନତ କରିବା ପାଇଁ ଡାଟାକୁ ବ୍ୟବହାର କରାଯିବ ଏବଂ କିଛି ଏକତ୍ରିତ ସୂଚନା Google ଆପ୍ସ ଏବଂ Android ଡେଭଲପର୍ ପରି ସହଯୋଗୀଙ୍କୁ ସେମାନଙ୍କର ଆପ୍ସ ଓ ଉତ୍ପାଦକୁ ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରିବ।<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />ଏହି ବୈଶିଷ୍ଟ୍ୟକୁ ବନ୍ଦ କରିବା ଦ୍ଵାରା ଏହି ଡିଭାଇସ୍‍ର ସିଷ୍ଟମ୍ ଅପ୍‌ଡେଟ୍ ଓ ସୁରକ୍ଷା ପରି ଆବଶ୍ୟକ ସେବାଗୁଡ଼ିକ ପାଇଁ ଆବଶ୍ୟକୀୟ ସୂଚନାକୁ ପଠାଇବାର କ୍ଷମତା ପ୍ରଭାବିତ ହେବନାହିଁ।<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />ସେଟିଂସ୍ &gt; ଉନ୍ନତ &gt; ସ୍ଵଚାଳିତ ଭାବେ Googleକୁ ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଓ ବ୍ୟବହାର ପୂର୍ଣ୍ଣ ଡାଟା ପଠାଇବାର ବିକଳ୍ପକୁ ଯାଇ ମାଲିକ ଏହି ସୁବିଧାକୁ ନିୟନ୍ତ୍ରଣ କରିପାରିବେ।<ph name="END_PARAGRAPH3" />
@@ -5934,7 +5938,6 @@
 <translation id="8966870118594285808">ଯଦି ଆପଣ ଭୁଲବଶତଃ ଏକ ଟାବ୍ ବନ୍ଦ କରିଦେଇଛନ୍ତି ତେବେ ତାହାକୁ ପୁଣି ଖୋଲନ୍ତୁ</translation>
 <translation id="8967866634928501045">ଦେଖାଇବା ପାଇଁ Alt Shift A ଦବାନ୍ତୁ</translation>
 <translation id="8968766641738584599">କାର୍ଡ ସେଭ୍‌ କରନ୍ତୁ</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ଆପଣଙ୍କ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। 24 ଘଣ୍ଟା ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ କିମ୍ବା <ph name="BEGIN_LINK" />ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରନ୍ତୁ<ph name="END_LINK" />।</translation>
 <translation id="89720367119469899">ଏସ୍କେପ୍</translation>
 <translation id="8972513834460200407">ଦୟାକରି ଆପଣଙ୍କ ନେଟ୍‌ୱର୍କ ବ୍ୟବସ୍ଥାପକଙ୍କୁ ପଚାରି ସୁନିଶ୍ଚିତ ହୁଅନ୍ତୁ କି Google ସର୍ଭରରୁ ଡାଉନ୍‌ଲୋଡ୍ କରିବାରେ ଫାୟାର୍‌ୱାଲ୍ ବ୍ଲକ୍ କରୁନାହିଁ।</translation>
 <translation id="8973557916016709913">ଜୁମ୍ ସ୍ତର କାଢ଼ି ଦିଅନ୍ତୁ</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index bd5bf319..846820e7 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">ਬੁੱਕਮਾਰਕ ਨਾਮ</translation>
 <translation id="1124772482545689468">ਵਰਤੋਂਕਾਰ</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ਵਰਗਾ ਲੱਗਦਾ ਹੈ (ਮੂਲ)</translation>
+<translation id="1126809382673880764">ਤੁਹਾਨੂੰ ਖਤਰਨਾਕ ਵੈੱਬਸਾਈਟਾਂ, ਡਾਊਨਲੋਡਾਂ ਅਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ ਤੋਂ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਰੱਖਿਆ ਜਾਂਦਾ। ਹੋਰ Google ਸੇਵਾਵਾਂ ਜਿਵੇਂ ਕਿ Gmail ਅਤੇ 'ਖੋਜ' ਜਿੱਥੇ ਵੀ ਉਪਲਬਧ ਹੋਵੇ ਤੁਹਾਨੂੰ ਫਿਰ ਵੀ ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਸੁਰੱਖਿਆ ਪ੍ਰਾਪਤ ਹੋਵੇਗੀ।</translation>
 <translation id="1128109161498068552">ਕਿਸੇ ਵੀ ਸਾਈਟ ਨੂੰ MIDI ਡਿਵਾਈਸਾਂ ਤੇ ਪਹੁੰਚਣ ਲਈ ਸਿਸਟਮ ਐਕਸਕਲੂਸਿਵ ਸੁਨੇਹੇ ਵਰਤਣ ਦੀ ਆਗਿਆ ਨਾ ਦਿਓ</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">ਖੋਜ ਇੰਜਣ ਦਾ ਸੰਪਾਦਨ ਕਰੋ</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">ਗਿਆਤ ਨੈੱਟਵਰਕ</translation>
 <translation id="123578888592755962">ਡਿਸਕ ਪੂਰੀ</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਸੰਬੰਧੀ ਇਨਪੁੱਟ ਸੁਝਾਅ ਦਿਖਾਓ</translation>
 <translation id="1239594683407221485">Files ਐਪ ਵਿੱਚ ਡੀਵਾਈਸ ਦੀ ਸਮੱਗਰੀ ਦੀ ਪੜਚੋਲ ਕਰੋ।</translation>
 <translation id="124116460088058876">ਹੋਰ ਭਾਸ਼ਾਵਾਂ</translation>
 <translation id="1241753985463165747">ਚਲਾਏ ਜਾਣ 'ਤੇ ਵਰਤਮਾਨ ਵੈੱਬਸਾਈਟ ਦਾ ਸਾਰਾ ਡਾਟਾ ਪੜ੍ਹੋ ਅਤੇ ਬਦਲੋ</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">ਸੈਲਿਊਲਰ ਕਿਰਿਆਸ਼ੀਲਤਾ</translation>
 <translation id="1407489512183974736">ਸੈਂਟਰ ਕੱਟਿਆ</translation>
 <translation id="1408504635543854729">Files ਐਪ ਵਿੱਚ ਮੌਜੂਦ ਡੀਵਾਈਸ ਦੀ ਸਮੱਗਰੀ ਦੀ ਪੜਚੋਲ ਕਰੋ। ਸਮੱਗਰੀ ਇੱਕ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਪ੍ਰਤਿਬੰਧਿਤ ਕੀਤੀ ਗਈ ਹੈ ਅਤੇ ਸੋਧੀ ਨਹੀਂ ਜਾ ਸਕਦੀ।</translation>
+<translation id="1408980562518920698">ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation>
 <translation id="1410197035576869800">ਐਪ ਪ੍ਰਤੀਕ</translation>
 <translation id="1410616244180625362"><ph name="HOST" /> ਨੂੰ ਆਪਣੇ ਕੈਮਰੇ ਤੇ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣਾ ਜਾਰੀ ਰੱਖੋ</translation>
 <translation id="1414648216875402825">ਤੁਸੀਂ <ph name="PRODUCT_NAME" /> ਦਾ ਇੱਕ ਅਸਥਿਰ ਰੂਪ ਅੱਪਡੇਟ ਕਰ ਰਹੇ ਹੋ ਜਿਸ ਵਿੱਚ ਉਹ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਸ਼ਾਮਲ ਹਨ ਜੋ ਚਾਲੂ ਹਨ। ਕ੍ਰੈਸ਼ਿਜ ਅਤੇ ਅਚਨਚੇਤ ਬਗਸ ਹੋਣਗੇ। ਕਿਰਪਾ ਕਰਰਕੇ ਸਾਵਧਾਨੀ ਨਾਲ ਅੱਗੇ ਵਧੋ।</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript ਕੰਸੋਲ</translation>
 <translation id="1587907146729660231">ਪਾਵਰ ਬਟਨ ਨੂੰ ਆਪਣੀ ਉਂਗਲ ਨਾਲ ਸਪਰਸ਼ ਕਰੋ</translation>
+<translation id="1588200577109872591">ਸਮਾਰਟ ਇਨਪੁੱਟ</translation>
 <translation id="1588438908519853928">ਸਧਾਰਨ</translation>
 <translation id="158849752021629804">ਘਰੇਲੂ ਨੈੱਟਵਰਕ ਦੀ ਲੋੜ ਹੈ</translation>
 <translation id="1588870296199743671">ਇਸ ਨਾਲ ਲਿੰਕ ਖੋਲ੍ਹੇੋ...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">ਇਸ ਵਜੋਂ ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
 <translation id="1880905663253319515">ਕੀ ਪ੍ਰਮਾਣ-ਪੱਤਰ "<ph name="CERTIFICATE_NAME" />" ਮਿਟਾਉਣਾ ਹੈ?</translation>
 <translation id="1884013283844450420">ਨੈੱਟਵਰਕ <ph name="NETWORK_COUNT" /> ਵਿੱਚੋਂ <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, ਕਨੈਕਟ ਕਰੋ</translation>
+<translation id="1884705339276589024">Linux ਡਿਸਕ ਦਾ ਆਕਾਰ ਬਦਲੋ</translation>
 <translation id="1886996562706621347">ਸਾਈਟਾਂ ਨੂੰ ਪ੍ਰੋਟੋਕੋਲਾਂ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਹੈਂਡਲਰ ਬਣਨ ਲਈ ਕਹਿਣ ਦੀ ਆਗਿਆ ਦਿਓ (ਸਿਫ਼ਾਰਿਸ਼ ਕੀਤਾ)</translation>
 <translation id="1887442540531652736">ਸਾਈਨ-ਇਨ ਗੜਬੜ</translation>
 <translation id="1887597546629269384">ਦੁਬਾਰਾ "Hey Google" ਕਹੋ</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">ਤੁਸੀਂ <ph name="PRODUCT_NAME" /> ਦੇ ਇੱਕ ਪੁਰਾਣੇ ਵਰਜਨ ਨਾਲ ਕਿਸੇ ਚੈਨਲ ਤੋਂ ਖਰਚਾ ਲੈ ਰਹੇ ਹੋ। ਜਦੋਂ ਚੈਨਲ ਵਰਜਨ ਤੁਹਾਡੇ ਡੀਵਾਈਸ 'ਤੇ ਇਸ ਵੇਲੇ ਸਥਾਪਤ ਕੀਤੇ ਵਰਜਨ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ ਤਾਂ ਚੈਨਲ ਤਬਦੀਲੀ ਨੂੰ ਲਾਗੂ ਕੀਤਾ ਜਾਵੇਗਾ।</translation>
 <translation id="197989455406964291">KDC ਵਿੱਚ ਇਨਕ੍ਰਿਪਸ਼ਨ ਕਿਸਮ ਦੀ ਸੁਵਿਧਾ ਨਹੀਂ ਹੈ</translation>
 <translation id="1982354452682152483">ਕੋਈ ਵਰਣਨ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।</translation>
+<translation id="1984417487208496350">ਕੋਈ ਸੁਰੱਖਿਆ ਨਹੀਂ (ਇਸਦੀ ਸਿਫ਼ਾਰਸ਼ ਨਹੀਂ ਕੀਤੀ ਜਾਂਦੀ)</translation>
 <translation id="1987317783729300807">ਖਾਤੇ</translation>
 <translation id="1989112275319619282">ਬ੍ਰਾਊਜ਼ ਕਰੋ</translation>
 <translation id="1990512225220753005">ਇਸ ਪੰਨੇ 'ਤੇ ਸ਼ਾਰਟਕੱਟ ਨਾ ਦਿਖਾਓ</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">ਆਪਣੀ ਖਾਤਾ ਜਾਣਕਾਰੀ ਨੂੰ ਰਿਕਵਰ ਕਰਨ ਲਈ, ਇੱਥੇ ਜਾਓ: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">ਸਿਸਟਮ ਸੁਰੱਖਿਆ ਸੈਟਿੰਗਾ</translation>
 <translation id="2091887806945687916">ਧੁਨੀ</translation>
+<translation id="2096478741073211388">ਜਦੋਂ ਤੁਸੀਂ ਕੁਝ ਖਾਸ ਸ਼ਬਦ ਟਾਈਪ ਕਰਦੇ ਹੋ, ਤਾਂ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਸੰਬੰਧੀ ਸੁਝਾਅ ਤੁਹਾਡੇ ਨਾਮ, ਪਤੇ ਜਾਂ ਫ਼ੋਨ ਨੰਬਰ ਦਾ ਸੁਝਾਅ ਦੇ ਕੇ ਵਧੇਰੇ ਤੇਜ਼ੀ ਨਾਲ ਲਿਖਣ ਵਿੱਚ ਤੁਹਾਡੀ ਮਦਦ ਕਰਦੇ ਹਨ। ਆਪਣੇ ਖਾਤੇ ਲਈ ਆਪਣੇ ਖੁਦ ਦੇ ਨਿੱਜੀ, ਵਿਅਕਤੀਗਤ ਬਣਾਏ ਸੁਝਾਵਾਂ ਨੂੰ ਸਿਰਫ਼ ਤੁਸੀਂ ਹੀ ਦੇਖ ਸਕਦੇ ਹੋ।</translation>
 <translation id="2096715839409389970">ਤੀਜੀ-ਧਿਰ ਦੀਆਂ ਕੁਕੀਜ਼ ਕਲੀਅਰ ਕਰੋ</translation>
 <translation id="2097372108957554726">ਤੁਹਾਨੂੰ ਨਵੇਂ ਡੀਵਾਈਸਾਂ ਨੂੰ ਰਜਿਸਟਰ ਕਰਨ ਲਈ Chrome 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ</translation>
 <translation id="2099172618127234427">ਤੁਸੀਂ Chrome OS ਡੀਬੱਗਿੰਗ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਚਾਲੂ ਕਰ ਰਹੇ ਹੋ, ਜੋ sshd daemon ਨੂੰ ਸੈੱਟ ਕਰਨਗੀਆਂ ਅਤੇ USB ਡਰਾਈਵ ਵਿੱਚੋਂ ਬੂਟਿੰਗ ਨੂੰ ਚਾਲੂ ਕਰਨਗੀਆਂ।</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">&amp;ਬੰਦ ਨੂੰ ਮੁੜ-ਲੋਡ ਕਰੋ</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> ਵੱਲੋਂ ਫ਼ੋਟੋ</translation>
 <translation id="2119349053129246860"><ph name="APP" /> ਵਿੱਚ ਖੋਲ੍ਹੋ</translation>
+<translation id="2119461801241504254">ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਚਾਲੂ ਹੈ ਅਤੇ ਤੁਹਾਨੂੰ ਨੁਕਸਾਨਦੇਹ ਸਾਈਟਾਂ ਅਤੇ ਡਾਊਨਲੋਡਾਂ ਤੋਂ ਸੁਰੱਖਿਅਤ ਰੱਖ ਰਹੀ ਹੈ</translation>
 <translation id="2120297377148151361">ਸਰਗਰਮੀ ਅਤੇ ਅੰਤਰਕਿਰਿਆਵਾਂ</translation>
 <translation id="2120639962942052471">ਬਲਾਕ ਕੀਤੀ ਗਈ <ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{ਕੁਕੀਜ਼ ਬਲਾਕ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ}=1{ਕੁਕੀਜ਼ ਬਲਾਕ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ, 1 ਅਪਵਾਦ}other{ਕੁਕੀਜ਼ ਬਲਾਕ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ, {COUNT} ਅਪਵਾਦ}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">ਬੁੱਕਮਾਰਕ ਸ਼ਾਮਲ ਕੀਤੇ ਗਏ</translation>
 <translation id="2343747224442182863">ਇਸ ਟੈਬ 'ਤੇ ਫੋਕਸ ਕਰੋ</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> ਲਈ 1 ਪੰਨਾ</translation>
-<translation id="2346953515226895098">SODA ਸੇਵਾ</translation>
 <translation id="2347644257713614136">Hangouts ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਅਤੇ 'ਸਿੱਖਿਆ ਲਈ ਕਾਸਟ ਕਰਨਾ' 'Google ਪਰਦੇਦਾਰੀ ਨੀਤੀ' ਦੇ ਅਧੀਨ ਹੈ।</translation>
 <translation id="2348176352564285430">ਐਪ: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ਡਾਟਾ ਲੋਡ ਕਰਨ ਵਿੱਚ ਗੜਬੜ ਹੋਈ</translation>
@@ -1889,6 +1896,7 @@
 <translation id="3515983984924808886">ਰੀਸੈੱਟ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਆਪਣੀ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਨੂੰ ਦੁਬਾਰਾ ਸਪਰਸ਼ ਕਰੋ। ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਦੇ ਪਿੰਨ ਸਮੇਤ ਉਸ 'ਤੇ ਸਟੋਰ ਕੀਤੀ ਸਾਰੀ ਜਾਣਕਾਰੀ ਨੂੰ ਮਿਟਾਇਆ ਜਾਵੇਗਾ।</translation>
 <translation id="3518985090088779359">ਸਵੀਕਾਰ ਕਰੋ &amp; ਜਾਰੀ ਰੱਖੋ</translation>
 <translation id="351952459507671940">ਨਵੇਂ ਗਰੁੱਪ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ</translation>
+<translation id="3521606918211282604">ਡਿਸਕ ਦਾ ਆਕਾਰ ਬਦਲੋ</translation>
 <translation id="3523642406908660543">ਜਦੋਂ ਕੋਈ ਸਾਈਟ ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ 'ਤੇ ਪਹੁੰਚ ਕਰਨ ਲਈ ਕਿਸੇ ਪਲੱਗਇਨ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਚਾਹੁੰਦੀ ਹੋਵੇ ਤਾਂ ਪੁੱਛੋ (ਸਿਫ਼ਾਰਸ਼ੀ)</translation>
 <translation id="3524965460886318643">ਨਿਰਯਾਤ ਸਰਗਰਮੀਆਂ</translation>
 <translation id="3526034519184079374">ਸਾਈਟ ਦੇ ਡਾਟੇ ਨੂੰ ਪੜ੍ਹਿਆ ਜਾਂ ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ</translation>
@@ -1976,6 +1984,7 @@
 <translation id="3629631988386925734">'ਸਮਾਰਟ ਲਾਕ' ਨੂੰ ਚਾਲੂ ਕਰਨ ਲਈ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ। ਅਗਲੀ ਵਾਰ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਤੁਹਾਡੀ <ph name="DEVICE_TYPE" /> ਨੂੰ ਅਣਲਾਕ ਕਰੇਗਾ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ 'ਸਮਾਰਟ ਲਾਕ' ਨੂੰ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ।</translation>
 <translation id="3630132874740063857">ਤੁਹਾਡਾ ਫ਼ੋਨ</translation>
 <translation id="3630995161997703415">ਇਸ ਸਾਈਟ ਨੂੰ ਆਪਣੀ ਸ਼ੈਲਫ਼ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ ਤਾਂ ਕਿ ਕਿਸੇ ਵੀ ਸਮੇਂ ਤੁਸੀਂ ਇਸਦੀ ਵਰਤੋਂ ਕਰ ਸਕੋ</translation>
+<translation id="3633309367764744750">ਪੰਨਿਆਂ ਤੋਂ ਜਾਣਕਾਰੀ ਪਹਿਲਾਂ ਹੀ ਪ੍ਰਾਪਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਜਿਸ ਵਿੱਚ ਉਹ ਪੰਨੇ ਵੀ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ ਜਿਨ੍ਹਾਂ 'ਤੇ ਤੁਸੀਂ ਅਜੇ ਤੱਕ ਨਹੀਂ ਗਏ। ਜੇ ਤੁਸੀਂ ਕੁਕੀਜ਼ ਲਈ ਆਗਿਆ ਦਿੰਦੇ ਹੋ, ਤਾਂ ਪ੍ਰਾਪਤ ਕੀਤੀ ਜਾਣਕਾਰੀ ਵਿੱਚ ਕੁਕੀਜ਼ ਹੋ ਸਕਦੀਆਂ ਹਨ।</translation>
 <translation id="3634507049637220048">ਨੈੱਟਵਰਕ <ph name="NETWORK_COUNT" /> ਵਿੱਚੋਂ <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਵੇਰਵੇ</translation>
 <translation id="3635241501480133979">ਇਹ ਡਾਟਾ ਤੁਹਾਡੀ ਸੰਸਥਾ ਦੀਆਂ ਸੁਰੱਖਿਆ ਨੀਤੀਆਂ ਦੀ ਉਲੰਘਣਾ ਕਰਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਘਸੀਟਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।</translation>
 <translation id="3635353578505343390">Google ਨੂੰ ਵਿਚਾਰ ਭੇਜੋ</translation>
@@ -2274,7 +2283,6 @@
 <translation id="3971764089670057203">ਇਸ ਸੁਰੱਖਿਆ ਕੁੰਜੀ 'ਤੇ ਫਿੰਗਰਪ੍ਰਿੰਟ</translation>
 <translation id="3973660817924297510">ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ (<ph name="TOTAL_PASSWORDS" /> ਵਿੱਚੋਂ <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">ਖੇਤਰ ਲਈ ਸਰਵਰ ਨਾਲ ਸੰਪਰਕ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="3976108569178263973">ਕੋਈ ਪ੍ਰਿੰਟਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।</translation>
 <translation id="397703832102027365">ਅੰਤਮ ਰੂਪ ਦੇ ਰਿਹਾ ਹੈ...</translation>
 <translation id="3977886311744775419">ਸਵੈਚਲਿਤ ਅੱਪਡੇਟ ਇਸ ਕਿਸਮ ਦੇ ਨੈੱਟਵਰਕ 'ਤੇ ਡਾਊਨਲੋਡ ਨਹੀਂ ਹੁੰਦੇ ਹਨ, ਪਰ ਤੁਸੀਂ ਅੱਪਡੇਟਾਂ ਲਈ ਹੱਥੀਂ ਜਾਂਚ ਕਰ ਸਕਦੇ ਹੋ।</translation>
@@ -2575,7 +2583,6 @@
 <translation id="4421932782753506458">Fluffy</translation>
 <translation id="4423376891418188461">ਸੈਟਿੰਗਾਂ ਮੁੜ-ਬਹਾਲ ਕਰੋ</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਬਦਲਣ ਲਈ ਤੁਹਾਡੀ ਲੋੜ ਹੈ।</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕਦਾ। 24 ਘੰਟਿਆਂ ਬਾਅਦ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="4429030830601238961">ਇਹ ਡਾਟਾ ਤੁਹਾਡੀ ਸੰਸਥਾ ਦੀਆਂ ਸੁਰੱਖਿਆ ਨੀਤੀਆਂ ਦੀ ਉਲੰਘਣਾ ਕਰਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਪੇਸਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।</translation>
 <translation id="4430019312045809116">ਵੌਲਿਊਮ</translation>
 <translation id="4430369329743628066">ਬੁੱਕਮਾਰਕ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ</translation>
@@ -2588,7 +2595,6 @@
 <translation id="4441124369922430666">ਕੀ ਤੁਸੀਂ ਇਸ ਐਪ ਨੂੰ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਚਾਲੂ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ ਜਦੋਂ ਮਸ਼ੀਨ ਚਾਲੂ ਹੁੰਦੀ ਹੈ?</translation>
 <translation id="4441147046941420429">ਜਾਰੀ ਰੱਖਣ ਲਈ, ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਨੂੰ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਵਿੱਚੋਂ ਕੱਢ ਕੇ ਫਿਰ ਪਾਓ ਅਤੇ ਉਸਨੂੰ ਸਪਰਸ਼ ਕਰੋ</translation>
 <translation id="444134486829715816">ਵਿਸਤਾਰ ਕਰੋ...</translation>
-<translation id="4442329324652245220">ਤੁਹਾਡੇ ਵੱਲੋਂ ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਨ 'ਤੇ <ph name="IDS_SHORT_PRODUCT_NAME" /> ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹੈ</translation>
 <translation id="4442424173763614572">DNS ਲੁਕਅੱਪ ਅਸਫਲ ਹੋ ਗਿਆ</translation>
 <translation id="4443536555189480885">&amp;ਸਹਾਇਤਾ</translation>
 <translation id="4444304522807523469">USB ਜਾਂ ਸਥਾਨਕ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਅਟੈਚ ਕੀਤੇ ਦਸਤਾਵੇਜ਼ ਸਕੈਨਰਾਂ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੋ</translation>
@@ -2615,7 +2621,6 @@
 <translation id="4476659815936224889">ਇਹ ਕੋਡ ਸਕੈਨ ਕਰਨ ਲਈ, ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ 'ਤੇ QR ਸਕੈਨਰ ਐਪ, ਜਾਂ ਕੁਝ ਕੈਮਰਾ ਐਪਾਂ ਵਰਤ ਸਕਦੇ ਹੋ।</translation>
 <translation id="4477015793815781985">Ctrl, Alt, ਜਾਂ ⌘ ਸ਼ਾਮਲ ਕਰੋ</translation>
 <translation id="4478664379124702289">ਲਿੰ&amp;ਕ ਨੂੰ ਇਸ ਵਜੋਂ ਰੱਖਿਅਤ ਕਰੋ...</translation>
-<translation id="4478777936860197922">ਕੋਈ ਰੱਖਿਅਤ ਕੀਤਾ ਪਾਸਵਰਡ ਨਹੀਂ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਆਪਣੇ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਕਰਨ 'ਤੇ <ph name="IDS_SHORT_PRODUCT_NAME" /> ਉਹਨਾਂ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹੈ।</translation>
 <translation id="4479424953165245642">ਕਿਓਸਕ ਐਪਲੀਕੇਸ਼ਨਾਂ ਪ੍ਰਬੰਧਿਤ ਕਰੋ</translation>
 <translation id="4479639480957787382">ਈਥਰਨੈਟ</translation>
 <translation id="4479877282574735775">ਆਭਾਸੀ ਮਸ਼ੀਨ ਦਾ ਸੰਰੂਪਣ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ। ਇਸ ਵਿੱਚ ਕੁਝ ਮਿੰਟ ਲੱਗ ਸਕਦੇ ਹਨ।</translation>
@@ -2861,7 +2866,6 @@
 <translation id="4849517651082200438">ਸਥਾਪਤ ਨਾ ਕਰੋ</translation>
 <translation id="4850669014075537160">ਸਕ੍ਰੋਲਿੰਗ</translation>
 <translation id="4850886885716139402">ਦੇਖੋ</translation>
-<translation id="485197095346966382">ਤੁਹਾਡੇ ਵੱਲੋਂ ਕਿਸੇ ਛੇੜਛਾੜ ਵਾਲੇ ਪਾਸਵਰਡ ਨਾਲ ਸਾਈਨ-ਇਨ ਕਰਨ 'ਤੇ <ph name="IDS_SHORT_PRODUCT_NAME" /> ਤੁਹਾਨੂੰ ਸੂਚਿਤ ਕਰੇਗਾ</translation>
 <translation id="4853020600495124913">&amp;ਨਵੀਂ window ਵਿੱਚ ਖੋਲ੍ਹੋ</translation>
 <translation id="4854317507773910281">ਮਨਜ਼ੂਰੀ ਲਈ ਮਾਂ-ਪਿਓ ਦਾ ਖਾਤਾ ਚੁਣੋ</translation>
 <translation id="485480310608090163">ਹੋਰ ਸੈਟਿੰਗਾਂ ਅਤੇ ਇਜਾਜ਼ਤਾਂ</translation>
@@ -3935,6 +3939,7 @@
 <translation id="6298962879096096191">Android ਐਪਾਂ ਸਥਾਪਤ ਕਰਨ ਲਈ Google Play ਦੀ ਵਰਤੋਂ ਕਰੋ</translation>
 <translation id="630065524203833229">ਬਾ&amp;ਹਰ ਜਾਓ</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> ਦਾ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਸੰਰੂਪਣ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਉੱਨਤ ਪ੍ਰਿੰਟਰ ਵੇਰਵੇ ਨਿਰਧਾਰਤ ਕਰੋ। <ph name="LINK_BEGIN" />ਹੋਰ ਜਾਣੋ<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਸੰਬੰਧੀ ਸੁਝਾਅ</translation>
 <translation id="6305607932814307878">ਗਲੋਬਲ ਨੀਤੀ:</translation>
 <translation id="6307990684951724544">ਸਿਸਟਮ ਰੁੱਝਾ ਹੋਇਆ ਹੈ</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> ਵੱਲੋਂ ਸਾਈਨ-ਇਨ ਮੁਹੱਈਆ ਕਰਵਾਇਆ ਗਿਆ</translation>
@@ -4013,6 +4018,7 @@
 <translation id="641081527798843608">ਵਿਸ਼ਾ ਮਿਲਾਨ</translation>
 <translation id="6412673304250309937">Chrome ਵਿੱਚ ਸਟੋਰ ਕੀਤੀਆਂ ਅਸੁਰੱਖਿਅਤ ਸਾਈਟਾਂ ਦੀ ਸੂਚੀ ਦੇ ਨਾਲ URL ਦੀ ਜਾਂਚ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਜੇ ਕੋਈ ਸਾਈਟ ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਨੂੰ ਚੋਰੀ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੀ ਹੈ ਜਾਂ ਜਦੋਂ ਤੁਸੀਂ ਕੋਈ ਨੁਕਸਾਨਦੇਹ ਫ਼ਾਈਲ ਡਾਊਨਲੋਡ ਕਰਦੇ ਹੋ, ਤਾਂ Chrome ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਨੂੰ ਪੰਨੇ ਦੀ ਥੋੜ੍ਹੀ ਸਮੱਗਰੀ ਸਮੇਤ URL ਵੀ ਭੇਜ ਸਕਦਾ ਹੈ।</translation>
 <translation id="6412931879992742813">ਨਵੀਂ ਗੁਮਨਾਮ window</translation>
+<translation id="6413591858632097328">ਇੰਝ ਕਰਨ ਨਾਲ <ph name="ORIGIN_NAME" /> ਵੱਲੋਂ ਸਟੋਰ ਕੀਤੇ ਸਾਰੇ ਡਾਟੇ ਅਤੇ ਕੁਕੀਜ਼ ਅਤੇ ਉਸਦੀਆਂ ਸਥਾਪਤ ਕੀਤੀਆਂ ਐਪਾਂ ਨੂੰ ਕਲੀਅਰ ਕੀਤਾ ਜਾਵੇਗਾ।</translation>
 <translation id="641469293210305670">ਅੱਪਡੇਟ ਅਤੇ ਐਪਾਂ ਨੂੰ ਸਥਾਪਤ ਕਰੋ</translation>
 <translation id="6414888972213066896">ਤੁਸੀਂ ਆਪਣੇ ਮਾਤਾ-ਪਿਤਾ ਤੋਂ ਪੁੱਛਿਆ ਕਿ ਕੀ ਇਸ ਸਾਈਟ 'ਤੇ ਜਾਣਾ ਠੀਕ ਹੈ</translation>
 <translation id="6415900369006735853">ਆਪਣੇ ਫ਼ੋਨ ਰਾਹੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਕਰੋ</translation>
@@ -4823,7 +4829,6 @@
 <translation id="7530016656428373557">ਵਾਟ ਵਿੱਚ ਡਿਸਚਾਰਜ ਦਰ</translation>
 <translation id="7531779363494549572">ਸੈਟਿੰਗਾਂ &gt; ਐਪਾਂ ਅਤੇ ਸੂਚਨਾਵਾਂ &gt; ਸੂਚਨਾਵਾਂ 'ਤੇ ਜਾਓ।</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ਐਪ ਪ੍ਰਤੀਕਿਰਿਆ ਨਹੀਂ ਦੇ ਰਹੀ ਹੈ। ਐਪ ਬੰਦ ਕਰਨ ਲਈ "ਜ਼ਬਰਦਸਤੀ ਬੰਦ ਕਰੋ" ਨੂੰ ਚੁਣੋ।</translation>
-<translation id="7536333565791380193">ਉੱਨਤ ਸੁਰੱਖਿਆ</translation>
 <translation id="7537451260744431038">ਸਾਈਟਾਂ ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਅਨੁਭਵ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ ਕੁਕੀਜ਼ ਨੂੰ ਨਹੀਂ ਵਰਤ ਸਕਦੀਆਂ, ਉਦਾਹਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਸਾਈਨ-ਇਨ ਜਾਂ ਤੁਹਾਡੇ ਖਰੀਦਦਾਰੀ ਕਾਰਟ ਵਿਚਲੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਯਾਦ ਰੱਖਣ ਲਈ</translation>
 <translation id="7539856059004947393">ਬਲੂਟੁੱਥ ਸੁਰੱਖਿਆ ਕੁੰਜੀ</translation>
 <translation id="7540972813190816353">ਅਪਡੇਟਾਂ ਦੀ ਜਾਂਚ ਕਰਦੇ ਸਮੇਂ ਇੱਕ ਗੜਬੜ ਹੋਈ: <ph name="ERROR" /></translation>
@@ -5063,7 +5068,6 @@
     <ph name="BEGIN_BOLD" />ਨੋਟ ਕਰੋ:<ph name="END_BOLD" />  ਸਿਸਟਮ ਪ੍ਰਕਿਰਿਆ ਦੇ ਦੌਰਾਨ ਰੀਬੂਟ ਹੋਵੇਗਾ।</translation>
 <translation id="7828731929332799387">ਇਹ ਤੀਜੀ-ਧਿਰ ਦੇ ਸੰਦਰਭਾਂ ਵਿੱਚ ਉਪਲਬਧ ਸਾਰੀਆਂ ਕੁਕੀਜ਼ ਅਤੇ ਸਾਈਟ ਡਾਟੇ ਨੂੰ ਮਿਟਾ ਦੇਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?</translation>
 <translation id="7829298379596169484">ਆਡੀਓ ਇਨਪੁਟ ਤੱਕ ਪਹੁੰਚ ਰਿਹਾ ਹੈ</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਆਪਣੇ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰਕੇ ਦੇਖੋ।</translation>
 <translation id="7829877209233347340">ਸਕੂਲੀ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣ ਲਈ ਮਾਂ-ਪਿਓ ਵਿੱਚੋਂ ਕਿਸੇ ਇੱਕ ਨੂੰ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਕਹੋ</translation>
 <translation id="7830594666202422257">Linux ਨਾਲ ਕਨੈਕਟ ਕਰੋ</translation>
 <translation id="7831491651892296503">ਨੈੱਟਵਰਕ ਦਾ ਸੰਰੂਪਣ ਕਰਨ ਵਿੱਚ ਗੜਬੜ ਹੋਈ</translation>
@@ -5399,7 +5403,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> ਨੇ ਤੁਹਾਡਾ ਮਾਊਸ ਕਰਸਰ ਅਯੋਗ ਬਣਾਇਆ ਹੈ।</translation>
 <translation id="8264024885325823677">ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਇਸ ਸੈਟਿੰਗ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਦਾ ਹੈ।</translation>
 <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" ਪੂਰੀ ਸਕ੍ਰੀਨ ਟ੍ਰਿਗਰ ਕੀਤੀ।</translation>
-<translation id="826511437356419340">ਵਿੰਡੋ ਰੂਪ-ਰੇਖਾ ਮੋਡ ਵਿੱਚ ਦਾਖਲ ਹੋਏ। ਨੈਵੀਗੇਟ ਕਰਨ ਲਈ ਸਵਾਈਪ ਕਰੋ ਜਾਂ ਜੇ ਕੀ-ਬੋਰਡ ਵਰਤ ਰਹੇ ਹੋ ਤਾਂ 'ਟੈਬ' ਦਬਾਓ।</translation>
+<translation id="826511437356419340">ਵਿੰਡੋ ਰੂਪ-ਰੇਖਾ ਮੋਡ ਵਿੱਚ ਦਾਖਲ ਹੋਏ। ਨੈਵੀਗੇਟ ਕਰਨ ਲਈ ਸਵਾਈਪ ਕਰੋ ਜਾਂ ਜੇ ਕੀ-ਬੋਰਡ ਵਰਤ ਰਹੇ ਹੋ ਤਾਂ Tab ਦਬਾਓ।</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />ਇਹ ਇਸ ਡੀਵਾਈਸ ਅਤੇ ਇਸਦੀ ਵਰਤੋਂ ਬਾਰੇ ਆਮ ਜਾਣਕਾਰੀ ਹੈ (ਜਿਵੇਂ ਕਿ ਬੈਟਰੀ ਪੱਧਰ, ਸਿਸਟਮ ਅਤੇ ਐਪ ਸਰਗਰਮੀ ਅਤੇ ਗੜਬੜੀਆਂ)। ਡਾਟਾ Android ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ ਵਰਤਿਆ ਜਾਵੇਗਾ ਅਤੇ ਕੁਝ ਏਕੀਕ੍ਰਿਤ ਜਾਣਕਾਰੀ Google ਐਪਾਂ ਅਤੇ ਪਾਰਟਨਰਾਂ, ਜਿਵੇਂ ਕਿ Android ਵਿਕਾਸਕਾਰਾਂ, ਦੀਆਂ ਐਪਾਂ ਅਤੇ ਉਤਪਾਦਾਂ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਵਿੱਚ ਵੀ ਉਹਨਾਂ ਦੀ ਮਦਦ ਕਰੇਗੀ।<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਬੰਦ ਕਰਨ ਨਾਲ ਸਿਸਟਮ ਅੱਪਡੇਟ ਅਤੇ ਸੁਰੱਖਿਆ ਵਰਗੀਆਂ ਜ਼ਰੂਰੀ ਸੇਵਾਵਾਂ ਲਈ ਲੋੜੀਂਦੀ ਜਾਣਕਾਰੀ ਭੇਜਣ ਸੰਬੰਧੀ ਇਸ ਡੀਵਾਈਸ ਦੀ ਸਮਰੱਥਾ ਪ੍ਰਭਾਵਿਤ ਨਹੀਂ ਹੁੰਦੀ ਹੈ।<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />ਮਾਲਕ ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਸੈਟਿੰਗਾਂ &gt; ਉੱਨਤ &gt; 'Google ਨੂੰ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਤਸ਼ਖੀਸ ਅਤੇ ਵਰਤੋਂ ਡਾਟਾ ਭੇਜੋ' ਤੋੋਂ ਕੰਟਰੋਲ ਕਰ ਸਕਦਾ ਹੈ।<ph name="END_PARAGRAPH3" />
@@ -5571,7 +5575,7 @@
 <translation id="851263357009351303"><ph name="HOST" /> ਨੂੰ ਹਮੇਸ਼ਾਂ ਚਿੱਤਰ ਦਿਖਾਉਣ ਦੀ ਆਗਿਆ ਦਿਓ</translation>
 <translation id="8513108775083588393">ਸਵੈ-ਘੁੰਮਾਓ</translation>
 <translation id="8514746246728959655">ਕੋਈ ਵੱਖਰੀ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਵਰਤ ਕੇ ਦੇਖੋ</translation>
-<translation id="851960115758509829">ਤੁਹਾਡੇ Google ਖਾਤੇ ਨਾਲ ਸਾਈਨ-ਇਨ ਕੀਤੇ ਸਾਰੇ Chrome OS ਡੀਵਾਈਸਾਂ ਨਾਲ ਤੁਹਾਡੀਆਂ ਐਪਾਂ, ਸੈਟਿੰਗਾਂ ਅਤੇ ਵਿਉਂਤਬੱਧਕਰਨਾਂ ਦਾ ਸਮਕਾਲੀਕਰਨ ਕੀਤਾ ਜਾਵੇਗਾ।</translation>
+<translation id="851960115758509829">ਤੁਹਾਡੇ Google ਖਾਤੇ ਨਾਲ ਸਾਈਨ-ਇਨ ਕੀਤੇ ਸਾਰੇ Chrome OS ਡੀਵਾਈਸਾਂ ਵਿੱਚ ਤੁਹਾਡੀਆਂ ਐਪਾਂ, ਸੈਟਿੰਗਾਂ ਅਤੇ ਵਿਉਂਤਬੱਧਕਰਨਾਂ ਦਾ ਸਮਕਾਲੀਕਰਨ ਕੀਤਾ ਜਾਵੇਗਾ।</translation>
 <translation id="8521475323816527629">ਆਪਣੀਆਂ ਐਪਾਂ 'ਤੇ ਤੇਜ਼ੀ ਨਾਲ ਪਹੁੰਚ ਕਰੋ</translation>
 <translation id="8523493869875972733">ਤਬਦੀਲੀਆਂ ਰੱਖੋ</translation>
 <translation id="8523849605371521713">ਨੀਤੀ ਵੱਲੋਂ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ</translation>
@@ -5936,7 +5940,6 @@
 <translation id="8966870118594285808">ਤੁਹਾਡੇ ਵੱਲੋਂ ਅਚਾਨਕ ਬੰਦ ਹੋਈ ਕਿਸੇ ਟੈਬ ਨੂੰ ਮੁੜ-ਖੋਲ੍ਹੋ</translation>
 <translation id="8967866634928501045">ਦਿਖਾਉਣ ਲਈ Alt Shift A ਦਬਾਓ</translation>
 <translation id="8968766641738584599">ਕਾਰਡ ਰੱਖਿਅਤ ਕਰੋ</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕਦਾ। 24 ਘੰਟਿਆਂ ਬਾਅਦ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜਾਂ <ph name="BEGIN_LINK" />ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਕਰੋ<ph name="END_LINK" />।</translation>
 <translation id="89720367119469899">ਛੱਡੋ</translation>
 <translation id="8972513834460200407">ਕਿਰਪਾ ਕਰਕੇ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਆਪਣੇ ਨੈੱਟਵਰਕ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ ਕਿ ਫਾਇਰਵਾਲ Google ਸਰਵਰਾਂ ਤੋਂ ਡਾਊਨਲੋਡ ਬਲਾਕ ਨਹੀਂ ਕਰ ਰਹੀ ਹੈ।</translation>
 <translation id="8973557916016709913">ਜ਼ੂਮ ਪੱਧਰ ਹਟਾਓ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 8e94908..d26351a 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Dodano zakładki</translation>
 <translation id="2343747224442182863">Ustaw tę kartę jako aktywną</translation>
 <translation id="2345723121311404059">Jedna strona do: <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Usługa SODA</translation>
 <translation id="2347644257713614136">Korzystanie z Hangouts i Cast for Education podlega Polityce prywatności Google.</translation>
 <translation id="2348176352564285430">Aplikacja: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Błąd podczas ładowania danych</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Odciski cyfrowe na tym kluczu bezpieczeństwa</translation>
 <translation id="3973660817924297510">Sprawdzam hasła (<ph name="CHECKED_PASSWORDS" /> z <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Nie udało się połączyć z serwerem obszaru</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> nie może sprawdzić Twoich haseł. Spróbuj później.</translation>
 <translation id="3976108569178263973">Brak dostępnych drukarek.</translation>
 <translation id="397703832102027365">Kończę...</translation>
 <translation id="3977886311744775419">W sieci tego typu aktualizacje nie są pobierane automatycznie, możesz jednak sprawdzić ręcznie, czy są dostępne.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Puszysty</translation>
 <translation id="4423376891418188461">Przywróć ustawienia</translation>
 <translation id="442397852638519243">Twój administrator (<ph name="USER_NAME" />) prosi Cię o zmianę Twojego hasła.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> nie może sprawdzić Twoich haseł. Spróbuj ponownie za 24 godziny.</translation>
 <translation id="4429030830601238961">Tych danych nie można wkleić, ponieważ naruszają one zasady bezpieczeństwa obowiązujące w Twojej organizacji.</translation>
 <translation id="4430019312045809116">Głośność</translation>
 <translation id="4430369329743628066">Dodano zakładkę</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Chcesz, by ta aplikacja była uruchamiana automatycznie po włączeniu urządzenia?</translation>
 <translation id="4441147046941420429">Aby kontynuować, odłącz klucz bezpieczeństwa od urządzenia, a potem podłącz go ponownie i dotknij</translation>
 <translation id="444134486829715816">Rozwiń...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> może sprawdzić Twoje hasła, gdy zalogujesz się na konto Google</translation>
 <translation id="4442424173763614572">Wyszukiwanie DNS nie powiodło się.</translation>
 <translation id="4443536555189480885">&amp;Pomoc</translation>
 <translation id="4444304522807523469">Dostęp do skanerów podłączonych przez USB lub do sieci lokalnej</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Aby zeskanować ten kod, skorzystaj ze skanera kodów QR w telefonie lub z aplikacji aparatu.</translation>
 <translation id="4477015793815781985">Uwzględnij klawisze Ctrl, Alt lub ⌘</translation>
 <translation id="4478664379124702289">Zapisz link ja&amp;ko...</translation>
-<translation id="4478777936860197922">Brak zapisanych haseł. <ph name="IDS_SHORT_PRODUCT_NAME" /> może sprawdzać Twoje hasła, gdy je zapiszesz.</translation>
 <translation id="4479424953165245642">Zarządzaj aplikacjami kiosku</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Konfiguruję maszynę wirtualną. Może to potrwać kilka minut.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Nie instaluj</translation>
 <translation id="4850669014075537160">Przewijanie</translation>
 <translation id="4850886885716139402">Widok</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> powiadomi Cię w razie logowania za pomocą przejętego hasła</translation>
 <translation id="4853020600495124913">Otwórz w &amp;nowym oknie</translation>
 <translation id="4854317507773910281">Wybierz konto rodzica na potrzeby zatwierdzenia</translation>
 <translation id="485480310608090163">Więcej ustawień i uprawnień</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Szybkość rozładowywania w watach</translation>
 <translation id="7531779363494549572">Otwórz Ustawienia &gt; Aplikacje i powiadomienia &gt; Powiadomienia.</translation>
 <translation id="7532009420053991888">Aplikacja <ph name="LINUX_APP_NAME" /> nie odpowiada. Aby ją zamknąć, wybierz „Wymuś zamknięcie”.</translation>
-<translation id="7536333565791380193">Zabezpieczenia zaawansowane</translation>
 <translation id="7537451260744431038">Strony nie mogą używać plików cookie dla Twojej wygody, by na przykład zapamiętać Twoje logowanie lub zawartość koszyka</translation>
 <translation id="7539856059004947393">Klucz bezpieczeństwa Bluetooth</translation>
 <translation id="7540972813190816353">Podczas sprawdzania dostępności aktualizacji wystąpił błąd: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Uwaga:<ph name="END_BOLD" /> podczas tego procesu system uruchomi się ponownie.</translation>
 <translation id="7828731929332799387">Spowoduje to usunięcie wszystkich plików cookie i danych witryn dostępnych w kontekście witryn innych firm. Czy chcesz kontynuować?</translation>
 <translation id="7829298379596169484">Otwieram wejście audio</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> nie może sprawdzić Twoich haseł. Sprawdź połączenie z internetem.</translation>
 <translation id="7829877209233347340">Poproś rodzica, by się zalogował i zezwolił na dodanie konta szkolnego</translation>
 <translation id="7830594666202422257">Podłącz do Linuksa</translation>
 <translation id="7831491651892296503">Podczas konfigurowania sieci wystąpił błąd</translation>
@@ -5588,7 +5580,7 @@
 <translation id="851263357009351303">Zawsze zezwalaj na pokazywanie grafik w witrynie <ph name="HOST" /></translation>
 <translation id="8513108775083588393">Autoobracanie</translation>
 <translation id="8514746246728959655">Użyj innego klucza bezpieczeństwa</translation>
-<translation id="851960115758509829">Gdy zalogujesz się na konto Google, Twoje aplikacje, ustawienia i inne dostosowania zsynchronizują się na wszystkich urządzeniach z Chrome OS.</translation>
+<translation id="851960115758509829">Twoje aplikacje, ustawienia i inne dostosowania zsynchronizują się na wszystkich urządzeniach z Chrome OS, na których zalogujesz się na konto Google.</translation>
 <translation id="8521475323816527629">Szybkie otwieranie aplikacji</translation>
 <translation id="8523493869875972733">Zachowaj zmiany</translation>
 <translation id="8523849605371521713">Dodane przez zasady</translation>
@@ -5953,7 +5945,6 @@
 <translation id="8966870118594285808">Możesz ponownie otworzyć kartę zamkniętą przez przypadek</translation>
 <translation id="8967866634928501045">Naciśnij Alt+Shift+A, by wyświetlić</translation>
 <translation id="8968766641738584599">Zapisz kartę</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> nie może sprawdzić Twoich haseł. Spróbuj ponownie za 24 godziny lub <ph name="BEGIN_LINK" />sprawdź hasła na koncie Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Ucieczka</translation>
 <translation id="8972513834460200407">Skontaktuj się z administratorem sieci, by dowiedzieć się, czy zapora sieciowa nie blokuje pobrań z serwerów Google.</translation>
 <translation id="8973557916016709913">Usuń poziom powiększenia</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index d562978..1e4ec892 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Favoritos adicionados</translation>
 <translation id="2343747224442182863">Focar esta guia</translation>
 <translation id="2345723121311404059">1 página para <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Serviço SODA</translation>
 <translation id="2347644257713614136">O uso do Hangouts e do Cast for Education é regido pela Política de Privacidade do Google.</translation>
 <translation id="2348176352564285430">App: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Erro ao carregar os dados</translation>
@@ -1829,7 +1828,7 @@
 <translation id="3435738964857648380">Segurança</translation>
 <translation id="343578350365773421">Sem papel</translation>
 <translation id="3435896845095436175">Ativar</translation>
-<translation id="3436642683618870087">Com o "Legendas em tempo real", as falas em conteúdo de mídia são detectadas e as legendas são geradas automaticamente para toda a mídia reproduzida no Chrome.</translation>
+<translation id="3436642683618870087">O Legenda instantânea detecta as falas em conteúdo de mídia e gera as legendas automaticamente para toda a mídia reproduzida no Chrome.</translation>
 <translation id="3438633801274389918">Ninja</translation>
 <translation id="3439153939049640737">Sempre permitir que <ph name="HOST" /> acesse seu microfone</translation>
 <translation id="3439970425423980614">Abrindo visualização do PDF</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Impressões digitais nesta chave de segurança</translation>
 <translation id="3973660817924297510">Verificando senhas (<ph name="CHECKED_PASSWORDS" /> de <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Falha ao entrar em contato com o servidor desse domínio</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> não pode verificar suas senhas. Tente novamente mais tarde.</translation>
 <translation id="3976108569178263973">Não há impressoras disponíveis.</translation>
 <translation id="397703832102027365">Finalizando...</translation>
 <translation id="3977886311744775419">Não é possível fazer o download das atualizações automáticas neste tipo de rede, mas você pode verificar as atualizações manualmente.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Pelúcia</translation>
 <translation id="4423376891418188461">Restaurar configurações</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, seu administrador solicita que você altere sua senha.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> não pode verificar suas senhas. Tente novamente em 24 horas.</translation>
 <translation id="4429030830601238961">Esses dados violam as políticas de segurança da sua organização e não podem ser colados.</translation>
 <translation id="4430019312045809116">Volume</translation>
 <translation id="4430369329743628066">Página adicionada como favorito</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Quer iniciar automaticamente este aplicativo quando o computador for ligado?</translation>
 <translation id="4441147046941420429">Para continuar, remova sua chave de segurança do dispositivo, reinsira-a e toque nela</translation>
 <translation id="444134486829715816">Expandir...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> pode verificar suas senhas quando você faz login com sua Conta do Google.</translation>
 <translation id="4442424173763614572">A busca de DNS falhou</translation>
 <translation id="4443536555189480885">&amp;Ajuda</translation>
 <translation id="4444304522807523469">Acessar scanners de documentos acoplados via USB ou na rede local</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Para ler esse código, você pode usar um app leitor de QR ou alguns apps de câmera no seu smartphone.</translation>
 <translation id="4477015793815781985">Inclua Ctrl, Alt ou ⌘</translation>
 <translation id="4478664379124702289">Salvar &amp;link como...</translation>
-<translation id="4478777936860197922">Nenhuma senha salva. <ph name="IDS_SHORT_PRODUCT_NAME" /> pode verificar suas senhas quando elas são salvas.</translation>
 <translation id="4479424953165245642">Gerenciar aplicativos do quiosque</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Configurando a máquina virtual. Isso pode levar alguns minutos.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Não instalar</translation>
 <translation id="4850669014075537160">Rolagem</translation>
 <translation id="4850886885716139402">Visualizar</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> enviará uma notificação quando você fizer login com uma senha comprometida</translation>
 <translation id="4853020600495124913">Abrir em &amp;nova janela</translation>
 <translation id="4854317507773910281">Escolha uma conta de pai/mãe para aprovação</translation>
 <translation id="485480310608090163">Mais configurações e permissões</translation>
@@ -4839,7 +4833,6 @@
 <translation id="7530016656428373557">Taxa de descarga em Watts</translation>
 <translation id="7531779363494549572">Acesse Config. &gt; Apps e notificações &gt; Notificações.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> não está respondendo. Selecione "Forçar fechamento" para fechar o app.</translation>
-<translation id="7536333565791380193">Segurança avançada</translation>
 <translation id="7537451260744431038">Os sites não podem usar cookies para melhorar sua experiência de navegação, como manter sua conta conectada ou se lembrar dos itens em um carrinho de compras</translation>
 <translation id="7539856059004947393">Chave de segurança Bluetooth</translation>
 <translation id="7540972813190816353">Ocorreu um erro durante a verificação de atualizações: <ph name="ERROR" /></translation>
@@ -5080,7 +5073,6 @@
     <ph name="BEGIN_BOLD" />Observação:<ph name="END_BOLD" /> o sistema será reinicializado durante o processo.</translation>
 <translation id="7828731929332799387">Essa ação excluirá todos os cookies e dados de sites disponíveis em contextos de terceiros. Quer continuar?</translation>
 <translation id="7829298379596169484">Acessando entrada de áudio</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> não pode verificar suas senhas. Verifique sua conexão de Internet.</translation>
 <translation id="7829877209233347340">Peça a um pai/mãe para se conectar e permitir a adição de uma conta escolar</translation>
 <translation id="7830594666202422257">Conectar ao Linux</translation>
 <translation id="7831491651892296503">Erro ao configurar a rede</translation>
@@ -5955,7 +5947,6 @@
 <translation id="8966870118594285808">Reabra uma guia se você a fechou acidentalmente</translation>
 <translation id="8967866634928501045">Pressione Alt+Shift+A para exibir</translation>
 <translation id="8968766641738584599">Salvar cartão</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> não pode verificar suas senhas. Tente novamente em 24 horas ou <ph name="BEGIN_LINK" />verifique-as na sua Conta do Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Verifique com seu administrador de rede se o firewall não está bloqueando downloads dos servidores do Google.</translation>
 <translation id="8973557916016709913">Remover o nível de zoom</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index d2ef327b..0a2c111b 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Marcadores adicionados</translation>
 <translation id="2343747224442182863">Focar este separador</translation>
 <translation id="2345723121311404059">1 página para <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Serviço SODA</translation>
 <translation id="2347644257713614136">A utilização do Hangouts e do Cast for Education é regida pela Política de Privacidade da Google.</translation>
 <translation id="2348176352564285430">Aplicação: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Ocorreu um erro ao carregar os dados.</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Impressões digitais nesta chave de segurança</translation>
 <translation id="3973660817924297510">A verificar palavras-passe (<ph name="CHECKED_PASSWORDS" /> de <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Falha ao contactar o servidor do domínio.</translation>
-<translation id="3975884715086515476">O <ph name="IDS_SHORT_PRODUCT_NAME" /> não consegue verificar as suas palavras-passe. Tente novamente mais tarde.</translation>
 <translation id="3976108569178263973">Não existem impressoras disponíveis.</translation>
 <translation id="397703832102027365">A finalizar...</translation>
 <translation id="3977886311744775419">As atualizações automáticas não são transferidas neste tipo de rede, mas pode verificar se existem atualizações manualmente.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Fofo</translation>
 <translation id="4423376891418188461">Restaurar definições</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, o seu gestor requer que altere a sua palavra-passe.</translation>
-<translation id="4426209360861763174">O <ph name="IDS_SHORT_PRODUCT_NAME" /> não consegue verificar as suas palavras-passe. Tente novamente após 24 horas.</translation>
 <translation id="4429030830601238961">Estes dados violam as políticas de segurança da sua entidade e não é possível colá-los.</translation>
 <translation id="4430019312045809116">Volume</translation>
 <translation id="4430369329743628066">Marcador adicionado</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Pretende iniciar automaticamente esta aplicação quando o computador é ligado?</translation>
 <translation id="4441147046941420429">Para continuar, remova a sua chave de segurança do dispositivo e, em seguida, reinsira-a e toque na mesma.</translation>
 <translation id="444134486829715816">Expandir...</translation>
-<translation id="4442329324652245220">O <ph name="IDS_SHORT_PRODUCT_NAME" /> pode verificar as suas palavras-passe quando inicia sessão com a sua Conta Google.</translation>
 <translation id="4442424173763614572">A procura de DNS falhou</translation>
 <translation id="4443536555189480885">&amp;Ajuda</translation>
 <translation id="4444304522807523469">Aceder a scanners de documentos anexados através de USB ou na rede local</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Para ler este código, pode utilizar uma aplicação de leitura de códigos QR no telemóvel ou algumas aplicações de câmara.</translation>
 <translation id="4477015793815781985">Inclua Ctrl, Alt ou ⌘.</translation>
 <translation id="4478664379124702289">Guardar Lin&amp;k Como...</translation>
-<translation id="4478777936860197922">Não existem palavras-passe guardadas. O <ph name="IDS_SHORT_PRODUCT_NAME" /> consegue verificar as suas palavras-passe quando as guarda.</translation>
 <translation id="4479424953165245642">Gerir aplicações de quiosque</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">A configurar a máquina virtual… Esta ação pode demorar alguns minutos.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Não instalar</translation>
 <translation id="4850669014075537160">Deslocamento</translation>
 <translation id="4850886885716139402">Ver</translation>
-<translation id="485197095346966382">O <ph name="IDS_SHORT_PRODUCT_NAME" /> envia-lhe uma notificação quando iniciar sessão com uma palavra-passe comprometida.</translation>
 <translation id="4853020600495124913">Abrir numa &amp;nova janela</translation>
 <translation id="4854317507773910281">Escolhe a conta parental para aprovação</translation>
 <translation id="485480310608090163">Mais definições e autorizações</translation>
@@ -4838,7 +4832,6 @@
 <translation id="7530016656428373557">Taxa de descarga em Watts</translation>
 <translation id="7531779363494549572">Aceda a Definições &gt; Aplicações e notificações &gt; Notificações.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> não está a responder. Selecione "Forçar fecho" para fechar a aplicação.</translation>
-<translation id="7536333565791380193">Segurança avançada</translation>
 <translation id="7537451260744431038">Os sites não podem utilizar cookies para melhorar a experiência de navegação, por exemplo, para manter a sua sessão iniciada ou memorizar os artigos no seu carrinho de compras.</translation>
 <translation id="7539856059004947393">Chave de segurança de Bluetooth</translation>
 <translation id="7540972813190816353">Ocorreu um erro durante a verificação de atualizações: <ph name="ERROR" /></translation>
@@ -5079,7 +5072,6 @@
     <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> o sistema será reiniciado durante o processo.</translation>
 <translation id="7828731929332799387">Esta ação eliminará todos os cookies e dados de sites disponíveis em contextos de terceiros. Pretende continuar?</translation>
 <translation id="7829298379596169484">A aceder à entrada de áudio</translation>
-<translation id="7829528495815477379">O <ph name="IDS_SHORT_PRODUCT_NAME" /> não consegue verificar as suas palavras-passe. Experimente verificar a sua ligação à Internet.</translation>
 <translation id="7829877209233347340">Peça a um dos seus pais para lhe conceder autorização para adicionar uma conta escolar.</translation>
 <translation id="7830594666202422257">Ligar ao Linux</translation>
 <translation id="7831491651892296503">Ocorreu um erro ao configurar a rede.</translation>
@@ -5953,7 +5945,6 @@
 <translation id="8966870118594285808">Reabra um separador caso o feche acidentalmente.</translation>
 <translation id="8967866634928501045">Prima Alt + Shift + A para mostrar.</translation>
 <translation id="8968766641738584599">Guardar cartão</translation>
-<translation id="8971800409073702505">O <ph name="IDS_SHORT_PRODUCT_NAME" /> não consegue verificar as suas palavras-passe. Tente novamente após 24 horas ou <ph name="BEGIN_LINK" />verifique as palavras-passe na sua Conta Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Consulte o seu gestor de rede para ter a certeza de que a firewall não está a bloquear as transferências dos servidores da Google.</translation>
 <translation id="8973557916016709913">Remover nível de zoom</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 98f400c..ae3c36d 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Au fost adăugate marcaje</translation>
 <translation id="2343747224442182863">Focalizează această filă</translation>
 <translation id="2345723121311404059">1 pagină cu <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Serviciul SODA</translation>
 <translation id="2347644257713614136">Folosirea serviciilor Hangouts și Cast for Education se supune Politicii de confidențialitate Google.</translation>
 <translation id="2348176352564285430">Aplicație: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Eroare la încărcarea datelor</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Amprentele digitale ale cheii de securitate</translation>
 <translation id="3973660817924297510">Se verifică parolele (<ph name="CHECKED_PASSWORDS" /> din <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Contactarea serverului pentru domeniu nu a reușit</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> nu îți poate verifica parolele. Încearcă din nou mai târziu.</translation>
 <translation id="3976108569178263973">Nu există imprimante disponibile.</translation>
 <translation id="397703832102027365">Se finalizează...</translation>
 <translation id="3977886311744775419">Actualizările automate nu se descarcă în acest tip de rețea, dar poți căuta actualizări manual.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Pufoșel</translation>
 <translation id="4423376891418188461">Restabilește setările</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, administratorul solicită să îți schimbi parola.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> nu îți poate verifica parolele. Încearcă din nou după 24 de ore.</translation>
 <translation id="4429030830601238961">Aceste date încalcă politicile de securitate ale organizației și nu pot fi inserate.</translation>
 <translation id="4430019312045809116">Volum</translation>
 <translation id="4430369329743628066">Marcajul a fost adăugat</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Doriți ca această aplicație să fie lansată automat la pornirea dispozitivului?</translation>
 <translation id="4441147046941420429">Ca să continui, elimină cheia de securitate de pe dispozitiv, apoi introdu-o din nou și atinge-o</translation>
 <translation id="444134486829715816">Extinde...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> poate să îți verifice parolele atunci când te conectezi folosind Contul Google</translation>
 <translation id="4442424173763614572">Căutarea DNS nu a reușit</translation>
 <translation id="4443536555189480885">&amp;Ajutor</translation>
 <translation id="4444304522807523469">Accesează scanerele de documente atașate prin USB sau dintr-o rețea locală</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Pentru a scana codul, poți folosi o aplicație de scanare a codurilor QR pe telefon sau anumite aplicații pentru camera foto.</translation>
 <translation id="4477015793815781985">Include Ctrl, Alt sau ⌘</translation>
 <translation id="4478664379124702289">Salvează lin&amp;kul ca...</translation>
-<translation id="4478777936860197922">Nu există parole salvate. <ph name="IDS_SHORT_PRODUCT_NAME" /> îți poate verifica parolele dacă le salvezi.</translation>
 <translation id="4479424953165245642">Gestionați aplicațiile de tip chioșc</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Se configurează mașina virtuală. Poate dura câteva minute.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Nu instala</translation>
 <translation id="4850669014075537160">Derulare</translation>
 <translation id="4850886885716139402">Afișează</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> te va anunța dacă te conectezi folosind o parolă compromisă</translation>
 <translation id="4853020600495124913">Deschideți într-o &amp;fereastră nouă</translation>
 <translation id="4854317507773910281">Alege contul de părinte pentru aprobare</translation>
 <translation id="485480310608090163">Mai multe setări și permisiuni</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Rata de descărcare în wați</translation>
 <translation id="7531779363494549572">Accesează Setări &gt; Aplicații și notificări &gt; Notificări.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> nu răspunde. Selectează „Închide forțat” pentru a închide aplicația.</translation>
-<translation id="7536333565791380193">Securitate avansată</translation>
 <translation id="7537451260744431038">Site-urile nu pot folosi cookie-uri pentru a-ți îmbunătăți experiența de navigare, de exemplu, pentru a te menține conectat(ă) sau pentru a reține articolele din coșul de cumpărături</translation>
 <translation id="7539856059004947393">Cheie de securitate Bluetooth</translation>
 <translation id="7540972813190816353">A avut loc o eroare la verificarea existenței unor actualizări: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Notă:<ph name="END_BOLD" /> sistemul va reporni în timpul acestui proces.</translation>
 <translation id="7828731929332799387">Vor fi șterse toate cookie-urile și datele privind site-urile disponibile în contexte terță parte. Dorești să continui?</translation>
 <translation id="7829298379596169484">Se accesează intrarea audio</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> nu îți poate verifica parolele. Verifică-ți conexiunea la internet.</translation>
 <translation id="7829877209233347340">Roagă-ți părintele să se conecteze pentru a-ți acorda permisiunea să adaugi un cont de la școală</translation>
 <translation id="7830594666202422257">Conectează-te la Linux</translation>
 <translation id="7831491651892296503">Eroare la configurarea rețelei</translation>
@@ -5953,7 +5945,6 @@
 <translation id="8966870118594285808">Redeschide o filă dacă ai închis-o din greșeală</translation>
 <translation id="8967866634928501045">Apasă pe Alt+Shift+A pentru a afișa</translation>
 <translation id="8968766641738584599">Salvează cardul</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> nu îți poate verifica parolele. Încearcă din nou după 24 de ore sau <ph name="BEGIN_LINK" />verifică parolele din Contul Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Tasta Esc</translation>
 <translation id="8972513834460200407">Contactați administratorul de rețea, pentru a vă asigura că firewallul nu blochează descărcările de pe serverele Google.</translation>
 <translation id="8973557916016709913">Elimină nivelul de zoom</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index b71cbf2..24874ef7 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Название закладки</translation>
 <translation id="1124772482545689468">Пользователь</translation>
 <translation id="1125550662859510761">Выглядит как <ph name="WIDTH" /> x <ph name="HEIGHT" /> (аппаратное разрешение)</translation>
+<translation id="1126809382673880764">Не защищает вас от сайтов, расширений и скачанных файлов, которые могут представлять опасность. Безопасный просмотр по-прежнему будет работать в других сервисах Google, например в Gmail и Поиске.</translation>
 <translation id="1128109161498068552">Запретить сайтам доступ к устройствам MIDI с помощью системных сообщений</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Изменить поисковую систему</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Сохраненные сети</translation>
 <translation id="123578888592755962">Недостаточно места на диске</translation>
 <translation id="1238191093934674082">OpenVPN</translation>
+<translation id="1239439601391236986">Показывать при вводе текста подсказки с личной информацией</translation>
 <translation id="1239594683407221485">Чтобы посмотреть контент, хранящийся на устройстве, откройте приложение "Файлы".</translation>
 <translation id="124116460088058876">Другие языки</translation>
 <translation id="1241753985463165747">Просмотр и изменение всех ваших данных на текущем сайте</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Активация мобильной сети</translation>
 <translation id="1407489512183974736">Кадрировать и выровнять по центру</translation>
 <translation id="1408504635543854729">Чтобы просмотреть контент, хранящийся на устройстве, перейдите в приложение "Файлы". Администратор запретил изменять этот контент.</translation>
+<translation id="1408980562518920698">Управление личной информацией</translation>
 <translation id="1410197035576869800">Значок приложения</translation>
 <translation id="1410616244180625362">Разрешить <ph name="HOST" /> доступ к камере</translation>
 <translation id="1414648216875402825">Вы устанавливаете нестабильную версию <ph name="PRODUCT_NAME" />, которая содержит разрабатываемые в настоящий момент функции. Будьте осторожны: возможны сбои и неизвестные ошибки.</translation>
@@ -433,6 +436,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">Консоль &amp;JavaScript</translation>
 <translation id="1587907146729660231">Приложите палец к кнопке питания</translation>
+<translation id="1588200577109872591">Умный ввод</translation>
 <translation id="1588438908519853928">Обычный</translation>
 <translation id="158849752021629804">Необходима домашняя сеть</translation>
 <translation id="1588870296199743671">Открыть ссылку с помощью...</translation>
@@ -668,6 +672,7 @@
 <translation id="1879000426787380528">Войти как</translation>
 <translation id="1880905663253319515">Удалить сертификат <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="1884013283844450420">Сеть <ph name="NETWORK_INDEX" /> из <ph name="NETWORK_COUNT" />, название – "<ph name="NETWORK_NAME" />", подключение</translation>
+<translation id="1884705339276589024">Изменение размера диска Linux</translation>
 <translation id="1886996562706621347">Разрешить запросы на установку обработчиков протоколов (рекомендуется)</translation>
 <translation id="1887442540531652736">Ошибка входа</translation>
 <translation id="1887597546629269384">Скажите "Эй, Google" ещё раз</translation>
@@ -737,6 +742,7 @@
 <translation id="1979280758666859181">Вы переходите на канал обновления с более ранней версией <ph name="PRODUCT_NAME" />. Чтобы изменения вступили в силу, версия канала и текущая версия на вашем устройстве должны совпадать.</translation>
 <translation id="197989455406964291">Центр распространения ключей (KDC) не поддерживает такой тип шифрования.</translation>
 <translation id="1982354452682152483">Описание недоступно.</translation>
+<translation id="1984417487208496350">Защита отключена (не рекомендуется)</translation>
 <translation id="1987317783729300807">Аккаунты</translation>
 <translation id="1989112275319619282">Выбрать</translation>
 <translation id="1990512225220753005">Не показывать ярлыки на этой странице</translation>
@@ -806,6 +812,7 @@
 <translation id="2090165459409185032">Чтобы восстановить данные аккаунта, перейдите на страницу google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Настройка безопасности системы</translation>
 <translation id="2091887806945687916">Звук</translation>
+<translation id="2096478741073211388">Вы можете быстрее вводить такие данные, как ваше имя, адрес или номер телефона благодаря персонализированным подсказкам с личной информацией. Они появляются, когда вы набираете текст, и видны только вам.</translation>
 <translation id="2096715839409389970">Удалить сторонние файлы cookie</translation>
 <translation id="2097372108957554726">Войдите в Chrome, чтобы зарегистрировать новое устройство</translation>
 <translation id="2099172618127234427">Вы включаете функции отладки Chrome OS. Будет настроен SSHD-демон и разрешена загрузка с USB-дисков.</translation>
@@ -822,6 +829,7 @@
 <translation id="2114326799768592691">Перезагрузить &amp;фрейм</translation>
 <translation id="2114896190328250491">Фото: <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Открыть в приложении "<ph name="APP" />"</translation>
+<translation id="2119461801241504254">Безопасный просмотр включен. Он защищает вас от вредоносных сайтов и файлов.</translation>
 <translation id="2120297377148151361">Действия в браузере</translation>
 <translation id="2120639962942052471">Отключено разрешение "<ph name="PERMISSION" />"</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Файлы cookie заблокированы.}=1{Файлы cookie заблокированы (есть 1 исключение).}one{Файлы cookie заблокированы (есть {COUNT} исключение).}few{Файлы cookie заблокированы (есть {COUNT} исключения).}many{Файлы cookie заблокированы (есть {COUNT} исключений).}other{Файлы cookie заблокированы (есть {COUNT} исключения).}}</translation>
@@ -1002,7 +1010,6 @@
 <translation id="2342740338116612727">Закладки добавлены</translation>
 <translation id="2343747224442182863">Переключиться на эту вкладку</translation>
 <translation id="2345723121311404059">Печать 1 страницы на принтере <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Сервис SODA</translation>
 <translation id="2347644257713614136">Использование Hangouts и Cast for Education регулируется Политикой конфиденциальности Google.</translation>
 <translation id="2348176352564285430">Приложение: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">При загрузке данных произошла ошибка.</translation>
@@ -1787,7 +1794,7 @@
 <translation id="3396800784455899911">Нажимая кнопку "Принять условия и продолжить", вы соглашаетесь с Условиями использования сервисов Google, описанными выше.</translation>
 <translation id="3399432415385675819">Уведомления будут отключены</translation>
 <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Гц) – чересстрочная развертка</translation>
-<translation id="3402585168444815892">Регистрация для использования демонстрационного режима.</translation>
+<translation id="3402585168444815892">Регистрация для использования демонстрационного режима</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Для этого сайта нет сохраненных паролей</translation>
 <translation id="3405664148539009465">Настроить шрифты</translation>
@@ -1889,6 +1896,7 @@
 <translation id="3515983984924808886">Чтобы подтвердить сброс, нажмите кнопку на электронном ключе ещё раз. Все данные, сохраненные на нем, включая PIN-код, будут удалены.</translation>
 <translation id="3518985090088779359">Продолжить</translation>
 <translation id="351952459507671940">Добавить в новую группу</translation>
+<translation id="3521606918211282604">Изменить размер диска</translation>
 <translation id="3523642406908660543">Предупреждать, что сайт пытается использовать плагин для доступа к компьютеру (рекомендуется)</translation>
 <translation id="3524965460886318643">Экспортировать журнал активности</translation>
 <translation id="3526034519184079374">Невозможно прочитать или изменить данные сайта</translation>
@@ -1976,6 +1984,7 @@
 <translation id="3629631988386925734">Чтобы включить Smart Lock, введите пароль. После этого вы сможете разблокировать устройство <ph name="DEVICE_TYPE" /> с помощью телефона. Выключить Smart Lock можно в настройках.</translation>
 <translation id="3630132874740063857">Телефон</translation>
 <translation id="3630995161997703415">Добавьте этот сайт на панель запуска, чтобы он всегда был у вас под рукой.</translation>
+<translation id="3633309367764744750">Предварительно загружать данные со страниц, в том числе тех, которые вы ещё не посещали. Загружаемые данные могут включать файлы cookie, если вы их разрешили.</translation>
 <translation id="3634507049637220048">Сеть <ph name="NETWORK_INDEX" /> из <ph name="NETWORK_COUNT" />, название – "<ph name="NETWORK_NAME" />", статус подключения – "<ph name="CONNECTION_STATUS" />", под управлением администратора, подробная информация</translation>
 <translation id="3635241501480133979">Эти данные нарушают правила безопасности организации, поэтому их нельзя перетащить.</translation>
 <translation id="3635353578505343390">Отправка отзыва в Google</translation>
@@ -2274,7 +2283,6 @@
 <translation id="3971764089670057203">Цифровые отпечатки на этом электронном ключе</translation>
 <translation id="3973660817924297510">Проверка паролей (<ph name="CHECKED_PASSWORDS" /> из <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Не удалось связаться с областью сервера.</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> не может проверить пароли. Повторите попытку позже.</translation>
 <translation id="3976108569178263973">Нет доступных принтеров.</translation>
 <translation id="397703832102027365">Завершение…</translation>
 <translation id="3977886311744775419">Скачать обновления в вашей сети можно только вручную.</translation>
@@ -2575,7 +2583,6 @@
 <translation id="4421932782753506458">Пушистик</translation>
 <translation id="4423376891418188461">Восстановить настройки</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, администратор просит вас сменить пароль.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> не может проверить пароли. Повторите попытку через 24 часа.</translation>
 <translation id="4429030830601238961">Эти данные нарушают правила безопасности организации, поэтому их нельзя вставить.</translation>
 <translation id="4430019312045809116">Объем</translation>
 <translation id="4430369329743628066">Закладка добавлена</translation>
@@ -2588,7 +2595,6 @@
 <translation id="4441124369922430666">Автоматически запускать это приложение при включении устройства?</translation>
 <translation id="4441147046941420429">Чтобы продолжить, извлеките электронный ключ и снова вставьте его в устройство. Затем нажмите кнопку на электронном ключе.</translation>
 <translation id="444134486829715816">Развернуть...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> сможет проверить ваши пароли, когда вы войдете в аккаунт Google.</translation>
 <translation id="4442424173763614572">Произошла ошибка при поиске сервера DNS</translation>
 <translation id="4443536555189480885">&amp;Справка</translation>
 <translation id="4444304522807523469">Доступ к сканерам, подключенным через USB-порт или локальную сеть</translation>
@@ -2615,7 +2621,6 @@
 <translation id="4476659815936224889">Этот код можно сканировать с помощью специального приложения или камеры на телефоне (если такая возможность поддерживается)</translation>
 <translation id="4477015793815781985">Комбинация должна начинаться с Ctrl, Alt или ⌘</translation>
 <translation id="4478664379124702289">Сохранить ссылку как...</translation>
-<translation id="4478777936860197922">Сохраненных паролей нет. Чтобы браузер <ph name="IDS_SHORT_PRODUCT_NAME" /> мог проверять пароли, сохраните их.</translation>
 <translation id="4479424953165245642">Настроить киоск-приложения</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Идет настройка виртуальной машины. Это может занять несколько минут.</translation>
@@ -2861,7 +2866,6 @@
 <translation id="4849517651082200438">Не устанавливать</translation>
 <translation id="4850669014075537160">Прокрутка</translation>
 <translation id="4850886885716139402">Посмотреть</translation>
-<translation id="485197095346966382">Вы получите уведомление от <ph name="IDS_SHORT_PRODUCT_NAME" />, если войдете в аккаунт с паролем, который был раскрыт.</translation>
 <translation id="4853020600495124913">Открыть в &amp;новом окне</translation>
 <translation id="4854317507773910281">Выберите родителя, который должен одобрить расширение:</translation>
 <translation id="485480310608090163">Дополнительные настройки и разрешения</translation>
@@ -3935,6 +3939,7 @@
 <translation id="6298962879096096191">Использование Google Play для установки приложений Android</translation>
 <translation id="630065524203833229">В&amp;ыход</translation>
 <translation id="6300718114348072351">Не удалось автоматически настроить принтер "<ph name="PRINTER_NAME" />". Задайте дополнительные параметры. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Подсказки с личной информацией</translation>
 <translation id="6305607932814307878">Общая политика:</translation>
 <translation id="6307990684951724544">Система перегружена</translation>
 <translation id="6308493641021088955">Вход через расширение "<ph name="EXTENSION_NAME" />"</translation>
@@ -4013,6 +4018,7 @@
 <translation id="641081527798843608">Совпадение тем</translation>
 <translation id="6412673304250309937">Сверяет URL со списком небезопасных сайтов в Chrome. Кроме того, если вы скачаете вредоносный файл или сайт попытается похитить ваш пароль, Chrome может отправить URL с образцами контента на проверку с помощью Безопасного просмотра.</translation>
 <translation id="6412931879992742813">Новое окно в режиме инкогнито</translation>
+<translation id="6413591858632097328">Будут удалены все данные и файлы cookie, которые сохранены сайтом <ph name="ORIGIN_NAME" /> и установленными им приложениями.</translation>
 <translation id="641469293210305670">Установка обновлений и приложений</translation>
 <translation id="6414888972213066896">Запрос на просмотр сайта отправлен вашему родителю</translation>
 <translation id="6415900369006735853">Подключайтесь к Интернету через телефон.</translation>
@@ -4823,7 +4829,6 @@
 <translation id="7530016656428373557">Скорость разрядки в ваттах</translation>
 <translation id="7531779363494549572">Откройте настройки устройства и выберите "Приложения и уведомления &gt; Уведомления".</translation>
 <translation id="7532009420053991888">Приложение "<ph name="LINUX_APP_NAME" />" не отвечает. Чтобы выйти из него, нажмите "Закрыть принудительно".</translation>
-<translation id="7536333565791380193">Расширенные настройки безопасности</translation>
 <translation id="7537451260744431038">Сайты не могут использовать файлы cookie, чтобы сделать работу в браузере более удобной, например запоминая товары в корзине или информацию о том, что вы вошли в аккаунт</translation>
 <translation id="7539856059004947393">Электронный Bluetooth-ключ</translation>
 <translation id="7540972813190816353">При проверке обновлений произошла ошибка: <ph name="ERROR" /></translation>
@@ -5064,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />Примечание.<ph name="END_BOLD" /> Система перезагрузится во время этого процесса.</translation>
 <translation id="7828731929332799387">Все сторонние файлы cookie и данные сайтов будут удалены. Продолжить?</translation>
 <translation id="7829298379596169484">Доступ к аудиовходу</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> не может проверить пароли. Убедитесь, что устройство подключено к Интернету.</translation>
 <translation id="7829877209233347340">Попросите родителя войти в систему, чтобы дать вам разрешение на добавление учебного аккаунта.</translation>
 <translation id="7830594666202422257">Подключить к Linux</translation>
 <translation id="7831491651892296503">Ошибка при настройке сети</translation>
@@ -5938,7 +5942,6 @@
 <translation id="8966870118594285808">Если вы случайно закрыли вкладку, откройте ее снова</translation>
 <translation id="8967866634928501045">Чтобы показать, нажмите Alt + Shift + A</translation>
 <translation id="8968766641738584599">Сохранить карту</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> не может проверить пароли. Повторите попытку через 24 часа или <ph name="BEGIN_LINK" />проверьте пароли в аккаунте Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Отключить</translation>
 <translation id="8972513834460200407">Уточните у администратора сети, не блокирует ли брандмауэр скачивание файлов с серверов Google.</translation>
 <translation id="8973557916016709913">Сбросить масштаб</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 36b0ce4..8639f624 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -1008,7 +1008,6 @@
 <translation id="2342740338116612727">පිටුසන් එක් කළා</translation>
 <translation id="2343747224442182863">මෙම පටිත්තට අවධානය යොමු කරන්න</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> වෙත පිටු 1ක්</translation>
-<translation id="2346953515226895098">SODA සේවය</translation>
 <translation id="2347644257713614136">අධ්‍යාපනය සඳහා Hangouts සහ Cast භාවිතය Google රහස්‍යතා ප්‍රතිපත්තිය මගින් පාලනය වේ.</translation>
 <translation id="2348176352564285430">යෙදුම: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">දත්ත පූරණය කිරීමේ දෝෂයකි</translation>
@@ -2284,7 +2283,6 @@
 <translation id="3971764089670057203">මෙම ආරක්‍ෂක යතුරේ ඇඟිලි සලකුණු</translation>
 <translation id="3973660817924297510">මුරපද පරීක්‍ෂා කෙරේ (<ph name="TOTAL_PASSWORDS" /> න් <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">ක්‍ෂේත්‍රය සඳහා සේවාදායකය සම්බන්ධ කිරීම අසාර්ථක විය</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. පසුව නැවත උත්සාහ කරන්න.</translation>
 <translation id="3976108569178263973">ලද හැකි මුද්‍රක නැත.</translation>
 <translation id="397703832102027365">අවසන්කරමින්...</translation>
 <translation id="3977886311744775419">ස්වයංක්‍රීය යාවත්කාලීන මෙම ජාල වර්ගයේ බාගන්නා නැති නමුත්, ඔබට යාවත්කාලීන සඳහා හස්තීයව පරීක්‍ෂා කළ හැක.</translation>
@@ -2585,7 +2583,6 @@
 <translation id="4421932782753506458">Fluffy</translation>
 <translation id="4423376891418188461">සැකසීම් ප්‍රතිසාධනය කරන්න</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ඔබේ පරිපාලකට ඔබ ඔබේ මුරපදය වෙනස් කිරීමට අවශ්‍යයි.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. පැය 24-කට පසුව නැවත උත්සාහ කරන්න.</translation>
 <translation id="4429030830601238961">මෙම දත්ත ඔබේ ආයතනයේ ආරක්‍ෂක ප්‍රතිපත්ති උල්ලංඝන කරන අතර, මෙය ඇලවිය නොහැක.</translation>
 <translation id="4430019312045809116">ශබ්ද තීව්‍රතාවය</translation>
 <translation id="4430369329743628066">පිටුසන එක් කරන ලදී</translation>
@@ -2598,7 +2595,6 @@
 <translation id="4441124369922430666">ඔබට පරිගණකය ආරම්භ වන විට ස්වයංක්‍රීයව මෙම යෙදුම ආරම්භ කිරීමට අවශ්‍යද?</translation>
 <translation id="4441147046941420429">ඉදිරියට යාමට, ඔබේ උපාංගයෙන් ඔබේ ආරක්‍ෂක යතුර ඉවත් කරන්න, පසුව යළි ඇතුළත් කර එය ස්පර්ශ කරන්න</translation>
 <translation id="444134486829715816">පුළුල් කරන්න...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබ ඔබේ Google ගිණුම මඟින් පුරන විට ඔබේ මුරපද පරීක්‍ෂා කළ හැක</translation>
 <translation id="4442424173763614572">DNS සෙවුම අසාර්ථකයි</translation>
 <translation id="4443536555189480885">&amp;උපකාර</translation>
 <translation id="4444304522807523469">ඔස්සේ සම්බන්ධ කර ඇති හෝ USB පෙදෙසි ජාලයේ ඇති ලේඛන පරිලෝකන යන්ත්‍ර ප්‍රවේශ කරන්න</translation>
@@ -2625,7 +2621,6 @@
 <translation id="4476659815936224889">මෙම කේතය ස්කෑන් කිරීමට, ඔබට ඔබේ දුරකථනය මත QR ස්කෑනර් යෙදුමක්, හෝ යම් කැමරා යෙදුම් භාවිත කළ හැක.</translation>
 <translation id="4477015793815781985">Ctrl, Alt, හෝ ⌘ ඇතුළත් කරන්න</translation>
 <translation id="4478664379124702289">ලින්ක් ලෙස සුරකින්න... (&amp;k)</translation>
-<translation id="4478777936860197922">සුරැකි මුරපද නැත. <ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබ ඔබේ මුරපද පරීක්‍ෂා කරන විට ඒවා පරීක්‍ෂා කළ හැක.</translation>
 <translation id="4479424953165245642">kiosk යෙදුම් කළමනාකරණය</translation>
 <translation id="4479639480957787382">ඊදර්නෙට්</translation>
 <translation id="4479877282574735775">අතථ්‍ය යන්ත්‍රය වින්‍යාස කිරීම. මෙයට විනාඩි කිහිපයක් ගත විය හැක.</translation>
@@ -2871,7 +2866,6 @@
 <translation id="4849517651082200438">ස්ථාපනය නොකරන්න</translation>
 <translation id="4850669014075537160">අනුචලනය</translation>
 <translation id="4850886885716139402">දසුන</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> ඔබ සමථයට පත් වූ මුරපදයක් සමඟ පුරන විට ඔබට දැනුම් දෙයි</translation>
 <translation id="4853020600495124913">&amp;නව කවුළුවක විවෘත කරන්න</translation>
 <translation id="4854317507773910281">අනුමැතිය සඳහා මාපිය ගිණුම තෝරන්න</translation>
 <translation id="485480310608090163">තවත් සැකසීම් සහ අවසර</translation>
@@ -4834,7 +4828,6 @@
 <translation id="7530016656428373557">විසර්ජන අනුපාතය වොට් මගින්</translation>
 <translation id="7531779363494549572">සැකසීම් &gt; යෙදුම් සහ දැනුම්දීම් &gt; දැනුම්දීම් වෙත යන්න.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ප්‍රතිචාර නොදක්වයි. යෙදුම වැසීමට "බලෙන් වසන්න" තෝරන්න.</translation>
-<translation id="7536333565791380193">උසස් ආරක්‍ෂාව</translation>
 <translation id="7537451260744431038">වෙබ් අඩවි ඔබේ බ්‍රවුස කිරීමේ අත්දැකීම වැඩිදියුණු කිරීමට, උදාහරණයක් වශයෙන්, ඔබව පුරනය කර තබා ගැනීමට හෝ ඔබේ සාප්පු සවාරි කරත්තයේ අයිතම මතක තබා ගැනීමට කුකී භාවිත නොකළ හැක</translation>
 <translation id="7539856059004947393">බ්ලූටූත් ආරක්ෂක යතුර</translation>
 <translation id="7540972813190816353">යාවත්කාලීන සඳහා පරීක්ෂා කරන අතරේ දෝෂයක් ඇති විය: <ph name="ERROR" /></translation>
@@ -5074,7 +5067,6 @@
     <ph name="BEGIN_BOLD" />සටහන:<ph name="END_BOLD" />  ක්‍රියාවලිය අතරතුරේදී පද්ධතිය නැවත ආරම්භ වනු ඇත.</translation>
 <translation id="7828731929332799387">මෙය තෙවන පාර්ශ්ව සන්දර්භ තුළ තිබෙන සියලුම කුකී සහ වෙබ් අඩවි දත්ත මකා දමයි. ඔබට ඉදිරියට යාමට අවශ්‍යද?</translation>
 <translation id="7829298379596169484">ශ්‍රව්‍ය ආදානයට ප්‍රවේශ වෙමින්</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. ඔබේ අන්තර්ජාල සම්බන්ධතාව පරීක්‍ෂා කිරීමට උත්සාහ කරන්න.</translation>
 <translation id="7829877209233347340">පාසල් ගිණුමක් එක් කිරීමට අවසර දීමට මාපියෙකුට පුරන්නට කියන්න</translation>
 <translation id="7830594666202422257">ලිනක්ස් වෙත සම්බන්ධ කරන්න</translation>
 <translation id="7831491651892296503">ජාලය වින්‍යාස කිරීමේ දෝෂයකි</translation>
@@ -5948,7 +5940,6 @@
 <translation id="8966870118594285808">ඔබ එය අහම්බෙන් වසා දැමුවේ නම්, පටිත්ත නැවත විවෘත කරන්න</translation>
 <translation id="8967866634928501045">පෙන්වීමට Alt Shift A ඔබන්න</translation>
 <translation id="8968766641738584599">කාඩ්පත සුරකින්න</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. පැය 24-කට පසු නැවත උත්සාහ කරන්න, නැති නම් <ph name="BEGIN_LINK" />ඔබේ Google ගිණුම තුළ මුරපද පරීක්‍ෂා කරන්න<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">ඔබේ ගිණිපවුර විසින් Google සේවාදායක වෙතින් බාගැනීම බාධා කර නොමැතිදැයි ජාල පරිපාලකගෙන් විමසන්න.</translation>
 <translation id="8973557916016709913">විශාලන මට්ටම ඉවත් කරන්න</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 7bf6ab6..0c9ebb8 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Boli pridané záložky</translation>
 <translation id="2343747224442182863">Označiť túto kartu</translation>
 <translation id="2345723121311404059">1 strana do tlačiarne <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Služba SODA</translation>
 <translation id="2347644257713614136">Používanie služieb Hangouts a Cast for Education sa riadi pravidlami ochrany súkromia spoločnosti Google.</translation>
 <translation id="2348176352564285430">Aplikácia: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Chyba pri načítavaní údajov</translation>
@@ -2285,7 +2284,6 @@
 <translation id="3971764089670057203">Odltačky prsta v tomto bezpečnostnom kľúči</translation>
 <translation id="3973660817924297510">Kontrolujú sa heslá (<ph name="CHECKED_PASSWORDS" /> z <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Kontaktovanie servera pre oblasť zlyhalo</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> nemôže skontrolovať heslá. Skúste to znova neskôr.</translation>
 <translation id="3976108569178263973">Nie sú k dispozícii žiadne tlačiarne.</translation>
 <translation id="397703832102027365">Prebieha dokončovanie...</translation>
 <translation id="3977886311744775419">Automatické aktualizácie sa nestiahnu v tomto type siete, ale dostupnosť aktualizácií môžete skontrolovať manuálne.</translation>
@@ -2586,7 +2584,6 @@
 <translation id="4421932782753506458">Páperový</translation>
 <translation id="4423376891418188461">Obnoviť nastavenia</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, váš správca vyžaduje zmenu hesla.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> nemôže skontrolovať heslá. Skúste to znova o 24 hodín.</translation>
 <translation id="4429030830601238961">Tieto údaje porušujú pravidlá zabezpečenia vašej organizácie a nie je možné ich prilepiť.</translation>
 <translation id="4430019312045809116">Hlasitosť</translation>
 <translation id="4430369329743628066">Záložka bola pridaná</translation>
@@ -2599,7 +2596,6 @@
 <translation id="4441124369922430666">Chcete automaticky spustiť túto aplikáciu po zapnutí zariadenia?</translation>
 <translation id="4441147046941420429">Ak chcete pokračovať, vyberte bezpečnostný kľúč zo svojho zariadenia, potom ho znova vložte a klepnite naň</translation>
 <translation id="444134486829715816">Rozbaliť...</translation>
-<translation id="4442329324652245220">Keď sa prihlásite pomocou účtu Google, <ph name="IDS_SHORT_PRODUCT_NAME" /> môže skontrolovať vaše heslá.</translation>
 <translation id="4442424173763614572">Vyhľadanie DNS zlyhalo</translation>
 <translation id="4443536555189480885">&amp;Pomocník</translation>
 <translation id="4444304522807523469">Mať prístup ku skenerom dokumentov pripojeným cez USB alebo v miestnej sieti</translation>
@@ -2626,7 +2622,6 @@
 <translation id="4476659815936224889">Tento kód môžete naskenovať pomocou aplikácie na skenovanie QR kódov vo svojom telefóne alebo pomocou niektorých aplikácií fotoaparátu.</translation>
 <translation id="4477015793815781985">Použite kláves Ctrl, Alt alebo ⌘</translation>
 <translation id="4478664379124702289">Uložiť &amp;odkaz ako...</translation>
-<translation id="4478777936860197922">Žiadne uložené heslá. <ph name="IDS_SHORT_PRODUCT_NAME" /> môže skontrolovať heslá, keď ich uložíte.</translation>
 <translation id="4479424953165245642">Spravovať aplikácie pre režim kiosku</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Konfiguruje sa virtuálny počítač. Môže to trvať niekoľko minút.</translation>
@@ -2872,7 +2867,6 @@
 <translation id="4849517651082200438">Neinštalovať</translation>
 <translation id="4850669014075537160">Posúvanie</translation>
 <translation id="4850886885716139402">Zobraziť</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> vás upozorní, keď sa prihlásite pomocou prelomeného hesla</translation>
 <translation id="4853020600495124913">Otvoriť v &amp;novom okne</translation>
 <translation id="4854317507773910281">Vyberte účet rodiča na schválenie</translation>
 <translation id="485480310608090163">Ďalšie nastavenia a povolenia</translation>
@@ -4836,7 +4830,6 @@
 <translation id="7530016656428373557">Vybíjanie batérie (W)</translation>
 <translation id="7531779363494549572">Prejdite do časti Nastavenia &gt; Aplikácie a upozornenia &gt; Upozornenia.</translation>
 <translation id="7532009420053991888">Aplikácia <ph name="LINUX_APP_NAME" /> nereaguje. Zavrite ju výberom možnosti Vynútiť zavretie.</translation>
-<translation id="7536333565791380193">Pokročilé zabezpečenie</translation>
 <translation id="7537451260744431038">Weby nemôžu pomocou súborov cookie zlepšovať vaše prostredie prehliadania, napríklad zabrániť odhláseniu alebo zapamätať si položky vo vašom nákupnom košíku</translation>
 <translation id="7539856059004947393">Bezpečnostný kľúč Bluetooth</translation>
 <translation id="7540972813190816353">Pri kontrole aktualizácií sa vyskytla chyba: <ph name="ERROR" /></translation>
@@ -5077,7 +5070,6 @@
     <ph name="BEGIN_BOLD" />Poznámka:<ph name="END_BOLD" />  Systém sa počas príslušného procesu reštartuje.</translation>
 <translation id="7828731929332799387">Týmto odstránite všetky súbory cookie a údaje webu dostupné v kontextoch tretích strán. Chcete pokračovať?</translation>
 <translation id="7829298379596169484">Pristupovanie k zvukovému vstupu</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> nemôže skontrolovať heslá. Skontrolujte internetové pripojenie.</translation>
 <translation id="7829877209233347340">Požiadajte rodiča, aby sa prihlásil a povolil pridanie školského účtu</translation>
 <translation id="7830594666202422257">Pripojiť k systému Linux</translation>
 <translation id="7831491651892296503">Chyba pri konfigurácii siete</translation>
@@ -5951,7 +5943,6 @@
 <translation id="8966870118594285808">Ak ste kartu omylom zavreli, znova ju otvorte</translation>
 <translation id="8967866634928501045">Zobrazíte pomocou klávesov Alt + Shift + A</translation>
 <translation id="8968766641738584599">Uložiť kartu</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> nemôže skontrolovať heslá. Skúste to znova o 24 hodín alebo <ph name="BEGIN_LINK" />skontrolujte heslá vo svojom účte Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Kontaktujte správcu siete a uistite sa, že brána firewall neblokuje sťahovanie súborov zo serverov Google.</translation>
 <translation id="8973557916016709913">Odstrániť úroveň priblíženia</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index f41fb57..8bc5edd 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Ime zaznamka</translation>
 <translation id="1124772482545689468">Uporabnik</translation>
 <translation id="1125550662859510761">Videti je <ph name="WIDTH" /> x <ph name="HEIGHT" /> (izvorna)</translation>
+<translation id="1126809382673880764">Ne ščiti pred nevarnimi spletnimi mesti, prenosi in razširitvami. Še vedno boste deležni zaščite Varnega brskanja, kjer je na voljo, v drugih Googlovih storitvah, kot sta Gmail in Iskanje Google.</translation>
 <translation id="1128109161498068552">Nobenemu spletnemu mestu ne dovoli uporabe sporočil sysex za dostop do naprav MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Urejanje iskalnika</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Znana omrežja</translation>
 <translation id="123578888592755962">Disk je poln</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">Prikaz predlogov osebnih podatkov pri vnašanju</translation>
 <translation id="1239594683407221485">Vsebino naprave raziščite v aplikaciji Datoteke.</translation>
 <translation id="124116460088058876">Več jezikov</translation>
 <translation id="1241753985463165747">Branje in spreminjanje vseh vaših podatkov na trenutnem spletnem mestu, če je zagnano</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Aktiviranje mobilnega omrežja</translation>
 <translation id="1407489512183974736">Na sredino in obrezano</translation>
 <translation id="1408504635543854729">Vsebino naprave raziščite z aplikacijo Datoteke. Vsebina je omejena glede na skrbnika in je ni mogoče spreminjati.</translation>
+<translation id="1408980562518920698">Upravljanje osebnih podatkov</translation>
 <translation id="1410197035576869800">Ikona aplikacije</translation>
 <translation id="1410616244180625362">Gostitelju <ph name="HOST" /> še naprej omogočaj dostop do kamere</translation>
 <translation id="1414648216875402825">Posodabljate na nestabilno različico <ph name="PRODUCT_NAME" />, ki še niso v celoti razvite. Prišlo bo do zrušitev in nepričakovanih napak. Nadaljujte previdno.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;Konzola JavaScript</translation>
 <translation id="1587907146729660231">S prstom se dotaknite gumba za vklop</translation>
+<translation id="1588200577109872591">Pametni vnosi</translation>
 <translation id="1588438908519853928">Običajen</translation>
 <translation id="158849752021629804">Potrebno je domače omrežje</translation>
 <translation id="1588870296199743671">Odpri povezavo z ...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Prijava kot</translation>
 <translation id="1880905663253319515">Ali želite izbrisati potrdilo »<ph name="CERTIFICATE_NAME" />«?</translation>
 <translation id="1884013283844450420">Omrežje <ph name="NETWORK_INDEX" /> od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, vzpostavitev povezave</translation>
+<translation id="1884705339276589024">Spreminjanje velikosti diska Linuxa</translation>
 <translation id="1886996562706621347">Dovoli spletnim mestom, da zahtevajo, da postanejo privzete rutine za obravnavo protokolov (priporočeno)</translation>
 <translation id="1887442540531652736">Napaka pri prijavi</translation>
 <translation id="1887597546629269384">Znova izgovorite »Hey Google«</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Preklapljate na kanal s starejšo različico brskalnika <ph name="PRODUCT_NAME" />. Sprememba kanala bo uporabljena, ko se različica kanala ujema z različico, ki je trenutno nameščena v vaši napravi.</translation>
 <translation id="197989455406964291">KDC ne podpira vrste šifriranja</translation>
 <translation id="1982354452682152483">Opis ni na voljo.</translation>
+<translation id="1984417487208496350">Brez zaščite (ni priporočljivo)</translation>
 <translation id="1987317783729300807">Računi</translation>
 <translation id="1989112275319619282">Brskanje</translation>
 <translation id="1990512225220753005">Ne prikaži bližnjic na tej strani</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Če želite obnoviti podatke računa, pojdite na: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Varnostna nastavitev sistema</translation>
 <translation id="2091887806945687916">Zvok</translation>
+<translation id="2096478741073211388">Predlogi osebnih podatkov vam pomagajo hitreje vnašati, tako da vam predlagajo ime, naslov ali telefonsko število, ko vnesete nekatere določene besede. Ti zasebni, prilagojeni predlogi v vašem računu so prikazani samo vam.</translation>
 <translation id="2096715839409389970">Izbriši piškotke drugih spletnih mest</translation>
 <translation id="2097372108957554726">Za registracijo novih naprav se morate prijaviti v Chrome</translation>
 <translation id="2099172618127234427">Omogočili boste funkcije za odpravljanje napak sistema Chrome OS, tako da boste nastavili sshd daemon in omogočili zagon prek pogonov USB.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Znova naloži &amp;okvir</translation>
 <translation id="2114896190328250491">Avtor fotografije: <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Odpri v aplikaciji <ph name="APP" /></translation>
+<translation id="2119461801241504254">Varno brskanje je vklopljeno in vas ščiti pred škodljivimi spletnimi mesti in prenosi</translation>
 <translation id="2120297377148151361">Dejavnost in interakcija</translation>
 <translation id="2120639962942052471">Blokirano je dovoljenje <ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Piškotki so blokirani}=1{Piškotki so blokirani, 1 izjema}one{Piškotki so blokirani, {COUNT} izjema}two{Piškotki so blokirani, {COUNT} izjemi}few{Piškotki so blokirani, {COUNT} izjeme}other{Piškotki so blokirani, {COUNT} izjem}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Dodani zaznamki</translation>
 <translation id="2343747224442182863">Izberi ta zavihek</translation>
 <translation id="2345723121311404059">1 stran s tiskalnikom <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Storitev SODA</translation>
 <translation id="2347644257713614136">Uporabo aplikacije Hangouts in razširitve Cast for Education ureja Googlov pravilnik o zasebnosti.</translation>
 <translation id="2348176352564285430">Aplikacija: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Napaka pri nalaganju podatkov</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">Znova se dotaknite varnostnega ključa, da potrdite ponastavitev. Vsi podatki, shranjeni na varnostnem ključu, vključno s kodo PIN, bodo izbrisani.</translation>
 <translation id="3518985090088779359">Sprejmi in nadaljuj</translation>
 <translation id="351952459507671940">Dodaj novi skupini</translation>
+<translation id="3521606918211282604">Spremeni velikost diska</translation>
 <translation id="3523642406908660543">Vprašaj, ko želi spletno mesto z vtičnikom dostopati do računalnika (priporočeno)</translation>
 <translation id="3524965460886318643">Izvoz dejavnosti</translation>
 <translation id="3526034519184079374">Podatkov spletnega mesta ni mogoče prebrati ali spremeniti</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Vnesite geslo, če želite omogočiti Smart Lock. Naslednjič bo telefon odklenil napravo <ph name="DEVICE_TYPE" />. Funkcijo Smart Lock lahko izklopite v nastavitvah.</translation>
 <translation id="3630132874740063857">Vaš telefon</translation>
 <translation id="3630995161997703415">Dodajte to spletno mesto na polico, da ga lahko kadar koli uporabljate</translation>
+<translation id="3633309367764744750">Vnaprej prenese podatke s strani, vključno s stranmi, ki jih še niste obiskali. Preneseni podatki morda vključujejo piškotke, če imate odobrene piškotke.</translation>
 <translation id="3634507049637220048">Omrežje <ph name="NETWORK_INDEX" /> od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, upravlja ga vaš skrbnik, podrobnosti</translation>
 <translation id="3635241501480133979">Ti podatki kršijo varnostne pravilnike organizacije in jih ni mogoče spustiti.</translation>
 <translation id="3635353578505343390">Pošiljanje povratnih informacij Googlu</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">Prstni odtisi v tem varnostnem ključu</translation>
 <translation id="3973660817924297510">Preverjanje gesel (<ph name="CHECKED_PASSWORDS" /> od <ph name="TOTAL_PASSWORDS" />) …</translation>
 <translation id="3975565978598857337">Vzpostavljanje stika s strežnikom območja ni uspelo</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne more preveriti vaših gesel. Poskusite pozneje.</translation>
 <translation id="3976108569178263973">Noben tiskalnik ni na voljo.</translation>
 <translation id="397703832102027365">Dokončanje ...</translation>
 <translation id="3977886311744775419">Samodejne posodobitve se ne prenesejo v tej vrsti omrežja, vendar lahko ročno preverite, ali so na voljo posodobitve.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">Puhek</translation>
 <translation id="4423376891418188461">Obnovi nastavitve</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, skrbnik zahteva, da spremenite geslo.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne more preveriti vaših gesel. Poskusite znova čez 24 ur.</translation>
 <translation id="4429030830601238961">Ti podatki kršijo varnostne pravilnike organizacije in jih ni mogoče prilepiti.</translation>
 <translation id="4430019312045809116">Glasnost</translation>
 <translation id="4430369329743628066">Zaznamek dodan</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">Ali želite samodejno zagnati to aplikacijo, ko se naprava vklopi?</translation>
 <translation id="4441147046941420429">Če želite nadaljevati, odstranite varnostni ključ iz naprave, nato ga znova vstavite in se ga dotaknite</translation>
 <translation id="444134486829715816">Razširi ...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> lahko preveri vaša gesla, ko se prijavite z računom Google</translation>
 <translation id="4442424173763614572">Iskanje DNS ni uspelo</translation>
 <translation id="4443536555189480885">&amp;Pomoč</translation>
 <translation id="4444304522807523469">Dostop do optičnih bralnikov, priklopljenih prek USB-ja ali povezanih v lokalno omrežje.</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">Če želite optično prebrati to kodo, lahko uporabite aplikacijo za optično branje kod QR v telefonu ali nekatere aplikacije fotoaparata.</translation>
 <translation id="4477015793815781985">Vključevati morajo Ctrl, Alt ali ⌘</translation>
 <translation id="4478664379124702289">Shrani povezav&amp;o kot ...</translation>
-<translation id="4478777936860197922">Ni shranjenih gesel. <ph name="IDS_SHORT_PRODUCT_NAME" /> lahko preveri gesla, če jih shranite.</translation>
 <translation id="4479424953165245642">Upravljaj aplikacije Kiosk</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Konfiguriranje navideznega računalnika. To lahko traja nekaj minut.</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">Ne namesti</translation>
 <translation id="4850669014075537160">Drsenje</translation>
 <translation id="4850886885716139402">Pogled</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> vas bo obvestil, če se prijavite z ogroženim geslom</translation>
 <translation id="4853020600495124913">Odpri v &amp;novem oknu</translation>
 <translation id="4854317507773910281">Izbira starševskega računa za odobritev</translation>
 <translation id="485480310608090163">Več nastavitev in dovoljenj</translation>
@@ -3939,6 +3943,7 @@
 <translation id="6298962879096096191">Uporaba Googla Play za nameščanje aplikacij za Android</translation>
 <translation id="630065524203833229">I&amp;zhod</translation>
 <translation id="6300718114348072351">Tiskalnika <ph name="PRINTER_NAME" /> ni bilo mogoče samodejno konfigurirati. Določite dodatne podrobnosti tiskalnika. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Predlogi osebnih podatkov</translation>
 <translation id="6305607932814307878">Globalni pravilnik:</translation>
 <translation id="6307990684951724544">Sistem je zaseden</translation>
 <translation id="6308493641021088955">Prijavo omogoča <ph name="EXTENSION_NAME" /></translation>
@@ -4017,6 +4022,7 @@
 <translation id="641081527798843608">Ujemanje zadeve</translation>
 <translation id="6412673304250309937">Preveri URL-je, tako da jih primerja s seznamom spletnih mest, ki niso varna, shranjenim v Chromu. Če vam spletno mesto poskusi ukrasti geslo ali ko prenašate škodljivo datoteko, lahko Chrome prav tako pošlje URL-je, vključno z delčki vsebine strani, Varnemu brskanju.</translation>
 <translation id="6412931879992742813">Novo okno brez beleženja zgodovine</translation>
+<translation id="6413591858632097328">S tem boste izbrisali vse podatke in piškotke, ki jih je shranilo spletno mesto <ph name="ORIGIN_NAME" /> s svojimi nameščenimi aplikacijami.</translation>
 <translation id="641469293210305670">Namestitev posodobitev in aplikacij</translation>
 <translation id="6414888972213066896">Starša si vprašal(-a), ali smeš obiskati to spletno mesto</translation>
 <translation id="6415900369006735853">Povezava z internetom prek telefona</translation>
@@ -4827,7 +4833,6 @@
 <translation id="7530016656428373557">Hitrost praznjenja v vatih</translation>
 <translation id="7531779363494549572">Odprite »Nastavitve &gt; Aplikacije in obvestila &gt; Obvestila«.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> se ne odziva. Če želite zapreti aplikacijo, izberite »Vsili zapiranje«.</translation>
-<translation id="7536333565791380193">Dodatna varnost</translation>
 <translation id="7537451260744431038">Spletna mesta ne smejo uporabljati piškotkov za izboljšanje izkušnje brskanja, in sicer tako, da bi na primer poskrbeli, da bi ostali prijavljeni, ali bi si zapomnili izdelke v nakupovalnem vozičku.</translation>
 <translation id="7539856059004947393">Varnostni ključ Bluetooth</translation>
 <translation id="7540972813190816353">Napaka pri preverjanju posodobitev: <ph name="ERROR" /></translation>
@@ -5068,7 +5073,6 @@
     <ph name="BEGIN_BOLD" />Opomba:<ph name="END_BOLD" /> sistem se bo med postopkom znova zagnal.</translation>
 <translation id="7828731929332799387">S tem bodo izbrisani vsi piškotki in podatki spletnih mest, na voljo v kontekstih drugih ponudnikov. Ali želite nadaljevati?</translation>
 <translation id="7829298379596169484">Dostopanje do zvočnega vhoda</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne more preveriti vaših gesel. Poskusite preveriti internetno povezavo.</translation>
 <translation id="7829877209233347340">Prosi starša, naj se prijavi, da odobri dovoljenje za dodajanje šolskega računa</translation>
 <translation id="7830594666202422257">Povezava z Linuxom</translation>
 <translation id="7831491651892296503">Napaka pri konfiguriranju omrežja</translation>
@@ -5943,7 +5947,6 @@
 <translation id="8966870118594285808">Znova odprite zavihek, če ste ga pomotoma zaprli</translation>
 <translation id="8967866634928501045">Pritisnite Alt + Shift + A, če želite pokazati</translation>
 <translation id="8968766641738584599">Shrani kartico</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne more preveriti vaših gesel. Poskusite znova čez 24 ur ali <ph name="BEGIN_LINK" />preverite gesla v računu Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Pri skrbniku omrežja se prepričajte, da požarni zid ne blokira prenosov iz Googlovih strežnikov.</translation>
 <translation id="8973557916016709913">Odstranitev stopnje povečave</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 47af638..07e15ca 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Emri i faqeshënuesit</translation>
 <translation id="1124772482545689468">Përdoruesi</translation>
 <translation id="1125550662859510761">Duket si <ph name="WIDTH" /> x <ph name="HEIGHT" /> (origjinale)</translation>
+<translation id="1126809382673880764">Nuk të mbron kundër faqeve të internetit, shkarkimeve dhe shtesave të rrezikshme. Do të vazhdosh të marrësh mbrojtje për "Shfletimin e sigurt", aty ku ofrohet, në shërbimet e tjera të Google, si Gmail dhe "Kërko".</translation>
 <translation id="1128109161498068552">Mos lejo asnjë faqe që të përdorë mesazhet ekskluzive të sistemit për qasjen te pajisjet MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Redakto motorin e kërkimit</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Rrjetet e njohura</translation>
 <translation id="123578888592755962">Disku është plot</translation>
 <translation id="1238191093934674082">VPN e hapur</translation>
+<translation id="1239439601391236986">Shfaq sugjerimet e informacionit personal të hyrjes</translation>
 <translation id="1239594683407221485">Eksploro përmbajtjen e pajisjes në aplikacionin "Skedarët".</translation>
 <translation id="124116460088058876">Gjuhë të tjera</translation>
 <translation id="1241753985463165747">Lexo dhe ndrysho të gjitha të dhënat në sajtin aktual të uebit kur të kërkohet</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Aktivizimi celular</translation>
 <translation id="1407489512183974736">Prerë në qendër</translation>
 <translation id="1408504635543854729">Eksploro përmbajtjen e pajisjes në aplikacionin "Skedarët". Përmbajtja është e kufizuar nga një administrator dhe nuk mund të modifikohet.</translation>
+<translation id="1408980562518920698">Menaxho informacionin personal</translation>
 <translation id="1410197035576869800">Ikona e aplikacionit</translation>
 <translation id="1410616244180625362">Vazhdo të lejosh që <ph name="HOST" /> të qaset te kamera jote</translation>
 <translation id="1414648216875402825">Po e përditëson me një version të paqëndrueshëm të <ph name="PRODUCT_NAME" /> që përmban funksione që janë në progres. Do të ndodhin ndërprerje aksidentale dhe gabime të papritura. Vazhdo me kujdes.</translation>
@@ -431,6 +434,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">Paneli i &amp;JavaScript</translation>
 <translation id="1587907146729660231">Prek butonin e energjisë me gisht</translation>
+<translation id="1588200577109872591">Hyrjet inteligjente</translation>
 <translation id="1588438908519853928">Normal</translation>
 <translation id="158849752021629804">Nevojitet rrjeti i shtëpisë</translation>
 <translation id="1588870296199743671">Hape lidhjen me...</translation>
@@ -666,6 +670,7 @@
 <translation id="1879000426787380528">Identifikohu si</translation>
 <translation id="1880905663253319515">Të fshihet certifikata "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="1884013283844450420">Rrjeti <ph name="NETWORK_INDEX" /> nga <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, lidhu</translation>
+<translation id="1884705339276589024">Ndrysho madhësinë e diskut të Linux</translation>
 <translation id="1886996562706621347">Lejo faqet të pyesin dhe të bëhen përpunues të parazgjedhur për protokollet (rekomandohet)</translation>
 <translation id="1887442540531652736">Gabim në identifikim</translation>
 <translation id="1887597546629269384">Thuaj përsëri "Hej Google"</translation>
@@ -735,6 +740,7 @@
 <translation id="1979280758666859181">Po kalon në një kanal me version më të vjetër të <ph name="PRODUCT_NAME" />. Ndryshimi i kanalit do të zbatohet kur versioni i tij të përputhet me versionin e instaluar aktualisht në pajisjen tënde.</translation>
 <translation id="197989455406964291">KDC nuk mbështet llojin e enkriptimit</translation>
 <translation id="1982354452682152483">Nuk ofrohet përshkrim.</translation>
+<translation id="1984417487208496350">Asnjë mbrojtje (nuk rekomandohet)</translation>
 <translation id="1987317783729300807">Llogaritë</translation>
 <translation id="1989112275319619282">Shfleto</translation>
 <translation id="1990512225220753005">Mos shfaq shkurtore në këtë faqe</translation>
@@ -804,6 +810,7 @@
 <translation id="2090165459409185032">Për të rikuperuar informacionet e llogarisë tënde, shko te: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Cilësimi i sigurisë së sistemit</translation>
 <translation id="2091887806945687916">Tingulli</translation>
+<translation id="2096478741073211388">Sugjerimet e informacionit personal të ndihmojnë të shkruash më shpejt duke sugjeruar emrin, adresën ose numrin e telefonit kur shkruan disa fjalë specifike. Vetëm ti shikon sugjerimet e tua private dhe të personalizuara për llogarinë tënde.</translation>
 <translation id="2096715839409389970">Pastro kukit e palëve të treta</translation>
 <translation id="2097372108957554726">Duhet të identifikohesh te Chrome për të regjistruar pajisjet e tua</translation>
 <translation id="2099172618127234427">Po aktivizon funksionet e korrigjimit të sistemit operativ Chrome që do të konfigurojnë sshd daemon dhe do të aktivizojnë fillimin nga disqet USB.</translation>
@@ -820,6 +827,7 @@
 <translation id="2114326799768592691">Ringarko &amp;kornizën</translation>
 <translation id="2114896190328250491">Fotografia nga <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Hape në <ph name="APP" /></translation>
+<translation id="2119461801241504254">"Shfletimi i sigurt" është i aktivizuar dhe po të mbron nga sajtet dhe shkarkimet e dëmshme</translation>
 <translation id="2120297377148151361">Aktiviteti dhe bashkëveprimet</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> është bllokuar</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Kukit janë bllokuar}=1{Kukit janë bllokuar, 1 përjashtim}other{Kukit janë bllokuar, {COUNT} përjashtime}}</translation>
@@ -1000,7 +1008,6 @@
 <translation id="2342740338116612727">Faqeshënuesit u shtuan</translation>
 <translation id="2343747224442182863">Fokuso këtë skedë</translation>
 <translation id="2345723121311404059">1 faqe te <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Shërbimi SODA</translation>
 <translation id="2347644257713614136">Përdorimi i Hangouts dhe i Cast rregullohet nga "Politika e privatësisë së Google".</translation>
 <translation id="2348176352564285430">Aplikacioni: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Gabim gjatë ngarkimit të të dhënave</translation>
@@ -1888,6 +1895,7 @@
 <translation id="3515983984924808886">Prek përsëri çelësin e sigurisë për të konfirmuar rivendosjen. Të gjitha informacionet e ruajtura në çelësin e sigurisë, duke përfshirë kodin e tij PIN, do të fshihen.</translation>
 <translation id="3518985090088779359">Prano dhe vazhdo</translation>
 <translation id="351952459507671940">Shto te grupi i ri</translation>
+<translation id="3521606918211282604">Ndrysho madhësinë e diskut</translation>
 <translation id="3523642406908660543">Pyet kur një sajt dëshiron të përdorë një përbërës shtesë për qasjen te kompjuteri yt (rekomandohet)</translation>
 <translation id="3524965460886318643">Eksporto aktivitetet</translation>
 <translation id="3526034519184079374">Të dhënat e sajtit nuk mund të lexohen ose të ndryshohen</translation>
@@ -1975,6 +1983,7 @@
 <translation id="3629631988386925734">Fut fjalëkalimin tënd për të aktivizuar Smart Lock. Herën tjetër, telefoni yt do të shkyçë pajisjen tënde <ph name="DEVICE_TYPE" />. Mund të çaktivizosh Smart Lock te "Cilësimet".</translation>
 <translation id="3630132874740063857">Telefoni yt</translation>
 <translation id="3630995161997703415">Shtoje këtë sajt te rafti yt për ta përdorur në çdo kohë</translation>
+<translation id="3633309367764744750">Merr paraprakisht informacion nga faqet, duke përfshirë faqet që nuk i ke vizituar ende. Informacioni i marrë mund të përfshijë kukit, nëse i lejoni kukit.</translation>
 <translation id="3634507049637220048">Rrjeti <ph name="NETWORK_INDEX" /> nga <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, menaxhuar nga administratori yt, detaje</translation>
 <translation id="3635241501480133979">Këto të dhëna shkelin politikat e sigurisë së organizatës sate dhe nuk mund të hidhen.</translation>
 <translation id="3635353578505343390">Dërgo komentet te Google</translation>
@@ -2273,7 +2282,6 @@
 <translation id="3971764089670057203">Gjurmët e gishtave në këtë çelës sigurie</translation>
 <translation id="3973660817924297510">Po kontrollon fjalëkalimet (<ph name="CHECKED_PASSWORDS" /> nga <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Kontaktimi me serverin për zonën e verifikimit dështoi</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> nuk mund t'i kontrollojë fjalëkalimet e tua. Provo përsëri më vonë.</translation>
 <translation id="3976108569178263973">Nuk u gjetën printerë.</translation>
 <translation id="397703832102027365">Po përfundon...</translation>
 <translation id="3977886311744775419">Përditësimet automatike nuk përditësohen në këtë lloj rrjeti, por mund të kontrollosh për përditësime manualisht.</translation>
@@ -2574,7 +2582,6 @@
 <translation id="4421932782753506458">Mace</translation>
 <translation id="4423376891418188461">Restauro cilësimet</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, administratori të kërkon që të ndryshosh fjalëkalimin.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> nuk mund t'i kontrollojë fjalëkalimet e tua. Provo përsëri pas 24 orësh.</translation>
 <translation id="4429030830601238961">Këto të dhëna shkelin politikat e sigurisë së organizatës sate dhe nuk mund të ngjiten.</translation>
 <translation id="4430019312045809116">Volumi</translation>
 <translation id="4430369329743628066">Faqeshënuesi u shtua</translation>
@@ -2587,7 +2594,6 @@
 <translation id="4441124369922430666">Dëshiron që ta nisësh automatikisht këtë aplikacion kur të ndizet kompjuteri?</translation>
 <translation id="4441147046941420429">Për të vazhduar, hiqe çelësin tënd të sigurisë nga pajisja jote dhe më pas fute përsëri dhe preke atë</translation>
 <translation id="444134486829715816">Zgjero...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> mund t'i kontrollojë fjalëkalimet e tua kur të identifikohesh me "Llogarinë tënde të Google".</translation>
 <translation id="4442424173763614572">Kërkimi i DNS-së dështoi</translation>
 <translation id="4443536555189480885">&amp;Ndihma</translation>
 <translation id="4444304522807523469">Qasu te skanerët e dokumenteve të lidhur me USB ose në rrjetin lokal</translation>
@@ -2614,7 +2620,6 @@
 <translation id="4476659815936224889">Për ta skanuar këtë kod, mund të përdorësh një aplikacion skaneri të kodeve QR në telefon ose disa aplikacione për kamera.</translation>
 <translation id="4477015793815781985">Përfshi Ctrl, Alt ose ⌘</translation>
 <translation id="4478664379124702289">Ruaje lidhj&amp;en si...</translation>
-<translation id="4478777936860197922">Nuk ka asnjë fjalëkalim të ruajtur. <ph name="IDS_SHORT_PRODUCT_NAME" /> mund t'i kontrollojë fjalëkalimet e tua kur ti i ruan ato.</translation>
 <translation id="4479424953165245642">Menaxho aplikacionet "kioskë"</translation>
 <translation id="4479639480957787382">Eternet</translation>
 <translation id="4479877282574735775">Pajisja virtuale po konfigurohet. Kjo mund të zgjasë disa minuta.</translation>
@@ -2860,7 +2865,6 @@
 <translation id="4849517651082200438">Mos e instalo</translation>
 <translation id="4850669014075537160">Lëvizja</translation>
 <translation id="4850886885716139402">Pamja</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> do të të njoftojë kur të identifikohesh me një fjalëkalim të komprometuar</translation>
 <translation id="4853020600495124913">Hape në dritare &amp;të re</translation>
 <translation id="4854317507773910281">Zgjidh llogarinë e prindit për miratimin</translation>
 <translation id="485480310608090163">Cilësime dhe leje të tjera</translation>
@@ -3934,6 +3938,7 @@
 <translation id="6298962879096096191">Përdor Google Play për të instaluar aplikacionet e Android</translation>
 <translation id="630065524203833229">D&amp;il</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> nuk mund të konfigurohej automatikisht. Përcakto detajet e përparuara të printerit. <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Sugjerimet e informacionit personal</translation>
 <translation id="6305607932814307878">Politika globale:</translation>
 <translation id="6307990684951724544">Sistemi është i zënë</translation>
 <translation id="6308493641021088955">Identifikimi ofrohet nga <ph name="EXTENSION_NAME" /></translation>
@@ -4012,6 +4017,7 @@
 <translation id="641081527798843608">Përputhja e subjektit</translation>
 <translation id="6412673304250309937">Kontrollon URL-të kundrejt një liste sajtesh të pasigurta të ruajtur në Chrome. Nëse një sajt përpiqet të vjedhë fjalëkalimin tënd, ose kur shkarkon një skedar të dëmshëm, Chrome mund t'i dërgojë po ashtu "Shfletimit të sigurt" URL-të, duke përfshirë pjesë të përmbajtjes së faqes.</translation>
 <translation id="6412931879992742813">Dritare e re e fshehtë</translation>
+<translation id="6413591858632097328">Kjo do të pastrojë të gjitha të dhënat dhe kukit e ruajtura nga <ph name="ORIGIN_NAME" /> dhe aplikacionet e tij të instaluara.</translation>
 <translation id="641469293210305670">Instalo përditësimet dhe aplikacionet</translation>
 <translation id="6414888972213066896">E pyete prindin tënd nëse nuk ka problem të vizitosh këtë sajt</translation>
 <translation id="6415900369006735853">Lidhu me internetin përmes telefonit</translation>
@@ -4822,7 +4828,6 @@
 <translation id="7530016656428373557">Norma e shkarkimit në vat</translation>
 <translation id="7531779363494549572">Shko te Cilësimet &gt; Aplikacionet dhe njoftimet &gt; Njoftimet.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> nuk po përgjigjet. Zgjidh "Ndalo me forcë" për ta mbyllur aplikacionin.</translation>
-<translation id="7536333565791380193">Siguria e përparuar</translation>
 <translation id="7537451260744431038">Sajtet nuk mund t'i përdorin kukit për të përmirësuar përvojën e shfletimit, për shembull për të të mbajtur të identifikuar ose për të kujtuar artikujt në karrocën e blerjeve</translation>
 <translation id="7539856059004947393">Çelësi i sigurisë me Bluetooth</translation>
 <translation id="7540972813190816353">Një gabim ndodhi gjatë kontrollit për përditësime: <ph name="ERROR" /></translation>
@@ -5062,7 +5067,6 @@
     <ph name="BEGIN_BOLD" />Shënim:<ph name="END_BOLD" />  Sistemi do të rifillojë punën gjatë procesit.</translation>
 <translation id="7828731929332799387">Kjo do të fshijë të gjitha kukit dhe të dhënat e sajtit që ofrohen në kontekstet e palëve të treta. Dëshiron të vazhdosh?</translation>
 <translation id="7829298379596169484">Po qaset në hyrjen e audios</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> nuk mund t'i kontrollojë fjalëkalimet e tua. Provo të kontrollosh lidhjen e internetit.</translation>
 <translation id="7829877209233347340">Kërkoji prindit që të të japë leje për të shtuar një llogari shkolle</translation>
 <translation id="7830594666202422257">Lidhe me Linux</translation>
 <translation id="7831491651892296503">Gabim gjatë konfigurimit të rrjetit</translation>
@@ -5936,7 +5940,6 @@
 <translation id="8966870118594285808">Hape përsëri një skedë nëse e ke mbyllur aksidentalisht</translation>
 <translation id="8967866634928501045">Shtyp Alt Shift A për të shfaqur</translation>
 <translation id="8968766641738584599">Ruaj kartën</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> nuk mund t'i kontrollojë fjalëkalimet e tua. Provo përsëri pas 24 orësh ose <ph name="BEGIN_LINK" />kontrollo fjalëkalimet në "Llogarinë tënde të Google"<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Largohu</translation>
 <translation id="8972513834460200407">Kontrollo me administratorin e rrjetit tënd për t'u siguruar se muri mbrojtës nuk po bllokon shkarkimet nga serverët e Google.</translation>
 <translation id="8973557916016709913">Hiq nivelin e zmadhimit</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index 53a6559..a81f3ae 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -1008,7 +1008,6 @@
 <translation id="2342740338116612727">Obeleživači su dodati</translation>
 <translation id="2343747224442182863">Stavi ovu karticu u fokus</translation>
 <translation id="2345723121311404059">1 stranica na štampaču <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Usluga SODA</translation>
 <translation id="2347644257713614136">Korišćenje usluga Hangouts i Cast for Education je regulisano Google politikom privatnosti.</translation>
 <translation id="2348176352564285430">Aplikacija: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Greška pri učitavanju podataka</translation>
@@ -2283,7 +2282,6 @@
 <translation id="3971764089670057203">Otisci prstiju na ovom bezbednosnom ključu</translation>
 <translation id="3973660817924297510">Lozinke se proveravaju (<ph name="CHECKED_PASSWORDS" /> od <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Povezivanje sa serverom za domen nije uspelo</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može da vam proverava lozinke. Probajte ponovo kasnije.</translation>
 <translation id="3976108569178263973">Nema dostupnih štampača.</translation>
 <translation id="397703832102027365">Dovršavanje...</translation>
 <translation id="3977886311744775419">Automatska ažuriranja se ne preuzimaju na ovom tipu mreže, ali možete ručno da proverite da li ima ažuriranja.</translation>
@@ -2584,7 +2582,6 @@
 <translation id="4421932782753506458">Pufnica</translation>
 <translation id="4423376891418188461">Vrati podešavanja</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, administrator zahteva da promenite lozinku.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može da vam proverava lozinke. Probajte ponovo za 24 sata.</translation>
 <translation id="4429030830601238961">Ovi podaci krše bezbednosne smernice organizacije i ne mogu da se nalepe.</translation>
 <translation id="4430019312045809116">Jačina zvuka</translation>
 <translation id="4430369329743628066">Obeleživač je dodat</translation>
@@ -2597,7 +2594,6 @@
 <translation id="4441124369922430666">Želite li da se ova aplikacija pokreće automatski kada uključite uređaj?</translation>
 <translation id="4441147046941420429">Da biste nastavili, uklonite bezbednosni ključ sa uređaja, pa ga ponovo umetnite i dodirnite</translation>
 <translation id="444134486829715816">Proširi...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> može da vam proverava lozinke kada se prijavite pomoću Google naloga.</translation>
 <translation id="4442424173763614572">DNS pretraga nije uspela</translation>
 <translation id="4443536555189480885">&amp;Help (Pomoć)</translation>
 <translation id="4444304522807523469">Pristup skenerima za dokumente priključenim preko USB-a ili na lokalnoj mreži</translation>
@@ -2624,7 +2620,6 @@
 <translation id="4476659815936224889">Da biste skenirali ovaj kôd, možete da koristite aplikaciju skenera QR kodova na telefonu ili neke aplikacije za kameru.</translation>
 <translation id="4477015793815781985">Koristite Ctrl, Alt ili ⌘</translation>
 <translation id="4478664379124702289">Sačuvaj li&amp;nk kao...</translation>
-<translation id="4478777936860197922">Nema sačuvanih lozinki. <ph name="IDS_SHORT_PRODUCT_NAME" /> može da proverava lozinke kada ih sačuvate.</translation>
 <translation id="4479424953165245642">Upravljaj kiosk aplikacijama</translation>
 <translation id="4479639480957787382">Eternet</translation>
 <translation id="4479877282574735775">Virtuelna mašina se konfiguruše. To može da potraje nekoliko minuta.</translation>
@@ -2870,7 +2865,6 @@
 <translation id="4849517651082200438">Ne instaliraj</translation>
 <translation id="4850669014075537160">Pomeranje</translation>
 <translation id="4850886885716139402">Prikaz</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> će vas obavestiti kada se prijavite pomoću ugrožene lozinke</translation>
 <translation id="4853020600495124913">Otvori u &amp;novom prozoru</translation>
 <translation id="4854317507773910281">Odaberi nalog roditelja za odobrenje</translation>
 <translation id="485480310608090163">Još podešavanja i dozvola</translation>
@@ -4835,7 +4829,6 @@
 <translation id="7530016656428373557">Nivo potrošnje u vatima</translation>
 <translation id="7531779363494549572">Idite u Podešavanja &gt; Aplikacije i obaveštenja &gt; Obaveštenja.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ne reaguje. Izaberite „Prinudno zatvori“ da biste zatvorili aplikaciju.</translation>
-<translation id="7536333565791380193">Napredna bezbednosna podešavanja</translation>
 <translation id="7537451260744431038">Sajtovi ne mogu da koriste kolačiće za poboljšanje doživljaja pregledanja, na primer, da biste ostali prijavljeni ili da bi stavke u vašoj korpi za kupovinu ostale sačuvane</translation>
 <translation id="7539856059004947393">Bluetooth bezbednosni ključ</translation>
 <translation id="7540972813190816353">Došlo je do greške pri proveri ažuriranja: <ph name="ERROR" /></translation>
@@ -5076,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />Napomena:<ph name="END_BOLD" /> Sistem će se restartovati tokom ovog procesa.</translation>
 <translation id="7828731929332799387">Ovim ćete izbrisati sve kolačiće i podatke o sajtovima koji su dostupni u kontekstima trećih strana. Želite li da nastavite?</translation>
 <translation id="7829298379596169484">Pristupa se audio ulazu</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može da vam proverava lozinke. Proverite internet vezu.</translation>
 <translation id="7829877209233347340">Zatraži od roditelja da se prijavi da bi dao dozvolu za dodavanje školskog naloga</translation>
 <translation id="7830594666202422257">Poveži sa Linux-om</translation>
 <translation id="7831491651892296503">Greška pri konfiguraciji mreže</translation>
@@ -5951,7 +5943,6 @@
 <translation id="8966870118594285808">Ponovo otvorite karticu ako ste je slučajno zatvorili</translation>
 <translation id="8967866634928501045">Za prikazivanje pritisnite Alt + Shift + A</translation>
 <translation id="8968766641738584599">Sačuvaj karticu</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ne može da vam proverava lozinke. Probajte ponovo posle 24 sata ili <ph name="BEGIN_LINK" />proverite lozinke na Google nalogu<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Proverite sa administratorom mreže da biste se uverili da zaštitni zid ne blokira preuzimanja sa Google servera.</translation>
 <translation id="8973557916016709913">Ukloni nivo zumiranja</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 72d6fc59f..d82ef99 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -1008,7 +1008,6 @@
 <translation id="2342740338116612727">Обележивачи су додати</translation>
 <translation id="2343747224442182863">Стави ову картицу у фокус</translation>
 <translation id="2345723121311404059">1 страница на штампачу <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Услуга SODA</translation>
 <translation id="2347644257713614136">Коришћење услуга Hangouts и Cast for Education је регулисано Google политиком приватности.</translation>
 <translation id="2348176352564285430">Апликација: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Грешка при учитавању података</translation>
@@ -2283,7 +2282,6 @@
 <translation id="3971764089670057203">Отисци прстију на овом безбедносном кључу</translation>
 <translation id="3973660817924297510">Лозинке се проверавају (<ph name="CHECKED_PASSWORDS" /> од <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Повезивање са сервером за домен није успело</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да вам проверава лозинке. Пробајте поново касније.</translation>
 <translation id="3976108569178263973">Нема доступних штампача.</translation>
 <translation id="397703832102027365">Довршавање...</translation>
 <translation id="3977886311744775419">Аутоматска ажурирања се не преузимају на овом типу мреже, али можете ручно да проверите да ли има ажурирања.</translation>
@@ -2584,7 +2582,6 @@
 <translation id="4421932782753506458">Пуфница</translation>
 <translation id="4423376891418188461">Врати подешавања</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, администратор захтева да промените лозинку.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да вам проверава лозинке. Пробајте поново за 24 сата.</translation>
 <translation id="4429030830601238961">Ови подаци крше безбедносне смернице организације и не могу да се налепе.</translation>
 <translation id="4430019312045809116">Јачина звука</translation>
 <translation id="4430369329743628066">Обележивач је додат</translation>
@@ -2597,7 +2594,6 @@
 <translation id="4441124369922430666">Желите ли да се ова апликација покреће аутоматски када укључите уређај?</translation>
 <translation id="4441147046941420429">Да бисте наставили, уклоните безбедносни кључ са уређаја, па га поново уметните и додирните</translation>
 <translation id="444134486829715816">Прошири...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> може да вам проверава лозинке када се пријавите помоћу Google налога.</translation>
 <translation id="4442424173763614572">DNS претрага није успела</translation>
 <translation id="4443536555189480885">&amp;Help (Помоћ)</translation>
 <translation id="4444304522807523469">Приступ скенерима за документе прикљученим преко USB-а или на локалној мрежи</translation>
@@ -2624,7 +2620,6 @@
 <translation id="4476659815936224889">Да бисте скенирали овај кôд, можете да користите апликацију скенера QR кодова на телефону или неке апликације за камеру.</translation>
 <translation id="4477015793815781985">Користите Ctrl, Alt или ⌘</translation>
 <translation id="4478664379124702289">Сачувај ли&amp;нк као...</translation>
-<translation id="4478777936860197922">Нема сачуваних лозинки. <ph name="IDS_SHORT_PRODUCT_NAME" /> може да проверава лозинке када их сачувате.</translation>
 <translation id="4479424953165245642">Управљај киоск апликацијама</translation>
 <translation id="4479639480957787382">Етернет</translation>
 <translation id="4479877282574735775">Виртуелна машина се конфигуруше. То може да потраје неколико минута.</translation>
@@ -2870,7 +2865,6 @@
 <translation id="4849517651082200438">Не инсталирај</translation>
 <translation id="4850669014075537160">Померање</translation>
 <translation id="4850886885716139402">Приказ</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> ће вас обавестити када се пријавите помоћу угрожене лозинке</translation>
 <translation id="4853020600495124913">Отвори у &amp;новом прозору</translation>
 <translation id="4854317507773910281">Одабери налог родитеља за одобрење</translation>
 <translation id="485480310608090163">Још подешавања и дозвола</translation>
@@ -4835,7 +4829,6 @@
 <translation id="7530016656428373557">Ниво потрошње у ватима</translation>
 <translation id="7531779363494549572">Идите у Подешавања &gt; Апликације и обавештења &gt; Обавештења.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> не реагује. Изаберите „Принудно затвори“ да бисте затворили апликацију.</translation>
-<translation id="7536333565791380193">Напредна безбедносна подешавања</translation>
 <translation id="7537451260744431038">Сајтови не могу да користе колачиће за побољшање доживљаја прегледања, на пример, да бисте остали пријављени или да би ставке у вашој корпи за куповину остале сачуване</translation>
 <translation id="7539856059004947393">Bluetooth безбедносни кључ</translation>
 <translation id="7540972813190816353">Дошло је до грешке при провери ажурирања: <ph name="ERROR" /></translation>
@@ -5076,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />Напомена:<ph name="END_BOLD" /> Систем ће се рестартовати током овог процеса.</translation>
 <translation id="7828731929332799387">Овим ћете избрисати све колачиће и податке о сајтовима који су доступни у контекстима трећих страна. Желите ли да наставите?</translation>
 <translation id="7829298379596169484">Приступа се аудио улазу</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да вам проверава лозинке. Проверите интернет везу.</translation>
 <translation id="7829877209233347340">Затражи од родитеља да се пријави да би дао дозволу за додавање школског налога</translation>
 <translation id="7830594666202422257">Повежи са Linux-ом</translation>
 <translation id="7831491651892296503">Грешка при конфигурацији мреже</translation>
@@ -5951,7 +5943,6 @@
 <translation id="8966870118594285808">Поново отворите картицу ако сте је случајно затворили</translation>
 <translation id="8967866634928501045">За приказивање притисните Alt + Shift + A</translation>
 <translation id="8968766641738584599">Сачувај картицу</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може да вам проверава лозинке. Пробајте поново после 24 сата или <ph name="BEGIN_LINK" />проверите лозинке на Google налогу<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Проверите са администратором мреже да бисте се уверили да заштитни зид не блокира преузимања са Google сервера.</translation>
 <translation id="8973557916016709913">Уклони ниво зумирања</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index ac13a589..fc070bb 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">Bokmärkets namn</translation>
 <translation id="1124772482545689468">Användare</translation>
 <translation id="1125550662859510761">Ser ut som <ph name="WIDTH" /> × <ph name="HEIGHT" /> (fast)</translation>
+<translation id="1126809382673880764">Skyddar inte mot farliga webbplatser, nedladdningar och tillägg. Du behåller skydd med Säker webbsökning, där denna funktion är tillgänglig, i andra tjänster från Google, till exempel Gmail och Sök.</translation>
 <translation id="1128109161498068552">Tillåt inte att några webbplatser använder systemexklusiva meddelanden för att komma åt MIDI-enheter</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">Redigera sökmotor</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">Kända nätverk</translation>
 <translation id="123578888592755962">Enheten är full</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">Visa personuppgiftsförslag vid inmatning</translation>
 <translation id="1239594683407221485">Utforska innehållet på den här enheten i appen Filer.</translation>
 <translation id="124116460088058876">Fler språk</translation>
 <translation id="1241753985463165747">Läsa och ändra all din data på den aktuella webbplatsen när den anropas</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">Aktivering av mobilnätverk</translation>
 <translation id="1407489512183974736">Centrera och beskär</translation>
 <translation id="1408504635543854729">Utforska innehållet på den här enheten i appen Filer. Innehållet har skrivskyddats av en administratör och kan inte ändras.</translation>
+<translation id="1408980562518920698">Hantera personliga uppgifter</translation>
 <translation id="1410197035576869800">Appikon</translation>
 <translation id="1410616244180625362">Fortsätt tillåta att <ph name="HOST" /> använder kameran</translation>
 <translation id="1414648216875402825">Du uppdaterar till en instabil version av <ph name="PRODUCT_NAME" /> som innehåller funktioner som inte är klara. Du kommer att råka ut för kraschar och oväntade buggar. Var försiktig.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript-konsol</translation>
 <translation id="1587907146729660231">Sätt fingret på strömbrytaren</translation>
+<translation id="1588200577109872591">Smart inmatning</translation>
 <translation id="1588438908519853928">Normal</translation>
 <translation id="158849752021629804">Behöver hemnätverk</translation>
 <translation id="1588870296199743671">Öppna länk med ...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">Logga in som</translation>
 <translation id="1880905663253319515">Vill du ta bort certifikatet <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="1884013283844450420">Nätverk <ph name="NETWORK_INDEX" /> av <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, anslut</translation>
+<translation id="1884705339276589024">Ändra storlek på Linux-disken</translation>
 <translation id="1886996562706621347">Tillåt att webbplatser begär att bli standardhanterare för protokoll (rekommenderas)</translation>
 <translation id="1887442540531652736">Inloggningsfel</translation>
 <translation id="1887597546629269384">Säg ”Hey Google” igen</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">Du byter till en kanal med en äldre version av <ph name="PRODUCT_NAME" />. Kanalen byts när kanalversionen matchar den version som är installerad på din enhet.</translation>
 <translation id="197989455406964291">KDC har inte stöd för krypteringstypen</translation>
 <translation id="1982354452682152483">Ingen beskrivning är tillgänglig.</translation>
+<translation id="1984417487208496350">Inget skydd (rekommenderas inte)</translation>
 <translation id="1987317783729300807">Konton</translation>
 <translation id="1989112275319619282">Bläddra</translation>
 <translation id="1990512225220753005">Visa inte genvägar på den här sidan</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">Återställ kontoinformationen på google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Systemets säkerhetsinställning</translation>
 <translation id="2091887806945687916">Ljud</translation>
+<translation id="2096478741073211388">Med personuppgiftsförslag kan du skriva snabbare genom att ditt namn, din adress eller ditt telefonnummer ges som förslag när du skriver vissa ord. Det är bara du som ser de privata, anpassade förslagen för kontot.</translation>
 <translation id="2096715839409389970">Rensa cookies från tredje part</translation>
 <translation id="2097372108957554726">Du måste logga in i Chrome för att kunna registrera nya enheter</translation>
 <translation id="2099172618127234427">Du aktiverar felsökningsfunktioner i Chrome OS som konfigurerar sshd daemon och aktiverar start från USB-enheter.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">Läs in &amp;ram igen</translation>
 <translation id="2114896190328250491">Foto taget av <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Öppna i <ph name="APP" /></translation>
+<translation id="2119461801241504254">Säker webbsökning är aktiverat och skyddar dig från skadliga webbplatser och nedladdningar</translation>
 <translation id="2120297377148151361">Aktivitet och interaktion</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" /> har blockerats</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Cookies blockeras}=1{Cookies blockeras, 1 undantag}other{Cookies blockeras, {COUNT} undantag}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">Bokmärkena har lagts till</translation>
 <translation id="2343747224442182863">Fokusera på den här fliken</translation>
 <translation id="2345723121311404059">1 sida till <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA-tjänst</translation>
 <translation id="2347644257713614136">Användning av Hangouts och Cast for Education regleras av Googles sekretesspolicy.</translation>
 <translation id="2348176352564285430">App: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Fel vid inläsning av data</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">Tryck på säkerhetsnyckeln igen för att bekräfta återställningen. All information som lagras på säkerhetsnyckeln, inklusive dess pinkod, raderas.</translation>
 <translation id="3518985090088779359">Godkänn och fortsätt</translation>
 <translation id="351952459507671940">Lägg till i ny grupp</translation>
+<translation id="3521606918211282604">Ändra diskstorlek</translation>
 <translation id="3523642406908660543">Fråga om en webbplats försöker använda en plugin för att få åtkomst till datorn (rekommenderas)</translation>
 <translation id="3524965460886318643">Exportera aktivitet</translation>
 <translation id="3526034519184079374">Kan inte läsa eller ändra webbplatsens data</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Aktivera Smart Lock genom att ange lösenordet. Nästa gång låser din mobil upp <ph name="DEVICE_TYPE" />. Du kan inaktivera Smart Lock i inställningarna.</translation>
 <translation id="3630132874740063857">Din mobil</translation>
 <translation id="3630995161997703415">Lägg till den här webbplatsen på hyllan och använd den när som helst</translation>
+<translation id="3633309367764744750">Hämtar information i förväg från sidor, även sidor som du inte har besökt ännu. Informationen som hämtas kan innehålla cookies om du tillåter sådana.</translation>
 <translation id="3634507049637220048">Nätverk <ph name="NETWORK_INDEX" /> av <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, hanteras av administratören, information</translation>
 <translation id="3635241501480133979">Denna data utgör ett intrång mot organisationens säkerhetspolicy och kan inte dras in.</translation>
 <translation id="3635353578505343390">Skicka feedback till Google</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">Fingeravtryck på den här säkerhetsnyckeln</translation>
 <translation id="3973660817924297510">Kontrollerar lösenord (<ph name="CHECKED_PASSWORDS" /> av <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Det gick inte att kontakta servern för sfären</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan inte kontrollera dina lösenord. Försök igen senare.</translation>
 <translation id="3976108569178263973">Inga skrivare är tillgängliga.</translation>
 <translation id="397703832102027365">Slutför ...</translation>
 <translation id="3977886311744775419">Automatiska uppdateringar laddas inte ned med den här nätverkstypen, men du kan söka efter uppdateringar manuellt.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">Misse</translation>
 <translation id="4423376891418188461">Återställ inställningar</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, administratören kräver att du ändrar ditt lösenord.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan inte kontrollera dina lösenord. Försök igen om ett dygn.</translation>
 <translation id="4429030830601238961">Denna data utgör ett intrång mot organisationens säkerhetspolicy och kan inte klistras in.</translation>
 <translation id="4430019312045809116">Volym</translation>
 <translation id="4430369329743628066">Ett bokmärke har lagts till</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">Vill du starta denna app automatiskt när maskinen slås på?</translation>
 <translation id="4441147046941420429">Fortsätt genom att ta bort säkerhetsnyckeln från enheten, sätta i den igen och trycka på den</translation>
 <translation id="444134486829715816">Expandera..</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan kontrollera dina lösenord när du loggar in med Google-kontot</translation>
 <translation id="4442424173763614572">DNS-sökning misslyckades</translation>
 <translation id="4443536555189480885">&amp;Hjälp</translation>
 <translation id="4444304522807523469">Åtkomst till dokumentskannrar som är anslutna via USB eller i det lokala nätverket</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">Du kan skanna koden på telefonen med en app för att skanna QR-koder eller med vissa kameraappar.</translation>
 <translation id="4477015793815781985">Använd Ctrl, Alt eller ⌘</translation>
 <translation id="4478664379124702289">Spara l&amp;änk som...</translation>
-<translation id="4478777936860197922">Inga sparade lösenord. <ph name="IDS_SHORT_PRODUCT_NAME" /> kan bara kontrollera dina lösenord om du sparar dem.</translation>
 <translation id="4479424953165245642">Hantera kioskappar</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Den virtuella maskinen konfigureras. Det kan ta några minuter.</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">Installera inte</translation>
 <translation id="4850669014075537160">Rullning</translation>
 <translation id="4850886885716139402">Visa</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> aviserar dig om du loggar in med ett utsatt lösenord</translation>
 <translation id="4853020600495124913">Öppna i &amp;nytt fönster</translation>
 <translation id="4854317507773910281">Välj vilket föräldrakonto som ska godkänna</translation>
 <translation id="485480310608090163">Fler inställningar och behörigheter</translation>
@@ -3937,6 +3941,7 @@
 <translation id="6298962879096096191">Installera appar med hjälp av Google Play</translation>
 <translation id="630065524203833229">&amp;Avsluta</translation>
 <translation id="6300718114348072351">Det gick inte att konfigurera <ph name="PRINTER_NAME" /> automatiskt. Ange avancerade utskriftsalternativ. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">Personuppgiftsförslag</translation>
 <translation id="6305607932814307878">Global policy:</translation>
 <translation id="6307990684951724544">Systemet är upptaget</translation>
 <translation id="6308493641021088955">Inloggning tillhandahålls av <ph name="EXTENSION_NAME" /></translation>
@@ -4015,6 +4020,7 @@
 <translation id="641081527798843608">Ämnesmatchning</translation>
 <translation id="6412673304250309937">Kontrollera webbadresser mot en lista över osäkra webbplatser i Chrome. Om du utsätts för försök att kapa ditt lösenord på en webbplats eller om du laddar ned en skadlig fil kan webbadresserna skickas från Chrome till Säker webbsökning tillsammans med delar av sidinnehållet.</translation>
 <translation id="6412931879992742813">Nytt inkognitofönster</translation>
+<translation id="6413591858632097328">All data och alla cookies som har sparats av <ph name="ORIGIN_NAME" /> och tillhörande installerade appar rensas.</translation>
 <translation id="641469293210305670">Installera uppdateringar och appar</translation>
 <translation id="6414888972213066896">Du har frågat en förälder om lov att besöka den här webbplatsen.</translation>
 <translation id="6415900369006735853">Anslut till internet via mobilen</translation>
@@ -4825,7 +4831,6 @@
 <translation id="7530016656428373557">Urladdningstakt i watt</translation>
 <translation id="7531779363494549572">Öppna Inställningar &gt; Appar och aviseringar &gt; Aviseringar.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> svarar inte. Stäng appen med Tvångsavsluta.</translation>
-<translation id="7536333565791380193">Avancerad säkerhet</translation>
 <translation id="7537451260744431038">Webbplatser får inte förbättra surfupplevelsen med hjälp av cookies, till exempel genom att låta dig förbli inloggad eller spara vad du har lagt till i kundvagnen</translation>
 <translation id="7539856059004947393">Bluetooth-säkerhetsnyckel</translation>
 <translation id="7540972813190816353">Det gick inte att söka efter uppdateringar: <ph name="ERROR" /></translation>
@@ -5066,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Obs!<ph name="END_BOLD" /> Systemet startas om under aktiveringen.</translation>
 <translation id="7828731929332799387">Med denna åtgärd raderas alla cookies och webbplatsuppgifter som är tillgängliga i sammanhang där en tredje part är inblandad. Vill du fortsätta?</translation>
 <translation id="7829298379596169484">Får åtkomst till ljudindata</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan inte kontrollera dina lösenord. Testa att kontrollera internetanslutningen.</translation>
 <translation id="7829877209233347340">Be en förälder att logga in och ge behörighet att lägga till ett skolkonto</translation>
 <translation id="7830594666202422257">Anslut till Linux</translation>
 <translation id="7831491651892296503">Fel i nätverkskonfigurationen</translation>
@@ -5941,7 +5945,6 @@
 <translation id="8966870118594285808">Öppna en flik på nytt om du stängde den av misstag</translation>
 <translation id="8967866634928501045">Visa med alt+skift+A</translation>
 <translation id="8968766641738584599">Spara kortet</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> kan inte kontrollera dina lösenord. Försök igen om 24 timmar eller <ph name="BEGIN_LINK" />kontrollera lösenorden i ditt Google-konto<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Kontrollera med nätverksadministratören att brandväggen inte blockerar nedladdning från Googles servrar.</translation>
 <translation id="8973557916016709913">Ta bort zoomnivå</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 6d6f183..e21d470 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -810,7 +810,7 @@
 <translation id="2090165459409185032">Ili kurejesha maelezo ya akaunti yako, nenda kwenye: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">Mpangilio wa usalama wa mfumo</translation>
 <translation id="2091887806945687916">Sauti</translation>
-<translation id="2096478741073211388">Mapendekezo ya taarifa binafsi yanakusaidia uandike kwa haraka kwa kupendekeza jina, anwani au nambari yako ya simu unapoandika baadhi ya maneno mahususi. Ni wewe tu unayeweza kuona mapendekezo ya kibinafsi yaliyowekewa mapendeleo katika akaunti yako.</translation>
+<translation id="2096478741073211388">Mapendekezo ya taarifa binafsi yanakusaidia uandike kwa haraka kwa kupendekeza jina, anwani au nambari yako ya simu unapoandika baadhi ya maneno mahususi. Ni wewe tu unayeweza kuona mapendekezo ya binafsi yaliyo mahususi katika akaunti yako.</translation>
 <translation id="2096715839409389970">Futa vidakuzi vya watu au kampuni nyingine</translation>
 <translation id="2097372108957554726">Unahitaji kuingia katika akaunti kwenye Chrome ili usajili vifaa vipya</translation>
 <translation id="2099172618127234427">Unawasha vipengele vya kutatua vya Chrome OS ambavyo vitasanidi sshd daemon na kuwezesha uwashaji kutoka kwenye hifadhi za USB.</translation>
@@ -827,7 +827,7 @@
 <translation id="2114326799768592691">Pakia Fremu Upya</translation>
 <translation id="2114896190328250491">Picha ya <ph name="NAME" /></translation>
 <translation id="2119349053129246860">Fungua katika <ph name="APP" /></translation>
-<translation id="2119461801241504254">Kipengele cha Kuvinjari Salama kimewashwa na kinakulinda dhidi ya tovuti na faili hatari zinazopakuliwa</translation>
+<translation id="2119461801241504254">Kipengele cha Kuvinjari Salama kimewashwa na kinakulinda dhidi ya tovuti na vipakuliwa hatari</translation>
 <translation id="2120297377148151361">Shughuli na ushirikiano</translation>
 <translation id="2120639962942052471">Umezuia <ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{Vidakuzi vimezuiwa}=1{Vidakuzi vimezuiwa, ila kimoja}other{Vidakuzi vimezuiwa, ila {COUNT}}}</translation>
@@ -1008,7 +1008,6 @@
 <translation id="2342740338116612727">Imeongeza alamisho</translation>
 <translation id="2343747224442182863">Lenga Kichupo Hiki</translation>
 <translation id="2345723121311404059">Ukurasa 1 kwa <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Huduma ya SODA</translation>
 <translation id="2347644257713614136">Matumizi ya Hangouts na Cast for Education yanasimamiwa na Sera ya Faragha ya Google.</translation>
 <translation id="2348176352564285430">Programu: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Hitilafu ya kupakia data</translation>
@@ -1856,7 +1855,7 @@
 <translation id="3468999815377931311">Simu ya Android</translation>
 <translation id="3470442499439619530">Ondoa Mtumiaji Huyu</translation>
 <translation id="3471876058939596279">Milango ya USB Aina ya C na HDMI haiwezi kutumika kuonyesha video kwa wakati mmoja. Tumia mlango tofauti wa video.</translation>
-<translation id="3473241910002674503">Nenda kwenye kitufe cha mwanzo, nyuma na ubadilishe programu ukitumia vitufe katika hali ya kompyuta kibao.</translation>
+<translation id="3473241910002674503">Nenda kwenye kifungua programu, rudi nyuma na ubadilishe programu ukitumia vitufe katika hali ya kompyuta kibao.</translation>
 <translation id="3473479545200714844">Kikuza skrini</translation>
 <translation id="3475843873335999118">Samahani, alama yako ya kidole bado haijatambuliwa. Tafadhali weka nenosiri lako.</translation>
 <translation id="3476303763173086583">Tuma data ya matumizi na uchunguzi. Tusaidie kuboresha jinsi mtoto wako anavyotumia Android kwa kutuma kiotomatiki data ya uchunguzi na matumizi ya kifaa na programu kwa Google. Hatutatumia data hii kumtambulisha mtoto wako na itatusaidia kuboresha uthabiti wa programu na mfumo na maboresho mengine. Baadhi ya maelezo yaliyojumlishwa pia yatasaidia programu za Google na washirika kama vile wasanidi programu za Android. <ph name="BEGIN_LINK1" />Mipangilio<ph name="END_LINK1" /> hii inatekelezwa na mmiliki. Mmiliki anaweza kuamua kutuma data ya uchunguzi na matumizi ya kifaa hiki kwa Google. Ikiwa umewasha mipangilio ya historia ya Shughuli za ziada kwenye Wavuti na Programu kwa ajili ya mtoto wako, data hii inaweza kuhifadhiwa kwenye akaunti yake ya Google. <ph name="BEGIN_LINK2" />Pata maelezo zaidi<ph name="END_LINK2" /></translation>
@@ -2283,7 +2282,6 @@
 <translation id="3971764089670057203">Alama za vidole zilizo kwenye ufunguo huu wa usalama</translation>
 <translation id="3973660817924297510">Inakagua manenosiri (<ph name="CHECKED_PASSWORDS" /> kati ya <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Imeshindwa kuwasiliana na sehemu kwenye seva</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> imeshindwa kukagua manenosiri yako. Jaribu tena baadaye.</translation>
 <translation id="3976108569178263973">Hakuna printa zinazopatikana.</translation>
 <translation id="397703832102027365">Inahitimisha</translation>
 <translation id="3977886311744775419">Masasisho ya kiotomatiki hayawezi kupakuliwa kwenye aina hii ya mtandao lakini unaweza kuangalia masasisho mwenyewe.</translation>
@@ -2582,7 +2580,6 @@
 <translation id="4421932782753506458">Kibonge</translation>
 <translation id="4423376891418188461">Rejesha Mipangilio</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, msimamizi wako anakuhitaji ubadilishe nenosiri lako.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> imeshindwa kukagua manenosiri yako. Jaribu tena baada ya saa 24.</translation>
 <translation id="4429030830601238961">Data hii inakiuka sera za usalama za shirika lako na haiwezi kubandikwa.</translation>
 <translation id="4430019312045809116">Kiwango</translation>
 <translation id="4430369329743628066">Alamisho imeongezwa</translation>
@@ -2595,7 +2592,6 @@
 <translation id="4441124369922430666">Je, ungependa kuanzisha programu hii kiotomatiki mashine itakapowashwa?</translation>
 <translation id="4441147046941420429">Ili uendelee, ondoa ufunguo wako wa usalama kwenye kifaa chako, kisha uuweke tena na uuguse.</translation>
 <translation id="444134486829715816">Panua...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> inaweza kukagua manenosiri yako unapoingia ukitumia Akaunti yako ya Google</translation>
 <translation id="4442424173763614572">Mwonekano wa DNS umeshindikana</translation>
 <translation id="4443536555189480885">&amp;Msaada</translation>
 <translation id="4444304522807523469">Fikia vichunguzi vya hati vilivyoambatishwa kupitia USB au kwenye mtandao wa karibu</translation>
@@ -2622,7 +2618,6 @@
 <translation id="4476659815936224889">Ili uchanganue msimbo huu, unaweza kutumia programu ya kichanganuzi cha QR kwenye simu yako au baadhi ya programu za kamera.</translation>
 <translation id="4477015793815781985">Jumuisha Ctrl, Alt, au ⌘</translation>
 <translation id="4478664379124702289">Hifadhi &amp;Kiungo Kama...</translation>
-<translation id="4478777936860197922">Hakuna manenosiri yaliyohifadhiwa. <ph name="IDS_SHORT_PRODUCT_NAME" /> inaweza kukagua manenosiri yako ukiyahifadhi.</translation>
 <translation id="4479424953165245642">Programu za kioski zinazodhibitiwa</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Inaweka mipangilio ya mashine dhahania. Hatua hii inaweza kuchukua dakika kadhaa.</translation>
@@ -2868,7 +2863,6 @@
 <translation id="4849517651082200438">Usisakinishe</translation>
 <translation id="4850669014075537160">Kusogeza</translation>
 <translation id="4850886885716139402">Mwonekano</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> itakuarifu ukiingia katika akaunti ukitumia nenosiri lililoathiriwa</translation>
 <translation id="4853020600495124913">Fungua katika &amp;dirisha jipya</translation>
 <translation id="4854317507773910281">Chagua akaunti ya mzazi ya kuidhinisha</translation>
 <translation id="485480310608090163">Mipangilio na ruhusa zaidi</translation>
@@ -4832,7 +4826,6 @@
 <translation id="7530016656428373557">Kiwango cha Kutoa katika kipimo cha Wati</translation>
 <translation id="7531779363494549572">Nenda kwenye Mipangilio &gt; Programu na arifa &gt; Arifa.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> haifanyi kazi. Chagua "Lazimisha kufunga" ili ufunge programu.</translation>
-<translation id="7536333565791380193">Usalama wa hali ya juu</translation>
 <translation id="7537451260744431038">Tovuti haziwezi kutumia vidakuzi ili kuboresha hali yako ya kuvinjari, kwa mfano, ili kufanya ubaki ukiwa umeingia katika akaunti au kukumbuka bidhaa zilizo kwenye kikapu chako cha ununuzi</translation>
 <translation id="7539856059004947393">Ufunguo wa usalama wa Bluetooth</translation>
 <translation id="7540972813190816353">Hitilafu imetokea wakati wa kutafuta masasisho: <ph name="ERROR" /></translation>
@@ -5075,7 +5068,6 @@
     <ph name="BEGIN_BOLD" />Kumbuka:<ph name="END_BOLD" /> Mfumo utazima na kuwaka tena wakati wa mchakato huu.</translation>
 <translation id="7828731929332799387">Hatua hii itafuta vidakuzi na data yote ya tovuti inayopatikana katika muktadha wa watu au kampuni nyingine. Je, ungependa kuendelea?</translation>
 <translation id="7829298379596169484">Inafikia vifaa vya kuingiza sauti</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> imeshindwa kukagua manenosiri yako. Jaribu kuangalia muunganisho wako wa Intaneti.</translation>
 <translation id="7829877209233347340">Mweleze mzazi aingie katika akaunti ili akupe ruhusa ya kuweka akaunti ya shuleni</translation>
 <translation id="7830594666202422257">Unganisha kwenye Linux</translation>
 <translation id="7831491651892296503">Hitilafu imetokea wakati wa kuweka mipangilio ya mtandao</translation>
@@ -5293,7 +5285,7 @@
 <translation id="8107015733319732394">Inasakinisha duka la Google Play kwenye <ph name="DEVICE_TYPE" />. Huenda hatua hii ikachukua dakika chache.</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{Hakuna vidakuzi vya mtu au kampuni nyingine}=1{Imezuia kidakuzi kimoja cha mtu au kampuni nyingine}other{Imezuia vidakuzi # vya mtu na kampuni nyingine}}</translation>
 <translation id="810875025413331850">Haikupata vifaa vyovyote vilivyo karibu.</translation>
-<translation id="8114199541033039755">Nenda kwenye kitufe cha mwanzo, nyuma na ubadilishe programu ukitumia vitufe katika hali ya kompyuta kibao. Huwashwa wakati ChromeVox au kipengele cha Mibofyo ya kiotomatiki kimewashwa.</translation>
+<translation id="8114199541033039755">Nenda kwenye kifungua programu, rudi nyuma na ubadilishe programu ukitumia vitufe katika hali ya kompyuta kibao. Huwashwa wakati ChromeVox au kipengele cha Mibofyo ya kiotomatiki kimewashwa.</translation>
 <translation id="8114875720387900039">Gawanya kimlalo</translation>
 <translation id="8116972784401310538">Kidhi&amp;biti alamisho</translation>
 <translation id="8117620576188476503">Dhibiti miunganisho, masasisho na mipangilio ukitumia treya ya hali. Ili kufikia kwa kutumia kibodi, bonyeza Alt + Shift + S.</translation>
@@ -5585,7 +5577,7 @@
 <translation id="851263357009351303">Ruhusu <ph name="HOST" /> ionyeshe picha kila wakati</translation>
 <translation id="8513108775083588393">Zungusha kiotomatiki</translation>
 <translation id="8514746246728959655">Jaribu ufunguo tofauti wa usalama</translation>
-<translation id="851960115758509829">Mipangilio, programu na mapendeleo yako mengine, yatasawazishwa kwenye vifaa vyote vinavyotumia Mfumo wa Uendeshaji wa Chrome, ambavyo umetumia kuingia katika Akaunti yako ya Google.</translation>
+<translation id="851960115758509829">Mipangilio, programu na mapendeleo yako mengine, yatasawazishwa kwenye vifaa vyote vyenye Mfumo wa Uendeshaji wa Chrome, ambavyo umetumia kuingia katika Akaunti yako ya Google.</translation>
 <translation id="8521475323816527629">Zifikie programu zako haraka</translation>
 <translation id="8523493869875972733">Hifadhi Mabadiliko</translation>
 <translation id="8523849605371521713">Imeongezwa na sera</translation>
@@ -5950,7 +5942,6 @@
 <translation id="8966870118594285808">Fungua tena kichupo ikiwa umekifunga kimakosa</translation>
 <translation id="8967866634928501045">Bonyeza Alt Shift A ili uonyeshe</translation>
 <translation id="8968766641738584599">Hifadhi kadi</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> imeshindwa kukagua manenosiri yako. Jaribu tena baada ya saa 24 au <ph name="BEGIN_LINK" />kagua manenosiri katika Akaunti yako ya Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Ondoka</translation>
 <translation id="8972513834460200407">Tafadhali wasiliana na msimamzi wako wa mtandao ili uhakikishe kuwa ngome haizuii vipakuliwa kutoka seva za Google.</translation>
 <translation id="8973557916016709913">Ondoa kiwango cha kukuza</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 99afd96b..cee78cda 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1003,7 +1003,6 @@
 <translation id="2342740338116612727">புக்மார்க்குகள் சேர்க்கப்பட்டன</translation>
 <translation id="2343747224442182863">இந்தத் தாவலை மையப்படுத்து</translation>
 <translation id="2345723121311404059">1 பக்கம் - <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">SODA சேவை</translation>
 <translation id="2347644257713614136">Hangouts மற்றும் Cast for Education ஆகியவற்றின் பயன்பாடு, Google தனியுரிமைக் கொள்கையால் நிர்வகிக்கப்படுகிறது.</translation>
 <translation id="2348176352564285430">ஆப்ஸ்: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">தரவை ஏற்றுவதில் பிழை</translation>
@@ -2273,7 +2272,6 @@
 <translation id="3971764089670057203">இந்தப் பாதுகாப்பு விசையில் உள்ள கைரேகைகள்</translation>
 <translation id="3973660817924297510">(<ph name="CHECKED_PASSWORDS" /> / <ph name="TOTAL_PASSWORDS" />) கடவுச்சொற்களைச் சரிபார்க்கிறது…</translation>
 <translation id="3975565978598857337">டொமைனுக்காக சேவையகத்தைப் பயன்படுத்த இயலவில்லை</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> உலாவியால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை. பிறகு முயலவும்.</translation>
 <translation id="3976108569178263973">பிரிண்டர்கள் எதுவும் இல்லை.</translation>
 <translation id="397703832102027365">இறுதிபடுத்துகிறது...</translation>
 <translation id="3977886311744775419">தானியங்குப் புதுப்பிப்புகள் இந்த வகை நெட்வொர்க்கில் பதிவிறக்கப்படாது, ஆனால் புதுப்பிப்புகள் உள்ளனவா என்று நேரடியாகப் பார்த்து, அவற்றை பதிவிறக்கலாம்.</translation>
@@ -2574,7 +2572,6 @@
 <translation id="4421932782753506458">ஃபளஃபி</translation>
 <translation id="4423376891418188461">அமைப்புகளை மீட்டெடு</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, உங்கள் கடவுச்சொல்லை மாற்றும்படி நிர்வாகி கோருகிறார்.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> உலாவியால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை. 24 மணிநேரத்திற்குப் பிறகு முயலவும்.</translation>
 <translation id="4429030830601238961">இந்தத் தரவு உங்கள் நிறுவனத்தின் பாதுகாப்புக் கொள்கைகளை மீறுகின்ற காரணத்தால் இதை ஒட்ட முடியாது.</translation>
 <translation id="4430019312045809116">அளவு</translation>
 <translation id="4430369329743628066">புத்தகக்குறி சேர்க்கப்பட்டது</translation>
@@ -2587,7 +2584,6 @@
 <translation id="4441124369922430666">கணினி தொடங்கப்பட்டவுடன் தானாகவே இந்தப் பயன்பாட்டைத் தொடங்க விரும்புகிறீர்களா?</translation>
 <translation id="4441147046941420429">தொடர உங்கள் சாதனத்திலிருந்து பாதுகாப்பு விசையை அகற்றி அதை மீண்டும் செருகி, தொடவும்</translation>
 <translation id="444134486829715816">விரிவாக்கு...</translation>
-<translation id="4442329324652245220">நீங்கள் Google கணக்கைக் கொண்டு உள்நுழையும்போது <ph name="IDS_SHORT_PRODUCT_NAME" /> உலாவியால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியும்</translation>
 <translation id="4442424173763614572">DNS தேடுதல் தோல்வி</translation>
 <translation id="4443536555189480885">&amp;Help</translation>
 <translation id="4444304522807523469">USB அல்லது பிற லோக்கல் நெட்வொர்க் மூலம் இணைக்கப்பட்ட ஆவண ஸ்கேனர்களை அணுகுதல்</translation>
@@ -2614,7 +2610,6 @@
 <translation id="4476659815936224889">இந்தக் குறியீட்டை ஸ்கேன் செய்ய உங்கள் மொபைலில் QR ஸ்கேனர் ஆப்ஸையோ வேறு சில கேமரா ஆப்ஸையோ பயன்படுத்தலாம்.</translation>
 <translation id="4477015793815781985">கன்ட்ரோல், ஆல்ட் அல்லது ⌘ விசையைப் பயன்படுத்தித் தொடங்கவும்</translation>
 <translation id="4478664379124702289">இணை&amp;ப்பை இவ்வாறு சேமி...</translation>
-<translation id="4478777936860197922">சேமித்த கடவுச்சொற்கள் எதுவுமில்லை. நீங்கள் அவற்றைச் சேமிக்கும்போது <ph name="IDS_SHORT_PRODUCT_NAME" /> உலாவியால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியும்.</translation>
 <translation id="4479424953165245642">Kiosk ஆப்ஸை நிர்வகி</translation>
 <translation id="4479639480957787382">ஈத்தர்நெட்</translation>
 <translation id="4479877282574735775">விர்ச்சுவல் மெஷினை உள்ளமைக்கிறது. இதற்குச் சில நிமிடங்கள் ஆகலாம்.</translation>
@@ -2860,7 +2855,6 @@
 <translation id="4849517651082200438">நிறுவ வேண்டாம்</translation>
 <translation id="4850669014075537160">ஸ்க்ரோலிங்</translation>
 <translation id="4850886885716139402">காட்சி</translation>
-<translation id="485197095346966382">களவாடப்பட்ட கடவுச்சொல்லைக் கொண்டு நீங்கள் உள்நுழையும்போது <ph name="IDS_SHORT_PRODUCT_NAME" /> உலாவி அதுகுறித்து உங்களுக்குத் தெரியப்படுத்தும்</translation>
 <translation id="4853020600495124913">&amp;புதிய சாளரத்தில் திற</translation>
 <translation id="4854317507773910281">அனுமதி பெற பெற்றோர் கணக்கைத் தேர்வுசெய்யவும்</translation>
 <translation id="485480310608090163">கூடுதல் அமைப்புகளும் அனுமதிகளும்</translation>
@@ -4822,7 +4816,6 @@
 <translation id="7530016656428373557">வாட்ஸ் அலகில் வெளியேற்ற வீதம்</translation>
 <translation id="7531779363494549572">அமைப்புகள் &gt; ஆப்ஸ் &amp; அறிவிப்புகள் &gt; அறிவிப்புகள் என்பதற்குச் செல்லவும்.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> செயல்படவில்லை. ஆப்ஸை மூட "உடனே மூடு" என்பதைத் தேர்ந்தெடுங்கள்.</translation>
-<translation id="7536333565791380193">மேம்பட்ட பாதுகாப்பு</translation>
 <translation id="7537451260744431038">உங்கள் உலாவல் அனுபவத்தை மேம்படுத்துவதற்காக (எ.கா., உங்களை உள்நுழைந்தபடியே வைத்திருப்பது, உங்கள் ஷாப்பிங் கார்ட்டில் உள்ளவற்றை நினைவில் கொள்வது போன்றவை) குக்கீகளைத் தளங்கள் பயன்படுத்த முடியாது</translation>
 <translation id="7539856059004947393">புளூடூத் பாதுகாப்பு விசை</translation>
 <translation id="7540972813190816353">புதுப்பிப்பதற்கு தேர்வுசெய்யும்போது பிழை ஏற்பட்டது: <ph name="ERROR" /></translation>
@@ -5063,7 +5056,6 @@
     <ph name="BEGIN_BOLD" />குறிப்பு:<ph name="END_BOLD" />  செயல்முறையின் போது சாதனம் மறுதொடக்கம் செய்யப்படும்.</translation>
 <translation id="7828731929332799387">இது மூன்றாம் தரப்பினரின் அனைத்துக் குக்கீகளையும் தளத் தரவையும் அழிக்கும். தொடர விரும்புகிறீர்களா?</translation>
 <translation id="7829298379596169484">ஆடியோ உள்ளீட்டை அணுகுகிறது</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> உலாவியால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை. உங்கள் இணைய இணைப்பைச் சரிபார்க்கவும்.</translation>
 <translation id="7829877209233347340">பள்ளிக் கணக்கைச் சேர்ப்பதற்கான அனுமதி வழங்க பெற்றோரை உள்நுழையச் சொல்லவும்</translation>
 <translation id="7830594666202422257">Linuxஸுடன் இணைக்கவும்</translation>
 <translation id="7831491651892296503">நெட்வொர்க்கை உள்ளமைப்பதில் பிழை</translation>
@@ -5936,7 +5928,6 @@
 <translation id="8966870118594285808">நீங்கள் தாவலைத் தற்செயலாக மூடிவிட்டால் அதை மீண்டும் திறக்கலாம்</translation>
 <translation id="8967866634928501045">காட்ட, Alt Shift A ஆகிய விசைகளை அழுத்தவும்</translation>
 <translation id="8968766641738584599">கார்டைச் சேமி</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> உலாவியால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை. 24 மணிநேரத்திற்குப் பிறகு மீண்டும் முயலவும் அல்லது <ph name="BEGIN_LINK" />உங்கள் Google கணக்கில் கடவுச்சொற்களைச் சரிபார்க்கவும்<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Google சேவையகங்களிலிருந்து பதிவிறக்குவதை ஃபயர்வால் தடுக்கவில்லை என்பதை உங்கள் நெட்வொர்க் நிர்வாகியிடம் கேட்டு உறுதிப்படுத்திக்கொள்ளவும்.</translation>
 <translation id="8973557916016709913">அளவை மாற்றுவதற்கான நிலையை அகற்றும்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index ef6428ac..8ac3441 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">బుక్‌మార్క్ పేరు</translation>
 <translation id="1124772482545689468">వినియోగదారు</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ఉన్నట్టుంది (అసలైనది)</translation>
+<translation id="1126809382673880764">ప్రమాదకరమైన వెబ్‌సైట్‌లు, డౌన్‌లోడ్‌లు మరియు ఎక్స్‌టెన్షన్‌ల నుండి మిమ్మల్ని రక్షించదు. Gmail, Search వంటి ఇతర Google సర్వీస్‌లలో, సురక్షిత బ్రౌజింగ్ అందుబాటులో ఉన్న చోట మీరు ఇప్పటికీ రక్షణను పొందుతారు.</translation>
 <translation id="1128109161498068552">MIDI పరికరాలను యాక్సెస్ చేయడం కోసం సిస్టమ్ విశిష్ట సందేశాలను ఉపయోగించడానికి ఏ సైట్‌లను అనుమతించవద్దు</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">శోధన ఇంజిన్‌ను సవరించండి</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">తెలిసిన నెట్‌వర్క్‌లు</translation>
 <translation id="123578888592755962">డిస్క్ నిండింది</translation>
 <translation id="1238191093934674082">ఓపెన్ VPN</translation>
+<translation id="1239439601391236986">వ్యక్తిగత సమాచార సూచనల ఇన్‌పుట్‌ను చూపించు</translation>
 <translation id="1239594683407221485">ఈ పరికర కంటెంట్‌ను 'ఫైల్స్' యాప్‌లో అన్వేషించండి.</translation>
 <translation id="124116460088058876">మరిన్ని భాషలు</translation>
 <translation id="1241753985463165747">అభ్యర్థించినప్పుడు ప్రస్తుత వెబ్‌సైట్‌లో మీ మొత్తం డేటాను చదవండి మరియు మార్చండి</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">సెల్యులార్ యాక్టివేషన్</translation>
 <translation id="1407489512183974736">మధ్యకు కత్తిరించు</translation>
 <translation id="1408504635543854729">ఫైల్స్ యాప్‌లో పరికర కంటెంట్‌ను విశ్లేషించండి. కంటెంట్‌ను నిర్వాహకులు పరిమితం చేశారు మరియు దాన్ని సవరించడం సాధ్యపడదు.</translation>
+<translation id="1408980562518920698">వ్యక్తిగత సమాచారాన్ని నిర్వహించండి</translation>
 <translation id="1410197035576869800">యాప్ చిహ్నం</translation>
 <translation id="1410616244180625362">మీ కెమెరాను యాక్సెస్ చేయడానికి <ph name="HOST" />కు అనుమతిని కొనసాగించండి</translation>
 <translation id="1414648216875402825">మీరు <ph name="PRODUCT_NAME" /> యొక్క అస్థిర వెర్షన్‌కు అప్‌డేట్ చేస్తున్నారు, ఇందులో పురోగతిలో ఉన్న ఫీచర్‌లు ఉంటాయి. క్రాష్‌లు మరియు ఊహించని బగ్‌లు ఏర్పడవచ్చు. దయచేసి జాగ్రత్తగా కొనసాగండి.</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript కన్సోల్</translation>
 <translation id="1587907146729660231">మీ వేలితో వేలిముద్ర సెన్సార్‌పై తాకండి</translation>
+<translation id="1588200577109872591">స్మార్ట్ ఇన్‌పుట్‌లు</translation>
 <translation id="1588438908519853928">సాధారణ</translation>
 <translation id="158849752021629804">హోమ్ నెట్‌వర్క్ అవసరం</translation>
 <translation id="1588870296199743671">దీనితో లింక్ తెరువు...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">ఇలా సైన్ ఇన్ చేయండి</translation>
 <translation id="1880905663253319515">ప్రమాణపత్రం "<ph name="CERTIFICATE_NAME" />"ను తొలగించాలా?</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" />లో <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, కనెక్ట్ చేయండి</translation>
+<translation id="1884705339276589024">Linux డిస్క్ పరిమాణాన్ని మార్చండి</translation>
 <translation id="1886996562706621347">ప్రోటోకాల్స్‌కు డిఫాల్ట్ హ్యాండ్లర్‌లుగా కావడం కోసం అడగటానికి సైట్‌లను అనుమతించండి (సిఫార్సు చేయబడింది)</translation>
 <translation id="1887442540531652736">సైన్ ఇన్ ఎర్రర్</translation>
 <translation id="1887597546629269384">మళ్లీ ఒక్కసారి "Hey Google" అని చెప్పండి</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">మీరు <ph name="PRODUCT_NAME" /> పాత వెర్షన్ ఉన్న ఛానెల్‌కు మారుతున్నారు. ఈ ఛానెల్ వెర్షన్, మీ పరికరంలో ప్రస్తుతం ఇన్‌స్టాల్ అయిన వెర్షన్‌కు సరిపోలినప్పుడు ఛానెల్ మార్పు వర్తిస్తుంది.</translation>
 <translation id="197989455406964291">ఎన్‌క్రిప్షన్ రకానికి KDC మద్దతు లేదు</translation>
 <translation id="1982354452682152483">వివరణ ఏదీ లేదు.</translation>
+<translation id="1984417487208496350">రక్షణ లేదు (సిఫార్సు చేయడం లేదు)</translation>
 <translation id="1987317783729300807">ఖాతాలు</translation>
 <translation id="1989112275319619282">బ్రౌజ్ చేయి</translation>
 <translation id="1990512225220753005">ఈ పేజీలో షార్ట్‌కట్‌లను చూపవద్దు</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">మీ ఖాతా సమాచారాన్ని పునరుద్ధరించడానికి, దీనికి వెళ్లండి: google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">సిస్టమ్ భద్రతా సెట్టింగ్</translation>
 <translation id="2091887806945687916">ధ్వని</translation>
+<translation id="2096478741073211388">మీరు కొన్ని నిర్దిష్ట పదాలను టైప్ చేసేటప్పుడు మీ పేరు, చిరునామా లేదా ఫోన్ నంబర్‌ను సూచించడం ద్వారా వేగంగా రాయడానికి వ్యక్తిగత సమాచార సూచనలు మీకు సహాయపడతాయి. మీ ఖాతా కోసం మీ 'స్వంత ప్రైవేట్, వ్యక్తిగతీకరించిన' సూచనలను మీరు మాత్రమే చూస్తారు.</translation>
 <translation id="2096715839409389970">మూడవ పక్షం కుక్కీలను తొలగించు</translation>
 <translation id="2097372108957554726">మీరు కొత్త పరికరాలను నమోదు చేయడానికి Chromeకు సైన్ ఇన్ చేయాలి</translation>
 <translation id="2099172618127234427">మీరు sshd daemonను సెటప్ చేసే మరియు USB డ్రైవ్‌ల నుండి బూటింగ్‌ను ప్రారంభించే Chrome OS డీబగ్గింగ్ ఫీచ‌ర్‌లను ప్రారంభిస్తున్నారు.</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">&amp;ఫ్రేమ్‌ను మళ్లీ లోడ్ చేయి</translation>
 <translation id="2114896190328250491">ఫోటో తీసినది <ph name="NAME" /></translation>
 <translation id="2119349053129246860"><ph name="APP" />లో తెరువు</translation>
+<translation id="2119461801241504254">సురక్షిత బ్రౌజింగ్ ఆన్‌లో ఉంది, హానికరమైన సైట్‌లు, డౌన్‌లోడ్‌ల నుండి మిమ్మల్ని రక్షిస్తోంది</translation>
 <translation id="2120297377148151361">కార్యకలాపం మరియు పరస్పర చర్యలు</translation>
 <translation id="2120639962942052471"><ph name="PERMISSION" />ను బ్లాక్ చేశారు</translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{కుక్కీలు బ్లాక్ చేయబడ్డాయి}=1{కుక్కీలు బ్లాక్ చేయబడ్డాయి, 1 మినహాయింపు}other{కుక్కీలు బ్లాక్ చేయబడ్డాయి, {COUNT} మినహాయింపులు}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">బుక్‌మార్క్‌లు జోడించబడ్డాయి</translation>
 <translation id="2343747224442182863">ఈ ట్యాబ్‌పై దృష్టి కేంద్రీకరించు</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" />కు 1 పేజీ</translation>
-<translation id="2346953515226895098">SODA సర్వీస్</translation>
 <translation id="2347644257713614136">Hangouts మరియు Cast for Educationల వినియోగం Google గోప్యతా విధానానికి అనుగుణంగా ఉంటుంది.</translation>
 <translation id="2348176352564285430">యాప్: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">డేటాను లోడ్ చేయడంలో ఎర్రర్ ఏర్పడింది</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">రీసెట్‌ను నిర్ధారించడానికి మీ 'సెక్యూరిటీ కీ'ని మళ్లీ తాకండి. 'సెక్యూరిటీ కీ'లో నిల్వ చేసిన మొత్తం సమాచారం, అలాగే దాని పిన్ కూడా తొలగించబడతాయి.</translation>
 <translation id="3518985090088779359">అంగీకరించు &amp; కొనసాగు</translation>
 <translation id="351952459507671940">కొత్త సమూహానికి జోడించు</translation>
+<translation id="3521606918211282604">డిస్క్ పరిమాణాన్ని మార్చండి</translation>
 <translation id="3523642406908660543">మీ కంప్యూటర్‌ను యాక్సెస్ చేయడానికి సైట్ ప్లగిన్‌ను ఉపయోగించాలనుకున్నప్పుడు అడగండి (సిఫార్సు చేయబడింది)</translation>
 <translation id="3524965460886318643">కార్యకలాపాలను ఎగుమతి చేయి</translation>
 <translation id="3526034519184079374">సైట్ డేటాని చదవడం లేదా మార్చడం సాధ్యం కాదు</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">Smart Lockను ప్రారంభించడానికి మీ పాస్‌వర్డ్‌‌ను నమోదు చేయండి. తదుపరిసారి, మీ ఫోన్ మీ <ph name="DEVICE_TYPE" />‌ను అన్‌లాక్ చేస్తుంది. సెట్టింగ్‌లలో మీరు Smart Lockను ఆఫ్ చేయవచ్చు.</translation>
 <translation id="3630132874740063857">మీ ఫోన్</translation>
 <translation id="3630995161997703415">ఈ సైట్‌ను ఏ సమయంలో అయినా ఉపయోగించడం కోసం దీనిని మీ 'అర'కు జోడించండి</translation>
+<translation id="3633309367764744750">మీరు ఇంకా సందర్శించని పేజీలతో సహా పేజీల నుండి సమాచారాన్ని ముందే పొందుతుంది. మీరు కుక్కీలను అనుమతించినట్లయితే, పొందిన సమాచారంలో కుక్కీలు కూడా ఉండవచ్చు.</translation>
 <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />లో <ph name="NETWORK_INDEX" /> నెట్‌వర్క్, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, మీ అడ్మినిస్ట్రేటర్ ద్వారా నిర్వహించబడుతోంది, వివరాలు</translation>
 <translation id="3635241501480133979">ఈ డేటా, మీ సంస్థకు చెందిన భద్రతా పాలసీలను ఉల్లంఘిస్తుంది, కాబట్టి దానిని డ్రాప్ చేయడం సాధ్యం కాదు.</translation>
 <translation id="3635353578505343390">Googleకు ఫీడ్‌బ్యాక్‌ పంపండి</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">ఈ సెక్యూరిటీ 'కీ'లో వేలిముద్రలు ఉన్నాయి</translation>
 <translation id="3973660817924297510">పాస్‌వర్డ్‌లను తనిఖీ చేస్తోంది (<ph name="TOTAL_PASSWORDS" />లో <ph name="CHECKED_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">సర్వర్ కోసం నెట్‌వర్క్ పరిధిని కనెక్ట్ చేయడంలో విఫలమైంది</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> మీ పాస్‌వర్డ్‌లను చెక్ చేయలేదు. తర్వాత మళ్లీ ట్రై చేయండి.</translation>
 <translation id="3976108569178263973">అందుబాటులో ఉన్న ప్రింటర్లు లేవు.</translation>
 <translation id="397703832102027365">పూర్తి చేస్తోంది...</translation>
 <translation id="3977886311744775419">ఈ రకమైన నెట్‌వర్క్‌లో ఆటోమేటిక్ అప్‌డేట్‌లు డౌన్‌లోడ్ చేయబడవు, కానీ మీరు మాన్యువల్‌గా అప్‌డేట్‌లను తనిఖీ చేయవచ్చు.</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">ఫ్లఫ్ఫీ</translation>
 <translation id="4423376891418188461">సెట్టింగ్‌లను పునరుద్ధరించు</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, మీ నిర్వాహకులకు మీరు మీ పాస్‌వర్డ్‌ను మార్చడం అవసరం.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> మీ పాస్‌వర్డ్‌లను చెక్ చేయలేదు. 24 గంటల తర్వాత మళ్లీ ట్రై చేయండి.</translation>
 <translation id="4429030830601238961">ఈ డేటా మీ సంస్థ యొక్క భద్రతా పాలసీలను ఉల్లంఘిస్తుంది, కాబట్టి అది అతికించబడదు.</translation>
 <translation id="4430019312045809116">వాల్యూమ్</translation>
 <translation id="4430369329743628066">బుక్‌మార్క్ జోడించబడింది</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">మెషీన్ ప్రారంభించబడినప్పుడు ఆటోమేటిక్‌గా ఈ యాప్ ప్రారంభించబడాలని మీరు కోరుకుంటున్నారా?</translation>
 <translation id="4441147046941420429">కొనసాగించడానికి, మీ పరికరం నుండి సెక్యూరిటీ కీని తీసివేసి, ఆ తర్వాత చొప్పించి, ఆపై దానిని తాకండి</translation>
 <translation id="444134486829715816">విస్తరించు...</translation>
-<translation id="4442329324652245220">మీరు మీ Google ఖాతాతో సైన్ ఇన్ చేసినప్పుడు <ph name="IDS_SHORT_PRODUCT_NAME" />Chrome మీ పాస్‌వర్డ్‌లను చెక్ చేయగలదు</translation>
 <translation id="4442424173763614572">DNS శోధన విఫలమైంది</translation>
 <translation id="4443536555189480885">&amp;సహాయం</translation>
 <translation id="4444304522807523469">USB ద్వారా లేదా స్థానిక నెట్‌వర్క్‌లో జోడించిన పత్రం స్కానర్‌లను యాక్సెస్ చేయండి</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">ఈ కోడ్‌ను స్కాన్ చేయడానికి, మీ ఫోన్ లేదా కొన్ని కెమెరా యాప్‌లలో QR స్కానర్ యాప్‌ను ఉపయోగించవచ్చు.</translation>
 <translation id="4477015793815781985">Ctrl, Alt లేదా ⌘ని చేర్చండి</translation>
 <translation id="4478664379124702289">లిం&amp;క్‌ను ఇలా సేవ్ చేయి...</translation>
-<translation id="4478777936860197922">సేవ్ చేసిన పాస్‌వర్డ్‌లు లేవు. మీరు మీ పాస్‌వర్డ్‌లను సేవ్ చేసినప్పుడు <ph name="IDS_SHORT_PRODUCT_NAME" />Chrome వాటిని చెక్ చేయగలదు.</translation>
 <translation id="4479424953165245642">కియోస్క్ అనువర్తనాలను నిర్వహించండి</translation>
 <translation id="4479639480957787382">ఈథర్నెట్</translation>
 <translation id="4479877282574735775">వర్చువల్ మెషీన్‌ను కాన్ఫిగర్ చేస్తోంది. దీనికి కొద్ది నిమిషాలు పట్టవచ్చు.</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">ఇన్‌స్టాల్ చేయ‌వ‌ద్దు</translation>
 <translation id="4850669014075537160">స్క్రోలింగ్</translation>
 <translation id="4850886885716139402">వీక్షణ</translation>
-<translation id="485197095346966382">చోరీకి గురైన పాస్‌వర్డ్‌తో మీరు సైన్ ఇన్ చేసినప్పుడు <ph name="IDS_SHORT_PRODUCT_NAME" /> మీకు తెలియజేస్తుంది</translation>
 <translation id="4853020600495124913">&amp;కొత్త విండోలో తెరువు</translation>
 <translation id="4854317507773910281">ఆమోదం కోసం తల్లి/తండ్రి ఖాతాను ఎంచుకోండి</translation>
 <translation id="485480310608090163">మరిన్ని సెట్టింగ్‌లు మరియు అనుమతులు</translation>
@@ -3937,6 +3941,7 @@
 <translation id="6298962879096096191">Android యాప్‌లను ఇన్‌స్టాల్ చేయడానికి Google Play‌ను ఉపయోగిస్తుంది</translation>
 <translation id="630065524203833229">ని&amp;ష్క్రమించు</translation>
 <translation id="6300718114348072351"><ph name="PRINTER_NAME" />ను ఆటోమేటిక్‌గా కాన్ఫిగర్ చేయలేకపోయింది. దయచేసి అధునాతన ప్రింటర్ వివరాలను పేర్కొనండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">వ్యక్తిగత సమాచార సూచనలు</translation>
 <translation id="6305607932814307878">గ్లోబల్ విధానం:</translation>
 <translation id="6307990684951724544">సిస్టమ్ బిజీగా ఉంది</translation>
 <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> ద్వారా సైన్-ఇన్ అందించబడింది</translation>
@@ -4015,6 +4020,7 @@
 <translation id="641081527798843608">విషయ సరిపోలిక</translation>
 <translation id="6412673304250309937">Chromeలో స్టోర్ చేసిన సురక్షితం కాని సైట్‌ల జాబితాతో కూడిన URLలను చెక్ చేస్తుంది. ఏదైనా సైట్ మీ పాస్‌వర్డ్‌ను దొంగిలించే ప్రయత్నం చేసినా, లేదంటే ఏదైనా హానికరమైన ఫైల్‌ను మీరు డౌన్‌లోడ్ చేసినా, సదరు URLలను, ఆయా పేజీల కంటెంట్‌లోని కొన్ని భాగాలను కూడా Chrome, 'సురక్షిత బ్రౌజింగ్'కు పంపవచ్చు.</translation>
 <translation id="6412931879992742813">కొత్త అజ్ఞాత విండో</translation>
+<translation id="6413591858632097328"><ph name="ORIGIN_NAME" /> ద్వారా మరియు దాని ఇన్‌స్టాల్ చేసిన యాప్‌ల ద్వారా స్టోర్ అయిన డేటా మరియు కుక్కీలను ఇది తొలగిస్తుంది.</translation>
 <translation id="641469293210305670">అప్‌డేట్‌లు, యాప్‌లు ఇన్‌స్టాల్ చేయండి</translation>
 <translation id="6414888972213066896">మీరు ఈ సైట్‌ను సందర్శించడానికి అనుమతించమని కోరుతూ మీ తల్లి/తండ్రికి అభ్యర్థన పంపారు</translation>
 <translation id="6415900369006735853">మీ ఫోన్ ద్వారా ఇంటర్నెట్‌కు కనెక్ట్ అవ్వండి</translation>
@@ -4825,7 +4831,6 @@
 <translation id="7530016656428373557">వాట్‌లలో తరుగుదల రేట్</translation>
 <translation id="7531779363494549572">సెట్టింగ్‌లు &gt; యాప్‌లు &amp; నోటిఫికేషన్‌లు &gt; నోటిఫికేషన్‌లలోకి వెళ్లండి.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> స్పందించడం లేదు. యాప్‌ను మూసివేయడానికి "బలవంతంగా మూసివేయి" ఎంచుకోండి.</translation>
-<translation id="7536333565791380193">అధునాతన భద్రత</translation>
 <translation id="7537451260744431038">మీ బ్రౌజింగ్ అనుభవాన్ని మెరుగుపరచడానికి సైట్‌లు కుక్కీలను ఉపయోగించలేవు, ఉదాహరణకు, మిమ్మల్ని సైన్ ఇన్ చేసి ఉంచడం, మీ షాపింగ్ కార్ట్‌లో ఐటెమ్‌లను గుర్తు చేయడం లాంటివి</translation>
 <translation id="7539856059004947393">బ్లూటూత్ భద్రతా కీ</translation>
 <translation id="7540972813190816353">అప్‌డేట్‌ల కోసం తనిఖీ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది: <ph name="ERROR" /></translation>
@@ -5065,7 +5070,6 @@
     <ph name="BEGIN_BOLD" />గమనిక:<ph name="END_BOLD" />  ప్రక్రియ సమయంలో సిస్టమ్ రీబూట్ అవుతుంది.</translation>
 <translation id="7828731929332799387">మూడవ పక్షంతో అనుబంధించబడిన అందుబాటులో ఉన్న అన్ని కుక్కీలను, ఇంకా సైట్ డేటాను ఇది క్లియర్ చేస్తుంది. మీరు కొనసాగించాలనుకుంటున్నారా?</translation>
 <translation id="7829298379596169484">ఆడియో ఇన్‌పుట్ ప్రాప్యత చేయబడుతోంది</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> మీ పాస్‌వర్డ్‌లను చెక్ చేయలేదు. మీ ఇంటర్నెట్ కనెక్షన్ సరిచూసుకుని, తర్వాత ట్రై చేయండి.</translation>
 <translation id="7829877209233347340">స్కూల్ ఖాతాను జోడించడానికి అనుమతి ఇవ్వడం కోసం తల్లి/తండ్రిని సైన్ ఇన్ అవ్వమని అడగండి</translation>
 <translation id="7830594666202422257">Linuxకు కనెక్ట్ చేయి</translation>
 <translation id="7831491651892296503">నెట్‌వర్క్‌ను కాన్ఫిగర్ చేయడంలో ఎర్రర్</translation>
@@ -5937,7 +5941,6 @@
 <translation id="8966870118594285808">ట్యాబ్‌ను మీరు పొరపాటున మూసివేసినట్లయితే మళ్లీ తెరవగలరు</translation>
 <translation id="8967866634928501045">చూపడం కోసం Alt Shift A నొక్కండి</translation>
 <translation id="8968766641738584599">కార్డ్‌ని సేవ్ చేయండి</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> మీ పాస్‌వర్డ్‌లను చెక్ చేయలేదు. 24 గంటల తర్వాత మళ్లీ ట్రై చేయండి లేదా <ph name="BEGIN_LINK" />మీ Google ఖాతాలో పాస్‌వర్డ్‌లను తనిఖీ చేయండి<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">ఎస్కేప్</translation>
 <translation id="8972513834460200407">దయచేసి Google సర్వర్‌ల నుండి డౌన్‌లోడ్‌లను ఫైర్‌వాల్ బ్లాక్ చేయడం లేదని నిర్ధారించుకోవడానికి మీ నెట్‌వర్క్ నిర్వాహకుడిని సంప్రదించండి.</translation>
 <translation id="8973557916016709913">జూమ్ స్థాయిని తీసివేయి</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 99e8664..cb96af8 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">ชื่อบุ๊กมาร์ก</translation>
 <translation id="1124772482545689468">ผู้ใช้</translation>
 <translation id="1125550662859510761">ดูเหมือน <ph name="WIDTH" /> x <ph name="HEIGHT" /> (ค่าดั้งเดิม)</translation>
+<translation id="1126809382673880764">ไม่ปกป้องคุณจากเว็บไซต์ การดาวน์โหลด และส่วนขยายที่เป็นอันตราย คุณจะยังคงได้รับการปกป้องจาก Google Safe Browsing ในบริการอื่นๆ ของ Google ที่มีฟีเจอร์นี้ เช่น Gmail และ Search</translation>
 <translation id="1128109161498068552">ไม่อนุญาตให้ไซต์ใดๆ ใช้ข้อความเฉพาะของระบบในการเข้าถึงอุปกรณ์ MIDI</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">แก้ไขเครื่องมือค้นหา</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">เครือข่ายที่รู้จัก</translation>
 <translation id="123578888592755962">ดิสก์เต็ม</translation>
 <translation id="1238191093934674082">เปิด VPN</translation>
+<translation id="1239439601391236986">แสดงการแนะนำข้อมูลส่วนบุคคลเพื่อช่วยป้อนข้อมูล</translation>
 <translation id="1239594683407221485">สำรวจเนื้อหาของอุปกรณ์ในแอป Files</translation>
 <translation id="124116460088058876">ภาษาเพิ่มเติม</translation>
 <translation id="1241753985463165747">อ่านและเปลี่ยนแปลงข้อมูลทั้งหมดในเว็บไซต์ปัจจุบันเมื่อเรียกใช้</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">การเปิดใช้งานเครือข่ายมือถือ</translation>
 <translation id="1407489512183974736">ครอบตัดที่กึ่งกลาง</translation>
 <translation id="1408504635543854729">สำรวจเนื้อหาของอุปกรณ์ในแอปไฟล์ เนื้อหาถูกผู้ดูแลระบบจำกัดไว้และไม่สามารถแก้ไขได้</translation>
+<translation id="1408980562518920698">จัดการข้อมูลส่วนบุคคล</translation>
 <translation id="1410197035576869800">ไอคอนของแอป</translation>
 <translation id="1410616244180625362">อนุญาตให้ <ph name="HOST" /> เข้าถึงกล้องต่อไป</translation>
 <translation id="1414648216875402825">คุณกำลังอัปเดตไปเป็น <ph name="PRODUCT_NAME" /> ในเวอร์ชันที่ไม่เสถียร ซึ่งมีฟีเจอร์ที่ยังอยู่ระหว่างดำเนินการ จะมีข้อขัดข้องและข้อบกพร่องที่ไม่คาดคิดเกิดขึ้น โปรดดำเนินการต่อด้วยความระมัดระวัง</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">คอนโซล &amp;JavaScript</translation>
 <translation id="1587907146729660231">ใช้นิ้วแตะปุ่มเปิด/ปิด</translation>
+<translation id="1588200577109872591">การช่วยป้อนข้อมูลอัจฉริยะ</translation>
 <translation id="1588438908519853928">ปกติ</translation>
 <translation id="158849752021629804">ต้องใช้เครือข่ายในประเทศ</translation>
 <translation id="1588870296199743671">เปิดลิงก์ด้วย...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">ลงชื่อเข้าใช้ด้วย</translation>
 <translation id="1880905663253319515">ลบใบรับรอง "<ph name="CERTIFICATE_NAME" />" หรือไม่</translation>
 <translation id="1884013283844450420">เครือข่ายที่ <ph name="NETWORK_INDEX" /> จาก <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, เชื่อมต่อ</translation>
+<translation id="1884705339276589024">ปรับขนาดดิสก์ Linux</translation>
 <translation id="1886996562706621347">อนุญาตให้ไซต์แจ้งขอเป็นเครื่องจัดการเริ่มต้นสำหรับโปรโตคอล (แนะนำ)</translation>
 <translation id="1887442540531652736">ข้อผิดพลาดในการลงชื่อเข้าใช้</translation>
 <translation id="1887597546629269384">พูดว่า "Hey Google" อีกครั้ง</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">คุณกำลังเปลี่ยนเป็นช่องที่มี <ph name="PRODUCT_NAME" /> เวอร์ชันเก่ากว่า การเปลี่ยนช่องจะถูกนำมาใช้เมื่อเวอร์ชันของช่องตรงกับเวอร์ชันที่ติดตั้งอยู่ในอุปกรณ์ของคุณในปัจจุบัน</translation>
 <translation id="197989455406964291">KDC ไม่รองรับการเข้ารหัสประเภทนี้</translation>
 <translation id="1982354452682152483">ไม่มีคำอธิบาย</translation>
+<translation id="1984417487208496350">ไม่มีการปกป้อง (ไม่แนะนำ)</translation>
 <translation id="1987317783729300807">บัญชี</translation>
 <translation id="1989112275319619282">เปิดดู</translation>
 <translation id="1990512225220753005">ไม่แสดงทางลัดในหน้านี้</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">หากต้องการกู้คืนข้อมูลบัญชี โปรดไปที่ google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">การตั้งค่าความปลอดภัยของระบบ</translation>
 <translation id="2091887806945687916">เสียง</translation>
+<translation id="2096478741073211388">การแนะนำข้อมูลส่วนบุคคลจะแนะนำชื่อ ที่อยู่ หรือหมายเลขโทรศัพท์ขณะที่คุณพิมพ์เพื่อช่วยให้ป้อนข้อมูลได้เร็วขึ้น มีเพียงคุณเท่านั้นที่จะเห็นการแนะนำแบบส่วนตัวที่ปรับให้เหมาะกับคุณสำหรับบัญชี</translation>
 <translation id="2096715839409389970">ล้างคุกกี้ของบุคคลที่สาม</translation>
 <translation id="2097372108957554726">คุณต้องลงชื่อเข้าใช้ Chrome เพื่อลงทะเบียนอุปกรณ์ใหม่</translation>
 <translation id="2099172618127234427">คุณกำลังเปิดใช้ฟีเจอร์การแก้ไขข้อบกพร่องของ Chrome OS ซึ่งจะตั้งค่า sshd daemon และเปิดใช้การเปิดเครื่องจากไดรฟ์ USB</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">โหลดเ&amp;ฟรมซ้ำ</translation>
 <translation id="2114896190328250491">รูปภาพจาก <ph name="NAME" /></translation>
 <translation id="2119349053129246860">เปิดใน<ph name="APP" /></translation>
+<translation id="2119461801241504254">Google Safe Browsing เปิดอยู่และกำลังปกป้องคุณจากเว็บไซต์และการดาวน์โหลดที่เป็นอันตราย</translation>
 <translation id="2120297377148151361">กิจกรรมและการโต้ตอบ</translation>
 <translation id="2120639962942052471">บล็อกการเข้าถึง<ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{บล็อกคุกกี้อยู่}=1{บล็อกคุกกี้อยู่ ยกเว้น 1 รายการ}other{บล็อกคุกกี้อยู่ ยกเว้น {COUNT} รายการ}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">เพิ่มบุ๊กมาร์กแล้ว</translation>
 <translation id="2343747224442182863">โฟกัสแท็บนี้</translation>
 <translation id="2345723121311404059">พิมพ์ 1 หน้าไปยัง <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">บริการ SODA</translation>
 <translation id="2347644257713614136">การใช้งาน Hangouts และ Cast for Education อยู่ภายใต้นโยบายความเป็นส่วนตัวของ Google</translation>
 <translation id="2348176352564285430">แอป: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">เกิดข้อผิดพลาดขณะโหลดข้อมูล</translation>
@@ -1891,6 +1898,7 @@
 <translation id="3515983984924808886">แตะคีย์ความปลอดภัยอีกครั้งเพื่อยืนยันการรีเซ็ต ระบบจะลบข้อมูลทั้งหมดที่เก็บไว้ในคีย์ความปลอดภัย รวมถึง PIN ของคีย์ด้วย</translation>
 <translation id="3518985090088779359">ยอมรับและทำต่อ</translation>
 <translation id="351952459507671940">เพิ่มไปยังกลุ่มใหม่</translation>
+<translation id="3521606918211282604">เปลี่ยนขนาดดิสก์</translation>
 <translation id="3523642406908660543">ถามเมื่อเว็บไซต์ต้องการใช้ปลั๊กอินเพื่อเข้าถึงคอมพิวเตอร์ของคุณ (แนะนำ)</translation>
 <translation id="3524965460886318643">ส่งออกกิจกรรม</translation>
 <translation id="3526034519184079374">อ่านหรือเปลี่ยนแปลงข้อมูลของเว็บไซต์ไม่ได้</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3629631988386925734">ป้อนรหัสผ่านเพื่อเปิดใช้ Smart Lock โทรศัพท์จะปลดล็อก <ph name="DEVICE_TYPE" /> ของคุณในครั้งถัดไป คุณปิด Smart Lock ได้ในการตั้งค่า</translation>
 <translation id="3630132874740063857">โทรศัพท์ของคุณ</translation>
 <translation id="3630995161997703415">เพิ่มเว็บไซต์นี้ลงในชั้นวางเพื่อใช้งานได้ทุกเมื่อ</translation>
+<translation id="3633309367764744750">ดึงข้อมูลล่วงหน้าจากหน้าเว็บ ซึ่งรวมถึงหน้าที่คุณยังไม่ได้เข้าชม ข้อมูลที่ดึงมาอาจมีคุกกี้ หากคุณอนุญาตให้ใช้คุกกี้</translation>
 <translation id="3634507049637220048">เครือข่ายที่ <ph name="NETWORK_INDEX" /> จาก <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, จัดการโดยผู้ดูแลระบบ, รายละเอียด</translation>
 <translation id="3635241501480133979">ข้อมูลนี้ละเมิดนโยบายความปลอดภัยขององค์กรและจะวางไม่ได้</translation>
 <translation id="3635353578505343390">ส่งความคิดเห็นไปยัง Google</translation>
@@ -2276,7 +2285,6 @@
 <translation id="3971764089670057203">ลายนิ้วมือที่ลงทะเบียนในคีย์ความปลอดภัยนี้</translation>
 <translation id="3973660817924297510">กำลังตรวจสอบรหัสผ่าน (<ph name="CHECKED_PASSWORDS" /> จาก <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">ติดต่อเซิร์ฟเวอร์ของขอบเขตไม่สำเร็จ</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดลองอีกครั้งในภายหลัง</translation>
 <translation id="3976108569178263973">ไม่มีเครื่องพิมพ์พร้อมใช้งาน</translation>
 <translation id="397703832102027365">กำลังสิ้นสุดการทำงาน...</translation>
 <translation id="3977886311744775419">เครือข่ายประเภทนี้จะไม่ดาวน์โหลดอัปเดตอัตโนมัติ แต่คุณตรวจหาอัปเดตได้ด้วยตนเอง</translation>
@@ -2577,7 +2585,6 @@
 <translation id="4421932782753506458">ฟลัฟฟี</translation>
 <translation id="4423376891418188461">กู้คืนการตั้งค่า</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" /> ผู้ดูแลระบบต้องการให้คุณเปลี่ยนรหัสผ่าน</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดรอ 24 ชั่วโมงแล้วลองอีกครั้ง</translation>
 <translation id="4429030830601238961">ข้อมูลนี้ละเมิดนโยบายความปลอดภัยขององค์กรและจะวางไม่ได้</translation>
 <translation id="4430019312045809116">ระดับเสียง</translation>
 <translation id="4430369329743628066">เพิ่มบุ๊กมาร์กแล้ว</translation>
@@ -2590,7 +2597,6 @@
 <translation id="4441124369922430666">คุณต้องการเริ่มแอปนี้โดยอัตโนมัติเมื่อเครื่องเปิดไหม</translation>
 <translation id="4441147046941420429">หากต้องการดำเนินการต่อ ให้ดึงคีย์ความปลอดภัยออกจากอุปกรณ์ จากนั้นเสียบกลับเข้าไปใหม่แล้วแตะที่คีย์นั้น</translation>
 <translation id="444134486829715816">ขยาย...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> จะตรวจสอบรหัสผ่านได้เมื่อคุณลงชื่อเข้าใช้ด้วยบัญชี Google</translation>
 <translation id="4442424173763614572">การค้นหา DNS ล้มเหลว</translation>
 <translation id="4443536555189480885">&amp;ความช่วยเหลือ</translation>
 <translation id="4444304522807523469">เข้าถึงเครื่องสแกนเอกสารที่เชื่อมต่อผ่าน USB หรือบนเครือข่าย LAN</translation>
@@ -2617,7 +2623,6 @@
 <translation id="4476659815936224889">หากต้องการสแกนโค้ดนี้ คุณใช้แอปสแกนคิวอาร์โค้ดในโทรศัพท์หรือแอปกล้องถ่ายรูปบางแอปสแกนได้</translation>
 <translation id="4477015793815781985">รวม Ctrl, Alt หรือ ⌘</translation>
 <translation id="4478664379124702289">บันทึก&amp;ลิงก์เป็น...</translation>
-<translation id="4478777936860197922">ไม่มีรหัสผ่านที่บันทึกไว้ <ph name="IDS_SHORT_PRODUCT_NAME" /> จะตรวจสอบรหัสผ่านได้เมื่อคุณบันทึกรหัสผ่านไว้</translation>
 <translation id="4479424953165245642">จัดการแอปพลิเคชันคีออสก์</translation>
 <translation id="4479639480957787382">อีเทอร์เน็ต</translation>
 <translation id="4479877282574735775">กำลังกำหนดค่าเครื่องเสมือน อาจใช้เวลาสักครู่</translation>
@@ -2863,7 +2868,6 @@
 <translation id="4849517651082200438">ไม่ต้องติดตั้ง</translation>
 <translation id="4850669014075537160">การเลื่อน</translation>
 <translation id="4850886885716139402">มุมมอง</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> จะแจ้งให้ทราบเมื่อคุณลงชื่อเข้าใช้ด้วยรหัสผ่านที่ไม่รัดกุม</translation>
 <translation id="4853020600495124913">เปิดใน&amp;หน้าต่างใหม่</translation>
 <translation id="4854317507773910281">เลือกบัญชีผู้ปกครองที่จะเป็นผู้อนุมัติ</translation>
 <translation id="485480310608090163">การตั้งค่าและสิทธิ์อื่นๆ</translation>
@@ -3937,6 +3941,7 @@
 <translation id="6298962879096096191">ใช้ Google Play เพื่อติดตั้งแอป Android</translation>
 <translation id="630065524203833229">&amp;ออก</translation>
 <translation id="6300718114348072351">กำหนดค่า <ph name="PRINTER_NAME" /> โดยอัตโนมัติไม่ได้ โปรดระบุรายละเอียดเครื่องพิมพ์ขั้นสูง <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">การแนะนำข้อมูลส่วนบุคคล</translation>
 <translation id="6305607932814307878">นโยบายทั่วโลก:</translation>
 <translation id="6307990684951724544">ระบบกำลังทำงานอื่นอยู่</translation>
 <translation id="6308493641021088955">การลงชื่อเข้าใช้ให้บริการโดย <ph name="EXTENSION_NAME" /></translation>
@@ -4015,6 +4020,7 @@
 <translation id="641081527798843608">หัวเรื่องที่ตรงกัน</translation>
 <translation id="6412673304250309937">ตรวจสอบ URL กับรายการเว็บไซต์ที่ไม่ปลอดภัยซึ่งจัดเก็บไว้ใน Chrome หากเว็บไซต์พยายามขโมยรหัสผ่าน หรือคุณดาวน์โหลดไฟล์ที่เป็นอันตราย Chrome อาจส่ง URL รวมถึงเนื้อหาบางส่วนในหน้าไปยัง Google Safe Browsing ด้วย</translation>
 <translation id="6412931879992742813">หน้าต่างที่ไม่ระบุตัวตนใหม่</translation>
+<translation id="6413591858632097328">การดำเนินการนี้จะล้างข้อมูลและคุกกี้ทั้งหมดที่ <ph name="ORIGIN_NAME" /> จัดเก็บไว้ รวมถึงแอปที่ต้นทางนี้ติดตั้งไว้</translation>
 <translation id="641469293210305670">ติดตั้งอัปเดตและแอป</translation>
 <translation id="6414888972213066896">คุณถามผู้ปกครองแล้วว่าสามารถเข้าชมเว็บไซต์นี้ได้ไหม</translation>
 <translation id="6415900369006735853">เชื่อมต่ออินเทอร์เน็ตผ่านโทรศัพท์</translation>
@@ -4825,7 +4831,6 @@
 <translation id="7530016656428373557">อัตราการใช้ไฟฟ้าเป็นวัตต์</translation>
 <translation id="7531779363494549572">ไปที่การตั้งค่า &gt; แอปและการแจ้งเตือน &gt; การแจ้งเตือน</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ไม่ตอบสนอง เลือก "บังคับปิด" เพื่อปิดแอป</translation>
-<translation id="7536333565791380193">ความปลอดภัยขั้นสูง</translation>
 <translation id="7537451260744431038">เว็บไซต์จะใช้คุกกี้เพื่อปรับปรุงประสบการณ์การท่องเว็บไม่ได้ เช่น ให้คุณลงชื่อเข้าใช้ต่อไปเรื่อยๆ หรือจำรายการในรถเข็นช็อปปิ้ง</translation>
 <translation id="7539856059004947393">คีย์ความปลอดภัยบลูทูธ</translation>
 <translation id="7540972813190816353">เกิดข้อผิดพลาดในขณะทำการตรวจสอบการอัปเดต: <ph name="ERROR" /></translation>
@@ -5066,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />หมายเหตุ:<ph name="END_BOLD" />  ระบบจะเริ่มต้นใหม่ระหว่างการดำเนินการ</translation>
 <translation id="7828731929332799387">การดำเนินการนี้จะลบคุกกี้และข้อมูลเว็บไซต์ทั้งหมดที่มีอยู่ในบริบทของบุคคลที่สาม ต้องการทำต่อไหม</translation>
 <translation id="7829298379596169484">กำลังเข้าถึงอินพุตเสียง</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดลองตรวจสอบการเชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="7829877209233347340">ขอให้ผู้ปกครองลงชื่อเข้าใช้เพื่อให้สิทธิ์ในการเพิ่มบัญชีโรงเรียน</translation>
 <translation id="7830594666202422257">เชื่อมต่อกับ Linux</translation>
 <translation id="7831491651892296503">เกิดข้อผิดพลาดในการกำหนดค่าเครือข่าย</translation>
@@ -5941,7 +5945,6 @@
 <translation id="8966870118594285808">เปิดแท็บอีกครั้งหากปิดไปโดยไม่ได้ตั้งใจ</translation>
 <translation id="8967866634928501045">กด Alt Shift A เพื่อแสดง</translation>
 <translation id="8968766641738584599">บันทึกบัตร</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดรอ 24 ชั่วโมงแล้วลองอีกครั้งหรือ<ph name="BEGIN_LINK" />ตรวจสอบรหัสผ่านในบัญชี Google<ph name="END_LINK" /></translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">โปรดตรวจสอบกับผู้ดูแลระบบเครือข่ายของคุณเพื่อให้แน่ใจว่าไฟร์วอลล์ไม่ได้บล็อกการดาวน์โหลดจากเซิร์ฟเวอร์ของ Google</translation>
 <translation id="8973557916016709913">นำระดับการซูมออก</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 3ba7505..b2b7a00 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -203,7 +203,7 @@
 <translation id="1259152067760398571">Güvenlik kontrolü dün çalıştırıldı</translation>
 <translation id="1260451001046713751"><ph name="HOST" /> sitesindeki pop-up'lara ve yönlendirmelere her zaman izin ver</translation>
 <translation id="126156426083987769">Demo modu cihaz lisanslarıyla ilgili bir sorun oluştu.</translation>
-<translation id="1263490604593716556">Hesap <ph name="FIRST_PARENT_EMAIL" /> ve <ph name="SECOND_PARENT_EMAIL" /> tarafından yönetiliyor. Bu cihazda birincil hesabın oturumunu kapatmak için ekranınızdaki saati tıklayın. Görüntülenen menüde "Oturumu kapat"ı tıklayın.</translation>
+<translation id="1263490604593716556">Hesap, <ph name="FIRST_PARENT_EMAIL" /> ve <ph name="SECOND_PARENT_EMAIL" /> tarafından yönetiliyor. Bu cihazda birincil hesabın oturumunu kapatmak için ekranınızdaki saati tıklayın. Görüntülenen menüde "Oturumu kapat"ı tıklayın.</translation>
 <translation id="126710816202626562">Çeviri dili:</translation>
 <translation id="126768002343224824">16x</translation>
 <translation id="1272079795634619415">Durdur</translation>
@@ -880,7 +880,7 @@
 <translation id="2172784515318616985">Devam</translation>
 <translation id="2173302385160625112">İnternet bağlantınızı kontrol edin</translation>
 <translation id="2173801458090845390">Bu cihaza talep kimliği ekleyin</translation>
-<translation id="2174948148799307353">Hesap <ph name="PARENT_EMAIL" /> tarafından yönetiliyor Bu cihazda birincil hesabın oturumunu kapatmak için ekranınızdaki saati tıklayın. Görüntülenen menüde "Oturumu kapat"ı tıklayın.</translation>
+<translation id="2174948148799307353">Hesap, <ph name="PARENT_EMAIL" /> tarafından yönetiliyor Bu cihazda birincil hesabın oturumunu kapatmak için ekranınızdaki saati tıklayın. Görüntülenen menüde "Oturumu kapat"ı tıklayın.</translation>
 <translation id="2175607476662778685">Hızlı başlat çubuğu</translation>
 <translation id="217576141146192373">Yazıcı eklenemiyor. Lütfen yazıcınızın yapılandırmasını kontrol edip tekrar deneyin.</translation>
 <translation id="2177950615300672361">Gizli Sekmesi: <ph name="TAB_NAME" /></translation>
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Yer işaretleri eklendi</translation>
 <translation id="2343747224442182863">Bu Sekmeyi Odakla</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> adlı yazıcıya 1 sayfa</translation>
-<translation id="2346953515226895098">SODA Hizmeti</translation>
 <translation id="2347644257713614136">Hangouts ve Cast for Education'ın kullanımı Google Gizlilik Politikası'na tabidir.</translation>
 <translation id="2348176352564285430">Uygulama: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Veri yüklenirken hata oluştu</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Bu güvenlik anahtarındaki parmak izleri</translation>
 <translation id="3973660817924297510">Şifreler kontrol ediliyor (<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Alanın sunucusuyla iletişim kurulamadı</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" />, şifrelerinizi kontrol edemiyor. Sonra tekrar deneyin.</translation>
 <translation id="3976108569178263973">Kullanılabilir yazıcı yok.</translation>
 <translation id="397703832102027365">Sonlandırılıyor...</translation>
 <translation id="3977886311744775419">Otomatik güncellemeler bu ağ türünde indirilmez ancak güncellemeleri manuel olarak kontrol edebilirsiniz.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Mırnav</translation>
 <translation id="4423376891418188461">Ayarları Geri Yükle</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, yöneticiniz şifrenizi değiştirmenizi zorunlu tutuyor.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" />, şifrelerinizi kontrol edemiyor. 24 saat sonra tekrar deneyin.</translation>
 <translation id="4429030830601238961">Bu veriler kuruluşunuzun güvenlik politikalarını ihlal ettiğinden yapıştırılamıyor.</translation>
 <translation id="4430019312045809116">Ses</translation>
 <translation id="4430369329743628066">Yer işareti eklendi</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Makine açıldığında bu uygulamayı otomatik olarak başlatmak istiyor musunuz?</translation>
 <translation id="4441147046941420429">Devam etmek için güvenlik anahtarınızı cihazınızdan çıkarıp tekrar takın ve anahtara dokunun.</translation>
 <translation id="444134486829715816">Genişlet...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" />, Google Hesabınızla oturum açtığınızda şifrelerinizi kontrol edebilir.</translation>
 <translation id="4442424173763614572">DNS arama başarısız oldu</translation>
 <translation id="4443536555189480885">&amp;Yardım</translation>
 <translation id="4444304522807523469">USB üzerinden bağlı veya yerel ağda bulunan doküman tarayıcılara erişme</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Bu kodu taramak için telefonunuzda bir QR tarayıcı uygulamasını veya bazı kamera uygulamalarını kullanabilirsiniz.</translation>
 <translation id="4477015793815781985">Ctrl, Alt veya ⌘ tuşuna da basın</translation>
 <translation id="4478664379124702289">Bağl&amp;antıyı Farklı Kaydet...</translation>
-<translation id="4478777936860197922">Kaydedilen şifre yok. <ph name="IDS_SHORT_PRODUCT_NAME" />, kaydetmeniz halinde şifrelerinizi kontrol edebilir.</translation>
 <translation id="4479424953165245642">Kiosk uygulamalarını yönet</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Sanal makine yapılandırılıyor. Bu işlem birkaç dakika sürebilir.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Yükleme</translation>
 <translation id="4850669014075537160">Kaydırma</translation>
 <translation id="4850886885716139402">Görüntüle</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" />, güvenliği ihlal edilmiş bir şifreyle oturum açtığınızda size haber verir</translation>
 <translation id="4853020600495124913">&amp;Yeni pencerede aç</translation>
 <translation id="4854317507773910281">Onay için ebeveyn hesabı seçin</translation>
 <translation id="485480310608090163">Diğer ayarlar ve izinler</translation>
@@ -4838,7 +4832,6 @@
 <translation id="7530016656428373557">Vat Olarak Boşalma Oranı</translation>
 <translation id="7531779363494549572">Ayarlar &gt; Uygulamalar ve bildirimler &gt; Bildirimler'e gidin.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> yanıt vermiyor. Uygulamayı kapatmak için "Uygulamayı kapat"ı seçin.</translation>
-<translation id="7536333565791380193">Gelişmiş güvenlik</translation>
 <translation id="7537451260744431038">Siteler size daha iyi bir göz atma deneyimi sunmak, örneğin, oturumunuzu açık tutmak veya alışveriş sepetinizdeki ürünleri hatırlamak için çerez kullanamaz</translation>
 <translation id="7539856059004947393">Bluetooth güvenlik anahtarı</translation>
 <translation id="7540972813190816353">Güncelleme olup olmadığı kontrol edilirken bir hata oluştu: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Not:<ph name="END_BOLD" /> İşlem sırasında sistem yeniden başlatılacaktır</translation>
 <translation id="7828731929332799387">Bu, üçüncü taraf bağlamında mevcut tüm çerezleri ve site verilerini siler. Devam etmek istiyor musunuz?</translation>
 <translation id="7829298379596169484">Ses girişine erişiliyor</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" />, şifrelerinizi kontrol edemiyor. İnternet bağlantınızı kontrol etmeyi deneyin.</translation>
 <translation id="7829877209233347340">Bir ebeveynden okul hesabı ekleme izni vermesi için oturum açmasını isteyin</translation>
 <translation id="7830594666202422257">Linux'a bağlan</translation>
 <translation id="7831491651892296503">Ağ yapılandırılırken hata oluştu</translation>
@@ -5953,7 +5945,6 @@
 <translation id="8966870118594285808">Bir sekmeyi yanlışlıkla kapattıysanız yeniden açın</translation>
 <translation id="8967866634928501045">Göstermek için Alt+Üst Karakter+A tuşlarına basın</translation>
 <translation id="8968766641738584599">Kartı kaydet</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" />, şifrelerinizi kontrol edemiyor. 24 saat sonra tekrar deneyin veya <ph name="BEGIN_LINK" />şifreleri Google Hesabınızda kontrol edin<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Güvenlik duvarının, Google sunucularından yapılan indirme işlemlerini engellemediğinden emin olmak için lütfen ağ yöneticinizle görüşün.</translation>
 <translation id="8973557916016709913">Yakınlaştırma seviyesini kaldır</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index bc5fae9..aab87877 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">Закладки додано</translation>
 <translation id="2343747224442182863">Виділити цю вкладку</translation>
 <translation id="2345723121311404059">Друк 1 сторінки на <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Сервіс SODA</translation>
 <translation id="2347644257713614136">Використання Hangouts і Cast for Education регулюється Політикою конфіденційності Google.</translation>
 <translation id="2348176352564285430">Додаток: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Не вдалося завантажити дані</translation>
@@ -2286,7 +2285,6 @@
 <translation id="3971764089670057203">Цифрові відбитки на цьому ключі безпеки</translation>
 <translation id="3973660817924297510">Перевірка паролів (<ph name="CHECKED_PASSWORDS" /> з <ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Не вдалося зв'язатися із сервером для цієї області</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може перевірити паролі. Повторіть спробу пізніше.</translation>
 <translation id="3976108569178263973">Немає доступних принтерів.</translation>
 <translation id="397703832102027365">Завершення...</translation>
 <translation id="3977886311744775419">Автоматичні оновлення не завантажуються в цьому типі мережі, але ви можете пошукати їх вручну.</translation>
@@ -2587,7 +2585,6 @@
 <translation id="4421932782753506458">Киця</translation>
 <translation id="4423376891418188461">Відновити налаштування</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, ваш адміністратор просить змінити пароль.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може перевірити паролі. Повторіть спробу через 24 години.</translation>
 <translation id="4429030830601238961">Ці дані порушують правила безпеки вашої організації, їх неможливо вставити.</translation>
 <translation id="4430019312045809116">Гучність</translation>
 <translation id="4430369329743628066">Закладку додано</translation>
@@ -2600,7 +2597,6 @@
 <translation id="4441124369922430666">Запускати цю програму автоматично під час увімкнення комп’ютера?</translation>
 <translation id="4441147046941420429">Щоб продовжити, вийміть і знову вставте ключ безпеки, а потім торкніться його</translation>
 <translation id="444134486829715816">Розгорнути...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> зможе перевірити ваші паролі, коли ви ввійдете у свій обліковий запис Google</translation>
 <translation id="4442424173763614572">Помилка пошуку DNS</translation>
 <translation id="4443536555189480885">&amp;Довідка</translation>
 <translation id="4444304522807523469">Отримувати доступ до сканерів документів, під’єднаних через USB або локальну мережу</translation>
@@ -2627,7 +2623,6 @@
 <translation id="4476659815936224889">Ви можете зісканувати цей код за допомогою QR-сканера на телефоні або в деяких додатках для камери.</translation>
 <translation id="4477015793815781985">Натискайте Ctrl, Alt або ⌘</translation>
 <translation id="4478664379124702289">Зберегти посиланн&amp;я як...</translation>
-<translation id="4478777936860197922">Немає збережених паролів. <ph name="IDS_SHORT_PRODUCT_NAME" /> зможе перевірити ваші паролі, коли ви їх збережете.</translation>
 <translation id="4479424953165245642">Керувати додатками-терміналами</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Налаштовується віртуальна машина. Це може тривати кілька хвилин.</translation>
@@ -2873,7 +2868,6 @@
 <translation id="4849517651082200438">Не встановлювати</translation>
 <translation id="4850669014075537160">Прокручування</translation>
 <translation id="4850886885716139402">Перегляд</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> сповістить, коли ви ввійдете в обліковий запис за допомогою зламаного пароля</translation>
 <translation id="4853020600495124913">Відкрити в &amp;новому вікні</translation>
 <translation id="4854317507773910281">Вибери батьківський обліковий запис, який має надати дозвіл</translation>
 <translation id="485480310608090163">Додаткові налаштування та дозволи</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Швидкість розряджання акумулятора у ватах</translation>
 <translation id="7531779363494549572">Перейдіть у меню "Налаштування" &gt; "Додатки та сповіщення" &gt; "Сповіщення".</translation>
 <translation id="7532009420053991888">Додаток <ph name="LINUX_APP_NAME" /> не відповідає. Щоб закрити його, виберіть опцію "Примусово закрити".</translation>
-<translation id="7536333565791380193">Розширені налаштування безпеки</translation>
 <translation id="7537451260744431038">Сайти не можуть використовувати файли cookie, щоб покращувати веб-перегляд, наприклад не виходити з облікового запису чи запам'ятовувати товари в кошику для покупок</translation>
 <translation id="7539856059004947393">Ключ безпеки Bluetooth</translation>
 <translation id="7540972813190816353">Під час перевірки наявності оновлень сталася помилка: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Примітка.<ph name="END_BOLD" /> Під час процедури система перезавантажиться.</translation>
 <translation id="7828731929332799387">Буде видалено всі файли cookie та дані із сайтів, доступні в ресурсах третіх сторін. Продовжити?</translation>
 <translation id="7829298379596169484">Отримання доступу до аудіовходу</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може перевірити паролі. Перевірте інтернет-з'єднання.</translation>
 <translation id="7829877209233347340">Щоб додати обліковий запис навчального закладу, попросіть когось із батьків увійти в їхній обліковий запис</translation>
 <translation id="7830594666202422257">Підключити до Linux</translation>
 <translation id="7831491651892296503">Помилка налаштування мережі</translation>
@@ -5953,7 +5945,6 @@
 <translation id="8966870118594285808">Відкрийте вкладку знову, якщо ви випадково закрили її</translation>
 <translation id="8967866634928501045">Натисніть Alt + Shift + A, щоб показати</translation>
 <translation id="8968766641738584599">Зберегти картку</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> не може перевірити паролі. Повторіть спробу через 24 години або <ph name="BEGIN_LINK" />перевірте паролі в обліковому записі Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Зверніться до адміністратора мережі, щоб переконатися, що брандмауер не блокує завантаження із серверів Google.</translation>
 <translation id="8973557916016709913">Вилучити масштабування</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index bbfb368..090ce01 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -1012,7 +1012,6 @@
 <translation id="2342740338116612727">بُک مارکس شامل کر دیے گئے</translation>
 <translation id="2343747224442182863">اس ٹیب کو فوکس کریں</translation>
 <translation id="2345723121311404059"><ph name="PRINTER_NAME" /> کیلئے 1 صفحہ</translation>
-<translation id="2346953515226895098">‏SODA سروس</translation>
 <translation id="2347644257713614136">‏Hangouts اور Cast for Education کا استعمال Google کی رازداری کی پالیسی کے زیر انتظام ہے۔</translation>
 <translation id="2348176352564285430">ایپ: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">ڈیٹا کو لوڈ کرنے میں خرابی</translation>
@@ -2288,7 +2287,6 @@
 <translation id="3971764089670057203">اس سیکیورٹی کلید کے ساتھ مندرج فنگر پرنٹس</translation>
 <translation id="3973660817924297510">(<ph name="TOTAL_PASSWORDS" /> میں سے<ph name="CHECKED_PASSWORDS" />) پاس ورڈز چیک ہو رہے ہیں…</translation>
 <translation id="3975565978598857337">دائرہ کار کے لیے سرور سے منسلک ہونا ناکام ہو گیا</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> آپ کے پاس ورڈز چیک نہیں کر سکتا ہے۔ بعد میں دوبارہ کوشش کریں۔</translation>
 <translation id="3976108569178263973">پرنٹرز دستیاب نہیں ہیں۔</translation>
 <translation id="397703832102027365">مکمل کیا جا رہا ہے…</translation>
 <translation id="3977886311744775419">خودکار اپ ڈیٹس نیٹ ورک کی اس قسم پر ڈاؤن لوڈ نہیں ہوتے ہیں، لیکن آپ دستی طور پر اپ ڈیٹس چیک کر سکتے ہیں۔</translation>
@@ -2589,7 +2587,6 @@
 <translation id="4421932782753506458">Fluffy</translation>
 <translation id="4423376891418188461">ترتیبات بحال کریں</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />، آپ کا منتظم آپ سے اپنا پاس ورڈ تبدیل کرنے کا مطالبہ کرتا ہے۔</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> آپ کے پاس ورڈز چیک نہیں کر سکتا ہے۔ 24 گھنٹے بعد دوبارہ کوشش کریں۔</translation>
 <translation id="4429030830601238961">یہ ڈیٹا آپ کی تنظیم کی سکیورٹی کی پالیسیوں کی خلاف ورزی کرتا ہے اور پیسٹ نہیں کیا جا سکتا۔</translation>
 <translation id="4430019312045809116">والیوم</translation>
 <translation id="4430369329743628066">بُک مارک شامل کر دیا گیا</translation>
@@ -2602,7 +2599,6 @@
 <translation id="4441124369922430666">کیا آپ مشین آن ہونے پر اس ایپ کو خودکار طور پر شروع کرنا چاہتے ہیں؟</translation>
 <translation id="4441147046941420429">جاری رکھنے کے لیے، اپنے آلہ سے اپنی سیکیورٹی کلید ہٹائیں، پھر اس کو دوبارہ داخل اور ٹچ کریں</translation>
 <translation id="444134486829715816">پھیلائیں…</translation>
-<translation id="4442329324652245220">‏جب آپ اپنے Google اکاؤنٹ سے سائن ان ہوتے ہیں تو <ph name="IDS_SHORT_PRODUCT_NAME" /> آپ کے پاس ورڈز کو چیک کر سکتا ہے</translation>
 <translation id="4442424173763614572">‏DNS کی تلاش ناکام ہو گئی</translation>
 <translation id="4443536555189480885">&amp;مدد</translation>
 <translation id="4444304522807523469">‏USB کے ذریعے یا مقامی نیٹ ورک پر منسلک دستاویز اسکینرز تک رسائی حاصل کریں</translation>
@@ -2629,7 +2625,6 @@
 <translation id="4476659815936224889">‏یہ کوڈ اسکین کرنے کیلئے، آپ اپنے فون یا کچھ کیمرا ایپس پر ایک QR اسکینر ایپ کا استعمال کر سکتے ہیں۔</translation>
 <translation id="4477015793815781985">‏Ctrl، Alt یا ⌘ شامل کریں</translation>
 <translation id="4478664379124702289">&amp;لنک محفوظ کریں بطور…</translation>
-<translation id="4478777936860197922">کوئی محفوظ کردہ پاس ورڈ نہیں۔ جب آپ پاس ورڈز کو محفوظ کرتے ہیں تو <ph name="IDS_SHORT_PRODUCT_NAME" /> انہیں چیک کر سکتا ہے۔</translation>
 <translation id="4479424953165245642">کیوسک ایپلیکیشنز کا نظم کریں</translation>
 <translation id="4479639480957787382">ایتھرنیٹ</translation>
 <translation id="4479877282574735775">ورچوئل مشین ترتیب دی جا رہی ہے۔ اس میں چند منٹ لگ سکتے ہیں۔</translation>
@@ -2875,7 +2870,6 @@
 <translation id="4849517651082200438">انسٹال نہ کریں</translation>
 <translation id="4850669014075537160">سکرولنگ</translation>
 <translation id="4850886885716139402">دیکھیں</translation>
-<translation id="485197095346966382">جب آپ کسی متاثرہ پاس ورڈ سے سائن ان کریں گے تو <ph name="IDS_SHORT_PRODUCT_NAME" /> آپ کو مطلع کرے گا</translation>
 <translation id="4853020600495124913">&amp;نئی ونڈو میں کھولیں</translation>
 <translation id="4854317507773910281">منظوری کے لیے والد/والدہ کا اکاؤنٹ منتخب کریں</translation>
 <translation id="485480310608090163">مزید ترتیبات اور اجازتیں</translation>
@@ -4839,7 +4833,6 @@
 <translation id="7530016656428373557">واٹس میں ڈسچارج ہونے کی شرح</translation>
 <translation id="7531779363494549572">ترتیبات &gt; ایپس اور اطلاعات &gt; اطلاعات پر جائیں۔</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> جواب نہیں دے رہی ہے۔ ایپ بند کرنے کیلئے، "زبردستی بند کریں" منتخب کریں۔</translation>
-<translation id="7536333565791380193">اعلی درجے کی سیکیورٹی</translation>
 <translation id="7537451260744431038">سائٹس آپ کے براؤزنگ کے تجربہ کو، مثال کے طور پر، آپ کو سائن ان رکھنے یا آپ کی شاپنگ کارٹ میں آئٹمز کو یاد رکھنے کے لیے، بہتر بنانے کے لیے کوکیز کا استعمال نہیں کر سکتی ہیں</translation>
 <translation id="7539856059004947393">بلوٹوتھ سیکیورٹی کلید</translation>
 <translation id="7540972813190816353">اپ ڈیٹس کو چیک کرتے وقت ایک خرابی پیش آ گئی: <ph name="ERROR" /></translation>
@@ -5081,7 +5074,6 @@
     <ph name="BEGIN_BOLD" />نوٹ:<ph name="END_BOLD" />  کارروائی کے دوران سسٹم ریبوٹ کرے گا۔</translation>
 <translation id="7828731929332799387">اس سے فریق ثالث کے سیاق و سباق میں دستیاب تمام کوکیز اور سائٹ کا ڈیٹا حذف ہو جائے گا۔ کیا آپ جاری رکھنا چاہتے ہیں؟</translation>
 <translation id="7829298379596169484">آڈیو ان پٹ تک رسائی ہو رہی ہے</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> آپ کے پاس ورڈز چیک نہیں کر سکتا ہے۔ اپنا انٹرنیٹ کنکشن چیک کرنے کی کوشش کریں۔</translation>
 <translation id="7829877209233347340">والدین سے اسکول اکاؤنٹ شامل کرنے کی اجازت دینے کے ليے سائن ان کرنے کو کہیں</translation>
 <translation id="7830594666202422257">‏Linux سے منسلک ہوں</translation>
 <translation id="7831491651892296503">نیٹ ورک کو ترتیب دینے میں خرابی</translation>
@@ -5955,7 +5947,6 @@
 <translation id="8966870118594285808">اگر آپ نے کسی ٹیب کو حادثاتی طور پر بند کر دیا ہے تو اسے دوبارہ کھولیں</translation>
 <translation id="8967866634928501045">‏دکھانے کے لیے Alt Shift A دبائیں</translation>
 <translation id="8968766641738584599">کارڈ کو محفوظ کریں</translation>
-<translation id="8971800409073702505">‏<ph name="IDS_SHORT_PRODUCT_NAME" /> آپ کے پاس ورڈز چیک نہیں کر سکتا ہے۔ 24 گھنٹے بعد دوبارہ کوشش کریں یا <ph name="BEGIN_LINK" />اپنے Google اکاؤنٹ میں پاس ورڈز چیک کریں<ph name="END_LINK" />۔</translation>
 <translation id="89720367119469899">چھوڑیں</translation>
 <translation id="8972513834460200407">‏براہ کرم اپنے نیٹ ورک کے منتظم سے چیک کر کے یقینی بنائیں کہ فائر وال Google سرورز سے ڈاؤن لوڈز کو مسدود نہیں کر رہا ہے۔</translation>
 <translation id="8973557916016709913">زوم کی سطح کو ہٹائیں</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 0aea2c5..3f71598 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -1009,7 +1009,6 @@
 <translation id="2342740338116612727">Bukmarklar biriktirildi</translation>
 <translation id="2343747224442182863">Shu varaqni fokuslash</translation>
 <translation id="2345723121311404059">1 ta sahifa <ph name="PRINTER_NAME" /> printeriga yuborildi</translation>
-<translation id="2346953515226895098">SODA xizmati</translation>
 <translation id="2347644257713614136">Ta’lim muassasalari uchun Hangouts va Cast xizmatlaridan foydalanish Google maxfiylik siyosati bilan tartibga solinadi.</translation>
 <translation id="2348176352564285430">Ilova: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Maʼlumotlarni yuklashda xatolik yuz berdi</translation>
@@ -1857,7 +1856,7 @@
 <translation id="3468999815377931311">Android telefon</translation>
 <translation id="3470442499439619530">Bu foydalanuvchini o‘chirish</translation>
 <translation id="3471876058939596279">HDMI va USB Type-C portlari birdaniga video chiqara olmaydi. Boshqa video portga ulang.</translation>
-<translation id="3473241910002674503">Planshet rejimida bosh ekranga oʻtish, oldingi ekranga qaytish va ilovalararo almashish uchun tugmalar paydo chiqadi.</translation>
+<translation id="3473241910002674503">Planshet rejimida bosh ekranga oʻtish, oldingi ekranga qaytish va ilovalararo almashish uchun tugmalar chiqadi.</translation>
 <translation id="3473479545200714844">Ekran lupasi</translation>
 <translation id="3475843873335999118">Barmoq izi aniqlanmadi. Parolingizni kiriting.</translation>
 <translation id="3476303763173086583">Foydalanish va diagnostika axborotini yuborish. Diagnostika hamda qurilma va ilovadan foydalanish statistikasini Google kompaniyasiga avtomatik yuborish orqali Androidni yaxshilashga yordam bering. Ushbu axborotdan farzandingiz shaxsini aniqlash uchun foydalanilmaydi. Ular tizim va ilovalar barqarorligi kabilarni yaxshilash uchun ishlatiladi. Ayrim toʻplangan maʼlumotlar Android dasturchilar kabi hamkorlarimizga ham oʻz ilovalari va mahsulotlarini yanada yaxshilashga yordam beradi. Bu <ph name="BEGIN_LINK1" />parametr<ph name="END_LINK1" /> qurilma egasi tomonidan oʻrnatilgan. Qurilma egasi undagi foydalanish haqidagi va diagnostika axborotini Google serverlariga avtomatik yuborilishini tayinlashi mumkin. Agar farzandingiz uchun Kengaytirilgan veb-qidiruv va ilovalar tarixi yoqilgan boʻlsa, bu maʼlumotlar uning Google hisobiga saqlanadi. <ph name="BEGIN_LINK2" />Batafsil<ph name="END_LINK2" /></translation>
@@ -2284,7 +2283,6 @@
 <translation id="3971764089670057203">Bu elektron kalitdagi barmoq izlari</translation>
 <translation id="3973660817924297510">Parollar tekshirilmoqda (<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Server kiritilgan domenga ulanmadi</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> parollaringizni tekshira olmadi. Keyinroq qayta urining.</translation>
 <translation id="3976108569178263973">Hech qanday printer topilmadi.</translation>
 <translation id="397703832102027365">Yakunlanmoqda...</translation>
 <translation id="3977886311744775419">Bunday turdagi tarmoq orqali yangilanishlarni avtomatik yuklab olish imkonsiz, lekin yangilanishlarni oʻzingiz tekshirib koʻrishingiz mumkin.</translation>
@@ -2585,7 +2583,6 @@
 <translation id="4421932782753506458">Momiqvoy</translation>
 <translation id="4423376891418188461">Dastlabki sozlamalarni tiklash</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, administratoringiz parolingizni o‘zgartirishni so‘rayapti.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> parollaringizni tekshira olmadi. 24 soatdan keyin qayta urining.</translation>
 <translation id="4429030830601238961">Bu maʼlumotlar tashkilot xavfsizlik siyosatiga zid va joylanmaydi.</translation>
 <translation id="4430019312045809116">Hajmi</translation>
 <translation id="4430369329743628066">Xatcho‘p qo‘shildi</translation>
@@ -2598,7 +2595,6 @@
 <translation id="4441124369922430666">Qurilma yoqilganda bu ilova avtomatik ishga tushirilsinmi?</translation>
 <translation id="4441147046941420429">Davom etish uchun qurilmangizdan elektron kalitni olib tashlang, keyin qayta kiritib, undagi tugmani bosing</translation>
 <translation id="444134486829715816">Yoyish...</translation>
-<translation id="4442329324652245220">Google hisobingizga kirsangiz, <ph name="IDS_SHORT_PRODUCT_NAME" /> parollaringizni tekshira oladi.</translation>
 <translation id="4442424173763614572">DNS topilmadi</translation>
 <translation id="4443536555189480885">&amp;Yordam</translation>
 <translation id="4444304522807523469">USB-port yoki tarmoq orqali ulanilgan skanerga ruxsat</translation>
@@ -2625,7 +2621,6 @@
 <translation id="4476659815936224889">QR kodni telefoningizdagi mos autentifikator yoki kamera ilovasi yordamida skanerlang.</translation>
 <translation id="4477015793815781985">Birikma Ctrl, Alt yoki ⌘ tugmalaridan iborat bo‘lishi zarur</translation>
 <translation id="4478664379124702289">&amp;Havolani saqlab olish...</translation>
-<translation id="4478777936860197922">Hech qanday parol saqlanmagan. <ph name="IDS_SHORT_PRODUCT_NAME" /> faqat saqlangan parollaringizni tekshira oladi.</translation>
 <translation id="4479424953165245642">Kiosk dasturlarni boshqarish</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Virtual mashina sozlanmoqda. Bu bir necha daqiqa vaqt olishi mumkin.</translation>
@@ -2871,7 +2866,6 @@
 <translation id="4849517651082200438">O‘rnatilmasin</translation>
 <translation id="4850669014075537160">Sahifani aylantirish</translation>
 <translation id="4850886885716139402">Ko‘rish</translation>
-<translation id="485197095346966382">Google hisobingizga kirsangiz, <ph name="IDS_SHORT_PRODUCT_NAME" /> oshkor qilingan parollar haqida xabar qiladi</translation>
 <translation id="4853020600495124913">Yangi oynada &amp;ochish</translation>
 <translation id="4854317507773910281">Ruxsat olish uchun ota-onangiz hisobini tanlang</translation>
 <translation id="485480310608090163">Yana sozlamalar va ruxsatlar</translation>
@@ -4835,7 +4829,6 @@
 <translation id="7530016656428373557">Quvvatsizlantirish tezligi Vattda</translation>
 <translation id="7531779363494549572">Sozlamalar &gt; Ilovalar va bildirishnomalar &gt; Bildirishnomalar sahifasini oching.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> javob bermayapti Ilovani “Majburiy toʻxtatish” orqali yoping.</translation>
-<translation id="7536333565791380193">Kengaytirilgan himoya</translation>
 <translation id="7537451260744431038">Saytlar sahifalarni kezishingizni yaxshilash, jumladan, kirish axborotingiz yoki xarid qutingizni eslab qolish uchun cookie fayllardan foydalana olmaydi</translation>
 <translation id="7539856059004947393">Bluetooth elektron kalit</translation>
 <translation id="7540972813190816353">Yangilanishlarni tekshirish vaqtida xatolik yuz berdi: <ph name="ERROR" /></translation>
@@ -5075,7 +5068,6 @@
     <ph name="BEGIN_BOLD" />Eslatma:<ph name="END_BOLD" />  Sozlash vaqtida tizim qaytadan ishga tushiriladi.</translation>
 <translation id="7828731929332799387">Bunda tashqi saytlardagi barcha cookie fayllari va sayt maʼlumotlari tozalanadi. Davom ettirilsinmi?</translation>
 <translation id="7829298379596169484">Audio-kirish qurilmasi faollashtirildi</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> parollaringizni tekshira olmadi. Internet aloqasini tekshiring.</translation>
 <translation id="7829877209233347340">Ota-onangizdan hisoblariga kirib maktab hisobingizni kiritishga ruxsat berishlarini soʻrang</translation>
 <translation id="7830594666202422257">Linuxga ulanish</translation>
 <translation id="7831491651892296503">Tarmoqni sozlashda xatolik yuz berdi</translation>
@@ -5292,7 +5284,7 @@
 <translation id="8107015733319732394">Google Market <ph name="DEVICE_TYPE" /> qurilmangizga o‘rnatilmoqda. Bu bir necha daqiqa oladi.</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{Tashqi cookie fayllar yoʻq}=1{1 ta tashqi cookie fayl bloklandi}other{# ta tashqi cookie fayl bloklandi}}</translation>
 <translation id="810875025413331850">Yaqin-atrofda hech qanday qurilma topilmadi.</translation>
-<translation id="8114199541033039755">Planshet rejimida bosh ekranga oʻtish, oldingi ekranga qaytish va ilovalararo almashish uchun tugmalar paydo chiqadi. ChromeVox (teskari aloqa) yoki avtomatik bosishlar yoniqligida ishlaydi.</translation>
+<translation id="8114199541033039755">Planshet rejimida bosh ekranga oʻtish, oldingi ekranga qaytish va ilovalararo almashish uchun tugmalar chiqadi. ChromeVox (teskari aloqa) yoki avtomatik kliklar yoniqligida ishlaydi.</translation>
 <translation id="8114875720387900039">Gorizontal ajratish</translation>
 <translation id="8116972784401310538">&amp;Xatcho‘plar menejeri</translation>
 <translation id="8117620576188476503">Ulanishlar, yangilanishlar va sozlamalarni holat qatoridan boshqarish. Bu oynani Alt+Shift+S tugmalar birikmasini bosib ochishingiz mumkin.</translation>
@@ -5949,7 +5941,6 @@
 <translation id="8966870118594285808">Adashib yopilgan varaqlarni qayta tiklash</translation>
 <translation id="8967866634928501045">Ko‘rsatish uchun Alt+Shift+A tugmalarini bosing</translation>
 <translation id="8968766641738584599">Karta eslab qolinsin</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> parollaringizni tekshira olmadi. 24 soatdan keyin qayta urining yoki <ph name="BEGIN_LINK" />Google hisobingizdagi parollarni tekshiring<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">O‘chirib qo‘yish</translation>
 <translation id="8972513834460200407">Administratordan havfsizlik devori Google serverlaridan fayllar yuklab olinishi bloklanish holatini so‘rang.</translation>
 <translation id="8973557916016709913">Masshtabni bekor qilish</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index a7dfe7f..a447139 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -1003,7 +1003,6 @@
 <translation id="2342740338116612727">Đã thêm dấu trang</translation>
 <translation id="2343747224442182863">Lấy tiêu điểm tab này</translation>
 <translation id="2345723121311404059">1 trang tới <ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Dịch vụ SODA</translation>
 <translation id="2347644257713614136">Việc sử dụng Hangouts và Cast for Education chịu sự điều chỉnh của Chính sách quyền riêng tư của Google.</translation>
 <translation id="2348176352564285430">Ứng dụng: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Lỗi khi tải dữ liệu</translation>
@@ -2276,7 +2275,6 @@
 <translation id="3971764089670057203">Vân tay số trên khóa bảo mật này</translation>
 <translation id="3973660817924297510">Đang kiểm tra mật khẩu (<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Không kết nối được với máy chủ của vùng</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> không thể kiểm tra mật khẩu của bạn. Hãy thử lại sau.</translation>
 <translation id="3976108569178263973">Không có máy in nào.</translation>
 <translation id="397703832102027365">Đang hoàn tất...</translation>
 <translation id="3977886311744775419">Các bản cập nhật tự động không tải xuống trên loại mạng này, nhưng bạn có thể kiểm tra các bản cập nhật theo cách thủ công.</translation>
@@ -2577,7 +2575,6 @@
 <translation id="4421932782753506458">Mèo con dễ thương</translation>
 <translation id="4423376891418188461">Khôi phục cài đặt</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, quản trị viên của bạn yêu cầu bạn thay đổi mật khẩu của mình.</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> không thể kiểm tra mật khẩu của bạn. Hãy thử lại sau 24 giờ.</translation>
 <translation id="4429030830601238961">Dữ liệu này vi phạm chính sách bảo mật của tổ chức bạn nên không thể dán được.</translation>
 <translation id="4430019312045809116">Âm lượng</translation>
 <translation id="4430369329743628066">Đã thêm dấu trang</translation>
@@ -2590,7 +2587,6 @@
 <translation id="4441124369922430666">Bạn có muốn tự động khởi động ứng dụng này khi máy bật không?</translation>
 <translation id="4441147046941420429">Để tiếp tục, hãy rút khóa bảo mật khỏi thiết bị rồi cắm lại và chạm vào khóa đó</translation>
 <translation id="444134486829715816">Mở rộng...</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> có thể kiểm tra mật khẩu khi bạn đăng nhập bằng Tài khoản Google của mình</translation>
 <translation id="4442424173763614572">Tìm kiếm DNS không thành công</translation>
 <translation id="4443536555189480885">&amp;Trợ giúp</translation>
 <translation id="4444304522807523469">Truy cập máy quét tài liệu được lắp qua USB hoặc trên mạng cục bộ</translation>
@@ -2617,7 +2613,6 @@
 <translation id="4476659815936224889">Bạn có thể dùng ứng dụng trình quét QR trên điện thoại hoặc một số ứng dụng máy ảnh để quét mã này.</translation>
 <translation id="4477015793815781985">Bao gồm phím Ctrl, Alt hoặc ⌘</translation>
 <translation id="4478664379124702289">Lưu Liên &amp;kết Dưới dạng...</translation>
-<translation id="4478777936860197922">Bạn chưa lưu mật khẩu nào. <ph name="IDS_SHORT_PRODUCT_NAME" /> có thể kiểm tra các mật khẩu của bạn khi bạn lưu các mật khẩu đó.</translation>
 <translation id="4479424953165245642">Quản lý ứng dụng kiosk</translation>
 <translation id="4479639480957787382">Ethernet</translation>
 <translation id="4479877282574735775">Đang định cấu hình máy ảo. Quá trình này có thể mất vài phút.</translation>
@@ -2863,7 +2858,6 @@
 <translation id="4849517651082200438">Không cài đặt</translation>
 <translation id="4850669014075537160">Cuộn</translation>
 <translation id="4850886885716139402">Xem</translation>
-<translation id="485197095346966382"><ph name="IDS_SHORT_PRODUCT_NAME" /> sẽ thông báo khi bạn đăng nhập bằng mật khẩu bị lộ</translation>
 <translation id="4853020600495124913">Mở trong &amp;cửa sổ mới</translation>
 <translation id="4854317507773910281">Chọn tài khoản của cha mẹ sẽ dùng để phê duyệt</translation>
 <translation id="485480310608090163">Các quyền và tùy chọn cài đặt khác</translation>
@@ -4825,7 +4819,6 @@
 <translation id="7530016656428373557">Tốc độ phóng điện tính bằng Watt</translation>
 <translation id="7531779363494549572">Chuyển đến Cài đặt &gt; Ứng dụng và thông báo &gt; Thông báo.</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> hiện không phản hồi. Hãy chọn "Buộc đóng" để đóng ứng dụng.</translation>
-<translation id="7536333565791380193">Bảo mật nâng cao</translation>
 <translation id="7537451260744431038">Các trang web không thể dùng cookie để cải thiện trải nghiệm duyệt web của bạn, chẳng hạn như để duy trì trạng thái đăng nhập hoặc ghi nhớ các mục có trong giỏ hàng</translation>
 <translation id="7539856059004947393">Khóa bảo mật Bluetooth</translation>
 <translation id="7540972813190816353">Đã xảy ra lỗi khi kiểm tra cập nhật: <ph name="ERROR" /></translation>
@@ -5066,7 +5059,6 @@
     <ph name="BEGIN_BOLD" />Lưu ý:<ph name="END_BOLD" />  Hệ thống sẽ khởi động lại trong quá trình này.</translation>
 <translation id="7828731929332799387">Thao tác này sẽ xóa tất cả dữ liệu trang web và cookie có trong ngữ cảnh của bên thứ ba. Bạn có muốn tiếp tục không?</translation>
 <translation id="7829298379596169484">Đang truy cập thiết bị đầu vào âm thanh</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> không thể kiểm tra mật khẩu của bạn. Hãy thử kiểm tra kết nối Internet.</translation>
 <translation id="7829877209233347340">Đề nghị cha mẹ đăng nhập để cấp quyền thêm một tài khoản trường học</translation>
 <translation id="7830594666202422257">Kết nối với Linux</translation>
 <translation id="7831491651892296503">Lỗi khi định cấu hình mạng</translation>
@@ -5941,7 +5933,6 @@
 <translation id="8966870118594285808">Mở lại một tab nếu bạn vô tình đóng tab đó</translation>
 <translation id="8967866634928501045">Nhấn tổ hợp phím Alt+Shift+A để hiển thị</translation>
 <translation id="8968766641738584599">Lưu thẻ</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> không thể kiểm tra mật khẩu của bạn. Hãy thử lại sau 24 giờ hoặc <ph name="BEGIN_LINK" />kiểm tra các mật khẩu trong Tài khoản Google của bạn<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">Thoát</translation>
 <translation id="8972513834460200407">Vui lòng kiểm tra với quản trị viên mạng của bạn để đảm bảo rằng tường lửa không chặn tài nguyên đã tải xuống từ máy chủ của Google.</translation>
 <translation id="8973557916016709913">Xóa mức thu phóng</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index b874cb78..e7dd3d3 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -67,7 +67,7 @@
 <translation id="1076818208934827215">Microsoft Internet Explorer</translation>
 <translation id="1079766198702302550">始终禁止使用摄像头</translation>
 <translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" />要将您的 Chrome 设置恢复为原始默认设置。这不仅会重置您的主页、“打开新的标签页”页面和搜索引擎,而且还会禁用您的扩展程序并取消固定所有标签页。此外,其他临时数据和缓存的数据(例如 Cookie、内容和网站数据)也将被清除。</translation>
-<translation id="1084096383128641877">移除此密码不会删除您在 <ph name="DOMAIN" /> 上的帐号。要保护您在 <ph name="DOMAIN_LINK" /> 上的帐号免遭他人盗用,请更改您的密码或删除该帐号。</translation>
+<translation id="1084096383128641877">移除此密码不会删除您在 <ph name="DOMAIN" /> 上的帐号。如需保护您在 <ph name="DOMAIN_LINK" /> 上的帐号免遭他人盗用,请更改您的密码或删除该帐号。</translation>
 <translation id="1084824384139382525">复制链接地址(&amp;E)</translation>
 <translation id="1085697365578766383">启动虚拟机时出错。请重试。</translation>
 <translation id="1090126737595388931">没有任何后台应用在运行</translation>
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">书签名称</translation>
 <translation id="1124772482545689468">用户</translation>
 <translation id="1125550662859510761">有效分辨率:<ph name="WIDTH" /> x <ph name="HEIGHT" />(原生)</translation>
+<translation id="1126809382673880764">不会保护您免受危险网站、下载内容和扩展程序的侵害。在 Gmail 和 Google 搜索等其他 Google 服务中,若安全浏览保护可用,您仍将获得该保护。</translation>
 <translation id="1128109161498068552">禁止任何网站使用系统专有消息访问 MIDI 设备</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">修改搜索引擎</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">已知网络</translation>
 <translation id="123578888592755962">磁盘已满</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">显示个人信息输入建议</translation>
 <translation id="1239594683407221485">在“文件”应用中浏览此设备上的内容。</translation>
 <translation id="124116460088058876">更多语言</translation>
 <translation id="1241753985463165747">调用时可读取和更改您在当前网站上的所有数据</translation>
@@ -201,7 +203,7 @@
 <translation id="1259152067760398571">昨天运行过安全检查</translation>
 <translation id="1260451001046713751">始终允许 <ph name="HOST" /> 显示弹出式窗口和重定向</translation>
 <translation id="126156426083987769">演示模式设备许可出问题了。</translation>
-<translation id="1263490604593716556">该帐号由 <ph name="FIRST_PARENT_EMAIL" /> 和 <ph name="SECOND_PARENT_EMAIL" /> 管理。要在此设备上退出主帐号,请点击屏幕上的时间。在随即显示的菜单中,点击“退出”。</translation>
+<translation id="1263490604593716556">该帐号由 <ph name="FIRST_PARENT_EMAIL" /> 和 <ph name="SECOND_PARENT_EMAIL" /> 管理。如需在此设备上退出主帐号,请点击屏幕上的时间。在随即显示的菜单中,点击“退出”。</translation>
 <translation id="126710816202626562">翻译语言:</translation>
 <translation id="126768002343224824">16 倍</translation>
 <translation id="1272079795634619415">停止</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">移动网络激活</translation>
 <translation id="1407489512183974736">居中并裁剪</translation>
 <translation id="1408504635543854729">在“文件”应用中浏览此设备上的内容。相关内容受到管理员的限制,无法修改。</translation>
+<translation id="1408980562518920698">管理个人信息</translation>
 <translation id="1410197035576869800">应用图标</translation>
 <translation id="1410616244180625362">继续允许 <ph name="HOST" /> 使用您的摄像头</translation>
 <translation id="1414648216875402825">您即将更新到 <ph name="PRODUCT_NAME" />的不稳定版本,其中含有尚处于开发阶段的功能。系统可能会出现崩溃和意外错误。继续操作前,请三思。</translation>
@@ -431,6 +434,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">JavaScript 控制台(&amp;J)</translation>
 <translation id="1587907146729660231">用手指轻触电源按钮</translation>
+<translation id="1588200577109872591">智能输入</translation>
 <translation id="1588438908519853928">正常</translation>
 <translation id="158849752021629804">需要家庭网络</translation>
 <translation id="1588870296199743671">链接打开方式...</translation>
@@ -666,6 +670,7 @@
 <translation id="1879000426787380528">登录身份</translation>
 <translation id="1880905663253319515">要删除证书“<ph name="CERTIFICATE_NAME" />”吗?</translation>
 <translation id="1884013283844450420">第 <ph name="NETWORK_INDEX" /> 个网络(共 <ph name="NETWORK_COUNT" /> 个),<ph name="NETWORK_NAME" />,连接</translation>
+<translation id="1884705339276589024">调整 Linux 磁盘大小</translation>
 <translation id="1886996562706621347">允许网站要求成为协议的默认处理程序(推荐)</translation>
 <translation id="1887442540531652736">登录错误</translation>
 <translation id="1887597546629269384">再说一次“Hey Google”</translation>
@@ -735,6 +740,7 @@
 <translation id="1979280758666859181">您正将版本更改为较旧版的 <ph name="PRODUCT_NAME" />。该版本的版本号必须与您设备上目前所安装版本的版本号相符,版本变更才会生效。</translation>
 <translation id="197989455406964291">KDC 不支持加密类型</translation>
 <translation id="1982354452682152483">未提供说明。</translation>
+<translation id="1984417487208496350">不提供任何保护(不建议)</translation>
 <translation id="1987317783729300807">帐号</translation>
 <translation id="1989112275319619282">浏览</translation>
 <translation id="1990512225220753005">不在本页上显示快捷方式</translation>
@@ -804,6 +810,7 @@
 <translation id="2090165459409185032">要恢复您的帐号信息,请访问 google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">系统安全设置</translation>
 <translation id="2091887806945687916">声音</translation>
+<translation id="2096478741073211388">个人信息建议可以在您输入特定字词时推荐您的姓名、地址或电话号码,从而帮助您提高输入速度。只有您自己可以看到系统为您的帐号提供的不公开的个性化建议。</translation>
 <translation id="2096715839409389970">清除第三方 Cookie</translation>
 <translation id="2097372108957554726">您需要登录 Chrome 才能注册新设备</translation>
 <translation id="2099172618127234427">您正在启用 Chrome 操作系统调试功能,此功能将设置 sshd 守护程序并允许从 U 盘启动设备。</translation>
@@ -820,6 +827,7 @@
 <translation id="2114326799768592691">重新加载框架(&amp;F)</translation>
 <translation id="2114896190328250491">照片提供者:<ph name="NAME" /></translation>
 <translation id="2119349053129246860">在“<ph name="APP" />”中打开</translation>
+<translation id="2119461801241504254">“安全浏览”功能已开启,正在保护您免受有害网站及下载内容的侵扰</translation>
 <translation id="2120297377148151361">活动和互动行为</translation>
 <translation id="2120639962942052471">已禁用<ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{已阻止 Cookie}=1{已阻止 Cookie,但有 1 项例外情况}other{已阻止 Cookie,但有 {COUNT} 项例外情况}}</translation>
@@ -869,7 +877,7 @@
 <translation id="2172784515318616985">继续</translation>
 <translation id="2173302385160625112">请检查您的互联网连接是否正常</translation>
 <translation id="2173801458090845390">向此设备添加申请 ID</translation>
-<translation id="2174948148799307353">该帐号由 <ph name="PARENT_EMAIL" /> 管理。要在此设备上退出主帐号,请点击屏幕上的时间。在随即显示的菜单中,点击“退出”。</translation>
+<translation id="2174948148799307353">该帐号由 <ph name="PARENT_EMAIL" /> 管理。如需在此设备上退出主帐号,请点击屏幕上的时间。在随即显示的菜单中,点击“退出”。</translation>
 <translation id="2175607476662778685">快速启动栏</translation>
 <translation id="217576141146192373">无法添加打印机。请检查您打印机的配置,然后重试。</translation>
 <translation id="2177950615300672361">隐身标签页:<ph name="TAB_NAME" /></translation>
@@ -1000,7 +1008,6 @@
 <translation id="2342740338116612727">书签已添加</translation>
 <translation id="2343747224442182863">聚焦此标签页</translation>
 <translation id="2345723121311404059">“<ph name="PRINTER_NAME" />”有 1 个页面需要打印</translation>
-<translation id="2346953515226895098">SODA 服务</translation>
 <translation id="2347644257713614136">使用环聊和 Cast for Education 时须遵守《Google 隐私权政策》。</translation>
 <translation id="2348176352564285430">应用:<ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">加载数据时出错</translation>
@@ -1473,7 +1480,7 @@
 <translation id="2948300991547862301">转到“<ph name="PAGE_TITLE" />”</translation>
 <translation id="29488703364906173">一款快速、简单且安全的网络浏览器,能很好满足现代网络对浏览器的要求。</translation>
 <translation id="2949289451367477459">使用位置信息。允许具有位置权限的应用和服务使用此设备的位置信息。Google 可能会定期收集位置数据,并以匿名方式使用这类数据,从而提高位置信息精确度并改善基于地理位置的服务。<ph name="BEGIN_LINK1" />了解详情<ph name="END_LINK1" /></translation>
-<translation id="2950666755714083615">帮我注册</translation>
+<translation id="2950666755714083615">立即注册</translation>
 <translation id="2956070239128776395">有区段嵌套在分组中:<ph name="ERROR_LINE" /></translation>
 <translation id="2957117904572187936">不允许任何网站修改您设备上的文件或文件夹</translation>
 <translation id="2958721676848865875">打包扩展程序警告</translation>
@@ -1887,6 +1894,7 @@
 <translation id="3515983984924808886">请再次轻触安全密钥以确认重置。安全密钥上存储的所有信息(包括它的 PIN 码)都会被删除。</translation>
 <translation id="3518985090088779359">接受并继续</translation>
 <translation id="351952459507671940">添加到新组</translation>
+<translation id="3521606918211282604">更改磁盘大小</translation>
 <translation id="3523642406908660543">当网站要使用插件访问您的计算机时询问您(推荐)</translation>
 <translation id="3524965460886318643">导出活动记录</translation>
 <translation id="3526034519184079374">无法读取或更改网站的数据</translation>
@@ -1974,6 +1982,7 @@
 <translation id="3629631988386925734">请输入您的密码,以启用 Smart Lock。下次,您只需使用手机就能解锁您的 <ph name="DEVICE_TYPE" /> 了。您可在“设置”中关闭 Smart Lock。</translation>
 <translation id="3630132874740063857">您的手机</translation>
 <translation id="3630995161997703415">请将此网站添加到您的任务栏中,以便随时使用</translation>
+<translation id="3633309367764744750">从网页中预提取信息,包括您尚未访问过的网页。所提取的信息可能包括 Cookie(如果您允许使用 Cookie)。</translation>
 <translation id="3634507049637220048">第 <ph name="NETWORK_INDEX" /> 个网络(共 <ph name="NETWORK_COUNT" /> 个),<ph name="NETWORK_NAME" />,<ph name="CONNECTION_STATUS" />,由您的管理员管理,详细信息</translation>
 <translation id="3635241501480133979">此数据违反了贵组织的安全政策,因此无法拖放。</translation>
 <translation id="3635353578505343390">向 Google 发送反馈</translation>
@@ -2271,7 +2280,6 @@
 <translation id="3971764089670057203">此安全密钥上的指纹</translation>
 <translation id="3973660817924297510">正在检查密码 (<ph name="CHECKED_PASSWORDS" />/<ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">无法连接到指定领域的服务器</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> 无法检查您的密码。请稍后再试。</translation>
 <translation id="3976108569178263973">没有找到可用的打印机。</translation>
 <translation id="397703832102027365">正在完成...</translation>
 <translation id="3977886311744775419">使用此网络类型时无法下载自动更新,但您可以手动检查是否有更新。</translation>
@@ -2572,7 +2580,6 @@
 <translation id="4421932782753506458">猫咪</translation>
 <translation id="4423376891418188461">还原设置</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />,您的管理员要求您更改密码。</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> 无法检查您的密码。请过 24 小时再试。</translation>
 <translation id="4429030830601238961">此数据违反了贵组织的安全政策,因此无法粘贴。</translation>
 <translation id="4430019312045809116">音量</translation>
 <translation id="4430369329743628066">已添加书签</translation>
@@ -2585,7 +2592,6 @@
 <translation id="4441124369922430666">要在设备开启时自动启动此应用吗?</translation>
 <translation id="4441147046941420429">要继续,请从您的设备上拔出安全密钥,然后重新插入并轻触它</translation>
 <translation id="444134486829715816">展开...</translation>
-<translation id="4442329324652245220">您需要先登录 Google 帐号才能使用 <ph name="IDS_SHORT_PRODUCT_NAME" /> 的密码检查功能</translation>
 <translation id="4442424173763614572">DNS 查找失败</translation>
 <translation id="4443536555189480885">帮助(&amp;H)</translation>
 <translation id="4444304522807523469">使用通过 USB 连接的或本地网络中的文档扫描仪</translation>
@@ -2612,7 +2618,6 @@
 <translation id="4476659815936224889">要扫描此二维码,您可以使用手机上的二维码扫描器应用,也可以使用某些相机应用。</translation>
 <translation id="4477015793815781985">必须以 Ctrl 键、Alt 键或 ⌘ 键开头</translation>
 <translation id="4478664379124702289">链接存储为(&amp;K)...</translation>
-<translation id="4478777936860197922">尚未保存任何密码。您需要先保存密码才能使用 <ph name="IDS_SHORT_PRODUCT_NAME" /> 的密码检查功能。</translation>
 <translation id="4479424953165245642">管理自助服务终端应用</translation>
 <translation id="4479639480957787382">以太网</translation>
 <translation id="4479877282574735775">正在配置虚拟机。这可能需要几分钟的时间。</translation>
@@ -2858,7 +2863,6 @@
 <translation id="4849517651082200438">不安装</translation>
 <translation id="4850669014075537160">滚动</translation>
 <translation id="4850886885716139402">视图</translation>
-<translation id="485197095346966382">当您使用已泄露的密码登录时,<ph name="IDS_SHORT_PRODUCT_NAME" /> 会通知您</translation>
 <translation id="4853020600495124913">在新窗口中打开(&amp;O)</translation>
 <translation id="4854317507773910281">请选择家长帐号以寻求批准</translation>
 <translation id="485480310608090163">更多设置和权限</translation>
@@ -3932,6 +3936,7 @@
 <translation id="6298962879096096191">使用 Google Play 安装 Android 应用</translation>
 <translation id="630065524203833229">退出(&amp;X)</translation>
 <translation id="6300718114348072351">无法自动配置<ph name="PRINTER_NAME" />。请指定高级打印机详细信息。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">个人信息建议</translation>
 <translation id="6305607932814307878">全局政策:</translation>
 <translation id="6307990684951724544">系统繁忙</translation>
 <translation id="6308493641021088955">登录服务提供方:<ph name="EXTENSION_NAME" /></translation>
@@ -4010,6 +4015,7 @@
 <translation id="641081527798843608">主题匹配</translation>
 <translation id="6412673304250309937">将网址与存储在 Chrome 中的不安全网站列表进行比对。如果某个网站企图窃取您的密码,或者您下载了有害的文件,Chrome 可能还会将相应网址连同少量网页内容发送给“安全浏览”功能。</translation>
 <translation id="6412931879992742813">打开新的无痕式窗口</translation>
+<translation id="6413591858632097328">这会清除 <ph name="ORIGIN_NAME" /> 及其中安装的应用存储的所有数据和 Cookie。</translation>
 <translation id="641469293210305670">安装更新和应用</translation>
 <translation id="6414888972213066896">您已向父亲/母亲发送请求,询问其是否允许您访问此网站</translation>
 <translation id="6415900369006735853">通过手机连接到互联网</translation>
@@ -4820,7 +4826,6 @@
 <translation id="7530016656428373557">电池放电率(瓦)</translation>
 <translation id="7531779363494549572">依次转到“设置”&gt;“应用和通知”&gt;“通知”。</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> 无响应。请选择“强制关闭”以关闭此应用。</translation>
-<translation id="7536333565791380193">高级安全设置</translation>
 <translation id="7537451260744431038">网站无法使用 Cookie 来提升您的浏览体验,例如让您保持登录状态或记住您购物车中的商品</translation>
 <translation id="7539856059004947393">蓝牙安全密钥</translation>
 <translation id="7540972813190816353">检查更新时出错:<ph name="ERROR" /></translation>
@@ -5061,7 +5066,6 @@
     <ph name="BEGIN_BOLD" />注意<ph name="END_BOLD" />:在恢复过程中,系统将会重新启动。</translation>
 <translation id="7828731929332799387">这将会删除第三方环境下的所有可用 Cookie 和网站数据。要继续吗?</translation>
 <translation id="7829298379596169484">正在存取音频输入</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> 无法检查您的密码。请检查您的互联网连接。</translation>
 <translation id="7829877209233347340">如需添加学校帐号,请让家长登录并向您授权</translation>
 <translation id="7830594666202422257">连接到 Linux</translation>
 <translation id="7831491651892296503">配置网络时出错</translation>
@@ -5279,7 +5283,7 @@
 <translation id="8107015733319732394">正在在您的 <ph name="DEVICE_TYPE" /> 上安装 Google Play 商店。这可能需要几分钟的时间。</translation>
 <translation id="8108526232944491552">{COUNT,plural, =0{无第三方 Cookie}=1{已屏蔽 1 个第三方 Cookie}other{已屏蔽 # 个第三方 Cookie}}</translation>
 <translation id="810875025413331850">未找到附近的设备。</translation>
-<translation id="8114199541033039755">在平板电脑模式下,使用相应按钮转到主屏幕、返回以及切换应用。如果启用了 ChromeVox 或自动点击功能,系统即会开启此设置。</translation>
+<translation id="8114199541033039755">在平板电脑模式下,使用相应按钮转到主屏幕、返回以及切换应用。如果启用了 ChromeVox 或自动点击功能,系统会开启此设置。</translation>
 <translation id="8114875720387900039">水平分割</translation>
 <translation id="8116972784401310538">书签管理器(&amp;B)</translation>
 <translation id="8117620576188476503">使用状态栏管理连接、更新和设置。若要通过键盘访问这些内容,请按 Alt + Shift + S 组合键。</translation>
@@ -5288,7 +5292,7 @@
 <translation id="8118488170956489476">您的<ph name="BEGIN_LINK" />浏览器由所属组织管理<ph name="END_LINK" /></translation>
 <translation id="8118860139461251237">管理您的下载内容</translation>
 <translation id="811942868379260654"><ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />、<ph name="RECENT_PERMISSIONS_CHANGE_1" />、<ph name="RECENT_PERMISSIONS_CHANGE_2" />、…</translation>
-<translation id="8120715633374652536">您设备上的存储空间不足。必须有至少 <ph name="MINIMUM_SPACE" /> 的可用空间才能使用 Plugin VM,但最好能有超过 <ph name="RECOMMENDED_SPACE" /> 的可用空间。要释放空间,请从设备存储空间中删除文件。</translation>
+<translation id="8120715633374652536">您设备上的存储空间不足。使用 Plugin VM 至少需要 <ph name="MINIMUM_SPACE" /> 的可用空间(建议 <ph name="RECOMMENDED_SPACE" /> 以上)。要释放空间,请从设备存储空间中删除文件。</translation>
 <translation id="8123590694679414600">数据已于 <ph name="TIME" />使用您的同步密码加密。这并不包括 Google Pay 中的付款方式和地址。</translation>
 <translation id="81238879832906896">黄色和白色花朵</translation>
 <translation id="8124313775439841391">受管理的 ONC</translation>
@@ -5398,7 +5402,7 @@
 <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> 已隐藏鼠标指针。</translation>
 <translation id="8264024885325823677">此设置由您的管理员管理。</translation>
 <translation id="8264718194193514834">“<ph name="EXTENSION_NAME" />”触发了全屏模式。</translation>
-<translation id="826511437356419340">已进入窗口概览模式。要四处浏览,请滑动手指或(若使用键盘)按 Tab 键。</translation>
+<translation id="826511437356419340">已进入窗口概览模式。您可以滑动手指或(若使用键盘)按 Tab 键进行浏览。</translation>
 <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />这是关于此设备及其使用情况(例如电池电量、系统与应用活动以及错误)的一般信息。我们会使用这些数据来改善 Android;部分汇总信息也会有助于改善 Google 应用,并会协助我们的合作伙伴(例如 Android 开发者)改善其应用和产品。<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />关闭这项功能并不会影响此设备发送基本服务(例如系统更新和安全防护)所需的信息。<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />所有者可以通过“设置”&gt;“高级”&gt;“自动向 Google 发送诊断数据和使用情况数据”来控制这项功能。<ph name="END_PARAGRAPH3" />
@@ -5935,7 +5939,6 @@
 <translation id="8966870118594285808">如果您无意中关闭了某个标签页,可将其重新打开</translation>
 <translation id="8967866634928501045">同时按 Alt+Shift+A 即可显示</translation>
 <translation id="8968766641738584599">保存卡片</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> 无法检查您的密码。请过 24 小时再试,或者<ph name="BEGIN_LINK" />在您的 Google 帐号中检查密码<ph name="END_LINK" />。</translation>
 <translation id="89720367119469899">转义</translation>
 <translation id="8972513834460200407">请与您的网络管理员联系,确保防火墙没有阻止系统从 Google 服务器下载内容。</translation>
 <translation id="8973557916016709913">移除缩放级别</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index e2957596..7e799c8 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -94,7 +94,7 @@
 <translation id="1122960773616686544">書籤名稱</translation>
 <translation id="1124772482545689468">使用者</translation>
 <translation id="1125550662859510761">解像度:<ph name="WIDTH" /> x <ph name="HEIGHT" /> (原廠設定)</translation>
-<translation id="1126809382673880764">無法防範危險網站、下載檔案和擴充程式。您仍可在其他 Google 服務 (例如 Gmail 和「搜尋」) 中使用「安全瀏覽」功能 (如有)。</translation>
+<translation id="1126809382673880764">無法防範危險網站、下載檔案和擴充程式。您仍可在其他 Google 服務 (例如 Gmail 和搜尋) 中使用「安全瀏覽」功能 (如有)。</translation>
 <translation id="1128109161498068552">禁止任何網站使用系統專用訊息存取 MIDI 裝置</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">編輯搜尋引擎</translation>
@@ -1011,7 +1011,6 @@
 <translation id="2342740338116612727">加咗書籤</translation>
 <translation id="2343747224442182863">將焦點移至此分頁</translation>
 <translation id="2345723121311404059">將 1 頁傳送至「<ph name="PRINTER_NAME" />」列印</translation>
-<translation id="2346953515226895098">SODA 服務</translation>
 <translation id="2347644257713614136">Hangouts 和 Cast for Education 的使用受《Google 私隱權政策》管限。</translation>
 <translation id="2348176352564285430">應用程式:<ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">載入資料時發生錯誤</translation>
@@ -2284,7 +2283,6 @@
 <translation id="3971764089670057203">此安全金鑰上的指紋</translation>
 <translation id="3973660817924297510">正在檢查密碼 (已檢查 <ph name="CHECKED_PASSWORDS" /> 個,共 <ph name="TOTAL_PASSWORDS" /> 個)…</translation>
 <translation id="3975565978598857337">無法連線至指定的伺服器領域</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> 無法檢查密碼,請稍後再試。</translation>
 <translation id="3976108569178263973">沒有可用的打印機。</translation>
 <translation id="397703832102027365">即將完成…</translation>
 <translation id="3977886311744775419">此網絡類型無法下載自動更新,但您可以手動檢查更新。</translation>
@@ -2585,7 +2583,6 @@
 <translation id="4421932782753506458">長毛貓</translation>
 <translation id="4423376891418188461">還原設定</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />,管理員要求您變更密碼。</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> 無法檢查密碼,請於 24 小時後再試一次。</translation>
 <translation id="4429030830601238961">此資料違反機構的安全性政策,因此無法貼上。</translation>
 <translation id="4430019312045809116">音量</translation>
 <translation id="4430369329743628066">已新增書籤</translation>
@@ -2598,7 +2595,6 @@
 <translation id="4441124369922430666">您要在裝置開機時自動啟動這個應用程式嗎?</translation>
 <translation id="4441147046941420429">如要繼續,請從裝置上移除安全密鑰,然後重新插入並輕觸密鑰</translation>
 <translation id="444134486829715816">展開…</translation>
-<translation id="4442329324652245220"><ph name="IDS_SHORT_PRODUCT_NAME" /> 可在您使用 Google 帳戶登入時檢查密碼</translation>
 <translation id="4442424173763614572">DNS 查詢失敗</translation>
 <translation id="4443536555189480885">說明(&amp;H)</translation>
 <translation id="4444304522807523469">存取透過 USB 外接或區域網絡上的文件掃描器</translation>
@@ -2625,7 +2621,6 @@
 <translation id="4476659815936224889">如要掃瞄此條碼,您可使用手機上的二維條碼掃瞄器或部分相機應用程式。</translation>
 <translation id="4477015793815781985">必須以 Ctrl、Alt 或 ⌘ 鍵開頭</translation>
 <translation id="4478664379124702289">另存連結(&amp;K)…</translation>
-<translation id="4478777936860197922">沒有已儲存的密碼。儲存密碼時,<ph name="IDS_SHORT_PRODUCT_NAME" /> 可檢查您的密碼。</translation>
 <translation id="4479424953165245642">管理 Kiosk 應用程式</translation>
 <translation id="4479639480957787382">以太網絡</translation>
 <translation id="4479877282574735775">正在設定虛擬機器。這項操作可能需時數分鐘。</translation>
@@ -2871,7 +2866,6 @@
 <translation id="4849517651082200438">不要安裝</translation>
 <translation id="4850669014075537160">捲動</translation>
 <translation id="4850886885716139402">檢視</translation>
-<translation id="485197095346966382">如果您使用被盜用的密碼登入帳戶,<ph name="IDS_SHORT_PRODUCT_NAME" /> 會通知您</translation>
 <translation id="4853020600495124913">在新視窗中開啟(&amp;N)</translation>
 <translation id="4854317507773910281">選擇執行審核的家長帳戶</translation>
 <translation id="485480310608090163">更多設定和權限</translation>
@@ -4835,7 +4829,6 @@
 <translation id="7530016656428373557">放電速率 (瓦特)</translation>
 <translation id="7531779363494549572">前往 [設定] &gt; [應用程式和通知] &gt; [通知]。</translation>
 <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> 沒有回應。選取「強制關閉」即可關閉應用程式。</translation>
-<translation id="7536333565791380193">進階安全性</translation>
 <translation id="7537451260744431038">網站不可使用 Cookie 來改善瀏覽體驗,例如讓您保持登入狀態或記住購物車中的商品</translation>
 <translation id="7539856059004947393">藍牙安全密鑰</translation>
 <translation id="7540972813190816353">檢查更新時發生錯誤:<ph name="ERROR" /></translation>
@@ -5076,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />注意:<ph name="END_BOLD" />系統會在程序中途重新開機。</translation>
 <translation id="7828731929332799387">系統會刪除第三方內容中使用的所有 Cookie 和網站資料。要繼續嗎?</translation>
 <translation id="7829298379596169484">正在存取音訊輸入</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> 無法檢查密碼,請檢查互聯網連線。</translation>
 <translation id="7829877209233347340">請要求家長登入,授予新增學校帳戶的權限</translation>
 <translation id="7830594666202422257">連結至 Linux</translation>
 <translation id="7831491651892296503">設定網絡時發生錯誤</translation>
@@ -5950,7 +5942,6 @@
 <translation id="8966870118594285808">當您意外關閉標籤時重新開啟標籤</translation>
 <translation id="8967866634928501045">㩒住 Alt、Shift 同 A 鍵就會顯示</translation>
 <translation id="8968766641738584599">儲存付款卡</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> 無法檢查密碼,請於 24 小時後再試一次,或<ph name="BEGIN_LINK" />檢查 Google 帳戶中的密碼<ph name="END_LINK" />。</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">請與網絡管理員聯絡,確保防火牆並未封鎖從 Google 伺服器下載的內容。</translation>
 <translation id="8973557916016709913">移除縮放級別</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index b2690610..9783ada5 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -94,6 +94,7 @@
 <translation id="1122960773616686544">書籤名稱</translation>
 <translation id="1124772482545689468">使用者</translation>
 <translation id="1125550662859510761">螢幕解析度:<ph name="WIDTH" /> x <ph name="HEIGHT" /> (原生)</translation>
+<translation id="1126809382673880764">無法封鎖不安全的網站、下載內容和擴充功能。在 Gmail 和 Google 搜尋等其他 Google 服務中,你仍可獲得安全瀏覽的防護 (如適用)。</translation>
 <translation id="1128109161498068552">禁止任何網站使用系統專用訊息存取 MIDI 裝置</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">編輯搜尋引擎</translation>
@@ -185,6 +186,7 @@
 <translation id="1235458158152011030">已知網路</translation>
 <translation id="123578888592755962">磁碟空間已滿</translation>
 <translation id="1238191093934674082">Open VPN</translation>
+<translation id="1239439601391236986">顯示個人資訊輸入建議</translation>
 <translation id="1239594683407221485">在「檔案」應用程式中探索裝置內容。</translation>
 <translation id="124116460088058876">更多語言</translation>
 <translation id="1241753985463165747">叫用時讀取及變更你在目前網站上的所有資料</translation>
@@ -301,6 +303,7 @@
 <translation id="140723521119632973">啟用行動網路</translation>
 <translation id="1407489512183974736">置中並剪裁</translation>
 <translation id="1408504635543854729">在「檔案」應用程式中探索裝置內容。內容受管理員限制,使用者無法修改。</translation>
+<translation id="1408980562518920698">管理個人資訊</translation>
 <translation id="1410197035576869800">應用程式圖示</translation>
 <translation id="1410616244180625362">繼續允許 <ph name="HOST" /> 存取你的攝影機</translation>
 <translation id="1414648216875402825">你即將更新為不穩定的 <ph name="PRODUCT_NAME" />版本,其中含有仍在開發中的功能。系統可能會發生當機情況和無法預期的錯誤,執行時請特別注意。</translation>
@@ -434,6 +437,7 @@
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">JavaScript 控制台(&amp;J)</translation>
 <translation id="1587907146729660231">用手指輕觸電源按鈕</translation>
+<translation id="1588200577109872591">智慧型輸入</translation>
 <translation id="1588438908519853928">一般</translation>
 <translation id="158849752021629804">需要家用網路</translation>
 <translation id="1588870296199743671">使用其他程式開啟連結...</translation>
@@ -669,6 +673,7 @@
 <translation id="1879000426787380528">登入身分</translation>
 <translation id="1880905663253319515">要刪除憑證「<ph name="CERTIFICATE_NAME" />」嗎?</translation>
 <translation id="1884013283844450420">第 <ph name="NETWORK_INDEX" /> 個網路 (共 <ph name="NETWORK_COUNT" /> 個),<ph name="NETWORK_NAME" />,連線</translation>
+<translation id="1884705339276589024">調整 Linux 磁碟大小</translation>
 <translation id="1886996562706621347">允許網站要求成為通訊協定的預設處理常式 (建議)</translation>
 <translation id="1887442540531652736">登入錯誤</translation>
 <translation id="1887597546629269384">再說一次「Hey Google」</translation>
@@ -738,6 +743,7 @@
 <translation id="1979280758666859181">你即將變更為較舊版本的 <ph name="PRODUCT_NAME" />。該版本的版本號與你電腦上所安裝的版本號必須相符,系統才會套用版本變更。</translation>
 <translation id="197989455406964291">KDC 不支援加密類型</translation>
 <translation id="1982354452682152483">沒有說明。</translation>
+<translation id="1984417487208496350">無防護 (不建議)</translation>
 <translation id="1987317783729300807">帳戶</translation>
 <translation id="1989112275319619282">瀏覽</translation>
 <translation id="1990512225220753005">不要在這個頁面顯示捷徑</translation>
@@ -807,6 +813,7 @@
 <translation id="2090165459409185032">如要還原您的帳戶資訊,請前往 google.com/accounts/recovery</translation>
 <translation id="2090876986345970080">系統安全性設定</translation>
 <translation id="2091887806945687916">音訊</translation>
+<translation id="2096478741073211388">個人資訊建議功能可在你輸入特定字詞時,針對你的姓名、地址或電話號碼提供建議,協助你更快輸入資訊。系統會為你的帳戶提供專屬的個人化建議,只有你能看到這些建議內容。</translation>
 <translation id="2096715839409389970">清除第三方 Cookie</translation>
 <translation id="2097372108957554726">你必須登入 Chrome 註冊新裝置</translation>
 <translation id="2099172618127234427">你即將啟用 Chrome 作業系統偵錯功能,這會一併設定 sshd 精靈,並允許從 USB 磁碟機執行啟動作業。</translation>
@@ -823,6 +830,7 @@
 <translation id="2114326799768592691">重新載入頁框(&amp;F)</translation>
 <translation id="2114896190328250491">相片提供:<ph name="NAME" /></translation>
 <translation id="2119349053129246860">在「<ph name="APP" />」中開啟</translation>
+<translation id="2119461801241504254">安全瀏覽功能已啟用,可封鎖有害的網站和下載內容</translation>
 <translation id="2120297377148151361">活動與互動行為</translation>
 <translation id="2120639962942052471">已封鎖<ph name="PERMISSION" /></translation>
 <translation id="2121055421682309734">{COUNT,plural, =0{已封鎖 Cookie}=1{已封鎖 Cookie,有 1 個例外狀況}other{已封鎖 Cookie,有 {COUNT} 個例外狀況}}</translation>
@@ -1003,7 +1011,6 @@
 <translation id="2342740338116612727">已新增書籤</translation>
 <translation id="2343747224442182863">將焦點移至這個分頁</translation>
 <translation id="2345723121311404059">將 1 個網頁傳送至「<ph name="PRINTER_NAME" />」列印</translation>
-<translation id="2346953515226895098">SODA Service</translation>
 <translation id="2347644257713614136">Hangouts 和 Cast for Education 的相關使用行為受到《Google 隱私權政策》所規範。</translation>
 <translation id="2348176352564285430">應用程式:<ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">載入資料時發生錯誤</translation>
@@ -1890,6 +1897,7 @@
 <translation id="3515983984924808886">請再次輕觸安全金鑰以確認重設。這個安全金鑰上儲存的所有資訊 (包括 PIN 碼) 都將遭到刪除。</translation>
 <translation id="3518985090088779359">接受並繼續</translation>
 <translation id="351952459507671940">新增到新群組</translation>
+<translation id="3521606918211282604">變更磁碟大小</translation>
 <translation id="3523642406908660543">在網站要使用外掛程式存取你的電腦時,必須先詢問你 (建議使用)</translation>
 <translation id="3524965460886318643">匯出活動</translation>
 <translation id="3526034519184079374">無法讀取或變更網站的資料</translation>
@@ -1977,6 +1985,7 @@
 <translation id="3629631988386925734">輸入密碼即可啟用 Smart Lock,這樣下次手機就會為你的 <ph name="DEVICE_TYPE" />.解鎖。你可以在「設定」中停用 Smart Lock。</translation>
 <translation id="3630132874740063857">你的電話號碼</translation>
 <translation id="3630995161997703415">請將這個網站加入檔案櫃,以便隨時使用</translation>
+<translation id="3633309367764744750">預先擷取網頁中的資訊,包括你尚未造訪的網頁。如果你允許 Cookie,系統擷取的資訊中可能會包含 Cookie。</translation>
 <translation id="3634507049637220048">第 <ph name="NETWORK_INDEX" /> 個網路 (共 <ph name="NETWORK_COUNT" /> 個),<ph name="NETWORK_NAME" />,<ph name="CONNECTION_STATUS" />,由系統管理員管理,詳細資料</translation>
 <translation id="3635241501480133979">這項資料違反了貴機構的安全性政策,因此無法拖放。</translation>
 <translation id="3635353578505343390">提供意見給 Google</translation>
@@ -2274,7 +2283,6 @@
 <translation id="3971764089670057203">這個安全金鑰上的指紋</translation>
 <translation id="3973660817924297510">正在檢查密碼 (已檢查 <ph name="CHECKED_PASSWORDS" /> 個,共 <ph name="TOTAL_PASSWORDS" /> 個)…</translation>
 <translation id="3975565978598857337">無法連線至指定領域的伺服器</translation>
-<translation id="3975884715086515476"><ph name="IDS_SHORT_PRODUCT_NAME" /> 無法檢查你的密碼,請稍後再試。</translation>
 <translation id="3976108569178263973">沒有可用的印表機。</translation>
 <translation id="397703832102027365">即將完成...</translation>
 <translation id="3977886311744775419">這個網路類型無法下載自動更新,但你可以手動檢查更新。</translation>
@@ -2575,7 +2583,6 @@
 <translation id="4421932782753506458">毛毛</translation>
 <translation id="4423376891418188461">還原設定</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />,管理員要求你變更密碼。</translation>
-<translation id="4426209360861763174"><ph name="IDS_SHORT_PRODUCT_NAME" /> 無法檢查你的密碼,請於 24 小時後再試。</translation>
 <translation id="4429030830601238961">這項資料違反了貴機構的安全性政策,因此無法貼上。</translation>
 <translation id="4430019312045809116">音量</translation>
 <translation id="4430369329743628066">已新增書籤</translation>
@@ -2588,7 +2595,6 @@
 <translation id="4441124369922430666">你要在裝置開機時自動啟動這個應用程式嗎?</translation>
 <translation id="4441147046941420429">如要繼續,請將安全金鑰從裝置上移除,然後重新插入並輕觸安全金鑰</translation>
 <translation id="444134486829715816">展開...</translation>
-<translation id="4442329324652245220">如果你使用 Google 帳戶登入,<ph name="IDS_SHORT_PRODUCT_NAME" /> 可以檢查你的密碼</translation>
 <translation id="4442424173763614572">DNS 查詢失敗</translation>
 <translation id="4443536555189480885">說明(&amp;H)</translation>
 <translation id="4444304522807523469">存取透過 USB 附加或是在區域網路上的文件掃描器</translation>
@@ -2615,7 +2621,6 @@
 <translation id="4476659815936224889">如要掃描這個圖碼,你可以使用手機上的 QR 掃描器或相機應用程式。</translation>
 <translation id="4477015793815781985">必須包含 Ctrl、Alt 或 ⌘ 鍵</translation>
 <translation id="4478664379124702289">另存連結(&amp;K)...</translation>
-<translation id="4478777936860197922">未儲存任何密碼。你必須先儲存密碼,才能使用 <ph name="IDS_SHORT_PRODUCT_NAME" /> 的密碼檢查功能。</translation>
 <translation id="4479424953165245642">管理 Kiosk 應用程式</translation>
 <translation id="4479639480957787382">乙太網路</translation>
 <translation id="4479877282574735775">正在設定虛擬機器,這可能需要幾分鐘的時間。</translation>
@@ -2861,7 +2866,6 @@
 <translation id="4849517651082200438">不要安裝</translation>
 <translation id="4850669014075537160">捲動</translation>
 <translation id="4850886885716139402">檢視</translation>
-<translation id="485197095346966382">如果你使用遭外洩的密碼登入帳戶,<ph name="IDS_SHORT_PRODUCT_NAME" /> 會通知你</translation>
 <translation id="4853020600495124913">在新視窗中開啟(&amp;N)</translation>
 <translation id="4854317507773910281">選擇進行審核的家長帳戶</translation>
 <translation id="485480310608090163">更多設定和權限</translation>
@@ -3935,6 +3939,7 @@
 <translation id="6298962879096096191">使用 Google Play 安裝 Android 應用程式</translation>
 <translation id="630065524203833229">結束(&amp;X)</translation>
 <translation id="6300718114348072351">無法自動設定「<ph name="PRINTER_NAME" />」。請手動設定印表機的進階選項。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
+<translation id="630292539633944562">個人資訊建議</translation>
 <translation id="6305607932814307878">全域政策:</translation>
 <translation id="6307990684951724544">系統忙碌中</translation>
 <translation id="6308493641021088955">登入資訊提供者:<ph name="EXTENSION_NAME" /></translation>
@@ -4013,6 +4018,7 @@
 <translation id="641081527798843608">主題比對</translation>
 <translation id="6412673304250309937">可使用儲存在 Chrome 中的不安全網站清單檢查網址。如果有網站試圖竊取你的密碼,或當你下載有害檔案時,Chrome 可能也會將網址 (包括部分網頁內容) 傳送至安全瀏覽功能。</translation>
 <translation id="6412931879992742813">新增無痕式視窗</translation>
+<translation id="6413591858632097328">這會清除 <ph name="ORIGIN_NAME" /> 儲存的所有資料和 Cookie,以及該網站所安裝的應用程式。</translation>
 <translation id="641469293210305670">安裝更新內容和應用程式</translation>
 <translation id="6414888972213066896">你已詢問家長是否同意你造訪這個網站</translation>
 <translation id="6415900369006735853">透過手機連上網際網路</translation>
@@ -4823,7 +4829,6 @@
 <translation id="7530016656428373557">放電速率 (瓦特)</translation>
 <translation id="7531779363494549572">依序輕觸 [設定] &gt; [應用程式和通知] &gt; [通知]。</translation>
 <translation id="7532009420053991888">「<ph name="LINUX_APP_NAME" />」沒有回應。選取「強制關閉」即可關閉應用程式。</translation>
-<translation id="7536333565791380193">進階安全性</translation>
 <translation id="7537451260744431038">網站無法使用 Cookie 改善瀏覽體驗,例如讓你保持登入狀態,或記住購物車中的商品</translation>
 <translation id="7539856059004947393">藍牙安全金鑰</translation>
 <translation id="7540972813190816353">檢查更新時發生錯誤:<ph name="ERROR" /></translation>
@@ -5064,7 +5069,6 @@
     <ph name="BEGIN_BOLD" />注意:<ph name="END_BOLD" />系統會在過程中重新啟動。</translation>
 <translation id="7828731929332799387">這將會刪除第三方內容中使用的所有 Cookie 和網站資料。確定要繼續嗎?</translation>
 <translation id="7829298379596169484">正在存取音訊輸入</translation>
-<translation id="7829528495815477379"><ph name="IDS_SHORT_PRODUCT_NAME" /> 無法檢查你的密碼,請查看網際網路連線狀態。</translation>
 <translation id="7829877209233347340">請要求家長登入,授予新增學校帳戶的權限</translation>
 <translation id="7830594666202422257">連線至 Linux</translation>
 <translation id="7831491651892296503">網路設定錯誤</translation>
@@ -5938,7 +5942,6 @@
 <translation id="8966870118594285808">你可以重新開啟不小心關閉的分頁</translation>
 <translation id="8967866634928501045">按下 Alt + Shift + A 鍵即可顯示</translation>
 <translation id="8968766641738584599">儲存卡片</translation>
-<translation id="8971800409073702505"><ph name="IDS_SHORT_PRODUCT_NAME" /> 無法檢查你的密碼,請於 24 小時後再試,或<ph name="BEGIN_LINK" />檢查 Google 帳戶中的密碼<ph name="END_LINK" />。</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">請與網路管理員聯絡,確認防火牆並未封鎖從 Google 伺服器下載的內容。</translation>
 <translation id="8973557916016709913">重設為預設縮放比例</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index e5de0e0..c1973ce 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -1009,7 +1009,6 @@
 <translation id="2342740338116612727">Amabhukhimakhi angeziwe</translation>
 <translation id="2343747224442182863">Gxilisa le thebhu</translation>
 <translation id="2345723121311404059">1 ikhasi ku-<ph name="PRINTER_NAME" /></translation>
-<translation id="2346953515226895098">Isevisi ye-SODA</translation>
 <translation id="2347644257713614136">Ukusetshenziswa kwe-Hangouts ne-Cast for Education kubuswa inqubomgmo yobumfihlo ye-Google.</translation>
 <translation id="2348176352564285430">Uhlelo lokusebenza: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="234889437187286781">Iphutha ekulayisheni idatha</translation>
@@ -2283,7 +2282,6 @@
 <translation id="3971764089670057203">Izigxivizo zeminwe kulo khiye wokuqinisekisa ubunikazi</translation>
 <translation id="3973660817924297510">Kuhlola Amaphasiwedi (<ph name="CHECKED_PASSWORDS" /> kwangu-<ph name="TOTAL_PASSWORDS" />)…</translation>
 <translation id="3975565978598857337">Ukuxhumana neseva kwe-realm kuhlulekile</translation>
-<translation id="3975884715086515476">I-<ph name="IDS_SHORT_PRODUCT_NAME" /> ayikwazi ukuhlola amaphasiwedi akho. Zama futhi emuva kwesikhathi.</translation>
 <translation id="3976108569178263973">Awekho amaphethini atholakalayo.</translation>
 <translation id="397703832102027365">Iyaphothula...</translation>
 <translation id="3977886311744775419">Izibuyekezo zokuzenzakalela azifuni ukulandwa kulolu hlobo lwenethiwekhi, kodwa ungahlolela izibuyekezo ngesandla.</translation>
@@ -2584,7 +2582,6 @@
 <translation id="4421932782753506458">Tofozelayo</translation>
 <translation id="4423376891418188461">Buyisela izilungiselelo</translation>
 <translation id="442397852638519243"><ph name="USER_NAME" />, umlawuli wakho udinga ukuthi ushintshe iphasiwedi yakho.</translation>
-<translation id="4426209360861763174">I-<ph name="IDS_SHORT_PRODUCT_NAME" /> ayikwazi ukuhlola amaphasiwedi akho. Zama futhi emva kwamahora angu-24.</translation>
 <translation id="4429030830601238961">Le datha yephula izinqubomgomo zokuphepha zenhlangano yakho futhi ayikwazi ukunamathiselwa.</translation>
 <translation id="4430019312045809116">Ivolumu</translation>
 <translation id="4430369329743628066">Ibhukhimakhi ingeziwe</translation>
@@ -2597,7 +2594,6 @@
 <translation id="4441124369922430666">Ingabe ufuna ukuqalisa ngokuzenzakalela lolu hlelo lokusebenza uma umshini uvula?</translation>
 <translation id="4441147046941420429">Ukuze uqhubeke, susa ukhiye wokuqinisekisa ubunikazi kusuka kudivayisi yakho, bese ufake kabusha futhi uthinte</translation>
 <translation id="444134486829715816">Nweba...</translation>
-<translation id="4442329324652245220">I-<ph name="IDS_SHORT_PRODUCT_NAME" /> ingahlola amaphasiwedi akho uma ungena ngemvume nge-Akhawunti yakho ye-Google.</translation>
 <translation id="4442424173763614572">Ukubheka i-DSN kuhlulekile</translation>
 <translation id="4443536555189480885">Usizo</translation>
 <translation id="4444304522807523469">Finyelela kuzikena zedokhumenti ezinamathiselwe nge-USB noma kunethiwekhi yasendaweni</translation>
@@ -2624,7 +2620,6 @@
 <translation id="4476659815936224889">Ukuze uskene le khodi, ungasebenzisa uhlelo lokusebenza lweskena lwe-QR kufoni yakho, noma ezinye izinhlelo zokusebenza zekhamera.</translation>
 <translation id="4477015793815781985">Faka phakathi U-Ctrl, Alt, noma u-⌘</translation>
 <translation id="4478664379124702289">Londoloza isixhumanisi njenge...</translation>
-<translation id="4478777936860197922">Awekho amaphasiwedi alondoloziwe. I-<ph name="IDS_SHORT_PRODUCT_NAME" /> ingahlola amaphasiwedi akho uma uwalondoloza.</translation>
 <translation id="4479424953165245642">Phatha izinhlelo zokusebenza zekhiyoski</translation>
 <translation id="4479639480957787382">I-Ethernet</translation>
 <translation id="4479877282574735775">Ilungiselela umshini obonakalayo. Lokhu kungathatha amaminithi ambalwa.</translation>
@@ -2870,7 +2865,6 @@
 <translation id="4849517651082200438">Ungafaki</translation>
 <translation id="4850669014075537160">Ukuskrola</translation>
 <translation id="4850886885716139402">Buka</translation>
-<translation id="485197095346966382">I-<ph name="IDS_SHORT_PRODUCT_NAME" />izokwazisa uma ungena ngemvume ngephasiwedi eyonakalisiwe</translation>
 <translation id="4853020600495124913">Vula kuwindi eli&amp;sha</translation>
 <translation id="4854317507773910281">Khetha i-akhawunti yomzali yokugunyaza</translation>
 <translation id="485480310608090163">Izilungiselelo eziningi nezimvume</translation>
@@ -4837,7 +4831,6 @@
 <translation id="7530016656428373557">Ukulinganiselwa kokukhishwa ngamawathi</translation>
 <translation id="7531779363494549572">Hamba kuzilungiselelo &gt; Izinhlelo zokusebenza nezaziso &gt; Izaziso.</translation>
 <translation id="7532009420053991888">I-<ph name="LINUX_APP_NAME" /> ayiphenduli. Khetha okuthi "Phoqa ukuvala" ukuze uvale uhlelo lokusebenza.</translation>
-<translation id="7536333565791380193">Ukuvikela okuthuthukile</translation>
 <translation id="7537451260744431038">Amasayithi awakwazi ukusebenzisa amakhukhi ukuthuthukisa ukuzizwela kwakho kokuphequlula, ngokwesibonelo, ukukugcina ungene ngemvume noma ukukhumbula izinto ezikukalishi yakho yokuthenga.</translation>
 <translation id="7539856059004947393">Ukhiye wokuqinisekisa ubunikazi we-Bluetooth</translation>
 <translation id="7540972813190816353">Kuvele iphutha ngenkathi kuhlolelwa izibuyekezo: <ph name="ERROR" /></translation>
@@ -5078,7 +5071,6 @@
     <ph name="BEGIN_BOLD" />Qaphela:<ph name="END_BOLD" />  Isistimu izoqalisa kabusha ngesikhathi senqubo.</translation>
 <translation id="7828731929332799387">Lokhu kuzosusa wonke amakhukhi nedatha yesayithi etholakala kokuqukethwe kwenkampani yangaphandle. Ingabe ufuna ukuqhubeka?</translation>
 <translation id="7829298379596169484">Ifinyelela kokokufaka komsindo</translation>
-<translation id="7829528495815477379">I-<ph name="IDS_SHORT_PRODUCT_NAME" /> ayikwazi ukuhlola amaphasiwedi akho. Zama ukuhlola ukuxhumeka kwakho ku-inthanethi.</translation>
 <translation id="7829877209233347340">Cela umzali angene ngemvume ukunikeza imvume yokwengeza i-akhawunti yesikole</translation>
 <translation id="7830594666202422257">Xhumeka ku-Linux</translation>
 <translation id="7831491651892296503">Iphutha lokulungiselela inethiwekhi</translation>
@@ -5952,7 +5944,6 @@
 <translation id="8966870118594285808">Vula kabusha ithebhu uma uyivale ngephutha</translation>
 <translation id="8967866634928501045">Cindezela okuthi Alt Shift A ukuze ubonise</translation>
 <translation id="8968766641738584599">Londoloza ikhadi</translation>
-<translation id="8971800409073702505">I-<ph name="IDS_SHORT_PRODUCT_NAME" /> ayikwazi ukuhlola amaphasiwedi akho. Zama futhi ngemva kwamahora angu-24 noma <ph name="BEGIN_LINK" />hlola amaphasiwedi ku-akhawunti yakho ye-Google<ph name="END_LINK" />.</translation>
 <translation id="89720367119469899">I-Escape</translation>
 <translation id="8972513834460200407">Sicela uhlole nomlawuli wenethiwekhi yakho ukuze uqiniseke ukuthi uhlelo lokuvikela aluvimbeli ukulanda kusuka kumaseva we-Google.</translation>
 <translation id="8973557916016709913">Susa ileveli yokusondeza</translation>
diff --git a/chrome/app/resources/google_chrome_strings_af.xtb b/chrome/app/resources/google_chrome_strings_af.xtb
index 430bce2..c980e59 100644
--- a/chrome/app/resources/google_chrome_strings_af.xtb
+++ b/chrome/app/resources/google_chrome_strings_af.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Dit is 'n sekondêre installering van Chrome en kan nie jou verstekblaaier gemaak word nie.</translation>
 <translation id="2341767445688917208">Chrome-bedryfstelsel kon nie jou wagwoorde sinkroniseer nie. Maak nou reg.</translation>
 <translation id="2348335408836342058">Chrome het toestemming nodig om toegang te kry tot jou kamera en mikrofoon vir hierdie werf</translation>
+<translation id="234869673307233423">Chrome kan nie jou wagwoorde nagaan nie. Probeer later weer.</translation>
 <translation id="2429317896000329049">Google Chrome kon nie jou data sinkroniseer nie, omdat sinkronisering nie vir jou domein beskikbaar is nie.</translation>
 <translation id="2467438592969358367">Google Chrome wil jou wagwoorde uitvoer. Tik jou Windows-wagwoord in om dit toe te laat.</translation>
 <translation id="2485422356828889247">Deïnstalleer</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Hierdie uitbreiding het verander watter bladsy gewys word wanneer jy Chrome begin.</translation>
 <translation id="2765403129283291972">Chrome het toestemming nodig om toegang te kry tot jou mikrofoon vir hierdie werf</translation>
 <translation id="2770231113462710648">Verander verstekblaaier na:</translation>
+<translation id="2775140325783767197">Chrome kan nie jou wagwoorde nagaan nie. Probeer om jou internetverbinding na te gaan.</translation>
 <translation id="2799223571221894425">Begin weer</translation>
 <translation id="2847461019998147611">Wys Google Chrome in hierdie taal</translation>
 <translation id="2857540653560290388">Begin tans Chrome …</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Kry hulp met Chrome-bedryfstelsel</translation>
 <translation id="3396977131400919238">'n Bedryfstelselfout het met installering voorgekom. Laai Google Chrome asseblief weer af.</translation>
 <translation id="3398288718845740432">Versteek in Chrome-kieslys</translation>
+<translation id="3434246496373299699">Chrome kan jou wagwoorde nagaan as jy met jou Google-rekening aanmeld</translation>
 <translation id="3451115285585441894">Voeg tans by Chrome …</translation>
 <translation id="345171907106878721">Voeg jouself by Chrome</translation>
 <translation id="34857402635545079">Vee ook data van Chrome af uit (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome het toegang tot jou ligging nodig om jou ligging met hierdie werf te deel</translation>
+<translation id="3533694711092285624">Geen gestoorde wagwoorde nie. Chrome kan jou wagwoorde nagaan wanneer jy hulle stoor.</translation>
 <translation id="3576528680708590453">Jou stelseladministrateur het Google Chrome opgestel om 'n alternatiewe blaaier oop te maak om na <ph name="TARGET_URL_HOSTNAME" /> toe te gaan.</translation>
 <translation id="3582972582564653026">Sinkroniseer en personaliseer Chrome op al jou toestelle</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Jou administrateur vereis dat jy Chrome herbegin om 'n opdatering toe te pas}=1{Jou administrateur vereis dat jy Chrome herbegin om 'n opdatering toe te pas. Jou incognitovenster sal nie weer oopgemaak word nie.}other{Jou administrateur vereis dat jy Chrome herbegin om 'n opdatering toe te pas. Jou # incognitovensters sal nie weer oopgemaak word nie.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Daar is 'n nuwe weergawe van Google Chrome beskikbaar en dit is vinniger as ooit.</translation>
 <translation id="8614913330719544658">Google Chrome reageer nie. Herbegin nou?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome sal oor 1 minuut herbegin}other{Chrome sal oor # minute herbegin}}</translation>
+<translation id="8641606876632989680">Chrome sal jou in kennis stel wanneer jy met 'n gekompromitteerde wagwoord aanmeld</translation>
 <translation id="8669527147644353129">Google Chrome-helper</translation>
 <translation id="8679801911857917785">Dit beheer ook watter bladsy gewys word wanneer jy Chrome begin.</translation>
 <translation id="870251953148363156">Dateer Google Chrome op</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb
index 41508a45..0ab2a68 100644
--- a/chrome/app/resources/google_chrome_strings_am.xtb
+++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">ይሄ ሁለተኛ የGoogle Chrome ጭነት ነው፣ እና ነባሪ አሳሽዎ ማድረግ አይቻልም።</translation>
 <translation id="2341767445688917208">Chrome OS የእርስዎን የይለፍ ቃል ማስመር አልቻለም። አሁኑኑ ያስተካክሉ።</translation>
 <translation id="2348335408836342058">Chrome ለዚህ ጣቢያ የእርስዎን ካሜራ እና ማይክሮፎን ለመድረስ ፈቃድ ያስፈልገዋል</translation>
+<translation id="234869673307233423">Chrome የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። ቆይተው እንደገና ይሞክሩ።</translation>
 <translation id="2429317896000329049">ማመሳሰል ለጎራዎ ስለማይገኝ Google Chrome ውሂብዎን ማመሳሰል አልቻለም።</translation>
 <translation id="2467438592969358367">Google Chrome የእርስዎን የይለፍ ቃላት ወደ ውጭ መላክ ይፈልጋል። ይህንን ለመፍቀድ የWindows የይለፍ ቃልዎን ይተይቡ።</translation>
 <translation id="2485422356828889247">አራግፍ</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">ይህ ቅጥያ Chromeን ሲጀምሩት የሚታየውን ገጽ ቀይሮታል።</translation>
 <translation id="2765403129283291972">Chrome ለዚህ ጣቢያ የእርስዎን ማይክሮፎን ለመድረስ ፈቃድ ያስፈልገዋል</translation>
 <translation id="2770231113462710648">ነባሪ አሳሽን ወደዚህ ቀይር፦</translation>
+<translation id="2775140325783767197">Chrome የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። የበይነመረብ ግንኙነትዎን ለመፈተሽ ይሞክሩ።</translation>
 <translation id="2799223571221894425">ዳግም አስጀምር</translation>
 <translation id="2847461019998147611">Google Chromeን በዚህ ቋንቋ አሳይ</translation>
 <translation id="2857540653560290388">Chromeን በማስጀመር ላይ...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome OS ላይ እገዛ ያግኙ</translation>
 <translation id="3396977131400919238">በመጫን ጊዜ የሥርዓተ ክወና ስህተት ተፈጥሯል። እባክዎ Google Chromeን እንደገና ያውርዱ።</translation>
 <translation id="3398288718845740432">በChrome ምናሌ ውስጥ ደብቅ</translation>
+<translation id="3434246496373299699">Chrome በእርስዎ የGoogle መለያ በሚገቡበት ጊዜ የእርስዎን የይለፍ ቃላትን ሊፈትሽ ይችላል</translation>
 <translation id="3451115285585441894">ወድ Chrome በማከል ላይ...</translation>
 <translation id="345171907106878721">እራስዎን ወደ Chrome ያክሉ</translation>
 <translation id="34857402635545079">በተጨማሪ ከ Chrome (<ph name="URL" />) ውሂብን አጽዳ</translation>
 <translation id="3503306920980160878">Chrome አካባቢዎን ለዚህ ጣቢያ ለማጋራት የአካባቢዎ መዳረሻ ያስፈልገዋል</translation>
+<translation id="3533694711092285624">ምንም የተቀመጡ የይለፍ ቃላት የሉም። Chrome እርስዎ ሲያስቀምጧቸው የእርስዎን የይለፍ ቃላት መፈተሽ ይችላል።</translation>
 <translation id="3576528680708590453">የእርስዎ የስርዓት አስተዳዳሪ <ph name="TARGET_URL_HOSTNAME" />ን ለመድረስ Google Chrome ተለዋጭ አሳሽ እንዲከፍት አዋቅሮታል።</translation>
 <translation id="3582972582564653026">Chromeን በመላ መሣሪያዎችዎ ላይ ያስምሩ እና ግላዊነት ያላብሱ</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{አንድ ዝማኔ ለመተግበር አስተዳዳሪዎ Chromeን ዳግም እንዲያስጀምሩት ይፈልግብዎታል}=1{አንድ ዝማኔ ለመተግበር አስተዳዳሪዎ Chromeን ዳግም እንዲያስጀምሩት ይፈልግብዎታል። የእርስዎ ማንነት የማያሳውቅ መስኮት ዳግም አይከፈትም}one{አንድ ዝማኔ ለመተግበር አስተዳዳሪዎ Chromeን ዳግም እንዲያስጀምሩት ይፈልግብዎታል። የእርስዎ # ማንነት የማያሳውቁ መስኮቶች ዳግም አይከፈቱም}other{አንድ ዝማኔ ለመተግበር አስተዳዳሪዎ Chromeን ዳግም እንዲያስጀምሩት ይፈልግብዎታል። የእርስዎ # ማንነት የማያሳውቁ መስኮቶች ዳግም አይከፈቱም}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">አዲስ የGoogle Chrome ስሪት አለ፣ እና ከመቼውም በበለጠ ፈጣን ነው።</translation>
 <translation id="8614913330719544658">Google Chrome መልስ አይሰጥም። አሁን ዳግም ይጀምር?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome በ1 ደቂቃ ውስጥ ዳግም ይጀመራል}one{Chrome በ# ደቂቃዎች ውስጥ ዳግም ይጀመራል}other{Chrome በ# ደቂቃዎች ውስጥ ዳግም ይጀመራል}}</translation>
+<translation id="8641606876632989680">እርስዎ በተጠለፈ የይለፍ ቅቃል ሲገቡ Chrome ያሳውቀዎታል</translation>
 <translation id="8669527147644353129">Google Chrome አጋዥ</translation>
 <translation id="8679801911857917785">እንዲሁም Chromeን ሲጀምሩት የሚታየውን ገጽ ይቆጣጠራል።</translation>
 <translation id="870251953148363156">&amp;Google Chromeን አዘምን</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb
index 3b4be96..9d926b60 100644
--- a/chrome/app/resources/google_chrome_strings_ar.xtb
+++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -50,6 +50,7 @@
 <translation id="2309047409763057870">‏هذا تثبيت ثانوي من Google Chrome، ولا يمكن جعله متصفحك التلقائي.</translation>
 <translation id="2341767445688917208">‏تعذّر على نظام التشغيل Chrome مزامنة كلمات المرور. إصلاح المشكلة الآن</translation>
 <translation id="2348335408836342058">‏يحتاج Chrome إلى إذن للوصول إلى الكاميرا والميكروفون من أجل موقع الويب هذا.</translation>
+<translation id="234869673307233423">‏يتعذّر على Chrome التحقّق من كلمات المرور. يُرجى إعادة المحاولة.</translation>
 <translation id="2429317896000329049">‏تعذر على Google Chrome مزامنة البيانات نظرًا لأن المزامنة غير متاحة في نطاقك.</translation>
 <translation id="2467438592969358367">‏يرغب Google Chrome في تصدير كلمات مرورك، لذا يُرجى كتابة كلمة مرور Windows للسماح بذلك.</translation>
 <translation id="2485422356828889247">إزالة التثبيت</translation>
@@ -64,6 +65,7 @@
 <translation id="2689103672227170538">‏غيّرت هذه الإضافة الصفحة التي تظهر عند بدء تشغيل Chrome.</translation>
 <translation id="2765403129283291972">‏يحتاج Chrome إلى إذن للوصول إلى الميكروفون من أجل موقع الويب هذا.</translation>
 <translation id="2770231113462710648">تغيير المتصفح التلقائي إلى:</translation>
+<translation id="2775140325783767197">‏يتعذّر على Chrome التحقّق من كلمات المرور. يُرجى التحقّق من اتصال الإنترنت.</translation>
 <translation id="2799223571221894425">إعادة تشغيل</translation>
 <translation id="2847461019998147611">‏عرض Google Chrome بهذه اللغة</translation>
 <translation id="2857540653560290388">‏جارٍ إطلاق Chrome...</translation>
@@ -82,10 +84,12 @@
 <translation id="3395323229510056640">‏الحصول على مساعدة في نظام التشغيل Chrome</translation>
 <translation id="3396977131400919238">‏حدث خطأ في نظام التشغيل أثناء عملية التثبيت. يُرجى تنزيل Google Chrome مرة أخرى.</translation>
 <translation id="3398288718845740432">‏الإخفاء في قائمة Chrome</translation>
+<translation id="3434246496373299699">‏لا يستطيع Chrome التحقّق من كلمات المرور إلا عند تسجيل الدخول باستخدام حسابك على Google.</translation>
 <translation id="3451115285585441894">‏جارٍ الإضافة إلى Chrome...</translation>
 <translation id="345171907106878721">‏إضافة نفسك إلى Chrome</translation>
 <translation id="34857402635545079">‏محو البيانات من Chrome أيضًا (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">‏يحتاج Chrome للوصول إلى موقعك الجغرافي لمشاركته مع موقع الويب هذا.</translation>
+<translation id="3533694711092285624">‏ما مِن كلمات مرور محفوظة. لا يستطيع متصفّح Chrome التحقّق من كلمات المرور إلا عند حفظها.</translation>
 <translation id="3576528680708590453">‏ضَبَط مشرف النظام Google Chrome لفتح متصفِّح بديل للوصول إلى <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">‏يمكنك مزامنة Chrome وتخصيصه على جميع أجهزتك.</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{‏يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث.}=1{‏يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث. لن تتم إعادة فتح نافذة التصفح المتخفي.}two{‏يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث. لن تتم إعادة فتح نافذتَي التصفح المتخفي.}few{‏يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}many{‏يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}other{‏يطلب المشرف إعادة تشغيل Chrome لتطبيق تحديث. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">‏يتوفر إصدار جديد من Google Chrome، وهو أسرع بكثير من ذي قبل.</translation>
 <translation id="8614913330719544658">‏لا يستجيب Google Chrome. هل تريد إعادة التشغيل الآن؟</translation>
 <translation id="8625237574518804553">{0,plural, =1{‏ستتم إعادة تشغيل Chrome في غضون دقيقة واحدة}zero{‏ستتم إعادة تشغيل Chrome في غضون # دقيقة}two{‏ستتم إعادة تشغيل Chrome في غضون دقيقتين}few{‏ستتم إعادة تشغيل Chrome في غضون # دقائق}many{‏ستتم إعادة تشغيل Chrome في غضون # دقيقةً}other{‏ستتم إعادة تشغيل Chrome في غضون # دقيقة}}</translation>
+<translation id="8641606876632989680">‏في حال تسجيل الدخول باستخدام كلمة مرور محتمَل تعرّضها للاختراق، سيرسل Chrome إشعارات إليك.</translation>
 <translation id="8669527147644353129">‏مساعد Google Chrome</translation>
 <translation id="8679801911857917785">‏كما أنها تتحكم في الصفحة التي تظهر عند تشغيل Chrome.</translation>
 <translation id="870251953148363156">‏&amp;تحديث Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_as.xtb b/chrome/app/resources/google_chrome_strings_as.xtb
index c87ff76..0dd3d73 100644
--- a/chrome/app/resources/google_chrome_strings_as.xtb
+++ b/chrome/app/resources/google_chrome_strings_as.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">এয়া Google Chromeৰ এক গৌণ ইনষ্টলেশ্বন আৰু ইয়াক আপোনাৰ ডিফ’ল্ট ব্ৰাউজাৰ কৰিব নোৱাৰি।</translation>
 <translation id="2341767445688917208">Chrome OSএ আপোনাৰ পাছৱৰ্ডসমূহ ছিংক কৰিব নোৱাৰিলে। এতিয়াই সমাধান কৰক।</translation>
 <translation id="2348335408836342058">এই ছাইটটোত আপোনাৰ কেমেৰা আৰু মাইক্ৰ’ফ’ন এক্সেছ কৰিবলৈ Chromeক অনুমতিৰ আৱশ্যক</translation>
+<translation id="234869673307233423">Chromeএ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰে। পাছত আকৌ চেষ্টা কৰক।</translation>
 <translation id="2429317896000329049">আপোনাৰ ড’মেইনত ছিংক কৰা সুবিধাটো নাই বাবে Google Chromeএ আপোনাৰ ডেটা ছিংক কৰিব নোৱাৰে।</translation>
 <translation id="2467438592969358367">Google Chromeএ আপোনাৰ পাছৱর্ডসমূহ ৰপ্তানি কৰিব খোজে। এই কার্যৰ বাবে অনুমতি দিবলৈ আপোনাৰ Windowsৰ পাছৱর্ড দিয়ক।</translation>
 <translation id="2485422356828889247">আনইনষ্টল কৰক</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">আপুনি Chrome আৰম্ভ কৰিলে কি পৃষ্ঠা দেখুওৱা হ‘ব এই এক্সটেনশ্বনটোৱে সেইটো সলনি কৰিছে।</translation>
 <translation id="2765403129283291972">Chromeক এই ছাইটৰ বাবে আপোনাৰ মাইক্ৰ'ফ'ন ব্যৱহাৰ কৰিবলৈ অনুমতিৰ আৱশ্যক</translation>
 <translation id="2770231113462710648">ইয়ালৈ ডিফ’ল্ট ব্ৰাউজাৰ সলনি কৰক:</translation>
+<translation id="2775140325783767197">Chromeএ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰে। আপোনাৰ ইণ্টাৰনেট সংযোগ পৰীক্ষা কৰি চাওক।</translation>
 <translation id="2799223571221894425">পুনৰ লঞ্চ কৰক</translation>
 <translation id="2847461019998147611">Google Chrome এইটো ভাষাত দেখুৱাওক</translation>
 <translation id="2857540653560290388">Chrome লঞ্চ কৰি থকা হৈছে...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome OSৰ বিষয়ে সহায় লাভ কৰক</translation>
 <translation id="3396977131400919238">ইনষ্টলেশ্বনৰ সময়ত অপাৰেটিং ছিষ্টেম সম্পর্কীয় এটা আসোঁৱাহ হৈছে। অনুগ্ৰহ কৰি Google Chrome পুনৰ ডাউনল’ড কৰক।</translation>
 <translation id="3398288718845740432">Chrome মেনুত লুকুৱাওক</translation>
+<translation id="3434246496373299699">আপুনি নিজৰ Google একাউণ্টটোৰ জৰিয়তে ছাইন ইন কৰোঁতে Chromeএ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব পাৰে</translation>
 <translation id="3451115285585441894">Chromeলৈ যোগ কৰি থকা হৈছে...</translation>
 <translation id="345171907106878721">নিজকে Chromeত যোগ কৰক</translation>
 <translation id="34857402635545079">লগতে Chrome (<ph name="URL" />)ৰ ডেটাও মচক</translation>
 <translation id="3503306920980160878">এই ছাইটটোৰ সৈতে আপোনাৰ অৱস্থান শ্বেয়াৰ কৰিবলৈ Chromeএ আপোনাৰ অৱস্থান এক্সেছ কৰাটো দৰকাৰ</translation>
+<translation id="3533694711092285624">ছেভ কৰা কোনো পাছৱৰ্ড নাই। আপুনি আপোনাৰ পাছৱর্ডসমূহ ছেভ কৰিলে Chromeএ সেইবোৰ পৰীক্ষা কৰিব পাৰে।</translation>
 <translation id="3576528680708590453">আপোনাৰ ছিষ্টেমৰ প্ৰশাসকে <ph name="TARGET_URL_HOSTNAME" /> এক্সেছ কৰিবলৈ Google Chromeক এটা বিকল্প ব্ৰাউজাৰ খুলিবলৈ কনফিগাৰ কৰিছে।</translation>
 <translation id="3582972582564653026">আপোনাৰ সমগ্ৰ ডিভাইচতে Chromeক ছিংক কৰি ব্যক্তিকৃত কৰক</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{আপোনাৰ প্ৰশাসকে কোনো আপডে’ট প্ৰয়োগ কৰিবলৈ আপুনি Chrome পুনৰ লঞ্চ কৰাটো বিচাৰে}=1{আপোনাৰ প্ৰশাসকে কোনো আপডে’ট প্ৰয়োগ কৰিবলৈ আপুনি Chrome পুনৰ লঞ্চ কৰাটো বিচাৰে। আপোনাৰ.ইনক’গনিট' ৱিণ্ড'খন পুনৰ খুলিব নোৱাৰিব।}one{আপোনাৰ প্ৰশাসকে কোনো আপডে’ট প্ৰয়োগ কৰিবলৈ আপুনি Chrome পুনৰ লঞ্চ কৰাটো বিচাৰে। আপোনাৰ #খন.ইনক’গনিট' ৱিণ্ড' পুনৰ খুলিব নোৱাৰিব।}other{আপোনাৰ প্ৰশাসকে কোনো আপডে’ট প্ৰয়োগ কৰিবলৈ আপুনি Chrome পুনৰ লঞ্চ কৰাটো বিচাৰে। আপোনাৰ #খন.ইনক’গনিট' ৱিণ্ড' পুনৰ খুলিব নোৱাৰিব।}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Google Chromerৰ এটা নতুন সংস্কৰণ উপলব্ধ হৈছে আৰু এইটো সকলোতকৈ দ্ৰুত।</translation>
 <translation id="8614913330719544658">Google Chromeএ সঁহাৰি জনোৱা নাই। এতিয়াই পুনৰ লঞ্চ কৰিবনে?</translation>
 <translation id="8625237574518804553">{0,plural, =1{১ মিনিটত Chrome পুনৰ লঞ্চ হ’ব}one{# মিনিটত Chrome পুনৰ লঞ্চ হ’ব}other{# মিনিটত Chrome পুনৰ লঞ্চ হ’ব}}</translation>
+<translation id="8641606876632989680">আপুনি কোনো হেক কৰা পাছৱৰ্ডৰ জৰিয়তে ছাইন ইন কৰিলে Chromeএ আপোনাক জাননী দিব</translation>
 <translation id="8669527147644353129">Google Chrome সহায়ক</translation>
 <translation id="8679801911857917785">আপুনি Chrome আৰম্ভ কৰিলে কি পৃষ্ঠা দেখুওৱা হ’ব সেয়াও ই নিয়ন্ত্ৰণ কৰে।</translation>
 <translation id="870251953148363156">&amp;Google Chrome আপডে’ট কৰক</translation>
diff --git a/chrome/app/resources/google_chrome_strings_az.xtb b/chrome/app/resources/google_chrome_strings_az.xtb
index a48878c..cfe5191 100644
--- a/chrome/app/resources/google_chrome_strings_az.xtb
+++ b/chrome/app/resources/google_chrome_strings_az.xtb
@@ -50,6 +50,7 @@
 <translation id="2309047409763057870">Bu Chromium'un ikinci quraşdırmasıdır və defolt brauzer kimi ayarlana bilmir.</translation>
 <translation id="2341767445688917208">Chrome OS parollarınızı sinxronizasiya edə bilmədi. İndi düzəliş edin.</translation>
 <translation id="2348335408836342058">Chrome bu sayt üçün kamera və mikrofona giriş tələb edir</translation>
+<translation id="234869673307233423">Chrome parollarınızı yoxlaya bilmir. Sonra yenidən cəhd edin.</translation>
 <translation id="2429317896000329049">Google Chrome datanızı sinxronizasiya edə bilmədi, çünki sinxronizasiya domeniniz üçün əlçatan deyil.</translation>
 <translation id="2467438592969358367">Google Chrome parolları eksport etmək istəyir. Buna icazə vermək üçün Windows parolunuzu yazın.</translation>
 <translation id="2485422356828889247">Sistemdən silin</translation>
@@ -64,6 +65,7 @@
 <translation id="2689103672227170538">Bu artırma Chrome'u başlatdığınız zaman hansı səhifənin göstərildiyini dəyişdi.</translation>
 <translation id="2765403129283291972">Chrome bu sayt üçün mikrofona giriş tələb edir</translation>
 <translation id="2770231113462710648">Defolt brauzeri dəyişin:</translation>
+<translation id="2775140325783767197">Chrome parollarınızı yoxlaya bilmir. İnternet bağlantınızı yoxlamağa cəhd edin.</translation>
 <translation id="2799223571221894425">Yenidən başladın</translation>
 <translation id="2847461019998147611">Google Chrome məhsulunu bu dildə görüntüləyin</translation>
 <translation id="2857540653560290388">Chrome başlayır...</translation>
@@ -82,10 +84,12 @@
 <translation id="3395323229510056640">Chrome OS ilə yardım alın</translation>
 <translation id="3396977131400919238">Quraşdırma zamanı əməliyyat xətası baş verdi. Lütfən, Google Chrome'u endirin.</translation>
 <translation id="3398288718845740432">Chrome Menyusunda gizlədin</translation>
+<translation id="3434246496373299699">Google Hesabınız ilə daxil olduqda Chrome parollarınızı yoxlaya bilər</translation>
 <translation id="3451115285585441894">Chrome'a əlavə olunur...</translation>
 <translation id="345171907106878721">Özünüzü Chrome'a əlavə edin</translation>
 <translation id="34857402635545079">Chrome'dan datanı silin (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome məkanı bu saytla paylaşmaq üçün məkana giriş tələb edir</translation>
+<translation id="3533694711092285624">Yadda saxlanmış parol yoxdur. Parollarınızı yadda saxladıqda Chrome onları yoxlaya bilər.</translation>
 <translation id="3576528680708590453">Sistem administratoru Google Chrome'u <ph name="TARGET_URL_HOSTNAME" /> ünvanına daxil olmaq məqsədilə alternativ brauzer açmaq üçün konfiqurasiya edib.</translation>
 <translation id="3582972582564653026">Chrome'u cihazlarda sinxronizasiya edin və fərdiləşdirin</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administrator güncəlləməni tətbiq etmək üçün Chrome'u yenidən başlatmanızı tələb edir}=1{Administrator güncəlləməni tətbiq etmək üçün Chrome'u yenidən başlatmanızı tələb edir. Anonim pəncərəniz yenidən açılmayacaq.}other{Administrator güncəlləməni tətbiq etmək üçün Chrome'u yenidən başlatmanızı tələb edir. # Anonim pəncərəniz yenidən açılmayacaq.}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">Yeni Google Chrome versiyası var ki, öncəkindən daha sürətlidir.</translation>
 <translation id="8614913330719544658">Google Chrome cavab vermir. Yenidən başladılsın?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 1 dəqiqəyə yenidən başlayacaq}other{Chrome # dəqiqəyə yenidən başlayacaq}}</translation>
+<translation id="8641606876632989680">Oğurlanmış parol ilə daxil olduqda Chrome sizə bildiriş göndərəcək</translation>
 <translation id="8669527147644353129">Google Chrome Yardımçı</translation>
 <translation id="8679801911857917785">O, həmçinin, Chrome açılanda hansı səhifənin göstərildiyini idarə edir.</translation>
 <translation id="870251953148363156">Google Chrome'u güncəlləşdirin</translation>
diff --git a/chrome/app/resources/google_chrome_strings_be.xtb b/chrome/app/resources/google_chrome_strings_be.xtb
index 4304ee43..714484c 100644
--- a/chrome/app/resources/google_chrome_strings_be.xtb
+++ b/chrome/app/resources/google_chrome_strings_be.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Гэта другасны ўсталяваны экзэмпляр Google Chrome – яго нельга зрабіць стандартным браўзерам.</translation>
 <translation id="2341767445688917208">Сістэме Chrome OS не ўдалося сінхранізаваць паролі. Вырашыце праблему.</translation>
 <translation id="2348335408836342058">Chrome запытвае дазвол на доступ да вашай камеры і мікрафона для гэтага сайта</translation>
+<translation id="234869673307233423">Браўзеру Chrome не ўдаецца праверыць паролі. Паўтарыце спробу пазней.</translation>
 <translation id="2429317896000329049">Браўзеру Google Chrome не ўдалося сінхранізаваць даныя: для вашага дамена сінхранізацыя недаступная.</translation>
 <translation id="2467438592969358367">Google Chrome запытвае дазвол на экспартаванне вашых пароляў. Каб дазволіць гэта, увядзіце пароль Windows.</translation>
 <translation id="2485422356828889247">Выдаліць</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Гэта пашырэнне змяніла старонку, якая паказваецца пры запуску Chrome.</translation>
 <translation id="2765403129283291972">Chrome запытвае дазвол на доступ да мікрафона для гэтага сайта</translation>
 <translation id="2770231113462710648">Зрабіць стандартным наступны браўзер:</translation>
+<translation id="2775140325783767197">Браўзеру Chrome не ўдаецца праверыць паролі. Паспрабуйце праверыць падключэнне да інтэрнэту.</translation>
 <translation id="2799223571221894425">Перазапусціць</translation>
 <translation id="2847461019998147611">Паказваць Google Chrome на гэтай мове</translation>
 <translation id="2857540653560290388">Ідзе запуск Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Даведка па Chrome OS</translation>
 <translation id="3396977131400919238">Падчас усталявання адбылася памылка аперацыйнай сістэмы. Спампуйце Google Chrome зноў.</translation>
 <translation id="3398288718845740432">Схаваць у меню Chrome</translation>
+<translation id="3434246496373299699">Chrome зможа праверыць паролі толькі пасля таго, як вы ўвойдзеце ва Уліковы запіс Google</translation>
 <translation id="3451115285585441894">Ідзе дадаванне ў Chrome...</translation>
 <translation id="345171907106878721">Дадаць мяне ў Chrome</translation>
 <translation id="34857402635545079">Таксама выдаліць даныя з Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome патрабуе доступу да вашага месцазнаходжання, каб абагуліць яго з гэтым сайтам</translation>
+<translation id="3533694711092285624">Няма захаваных пароляў. Chrome можа правяраць толькі захаваныя паролі.</translation>
 <translation id="3576528680708590453">Ваш сістэмны адміністратар наладзіў Google Chrome, каб адкрыць альтэрнатыўны браўзер для доступу да <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Сінхранізуйце і персаналізуйце Chrome на сваіх прыладах</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Ваш адміністратар патрабуе перазапусціць Chrome для ўсталявання абнаўлення}=1{Ваш адміністратар патрабуе перазапусціць Chrome для ўсталявання абнаўлення. Акно ў рэжыме інкогніта не будзе адкрыта паўторна.}one{Ваш адміністратар патрабуе перазапусціць Chrome для ўсталявання абнаўлення. # акно ў рэжыме інкогніта не будзе адкрыта паўторна.}few{Ваш адміністратар патрабуе перазапусціць Chrome для ўсталявання абнаўлення. # акны ў рэжыме інкогніта не будуць адкрыты паўторна.}many{Ваш адміністратар патрабуе перазапусціць Chrome для ўсталявання абнаўлення. # вокнаў у рэжыме інкогніта не будуць адкрыты паўторна.}other{Ваш адміністратар патрабуе перазапусціць Chrome для ўсталявання абнаўлення. # акна ў рэжыме інкогніта не будуць адкрыты паўторна.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Даступная новая версія Google Chrome. Яшчэ хутчэйшая.</translation>
 <translation id="8614913330719544658">Google Chrome не адказвае. Перазапусціць?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome будзе перазапушчаны праз 1 хвіліну}one{Chrome будзе перазапушчаны праз # хвіліну}few{Chrome будзе перазапушчаны праз # хвіліны}many{Chrome будзе перазапушчаны праз # хвілін}other{Chrome будзе перазапушчаны праз # хвіліны}}</translation>
+<translation id="8641606876632989680">Chrome адправіць вам апавяшчэнне, калі вы ўвойдзеце ва ўліковы запіс, выкарыстаўшы раскрыты пароль</translation>
 <translation id="8669527147644353129">Памочнік Google Chrome</translation>
 <translation id="8679801911857917785">Таксама вызначае, якая старонка паказваецца пры запуску Chrome.</translation>
 <translation id="870251953148363156">Абнавіць &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb
index f2cbf44..1395814 100644
--- a/chrome/app/resources/google_chrome_strings_bg.xtb
+++ b/chrome/app/resources/google_chrome_strings_bg.xtb
@@ -49,6 +49,7 @@
 <translation id="2309047409763057870">Тази инсталация на Google Chrome е алтернативна и не може да се зададе като браузър по подразбиране.</translation>
 <translation id="2341767445688917208">Chrome OS не синхронизира паролите ви. Отстранете проблема.</translation>
 <translation id="2348335408836342058">Chrome се нуждае от разрешение за достъп до камерата и микрофона ви за този сайт</translation>
+<translation id="234869673307233423">Chrome не може да провери паролите ви. Опитайте пак по-късно.</translation>
 <translation id="2429317896000329049">Google Chrome не можа да синхронизира данните ви, защото синхронизирането не е налице за домейна ви.</translation>
 <translation id="2467438592969358367">Google Chrome иска да експортира паролите ви. За да разрешите това, въведете паролата си за Windows.</translation>
 <translation id="2485422356828889247">Деинсталиране</translation>
@@ -63,6 +64,7 @@
 <translation id="2689103672227170538">Това разширение промени страницата, която се показва при стартиране на Chrome.</translation>
 <translation id="2765403129283291972">Chrome се нуждае от разрешение за достъп до микрофона ви за този сайт</translation>
 <translation id="2770231113462710648">Промяна на браузъра по подразбиране с/ъс:</translation>
+<translation id="2775140325783767197">Chrome не може да провери паролите ви. Проверете връзката си с интернет.</translation>
 <translation id="2799223571221894425">Стартиране отново</translation>
 <translation id="2847461019998147611">Показване на Google Chrome на този език</translation>
 <translation id="2857540653560290388">Chrome се стартира...</translation>
@@ -81,10 +83,12 @@
 <translation id="3395323229510056640">Получаване на помощ за Chrome OS</translation>
 <translation id="3396977131400919238">По време на инсталирането възникна грешка в операционната система. Моля, изтеглете Google Chrome отново.</translation>
 <translation id="3398288718845740432">Скриване в менюто на Chrome</translation>
+<translation id="3434246496373299699">Chrome може да проверява паролите ви, когато влезете с профила си в Google</translation>
 <translation id="3451115285585441894">Добавя се към Chrome...</translation>
 <translation id="345171907106878721">Добавяне на вас към Chrome</translation>
 <translation id="34857402635545079">Да се изчистят и данните от Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome се нуждае от достъп до данните за местоположението ви, за да ги сподели с този сайт</translation>
+<translation id="3533694711092285624">Няма запазени пароли. Chrome може да проверява паролите ви, когато ги запазите.</translation>
 <translation id="3576528680708590453">Системният ви администратор е конфигурирал Google Chrome да отваря алтернативен браузър за достъп до <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Синхронизирайте и персонализирайте Chrome на всичките си устройства</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Администраторът ви изисква да рестартирате Chrome, за да се приложи актуализация}=1{Администраторът ви изисква да рестартирате Chrome, за да се приложи актуализация. Прозорецът ви в режим „инкогнито“ няма да бъде отворен отново.}other{Администраторът ви изисква да рестартирате Chrome, за да се приложи актуализация. Вашите # прозореца в режим „инкогнито“ няма да бъдат отворени отново.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Налице е нова версия на Google Chrome, която е по-бърза от всякога.</translation>
 <translation id="8614913330719544658">Google Chrome блокира. Да се стартира ли отново сега?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome ще се стартира отново след 1 минута}other{Chrome ще се стартира отново след # минути}}</translation>
+<translation id="8641606876632989680">Chrome ще ви уведоми, когато влизате в профил с компрометирана парола</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">То също контролира коя страница се показва при стартиране на Chrome.</translation>
 <translation id="870251953148363156">Актуализиране на &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bn.xtb b/chrome/app/resources/google_chrome_strings_bn.xtb
index e48ce92..98882dba 100644
--- a/chrome/app/resources/google_chrome_strings_bn.xtb
+++ b/chrome/app/resources/google_chrome_strings_bn.xtb
@@ -50,6 +50,7 @@
 <translation id="2309047409763057870">এটা Google Chrome-এর সেকেন্ডারি ইনস্টলেশন এবং একে আপনার ডিফল্ট ব্রাউজার করা যাবে না।</translation>
 <translation id="2341767445688917208">Chrome OS আপনার পাসওয়ার্ড সিঙ্ক করতে পারেনি। এখনই ঠিক করুন।</translation>
 <translation id="2348335408836342058">এই সাইটটির জন্য Chrome কে আপনার ক্যামেরা এবং মাইক্রোফোনে অ্যাক্সেস দিতে হবে</translation>
+<translation id="234869673307233423">Chrome আপনার পাসওয়ার্ড চেক করতে পারছে না। পরে আবার চেষ্টা করুন।</translation>
 <translation id="2429317896000329049">আপনার ডোমেনে সিঙ্ক উপলভ্য না থাকার কারণে Google Chrome সিঙ্ক করতে পারেনি৷</translation>
 <translation id="2467438592969358367">Google Chrome আপনার পাসওয়ার্ড এক্সপোর্ট করতে চাইছে। অনুমতি দিতে Windows এর পাসওয়ার্ড টাইপ করুন।</translation>
 <translation id="2485422356828889247">আনইনস্টল</translation>
@@ -64,6 +65,7 @@
 <translation id="2689103672227170538">আপনি Chrome চালু করলে কোন পৃষ্ঠাটি দেখানো হবে তা এই এক্সটেনশনটি পরিবর্তন করেছে।</translation>
 <translation id="2765403129283291972">এই সাইটটির জন্য Chrome কে আপনার মাইক্রোফোনে অ্যাক্সেস দিতে হবে</translation>
 <translation id="2770231113462710648">ডিফল্ট ব্রাউজার এতে পরিবর্তন করুন:</translation>
+<translation id="2775140325783767197">আপনার পাসওয়ার্ড Chrome চেক করে দেখতে পারছে না। আপনার ইন্টারনেট কানেকশন চেক করে দেখে নিন।</translation>
 <translation id="2799223571221894425">পুনঃশুরু</translation>
 <translation id="2847461019998147611">এই ভাষায় Google Chrome প্রদর্শন করুন</translation>
 <translation id="2857540653560290388">Chrome লঞ্চ করা হচ্ছে...</translation>
@@ -82,10 +84,12 @@
 <translation id="3395323229510056640">Chrome OS বিষয়ে সাহায্য পান</translation>
 <translation id="3396977131400919238">ইনস্টলেশনের সময় অপারেটিং সিস্টেমে একটি ত্রুটি ঘটেছিল৷ অনুগ্রহ করে আবার Google Chrome ডাউনলোড করুন৷</translation>
 <translation id="3398288718845740432">Chromium মেনুর মধ্যে লুকান</translation>
+<translation id="3434246496373299699">আপনি যখন নিজের Google অ্যাকাউন্টের মাধ্যমে সাইন-ইন করবেন, Chrome তখন আপনার পাসওয়ার্ড চেক করে দেখতে পারবে</translation>
 <translation id="3451115285585441894">Chrome-এ জোড়া হচ্ছে...</translation>
 <translation id="345171907106878721">Chrome এর সাথে নিজেকে যোগ করুন</translation>
 <translation id="34857402635545079">এছাড়া, Chrome থেকেও ডেটা সরান (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">এই সাইটটির সাথে আপনার লোকেশন শেয়ার করার জন্য Chrome কে আপনার লোকেশনের তথ্যে অ্যাক্সেস দিতে হবে</translation>
+<translation id="3533694711092285624">কোনও পাসওয়ার্ড সেভ করা নেই। আপনি পাসওয়ার্ড সেভ করলে Chrome সেটি চেক করতে পারবে।</translation>
 <translation id="3576528680708590453"><ph name="TARGET_URL_HOSTNAME" /> অ্যাক্সেস করতে অন্য ব্রাউজার খোলার জন্য আপনার সিস্টেম অ্যাডমিনিস্ট্রেটর Google Chrome কনফিগার করেছেন।</translation>
 <translation id="3582972582564653026">আপনার সব ডিভাইস জুড়ে Chrome সিঙ্ক করুন এবং নিজের মতো সাজিয়ে নিন</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{একটি আপডেট প্রয়োগ করতে আপনার অ্যাডমিনিস্ট্রেটর আপনাকে Chrome আবার চালু করতে বলছেন}=1{একটি আপডেট প্রয়োগ করতে আপনার অ্যাডমিনিস্ট্রেটর আপনাকে Chrome আবার চালু করতে বলছেন। আপনার ছদ্মবেশী উইন্ডো আবার খুলবে না।}one{একটি আপডেট প্রয়োগ করতে আপনার অ্যাডমিনিস্ট্রেটর আপনাকে Chrome আবার চালু করতে বলছেন। আপনার #টি ছদ্মবেশী উইন্ডো আবার খুলবে না।}other{একটি আপডেট প্রয়োগ করতে আপনার অ্যাডমিনিস্ট্রেটর আপনাকে Chrome আবার চালু করতে বলছেন। আপনার #টি ছদ্মবেশী উইন্ডো আবার খুলবে না।}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">Google Chrome-এর একটি নতুন ভার্সন উপলভ্য এবং এটি আগের তুলনায় দ্রুততর৷</translation>
 <translation id="8614913330719544658">Google Chrome প্রতিক্রিয়া করছে না৷ এখনই পুনঃলঞ্চ করবেন?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome ১ মিনিটের মধ্যে আবার লঞ্চ হবে}one{Chrome # মিনিটের মধ্যে আবার লঞ্চ হবে}other{Chrome # মিনিটের মধ্যে আবার লঞ্চ হবে}}</translation>
+<translation id="8641606876632989680">কোনও চুরি যাওয়া পাসওয়ার্ড দিয়ে সাইন-ইন করলে Chrome আপনাকে তা জানাবে</translation>
 <translation id="8669527147644353129">Google Chrome সহায়তাকারী</translation>
 <translation id="8679801911857917785">আপনি Chrome শুরু করলে কোন পৃষ্ঠাটি দেখানো হবে তাও এটি নিয়ন্ত্রণ করে।</translation>
 <translation id="870251953148363156">&amp;Google Chrome আপডেট</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bs.xtb b/chrome/app/resources/google_chrome_strings_bs.xtb
index 04aaaf0d..a0f4c0b 100644
--- a/chrome/app/resources/google_chrome_strings_bs.xtb
+++ b/chrome/app/resources/google_chrome_strings_bs.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Ovo je sekundarna instalacija Google Chromea, pa on ne može biti vaš zadani preglednik.</translation>
 <translation id="2341767445688917208">Chrome OS nije uspio sinhronizirati vaše lozinke. Ispravi sada.</translation>
 <translation id="2348335408836342058">Chromeu treba odobrenje za pristup vašoj kameri i mikrofonu na ovoj web lokaciji</translation>
+<translation id="234869673307233423">Chrome ne može provjeravati vaše lozinke. Pokušajte ponovo kasnije.</translation>
 <translation id="2429317896000329049">Google Chrome ne može sinhronizirati vaše podatke jer sinhronizacija nije dostupna za vašu domenu.</translation>
 <translation id="2467438592969358367">Google Chrome želi izvesti vaše lozinke. Unesite svoju lozinku za Windows da ovo omogućite.</translation>
 <translation id="2485422356828889247">Deinstaliraj</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Ova ekstenzija je promijenila stranicu koja se prikazuje prilikom pokretanja Chromea.</translation>
 <translation id="2765403129283291972">Chrome treba dopuštenje za pristup mikrofonu za ovu web-lokaciju</translation>
 <translation id="2770231113462710648">Promijenite zadani preglednik u:</translation>
+<translation id="2775140325783767197">Chrome ne može provjeravati vaše lozinke. Predlažemo da provjerite internetsku vezu.</translation>
 <translation id="2799223571221894425">Ponovo pokreni</translation>
 <translation id="2847461019998147611">Prikaži Google Chrome na ovom jeziku</translation>
 <translation id="2857540653560290388">Pokretanje Chromea...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Potražite pomoć za Chrome OS</translation>
 <translation id="3396977131400919238">Došlo je do greške operativnog sistema prilikom instalacije. Ponovo preuzmite Google Chrome.</translation>
 <translation id="3398288718845740432">Sakrij u Chrome meniju</translation>
+<translation id="3434246496373299699">Chrome može provjeravati vaše lozinke kada se prijavite pomoću Google računa</translation>
 <translation id="3451115285585441894">Dodavanje u Chrome...</translation>
 <translation id="345171907106878721">Dodajte sebe na Chrome</translation>
 <translation id="34857402635545079">Obrišite podatke i s Chromea (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome traži pristup vašoj lokaciji da bi je podijelio s ovom web lokacijom.</translation>
+<translation id="3533694711092285624">Nema sačuvanih lozinki. Chrome može provjeravati vaše lozinke kada ih sačuvate.</translation>
 <translation id="3576528680708590453">Vaš administrator sustava konfigurirao je Google Chrome da otvara zamjenski preglednik za pristup URL-u <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sinhronizirajte i personalizirajte Chrome na svim uređajima</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administrator traži da ponovo pokrenete Chrome radi primjene ažuriranja}=1{Administrator traži da ponovo pokrenete Chrome radi primjene ažuriranja. Vaš anonimni prozor se neće ponovo otvoriti.}one{Administrator traži da ponovo pokrenete Chrome radi primjene ažuriranja. Vaš # anonimni prozor se neće ponovo otvoriti.}few{Administrator traži da ponovo pokrenete Chrome radi primjene ažuriranja. Vaša # anonimna prozora se neće ponovo otvoriti.}other{Administrator traži da ponovo pokrenete Chrome radi primjene ažuriranja. Vaših # anonimnih prozora se neće ponovo otvoriti.}}</translation>
@@ -236,6 +240,7 @@
 <translation id="8556340503434111824">Dostupna je nova verzija Google Chromea koji je brži nego ikad.</translation>
 <translation id="8614913330719544658">Google Chrome ne reagira. Ponovo pokrenuti sada?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome će se ponovo pokrenuti za 1 minutu}one{Chrome će se ponovo pokrenuti za # minutu}few{Chrome će se ponovo pokrenuti za # minute}other{Chrome će se ponovo pokrenuti za # minuta}}</translation>
+<translation id="8641606876632989680">Chrome će vas obavijestiti kada se prijavite s ugroženom lozinkom</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Također kontrolira koja stranica se prikazuje kada pokrenete Chrome.</translation>
 <translation id="870251953148363156">Ažuriraj &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb
index 653319f..aa9b397 100644
--- a/chrome/app/resources/google_chrome_strings_ca.xtb
+++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -47,6 +47,7 @@
 <translation id="2309047409763057870">Aquesta és una instal·lació secundària de Google Chrome i no pot definir-se com a navegador predeterminat.</translation>
 <translation id="2341767445688917208">Chrome OS no ha pogut sincronitzar les teves contrasenyes. Soluciona aquest problema.</translation>
 <translation id="2348335408836342058">Per visitar aquest lloc web, Chrome necessita permís per accedir a la càmera i al micròfon</translation>
+<translation id="234869673307233423">Chrome no pot comprovar les teves contrasenyes. Torna-ho a provar més tard.</translation>
 <translation id="2429317896000329049">Google Chrome no ha pogut sincronitzar les dades perquè la sincronització no està disponible per al vostre domini.</translation>
 <translation id="2467438592969358367">Google Chrome vol exportar les teves contrasenyes. Escriu la contrasenya de Windows per permetre-ho.</translation>
 <translation id="2485422356828889247">Desinstal·la</translation>
@@ -61,6 +62,7 @@
 <translation id="2689103672227170538">Aquesta extensió ha canviat la pàgina que es mostra quan inicieu Chrome.</translation>
 <translation id="2765403129283291972">Per visitar aquest lloc web, Chrome necessita permís per accedir al micròfon</translation>
 <translation id="2770231113462710648">Canvia el navegador predeterminat a:</translation>
+<translation id="2775140325783767197">Chrome no pot comprovar les teves contrasenyes. Comprova la connexió a Internet.</translation>
 <translation id="2799223571221894425">Reinicia</translation>
 <translation id="2847461019998147611">Mostra Google Chrome en aquest idioma</translation>
 <translation id="2857540653560290388">S'està iniciant Chrome...</translation>
@@ -79,10 +81,12 @@
 <translation id="3395323229510056640">Obtén ajuda per a Chrome OS</translation>
 <translation id="3396977131400919238">S'ha produït un error en el sistema operatiu durant la instal·lació. Torna a baixar Google Chrome.</translation>
 <translation id="3398288718845740432">Amaga al menú de Chrome</translation>
+<translation id="3434246496373299699">Chrome pot comprovar les teves contrasenyes quan inicies la sessió amb el Compte de Google</translation>
 <translation id="3451115285585441894">S'està afegint a Chrome...</translation>
 <translation id="345171907106878721">Afegeix-me a Chrome</translation>
 <translation id="34857402635545079">Esborra també les dades de Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome necessita accedir a la teva ubicació per compartir-la amb aquest lloc web</translation>
+<translation id="3533694711092285624">No hi ha cap contrasenya desada. Chrome pot comprovar les teves contrasenyes quan les deses.</translation>
 <translation id="3576528680708590453">L'administrador del sistema ha configurat Google Chrome perquè obri un navegador alternatiu per accedir a <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sincronitza i personalitza Chrome en tots els teus dispositius</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{L'administrador necessita que reiniciïs Chrome per aplicar una actualització}=1{L'administrador necessita que reiniciïs Chrome per aplicar una actualització. La finestra d'incògnit no es tornarà a obrir.}other{L'administrador necessita que reiniciïs Chrome per aplicar una actualització. Les # finestres d'incògnit no es tornaran a obrir.}}</translation>
@@ -228,6 +232,7 @@
 <translation id="8556340503434111824">Hi ha disponible una nova versió de Google Chrome, i és més ràpida que mai.</translation>
 <translation id="8614913330719544658">Google Chrome no respon. Voleu tornar-lo a iniciar ara?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome es reiniciarà d'aquí a 1 minut}other{Chrome es reiniciarà d'aquí a # minuts}}</translation>
+<translation id="8641606876632989680">Chrome t'enviarà una notificació quan iniciïs la sessió amb una contrasenya en perill</translation>
 <translation id="8669527147644353129">Aplicació d'ajuda de Google Chrome</translation>
 <translation id="8679801911857917785">També controla la pàgina que es mostra quan inicieu Chrome.</translation>
 <translation id="870251953148363156">Actualitza &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cs.xtb b/chrome/app/resources/google_chrome_strings_cs.xtb
index c69dd5b..e2901df8 100644
--- a/chrome/app/resources/google_chrome_strings_cs.xtb
+++ b/chrome/app/resources/google_chrome_strings_cs.xtb
@@ -51,6 +51,7 @@
 <translation id="2309047409763057870">Toto je druhá instalace prohlížeče Google Chrome. Tuto instalaci nelze nastavit jako výchozí prohlížeč.</translation>
 <translation id="2341767445688917208">Chrome OS vaše hesla nemohl synchronizovat. Vyřešit.</translation>
 <translation id="2348335408836342058">Chrome pro tento web potřebuje oprávnění k přístupu k fotoaparátu a mikrofonu</translation>
+<translation id="234869673307233423">Chrome nemůže zkontrolovat vaše hesla. Zkuste to později.</translation>
 <translation id="2429317896000329049">Google Chrome nemohl synchronizovat vaše data, protože Synchronizace ve vaší doméně není k dispozici.</translation>
 <translation id="2467438592969358367">Google Chrome chce exportovat vaše hesla. Tato akce vyžaduje zadání hesla systému Windows.</translation>
 <translation id="2485422356828889247">Odinstalovat</translation>
@@ -65,6 +66,7 @@
 <translation id="2689103672227170538">Toto rozšíření změnilo stránku, která se zobrazí při spuštění prohlížeče Chrome.</translation>
 <translation id="2765403129283291972">Chrome pro tento web potřebuje oprávnění k přístupu k mikrofonu</translation>
 <translation id="2770231113462710648">Změnit výchozí prohlížeč na:</translation>
+<translation id="2775140325783767197">Chrome nemůže zkontrolovat vaše hesla. Zkuste zkontrolovat připojení k internetu.</translation>
 <translation id="2799223571221894425">Restartovat</translation>
 <translation id="2847461019998147611">Zobrazit Google Chrome v tomto jazyce</translation>
 <translation id="2857540653560290388">Spouštění Chromu...</translation>
@@ -83,10 +85,12 @@
 <translation id="3395323229510056640">Pomoc se systémem Chrome OS</translation>
 <translation id="3396977131400919238">Během instalace došlo k chybě operačního systému. Stáhněte prosím Google Chrome ještě jednou.</translation>
 <translation id="3398288718845740432">Skrýt v nabídce Chrome</translation>
+<translation id="3434246496373299699">Když se přihlásíte k účtu Google, může vám Chrome kontrolovat hesla</translation>
 <translation id="3451115285585441894">Přidává se do prohlížeče Chrome...</translation>
 <translation id="345171907106878721">Přidejte do Chromu svůj účet</translation>
 <translation id="34857402635545079">Vymazat také data z Chromu (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome potřebuje přístup k vaší poloze, aby ji mohl sdílet s tímto webem</translation>
+<translation id="3533694711092285624">Nemáte žádná uložená hesla. Chrome může hesla zkontrolovat, pouze když si je uložíte.</translation>
 <translation id="3576528680708590453">Administrátor systému nakonfiguroval prohlížeč Google Chrome tak, aby pro přístup k adrese <ph name="TARGET_URL_HOSTNAME" /> otevřel alternativní prohlížeč.</translation>
 <translation id="3582972582564653026">Synchronizujte a upravte si Chrome na různých zařízeních</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Váš administrátor vyžaduje, abyste kvůli použití této aktualizace Chrome restartovali}=1{Váš administrátor vyžaduje, abyste kvůli použití této aktualizace Chrome restartovali. Anonymní okno se neotevře znovu.}few{Váš administrátor vyžaduje, abyste kvůli použití této aktualizace Chrome restartovali. # anonymní okna se neotevřou znovu.}many{Váš administrátor vyžaduje, abyste kvůli použití této aktualizace Chrome restartovali. # anonymního okna se neotevře znovu.}other{Váš administrátor vyžaduje, abyste kvůli použití této aktualizace Chrome restartovali. # anonymních oken se neotevře znovu.}}</translation>
@@ -236,6 +240,7 @@
 <translation id="8556340503434111824">Je k dispozici nová verze prohlížeče Google Chrome, ještě rychlejší než ty předchozí.</translation>
 <translation id="8614913330719544658">Google Chrome neodpovídá. Restartovat?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome se za 1 minutu restartuje}few{Chrome se za # minut restartuje}many{Chrome se za # minuty restartuje}other{Chrome se za # minut restartuje}}</translation>
+<translation id="8641606876632989680">Pokud se přihlásíte pomocí prolomeného hesla, Chrome vám to oznámí</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Také řídí, která stránka se zobrazí při spuštění Chromu.</translation>
 <translation id="870251953148363156">Aktualizace aplikace &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb
index 8123cb0..f8fa756 100644
--- a/chrome/app/resources/google_chrome_strings_da.xtb
+++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Dette er en sekundær installation af Google Chrome, og den kan ikke gøres til din standardbrowser.</translation>
 <translation id="2341767445688917208">Chrome OS kunne ikke synkronisere dine adgangskoder. Løs problemet nu.</translation>
 <translation id="2348335408836342058">Chrome skal have tilladelse til at bruge dit kamera og din mikrofon på dette website</translation>
+<translation id="234869673307233423">Chrome kan ikke tjekke dine adgangskoder. Prøv igen senere.</translation>
 <translation id="2429317896000329049">Google Chrome kunne ikke synkronisere dine data, fordi synkronisering ikke er tilgængelig for dit domæne.</translation>
 <translation id="2467438592969358367">Google Chrome anmoder om at eksportere dine adgangskoder. Angiv din Windows-adgangskode for at tillade dette.</translation>
 <translation id="2485422356828889247">Afinstaller</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Denne udvidelse har ændret din startside i Chrome.</translation>
 <translation id="2765403129283291972">Chrome skal have tilladelse til at bruge din mikrofon på dette website</translation>
 <translation id="2770231113462710648">Skift standardbrowser til:</translation>
+<translation id="2775140325783767197">Chrome kan ikke tjekke dine adgangskoder. Prøv at tjekke din internetforbindelse.</translation>
 <translation id="2799223571221894425">Genstart</translation>
 <translation id="2847461019998147611">Vis Google Chrome på dette sprog</translation>
 <translation id="2857540653560290388">Starter Chrome...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Få hjælp til Chrome OS</translation>
 <translation id="3396977131400919238">Der opstod en fejl ved operativsystemet under installation. Download Google Chrome igen.</translation>
 <translation id="3398288718845740432">Skjul i Chrome-menuen</translation>
+<translation id="3434246496373299699">Chrome kan tjekke dine adgangskoder, når du er logget ind med din Google-konto</translation>
 <translation id="3451115285585441894">Føjer til Chrome...</translation>
 <translation id="345171907106878721">Tilføj dig selv i Chrome</translation>
 <translation id="34857402635545079">Ryd også data fra Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome skal have adgang til din placering for at dele din placering med dette website</translation>
+<translation id="3533694711092285624">Der er ingen gemte adgangskoder. Chrome kan tjekke dine adgangskoder, når du gemmer dem.</translation>
 <translation id="3576528680708590453">Din systemadministrator har konfigureret Google Chrome til at åbne en anden browser for at få adgang til <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Synkroniser og tilpas Chrome på alle dine enheder</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering}=1{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering. Dit inkognitovindue åbnes ikke igen.}one{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering. # inkognitovindue åbnes ikke igen.}other{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering. Dine # inkognitovinduer åbnes ikke igen.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Der findes en ny version af Google Chrome, som er hurtigere end nogensinde før.</translation>
 <translation id="8614913330719544658">Google Chrome svarer ikke. Vil du genstarte nu?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome genstarter om 1 minut}one{Chrome genstarter om # minut}other{Chrome genstarter om # minutter}}</translation>
+<translation id="8641606876632989680">Chrome giver dig besked, når du logger ind med en kompromitteret adgangskode</translation>
 <translation id="8669527147644353129">Hjælp til Google Chrome</translation>
 <translation id="8679801911857917785">Den styrer også, hvilken side der vises, når du åbner Chrome.</translation>
 <translation id="870251953148363156">Opdater &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb
index 834b47b..f7b6853 100644
--- a/chrome/app/resources/google_chrome_strings_de.xtb
+++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -47,6 +47,7 @@
 <translation id="2309047409763057870">Dies ist eine Zweitinstallation, daher kann Google Chrome nicht als Standardbrowser festgelegt werden.</translation>
 <translation id="2341767445688917208">Chrome OS konnte Ihre Passwörter nicht synchronisieren. Jetzt beheben.</translation>
 <translation id="2348335408836342058">Chrome benötigt für diese Website die Berechtigung, auf Ihre Kamera und Ihr Mikrofon zuzugreifen</translation>
+<translation id="234869673307233423">Chrome kann Ihre Passwörter nicht prüfen. Versuchen Sie es später noch einmal.</translation>
 <translation id="2429317896000329049">Google Chrome konnte Ihre Daten nicht synchronisieren, da die Synchronisierung für Ihre Domain nicht zur Verfügung steht.</translation>
 <translation id="2467438592969358367">Google Chrome möchte Ihre Passwörter exportieren. Wenn Sie dies zulassen möchten, geben Sie Ihr Windows-Passwort ein.</translation>
 <translation id="2485422356828889247">Deinstallieren</translation>
@@ -61,6 +62,7 @@
 <translation id="2689103672227170538">Die beim Start von Chrome angezeigte Seite wurde durch diese Erweiterung geändert.</translation>
 <translation id="2765403129283291972">Chrome benötigt für diese Website die Berechtigung, auf Ihr Mikrofon zuzugreifen</translation>
 <translation id="2770231113462710648">Standardbrowser ändern in:</translation>
+<translation id="2775140325783767197">Chrome kann Ihre Passwörter nicht prüfen. Überprüfen Sie Ihre Internetverbindung.</translation>
 <translation id="2799223571221894425">Neu starten</translation>
 <translation id="2847461019998147611">Google Chrome in dieser Sprache anzeigen</translation>
 <translation id="2857540653560290388">Chrome wird gestartet…</translation>
@@ -79,10 +81,12 @@
 <translation id="3395323229510056640">Hilfe für Chrome OS aufrufen</translation>
 <translation id="3396977131400919238">Während der Installation ist ein Fehler im Betriebssystem aufgetreten. Laden Sie Google Chrome erneut herunter.</translation>
 <translation id="3398288718845740432">Ins Chrome-Menü verschieben</translation>
+<translation id="3434246496373299699">Chrome kann Ihre Passwörter prüfen, wenn Sie sich mit Ihrem Google-Konto anmelden</translation>
 <translation id="3451115285585441894">Wird zu Chrome hinzugefügt...</translation>
 <translation id="345171907106878721">Mich zu Chrome hinzufügen</translation>
 <translation id="34857402635545079">Daten aus Chrome ebenfalls löschen (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome benötigt Zugriff auf Ihren Standort, um ihn mit dieser Website zu teilen</translation>
+<translation id="3533694711092285624">Keine gespeicherten Passwörter. Chrome kann Ihre Passwörter prüfen, wenn Sie sie speichern.</translation>
 <translation id="3576528680708590453">Ihr Systemadministrator hat Google Chrome so konfiguriert, dass <ph name="TARGET_URL_HOSTNAME" /> in einem alternativen Browser geöffnet wird.</translation>
 <translation id="3582972582564653026">Chrome wird auf allen Ihren Geräten synchronisiert und personalisiert</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Laut Ihrem Administrator müssen Sie Chrome neu starten, um ein Update durchzuführen}=1{Laut Ihrem Administrator müssen Sie Chrome neu starten, um ein Update durchzuführen. Ihr Inkognitofenster wird nicht wieder geöffnet.}other{Laut Ihrem Administrator müssen Sie Chrome neu starten, um ein Update durchzuführen. Ihre # Inkognitofenster werden nicht wieder geöffnet.}}</translation>
@@ -228,6 +232,7 @@
 <translation id="8556340503434111824">Es gibt eine neue Version von Google Chrome, die schneller ist, als anderen zuvor.</translation>
 <translation id="8614913330719544658">Google Chrome reagiert nicht. Jetzt neu starten?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome wird in einer Minute neu gestartet}other{Chrome wird in # Minuten neu gestartet}}</translation>
+<translation id="8641606876632989680">Sie werden von Chrome benachrichtigt, falls Sie sich mit einem gehackten Passwort anmelden</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Die Erweiterung legt auch die Seite fest, die beim Start von Chrome angezeigt wird.</translation>
 <translation id="870251953148363156">&amp;Google Chrome aktualisieren</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb
index 1a453902..118f69e 100644
--- a/chrome/app/resources/google_chrome_strings_el.xtb
+++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -50,6 +50,7 @@
 <translation id="2309047409763057870">Αυτή είναι μια δευτερεύουσα εγκατάσταση του Google Chrome και δεν μπορεί να γίνει το προεπιλεγμένο πρόγραμμα περιήγησης.</translation>
 <translation id="2341767445688917208">Το Chrome OS δεν μπόρεσε να συγχρονίσει τους κωδικούς πρόσβασής σας. Άμεση επιδιόρθωση.</translation>
 <translation id="2348335408836342058">Το Chrome χρειάζεται άδεια, για να αποκτήσει πρόσβαση στην κάμερα και στο μικρόφωνο για αυτόν τον ιστότοπο</translation>
+<translation id="234869673307233423">Το Chrome δεν μπορεί να ελέγξει τους κωδικούς πρόσβασής σας. Δοκιμάστε ξανά αργότερα.</translation>
 <translation id="2429317896000329049">Το Google Chrome δεν κατάφερε να συγχρονίσει τα δεδομένα σας επειδή ο συγχρονισμός δεν είναι διαθέσιμος για τον τομέα σας.</translation>
 <translation id="2467438592969358367">Το Google Chrome θέλει να εξαγάγει τους κωδικούς πρόσβασής σας. Για να το επιτρέψετε αυτό, πληκτρολογήστε τον κωδικό πρόσβασης για τα Windows.</translation>
 <translation id="2485422356828889247">Απεγκατάσταση</translation>
@@ -64,6 +65,7 @@
 <translation id="2689103672227170538">Αυτή η επέκταση άλλαξε τη σελίδα που εμφανίζεται κατά την εκκίνηση του Chrome.</translation>
 <translation id="2765403129283291972">Το Chrome χρειάζεται άδεια, για να αποκτήσει πρόσβαση στο μικρόφωνο για αυτόν τον ιστότοπο</translation>
 <translation id="2770231113462710648">Αλλαγή προεπιλεγμένου προγράμματος περιήγησης σε:</translation>
+<translation id="2775140325783767197">Το Chrome δεν μπορεί να ελέγξει τους κωδικούς πρόσβασής σας. Δοκιμάστε να ελέγξετε τη σύνδεσή σας στο διαδίκτυο.</translation>
 <translation id="2799223571221894425">Επανεκκίνηση</translation>
 <translation id="2847461019998147611">Να εμφανίζεται το Google Chrome σε αυτήν τη γλώσσα</translation>
 <translation id="2857540653560290388">Εκκίνηση του Chrome…</translation>
@@ -82,10 +84,12 @@
 <translation id="3395323229510056640">Λήψη βοήθειας σχετικά με το Chrome OS</translation>
 <translation id="3396977131400919238">Παρουσιάστηκε σφάλμα στο λειτουργικό σύστημα κατά την εγκατάσταση. Κατεβάστε το Google Chrome ξανά.</translation>
 <translation id="3398288718845740432">Απόκρυψη στο μενού του Chrome</translation>
+<translation id="3434246496373299699">Το Chrome μπορεί να ελέγξει τους κωδικούς πρόσβασής σας όταν συνδέεστε με τον Λογαριασμό σας Google.</translation>
 <translation id="3451115285585441894">Προσθήκη στο Chrome...</translation>
 <translation id="345171907106878721">Προσθήκη του εαυτού σας στο Chrome</translation>
 <translation id="34857402635545079">Να διαγραφούν επίσης δεδομένα από το (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Το Chrome χρειάζεται πρόσβαση στην τοποθεσία σας, για να την κοινοποιήσει σε αυτόν τον ιστότοπο</translation>
+<translation id="3533694711092285624">Δεν υπάρχουν αποθηκευμένοι κωδικοί πρόσβασης. Το Chrome μπορεί να ελέγξει τους κωδικούς πρόσβασής σας όταν τους αποθηκεύσετε.</translation>
 <translation id="3576528680708590453">Ο διαχειριστής συστήματος έχει διαμορφώσει το Google Chrome έτσι ώστε να ανοίγει άλλο πρόγραμμα περιήγησης για την πρόσβαση στη διεύθυνση <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Συγχρονίστε και εξατομικεύστε το Chrome στις συσκευές σας</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Ο διαχειριστής σας απαιτεί να επανεκκινήσετε το Chrome, προκειμένου να εφαρμοστεί μια ενημέρωση.}=1{Ο διαχειριστής σας απαιτεί να επανεκκινήσετε το Chrome, προκειμένου να εφαρμοστεί μια ενημέρωση. Το παράθυρο για ανώνυμη περιήγηση δεν θα ανοίξει ξανά.}other{Ο διαχειριστής σας απαιτεί να επανεκκινήσετε το Chrome, προκειμένου να εφαρμοστεί μια ενημέρωση. Τα # παράθυρα για ανώνυμη περιήγηση δεν θα ανοίξουν ξανά.}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">Υπάρχει μια νέα έκδοση του Google Chrome και είναι ταχύτερη από ποτέ.</translation>
 <translation id="8614913330719544658">Το Google Chrome δεν αποκρίνεται. Επανεκκίνηση τώρα;</translation>
 <translation id="8625237574518804553">{0,plural, =1{Η επανεκκίνηση του Chrome θα γίνει σε 1 λεπτό}other{Η επανεκκίνηση του Chrome θα γίνει σε # λεπτά}}</translation>
+<translation id="8641606876632989680">Το Chrome θα σας ειδοποιήσει όταν συνδεθείτε με έναν παραβιασμένο κωδικό πρόσβαση</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Επίσης, ελέγχει τη σελίδα που εμφανίζεται κατά την εκκίνηση του Chrome.</translation>
 <translation id="870251953148363156">Ενημέρωση &amp;του Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb
index ece1c248..eb7733c 100644
--- a/chrome/app/resources/google_chrome_strings_en-GB.xtb
+++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">This is a secondary installation of Google Chrome, and cannot be made your default browser.</translation>
 <translation id="2341767445688917208">Chrome OS could not sync your passwords. Fix now.</translation>
 <translation id="2348335408836342058">Chrome needs permission to access your camera and microphone for this site</translation>
+<translation id="234869673307233423">Chrome can't check your passwords. Try again later.</translation>
 <translation id="2429317896000329049">Google Chrome could not sync your data because Sync is not available for your domain.</translation>
 <translation id="2467438592969358367">Google Chrome wants to export your passwords. Type your Windows password to allow this.</translation>
 <translation id="2485422356828889247">Uninstall</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">This extension has changed the page that is shown when you start Chrome.</translation>
 <translation id="2765403129283291972">Chrome needs permission to access your microphone for this site</translation>
 <translation id="2770231113462710648">Change default browser to:</translation>
+<translation id="2775140325783767197">Chrome can't check your passwords. Try checking your Internet connection.</translation>
 <translation id="2799223571221894425">Relaunch</translation>
 <translation id="2847461019998147611">Display Google Chrome in this language</translation>
 <translation id="2857540653560290388">Launching Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Get help with Chrome OS</translation>
 <translation id="3396977131400919238">An operating system error occurred during installation. Please download Google Chrome again.</translation>
 <translation id="3398288718845740432">Hide in Chrome Menu</translation>
+<translation id="3434246496373299699">Chrome can check your passwords when you sign in with your Google Account</translation>
 <translation id="3451115285585441894">Adding to Chrome...</translation>
 <translation id="345171907106878721">Add yourself to Chrome</translation>
 <translation id="34857402635545079">Also clear data from Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome needs access to your location to share your location with this site</translation>
+<translation id="3533694711092285624">No saved passwords. Chrome can check your passwords when you save them.</translation>
 <translation id="3576528680708590453">Your system administrator has configured Google Chrome to open an alternative browser to access <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sync and personalise Chrome across your devices</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Your administrator requires that you relaunch Chrome to apply an update}=1{Your administrator requires that you relaunch Chrome to apply an update. Your Incognito window won't reopen.}other{Your administrator requires that you relaunch Chrome to apply an update. Your # Incognito windows won't reopen.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">There's a new version of Google Chrome available and it's faster than ever.</translation>
 <translation id="8614913330719544658">Google Chrome is unresponsive. Relaunch now?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome will relaunch in 1 minute}other{Chrome will relaunch in # minutes}}</translation>
+<translation id="8641606876632989680">Chrome will notify you when you sign in with a compromised password</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">It also controls what page is shown when you start Chrome.</translation>
 <translation id="870251953148363156">Update &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es-419.xtb b/chrome/app/resources/google_chrome_strings_es-419.xtb
index 3d259c15..d75a2bc 100644
--- a/chrome/app/resources/google_chrome_strings_es-419.xtb
+++ b/chrome/app/resources/google_chrome_strings_es-419.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Como esta es una instalación secundaria de Google Chrome, no puede establecerse como tu navegador predeterminado.</translation>
 <translation id="2341767445688917208">El Sistema operativo Chrome no pudo sincronizar tus contraseñas. Soluciona el problema ahora.</translation>
 <translation id="2348335408836342058">Chrome necesita permiso para acceder a tu cámara y micrófono para este sitio</translation>
+<translation id="234869673307233423">Chrome no puede revisar las contraseñas. Vuelve a intentarlo más tarde.</translation>
 <translation id="2429317896000329049">Google Chrome no pudo sincronizar los datos porque la sincronización no está disponible para el dominio.</translation>
 <translation id="2467438592969358367">Google Chrome desea exportar tus contraseñas. Para permitirlo, ingresa tu contraseña de Windows.</translation>
 <translation id="2485422356828889247">Desinstalación</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Esta extensión cambió la página que se muestra al iniciar Chrome.</translation>
 <translation id="2765403129283291972">Chrome necesita permiso para acceder a tu micrófono para este sitio</translation>
 <translation id="2770231113462710648">Cambiar el navegador predeterminado a:</translation>
+<translation id="2775140325783767197">Chrome no puede revisar las contraseñas. Revisa la conexión a Internet.</translation>
 <translation id="2799223571221894425">Reiniciar</translation>
 <translation id="2847461019998147611">Mostrar Google Chrome en este idioma</translation>
 <translation id="2857540653560290388">Iniciando Chrome…</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Obtener ayuda con el Sistema operativo Chrome</translation>
 <translation id="3396977131400919238">Se produjo un error del sistema operativo durante la instalación. Descargue Google Chrome nuevamente.</translation>
 <translation id="3398288718845740432">Ocultar en el menú de Chrome</translation>
+<translation id="3434246496373299699">Chrome puede revisar las contraseñas solo cuando accedes con tu Cuenta de Google</translation>
 <translation id="3451115285585441894">Agregando a Chrome...</translation>
 <translation id="345171907106878721">Agrégate a Chrome</translation>
 <translation id="34857402635545079">Borrar también datos de Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome necesita acceder a tu ubicación para compartirla con este sitio</translation>
+<translation id="3533694711092285624">No hay contraseñas guardadas. Chrome puede revisar las contraseñas cuando las guardas.</translation>
 <translation id="3576528680708590453">El administrador del sistema configuró Google Chrome de manera que se abriera un navegador alternativo para acceder a <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sincroniza y personaliza Chrome en todos tus dispositivos</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{El administrador necesita que reinicies Chrome para aplicar una actualización}=1{El administrador necesita que reinicies Chrome para aplicar una actualización. No se volverá a abrir la ventana de incógnito.}other{El administrador necesita que reinicies Chrome para aplicar una actualización. No se volverán a abrir las # ventanas de incógnito.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Hay una nueva versión de Google Chrome disponible, y es más rápida que nunca.</translation>
 <translation id="8614913330719544658">Google Chrome no responde. ¿Quieres reiniciarlo ahora?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Se reiniciará Chrome en 1 minuto}other{Se reiniciará Chrome en # minutos}}</translation>
+<translation id="8641606876632989680">Chrome te notificará cuando accedas con una contraseña hackeada</translation>
 <translation id="8669527147644353129">Ayuda de Google Chrome</translation>
 <translation id="8679801911857917785">También controla qué página se muestra al iniciar Chrome.</translation>
 <translation id="870251953148363156">Actualizar &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb
index 1f37bfd..987f21a 100644
--- a/chrome/app/resources/google_chrome_strings_es.xtb
+++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Esta instalación de Google Chrome es secundaria, por lo que no se puede establecer como navegador predeterminado.</translation>
 <translation id="2341767445688917208">Chrome OS no ha podido sincronizar las contraseñas. Soluciónalo ahora.</translation>
 <translation id="2348335408836342058">Chrome necesita permiso para acceder a la cámara y al micrófono en este sitio web</translation>
+<translation id="234869673307233423">Chrome no puede comprobar tus contraseñas. Vuelve a intentarlo más tarde.</translation>
 <translation id="2429317896000329049">Google Chrome no ha podido sincronizar los datos porque la función de sincronización no está disponible para tu dominio.</translation>
 <translation id="2467438592969358367">Google Chrome quiere exportar tus contraseñas. Escribe tu contraseña de Windows para permitirlo.</translation>
 <translation id="2485422356828889247">Desinstalar</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Esta extensión ha cambiado la página que se muestra al iniciar Chrome.</translation>
 <translation id="2765403129283291972">Chrome necesita permiso para acceder al micrófono en este sitio web</translation>
 <translation id="2770231113462710648">Cambiar navegador predeterminado por:</translation>
+<translation id="2775140325783767197">Chrome no puede comprobar tus contraseñas. Revisa tu conexión a Internet.</translation>
 <translation id="2799223571221894425">Reiniciar</translation>
 <translation id="2847461019998147611">Mostrar Google Chrome en este idioma</translation>
 <translation id="2857540653560290388">Iniciando Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Obtener ayuda de Chrome OS</translation>
 <translation id="3396977131400919238">Se ha producido un error de sistema operativo durante el proceso de instalación. Vuelve a descargar Google Chrome.</translation>
 <translation id="3398288718845740432">Ocultar en el menú de Chrome</translation>
+<translation id="3434246496373299699">Chrome puede comprobar tus contraseñas si inicias sesión con tu cuenta de Google</translation>
 <translation id="3451115285585441894">Añadiendo a Chrome...</translation>
 <translation id="345171907106878721">Añadirte a Chrome</translation>
 <translation id="34857402635545079">Borrar también los datos de Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome necesita acceder a tu ubicación para compartirla con este sitio web</translation>
+<translation id="3533694711092285624">No hay ninguna contraseña guardada. Chrome puede comprobar tus contraseñas cuando las guardas.</translation>
 <translation id="3576528680708590453">El administrador del sistema ha configurado Google Chrome para que abra otro navegador al acceder a <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sincroniza y personaliza Chrome en todos tus dispositivos</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Tu administrador pide que reinicies Chrome para aplicar una actualización}=1{Tu administrador pide que reinicies Chrome para aplicar una actualización. La ventana de incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chrome para aplicar una actualización. Las # ventanas de incógnito no se volverán a abrir.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Hay una nueva versión de Google Chrome disponible que funciona a una velocidad sin precedentes.</translation>
 <translation id="8614913330719544658">Google Chrome no responde. ¿Quieres reiniciarlo ahora?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome se reiniciará dentro de 1 minuto}other{Chrome se reiniciará dentro de # minutos}}</translation>
+<translation id="8641606876632989680">Chrome te enviará una notificación cuando inicies sesión con una contraseña vulnerada</translation>
 <translation id="8669527147644353129">Ayudante de Google Chrome</translation>
 <translation id="8679801911857917785">También controla qué página se muestra al iniciar Chrome.</translation>
 <translation id="870251953148363156">Actualizar &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb
index ac8ccce..10af93e 100644
--- a/chrome/app/resources/google_chrome_strings_et.xtb
+++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -50,6 +50,7 @@
 <translation id="2309047409763057870">See on Google Chrome'i sekundaarne install ja seda ei saa määrata vaikebrauseriks.</translation>
 <translation id="2341767445688917208">Chrome OS ei saanud teie paroole sünkroonida. Parandage kohe.</translation>
 <translation id="2348335408836342058">Chrome vajab selle saidi puhul luba, et teie kaamerale ja mikrofonile juurde pääseda</translation>
+<translation id="234869673307233423">Chrome ei saa teie paroole kontrollida. Proovige hiljem uuesti.</translation>
 <translation id="2429317896000329049">Google Chrome ei saa teie andmeid sünkroonida, sest sünkroonimine pole teie domeenil saadaval.</translation>
 <translation id="2467438592969358367">Google Chrome soovib teie paroole eksportida. Selle lubamiseks sisestage oma Windowsi parool.</translation>
 <translation id="2485422356828889247">Desinstalli</translation>
@@ -64,6 +65,7 @@
 <translation id="2689103672227170538">See laiendus muutis seda, milline leht kuvatakse Chrome'i käivitamisel.</translation>
 <translation id="2765403129283291972">Chrome vajab selle saidi puhul luba, et teie mikrofonile juurde pääseda</translation>
 <translation id="2770231113462710648">Asenda vaikebrauser:</translation>
+<translation id="2775140325783767197">Chrome ei saa teie paroole kontrollida. Kontrollige internetiühendust.</translation>
 <translation id="2799223571221894425">Taaskäivita</translation>
 <translation id="2847461019998147611">Kuva Google Chrome selles keeles</translation>
 <translation id="2857540653560290388">Chrome'i käivitamine …</translation>
@@ -82,10 +84,12 @@
 <translation id="3395323229510056640">Chrome OS-i puhul abi hankimine</translation>
 <translation id="3396977131400919238">Installimisel ilmnes operatsioonisüsteemi viga. Palun laadige Google Chrome uuesti alla.</translation>
 <translation id="3398288718845740432">Chrome'i menüüs peitmine</translation>
+<translation id="3434246496373299699">Chrome saab teie paroole kontrollida siis, kui logite sisse oma Google'i kontoga</translation>
 <translation id="3451115285585441894">Chrome'i lisamine ...</translation>
 <translation id="345171907106878721">Lisa Chrome'i</translation>
 <translation id="34857402635545079">Kustuta andmed ka Chrome'ist (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome vajab juurdepääsu teie asukohale, et seda selle saidiga jagada</translation>
+<translation id="3533694711092285624">Salvestatud paroole ei ole. Chrome saab teie paroole kontrollida, kui olete need salvestanud.</translation>
 <translation id="3576528680708590453">Teie süsteemiadministraator on konfigureerinud Google Chrome'i avama alternatiivset brauserit, et saada juurdepääs lehele <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sünkroonige ja isikupärastage Chrome kõigis oma seadmetes</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administraator nõuab, et käivitaksite Chrome'i värskenduse rakendamiseks uuesti}=1{Administraator nõuab, et käivitaksite Chrome'i värskenduse rakendamiseks uuesti. Teie inkognito akent ei avata uuesti.}other{Administraator nõuab, et käivitaksite Chrome'i värskenduse rakendamiseks uuesti. Teie # inkognito akent ei avata uuesti.}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">Saadaval on uus Google Chrome'i versioon ja see on senistest kiireim.</translation>
 <translation id="8614913330719544658">Google Chrome ei reageeri. Kas soovite kohe taaskäivitada?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome käivitatakse uuesti 1 minuti pärast}other{Chrome käivitatakse uuesti # minuti pärast}}</translation>
+<translation id="8641606876632989680">Chrome teavitab teid, kui logite sisse ohustatud parooliga</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Lisaks juhib see Chrome'i käivitamisel kuvatavat lehte.</translation>
 <translation id="870251953148363156">Värskenda &amp;Google Chrome'i</translation>
diff --git a/chrome/app/resources/google_chrome_strings_eu.xtb b/chrome/app/resources/google_chrome_strings_eu.xtb
index 7fc6cbc..5a798b83 100644
--- a/chrome/app/resources/google_chrome_strings_eu.xtb
+++ b/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Google Chrome-ren bigarren mailako instalazio bat da hau; beraz, ezin duzu ezarri arakatzaile lehenetsi gisa.</translation>
 <translation id="2341767445688917208">Chrome OS sistema eragileak ezin izan ditu sinkronizatu pasahitzak. Konpondu arazoa.</translation>
 <translation id="2348335408836342058">Chrome-k webgune honen izenean kamera eta mikrofonoa atzitzeko baimena behar du</translation>
+<translation id="234869673307233423">Chrome-k ezin ditu egiaztatu pasahitzak. Saiatu geroago.</translation>
 <translation id="2429317896000329049">Google Chrome-k ezin izan ditu sinkronizatu zure datuak, sinkronizazioa ez dagoelako erabilgarri zure domeinuan.</translation>
 <translation id="2467438592969358367">Google Chrome-k pasahitzak esportatu nahi ditu. Hori baimentzeko, idatzi Windows pasahitza.</translation>
 <translation id="2485422356828889247">Desinstalatu</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Luzapenak aldatu egin du Chrome abiarazten duzunean agertzen den orria.</translation>
 <translation id="2765403129283291972">Chrome-k webgune honen izenean mikrofonoa atzitzeko baimena behar du</translation>
 <translation id="2770231113462710648">Ezarri hau arakatzaile lehenetsia gisa:</translation>
+<translation id="2775140325783767197">Chrome-k ezin ditu egiaztatu pasahitzak. Egiaztatu Internetera konektatuta zaudela.</translation>
 <translation id="2799223571221894425">Abiarazi berriro</translation>
 <translation id="2847461019998147611">Bistaratu Google Chrome hizkuntza honetan</translation>
 <translation id="2857540653560290388">Chrome abiarazten…</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Lortu Chrome OS erabiltzeko laguntza</translation>
 <translation id="3396977131400919238">Sistema-eragilean errore bat gertatu da instalatu bitartean. Deskargatu Google Chrome berriro.</translation>
 <translation id="3398288718845740432">Ezkutatu Chrome-ko menuan</translation>
+<translation id="3434246496373299699">Google-ko kontu batekin saioa hasten duzunean egiazta ditzake Chrome-k pasahitzak</translation>
 <translation id="3451115285585441894">Chrome-n gehitzen…</translation>
 <translation id="345171907106878721">Gehitu zeure burua Chrome-n</translation>
 <translation id="34857402635545079">Halaber, garbitu Chrome-ko datuak (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome-k zure kokapena webgune honekin partekatzeko baimena behar du</translation>
+<translation id="3533694711092285624">Ez dago pasahitzik gordeta. Chrome-k pasahitzak egiazta ditzake gorde ondoren.</translation>
 <translation id="3576528680708590453">Sistemaren administratzailearen konfigurazioaren arabera, Google Chrome-k beste arakatzaile bat ireki behar du <ph name="TARGET_URL_HOSTNAME" /> helbidera joateko.</translation>
 <translation id="3582972582564653026">Sinkronizatu eta pertsonalizatu Chrome gailu guztietan</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Chrome berrabiaraz dezazun behar du administratzaileak, eguneratzea aplikatzeko}=1{Chrome berrabiaraz dezazun behar du administratzaileak, eguneratzea aplikatzeko Ezkutuko moduko leihoa ez da berriro irekiko.}other{Chrome berrabiaraz dezazun behar du administratzaileak, eguneratzea aplikatzeko Ezkutuko moduko # leihoak ez dira berriro irekiko.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Google Chrome-ren bertsio berri bat erabilgarri dago; inoiz baino bizkorragoa da.</translation>
 <translation id="8614913330719544658">Google Chrome-k ez du erantzuten. Berrabiarazi nahi duzu?</translation>
 <translation id="8625237574518804553">{0,plural, =1{1 minutu barru berrabiaraziko da Chrome}other{# minutu barru berrabiaraziko da Chrome}}</translation>
+<translation id="8641606876632989680">Chrome-k jakinarazpen bat bidaliko dizu arriskuan dagoen pasahitz batekin hasten duzunean saioa</translation>
 <translation id="8669527147644353129">Google Chrome laguntzailea</translation>
 <translation id="8679801911857917785">Chrome abiarazten duzunean erakusten den orria ere kontrolatzen du.</translation>
 <translation id="870251953148363156">Eguneratu &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb
index 59dc470..490a4da1 100644
--- a/chrome/app/resources/google_chrome_strings_fa.xtb
+++ b/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">‏این نصب ثانویه Google Chrome است و نمی‌تواند مرورگر پیش‌فرضتان شود.</translation>
 <translation id="2341767445688917208">‏سیستم‌عامل Chrome نتوانست گذرواژه‌هایتان را همگام‌سازی کند. اکنون مشکل رفع شود.</translation>
 <translation id="2348335408836342058">‏Chrome برای این سایت به مجوز دسترسی به دوربین و میکروفون نیاز دارد</translation>
+<translation id="234869673307233423">‏Chrome نمی‌تواند گذرواژه‌هایتان را بررسی کند. بعداً دوباره امتحان کنید.</translation>
 <translation id="2429317896000329049">‏Google Chrome قادر به همگام‌سازی داده‌های شما نبود زیرا همگام‌سازی برای دامنه شما قابل دسترسی نیست.</translation>
 <translation id="2467438592969358367">‏Google Chrome می‌خواهد گذرواژه‌های شما را صادر کند. برای اجازه به این کار، گذرواژه Windows خود را تایپ کنید.</translation>
 <translation id="2485422356828889247">حذف نصب</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">‏این افزونه، صفحه‌ای را تغییر داده است که هنگام راه‌اندازی Chrome نشان داده می‌شود.</translation>
 <translation id="2765403129283291972">‏Chrome برای این سایت به مجوز دسترسی به میکروفون نیاز دارد</translation>
 <translation id="2770231113462710648">تغییر مرورگر پیش‌فرض به:</translation>
+<translation id="2775140325783767197">‏Chrome نمی‌تواند گذرواژه‌هایتان را بررسی کند. اتصال اینترنت را بررسی کنید.</translation>
 <translation id="2799223571221894425">راه‌اندازی مجدد</translation>
 <translation id="2847461019998147611">‏نمایش Google Chrome به این زبان</translation>
 <translation id="2857540653560290388">‏درحال راه‌اندازی Chrome…</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">‏دریافت کمک از سیستم عامل Chrome</translation>
 <translation id="3396977131400919238">‏هنگام نصب یک خطای سیستم عامل رخ داد. لطفاً دوباره Google Chrome را بارگیری کنید.</translation>
 <translation id="3398288718845740432">‏پنهان در منوی Chrome</translation>
+<translation id="3434246496373299699">‏Chrome زمانی می‌تواند گذرواژه‌هایتان را بررسی کند که با «حساب Google» خود به سیستم وارد شوید</translation>
 <translation id="3451115285585441894">‏افزودن به Chrome...</translation>
 <translation id="345171907106878721">‏افرودن خودتان به Chrome</translation>
 <translation id="34857402635545079">‏همچنین داده‌ها از Chrome پاک شود (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">‏Chrome برای هم‌رسانی مکانتان با این سایت باید به مکان شما دسترسی داشته باشد</translation>
+<translation id="3533694711092285624">‏گذرواژه ذخیره‌شده‌ای وجود ندارد. Chrome زمانی می‌تواند گذرواژه‌هایتان را بررسی کند که آن‌ها را ذخیره کرده باشید.</translation>
 <translation id="3576528680708590453">‏سرپرست سیستم برای باز شدن مرورگری دیگر جهت دسترسی به <ph name="TARGET_URL_HOSTNAME" />، Google Chrome را پیکربندی کرده است.</translation>
 <translation id="3582972582564653026">‏Chrome را در همه دستگاه‌هایتان همگام‌سازی و شخصی‌سازی کنید</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{‏سرپرست سیستم لازم می‌داند برای اعمال به‌روزرسانی، Chrome را راه‌اندازی مجدد کنید}=1{‏سرپرست سیستم لازم می‌داند برای اعمال به‌روزرسانی، Chrome را راه‌اندازی مجدد کنید. پنجره ناشناس بازگشایی نمی‌شود.}one{‏سرپرست سیستم لازم می‌داند برای اعمال به‌روزرسانی، Chrome را راه‌اندازی مجدد کنید. # پنجره ناشناس بازگشایی نمی‌شود.}other{‏سرپرست سیستم لازم می‌داند برای اعمال به‌روزرسانی، Chrome را راه‌اندازی مجدد کنید. # پنجره ناشناس بازگشایی نمی‌شود.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">‏نسخه جدیدی از Google Chrome وجود دارد که سریعتر از همیشه است.</translation>
 <translation id="8614913330719544658">‏Google Chrome پاسخ نمی‌دهد. مجدداً راه‌اندازی شود؟</translation>
 <translation id="8625237574518804553">{0,plural, =1{‏Chrome ‏۱ دقیقه دیگر راه‌اندازی مجدد می‌شود}one{‏Chrome ‏# دقیقه دیگر راه‌اندازی مجدد می‌شود}other{‏Chrome ‏# دقیقه دیگر راه‌اندازی مجدد می‌شود}}</translation>
+<translation id="8641606876632989680">‏وقتی با گذرواژه‌ای لورفته به سیستم وارد شوید، Chrome به شما اطلاع می‌دهد</translation>
 <translation id="8669527147644353129">‏راهنمای Google Chrome</translation>
 <translation id="8679801911857917785">‏این برنامه همچنین صفحه‌ای را که هنگام راه‌اندازی Chrome نشان داده می‌شود، کنترل می‌کند.</translation>
 <translation id="870251953148363156">‏به‌روزرسانی Goo&amp;gle Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb
index 68c6a94..9b050e57 100644
--- a/chrome/app/resources/google_chrome_strings_fi.xtb
+++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Tämä on Google Chromen toissijainen asennus, eikä sitä voi asettaa oletusselaimeksi.</translation>
 <translation id="2341767445688917208">Chrome-käyttöjärjestelmä ei voinut synkronoida salasanojasi. Korjaa nyt.</translation>
 <translation id="2348335408836342058">Chrome tarvitsee oikeuden käyttää kameraasi ja mikrofoniasi tällä sivustolla.</translation>
+<translation id="234869673307233423">Chrome ei voi tarkistaa salasanojasi. Yritä myöhemmin uudelleen.</translation>
 <translation id="2429317896000329049">Google Chrome ei voinut synkronoida tietoja, koska synkronointi ei ole käytettävissä verkkotunnuksessasi.</translation>
 <translation id="2467438592969358367">Google Chrome yrittää viedä salasanojasi tiedostoon. Salli tämä kirjoittamalla Windows-salasanasi.</translation>
 <translation id="2485422356828889247">Poista</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Tämä laajennus on vaihtanut Chromen aloitussivun.</translation>
 <translation id="2765403129283291972">Chrome tarvitsee oikeuden käyttää mikrofoniasi tällä sivustolla.</translation>
 <translation id="2770231113462710648">Vaihda oletusselaimeksi:</translation>
+<translation id="2775140325783767197">Chrome ei voi tarkistaa salasanojasi. Tarkista internetyhteytesi.</translation>
 <translation id="2799223571221894425">Käynnistä uudelleen</translation>
 <translation id="2847461019998147611">Näytä Google Chrome tällä kielellä</translation>
 <translation id="2857540653560290388">Käynnistetään Chromea…</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Ohjeita Chrome-käyttöjärjestelmän käyttöön</translation>
 <translation id="3396977131400919238">Asennuksessa havaittiin käyttöjärjestelmävirhe. Lataa Google Chrome uudelleen.</translation>
 <translation id="3398288718845740432">Piilota Chrome-valikkoon</translation>
+<translation id="3434246496373299699">Chrome voi tarkistaa salasanasi, kun kirjaudut sisään Google-tililläsi.</translation>
 <translation id="3451115285585441894">Lisätään Chromeen...</translation>
 <translation id="345171907106878721">Lisää itsesi Chromeen</translation>
 <translation id="34857402635545079">Poista data myös Chromesta (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome tarvitsee oikeuden käyttää sijaintiasi, jotta se voidaan jakaa tämän sivuston kanssa.</translation>
+<translation id="3533694711092285624">Ei tallennettuja salasanoja. Chrome voi tarkistaa salasanasi, kun tallennat niitä.</translation>
 <translation id="3576528680708590453">Järjestelmänvalvojasi on määrittänyt Chromen käynnistämään vaihtoehtoisen selaimen, kun <ph name="TARGET_URL_HOSTNAME" /> avataan.</translation>
 <translation id="3582972582564653026">Voit synkronoida Chromen ja tehdä siitä yksilöllisemmän kaikilla laitteilla.</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Ylläpitäjä vaatii Chromen uudelleenkäynnistystä, jotta päivitys voidaan ottaa käyttöön.}=1{Ylläpitäjä vaatii Chromen uudelleenkäynnistystä, jotta päivitys voidaan ottaa käyttöön. Incognito-ikkunaasi ei avata uudelleen.}other{Ylläpitäjä vaatii Chromen uudelleenkäynnistystä, jotta päivitys voidaan ottaa käyttöön. # incognito-ikkunaasi ei avata uudelleen.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Chromesta on saatavissa uusi versio, joka on entistäkin nopeampi.</translation>
 <translation id="8614913330719544658">Google Chrome ei vastaa. Käynnistetäänkö uudelleen?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome käynnistetään uudelleen 1 minuutin kuluttua}other{Chrome käynnistetään uudelleen # minuutin kuluttua.}}</translation>
+<translation id="8641606876632989680">Chrome ilmoittaa, kun kirjaudut sisään vaarantuneella salasanalla</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Määrittää myös Chromen aloitussivun.</translation>
 <translation id="870251953148363156">Päivitä &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fil.xtb b/chrome/app/resources/google_chrome_strings_fil.xtb
index bf436a3e..dab208a 100644
--- a/chrome/app/resources/google_chrome_strings_fil.xtb
+++ b/chrome/app/resources/google_chrome_strings_fil.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Pangalawang pag-install ito ng Google Chrome at hindi ito maaaring gawing iyong default na browser.</translation>
 <translation id="2341767445688917208">Hindi ma-sync ng Chrome OS ang iyong mga password. Ayusin ngayon.</translation>
 <translation id="2348335408836342058">Kailangan ng Chrome ng pahintulot na i-access ang iyong camera at mikropono para sa site na ito</translation>
+<translation id="234869673307233423">Hindi masuri ng Chrome ang iyong mga password. Subukan ulit sa ibang pagkakataon.</translation>
 <translation id="2429317896000329049">Hindi mai-sync ng Google Chrome ang iyong data dahil hindi available ang Pag-sync para sa iyong domain.</translation>
 <translation id="2467438592969358367">Gustong i-export ng Google Chrome ang iyong mga password. I-type ang password mo sa Windows para payagan ito.</translation>
 <translation id="2485422356828889247">I-uninstall</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Binago ng extension na ito ang ipinapakitang page kapag sinimulan mo ang Chrome.</translation>
 <translation id="2765403129283291972">Kailangan ng Chrome ng pahintulot na i-access ang iyong mikropono para sa site na ito</translation>
 <translation id="2770231113462710648">Baguhin ang default na browser sa:</translation>
+<translation id="2775140325783767197">Hindi masuri ng Chrome ang iyong mga password. Subukang tingnan ang iyong koneksyon sa internet.</translation>
 <translation id="2799223571221894425">Ilunsad Muli</translation>
 <translation id="2847461019998147611">Ipakita ang Google Chrome sa wikang ito</translation>
 <translation id="2857540653560290388">Inilulunsad ang Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Humingi ng tulong sa Chrome OS</translation>
 <translation id="3396977131400919238">Nagkaroon ng error sa operating system habang nag-i-install. Paki-download muli ang Google Chrome.</translation>
 <translation id="3398288718845740432">Itago sa Menu ng Chrome</translation>
+<translation id="3434246496373299699">Matitingnan ng Chrome ang iyong mga password kapag nag-sign in ka gamit ang Google Account mo</translation>
 <translation id="3451115285585441894">Idinaragdag sa Chrome...</translation>
 <translation id="345171907106878721">Idagdag ang iyong sarili sa Chrome</translation>
 <translation id="34857402635545079">I-clear din ang data sa Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Kailangan ng Chrome ng access sa iyong lokasyon upang ibahagi ang lokasyon mo sa site na ito</translation>
+<translation id="3533694711092285624">Walang naka-save na password. Masusuri ng Chrome ang iyong mga password kapag na-save mo ang mga ito.</translation>
 <translation id="3576528680708590453">Na-configure ng iyong system administrator ang Google Chrome na magbukas ng alternatibong browser para i-access ang <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">I-sync at i-personalize ang Chrome sa lahat ng iyong device</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Ipinag-aatas ng iyong administrator na ilunsad mo ulit ang Chrome para mailapat ang isang update}=1{Ipinag-aatas ng iyong administrator na ilunsad mo ulit ang Chrome para mailapat ang isang update. Hindi bubukas ulit ang iyong Incognito window.}one{Ipinag-aatas ng iyong administrator na ilunsad mo ulit ang Chrome para mailapat ang isang update. Hindi bubukas ulit ang iyong # Incognito window.}other{Ipinag-aatas ng iyong administrator na ilunsad mo ulit ang Chrome para mailapat ang isang update. Hindi bubukas ulit ang iyong # na Incognito window.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">May available na bagong bersyon ng Google Chrome, at mas mabilis ito kaysa sa dati.</translation>
 <translation id="8614913330719544658">Hindi gumagana ang Google Chrome. Ilunsad muli ngayon?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Muling ilulunsad ang Chrome sa loob ng 1 minuto}one{Muling ilulunsad ang Chrome sa loob ng # minuto}other{Muling ilulunsad ang Chrome sa loob ng # na minuto}}</translation>
+<translation id="8641606876632989680">Aabisuhan ka ng Chrome kapag nag-sign in ka gamit ang nakompromisong password</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Kinokontrol din nito kung anong pahina ang ipinapakita kapag sinimulan mo ang Chrome.</translation>
 <translation id="870251953148363156">I-update ang &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr-CA.xtb b/chrome/app/resources/google_chrome_strings_fr-CA.xtb
index 5d4e41e5..cb90ea7 100644
--- a/chrome/app/resources/google_chrome_strings_fr-CA.xtb
+++ b/chrome/app/resources/google_chrome_strings_fr-CA.xtb
@@ -51,6 +51,7 @@
 <translation id="2309047409763057870">Cette installation de Google Chrome est secondaire. Celui-ci ne peut donc pas servir de navigateur par défaut.</translation>
 <translation id="2341767445688917208">Chrome OS n'a pas pu synchroniser vos mots de passe. Corrigez le problème maintenant.</translation>
 <translation id="2348335408836342058">Chrome a besoin de votre autorisation pour accéder à votre appareil photo et à votre micro pour ce site</translation>
+<translation id="234869673307233423">Chrome ne peut pas vérifier vos mots de passe. Réessayez plus tard.</translation>
 <translation id="2429317896000329049">Google Chrome ne peut pas synchroniser vos données, car la synchronisation n'est pas offerte pour votre domaine.</translation>
 <translation id="2467438592969358367">Google Chrome veut exporter vos mots de passe. Pour autoriser cette action, entrez votre mot de passe Windows.</translation>
 <translation id="2485422356828889247">Désinstaller</translation>
@@ -65,6 +66,7 @@
 <translation id="2689103672227170538">Cette extension a modifié la page qui s'affiche au démarrage de Chrome.</translation>
 <translation id="2765403129283291972">Chrome a besoin de votre autorisation pour accéder à votre appareil photo pour ce site</translation>
 <translation id="2770231113462710648">Remplacer le navigateur par défaut par :</translation>
+<translation id="2775140325783767197">Chrome ne peut pas vérifier vos mots de passe. Essayez de vérifier votre connexion Internet.</translation>
 <translation id="2799223571221894425">Redémarrer</translation>
 <translation id="2847461019998147611">Afficher Google Chrome dans cette langue</translation>
 <translation id="2857540653560290388">Lancement de Chrome en cours…</translation>
@@ -83,10 +85,12 @@
 <translation id="3395323229510056640">Obtenir de l'aide pour Chrome OS</translation>
 <translation id="3396977131400919238">Une erreur de système d'exploitation s'est produite pendant l'installation. Veuillez télécharger de nouveau Google Chrome.</translation>
 <translation id="3398288718845740432">Masquer dans le menu Chrome</translation>
+<translation id="3434246496373299699">Chrome peut vérifier vos mots de passe lorsque vous vous connectez avec votre compte Google</translation>
 <translation id="3451115285585441894">Ajout à Google Chrome en cours…</translation>
 <translation id="345171907106878721">Ajouter un utilisateur à Google Chrome</translation>
 <translation id="34857402635545079">Effacer également les données dans Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome a besoin d'accéder à votre position afin de la partager avec ce site</translation>
+<translation id="3533694711092285624">Aucun mot de passe enregistré. Chrome ne peut vérifier vos mots de passe que si vous les enregistrez.</translation>
 <translation id="3576528680708590453">Votre administrateur système a configuré Google Chrome pour qu'il ouvre un autre navigateur afin d'accéder à la page <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Synchroniser et personnaliser Chrome sur vos appareils</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Votre administrateur exige que vous relanciez Chrome pour appliquer une mise à jour}=1{Votre administrateur exige que vous relanciez Chrome pour appliquer une mise à jour. Votre fenêtre de navigation privée ne sera pas rouverte.}one{Votre administrateur exige que vous relanciez Chrome pour appliquer une mise à jour. Votre fenêtre de navigation privée ne sera pas rouverte.}other{Votre administrateur exige que vous relanciez Chrome pour appliquer une mise à jour. Vos # fenêtres de navigation privée ne seront pas rouvertes.}}</translation>
@@ -236,6 +240,7 @@
 <translation id="8556340503434111824">Une nouvelle version de Google Chrome est maintenant offerte. Il est plus rapide que jamais.</translation>
 <translation id="8614913330719544658">Google Chrome ne répond pas. Voulez-vous le relancer maintenant?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome redémarrera dans 1 minute}one{Chrome redémarrera dans # minute}other{Chrome redémarrera dans # minutes}}</translation>
+<translation id="8641606876632989680">Chrome vous avisera lorsque vous utilisez un mot de passe compromis pour vous connecter</translation>
 <translation id="8669527147644353129">Application d'aide de Google Chrome</translation>
 <translation id="8679801911857917785">Elle contrôle également la page qui s'affiche au démarrage de Chrome.</translation>
 <translation id="870251953148363156">Mise à jour de &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb
index 5e3e14b..b18f7b9 100644
--- a/chrome/app/resources/google_chrome_strings_fr.xtb
+++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -50,6 +50,7 @@
 <translation id="2309047409763057870">Ceci est une installation secondaire de Google Chrome. Vous ne pouvez pas le définir comme navigateur par défaut.</translation>
 <translation id="2341767445688917208">Impossible de synchroniser vos mots de passe dans Chrome OS. Corrigez le problème maintenant.</translation>
 <translation id="2348335408836342058">Chrome a besoin de votre autorisation pour accéder à votre appareil photo et à votre micro pour ce site</translation>
+<translation id="234869673307233423">Chrome ne parvient pas à vérifier vos mots de passe. Réessayez plus tard.</translation>
 <translation id="2429317896000329049">Impossible de synchroniser vos données dans Google Chrome, car la synchronisation n'est pas disponible pour votre domaine.</translation>
 <translation id="2467438592969358367">Google Chrome veut exporter vos mots de passe. Pour autoriser cette action, saisissez votre mot de passe Windows.</translation>
 <translation id="2485422356828889247">Désinstaller</translation>
@@ -64,6 +65,7 @@
 <translation id="2689103672227170538">Cette extension a modifié la page qui s'affiche lorsque vous démarrez Chrome.</translation>
 <translation id="2765403129283291972">Chrome a besoin de votre autorisation pour accéder à votre micro pour ce site</translation>
 <translation id="2770231113462710648">Remplacer le navigateur par défaut par :</translation>
+<translation id="2775140325783767197">Chrome ne parvient pas à vérifier vos mots de passe. Vérifiez votre connexion Internet.</translation>
 <translation id="2799223571221894425">Relancer</translation>
 <translation id="2847461019998147611">Afficher Google Chrome dans cette langue</translation>
 <translation id="2857540653560290388">Lancement de Chrome…</translation>
@@ -82,10 +84,12 @@
 <translation id="3395323229510056640">Obtenir de l'aide avec Chrome OS</translation>
 <translation id="3396977131400919238">Erreur de système d'exploitation pendant l'installation. Veuillez télécharger de nouveau Google Chrome.</translation>
 <translation id="3398288718845740432">Masquer dans le menu Chrome</translation>
+<translation id="3434246496373299699">Chrome peut vérifier vos mots de passe lorsque vous vous connectez à votre compte Google</translation>
 <translation id="3451115285585441894">Ajout à Google Chrome en cours…</translation>
 <translation id="345171907106878721">Ajouter un utilisateur à Chrome</translation>
 <translation id="34857402635545079">Effacer également les données issues de Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome a besoin d'accéder à votre position pour la partager avec ce site</translation>
+<translation id="3533694711092285624">Aucun mot de passe enregistré. Chrome ne peut vérifier vos mots de passe que si vous les enregistrez.</translation>
 <translation id="3576528680708590453">Votre administrateur système a configuré Google Chrome pour que <ph name="TARGET_URL_HOSTNAME" /> s'ouvre dans un autre navigateur.</translation>
 <translation id="3582972582564653026">Synchroniser et personnaliser Chrome sur vos appareils</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{À la demande de votre administrateur, vous devez relancer Chrome pour installer une mise à jour}=1{À la demande de votre administrateur, vous devez relancer Chrome pour installer une mise à jour. Sachez que la fenêtre de navigation privée ne sera pas rouverte.}one{À la demande de votre administrateur, vous devez relancer Chrome pour installer une mise à jour. Sachez que la fenêtre de navigation privée (#) ne sera pas rouverte.}other{À la demande de votre administrateur, vous devez relancer Chrome pour installer une mise à jour. Sachez que les # fenêtres de navigation privée ne seront pas rouvertes.}}</translation>
@@ -235,6 +239,7 @@
 <translation id="8556340503434111824">Une nouvelle version de Google Chrome encore plus rapide est disponible.</translation>
 <translation id="8614913330719544658">Google Chrome ne répond pas. Voulez-vous le relancer maintenant ?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome va être relancé dans 1 minute}one{Chrome va être relancé dans # minute}other{Chrome va être relancé dans # minutes}}</translation>
+<translation id="8641606876632989680">Chrome vous avertira si vous vous connectez avec un mot de passe compromis</translation>
 <translation id="8669527147644353129">Application d'aide de Google Chrome</translation>
 <translation id="8679801911857917785">Elle contrôle également la page qui s'affiche au démarrage de Chrome.</translation>
 <translation id="870251953148363156">Mettre à jour &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gl.xtb b/chrome/app/resources/google_chrome_strings_gl.xtb
index 93e9b6f..2e844da 100644
--- a/chrome/app/resources/google_chrome_strings_gl.xtb
+++ b/chrome/app/resources/google_chrome_strings_gl.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Esta é unha instalación secundaria de Google Chrome e non se pode converter no teu navegador predeterminado.</translation>
 <translation id="2341767445688917208">Chrome OS non puido sincronizar os teus contrasinais. Corríxeo agora.</translation>
 <translation id="2348335408836342058">Chrome necesita permiso para acceder á cámara e ao micrófono neste sitio</translation>
+<translation id="234869673307233423">Chrome non puido comprobar os teus contrasinais. Téntao de novo máis tarde.</translation>
 <translation id="2429317896000329049">Google Chrome non puido sincronizar os teus datos porque a sincronización non está dispoñible para o teu dominio.</translation>
 <translation id="2467438592969358367">Google Chrome quere exportar os teus contrasinais. Escribe o teu contrasinal de Windows para permitir esta acción.</translation>
 <translation id="2485422356828889247">Desinstalar</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Esta extensión cambiou a páxina que se mostra ao iniciar Chrome.</translation>
 <translation id="2765403129283291972">Chrome necesita permiso para acceder ao micrófono neste sitio</translation>
 <translation id="2770231113462710648">Cambiar o navegador predeterminado a:</translation>
+<translation id="2775140325783767197">Chrome non puido comprobar os teus contrasinais. Verifica a conexión a Internet.</translation>
 <translation id="2799223571221894425">Iniciar de novo</translation>
 <translation id="2847461019998147611">Mostrar Google Chrome neste idioma</translation>
 <translation id="2857540653560290388">Iniciando Chrome…</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Obter axuda sobre Chrome OS</translation>
 <translation id="3396977131400919238">Produciuse un erro no sistema operativo durante a instalación. Volve descargar Google Chrome.</translation>
 <translation id="3398288718845740432">Ocultar no menú de Chrome</translation>
+<translation id="3434246496373299699">Chrome pode comprobar os teus contrasinais cando inicies sesión coa túa Conta de Google</translation>
 <translation id="3451115285585441894">Engadindo a Chrome...</translation>
 <translation id="345171907106878721">Engádete a Chrome</translation>
 <translation id="34857402635545079">Borrar tamén os datos de Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome necesita acceder á túa localización para compartila con este sitio</translation>
+<translation id="3533694711092285624">Non hai contrasinais gardados. Chrome pode comprobar os teus contrasinais cando os gardes.</translation>
 <translation id="3576528680708590453">O teu administrador do sistema configurou Google Chrome para abrir outro navegador co obxectivo de acceder a <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sincroniza e personaliza Chrome nos teus dispositivos</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{O teu administrador require que reinicies Chrome para aplicar unha actualización}=1{O teu administrador require que reinicies Chrome para aplicar unha actualización. A ventá do modo de incógnito non se volverá abrir.}other{O teu administrador require que reinicies Chrome para aplicar unha actualización. As # ventás do modo de incógnito non se volverán abrir.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Hai unha nova versión de Google Chrome dispoñible que é máis rápida que as anteriores.</translation>
 <translation id="8614913330719544658">Google Chrome non responde. Queres volver inicialo agora?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome reiniciarase en 1 minuto}other{Chrome reiniciarase en # minutos}}</translation>
+<translation id="8641606876632989680">Chrome enviarache unha notificación cando inicies sesión cun contrasinal vulnerado</translation>
 <translation id="8669527147644353129">Axudante de Google Chrome</translation>
 <translation id="8679801911857917785">Tamén controla a páxina que se mostra ao iniciar Chrome.</translation>
 <translation id="870251953148363156">Actualizar &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gu.xtb b/chrome/app/resources/google_chrome_strings_gu.xtb
index 1d4660e..c7c5237 100644
--- a/chrome/app/resources/google_chrome_strings_gu.xtb
+++ b/chrome/app/resources/google_chrome_strings_gu.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">આ Google Chrome નું દ્વિતીય ઇન્સ્ટૉલેશન છે અને આને તમારું ડિફૉલ્ટ બ્રાઉઝર બનાવી શકાતું નથી.</translation>
 <translation id="2341767445688917208">Chrome OS તમારા પાસવર્ડને સિંક કરી શક્યું નથી. હમણાં જ સુધારો.</translation>
 <translation id="2348335408836342058">Chromeને આ સાઇટ માટે તમારા કૅમેરા અને માઇક્રોફોનના ઍક્સેસની પરવાનગીની જરૂર પડે છે</translation>
+<translation id="234869673307233423">Chrome તમારા પાસવર્ડ ચેક કરી શકતું નથી. થોડા સમય પછી ફરી પ્રયાસ કરો.</translation>
 <translation id="2429317896000329049">Google Chrome તમારા ડેટાને સમન્વયિત કરી શક્યું નથી કારણ કે તમારા ડોમેન માટે સમન્વયન ઉપલબ્ધ નથી.</translation>
 <translation id="2467438592969358367">Google Chrome તમારા પાસવર્ડની નિકાસ કરવા માગે છે. આને મંજૂરી આપવા માટે તમારો Windows પાસવર્ડ ટાઇપ કરો.</translation>
 <translation id="2485422356828889247">અનઇન્સ્ટૉલ કરો</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">જ્યારે તમે Chrome શરૂ કરો છો ત્યારે જે પૃષ્ઠ દર્શાવવામાં આવે છે તે આ એક્સટેન્શને બદલ્યું છે.</translation>
 <translation id="2765403129283291972">Chromeને આ સાઇટ માટે તમારા માઇક્રોફોનના ઍક્સેસની પરવાનગીની જરૂર પડે છે</translation>
 <translation id="2770231113462710648">ડિફૉલ્ટ બ્રાઉઝરને આના પર બદલો:</translation>
+<translation id="2775140325783767197">Chrome તમારા પાસવર્ડ ચેક કરી શકતું નથી. તમારું ઇન્ટરનેટ કનેક્શન ચેક કરવાનો પ્રયાસ કરો.</translation>
 <translation id="2799223571221894425">ફરીથી લોંચ કરો</translation>
 <translation id="2847461019998147611">આ ભાષામાં Google Chrome બતાવો</translation>
 <translation id="2857540653560290388">Chrome લૉન્ચ કરી રહ્યાં છીએ…</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome OS સાથે સહાય મેળવો</translation>
 <translation id="3396977131400919238">ઇન્સ્ટૉલેશન દરમિયાન એક ઑપરેટિંગ સિસ્ટમની ભૂલ આવી. કૃપા કરીને Google Chrome ફરીથી ડાઉનલોડ કરો.</translation>
 <translation id="3398288718845740432">Chrome મેનૂમાં છુપાવો</translation>
+<translation id="3434246496373299699">જ્યારે તમે તમારા Google એકાઉન્ટ વડે સાઇન ઇન કરો ત્યારે Chrome તમારા પાસવર્ડ ચેક કરી શકે છે</translation>
 <translation id="3451115285585441894">Chrome માં ઉમેરી રહ્યું છે...</translation>
 <translation id="345171907106878721">સ્વયંને Chrome માં ઉમેરો</translation>
 <translation id="34857402635545079">Chromeમાંથી પણ ડેટા કાઢી નાખો (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chromeને આ સાઇટ સાથે તમારું સ્થાન શેર કરવા માટે તમારા સ્થાનના ઍક્સેસની જરૂર પડે છે</translation>
+<translation id="3533694711092285624">કોઈ સાચવેલો પાસવર્ડ નથી. જ્યારે તમે તમારા પાસવર્ડ સાચવો ત્યારે Chrome તેને ચેક કરી શકે છે.</translation>
 <translation id="3576528680708590453">તમારા સિસ્ટમ વ્યવસ્થાપકે <ph name="TARGET_URL_HOSTNAME" />ને ઍક્સેસ કરવા Google Chromeને વૈકલ્પિક બ્રાઉઝર ખોલવા માટે ગોઠવેલું છે.</translation>
 <translation id="3582972582564653026">તમારા બધા ડિવાઇસ પર Chromeને સિંક કરો અને મનગમતું બનાવો</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{અપડેટ લાગુ કરવા માટે તમે Chromeને ફરીથી લૉન્ચ કરો એવું તમારા વ્યવસ્થાપક ઇચ્છે છે}=1{અપડેટ લાગુ કરવા માટે તમે Chromeને ફરીથી લૉન્ચ કરો એવું તમારા વ્યવસ્થાપક ઇચ્છે છે. તમારી છુપી વિન્ડો ફરીથી ખૂલશે નહીં.}one{અપડેટ લાગુ કરવા માટે તમે Chromeને ફરીથી લૉન્ચ કરો એવું તમારા વ્યવસ્થાપક ઇચ્છે છે. તમારી # છુપી વિન્ડો ફરીથી ખૂલશે નહીં.}other{અપડેટ લાગુ કરવા માટે તમે Chromeને ફરીથી લૉન્ચ કરો એવું તમારા વ્યવસ્થાપક ઇચ્છે છે. તમારી # છુપી વિન્ડો ફરીથી ખૂલશે નહીં.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Google Chromeનું એક નવું વર્ઝન ઉપલબ્ધ છે અને તે પહેલાં કરતાંએ વધુ ઝડપી છે.</translation>
 <translation id="8614913330719544658">Google Chrome પ્રતિસાદ આપતું નથી. હવે ફરીથી લોંચ કરીએ?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 1 મિનિટમાં ફરીથી લૉન્ચ થશે}one{Chrome # મિનિટમાં ફરીથી લૉન્ચ થશે}other{Chrome # મિનિટમાં ફરીથી લૉન્ચ થશે}}</translation>
+<translation id="8641606876632989680">જ્યારે તમે ચેડાં થયેલા પાસવર્ડ વડે સાઇન ઇન કરશો ત્યારે Chrome તમને સૂચિત કરશે</translation>
 <translation id="8669527147644353129">Google Chrome સહાયક</translation>
 <translation id="8679801911857917785">જ્યારે તમે Chrome શરૂ કરો ત્યારે કયું પૃષ્ઠ બતાવવામાં આવે તે તેનું પણ નિયંત્રણ કરે છે.</translation>
 <translation id="870251953148363156">&amp;Google Chrome ને અપડેટ કરો</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb
index e263a43..5a191ec 100644
--- a/chrome/app/resources/google_chrome_strings_hi.xtb
+++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">यह Google Chrome का द्वितीयक इंस्टॉलेशन है और इसे आपका डिफ़ॉल्ट ब्राउज़र नहीं बनाया जा सकता.</translation>
 <translation id="2341767445688917208">Chrome OS आपके पासवर्ड सिंक नहीं कर सका. अभी ठीक करें.</translation>
 <translation id="2348335408836342058">Chrome को इस साइट के लिए आपका कैमरा और माइक्रोफ़ोन एक्सेस करने की अनुमति चाहिए</translation>
+<translation id="234869673307233423">Chrome आपके पासवर्ड की जांच नहीं कर सकता. बाद में कोशिश करें.</translation>
 <translation id="2429317896000329049">Google Chrome आपका डेटा समन्‍वयित नहीं कर सका क्‍योंकि समन्‍वयन आपके डोमेन के लिए उपलब्‍ध नहीं है.</translation>
 <translation id="2467438592969358367">Google Chrome आपके पासवर्ड निर्यात करना चाहता है. इसकी मंज़ूरी देने के लिए अपना Windows पासवर्ड लिखें.</translation>
 <translation id="2485422356828889247">विस्थापित करें</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">इस एक्सटेंशन ने यह बदल दिया है कि जब आप Chrome प्रारंभ करते हैं तब कौन सा पृष्‍ठ दिखाया जाए.</translation>
 <translation id="2765403129283291972">Chrome को इस साइट के लिए आपका माइक्रोफ़ोन एक्सेस करने की अनुमति चाहिए</translation>
 <translation id="2770231113462710648">डिफ़ॉल्ट ब्राउज़र को इसमें बदलें:</translation>
+<translation id="2775140325783767197">Chrome आपके पासवर्ड की जांच नहीं कर सकता. अपने इंटरनेट कनेक्शन की जांच करें.</translation>
 <translation id="2799223571221894425">फिर से लॉन्‍च करें</translation>
 <translation id="2847461019998147611">Google Chrome इस भाषा में दिखाएं</translation>
 <translation id="2857540653560290388">Chrome लॉन्च हो रहा है...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Chrome OS में सहायता पाएं</translation>
 <translation id="3396977131400919238">स्थापित करने के दौरान ऑपरेटिंग सिस्टम में गड़बड़ी आई. कृपया Google Chrome फिर से डाउनलोड करें.</translation>
 <translation id="3398288718845740432">Chrome मेन्यू में छिपाएं</translation>
+<translation id="3434246496373299699">आप जब अपने Google खाते से साइन इन करते हैं, तब Chrome आपके पासवर्ड की जांच कर सकता है</translation>
 <translation id="3451115285585441894">Chrome में जोड़ा जा रहा है...</translation>
 <translation id="345171907106878721">स्वयं को Chrome में जोड़ें</translation>
 <translation id="34857402635545079">साथ ही, Chrome (<ph name="URL" />) का डेटा साफ़ करें</translation>
 <translation id="3503306920980160878">इस साइट से आपकी जगह की जानकारी शेयर करने के लिए Chrome को आपकी जगह की जानकारी का एक्सेस चाहिए</translation>
+<translation id="3533694711092285624">सेव किया हुआ कोई भी पासवर्ड नहीं है. Chrome आपके पासवर्ड की जांच तब कर सकता है, जब आप उन्हें सेव करें.</translation>
 <translation id="3576528680708590453">आपके सिस्टम एडमिन ने Google Chrome को इस तरह कॉन्फ़िगर किया है कि वह <ph name="TARGET_URL_HOSTNAME" /> को ऐक्सेस करने के लिए कोई दूसरा ब्राउज़र खोले.</translation>
 <translation id="3582972582564653026">Chrome को अपने सभी डिवाइस पर सिंक करें और मनमुताबिक बनाएं</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{आपका एडमिन चाहता है कि आप अपडेट लागू करने के लिए Chrome को फिर से लॉन्च करें}=1{आपका एडमिन चाहता है कि आप अपडेट लागू करने के लिए Chrome को फिर से लॉन्च करें. आपकी गुप्त विंडो फिर से नहीं खुलेगी.}one{आपका एडमिन चाहता है कि आप अपडेट लागू करने के लिए Chrome को फिर से लॉन्च करें. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}other{आपका एडमिन चाहता है कि आप अपडेट लागू करने के लिए Chrome को फिर से लॉन्च करें. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">Google Chrome का एक नया वर्शन उपलब्‍ध है, और यह अब तक का सबसे तेज़ है.</translation>
 <translation id="8614913330719544658">Google Chrome निष्‍क्रिय है. अभी फिर से लॉन्च करें?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 1 मिनट में फिर से लॉन्च होगा}one{Chrome # मिनट में फिर से लॉन्च होगा}other{Chrome # मिनट में फिर से लॉन्च होगा}}</translation>
+<translation id="8641606876632989680">जब आप किसी हैक या चोरी हो चुके पासवर्ड से साइन इन करेंगे, तो Chrome आपको इसकी सूचना देगा</translation>
 <translation id="8669527147644353129">Google Chrome सहायक</translation>
 <translation id="8679801911857917785">इससे यह भी नियंत्रित होता है कि जब आप Chrome प्रारंभ करते हैं तब कौन सा पेज दिखाया जाए.</translation>
 <translation id="870251953148363156">Google Chrome को अपडेट करना</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hr.xtb b/chrome/app/resources/google_chrome_strings_hr.xtb
index 2e9f2be..f5a577e 100644
--- a/chrome/app/resources/google_chrome_strings_hr.xtb
+++ b/chrome/app/resources/google_chrome_strings_hr.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Ovo je sekundarna instalacija Google Chromea, pa on ne može biti vaš zadani preglednik.</translation>
 <translation id="2341767445688917208">OS Chrome nije mogao sinkronizirati vaše zaporke. Ispravite to odmah.</translation>
 <translation id="2348335408836342058">Chrome treba dopuštenje za pristup kameri i mikrofonu za ovu web-lokaciju</translation>
+<translation id="234869673307233423">Chrome ne može provjeriti vaše zaporke. Pokušajte ponovno kasnije.</translation>
 <translation id="2429317896000329049">Google Chrome nije mogao sinkronizirati vaše podatke jer sinkronizacija nije dostupna za vašu domenu.</translation>
 <translation id="2467438592969358367">Google Chrome želi izvesti vaše zaporke. Upišite svoju zaporku za Windows da biste to dopustili.</translation>
 <translation id="2485422356828889247">Deinstaliraj</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Ovo proširenje promijenilo je stranicu koja se prikazuje prilikom pokretanja Chromea.</translation>
 <translation id="2765403129283291972">Chrome treba dopuštenje za pristup mikrofonu za ovu web-lokaciju</translation>
 <translation id="2770231113462710648">Promijeni zadani preglednik na:</translation>
+<translation id="2775140325783767197">Chrome ne može provjeriti vaše zaporke. Provjerite internetsku vezu.</translation>
 <translation id="2799223571221894425">Pokreni ponovo</translation>
 <translation id="2847461019998147611">Prikaži Google Chrome na tom jeziku</translation>
 <translation id="2857540653560290388">Pokretanje Chromea...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Potraži pomoć za upotrebu OS-a Chrome</translation>
 <translation id="3396977131400919238">Došlo je do pogreške operacijskog sustava tijekom instalacije. Ponovno preuzmite program Google Chrome.</translation>
 <translation id="3398288718845740432">Sakrij u izborniku Chromea</translation>
+<translation id="3434246496373299699">Chrome može provjeriti vaše zaporke kad se prijavite Google računom</translation>
 <translation id="3451115285585441894">Dodavanje u Chrome...</translation>
 <translation id="345171907106878721">Dodajte sebe kao korisnika Chromea</translation>
 <translation id="34857402635545079">Izbriši i podatke s Chromea (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome treba dopuštenje za pristup vašoj lokaciji da bi je podijelio s ovom web-lokacijom</translation>
+<translation id="3533694711092285624">Nema nijedne spremljene zaporke. Chrome može provjeriti vaše zaporke kad ih spremite.</translation>
 <translation id="3576528680708590453">Vaš administrator sustava konfigurirao je Google Chrome da otvara zamjenski preglednik za pristup URL-u <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Uključite sinkronizaciju Chromea kako bi vam bio prilagođen na svim vašim uređajima</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Vaš administrator zahtijeva da ponovno pokrenete Chrome radi primjene ažuriranja}=1{Vaš administrator zahtijeva da ponovno pokrenete Chrome radi primjene ažuriranja. Anonimni se prozor neće ponovno otvoriti.}one{Vaš administrator zahtijeva da ponovno pokrenete Chrome radi primjene ažuriranja. Vaš # anonimni prozor neće se ponovno otvoriti.}few{Vaš administrator zahtijeva da ponovno pokrenete Chrome radi primjene ažuriranja. Vaša # anonimna prozora neće se ponovno otvoriti.}other{Vaš administrator zahtijeva da ponovno pokrenete Chrome radi primjene ažuriranja. Vaših # anonimnih prozora neće se ponovno otvoriti.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Dostupna je nova verzija preglednika Google Chrome, brža no ikad.</translation>
 <translation id="8614913330719544658">Google Chrome ne reagira. Ponovo pokrenuti sada?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome će se ponovo pokrenuti za jednu minutu}one{Chrome će se ponovo pokrenuti za # min}few{Chrome će se ponovo pokrenuti za # min}other{Chrome će se ponovo pokrenuti za # min}}</translation>
+<translation id="8641606876632989680">Chrome će vas obavijestiti kada se prijavite ugroženom zaporkom</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Upravlja i time koja se stranica prikazuje prilikom pokretanja Chromea.</translation>
 <translation id="870251953148363156">Ažuriranje preglednika Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb
index 46ee987..f40cbae 100644
--- a/chrome/app/resources/google_chrome_strings_hu.xtb
+++ b/chrome/app/resources/google_chrome_strings_hu.xtb
@@ -47,6 +47,7 @@
 <translation id="2309047409763057870">Ez a Google Chrome második telepítése, amelyet nem állíthat be az alapértelmezett böngészővé.</translation>
 <translation id="2341767445688917208">A Chrome OS nem tudta szinkronizálni az Ön jelszavait. Javítsa most.</translation>
 <translation id="2348335408836342058">A Chrome-nak engedélyre van szüksége ahhoz, hogy hozzáférjen a kamerához és a mikrofonhoz ennél a webhelynél</translation>
+<translation id="234869673307233423">A Chrome nem tudja ellenőrizni a jelszavait. Próbálkozzon később.</translation>
 <translation id="2429317896000329049">A Google Chrome nem tudta szinkronizálni az adatait, mert a szinkronizálás nem érhető el az Ön domainjénél.</translation>
 <translation id="2467438592969358367">A Google Chrome exportálni szeretné a jelszavakat. Ennek engedélyezéséhez írja be Windows-jelszavát.</translation>
 <translation id="2485422356828889247">Eltávolítás</translation>
@@ -61,6 +62,7 @@
 <translation id="2689103672227170538">Ez a bővítmény módosította, hogy melyik oldal jelenik meg a Chrome indításakor.</translation>
 <translation id="2765403129283291972">A Chrome-nak engedélyre van szüksége ahhoz, hogy hozzáférjen a mikrofonhoz ennél a webhelynél</translation>
 <translation id="2770231113462710648">Alapértelmezett böngésző beállítása:</translation>
+<translation id="2775140325783767197">A Chrome nem tudja ellenőrizni a jelszavakat. Ellenőrizze az internetkapcsolatot.</translation>
 <translation id="2799223571221894425">Újraindítás</translation>
 <translation id="2847461019998147611">A Google Chrome megjelenítése ezen a nyelven</translation>
 <translation id="2857540653560290388">A Chrome indítása…</translation>
@@ -79,10 +81,12 @@
 <translation id="3395323229510056640">Segítség a Chrome OS használatával kapcsolatban</translation>
 <translation id="3396977131400919238">Az operációs rendszer hibát jelzett a telepítés során.</translation>
 <translation id="3398288718845740432">Elrejtés a Chrome-menüben</translation>
+<translation id="3434246496373299699">A Chrome ellenőrizni tudja a mentett jelszavakat, ha Ön bejelentkezik Google-fiókjával</translation>
 <translation id="3451115285585441894">Hozzáadás a Chrome-hoz...</translation>
 <translation id="345171907106878721">Adja hozzá magát a Chrome-ban</translation>
 <translation id="34857402635545079">Az adatokat is törölje a Chrome-ból (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">A Chrome-nak a helyadatokhoz való hozzáférésre van szüksége ahhoz, hogy megoszthassa a webhellyel az Ön tartózkodási helyét</translation>
+<translation id="3533694711092285624">Nincsenek mentett jelszavak. A Chrome képes a jelszavak ellenőrzésére, amikor Ön menti őket.</translation>
 <translation id="3576528680708590453">Rendszergazdája úgy állította be a Google Chrome-ot, hogy másik böngészőt nyisson meg a(z) <ph name="TARGET_URL_HOSTNAME" /> eléréséhez.</translation>
 <translation id="3582972582564653026">Szinkronizálhatja és személyre szabhatja a Chrome-ot minden eszközén</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{A rendszergazda előírta, hogy újra kell indítania a Chrome-ot a frissítés alkalmazásához.}=1{A rendszergazda előírta, hogy újra kell indítania a Chrome-ot a frissítés alkalmazásához. Az inkognitóablak nem fog újra megnyílni.}other{A rendszergazda előírta, hogy újra kell indítania a Chrome-ot a frissítés alkalmazásához. A(z) # inkognitóablak nem fog újra megnyílni.}}</translation>
@@ -228,6 +232,7 @@
 <translation id="8556340503434111824">Elérhető a Google Chrome új verziója, amely gyorsabb, mint ezelőtt bármikor.</translation>
 <translation id="8614913330719544658">A Google Chrome nem válaszol. Újraindítja most?</translation>
 <translation id="8625237574518804553">{0,plural, =1{A Chrome 1 percen belül újraindul}other{A Chrome # percen belül újraindul}}</translation>
+<translation id="8641606876632989680">A Chrome figyelmezteti Önt, amikor olyan jelszóval jelentkezik be, amelyhez illetéktelenül hozzáfértek</translation>
 <translation id="8669527147644353129">Google Chrome segéd</translation>
 <translation id="8679801911857917785">Továbbá azt is szabályozza, hogy melyik oldal jelenik meg a Chrome indításakor.</translation>
 <translation id="870251953148363156">A &amp;Google Chrome frissítése</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hy.xtb b/chrome/app/resources/google_chrome_strings_hy.xtb
index dc12d1f9..86f7583 100644
--- a/chrome/app/resources/google_chrome_strings_hy.xtb
+++ b/chrome/app/resources/google_chrome_strings_hy.xtb
@@ -50,6 +50,7 @@
 <translation id="2309047409763057870">Սա Google Chrome-ի երկրորդային տեղադրումն է: Այն չի կարող դառնալ ձեր կանխադրված դիտարկիչը:</translation>
 <translation id="2341767445688917208">Chrome OS-ը չկարողացավ համաժամացնել ձեր գաղտնաբառերը։ Շտկել խնդիրը։</translation>
 <translation id="2348335408836342058">Chrome-ին այս կայքի համար անհրաժեշտ է ձեր տեսախցիկն ու խոսափողը օգտագործելու թույլտվություն</translation>
+<translation id="234869673307233423">Chrome-ը չի կարող ստուգել ձեր գաղտնաբառերը։ Փորձեք ավելի ուշ։</translation>
 <translation id="2429317896000329049">Google Chrome-ը չկարողացավ համաժամացնել ձեր տվյալները, քանի որ Sync ծառայությունը մատչելի չէ ձեր տիրույթի համար:</translation>
 <translation id="2467438592969358367">Google Chrome-ն ուզում է արտահանել ձեր գաղտնաբառերը: Թույլատրելու համար մուտքագրեք Windows-ի ձեր գաղտնաբառը:</translation>
 <translation id="2485422356828889247">Ապատեղադրել</translation>
@@ -64,6 +65,7 @@
 <translation id="2689103672227170538">Այս ընդլայնումը փոխել է Chrome-ի մեկնարկի ժամանակ ցուցադրվող էջը:</translation>
 <translation id="2765403129283291972">Chrome-ին այս կայքի համար անհրաժեշտ է ձեր խոսափողն օգտագործելու թույլտվություն</translation>
 <translation id="2770231113462710648">Կանխադրված դիտարկիչը դարձնել՝</translation>
+<translation id="2775140325783767197">Chrome-ը չի կարող ստուգել ձեր գաղտնաբառերը։ Ստուգեք ինտերնետ կապը։</translation>
 <translation id="2799223571221894425">Վերագործարկել</translation>
 <translation id="2847461019998147611">Google Chrome-ը ցուցադրել այս լեզվով</translation>
 <translation id="2857540653560290388">Chrome-ի գործարկում...</translation>
@@ -82,10 +84,12 @@
 <translation id="3395323229510056640">Chrome OS-ի օգնության էջ</translation>
 <translation id="3396977131400919238">Տեղադրման ժամանակ օպերացիոն համակարգի սխալ տեղի ունեցավ: Նորից ներբեռնեք Google Chrome-ը:</translation>
 <translation id="3398288718845740432">Թաքցնել Chrome-ի ընտրացանկից</translation>
+<translation id="3434246496373299699">Chrome-ը կարող է ստուգել ձեր գաղտնաբառերը, երբ մտնեք ձեր Google հաշիվ։</translation>
 <translation id="3451115285585441894">Ավելացվում է Chrome-ին…</translation>
 <translation id="345171907106878721">Ավելացնել Chrome-ի օգտատիրոջ</translation>
 <translation id="34857402635545079">Մաքրել նաև Chrome-ի տվյալները (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome-ին այս կայքի համար անհրաժեշտ է ձեզ տեղորոշելու թույլտվություն</translation>
+<translation id="3533694711092285624">Պահված գաղտնաբառեր չկան։ Chrome-ը կարող է ստուգել ձեր գաղտնաբառերը, երբ պահում եք դրանք։</translation>
 <translation id="3576528680708590453">Ձեր համակարգի ադմինիստրատորն այնպես է կարգավորել Google Chrome-ը, որ <ph name="TARGET_URL_HOSTNAME" /> կայքը բացվի մեկ այլ դիտարկիչով:</translation>
 <translation id="3582972582564653026">Համաժամացրեք և անհատականացրեք Chrome-ը ձեր բոլոր սարքերում</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Թարմացումը կիրառելու համար ադմինիստրատորը պահանջում է վերագործարկել Chrome-ը}=1{Թարմացումը կիրառելու համար ադմինիստրատորը պահանջում է վերագործարկել Chrome-ը: Ձեր ինկոգնիտո պատուհանը նորից չի բացվի։}one{Թարմացումը կիրառելու համար ադմինիստրատորը պահանջում է վերագործարկել Chrome-ը: Ձեր # ինկոգնիտո պատուհանը նորից չի բացվի։}other{Թարմացումը կիրառելու համար ադմինիստրատորը պահանջում է վերագործարկել Chrome-ը: Ձեր # ինկոգնիտո պատուհանները նորից չեն բացվի։}}</translation>
@@ -236,6 +240,7 @@
 <translation id="8556340503434111824">Google Chrome-ի նոր տարբերակը մատչելի է և այն շատ ավելի արագ է:</translation>
 <translation id="8614913330719544658">Google Chrome-ը չի պատասխանում: Վերագործարկե՞լ:</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome-ը կվերագործարկվի 1 րոպեից}one{Chrome-ը կվերագործարկվի # րոպեից}other{Chrome-ը կվերագործարկվի # րոպեից}}</translation>
+<translation id="8641606876632989680">Chrome-ը կտեղեկացնի ձեզ, երբ կոտրված գաղտնաբառ օգտագործեք։</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Այն նաև վերահսկում է Chrome-ի մեկնարկման ժամանակ ցուցադրվող էջը:</translation>
 <translation id="870251953148363156">Թարմացնել &amp;Google Chrome-ը</translation>
diff --git a/chrome/app/resources/google_chrome_strings_id.xtb b/chrome/app/resources/google_chrome_strings_id.xtb
index 2e76684b7..305a179d 100644
--- a/chrome/app/resources/google_chrome_strings_id.xtb
+++ b/chrome/app/resources/google_chrome_strings_id.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Ini adalah pemasangan Google Chrome sekunder, dan tidak dapat digunakan sebagai browser default.</translation>
 <translation id="2341767445688917208">Chrome OS tidak dapat menyinkronkan sandi Anda. Perbaiki sekarang.</translation>
 <translation id="2348335408836342058">Chrome memerlukan izin akses ke kamera dan mikrofon untuk situs ini</translation>
+<translation id="234869673307233423">Chrome tidak dapat memeriksa sandi Anda. Coba lagi nanti.</translation>
 <translation id="2429317896000329049">Google Chrome tidak dapat menyinkronkan data Anda karena Sinkronisasi tidak tersedia untuk domain Anda.</translation>
 <translation id="2467438592969358367">Google Chrome ingin mengekspor sandi. Ketik sandi Windows Anda untuk mengizinkannya.</translation>
 <translation id="2485422356828889247">Uninstal</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Ekstensi ini telah mengubah apa yang ditampilkan oleh halaman saat Anda memulai Chrome.</translation>
 <translation id="2765403129283291972">Chrome memerlukan izin akses ke mikrofon untuk situs ini</translation>
 <translation id="2770231113462710648">Ubah browser default ke:</translation>
+<translation id="2775140325783767197">Chrome tidak dapat memeriksa sandi Anda. Coba periksa koneksi internet Anda.</translation>
 <translation id="2799223571221894425">Luncurkan Ulang</translation>
 <translation id="2847461019998147611">Tampilkan Google Chrome dalam bahasa ini</translation>
 <translation id="2857540653560290388">Meluncurkan Chrome...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Dapatkan bantuan Chrome OS</translation>
 <translation id="3396977131400919238">Terjadi kesalahan pada sistem operasi saat penginstalan berlangsung. Download kembali Google Chrome.</translation>
 <translation id="3398288718845740432">Sembunyikan di Menu Chrome</translation>
+<translation id="3434246496373299699">Chrome dapat memeriksa sandi saat Anda login dengan Akun Google</translation>
 <translation id="3451115285585441894">Menambahkan ke Chrome...</translation>
 <translation id="345171907106878721">Tambahkan diri Anda ke Chrome</translation>
 <translation id="34857402635545079">Hapus juga data dari Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome memerlukan akses ke lokasi Anda untuk berbagi lokasi dengan situs ini</translation>
+<translation id="3533694711092285624">Tidak ada sandi yang tersimpan. Chrome dapat memeriksa sandi Anda saat menyimpannya.</translation>
 <translation id="3576528680708590453">Administrator sistem Anda telah mengonfigurasi Google Chrome untuk membuka browser alternatif guna mengakses <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Menyinkronkan dan mempersonalisasi Chrome di perangkat Anda</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administrator mewajibkan Anda meluncurkan kembali Chrome untuk menerapkan update}=1{Administrator mewajibkan Anda meluncurkan kembali Chrome untuk menerapkan update. Jendela samaran Anda tidak akan dibuka kembali.}other{Administrator mewajibkan Anda meluncurkan kembali Chrome untuk menerapkan update. # jendela samaran Anda tidak akan dibuka kembali.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Tersedia versi Google Chrome yang baru, dan versi ini lebih cepat dari sebelumnya.</translation>
 <translation id="8614913330719544658">Google Chrome tidak merespons. Luncurkan ulang sekarang?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome akan diluncurkan ulang dalam 1 menit}other{Chrome akan diluncurkan ulang dalam # menit}}</translation>
+<translation id="8641606876632989680">Chrome akan memberi tahu Anda saat Anda login dengan sandi yang telah dibobol</translation>
 <translation id="8669527147644353129">Pembantu Google Chrome</translation>
 <translation id="8679801911857917785">Juga mengontrol halaman apa yang ditampilkan saat Anda memulai Chrome.</translation>
 <translation id="870251953148363156">Pembaruan &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_is.xtb b/chrome/app/resources/google_chrome_strings_is.xtb
index 3524cd481..53d142e 100644
--- a/chrome/app/resources/google_chrome_strings_is.xtb
+++ b/chrome/app/resources/google_chrome_strings_is.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Þetta er aukaleg uppsetning á Google Chrome sem ekki er hægt að gera að sjálfgefnum vafra.</translation>
 <translation id="2341767445688917208">Chrome OS gat ekki samstillt aðgangsorðin þín. Laga núna.</translation>
 <translation id="2348335408836342058">Chrome þarf leyfi til að nota myndavélina og hljóðnemann á þessu vefsvæði</translation>
+<translation id="234869673307233423">Chrome getur ekki athugað aðgangsorðin þín. Reyndu aftur síðar.</translation>
 <translation id="2429317896000329049">Google Chrome gat ekki samstillt gögnin þín vegna þess að samstilling er ekki í boði fyrir lénið þitt.</translation>
 <translation id="2467438592969358367">Google Chrome vill flytja út aðgangsorðin þín. Sláðu inn Windows-aðgangsorðið þitt til að leyfa það.</translation>
 <translation id="2485422356828889247">Fjarlægja</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Þessi viðbót hefur breytt því hvaða síða birtist þegar þú ræsir Chrome.</translation>
 <translation id="2765403129283291972">Chrome þarf leyfi til að nota hljóðnemann á þessu vefsvæði</translation>
 <translation id="2770231113462710648">Breyta sjálfgefnum vafra í:</translation>
+<translation id="2775140325783767197">Chrome getur ekki athugað aðgangsorðin þín. Athugaðu nettenginguna þína.</translation>
 <translation id="2799223571221894425">Endurræsa</translation>
 <translation id="2847461019998147611">Birta Google Chrome á þessu tungumáli</translation>
 <translation id="2857540653560290388">Ræsir Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Fá hjálp með Chrome OS</translation>
 <translation id="3396977131400919238">Stýrikerfisvilla kom upp við uppsetningu. Sæktu Google Chrome aftur.</translation>
 <translation id="3398288718845740432">Fela í valmynd Chrome</translation>
+<translation id="3434246496373299699">Chrome getur athugað aðgangsorðin þín þegar þú skráir þig inn með Google reikningnum þínum</translation>
 <translation id="3451115285585441894">Bætir við Chrome...</translation>
 <translation id="345171907106878721">Bættu þér við Chrome</translation>
 <translation id="34857402635545079">Hreinsa líka gögn úr Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome þarf staðsetningaraðgang til að deila staðsetningu þinni með þessu vefsvæði</translation>
+<translation id="3533694711092285624">Engin vistuð aðgangsorð. Chrome getur athugað aðgangsorðin þín þegar þú vistar þau.</translation>
 <translation id="3576528680708590453">Kerfisstjórinn hefur stillt Google Chrome á að opna annan vafra fyrir <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Samstilltu Chrome á milli tækja og gerðu það að þínu</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Kerfisstjórinn þinn gerir kröfu um að þú endurræsir Chrome til að setja upp uppfærslu}=1{Kerfisstjórinn þinn gerir kröfu um að þú endurræsir Chrome til að setja upp uppfærslu. Huliðsglugginn enduropnast ekki.}one{Kerfisstjórinn þinn gerir kröfu um að þú endurræsir Chrome til að setja upp uppfærslu. # huliðsgluggi enduropnast ekki.}other{Kerfisstjórinn þinn gerir kröfu um að þú endurræsir Chrome til að setja upp uppfærslu. # huliðsgluggar enduropnast ekki.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Ný útgáfa af Google Chrome er í boði, og hún er hraðari en nokkru sinni fyrr.</translation>
 <translation id="8614913330719544658">Google Chrome svarar ekki. Endurræsa núna?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome verður endurræst eftir 1 mínútu}one{Chrome verður endurræst eftir # mínútu}other{Chrome verður endurræst eftir # mínútur}}</translation>
+<translation id="8641606876632989680">Chrome lætur þig vita þegar þú skráir þig inn með aðgangsorði sem er í hættu</translation>
 <translation id="8669527147644353129">Hjálparforrit Google Chrome</translation>
 <translation id="8679801911857917785">Þetta stýrir því einnig hvaða síða birtist þegar þú ræsir Chrome.</translation>
 <translation id="870251953148363156">Uppfæra &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_it.xtb b/chrome/app/resources/google_chrome_strings_it.xtb
index f355cba5..3ffb88b 100644
--- a/chrome/app/resources/google_chrome_strings_it.xtb
+++ b/chrome/app/resources/google_chrome_strings_it.xtb
@@ -47,6 +47,7 @@
 <translation id="2309047409763057870">Questa è un'installazione secondaria, di conseguenza Google Chrome non può essere impostato come browser predefinito.</translation>
 <translation id="2341767445688917208">Impossibile sincronizzare le password in Chrome OS. Risolvi subito il problema.</translation>
 <translation id="2348335408836342058">Per questo sito Chrome ha bisogno dell'autorizzazione ad accedere alla fotocamera e al microfono</translation>
+<translation id="234869673307233423">Chrome non può controllare le tue password. Riprova più tardi.</translation>
 <translation id="2429317896000329049">Impossibile sincronizzare i dati in Google Chrome perché la sincronizzazione non è disponibile per il tuo dominio.</translation>
 <translation id="2467438592969358367">Google Chrome vuole esportare le password. Per consentire l'esportazione, digita la tua password Windows.</translation>
 <translation id="2485422356828889247">Disinstalla</translation>
@@ -61,6 +62,7 @@
 <translation id="2689103672227170538">Questa estensione ha cambiato la pagina mostrata all'avvio di Chrome.</translation>
 <translation id="2765403129283291972">Per questo sito Chrome ha bisogno dell'autorizzazione ad accedere al microfono</translation>
 <translation id="2770231113462710648">Cambia browser predefinito con:</translation>
+<translation id="2775140325783767197">Chrome non può controllare le tue password. Prova a controllare la connessione a Internet.</translation>
 <translation id="2799223571221894425">Riavvia</translation>
 <translation id="2847461019998147611">Visualizza Google Chrome in questa lingua</translation>
 <translation id="2857540653560290388">Avvio di Chrome...</translation>
@@ -79,10 +81,12 @@
 <translation id="3395323229510056640">Ricevi assistenza per Chrome OS</translation>
 <translation id="3396977131400919238">Durante l'installazione si è verificato un errore del sistema operativo. Scarica nuovamente Google Chrome.</translation>
 <translation id="3398288718845740432">Nascondi in menu Chrome</translation>
+<translation id="3434246496373299699">Chrome può controllare le tue password quando accedi con il tuo Account Google</translation>
 <translation id="3451115285585441894">Aggiunta a Chrome in corso...</translation>
 <translation id="345171907106878721">Aggiungiti a Chrome</translation>
 <translation id="34857402635545079">Cancella anche i dati di Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome deve poter accedere alla tua posizione per condividerla con questo sito</translation>
+<translation id="3533694711092285624">Nessuna password salvata. Chrome può controllare le password quando le salvi.</translation>
 <translation id="3576528680708590453">L'amministratore di sistema ha configurato Google Chrome per l'apertura di un browser alternativo per accedere a <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sincronizza e personalizza Chrome sui tuoi dispositivi</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{L'amministratore richiede il riavvio di Chrome per installare un aggiornamento}=1{L'amministratore richiede il riavvio di Chrome per installare un aggiornamento. La finestra di navigazione in incognito non verrà riaperta.}other{L'amministratore richiede il riavvio di Chrome per installare un aggiornamento. Le # finestre di navigazione in incognito non verranno riaperte.}}</translation>
@@ -228,6 +232,7 @@
 <translation id="8556340503434111824">È disponibile una nuova versione di Google Chrome con una velocità senza precedenti.</translation>
 <translation id="8614913330719544658">Google Chrome non risponde. Riavviarlo ora?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome verrà riavviato tra 1 minuto}other{Chrome verrà riavviato tra # minuti}}</translation>
+<translation id="8641606876632989680">Chrome ti invierà una notifica quando esegui l'accesso con una password compromessa</translation>
 <translation id="8669527147644353129">Supporto Google Chrome</translation>
 <translation id="8679801911857917785">Controlla anche la pagina visualizzata all'avvio di Chrome.</translation>
 <translation id="870251953148363156">Aggiorna &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb
index e32469f..296cf36f 100644
--- a/chrome/app/resources/google_chrome_strings_iw.xtb
+++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">‏זוהי התקנה משנית של Google Chrome, ולא ניתן להפוך אותו לדפדפן ברירת המחדל שלך.</translation>
 <translation id="2341767445688917208">‏מערכת Chrome OS לא הצליחה לסנכרן את הסיסמאות שלך. לפתרון הבעיה עכשיו.</translation>
 <translation id="2348335408836342058">‏Chrome זקוק להרשאת גישה אל המצלמה והמיקרופון בשביל האתר הזה</translation>
+<translation id="234869673307233423">‏Chrome לא יכול לבדוק את הסיסמאות שלך. כדאי לנסות שוב מאוחר יותר.</translation>
 <translation id="2429317896000329049">‏Google Chrome לא הצליח לסנכרן את הנתונים שלך מפני שהסנכרון אינו זמין עבור הדומיין שלך.</translation>
 <translation id="2467438592969358367">‏Google Chrome רוצה לייצא את הסיסמאות שלך. יש להקליד את הסיסמה שלך ל-Windows כדי לאפשר זאת.</translation>
 <translation id="2485422356828889247">הסר התקנה</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">‏התוסף הזה שינה את הדף שמוצג כש-Chrome מופעל.</translation>
 <translation id="2765403129283291972">‏Chrome זקוק להרשאת גישה למיקרופון בשביל האתר הזה</translation>
 <translation id="2770231113462710648">שנה את דפדפן ברירת המחדל ל:</translation>
+<translation id="2775140325783767197">‏Chrome לא יכול לבדוק את הסיסמאות שלך. יש לבדוק את החיבור לאינטרנט.</translation>
 <translation id="2799223571221894425">הפעל מחדש</translation>
 <translation id="2847461019998147611">‏הצג את Google Chrome בשפה זו</translation>
 <translation id="2857540653560290388">‏הפעלת Chrome...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">‏קבל עזרה בנושא מערכת ההפעלה של Chrome</translation>
 <translation id="3396977131400919238">‏במהלך ההתקנה ארעה שגיאה של מערכת ההפעלה. הורד שוב את Google Chrome.</translation>
 <translation id="3398288718845740432">‏הסתרה בתפריט Chrome</translation>
+<translation id="3434246496373299699">‏Chrome יכול לבדוק את הסיסמאות כשנכנסים באמצעות חשבון Google</translation>
 <translation id="3451115285585441894">‏הוספה ל-‏Chrome...</translation>
 <translation id="345171907106878721">‏הוסף את עצמך ל-Chrome</translation>
 <translation id="34857402635545079">‏ניקוי נתונים גם מ-Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">‏Chrome זקוק לגישה למיקום שלך כדי לשתף אותו עם האתר הזה</translation>
+<translation id="3533694711092285624">‏אין סיסמאות שמורות. Chrome יכול לבדוק את הסיסמאות שלך רק אם שמרת אותן.</translation>
 <translation id="3576528680708590453">‏לפי הגדרת מנהל המערכת, Google Chrome יפתח דפדפן חלופי כדי לגשת אל <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">‏סינכרון והתאמה אישית של Chrome בכל המכשירים שברשותך</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{‏מנהל המערכת מבקש להפעיל מחדש את Chrome כדי להחיל עדכון}=1{‏מנהל המערכת מבקש להפעיל מחדש את Chrome כדי להחיל עדכון. החלון האנונימי לא ייפתח מחדש.}two{‏מנהל המערכת מבקש להפעיל מחדש את Chrome כדי להחיל עדכון. # החלונות האנונימיים לא ייפתחו מחדש.}many{‏מנהל המערכת מבקש להפעיל מחדש את Chrome כדי להחיל עדכון. # החלונות האנונימיים לא ייפתחו מחדש.}other{‏מנהל המערכת מבקש להפעיל מחדש את Chrome כדי להחיל עדכון. # החלונות האנונימיים לא ייפתחו מחדש.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">‏גרסה חדשה של Google Chrome זמינה, והיא מהירה יותר מאי פעם.</translation>
 <translation id="8614913330719544658">‏Google Chrome אינו מגיב. להפעיל מחדש עכשיו?</translation>
 <translation id="8625237574518804553">{0,plural, =1{‏Chrome יופעל מחדש בעוד דקה}two{‏Chrome יופעל מחדש בעוד # דקות}many{‏Chrome יופעל מחדש בעוד # דקות}other{‏Chrome יופעל מחדש בעוד # דקות}}</translation>
+<translation id="8641606876632989680">‏אם מערכת Chrome תזהה שנכנסת עם סיסמה שנחשפה, היא תתריע לך על כך</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">‏הגדרה זו גם קובעת איזה דף מוצג כשאתה מפעיל את Chrome.</translation>
 <translation id="870251953148363156">‏יש לעדכן את Google Chrome&amp;</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb
index 0a4fced..1727400315 100644
--- a/chrome/app/resources/google_chrome_strings_ja.xtb
+++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">この Google Chrome はセカンダリ インストールのため、既定のブラウザには設定できません。</translation>
 <translation id="2341767445688917208">Chrome OS でパスワードを同期できませんでした。今すぐ問題を修正してください。</translation>
 <translation id="2348335408836342058">このサイトを利用するには、Chrome でカメラとマイクの使用を許可する必要があります</translation>
+<translation id="234869673307233423">Chrome でパスワードを確認できません。しばらくしてからもう一度お試しください。</translation>
 <translation id="2429317896000329049">お使いのドメインでは同期を利用できないため、Google Chrome はデータを同期できませんでした。</translation>
 <translation id="2467438592969358367">Google Chrome からパスワードをエクスポートするための許可を求められています。許可するには Windows のパスワードを入力してください。</translation>
 <translation id="2485422356828889247">アンインストール</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">この拡張機能により、Chrome の起動時に表示されるページが変更されました。</translation>
 <translation id="2765403129283291972">このサイトを利用するには、Chrome でマイクの使用を許可する必要があります</translation>
 <translation id="2770231113462710648">既定のブラウザを変更:</translation>
+<translation id="2775140325783767197">Chrome がパスワードを確認できません。インターネット接続を確認してみてください。</translation>
 <translation id="2799223571221894425">再起動</translation>
 <translation id="2847461019998147611">Google Chrome をこの言語で表示</translation>
 <translation id="2857540653560290388">Chrome を起動しています...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Chrome OS のヘルプを見る</translation>
 <translation id="3396977131400919238">インストール中にオペレーティング システム エラーが発生しました。Google Chrome をダウンロード直してください。</translation>
 <translation id="3398288718845740432">Chrome メニューで非表示</translation>
+<translation id="3434246496373299699">Google アカウントでログインすると、Chrome がパスワードを確認できます。</translation>
 <translation id="3451115285585441894">Chrome に追加...</translation>
 <translation id="345171907106878721">Chrome に自分を追加</translation>
 <translation id="34857402635545079">Chrome のデータ(<ph name="URL" />)も消去する</translation>
 <translation id="3503306920980160878">このサイトで現在地を共有するには、Chrome で位置情報の使用を許可する必要があります</translation>
+<translation id="3533694711092285624">保存されているパスワードがありません。パスワードを保存すると Chrome で確認できるようになります。</translation>
 <translation id="3576528680708590453">システム管理者が、<ph name="TARGET_URL_HOSTNAME" /> へのアクセスに代替ブラウザを開くよう Google Chrome を設定しています。</translation>
 <translation id="3582972582564653026">同期してカスタマイズした Chrome をどのデバイスでも使用できます</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{管理者が、アップデートを適用するために Chrome を再起動するよう求めています}=1{管理者が、アップデートを適用するために Chrome を再起動するよう求めています。シークレット ウィンドウは、再起動後は自動的には開きません。}other{管理者が、アップデートを適用するために Chrome を再起動するよう求めています。現在開いている # 個のシークレット ウィンドウは、再起動後は自動的には開きません。}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Google クロームブラウザがバージョンアップ!是非お試しください。</translation>
 <translation id="8614913330719544658">Google Chrome が応答しません。今すぐ再起動しますか?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome は 1 分後に再起動されます}other{Chrome は # 分後に再起動されます}}</translation>
+<translation id="8641606876632989680">不正使用されたパスワードでログインした場合、Chrome で通知します</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">この拡張機能では、Chrome の起動時に表示されるページも制御されます。</translation>
 <translation id="870251953148363156">Google Chrome を更新(&amp;G)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ka.xtb b/chrome/app/resources/google_chrome_strings_ka.xtb
index 0fde3d4..3fed27e 100644
--- a/chrome/app/resources/google_chrome_strings_ka.xtb
+++ b/chrome/app/resources/google_chrome_strings_ka.xtb
@@ -51,6 +51,7 @@
 <translation id="2309047409763057870">ეს Google Chrome-ის მეორადი ინსტალაცია არის და ნაგულისხმევ ბრაუზერად ის ვერ დაყენდება.</translation>
 <translation id="2341767445688917208">Chrome OS-მა ვერ მოახერხა თქვენი პაროლების სინქრონიზაცია. შეასწორეთ ახლავე.</translation>
 <translation id="2348335408836342058">Chrome საჭიროებს თქვენს კამერასა და მიკროფონზე წვდომის ნებართვას ამ საიტისთვის</translation>
+<translation id="234869673307233423">Chrome ვერ ახერხებს პაროლების შემოწმებას. ცადეთ მოგვიანებით.</translation>
 <translation id="2429317896000329049">Google Chrome-მა ვერ დაასინქრონა თქვენი მონაცემები, რადგან სინქრონიზაცია არ არის ხელმისაწვდომი თქვენი დომენისთვის.</translation>
 <translation id="2467438592969358367">Google Chrome ითხოვს თქვენი პაროლების ექსპორტირებას. აღნიშნულის დასაშვებად აკრიფეთ თქვენი Windows-ის პაროლი.</translation>
 <translation id="2485422356828889247">დეინსტალაცია</translation>
@@ -65,6 +66,7 @@
 <translation id="2689103672227170538">ამ გაფართოებამ თქვენ მიერ Chrome-ის გაშვებისას ნაჩვენები გვერდი შეცვალა.</translation>
 <translation id="2765403129283291972">Chrome საჭიროებს თქვენს მიკროფონზე წვდომის ნებართვას ამ საიტისთვის</translation>
 <translation id="2770231113462710648">შეცვალეთ ნაგულისხმევი ბრაუზერი-ით:</translation>
+<translation id="2775140325783767197">Chrome ვერ ახერხებს პაროლების შემოწმებას. შეამოწმეთ კავშირი ინტერნეტთან.</translation>
 <translation id="2799223571221894425">ხელახლა გაშვება</translation>
 <translation id="2847461019998147611">Google Chrome-ის ამ ენაზე ჩვენება</translation>
 <translation id="2857540653560290388">მიმდინარეობს Chrome-ის გაშვება…</translation>
@@ -83,10 +85,12 @@
 <translation id="3395323229510056640">Chrome OS-თან დაკავშირებული დახმარების მიღება</translation>
 <translation id="3396977131400919238">ინსტალაციის დროს წარმოიქმნა ოპერატიული სისტემის შეცდომა. ხელახლა ჩამოტვირთეთ Google Chrome.</translation>
 <translation id="3398288718845740432">Chrome-ის მენიუში დამალვა</translation>
+<translation id="3434246496373299699">პაროლების Chrome-ის მეშვეობით შესამოწმებლად შედით სისტემაში თქვენი Google ანგარიშით</translation>
 <translation id="3451115285585441894">Chrome-ში დამატება…</translation>
 <translation id="345171907106878721">საკუთარი თავის დამატება Chrome-ში</translation>
 <translation id="34857402635545079">მონაცემების Chrome-იდანაც გასუფთავება (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome საჭიროებს თქვენს მდებარეობაზე წვდომის ნებართვას ამ საიტისთვის გასაზიარებლად</translation>
+<translation id="3533694711092285624">შენახული პაროლები არ არის. პაროლების შემოწმებას Chrome მოახერხებს მათი შენახვის შემდეგ.</translation>
 <translation id="3576528680708590453">თქვენი სისტემის ადმინისტრატორმა მოახდინა Google Chrome-ის კონფიგურაცია იმგვარად, რომ <ph name="TARGET_URL_HOSTNAME" />-ზე წვდომისთვის საჭიროა ალტერნატიული ბრაუზერის გახსნა.</translation>
 <translation id="3582972582564653026">მოახდინეთ Chrome-ის სინქრონიზაცია და პერსონალიზება თქვენს ყველა მოწყობილობას შორის</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{განახლების მისასადაგებლად თქვენი ადმინისტრატორი მოითხოვს Chrome-ის ხელახლა გაშვებას}=1{განახლების მისასადაგებლად თქვენი ადმინისტრატორი მოითხოვს Chrome-ის ხელახლა გაშვებას. თქვენი ინკოგნიტო ფანჯარა ხელახლა არ გაიხსნება.}other{განახლების მისასადაგებლად თქვენი ადმინისტრატორი მოითხოვს Chrome-ის ხელახლა გაშვებას. თქვენი # ინკოგნიტო ფანჯარა ხელახლა არ გაიხსნება.}}</translation>
@@ -236,6 +240,7 @@
 <translation id="8556340503434111824">ხელმისაწვდომია Google Chrome-ის უფრო ახალი ვერსია, რომელიც უფრო სწრაფია.</translation>
 <translation id="8614913330719544658">Google Chrome არ პასუხობს. გავუშვათ ხელახლა?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome ხელახლა გაეშვება 1 წუთში}other{Chrome ხელახლა გაეშვება # წუთში}}</translation>
+<translation id="8641606876632989680">Chrome შეგატყობინებთ, როცა სისტემაში გატეხილი პაროლით შეხვალთ</translation>
 <translation id="8669527147644353129">Google Chrome-ის დახმარება</translation>
 <translation id="8679801911857917785">იგი, ასევე, აკონტროლებს, თუ რომელი გვერდი გამოჩნდება Chrome-ის გაშვებისას.</translation>
 <translation id="870251953148363156">&amp;Google Chrome-ის განახლება</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kk.xtb b/chrome/app/resources/google_chrome_strings_kk.xtb
index 61f6404..5e8954c 100644
--- a/chrome/app/resources/google_chrome_strings_kk.xtb
+++ b/chrome/app/resources/google_chrome_strings_kk.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Бұл – Google Chrome браузерінің қайта орнатылған нұсқасы және әдепкі браузер бола алмайды.</translation>
 <translation id="2341767445688917208">Chrome OS құпия сөздеріңізді синхрондай алмады. Қазір түзетіңіз.</translation>
 <translation id="2348335408836342058">Chrome браузеріне бұл сайтта камераны және микрофонды пайдалану үшін рұқсат керек</translation>
+<translation id="234869673307233423">Chrome сіздің құпия сөздеріңізді тексере алмайды. Кейінірек қайталап көріңіз.</translation>
 <translation id="2429317896000329049">Google Chrome деректеріңізді синхрондай алмады, себебі синхрондау функциясы доменіңіз үшін қолжетімді емес.</translation>
 <translation id="2467438592969358367">Google Chrome құпия сөздерді экспорттағысы келеді. Бұған рұқсат беру үшін Windows құпия сөзіңізді теріңіз.</translation>
 <translation id="2485422356828889247">Жою</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Бұл кеңейтім Chrome браузерін іске қосқан кезде көрсетілетін бетті өзгертті.</translation>
 <translation id="2765403129283291972">Chrome браузеріне бұл сайтта микрофонды пайдалану үшін рұқсат керек</translation>
 <translation id="2770231113462710648">Әдепкі браузерді келесіге өзгерту:</translation>
+<translation id="2775140325783767197">Chrome сіздің құпия сөздеріңізді тексере алмайды. Интернет байланысын тексеріп көріңіз.</translation>
 <translation id="2799223571221894425">Қайта іске қосу</translation>
 <translation id="2847461019998147611">Google Chrome жүйесін осы тілде көрсету</translation>
 <translation id="2857540653560290388">Chrome қосылып жатыр…</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome ОЖ жөнінде анықтама алу</translation>
 <translation id="3396977131400919238">Орнату барысында операциялық жүйе қатесі орын алды. Google Chrome қолданбасын қайта жүктеңіз.</translation>
 <translation id="3398288718845740432">Chrome мәзірінде жасыру</translation>
+<translation id="3434246496373299699">Google есептік жазбаңызбен кіргенде, Chrome сіздің құпия сөздеріңізді тексере алады.</translation>
 <translation id="3451115285585441894">Chrome жүйесіне қосылуда…</translation>
 <translation id="345171907106878721">Chrome жүйесіне өзіңізді қосу</translation>
 <translation id="34857402635545079">Chrome браузеріндегі деректер де өшірілсін (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Бұл сайтқа көрсету үшін Chrome браузері орналасқан жеріңізді білуі керек</translation>
+<translation id="3533694711092285624">Ешқандай құпия сөз сақталмаған. Құпия сөздер сақталған кезде, Chrome оларды тексере алады.</translation>
 <translation id="3576528680708590453">Жүйе әкімшісі Google Chrome браузерін <ph name="TARGET_URL_HOSTNAME" /> бетіне кіргенде қосымша браузер ашылатын етіп конфигурациялады.</translation>
 <translation id="3582972582564653026">Chrome браузерін барлық құрылғыларда синхрондап, параметрлерін жекелендіріңіз.</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Жаңартылған нұсқаны қолдану үшін әкімшіңіз Chrome браузерін қайта іске қосуыңызды талап етеді.}=1{Жаңартылған нұсқаны қолдану үшін әкімшіңіз Chrome браузерін қайта іске қосуыңызды талап етеді. Инкогнито терезесі қайта ашылмайды.}other{Жаңартылған нұсқаны қолдану үшін әкімшіңіз Chrome браузерін қайта іске қосуыңызды талап етеді. # инкогнито терезесі қайта ашылмайды.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Жаңа жылдамырақ Google Chrome нұсқасы қолжетімді.</translation>
 <translation id="8614913330719544658">Google Chrome жауап бермейді. Қазір қайта іске қосасыз ба?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome браузері 1 минуттан кейін қайта іске қосылады}other{Chrome браузері # минуттан кейін қайта іске қосылады}}</translation>
+<translation id="8641606876632989680">Ұрланған құпия сөзбен кірген кезде, Chrome сізге хабарлайды.</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Сонымен қатар Chrome бастапқы бетін де бақылайды.</translation>
 <translation id="870251953148363156">OSGoogle Chrome жаңарту</translation>
diff --git a/chrome/app/resources/google_chrome_strings_km.xtb b/chrome/app/resources/google_chrome_strings_km.xtb
index 90fa22ac..df9ab56 100644
--- a/chrome/app/resources/google_chrome_strings_km.xtb
+++ b/chrome/app/resources/google_chrome_strings_km.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">នេះគឺជាការដំឡើេង Google Chrome បន្ទាប់បន្សំ ហើយវាមិនអាចធ្វើជាកម្មវិធីរុករកលំនាំដើមរបស់អ្នកបានទេ។</translation>
 <translation id="2341767445688917208">Chrome OS មិនអាច​ធ្វើសមកាលកម្ម​ពាក្យសម្ងាត់​របស់អ្នក​បានទេ។ ដោះស្រាយ​ឥឡូវនេះ​។</translation>
 <translation id="2348335408836342058">Chrome ត្រូវការ​ការអនុញ្ញាត​ដើម្បី​ចូលប្រើ​កាមេរ៉ា និង​មីក្រូហ្វូន​របស់អ្នក​សម្រាប់​ទំព័រនេះ</translation>
+<translation id="234869673307233423">Chrome មិន​អាចពិនិត្យ​ពាក្យសម្ងាត់របស់អ្នកបានទេ។ សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ។</translation>
 <translation id="2429317896000329049">Google Chrome មិនអាចធ្វើសមកម្មទិន្នន័យរបស់អ្នកទេ ពីព្រោះ សមកម្ម មិនមានសម្រាប់ដែនរបស់អ្នកទេ។</translation>
 <translation id="2467438592969358367">Google Chrome ចង់​នាំចេញពាក្យ​សម្ងាត់​របស់អ្នក​។ សូមវាយ​បញ្ចូលពាក្យ​សម្ងាត់ Windows របស់អ្នក​ដើម្បីអនុញ្ញាត​ការនាំចេញ​នេះ។</translation>
 <translation id="2485422356828889247">លុបការតំឡើង</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">កម្មវិធីបន្ថែមនេះបានប្តូរអ្វីដែលបានបង្ហាញនៅលើទំព័រនៅពេលអ្នកចាប់ផ្តើម Chrome។</translation>
 <translation id="2765403129283291972">Chrome ត្រូវការ​ការអនុញ្ញាត​ដើម្បីចូលប្រើ​មីក្រូហ្វូន​របស់អ្នក​សម្រាប់​ទំព័រនេះ</translation>
 <translation id="2770231113462710648">ប្តូរកម្មវិធីរុករកលំនាំដើមទៅ៖</translation>
+<translation id="2775140325783767197">Chrome មិន​អាចពិនិត្យ​ពាក្យសម្ងាត់របស់អ្នកបានទេ។ សូមសាកល្បងពិនិត្យ​ការតភ្ជាប់អ៊ីនធឺណិត​របស់អ្នក។</translation>
 <translation id="2799223571221894425">បើកដំណើរការឡើងវិញ</translation>
 <translation id="2847461019998147611">បង្ហាញ Google Chrome ជាភាសានេះ</translation>
 <translation id="2857540653560290388">កំពុង​ចាប់ផ្ដើម Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">ទទួលយកជំនួយពី Chrome OS</translation>
 <translation id="3396977131400919238">កំហុសឆ្គងប្រព័ន្ធប្រតិបត្តិការបានកើតឡើងកំឡុងពេលតំឡើង។ សូមទាញយក Google Chrome ម្តងទៀត។</translation>
 <translation id="3398288718845740432">លាក់នៅក្នុងម៉ឺនុយ Chrome</translation>
+<translation id="3434246496373299699">Chrome អាចពិនិត្យពាក្យសម្ងាត់របស់អ្នក នៅពេលអ្នកចូល​ដោយប្រើគណនី Google របស់អ្នក</translation>
 <translation id="3451115285585441894">កំពុងបន្ថែមទៅ Chrome...</translation>
 <translation id="345171907106878721">បន្ថែមខ្លួនអ្នកទៅ Chrome</translation>
 <translation id="34857402635545079">សម្អាតទិន្នន័យពី Chrome (<ph name="URL" />) ផងដែរ</translation>
 <translation id="3503306920980160878">Chrome ត្រូវការ​សិទ្ធិចូលប្រើ​ទីតាំង​របស់អ្នក​ ដើម្បី​ចែករំលែក​ទីតាំង​​របស់អ្នកជាមួយ​ទំព័រនេះ</translation>
+<translation id="3533694711092285624">គ្មានពាក្យសម្ងាត់ដែលបានរក្សាទុកទេ។ Chrome អាចពិនិត្យពាក្យសម្ងាត់របស់អ្នក នៅពេលអ្នករក្សាទុកពាក្យសម្ងាត់ទាំងនោះ។</translation>
 <translation id="3576528680708590453">អ្នក​គ្រប់គ្រង​ប្រព័ន្ធ​របស់អ្នកបាន​កំណត់​រចនាសម្ព័ន្ធ Google Chrome ឱ្យបើក​កម្មវិធីរុករកតាម​អ៊ីនធឺណិត​ផ្សេងសម្រាប់​ចូលប្រើ <ph name="TARGET_URL_HOSTNAME" /> ។</translation>
 <translation id="3582972582564653026">ធ្វើ​សមកាលកម្ម និង​កំណត់ Chrome ​ឱ្យ​ស្រប​នឹង​អ្នកនៅលើ​ឧបករណ៍នានា​</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{អ្នក​គ្រប់គ្រង​របស់អ្នក​តម្រូវឱ្យអ្នក​ចាប់ផ្ដើម Chrome ឡើងវិញ​ ដើម្បីប្រើ​កំណែថ្មី}=1{អ្នក​គ្រប់គ្រង​របស់អ្នក​តម្រូវឱ្យអ្នក​ចាប់ផ្ដើម Chrome ឡើងវិញ​ ដើម្បីប្រើ​កំណែថ្មី។ ផ្ទាំងឯកជនរបស់អ្នក​នឹង​មិនបើកឡើងវិញទេ។}other{អ្នក​គ្រប់គ្រង​របស់អ្នក​តម្រូវឱ្យអ្នក​ចាប់ផ្ដើម Chrome ឡើងវិញ​ ដើម្បីប្រើ​កំណែថ្មី។ ផ្ទាំងឯកជន # របស់អ្នក​នឹងមិន​បើកឡើងវិញទេ។}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">មានកំណែ Google Chrome ថ្មី ហើយវាលឿនជាងពេលណាទាំងអស់។</translation>
 <translation id="8614913330719544658">Google Chrome មិនឆ្លើយតប។ បើកដំណើរការឡើងវិញឥឡូវនេះ?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome នឹង​ចាប់ផ្ដើមឡើងវិញ​ក្នុងរយៈពេល 1 នាទីទៀត}other{Chrome នឹង​ចាប់ផ្ដើមឡើងវិញ​ក្នុងរយៈពេល # នាទីទៀត}}</translation>
+<translation id="8641606876632989680">Chrome នឹង​ជូនដំណឹងទៅអ្នក នៅពេលអ្នកចូល​គណនី​ដោយប្រើពាក្យសម្ងាត់ដែល​រងការលុកលុយ</translation>
 <translation id="8669527147644353129">ជំនួួយការ Google Chrome</translation>
 <translation id="8679801911857917785">វាក៏គ្រប់គ្រងអ្វីដែលត្រូវបានបង្ហាញនៅលើទំព័រដែរ នៅពេលអ្នកចាប់ផ្តើម Chrome។</translation>
 <translation id="870251953148363156">ធ្វើបច្ចុប្បន្នភាព Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kn.xtb b/chrome/app/resources/google_chrome_strings_kn.xtb
index fca1d31..1c03499a 100644
--- a/chrome/app/resources/google_chrome_strings_kn.xtb
+++ b/chrome/app/resources/google_chrome_strings_kn.xtb
@@ -49,6 +49,7 @@
 <translation id="2309047409763057870">ಇದು Google Chrome ನ ದ್ವಿತೀಯ ಸ್ಥಾಪನೆಯಾಗಿದೆ ಮತ್ತು ಅದನ್ನು ನಿಮ್ಮ ಡಿಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಆಗಿ ಮಾಡಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="2341767445688917208">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಸಿಂಕ್ ಮಾಡಲು Chrome OS ಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಈಗಲೇ ಸರಿಪಡಿಸಿ.</translation>
 <translation id="2348335408836342058">ಈ ಸೈಟ್‌ಗಾಗಿ ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್‌ಗೆ ಪ್ರವೇಶಿಸಲು Chrome ಗೆ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation>
+<translation id="234869673307233423">Chrome ಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="2429317896000329049">ನಿಮ್ಮ ಡೊಮೇನ್‌ನಲ್ಲಿ ಸಿಂಕ್‌ ಮಾಡುವ ಸೌಲಭ್ಯವಿಲ್ಲದ ಕಾರಣ Google Chrome ಗೆ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಿಂಕ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.</translation>
 <translation id="2467438592969358367">Google Chrome ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ರಫ್ತು ಮಾಡಲು ಬಯಸುತ್ತದೆ. ಇದನ್ನು ಅನುಮತಿಸಲು ನಿಮ್ಮ Windows ಪಾಸ್‌ವರ್ಡ್‌ ಟೈಪ್ ಮಾಡಿ.</translation>
 <translation id="2485422356828889247">ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್</translation>
@@ -63,6 +64,7 @@
 <translation id="2689103672227170538">ನೀವು Chrome ಪ್ರಾರಂಭಿಸಿದಾಗ ಯಾವ ಪುಟ ತೋರಿಸಬೇಕು ಎಂಬ ಪುಟವನ್ನು ಈ ವಿಸ್ತರಣೆಯು ಬದಲಾಯಿಸಿದೆ.</translation>
 <translation id="2765403129283291972">ಈ ಸೈಟ್‌ಗಾಗಿ ನಿಮ್ಮ ಮೈಕ್ರೊಫೋನ್‌ಗೆ ಪ್ರವೇಶಿಸಲು Chrome ಗೆ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="2770231113462710648">ಡಿಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಅನ್ನು ಇದ್ಕಕೆ ಬದಲಿಸಿ:</translation>
+<translation id="2775140325783767197">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು Chrome ಗೆ ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ನೋಡಿ.</translation>
 <translation id="2799223571221894425">ಮರುಪ್ರಾರಂಭಿಸು</translation>
 <translation id="2847461019998147611">ಈ ಭಾಷೆಯಲ್ಲಿ Google Chrome ಪ್ರದರ್ಶಿಸು</translation>
 <translation id="2857540653560290388">Chrome ಅನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ...</translation>
@@ -81,10 +83,12 @@
 <translation id="3395323229510056640">Chrome OS ನಿಂದ ಸಹಾಯ ಪಡೆಯಿರಿ</translation>
 <translation id="3396977131400919238">ಸ್ಥಾಪನೆ ವೇಳೆ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಂ ದೋಷವು ಸಂಭವಿಸಿದೆ. ದಯವಿಟ್ಟು Google Chrome ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಡೌನ್ಲೋಡ್ ಮಾಡಿ.</translation>
 <translation id="3398288718845740432">Chrome ಮೆನುವಿನಲ್ಲಿ ಮರೆಮಾಡು</translation>
+<translation id="3434246496373299699">ನೀವು Google ಖಾತೆಯ ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, Chrome ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಬಲ್ಲದು</translation>
 <translation id="3451115285585441894">Chrome ಗೆ ಸೇರಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="345171907106878721">ನಿಮ್ಮನ್ನು Chrome ಗೆ ಸೇರಿಸಿಕೊಳ್ಳಿ</translation>
 <translation id="34857402635545079">Chrome ನಿಂದಲೂ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಿ (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">ಈ ಸೈಟ್‌ ಜೊತೆ ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು Chrome ಗೆ ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸುವ ಅಗತ್ಯವಿದೆ</translation>
+<translation id="3533694711092285624">ಉಳಿಸಿರುವ ಯಾವುದೇ ಪಾಸ್‍‍ವರ್ಡ್‍ಗಳಿಲ್ಲ. ನೀವು ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಉಳಿಸಿದಾಗ, Chrome ಅವುಗಳನ್ನು ಪರಿಶೀಲಿಸಬಹುದು.</translation>
 <translation id="3576528680708590453"><ph name="TARGET_URL_HOSTNAME" /> ಗೆ ಪ್ರವೇಶಿಸಲು ಒಂದು ಪರ್ಯಾಯ ಬ್ರೌಸರ್ ತೆರೆಯುವಂತೆ ನಿಮ್ಮ ಸಿಸ್ಟಂ ನಿರ್ವಾಹಕರು Google Chrome ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿದ್ದಾರೆ.</translation>
 <translation id="3582972582564653026">ನಿಮ್ಮ ಎಲ್ಲಾ ಸಾಧನಗಳಲ್ಲಿ Chrome ಅನ್ನು ಸಿಂಕ್ ಮಾಡಿ ಮತ್ತು ವೈಯಕ್ತೀಕರಿಸಿ</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{ಅಪ್‌ಡೇಟ್‌ ಅನ್ವಯಿಸಲು ನೀವು Chrome ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕೆಂದು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಬಯಸುತ್ತಾರೆ}=1{ಅಪ್‌ಡೇಟ್‌ ಅನ್ವಯಿಸಲು ನೀವು Chrome ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕೆಂದು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಬಯಸುತ್ತಾರೆ. ನಿಮ್ಮ ಅಜ್ಞಾತ ವಿಂಡೋವನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}one{ಅಪ್‌ಡೇಟ್‌ ಅನ್ವಯಿಸಲು ನೀವು Chrome ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕೆಂದು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಬಯಸುತ್ತಾರೆ. ನಿಮ್ಮ # ಅಜ್ಞಾತ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}other{ಅಪ್‌ಡೇಟ್‌ ಅನ್ವಯಿಸಲು ನೀವು Chrome ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕೆಂದು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಬಯಸುತ್ತಾರೆ. ನಿಮ್ಮ # ಅಜ್ಞಾತ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}}</translation>
@@ -231,6 +235,7 @@
 <translation id="8614913330719544658">Google Chrome ಸ್ಪಂದಿಸುತ್ತಿಲ್ಲ. ಇದೀಗ ಮರುಪ್ರಾರಂಭಿಸುವುದೆ?
 </translation>
 <translation id="8625237574518804553">{0,plural, =1{1 ನಿಮಿಷದಲ್ಲಿ Chrome ಮರುಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತದೆ}one{# ನಿಮಿಷಗಳಲ್ಲಿ Chrome ಮರುಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತದೆ}other{# ನಿಮಿಷಗಳಲ್ಲಿ Chrome ಮರುಪ್ರಾರಂಭಗೊಳ್ಳುತ್ತದೆ}}</translation>
+<translation id="8641606876632989680">ಅಪಾಯಕ್ಕೀಡಾದ ಪಾಸ್‌ವರ್ಡ್ ಮೂಲಕ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, Chrome ನಿಮಗೆ ಸೂಚನೆ ನೀಡುತ್ತದೆ</translation>
 <translation id="8669527147644353129">Google Chrome ಸಹಾಯಕ</translation>
 <translation id="8679801911857917785">ನೀವು Chrome ಪ್ರಾರಂಭಿಸಿದಾಗ ಕಾಣಿಸಿಕೊಳ್ಳುವ ಪುಟವನ್ನು ಕೂಡಾ ಇದು ನಿಯಂತ್ರಿಸುತ್ತದೆ.</translation>
 <translation id="870251953148363156">&amp;Google Chrome ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ko.xtb b/chrome/app/resources/google_chrome_strings_ko.xtb
index 8c175491..5c08e632 100644
--- a/chrome/app/resources/google_chrome_strings_ko.xtb
+++ b/chrome/app/resources/google_chrome_strings_ko.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Chrome의 보조 설치이며 기본 브라우저로 설정할 수 없습니다.</translation>
 <translation id="2341767445688917208">Chrome OS에서 비밀번호를 동기화할 수 없습니다. 지금 문제를 해결해 주세요.</translation>
 <translation id="2348335408836342058">이 사이트에서 카메라와 마이크에 액세스하려면 Chrome에 권한이 필요합니다</translation>
+<translation id="234869673307233423">Chrome에서 비밀번호를 확인할 수 없습니다. 나중에 다시 시도하세요.</translation>
 <translation id="2429317896000329049">도메인에서 동기화를 사용할 수 없어 Chrome에서 데이터를 동기화하지 못했습니다.</translation>
 <translation id="2467438592969358367">Chrome에서 비밀번호를 내보내려고 합니다. 허용하려면 Windows 비밀번호를 입력하세요.</translation>
 <translation id="2485422356828889247">제거</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Chrome을 시작하면 표시되는 페이지가 이 확장 프로그램으로 인해 변경되었습니다.</translation>
 <translation id="2765403129283291972">이 사이트에서 마이크에 액세스하려면 Chrome에 권한이 필요합니다</translation>
 <translation id="2770231113462710648">다음으로 기본 브라우저 변경:</translation>
+<translation id="2775140325783767197">Chrome에서 비밀번호를 확인할 수 없습니다. 인터넷 연결 상태를 확인하세요.</translation>
 <translation id="2799223571221894425">다시 시작</translation>
 <translation id="2847461019998147611">이 언어로 Chrome 표시</translation>
 <translation id="2857540653560290388">Chrome 실행 중...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome OS 도움말 보기</translation>
 <translation id="3396977131400919238">설치 중 운영체제 오류가 발생했습니다. Chrome을 다시 다운로드하세요.</translation>
 <translation id="3398288718845740432">Chrome 메뉴에서 숨기기</translation>
+<translation id="3434246496373299699">Google 계정으로 로그인하면 Chrome에서 비밀번호를 확인할 수 있습니다.</translation>
 <translation id="3451115285585441894">Chrome에 추가하는 중...</translation>
 <translation id="345171907106878721">Chrome에 본인 추가</translation>
 <translation id="34857402635545079">Chrome(<ph name="URL" />)에서도 데이터 삭제</translation>
 <translation id="3503306920980160878">이 사이트와 위치를 공유하려면 Chrome에 내 위치 액세스 권한이 있어야 합니다</translation>
+<translation id="3533694711092285624">저장된 비밀번호가 없습니다. 비밀번호를 저장하면 Chrome에서 확인할 수 있습니다.</translation>
 <translation id="3576528680708590453">시스템 관리자가 <ph name="TARGET_URL_HOSTNAME" /> 액세스를 위해 다른 브라우저를 실행하도록 Chrome을 구성했습니다.</translation>
 <translation id="3582972582564653026">모든 기기에서 Chrome을 동기화하고 맞춤설정하세요.</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{관리자의 요구에 따라 업데이트를 적용하려면 Chrome을 다시 실행해야 합니다.}=1{관리자의 요구에 따라 업데이트를 적용하려면 Chrome을 다시 실행해야 합니다. 시크릿 창이 다시 열리지 않습니다.}other{관리자의 요구에 따라 업데이트를 적용하려면 Chrome을 다시 실행해야 합니다. 시크릿 창 #개가 다시 열리지 않습니다.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">이전보다 더 빨라진 Chrome 새 버전을 사용할 수 있습니다.</translation>
 <translation id="8614913330719544658">Chrome이 응답하지 않습니다. 다시 시작하시겠습니까?</translation>
 <translation id="8625237574518804553">{0,plural, =1{1분 후 Chrome이 다시 시작됩니다}other{#분 후 Chrome이 다시 시작됩니다}}</translation>
+<translation id="8641606876632989680">유출된 비밀번호로 로그인하면 Chrome에서 알림을 표시함</translation>
 <translation id="8669527147644353129">Chrome 도우미</translation>
 <translation id="8679801911857917785">또한 Chrome을 시작할 때 표시되는 페이지를 설정합니다.</translation>
 <translation id="870251953148363156">Chrome 업데이트(&amp;G)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ky.xtb b/chrome/app/resources/google_chrome_strings_ky.xtb
index afd4174..ffede4a08 100644
--- a/chrome/app/resources/google_chrome_strings_ky.xtb
+++ b/chrome/app/resources/google_chrome_strings_ky.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Бул Chromium'дун кошумча орнотулушу болгондуктан, аны демейки серепчиңиз катары тандай албайсыз.</translation>
 <translation id="2341767445688917208">Chrome OS сырсөздөрүңүздү шайкештештире албай койду. Азыр оңдоо.</translation>
 <translation id="2348335408836342058">Бул сайтта иштөө үчүн Chrome камераңызды жана микрофонуңузду колдонушу керек</translation>
+<translation id="234869673307233423">Chrome сырсөздөрүңүздү текшере албай жатат. Кийинчерээк кайталаңыз.</translation>
 <translation id="2429317896000329049">Домениңизде шайкештештирүү аракети жок болгондуктан, Google Chrome дайын-даректериңизди шайкештештире алган жок.</translation>
 <translation id="2467438592969358367">Google Chrome сырсөздөрүңүздү экспорттогону жатат. Ага уруксат берүү үчүн Windows аккаунтуңуздун сырсөзүн териңиз.</translation>
 <translation id="2485422356828889247">Орнотуудан чыгаруу</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Бул кеңейтүү Chrome иштеп баштаганда көрсөтүлө турган бетти өзгөрттү.</translation>
 <translation id="2765403129283291972">Бул сайтта иштөө үчүн Chrome микрофонуңузду колдонушу керек</translation>
 <translation id="2770231113462710648">Демейки серепчини төмөнкүгө өзгөртүү:</translation>
+<translation id="2775140325783767197">Chrome сырсөздөрүңүздү текшере албай жатат. Интернет байланышын текшерип көрүңүз.</translation>
 <translation id="2799223571221894425">Кайра ишке киргизүү</translation>
 <translation id="2847461019998147611">Google Chrome ушул тилде көрсөтүлсүн</translation>
 <translation id="2857540653560290388">Chrome иштетилүүдө…</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome OS'тон жардам алыңыз</translation>
 <translation id="3396977131400919238">Орнотулуп жатканда иш тутумунда ката кетти. Google Chrome'ду кайра жүктөп алыңыз.</translation>
 <translation id="3398288718845740432">Chrome менюсунда жашыруу</translation>
+<translation id="3434246496373299699">Google аккаунтуңуз менен киргенде Chrome сырсөздөрүңүздү текшерет</translation>
 <translation id="3451115285585441894">Chrome'го кошулууда…</translation>
 <translation id="345171907106878721">Өзүңүздү Chrome'го кошуңуз</translation>
 <translation id="34857402635545079">Chrome'догу дайындар да тазалансын (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Бул сайт менен бөлүшүү үчүн Chrome жайгашкан жериңиз тууралуу маалыматты алышы керек</translation>
+<translation id="3533694711092285624">Сакталган сырсөздөр жок. Сырсөздөрүңүздү сактаганда Chrome аларды текшере алат.</translation>
 <translation id="3576528680708590453">Тутумуңуздун администратору Google Chrome'ду <ph name="TARGET_URL_HOSTNAME" /> шилтемесин кошумча серепчиде ачылгыдай кылып конфигурациялады.</translation>
 <translation id="3582972582564653026">Chrome'ду бардык түзмөктөрүңүздө шайкештирип, жекелештиресиз</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Администраторуңуз жаңыртууну колдонуу үчүн Chrome'ду кайра иштетүүнү талап кылууда}=1{Администраторуңуз жаңыртууну колдонуу үчүн Chrome'ду кайра иштетүүнү талап кылууда. Жашыруун терезеңиз кайра ачылбайт.}other{Администраторуңуз жаңыртууну колдонуу үчүн Chrome'ду кайра иштетүүнү талап кылууда. # жашыруун терезеңиз кайра ачылбайт.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Google Chrome'дун чагылгандай тездик менен иштеген жаңы версиясы бар.</translation>
 <translation id="8614913330719544658">Google Chrome жооп бербей жатат. Азыр өчүрүп кайра ишке киргизесизби?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 1 мүнөттөн кийин кайра иштетилет}other{Chrome # мүнөттөн кийин кайра иштетилет}}</translation>
+<translation id="8641606876632989680">Chrome уурдалган сырсөз менен киргениңизде эскертет</translation>
 <translation id="8669527147644353129">Google Chrome Жардамчы</translation>
 <translation id="8679801911857917785">Ал ошондой эле Chrome иштеп баштаганда көрүнө турган бетти көзөмөлдөйт.</translation>
 <translation id="870251953148363156">&amp;Google Chrome'ду жаңыртуу</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lo.xtb b/chrome/app/resources/google_chrome_strings_lo.xtb
index 1e559f6c..4decc47 100644
--- a/chrome/app/resources/google_chrome_strings_lo.xtb
+++ b/chrome/app/resources/google_chrome_strings_lo.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">ນີ້ແມ່ນການຕິດຕັ້ງສຳຮອງຂອງ Google Chrome ແລະ ບໍ່ສາມາດຕັ້ງໃຫ້ເປັນໂປຣແກຣມທ່ອງເວັບເລີ່ມຕົ້ນຂອງທ່ານໄດ້.</translation>
 <translation id="2341767445688917208">Chrome OS ບໍ່ສາມາດຊິ້ງຂໍ້ມູນລະຫັດຜ່ານຂອງທ່ານໄດ້. ແກ້ໄຂຕອນນີ້ເລີຍ.</translation>
 <translation id="2348335408836342058">Chrome ຕ້ອງການການອະນຸຍາດເພື່ອເຂົ້າເຖິງກ້ອງຖ່າຍຮູບ ແລະ ໄມໂຄຣໂຟນຂອງທ່ານສຳລັບເວັບໄຊນີ້</translation>
+<translation id="234869673307233423">Chrome ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ກະລຸນາລອງໃໝ່ໃນພາຍຫລັງ.</translation>
 <translation id="2429317896000329049">Google Chrome ບໍ່​ສາ​ມາດຊິງຄ໌ຂໍ້​ມູນ​ຂອງ​ທ່ານໄດ້ ເພາະວ່າບໍ່ມີການຊິງຄ໌ຢູ່ໃນໂດເມນຂອງທ່ານ.</translation>
 <translation id="2467438592969358367">Google Chrome ຕ້ອງການສົ່ງອອກລະຫັດຜ່ານຂອງທ່ານ. ກະລຸນາພິມລະຫັດຜ່ານ Windows ຂອງທ່ານ ເພື່ອອະນຸຍາດສິ່ງນີ້.</translation>
 <translation id="2485422356828889247">ຖອນ​ຕິດ​ຕັ້ງ</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">ສ່ວນຂະຫຍາຍ​ນີ້​ໄດ້ປ່ຽນສິ່ງທີ່ໜ້າສະແດງຂຶ້ນ ເມື່ອທ່ານເລີ່ມຕົ້ນ Chrome.</translation>
 <translation id="2765403129283291972">Chrome ຕ້ອງການການອະນຸຍາດເພື່ອເຂົ້າເຖິງໄມໂຄຣໂຟນຂອງທ່ານສຳລັບເວັບໄຊນີ້</translation>
 <translation id="2770231113462710648">ປ່ຽນບຣາວ​ເຊີມາດຕະຖານເປັນ:</translation>
+<translation id="2775140325783767197">Chrome ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້. ລອງກວດເບິ່ງການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານ.</translation>
 <translation id="2799223571221894425">ເລີ່ມເປີດໃຊ້ໃໝ່</translation>
 <translation id="2847461019998147611">ສະ​ແດງ Google Chrome ເປັນພາສານີ້</translation>
 <translation id="2857540653560290388">ກຳລັງເປີດໃຊ້ Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">ຂໍຄວາມຊ່ວຍເຫຼືອເລື່ອງ Chrome OS</translation>
 <translation id="3396977131400919238">ເກີດຄວາມຜິດພາດກັບລະບົບປະຕິບັດ​ການ​ໃນລະຫວ່າງການຕິດຕັ້ງ. ກະລຸນາດາວໂຫຼດ Google Chrome ອີກ.</translation>
 <translation id="3398288718845740432">ເຊື່ອງ​ຢູ່​ໃນ​ເມ​ນູ Chrome</translation>
+<translation id="3434246496373299699">Chrome ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານ ເມື່ອທ່ານເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ Google ຂອງທ່ານໄດ້</translation>
 <translation id="3451115285585441894">ກໍາລັງເພີ່ມໃສ່ Chrome...</translation>
 <translation id="345171907106878721">ເພີ່ມທ່ານເອງໃສ່ Chrome</translation>
 <translation id="34857402635545079">ລຶບລ້າງຂໍ້ມູນຈາກ Chrome (<ph name="URL" />) ນຳອີກ</translation>
 <translation id="3503306920980160878">Chrome ຕ້ອງການເຂົ້າເຖິງສະຖານທີ່ຂອງທ່ານເພື່ອແບ່ງປັນສະຖານທີ່ຂອງທ່ານກັບເວັບໄຊນີ້</translation>
+<translation id="3533694711092285624">ບໍ່ມີລະຫັດຜ່ານທີ່ບັນທຶກໄວ້. Chrome ສາມາດກວດເບິ່ງລະຫັດຜ່ານຂອງທ່ານເມື່ອທ່ານບັນທຶກພວກມັນໄວ້.</translation>
 <translation id="3576528680708590453">ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານໄດ້ກຳນົດຄ່າໃຫ້ Google Chrome ເປີດໂປຣແກຣມທ່ອງເວັບສຳຮອງເພື່ອເຂົ້າເຖິງ <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">ຊິ້ງຂໍ້ມູນ ແລະ ປັບແຕ່ງ Chrome ໃຫ້ເປັນແບບສ່ວນຕົວໃນທົ່ວອຸປະກອນຂອງທ່ານ</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານກຳນົດໃຫ້ທ່ານເປີດ Chrome ຄືນໃໝ່ເພື່ອນຳໃຊ້ການອັບເດດ}=1{ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານກຳນົດໃຫ້ທ່ານເປີດ Chrome ຄືນໃໝ່ເພື່ອນຳໃຊ້ການອັບເດດ. ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນຂອງທ່ານຈະບໍ່ເປີດຄືນໃໝ່.}other{ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານກຳນົດໃຫ້ທ່ານເປີດ Chrome ຄືນໃໝ່ເພື່ອນຳໃຊ້ການອັບເດດ. ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນຂອງທ່ານ # ລາຍການຈະບໍ່ເປີດຄືນໃໝ່.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">ມີ Google Chrome ລຸ້ນໃໝ່ຢູ່, ແລະມັນໄວກ່ວາຜ່ານມາ.</translation>
 <translation id="8614913330719544658">Google Chrome ບໍ່ຕອບຮັບ. ເລີ່ມເປີດໃຊ້ໃໝ່ດຽວນີ້ບໍ?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome ຈະເປີດຄືນໃໝ່ໃນ 1 ນາທີ}other{Chrome ຈະເປີດຄືນໃໝ່ໃນ # ນາທີ}}</translation>
+<translation id="8641606876632989680">Chrome ຈະແຈ້ງບອກທ່ານເມື່ອທ່ານເຂົ້າສູ່ລະບົບດ້ວຍລະຫັດຜ່ານທີ່ຖືກລະເມີດ</translation>
 <translation id="8669527147644353129">ຕົວຊ່ວຍ Google Chrome</translation>
 <translation id="8679801911857917785">ມັນຍັງຄວບຄຸມວ່າຈະໃຫ້ສະແດງໜ້າໃດຂຶ້ນ ເມື່ອທ່ານເລີ່ມຕົ້ນເປີດ Chrome.</translation>
 <translation id="870251953148363156">ອັບເດດ Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lt.xtb b/chrome/app/resources/google_chrome_strings_lt.xtb
index 851e85fc..53b8b98 100644
--- a/chrome/app/resources/google_chrome_strings_lt.xtb
+++ b/chrome/app/resources/google_chrome_strings_lt.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Tai yra antrinis „Google Chrome“ diegimas, todėl ji negali būti nustatyta kaip numatytoji naršyklė.</translation>
 <translation id="2341767445688917208">„Chrome“ OS nepavyko sinchronizuoti jūsų slaptažodžių. Ištaisykite dabar.</translation>
 <translation id="2348335408836342058">„Chrome“ reikia leidimo, kad galėtų naudoti fotoaparatą ir mikrofoną šioje svetainėje</translation>
+<translation id="234869673307233423">„Chrome“ negali patikrinti jūsų slaptažodžių. Vėliau bandykite dar kartą.</translation>
 <translation id="2429317896000329049">„Google Chrome“ negali sinchronizuoti duomenų, nes jūsų domene sinchronizavimas nepasiekiamas.</translation>
 <translation id="2467438592969358367">„Google Chrome“ nori eksportuoti jūsų slaptažodžius. Įveskite „Windows“ slaptažodį, kad tai leistumėte.</translation>
 <translation id="2485422356828889247">Pašalinti</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Šis plėtinys pakeitė, kuris puslapis rodomas paleidus „Chrome“.</translation>
 <translation id="2765403129283291972">„Chrome“ reikia leidimo, kad galėtų naudoti mikrofoną šioje svetainėje</translation>
 <translation id="2770231113462710648">Pakeisti numatytąją naršyklę į:</translation>
+<translation id="2775140325783767197">„Chrome“ negali patikrinti jūsų slaptažodžių. Pabandykite patikrinti interneto ryšį.</translation>
 <translation id="2799223571221894425">Paleisti iš naujo</translation>
 <translation id="2847461019998147611">Pateikti „Google Chrome“ šia kalba</translation>
 <translation id="2857540653560290388">Pristatoma „Chrome“...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Gaukite pagalbos dėl „Chrome“ OS</translation>
 <translation id="3396977131400919238">Diegimo metu įvyko operacinės sistemos klaida. Atsisiųskite „Google Chrome“ dar kartą.</translation>
 <translation id="3398288718845740432">Paslėpti „Chrome“ meniu elementą</translation>
+<translation id="3434246496373299699">„Chrome“ gali tikrinti jūsų slaptažodžius, kai prisijungiate naudodami „Google“ paskyrą</translation>
 <translation id="3451115285585441894">Pridedama prie „Chrome“...</translation>
 <translation id="345171907106878721">Pridėkite save prie „Chrome“</translation>
 <translation id="34857402635545079">Taip pat išvalyti duomenis iš „Chrome“ (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">„Chrome“ reikia leidimo, kad galėtų naudoti vietovės informaciją ir bendrinti ją su šia svetaine</translation>
+<translation id="3533694711092285624">Nėra išsaugotų slaptažodžių. „Chrome“ gali tikrinti jūsų slaptažodžius, kai juos išsaugote.</translation>
 <translation id="3576528680708590453">Sistemos administratorius sukonfigūravo „Google Chrome“ atidaryti alternatyvią naršyklę, norint pasiekti <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sinchronizuokite ir suasmeninkite „Chrome“ skirtinguose įrenginiuose</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administratorius reikalauja paleisti „Chrome“ iš naujo, kad būtų galima pritaikyti naujinį}=1{Administratorius reikalauja paleisti „Chrome“ iš naujo, kad būtų galima pritaikyti naujinį. Inkognito langas nebus atidarytas iš naujo.}one{Administratorius reikalauja paleisti „Chrome“ iš naujo, kad būtų galima pritaikyti naujinį. # inkognito langas nebus atidarytas iš naujo.}few{Administratorius reikalauja paleisti „Chrome“ iš naujo, kad būtų galima pritaikyti naujinį. # inkognito langai nebus atidaryti iš naujo.}many{Administratorius reikalauja paleisti „Chrome“ iš naujo, kad būtų galima pritaikyti naujinį. # inkognito lango nebus atidaryta iš naujo.}other{Administratorius reikalauja paleisti „Chrome“ iš naujo, kad būtų galima pritaikyti naujinį. # inkognito langų nebus atidaryta iš naujo.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Galima nauja „Google Chrome“ versija, kuri greitesnė nei bet kada.</translation>
 <translation id="8614913330719544658">„Google Chrome“ neatsako. Paleisti iš naujo dabar?</translation>
 <translation id="8625237574518804553">{0,plural, =1{„Chrome“ bus paleista iš naujo po 1 minutės}one{„Chrome“ bus paleista iš naujo po # minutės}few{„Chrome“ bus paleista iš naujo po # minučių}many{„Chrome“ bus paleista iš naujo po # minutės}other{„Chrome“ bus paleista iš naujo po # minučių}}</translation>
+<translation id="8641606876632989680">„Chrome“ praneš jums, kai prisijungsite naudodami pažeistą slaptažodį</translation>
 <translation id="8669527147644353129">„Google Chrome“ pagalbos priemonė</translation>
 <translation id="8679801911857917785">Ji taip pat kontroliuoja, koks puslapis rodomas, kai paleidžiate „Chrome“.</translation>
 <translation id="870251953148363156">Atnaujinti „&amp;Google Chrome“</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lv.xtb b/chrome/app/resources/google_chrome_strings_lv.xtb
index 62c7e74..8a54a15 100644
--- a/chrome/app/resources/google_chrome_strings_lv.xtb
+++ b/chrome/app/resources/google_chrome_strings_lv.xtb
@@ -50,6 +50,7 @@
 <translation id="2309047409763057870">Šī ir Google Chrome papildu instalācija, un to nevar izmantot kā noklusējuma pārlūku.</translation>
 <translation id="2341767445688917208">Chrome OS nevarēja sinhronizēt jūsu paroles. Novērsiet problēmu jau tūlīt.</translation>
 <translation id="2348335408836342058">Pārlūkam Chrome ir nepieciešama atļauja piekļūt jūsu kamerai un mikrofonam šajā vietnē.</translation>
+<translation id="234869673307233423">Pārlūkprogrammā Chrome nevar pārbaudīt jūsu paroles. Vēlāk mēģiniet vēlreiz.</translation>
 <translation id="2429317896000329049">Google Chrome nevarēja sinhronizēt jūsu datus, jo jūsu domēnam nav pieejama sinhronizācija.</translation>
 <translation id="2467438592969358367">Pārlūkā Google Chrome tiek mēģināts eksportēt jūsu paroles. Lai to atļautu, ierakstiet savu Windows paroli.</translation>
 <translation id="2485422356828889247">Atinstalēt</translation>
@@ -64,6 +65,7 @@
 <translation id="2689103672227170538">Šis paplašinājums mainīja iestatījumu, kura lapa tiek parādīta, palaižot pārlūku Chrome.</translation>
 <translation id="2765403129283291972">Pārlūkam Chrome ir nepieciešama atļauja piekļūt jūsu mikrofonam šajā vietnē.</translation>
 <translation id="2770231113462710648">Mainīt noklusējuma pārlūkprogrammu uz:</translation>
+<translation id="2775140325783767197">Pārlūkprogrammā Chrome nevar pārbaudīt jūsu paroles. Pārbaudiet interneta savienojumu.</translation>
 <translation id="2799223571221894425">Restartēt</translation>
 <translation id="2847461019998147611">Rādīt Google Chrome šajā valodā</translation>
 <translation id="2857540653560290388">Notiek Chrome palaišana...</translation>
@@ -82,10 +84,12 @@
 <translation id="3395323229510056640">Saņemt palīdzību par Chrome OS</translation>
 <translation id="3396977131400919238">Instalācijas laikā radās operētājsistēmas kļūda. Lūdzu, vēlreiz lejupielādējiet Google Chrome.</translation>
 <translation id="3398288718845740432">Paslēpšana Chrome izvēlnē</translation>
+<translation id="3434246496373299699">Pārlūkprogrammā Chrome var pārbaudīt jūsu paroles, ja esat pierakstījies savā Google kontā.</translation>
 <translation id="3451115285585441894">Notiek pievienošana pārlūkam Chrome...</translation>
 <translation id="345171907106878721">Pievienot savu kontu pārlūkā Chrome</translation>
 <translation id="34857402635545079">Notīrīt arī datus no Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Pārlūkam Chrome ir nepieciešama piekļuve jūsu atrašanās vietas datiem, lai varētu tos kopīgot ar šo vietni.</translation>
+<translation id="3533694711092285624">Nav saglabātu paroļu. Pārlūkprogrammā Chrome var pārbaudīt jūsu paroles, ja jūs tās saglabājat.</translation>
 <translation id="3576528680708590453">Sistēmas administrators ir konfigurējis pārlūku Google Chrome, lai vietne <ph name="TARGET_URL_HOSTNAME" /> tiktu atvērta papildu pārlūkā.</translation>
 <translation id="3582972582564653026">Chrome sinhronizēšana un personalizēšana visās jūsu ierīcēs</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Lai lietotu atjauninājumu, administrators pieprasa restartēt pārlūku Chrome.}=1{Lai lietotu atjauninājumu, administrators pieprasa restartēt pārlūku Chrome. Jūsu inkognito režīma logs netiks atkārtoti atvērts.}zero{Lai lietotu atjauninājumu, administrators pieprasa restartēt pārlūku Chrome. # jūsu inkognito režīma logi netiks atkārtoti atvērti.}one{Lai lietotu atjauninājumu, administrators pieprasa restartēt pārlūku Chrome. # jūsu inkognito režīma logs netiks atkārtoti atvērts.}other{Lai lietotu atjauninājumu, administrators pieprasa restartēt pārlūku Chrome. # jūsu inkognito režīma logi netiks atkārtoti atvērti.}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">Ir pieejama jauna Google Chrome versija, un tā ir ātrāka nekā jebkad agrāk.</translation>
 <translation id="8614913330719544658">Google Chrome nereaģē. Vai restartēt to tūlīt?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Pārlūks Chrome pēc 1 minūtes tiks restartēts}zero{Pārlūks Chrome pēc # minūtēm tiks restartēts}one{Pārlūks Chrome pēc # minūtes tiks restartēts}other{Pārlūks Chrome pēc # minūtēm tiks restartēts}}</translation>
+<translation id="8641606876632989680">Ja pierakstīsieties ar uzlauztu paroli, pārlūkā Chrome tiks parādīts paziņojums.</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Tas nosaka arī to, kāda lapa tiks rādīta, kad atvērsiet pārlūku Chrome.</translation>
 <translation id="870251953148363156">Atjaunināt &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mk.xtb b/chrome/app/resources/google_chrome_strings_mk.xtb
index b47a1ae..c0e80ed 100644
--- a/chrome/app/resources/google_chrome_strings_mk.xtb
+++ b/chrome/app/resources/google_chrome_strings_mk.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Ова е второстепена инсталација на Google Chrome и затоа не може да биде стандарден прелистувач.</translation>
 <translation id="2341767445688917208">Chrome OS не можеше да ги синхронизира вашите лозинки. Поправете сега.</translation>
 <translation id="2348335408836342058">На Chrome му треба дозвола за да пристапи до камерата и микрофонот за сајтов</translation>
+<translation id="234869673307233423">Chrome не може да ги провери вашите лозинки. Обидете се пак подоцна.</translation>
 <translation id="2429317896000329049">Google Chrome не може да ги синхронизира вашите податоци затоа што Sync не е достапен за вашиот домен.</translation>
 <translation id="2467438592969358367">Google Chrome сака да ги извезе вашите лозинки. Внесете ја лозинката за Windows за да го дозволите ова.</translation>
 <translation id="2485422356828889247">Деинсталирај</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Екстензијата ја смени страницата што се прикажува кога го стартувате Chrome.</translation>
 <translation id="2765403129283291972">На Chrome му треба дозвола за да пристапи до микрофонот за сајтов</translation>
 <translation id="2770231113462710648">Променете го стандардниот прелистувач во:</translation>
+<translation id="2775140325783767197">Chrome не може да ги провери вашите лозинки. Проверете ја интернет-врската.</translation>
 <translation id="2799223571221894425">Рестартирај</translation>
 <translation id="2847461019998147611">Прикажи го Google Chrome на овој јазик</translation>
 <translation id="2857540653560290388">Се стартува Chrome…</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Добијте помош за Chrome OS</translation>
 <translation id="3396977131400919238">Се појави грешка во оперативниот систем додека се инсталираше. Преземете го Google Chrome повторно.</translation>
 <translation id="3398288718845740432">Сокриј во мени на Chrome</translation>
+<translation id="3434246496373299699">Chrome може да ги проверува вашите лозинки кога ќе се најавите со вашата сметка на Google</translation>
 <translation id="3451115285585441894">Се додава на Chrome...</translation>
 <translation id="345171907106878721">Додај се себеси на Chrome</translation>
 <translation id="34857402635545079">Избриши ги и податоците од Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">На Chrome му треба пристап до вашата локација за да ја сподели со сајтов</translation>
+<translation id="3533694711092285624">Нема зачувани лозинки. Chrome може да ги проверува вашите лозинки кога ги зачувувате.</translation>
 <translation id="3576528680708590453">Администраторот на системот го конфигурирал Google Chrome да отвора друг прелистувач за пристап до <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Синхронизирајте го и персонализирајте го Chrome на сите ваши уреди</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Администраторот бара да го рестартирате Chrome за да се примени ажурирање}=1{Администраторот бара да го рестартирате Chrome за да се примени ажурирање. Прозорецот „Инкогнито“ нема да се отвори повторно.}one{Администраторот бара да го рестартирате Chrome за да се примени ажурирање. # прозорец „Инкогнито“ нема да се отвори повторно.}other{Администраторот бара да го рестартирате Chrome за да се примени ажурирање. # прозорци „Инкогнито“ нема да се отворат повторно.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Достапна е нова верзија на Google Chrome и побрза е од кога било.</translation>
 <translation id="8614913330719544658">Google Chrome не реагира. Да се рестартира сега?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome ќе се рестартира по 1 минута}one{Chrome ќе се рестартира по # минута}other{Chrome ќе се рестартира по # минути}}</translation>
+<translation id="8641606876632989680">Chrome ќе ве извести кога ќе се најавите со компромитирана лозинка</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Контролира и која страница се прикажува кога ќе стартувате Chrome.</translation>
 <translation id="870251953148363156">&amp;Google Chrome се ажурира</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ml.xtb b/chrome/app/resources/google_chrome_strings_ml.xtb
index 65d87236..228fd7a9 100644
--- a/chrome/app/resources/google_chrome_strings_ml.xtb
+++ b/chrome/app/resources/google_chrome_strings_ml.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">ഇത് Google Chrome-ന്റെ ദ്വിതീയ ഇൻസ്‌റ്റലേഷനായതിനാൽ, നിങ്ങളുടെ ഡിഫോൾട്ട് ബ്രൗസറാക്കാൻ കഴിയില്ല.</translation>
 <translation id="2341767445688917208">Chrome OS-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ സമന്വയിപ്പിക്കാനായില്ല. ഇപ്പോൾ പരിഹരിക്കുക.</translation>
 <translation id="2348335408836342058">ഈ സൈറ്റിനായി, Chrome-ന് നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ആക്‌സസ് ചെയ്യാനുള്ള അനുമതി ആവശ്യമാണ്</translation>
+<translation id="234869673307233423">Chrome-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവുന്നില്ല. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="2429317896000329049">നിങ്ങളുടെ ഡൊമെയ്‌‌നിനായി സമന്വയം ലഭ്യമല്ലാത്തതിനാൽ Google Chrome-ന് നിങ്ങളുടെ ഡാറ്റ സമന്വയിപ്പിക്കാനായില്ല.</translation>
 <translation id="2467438592969358367">നിങ്ങളുടെ പാസ്‌വേഡുകൾ എക്‌സ്‌പോർട്ട് ചെയ്യാൻ Google Chrome ആഗ്രഹിക്കുന്നു. ഇത് അനുവദിക്കാൻ നിങ്ങളുടെ Windows പാസ്‌വേഡ് നൽകുക.</translation>
 <translation id="2485422356828889247">അണ്‍‌ഇന്‍‌സ്റ്റാള്‍‌ ചെയ്യുക</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">നിങ്ങൾ Chrome ആരംഭിക്കുമ്പോൾ ദൃശ്യമാകുന്ന പേജിനെ ഈ വിപുലീകരണം മാറ്റി.</translation>
 <translation id="2765403129283291972">ഈ സൈറ്റിനായി, Chrome-ന് നിങ്ങളുടെ മൈക്രോഫോൺ ആക്‌സസ് ചെയ്യാനുള്ള അനുമതി ആവശ്യമാണ്</translation>
 <translation id="2770231113462710648">ഡിഫോൾട്ട് ബ്രൗസര്‍‌ ഇനിപ്പറയുന്നതിലേക്ക് മാറ്റുക:</translation>
+<translation id="2775140325783767197">Chrome-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവില്ല. നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക.</translation>
 <translation id="2799223571221894425">വീണ്ടും സമാരംഭിക്കുക</translation>
 <translation id="2847461019998147611">ഈ ഭാഷയില്‍‌ Google Chrome പ്രദര്‍‌ശിപ്പിക്കുക</translation>
 <translation id="2857540653560290388">Chrome സമാരംഭിക്കുന്നു...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome OS ഉപയോഗിക്കാനുള്ള സഹായം തേടുക</translation>
 <translation id="3396977131400919238">ഇന്‍സ്റ്റാള്‍ ചെയ്യുന്ന സമയത്ത് ഒരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റം പിശക് സംഭവിച്ചു. ദയവായി Google Chrome വീണ്ടും ഡൗൺലോഡ് ചെയ്യുക.</translation>
 <translation id="3398288718845740432">Chrome മെനുവിൽ മറയ്‌ക്കുക</translation>
+<translation id="3434246496373299699">നിങ്ങളുടെ Google അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുമ്പോൾ, Chrome-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവും</translation>
 <translation id="3451115285585441894">Chrome-ലേക്ക് ചേർക്കുന്നു...</translation>
 <translation id="345171907106878721">Chrome-ലേക്ക് സ്വയം ചേരുക</translation>
 <translation id="34857402635545079">Chrome-ൽ നിന്നും ഡാറ്റ മായ്ക്കുക (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">ഈ സൈറ്റുമായി ലൊക്കേഷൻ പങ്കിടാൻ Chrome-ന് നിങ്ങളുടെ ലൊക്കേഷനിലേക്കുള്ള ആക്‌സസ് ആവശ്യമാണ്</translation>
+<translation id="3533694711092285624">സംരക്ഷിച്ച പാസ്‌വേഡുകളൊന്നുമില്ല. നിങ്ങളുടെ പാസ്‌വേഡുകൾ സംരക്ഷിക്കുകയാണങ്കിൽ, Chrome-ന് അവ പരിശോധിക്കാനാവും.</translation>
 <translation id="3576528680708590453"><ph name="TARGET_URL_HOSTNAME" /> ആക്‌സസ് ചെയ്യാൻ ഇതര ബ്രൗസർ തുറക്കുന്നതിനായി നിങ്ങളുടെ സിസ്‌റ്റം അഡ്‌മിൻ Google Chrome കോൺഫിഗർ ചെയ്‌തു.</translation>
 <translation id="3582972582564653026">നിങ്ങളുടെ ഉപകരണങ്ങളിലുടനീളം Chrome സമന്വയിപ്പിച്ച് വ്യക്തിഗതമാക്കുക</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{അപ്‌ഡേറ്റ് ബാധകമാക്കുന്നതിന് Chrome വീണ്ടും ആരംഭിക്കാൻ നിങ്ങളുടെ അഡ്‌മിൻ ആവശ്യപ്പെടുന്നു}=1{അപ്‌ഡേറ്റ് ബാധകമാക്കുന്നതിന് Chrome വീണ്ടും ആരംഭിക്കാൻ നിങ്ങളുടെ അഡ്‌മിൻ ആവശ്യപ്പെടുന്നു. നിങ്ങളുടെ അദൃശ്യ വിൻഡോ വീണ്ടും തുറക്കില്ല.}other{അപ്‌ഡേറ്റ് ബാധകമാക്കുന്നതിന് Chrome വീണ്ടും ആരംഭിക്കാൻ നിങ്ങളുടെ അഡ്‌മിൻ ആവശ്യപ്പെടുന്നു. നിങ്ങളുടെ # അദൃശ്യ വിൻഡോകൾ വീണ്ടും തുറക്കില്ല.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Google Chrome-ന്റെ പുതിയ പതിപ്പ് ലഭ്യമാണ്, അത് മുമ്പത്തേക്കാൾ വേഗതയേറിയതാണ്.</translation>
 <translation id="8614913330719544658">Google Chrome പ്രതികരിക്കുന്നില്ല. ഇപ്പോള്‍ വീണ്ടും സമാരംഭിക്കണോ?</translation>
 <translation id="8625237574518804553">{0,plural, =1{ഒരു മിനിറ്റിൽ Chrome വീണ്ടും സമാരംഭിക്കും}other{# മിനിറ്റിൽ Chrome വീണ്ടും സമാരംഭിക്കും}}</translation>
+<translation id="8641606876632989680">അപഹരിക്കപ്പെട്ട പാസ്‌വേഡ് ഉപയോഗിച്ച് നിങ്ങൾ സൈൻ ഇൻ ചെയ്യുമ്പോൾ Chrome നിങ്ങളെ അറിയിക്കും</translation>
 <translation id="8669527147644353129">Google Chrome സഹായി</translation>
 <translation id="8679801911857917785">നിങ്ങൾ Chrome ആരംഭിയ്ക്കുമ്പോൾ ഏത് പേജാണ് കാണിക്കേണ്ടതെന്നും അത് നിയന്ത്രിയ്ക്കുന്നു.</translation>
 <translation id="870251953148363156">&amp;Google Chrome അപ്‌ഡേറ്റ് ചെയ്യുക</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mn.xtb b/chrome/app/resources/google_chrome_strings_mn.xtb
index 1e528b7..be49248 100644
--- a/chrome/app/resources/google_chrome_strings_mn.xtb
+++ b/chrome/app/resources/google_chrome_strings_mn.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Энэ нь Google Chrome-н хоёр дахь суулгалт тул таны өгөгдмөл хөтчөөр сонгох боломжгүй.</translation>
 <translation id="2341767445688917208">Chrome үйлдлийн систем таны нууц үгийг синк хийж чадсангүй. Одоо засна уу.</translation>
 <translation id="2348335408836342058">Энэ сайтыг ашиглахын тулд Chrome-д таны камер, микрофонд хандах зөвшөөрөл шаардлагатай</translation>
+<translation id="234869673307233423">Chrome таны нууц үгсийг шалгах боломжгүй байна. Дараа дахин оролдоно уу.</translation>
 <translation id="2429317896000329049">Таны домэйнд sync хийх боломжгүй учраас Google Chrome нь таны өгөгдлийг sync хийж чадсангүй.</translation>
 <translation id="2467438592969358367">Google Chrome таны нууц үгийг экспортлох хүсэлтэй байна. Үүнийг зөвшөөрч байгаа бол Windows-н нууц үгээ оруулна уу.</translation>
 <translation id="2485422356828889247">Устгах</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Энэ өргөтгөл нь таныг Chrome-г эхлүүлэх үед хуудсанд харагдах зүйлийг өөрчилсөн.</translation>
 <translation id="2765403129283291972">Энэ сайтыг ашиглахын тулд Chrome-д таны микрофонд хандах зөвшөөрөл шаардлагатай</translation>
 <translation id="2770231113462710648">Стандарт вэб хөтчийг дараах руу өөрчил:</translation>
+<translation id="2775140325783767197">Chrome таны нууц үгсийг шалгах боломжгүй байна. Интернэт холболтоо шалгаж үзнэ үү.</translation>
 <translation id="2799223571221894425">Дахин эхлүүлэх</translation>
 <translation id="2847461019998147611">Google Chrome-г энэ хэлээр харуулах</translation>
 <translation id="2857540653560290388">Chrome-г эхлүүлж байна...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome үйлдлийн системээс тусламж авах</translation>
 <translation id="3396977131400919238">Суулгах явцад үйлдлийн системд алдаа гарлаа. Google Chrome-ыг дахин татаж авна уу.</translation>
 <translation id="3398288718845740432">Chrome-ын цэсэнд нуух</translation>
+<translation id="3434246496373299699">Chrome нь таныг Google Бүртгэлээрээ нэвтрэх үед таны нууц үгсийг шалгах боломжтой</translation>
 <translation id="3451115285585441894">Chrome руу нэмж байна...</translation>
 <translation id="345171907106878721">Chrome-д өөрийгөө нэмэх</translation>
 <translation id="34857402635545079">Chrome-н (<ph name="URL" />) өгөгдлийг мөн адил устгах</translation>
 <translation id="3503306920980160878">Энэ сайтаар таны байршлыг хуваалцахын тулд Chrome-д таны байршилд хандах зөвшөөрөл шаардлагатай</translation>
+<translation id="3533694711092285624">Хадгалсан ямар ч нууц үг байхгүй байна. Таныг нууц үгсээ хадгалах үед Chrome тэднийг шалгах боломжтой.</translation>
 <translation id="3576528680708590453">Таны системийн админ Google Chrome-г <ph name="TARGET_URL_HOSTNAME" />-д хандахын тулд өөр хөтөч нээхээр тохируулсан байна.</translation>
 <translation id="3582972582564653026">Төхөөрөмжүүддээ Chrome-г синк хийж, хувийн болгох</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Шинэчлэлтийг хэрэгжүүлэхийн тулд Chrome-г дахин ачаалахыг таны администратор танаас шаардаж байна}=1{Шинэчлэлтийг хэрэгжүүлэхийн тулд Chrome-г дахин ачаалахыг таны администратор танаас шаардаж байна. Таны нууцлалтай цонхыг дахин нээхгүй.}other{Шинэчлэлтийг хэрэгжүүлэхийн тулд Chrome-г дахин ачаалахыг таны администратор танаас шаардаж байна. Таны # нууцлалтай цонхыг дахин нээхгүй.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Google Chrome-ийн шинэ хувилбар боломжтой байгаа бөгөөд энэ нь урьд урьдныхаас ч илүү хурдан.</translation>
 <translation id="8614913330719544658">Google Chrome ажиллахгүй байна. Дахин эхүүлэх үү?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome-г 1 минутын дотор дахин ажиллуулна}other{Chrome-г # минутын дотор дахин ажиллуулна}}</translation>
+<translation id="8641606876632989680">Chrome нь таныг алдагдсан нууц үгээр нэвтрэх үед танд мэдэгдэнэ</translation>
 <translation id="8669527147644353129">Google Chrome Туслагч</translation>
 <translation id="8679801911857917785">Энэ нь мөн таныг Chrome-ыг эхлүүлэх үед гарч ирдэг хуудсыг хянадаг.</translation>
 <translation id="870251953148363156">Google Chrome-г шинэчлэх</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb
index 1cc61c9f..8235248b 100644
--- a/chrome/app/resources/google_chrome_strings_mr.xtb
+++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -51,6 +51,7 @@
 <translation id="2309047409763057870">ही Google Chrome ची दुय्यम स्थापना असून त्यास तुमचा डीफॉल्ट ब्राउझर बनवू शकत नाही.</translation>
 <translation id="2341767445688917208">Chrome OS तुमचे पासवर्ड सिंक करू शकले नाही. आता निराकरण करा.</translation>
 <translation id="2348335408836342058">या साइटसाठी Chrome ला तुमचा कॅमेरा आणि मायक्रोफोन ॲक्सेस करण्याची परवानगी हवी आहे</translation>
+<translation id="234869673307233423">Chrome तुमचे पासवर्ड तपासू शकत नाही. नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="2429317896000329049">आपल्या डोमेनसाठी संकालन उपलब्ध नसल्यामुळे Google Chrome तुमचा डेटा संकालित करू शकले नाही.</translation>
 <translation id="2467438592969358367">Google Chrome ला तुमचे पासवर्ड निर्यात करायचे आहेत. हे करू देण्यासाठी तुमचा Windows पासवर्ड टाइप करा.</translation>
 <translation id="2485422356828889247">अनइंस्टॉल करा</translation>
@@ -65,6 +66,7 @@
 <translation id="2689103672227170538">तुम्ही Chrome सुरू करता तेव्हा कोणते पेज दर्शविले जाते हे या एक्स्टेंशनने बदलले आहे.</translation>
 <translation id="2765403129283291972">या साइटसाठी Chrome ला तुमचा मायक्रोफोन ॲक्सेस करण्याची परवानगी हवी आहे</translation>
 <translation id="2770231113462710648">डीफॉल्ट ब्राउझर यावर बदला:</translation>
+<translation id="2775140325783767197">Chrome तुमचे पासवर्ड तपासू शकत नाही. तुमचे इंटरनेट कनेक्शन तपासून पहा.</translation>
 <translation id="2799223571221894425">पुन्हा लाँच करा</translation>
 <translation id="2847461019998147611">Google Chrome या भाषेत डिस्प्ले करा</translation>
 <translation id="2857540653560290388">Chrome लाँच करत आहे...</translation>
@@ -83,10 +85,12 @@
 <translation id="3395323229510056640">Chrome OS सह मदत मिळवा</translation>
 <translation id="3396977131400919238">स्थापनेदरम्यान एक ऑपरेटिंग सिस्टम‍ एरर आली. कृपया Google Chrome पुन्हा डाउनलोड करा.</translation>
 <translation id="3398288718845740432">Chrome मेनूमध्‍ये लपवा</translation>
+<translation id="3434246496373299699">तुम्ही तुमचे Google खाते वापरून साइन इन करता तेव्हा, Chrome तुमचे पासवर्ड तपासू शकते</translation>
 <translation id="3451115285585441894">Chrome मध्‍ये जोडत आहे...</translation>
 <translation id="345171907106878721">Chrome वर आपल्या स्वतःस जोडा</translation>
 <translation id="34857402635545079">Chrome (<ph name="URL" />) वरील डेटा देखील साफ करा</translation>
 <translation id="3503306920980160878">तुमचे स्थान या साइटसोबत शेअर करण्यासाठी Chrome ला तुमच्या स्थानाचा अ‍ॅक्सेस हवा आहे</translation>
+<translation id="3533694711092285624">सेव्ह केलेले पासवर्ड नाहीत. तुम्ही तुमचे पासवर्ड सेव्ह केल्यावर Chrome ते तपासू शकते.</translation>
 <translation id="3576528680708590453">तुमच्या सिस्टम अ‍ॅडमिनिस्ट्रेटरने <ph name="TARGET_URL_HOSTNAME" /> ॲक्‍सेस करण्याकरिता पर्यायी ब्राउझर उघडण्यासाठी Google Chrome कॉन्फिगर केले आहे.</translation>
 <translation id="3582972582564653026">तुमच्या डिव्हाइसवर Chrome सिंक आणि पर्सनलाइझ करा</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{अपडेट लागू करता यावे यासाठी तुम्ही Chrome पुन्हा लाँच करण्याची तुमच्या ॲडमिनिस्ट्रेटरला गरज आहे}=1{अपडेट लागू करता यावे यासाठी तुम्ही Chrome पुन्हा लाँच करण्याची तुमच्या ॲडमिनिस्ट्रेटरला गरज आहे. तुमची गुप्त विंडो पुन्हा उघडणार नाही.}other{अपडेट लागू करता यावे यासाठी तुम्ही Chrome पुन्हा लाँच करण्याची तुमच्या ॲडमिनिस्ट्रेटरला गरज आहे. तुमच्या # गुप्त विंडो पुन्हा उघडणार नाहीत.}}</translation>
@@ -236,6 +240,7 @@
 <translation id="8556340503434111824">Google Chrome ची नवीन आवृत्ती उपलब्ध आहे, आणि ही नेहमीपेक्षा द्रुत आहे. </translation>
 <translation id="8614913330719544658">Google Chrome प्रतिसाद देत नाही. त्वरित पुन्हा लाँच करायचा?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome एका मिनिटामध्ये पुन्हा लॉंच होईल}other{Chrome # मिनिटांमध्ये पुन्हा लॉंच होईल}}</translation>
+<translation id="8641606876632989680">तुम्ही धोक्यात असलेल्या पासवर्डने साइन इन केल्यावर Chrome तुम्हाला सूचित करेल</translation>
 <translation id="8669527147644353129">Google Chrome मदतनीस</translation>
 <translation id="8679801911857917785">तुम्ही Chrome सुरू करता तेव्हा कोणते पृष्ठ दर्शविले जाते हे देखील हे नियंत्रित करते.</translation>
 <translation id="870251953148363156">&amp;Google Chrome अपडेट करा</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ms.xtb b/chrome/app/resources/google_chrome_strings_ms.xtb
index 9d5dd9b4..3f19f21 100644
--- a/chrome/app/resources/google_chrome_strings_ms.xtb
+++ b/chrome/app/resources/google_chrome_strings_ms.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Ini adalah pemasangan kedua Google Chrome dan tidak boleh dijadikan penyemak imbas lalai anda.</translation>
 <translation id="2341767445688917208">OS Chrome tidak dapat menyegerakkan kata laluan anda. Betulkan sekarang.</translation>
 <translation id="2348335408836342058">Chrome memerlukan kebenaran untuk mengakses kamera dan mikrofon anda bagi tapak ini</translation>
+<translation id="234869673307233423">Chrome tidak dapat menyemak kata laluan anda. Cuba lagi nanti.</translation>
 <translation id="2429317896000329049">Google Chrome tidak dapat menyegerakkan data anda kerana Segerak tidak tersedia untuk domain anda.</translation>
 <translation id="2467438592969358367">Google Chrome mahu mengeksport kata laluan anda. Taip kata laluan Windows anda untuk membenarkannya.</translation>
 <translation id="2485422356828889247">Nyahpasang</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Sambungan ini telah menukar halaman yang ditunjukkan apabila anda memulakan Chrome.</translation>
 <translation id="2765403129283291972">Chrome memerlukan kebenaran untuk mengakses mikrofon anda bagi tapak ini</translation>
 <translation id="2770231113462710648">Tukar penyemak imbas lalai kepada:</translation>
+<translation id="2775140325783767197">Chrome tidak dapat menyemak kata laluan anda. Cuba periksa sambungan Internet anda.</translation>
 <translation id="2799223571221894425">Lancarkan semula</translation>
 <translation id="2847461019998147611">Paparkan Google Chrome dalam bahasa ini</translation>
 <translation id="2857540653560290388">Melancarkan Chrome...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Dapatkan bantuan berkenaan Chrome OS</translation>
 <translation id="3396977131400919238">Ralat sistem pengendalian berlaku semasa pemasangan. Sila muat turun Google Chrome semula.</translation>
 <translation id="3398288718845740432">Sembunyikan dalam Menu Chrome</translation>
+<translation id="3434246496373299699">Chrome boleh menyemak kata laluan anda apabila anda log masuk menggunakan Akaun Google anda</translation>
 <translation id="3451115285585441894">Menambahkan pada Chrome...</translation>
 <translation id="345171907106878721">Tambahkan diri anda kepada Chrome</translation>
 <translation id="34857402635545079">Kosongkan data daripada Chrome (<ph name="URL" />) juga</translation>
 <translation id="3503306920980160878">Chrome memerlukan akses kepada lokasi anda untuk berkongsi lokasi dengan tapak ini</translation>
+<translation id="3533694711092285624">Tiada kata laluan yang disimpan. Chrome boleh menyemak kata laluan anda yang disimpan.</translation>
 <translation id="3576528680708590453">Pentadbir sistem anda telah mengkonfigurasikan Google Chrome agar membuka penyemak imbas alternatif untuk mengakses <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Segerakkan dan peribadikan Chrome pada semua peranti anda</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Pentadbir anda menghendaki anda melancarkan semula Chrome untuk menggunakan kemas kini}=1{Pentadbir anda menghendaki anda melancarkan semula Chrome untuk menggunakan kemas kini. Tetingkap Inkognito anda tidak dapat dibuka semula.}other{Pentadbir anda menghendaki anda melancarkan semula Chrome untuk menggunakan kemas kini. # tetingkap Inkognito anda tidak dapat dibuka semula.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Terdapat versi baharu Google Chrome yang tersedia, dan ia lebih pantas daripada biasa.</translation>
 <translation id="8614913330719544658">Google Chrome tidak responsif. Lancarkan semula sekarang?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome akan dilancarkan semula dalam masa seminit}other{Chrome akan dilancarkan semula dalam masa # minit}}</translation>
+<translation id="8641606876632989680">Chrome akan memaklumkan kepada anda apabila anda log masuk menggunakan kata laluan yang terjejas</translation>
 <translation id="8669527147644353129">Pembantu Google Chrome</translation>
 <translation id="8679801911857917785">Sambungan turut mengawal halaman yang ditunjukkan apabila anda memulakan Chrome.</translation>
 <translation id="870251953148363156">Kemas kini &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_my.xtb b/chrome/app/resources/google_chrome_strings_my.xtb
index eaa9a80..a24667f 100644
--- a/chrome/app/resources/google_chrome_strings_my.xtb
+++ b/chrome/app/resources/google_chrome_strings_my.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">ဤသည်မှာ Google Chrome ကို အရန်သဘော ထည့်သွင်းခြင်းဖြစ်ပြီး သင်၏မူရင်းဘရောင်ဇာအဖြစ် ၎င်းကို အသုံးပြု၍မရနိုင်ပါ။</translation>
 <translation id="2341767445688917208">Chrome OS က သင့်စကားဝှက်များကို စင့်ခ်လုပ်၍မရပါ။ ယခု ပြင်ဆင်ပါ။</translation>
 <translation id="2348335408836342058">ဤဝဘ်ဆိုက်အတွက် Chrome သည် သင်၏ကင်မရာနှင့် မိုက်ခရိုဖုန်းကို အသုံးပြုခွင့်ရရန် လိုအပ်ပါသည်</translation>
+<translation id="234869673307233423">Chrome က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ နောက်မှ ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="2429317896000329049">သင်၏ ဒိုမိန်းအတွက် စင့်က် လုပ်မရနိုင်သောကြောင့် Google Chrome က သင်၏ ဒေတာကို စင့်က် မလုပ်နိုင်ခဲ့ပါ။</translation>
 <translation id="2467438592969358367">Google Chrome သည် သင်၏ စကားဝှက်များကို တင်ပို့လိုသည်။ ၎င်းကို ခွင့်ပြုရန် သင်၏ Windows စကားဝှက်ကို ထည့်ပါ။</translation>
 <translation id="2485422356828889247">ဖြုတ်ရန်</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">သင် Chrome အား စသုံးသောအခါ စာမျက်နှာမှ ပြသသည်ကို ဤတိုးချဲလိုင်းမှ ပြောင်းလဲခဲ့၏။</translation>
 <translation id="2765403129283291972">ဤဝဘ်ဆိုက်အတွက် Chrome သည် သင်၏မိုက်ခရိုဖုန်းကို အသုံးပြုခွင့်ရရန် လိုအပ်ပါသည်</translation>
 <translation id="2770231113462710648">ပုံသေ ဘရောင်ဇာအာ:</translation>
+<translation id="2775140325783767197">Chrome က သင့်စကားဝှက်များကို စစ်ဆေး၍မရပါ။ သင့်အင်တာနက် ချိတ်ဆက်မှုကို စစ်ဆေးပါ။</translation>
 <translation id="2799223571221894425">ပြန်လည်ဖွင့်တင်ရန်</translation>
 <translation id="2847461019998147611">Google Chrome ကို ဤဘာသာစကားဖြင့် ပြသပါ</translation>
 <translation id="2857540653560290388">Chrome ကို ဖွင့်နေသည်...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome OS အကူအညီရယူရန်</translation>
 <translation id="3396977131400919238">ထည့်သွင်းစဉ်တွင် လည်ပတ်မှုစနစ် မှားယွင်းမှု ဖြစ်ပေါ်ခဲ့သည်။ Google Chrome ကို ကျေးဇူးပြု၍ ထပ်မံ ဒေါင်းလုဒ် ပြုလုပ်ပါ။</translation>
 <translation id="3398288718845740432">Chrome မီနူးတွင် သိမ်းထားရန်</translation>
+<translation id="3434246496373299699">သင်၏ Google Account နှင့် လက်မှတ်ထိုးဝင်သည့်အခါ Chrome က သင့်စကားဝှက်များကို စစ်ဆေးနိုင်သည်</translation>
 <translation id="3451115285585441894">Chrome သို့ ထည့်ပေးနေ...</translation>
 <translation id="345171907106878721">ကိုယ့်ဘာသာကိုယ် Chrome သို့ ထည့်ပေးရန်</translation>
 <translation id="34857402635545079">Chrome (<ph name="URL" />) မှ ဒေတာများကိုလည်း ရှင်းထုတ်ရန်</translation>
 <translation id="3503306920980160878">ဤဝဘ်ဆိုက်နှင့် သင်၏တည်နေရာကို မျှဝေရန် Chrome သည် သင့်တည်နေရာကို အသုံးပြုခွင့် လိုအပ်ပါသည်</translation>
+<translation id="3533694711092285624">သိမ်းထားသော စကားဝှက် မရှိပါ။ သင်စကားဝှက်များကို သိမ်းသည့်အခါ Chrome က ၎င်းတို့ကို စစ်ဆေးနိုင်သည်။</translation>
 <translation id="3576528680708590453">စနစ်စီမံခန့်ခွဲသူသည် <ph name="TARGET_URL_HOSTNAME" /> ဖွင့်ကြည့်ရန်အတွက် အစားထိုးဘရောင်ဇာ အသုံးပြုရန် Google Chrome ကို စီစဉ်သတ်မှတ်ထားသည်။</translation>
 <translation id="3582972582564653026">သင်၏ စက်ပစ္စည်းများအားလုံးတွင် Chrome ကို စင့်ခ်လုပ်ပြီး စိတ်ကြိုက်ပြင်ဆင်ပါ</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{အပ်ဒိတ်ကို အသုံးပြုနိုင်ရန်အတွက် Chrome ကို ပြန်လည်စတင်ရန် သင်၏စီမံခန့်ခွဲသူက တောင်းဆိုထားပါသည်}=1{အပ်ဒိတ်ကို အသုံးပြုနိုင်ရန်အတွက် Chrome ကို ပြန်လည်စတင်ရန် သင်၏စီမံခန့်ခွဲသူက တောင်းဆိုထားပါသည်။ သင်၏ရုပ်ဖျက် ဝင်ဒိုးကို ပြန်ဖွင့်မည် မဟုတ်ပါ။}other{အပ်ဒိတ်ကို အသုံးပြုနိုင်ရန်အတွက် Chrome ကို ပြန်လည်စတင်ရန် သင်၏စီမံခန့်ခွဲသူက တောင်းဆိုထားပါသည်။ သင်၏ရုပ်ဖျက် ဝင်ဒိုး # ခုကို ပြန်ဖွင့်မည် မဟုတ်ပါ။}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Google Chrome ၏ ဗားရှင်း အသစ်ကို ရနိုင်ပါပြီ၊ ၎င်းသည် မကြုံစဖူး ပိုမြန်ပါသည်။</translation>
 <translation id="8614913330719544658">Google Chrome သည် မတုံ့ပြန်ပါ။ ယခု ပြန်ပြီးဖွင့်တင်ရမလား?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome ကို ၁ မိနစ်အကြာတွင် ပြန်လည်စတင်ပါမည်}other{Chrome ကို # မိနစ်အကြာတွင် ပြန်လည်စတင်ပါမည်}}</translation>
+<translation id="8641606876632989680">ကျိုးပေါက်ထားသည့် စကားဝှက်ဖြင့် လက်မှတ်ထိုးဝင်သည့်အခါ Chrome က သင့်ကို ကြောင်းကြားပါမည်</translation>
 <translation id="8669527147644353129">Google Chrome ကူညီပေးသူ</translation>
 <translation id="8679801911857917785">သင်က Chrome ကို စတင်စဉ် ဘယ်စာမျက်နှာ ပြကြောင်းကိုပါ ၎င်းက ထိန်းချုပ်ပါသည်။</translation>
 <translation id="870251953148363156">&amp;Google Chrome ကို အဆင့်မြှင့်ရန်</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ne.xtb b/chrome/app/resources/google_chrome_strings_ne.xtb
index bb22928..0416641 100644
--- a/chrome/app/resources/google_chrome_strings_ne.xtb
+++ b/chrome/app/resources/google_chrome_strings_ne.xtb
@@ -50,6 +50,7 @@
 <translation id="2309047409763057870">यो Google Chrome को एउटा सहायक स्थापना हो र यसलाई तपाईँको पूर्वनिर्धारित ब्राउजर बनाउन सकिँदैन।</translation>
 <translation id="2341767445688917208">Chrome OS ले तपाईंका पासवर्डहरू सिंक गर्न सकेन। अहिले नै समाधान गर्नुहोस्</translation>
 <translation id="2348335408836342058">Chrome लाई यो साइटका लागि तपाईंको क्यामेरा र माइक्रोफोनमाथि पहुँच राख्ने अनुमति चाहिन्छ</translation>
+<translation id="234869673307233423">Chrome ले तपाईंका पासवर्डहरूको जाँच गर्न सकेन। पछि फेरि प्रयास गर्नुहोस्।</translation>
 <translation id="2429317896000329049">Google Chrome ले तपाइँको लगत समक्रमण गर्न सकेन किनभने तपाइँको डोमेनको लागि समक्रमन उपलब्ध छैन।</translation>
 <translation id="2467438592969358367">Google Chrome तपाईंका पासवर्डहरू निर्यात गर्न चाहन्छ। यसो गर्ने अनुमति दिन Windows को आफ्नो पासवर्ड टाइप गर्नुहोस्‌।</translation>
 <translation id="2485422356828889247">विस्थापन गर्नुहोस्</translation>
@@ -64,6 +65,7 @@
 <translation id="2689103672227170538">यो विस्तारले तपाईँले Chrome सुरु गर्दा देखाइएको पृष्ठलाई परिवर्तन गरेको छ।</translation>
 <translation id="2765403129283291972">Chrome लाई यो साइटका लागि तपाईंको माइक्रोफोनमाथि पहुँच राख्ने अनुमति चाहिन्छ</translation>
 <translation id="2770231113462710648">पूर्वनिर्धारित ब्राउजरलाई यसमा बदल्नुहोस्:</translation>
+<translation id="2775140325783767197">Chrome ले तपाईंका पासवर्डहरूको जाँच गर्न सकेन। आफ्नो इन्टरनेट जडान जाँच गरी हेर्नुहोस्।</translation>
 <translation id="2799223571221894425">पुन: सुरुवात गर्नुहोस्</translation>
 <translation id="2847461019998147611">यो भाषामा Google Chrome प्रदर्शन गर्नुहोस्</translation>
 <translation id="2857540653560290388">Chrome सुरु गर्दै…</translation>
@@ -82,10 +84,12 @@
 <translation id="3395323229510056640">Chrome OS को सम्बन्धमा मद्दत प्राप्त गर्नुहोस्</translation>
 <translation id="3396977131400919238">स्थापना हुँदा एक सञ्चालन प्रणाली त्रुटि भयो। कृपया Google Chrome फेरि डाउनलोड गर्नुहोस्।</translation>
 <translation id="3398288718845740432">Chrome मेनुमा लुकाउनुहोस्</translation>
+<translation id="3434246496373299699">तपाईंले आफ्नो Google खातामा साइन इन गरेपछि मात्र Chrome ले तपाईंका पासवर्डहरूको जाँच गर्न सक्छ</translation>
 <translation id="3451115285585441894">Chrome मा थप्दै...</translation>
 <translation id="345171907106878721">आफूलाई Chrome मा थप्नुहोस</translation>
 <translation id="34857402635545079">Chrome (<ph name="URL" />) को डेटा पनि खाली गर्नुहोस्</translation>
 <translation id="3503306920980160878">यो साइटसँग तपाईंको स्थान आदान प्रदान गर्न Chrome सँग तपाईंको स्थानमाथिको पहुँच हुनु पर्छ</translation>
+<translation id="3533694711092285624">कुनै पनि सुरक्षित गरिएको पासवर्ड छैन। तपाईंले आफ्ना पासवर्डहरू सुरक्षित गर्नुभएको छ भने मात्र Chrome ले तिनको जाँच गर्न सक्छ।</translation>
 <translation id="3576528680708590453">तपाईंको प्रणालीका प्रशासकले <ph name="TARGET_URL_HOSTNAME" /> माथि पहुँच गर्नका लागि वैकल्पिक ब्राउजर खोल्न Google Chrome कन्फिगर गरेको छ।</translation>
 <translation id="3582972582564653026">आफ्ना यन्त्रहरूभरि Chrome लाई सिंक तथा वैयक्तीकृत गर्नुहोस्</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{तपाईंका व्यवस्थापकका अनुसार तपाईंले यो अद्यावधिक लागू गर्न Chrome पुनः सुरु गर्नु पर्ने हुन्छ}=1{तपाईंका व्यवस्थापकका अनुसार तपाईंले यो अद्यावधिक लागू गर्न Chrome पुनः सुरु गर्नु पर्ने हुन्छ। तपाईंको इन्कोग्निटो विन्डो पुनः खुल्ने छैन।}other{तपाईंका व्यवस्थापकका अनुसार तपाईंले यो अद्यावधिक लागू गर्न Chrome पुनः सुरु गर्नु पर्ने हुन्छ। तपाईंका # वटा इन्कोग्निटो विन्डो पुनः खुल्ने छैनन्।}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">Google Chrome को नयाँ संस्करण उपलब्ध छ, र यो अहिलेसम्मकै द्रुत छ।</translation>
 <translation id="8614913330719544658">Google Chrome ले प्रतिक्रिया जनाइरहेको छैन। अहिले नै पुन: लन्च गर्ने?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome १ मिनेटमा पुनः सुरु हुने छ}other{Chrome # मिनेटमा पुनः सुरु हुने छ}}</translation>
+<translation id="8641606876632989680">तपाईंले अरूले देखेको पासवर्ड प्रयोग गरी साइन इन गर्दा Chrome ले तपाईंलाई त्यसबारे जानकारी दिने छ</translation>
 <translation id="8669527147644353129">Google Chrome सहायक</translation>
 <translation id="8679801911857917785">तपाइँले Chrome सुरु गर्दा कुन पृष्ठ देखाउँछ भनेर पनि यसले नियन्त्रण गर्छ।</translation>
 <translation id="870251953148363156">&amp;Google Chrome अद्यावधिक गर्नुहोस्</translation>
diff --git a/chrome/app/resources/google_chrome_strings_nl.xtb b/chrome/app/resources/google_chrome_strings_nl.xtb
index 0fb2d71..1574a31 100644
--- a/chrome/app/resources/google_chrome_strings_nl.xtb
+++ b/chrome/app/resources/google_chrome_strings_nl.xtb
@@ -51,6 +51,7 @@
 <translation id="2309047409763057870">Dit is een tweede installatie van Google Chrome en kan niet als standaardbrowser worden ingesteld.</translation>
 <translation id="2341767445688917208">Chrome OS kan je wachtwoorden niet synchroniseren. Los dit nu op.</translation>
 <translation id="2348335408836342058">Chrome heeft toegangsrechten voor je camera en microfoon nodig voor deze site</translation>
+<translation id="234869673307233423">Chrome kan je wachtwoorden niet checken. Probeer het later opnieuw.</translation>
 <translation id="2429317896000329049">Google Chrome kan je gegevens niet synchroniseren, omdat synchronisatie niet beschikbaar is voor je domein.</translation>
 <translation id="2467438592969358367">Google Chrome wil je wachtwoorden exporteren. Geef je Windows-wachtwoord op om dit toe te staan.</translation>
 <translation id="2485422356828889247">Installatie ongedaan maken</translation>
@@ -65,6 +66,7 @@
 <translation id="2689103672227170538">Deze extensie heeft gewijzigd welke pagina wordt weergegeven wanneer je Chrome start.</translation>
 <translation id="2765403129283291972">Chrome heeft toegangsrechten voor je microfoon nodig voor deze site</translation>
 <translation id="2770231113462710648">Standaardbrowser wijzigen in:</translation>
+<translation id="2775140325783767197">Chrome kan je wachtwoorden niet checken. Check de internetverbinding.</translation>
 <translation id="2799223571221894425">Opnieuw starten</translation>
 <translation id="2847461019998147611">Google Chrome weergegeven in deze taal</translation>
 <translation id="2857540653560290388">Chrome starten…</translation>
@@ -83,10 +85,12 @@
 <translation id="3395323229510056640">Hulp bij Chrome OS</translation>
 <translation id="3396977131400919238">Er is tijdens de installatie een probleem opgetreden met het besturingssysteem. Download Google Chrome opnieuw.</translation>
 <translation id="3398288718845740432">Verbergen in Chrome-menu</translation>
+<translation id="3434246496373299699">Chrome kan je wachtwoorden checken als je inlogt met je Google-account</translation>
 <translation id="3451115285585441894">Toevoegen aan Chrome...</translation>
 <translation id="345171907106878721">Jezelf toevoegen aan Chrome</translation>
 <translation id="34857402635545079">Ook gegevens van Chrome wissen (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome heeft toegang tot je locatie nodig om je locatie met deze site te delen</translation>
+<translation id="3533694711092285624">Geen opgeslagen wachtwoorden. Chrome kan je wachtwoorden controleren als je deze hebt opgeslagen.</translation>
 <translation id="3576528680708590453">Je systeembeheerder heeft Google Chrome geconfigureerd om een alternatieve browser te openen voor toegang tot <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Chrome op al je apparaten synchroniseren en personaliseren</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Je beheerder vereist dat je Chrome opnieuw start om een update uit te voeren.}=1{Je beheerder vereist dat je Chrome opnieuw start om een update uit te voeren. Je incognitovenster kan niet opnieuw worden geopend.}other{Je beheerder vereist dat je Chrome opnieuw start om een update uit te voeren. Je # incognitovensters kunnen niet opnieuw worden geopend.}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">Er is een nieuwe versie van Google Chrome en deze is sneller dan ooit.</translation>
 <translation id="8614913330719544658">Google Chrome reageert niet meer. Nu opnieuw starten?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome wordt over één minuut opnieuw gestart}other{Chrome wordt over # minuten opnieuw gestart}}</translation>
+<translation id="8641606876632989680">Chrome laat het je weten als je inlogt met een gehackt wachtwoord</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Hiermee wordt ook gecontroleerd welke pagina wordt weergegeven wanneer je Chrome start.</translation>
 <translation id="870251953148363156">&amp;Google Chrome updaten</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb
index 383e8a6..7eef2efd 100644
--- a/chrome/app/resources/google_chrome_strings_no.xtb
+++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Dette er en sekundær installering av Google Chrome. Den kan ikke brukes som standardnettleser.</translation>
 <translation id="2341767445688917208">Chrome OS kunne ikke synkronisere passordene dine. Løs dette nå.</translation>
 <translation id="2348335408836342058">Chrome trenger tilgang til kameraet ditt og mikrofonen din for dette nettstedet</translation>
+<translation id="234869673307233423">Chrome kan ikke sjekke passordene dine. Prøv igjen senere.</translation>
 <translation id="2429317896000329049">Google Chrome kunne ikke synkronisere dataene dine fordi synkronisering ikke er tilgjengelig for domenet ditt.</translation>
 <translation id="2467438592969358367">Google Chrome forsøker å eksportere passordene dine. Skriv inn Windows-passordet ditt for å tillate dette.</translation>
 <translation id="2485422356828889247">Avinstaller</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Denne utvidelsen har endret hvilken side som vises når du starter Chrome.</translation>
 <translation id="2765403129283291972">Chrome trenger tilgang til mikrofonen din for dette nettstedet</translation>
 <translation id="2770231113462710648">Endre standardnettleser til:</translation>
+<translation id="2775140325783767197">Chrome kan ikke sjekke passordene dine. Prøv å kontrollere internettilkoblingen.</translation>
 <translation id="2799223571221894425">Start på nytt</translation>
 <translation id="2847461019998147611">Vis Google Chrome på dette språket</translation>
 <translation id="2857540653560290388">Starter Chrome ...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Få hjelp med Chrome OS</translation>
 <translation id="3396977131400919238">Det oppstod en feil i operativsystemet under installeringen. Last ned Google Chrome på nytt.</translation>
 <translation id="3398288718845740432">Skjul i Chrome-menyen</translation>
+<translation id="3434246496373299699">Chrome kan sjekke passordene dine når du logger på med Google-kontoen din</translation>
 <translation id="3451115285585441894">Legger til i Chrome …</translation>
 <translation id="345171907106878721">Legg til deg selv i Chrome</translation>
 <translation id="34857402635545079">Slett dataene fra Chrome også (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome trenger tilgang til posisjonen din for å kunne dele den med dette nettstedet</translation>
+<translation id="3533694711092285624">Ingen lagrede passord. Chrome kan sjekke passordene dine når du lagrer dem.</translation>
 <translation id="3576528680708590453">Systemadministratoren din har konfigurert at Google Chrome skal åpne <ph name="TARGET_URL_HOSTNAME" /> i en annen nettleser.</translation>
 <translation id="3582972582564653026">Synkroniser og gi Chrome et personlig preg på alle enhetene dine</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administratoren din krever at du starter Chrome på nytt for å ta i bruk en oppdatering}=1{Administratoren din krever at du starter Chrome på nytt for å ta i bruk en oppdatering. Inkognitovinduet ditt blir ikke gjenåpnet.}other{Administratoren din krever at du starter Chrome på nytt for å ta i bruk en oppdatering. De # inkognitovinduene dine blir ikke gjenåpnet.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">En ny versjon av Google Chrome er tilgjengelig, og den er nå raskere en noen sinne.</translation>
 <translation id="8614913330719544658">Google Chrome svarer ikke. Vil du starte på nytt nå?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome startes på nytt om 1 minutt}other{Chrome startes på nytt om # minutter}}</translation>
+<translation id="8641606876632989680">Chrome varsler deg når du logger på med passord som er utsatt for sikkerhetsbrudd</translation>
 <translation id="8669527147644353129">Google Chrome-hjelper</translation>
 <translation id="8679801911857917785">Den styrer også hvilken side som vises når du starter Chrome.</translation>
 <translation id="870251953148363156">Oppdater &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_or.xtb b/chrome/app/resources/google_chrome_strings_or.xtb
index 26fc6f8..430f71d 100644
--- a/chrome/app/resources/google_chrome_strings_or.xtb
+++ b/chrome/app/resources/google_chrome_strings_or.xtb
@@ -51,6 +51,7 @@
 <translation id="2309047409763057870">ଏହା Google Chromeର ଏକ ସେକେଣ୍ଡାରୀ ଇନ୍‍ଷ୍ଟଲେସନ୍‌ ଏବଂ ଏହାକୁ ଆପଣଙ୍କର ଡିଫଲ୍ଟ ବ୍ରାଉଜର୍‌ କରାଯାଇପାରିବ ନାହିଁ।</translation>
 <translation id="2341767445688917208">Chrome OS ଆପଣଙ୍କର ପାସ୍‌ୱାର୍ଡଗୁଡ଼ିକୁ ସିଙ୍କ୍ କରିପାରିଲା ନାହିଁ। ବର୍ତ୍ତମାନ ସମାଧାନ କରନ୍ତୁ।</translation>
 <translation id="2348335408836342058">ଏହି ସାଇଟ୍ ପାଇଁ ଆପଣଙ୍କର କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନ୍ ଆକ୍ସେସ୍ କରିବାକୁ Chrome ଅନୁମତି ଆବଶ୍ୟକ କରୁଛି</translation>
+<translation id="234869673307233423">Chrome ଆପଣଙ୍କର ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="2429317896000329049">ଆପଣଙ୍କର ଡୋମେନ୍ ପାଇଁ ସିଙ୍କ୍ ଉପଲବ୍ଧ ନଥିବାରୁ Google Chrome ଆପଣଙ୍କର ଡାଟା ସିଙ୍କ୍ କରିପାରିଲା ନାହିଁ।</translation>
 <translation id="2467438592969358367">Google Chrome ଆପଣଙ୍କର ପାସ୍‌ୱାର୍ଡଗୁଡିକୁ ଏକ୍ସପୋର୍ଟ କରିବାକୁ ଚାହେଁ। ଏହାକୁ ଅନୁମତି ଦେବା ପାଇଁ ନିଜର Windows ପାସ୍‌ୱାର୍ଡ ଟାଇପ୍ କରନ୍ତୁ।</translation>
 <translation id="2485422356828889247">ଅନ୍‍ଇନ୍‍ଷ୍ଟଲ୍‌ କରନ୍ତୁ</translation>
@@ -65,6 +66,7 @@
 <translation id="2689103672227170538">ଯେତେବେଳେ ଆପଣ Chrome ଆରମ୍ଭ କରନ୍ତି, ସେତେବେଳେ କେଉଁ ପୃଷ୍ଠା ଦେଖାଯିବ, ତାହା ଏହି ଏକ୍ସଟେନ୍‌ସନ୍ ବଦଳାଇଦେଇଛି।</translation>
 <translation id="2765403129283291972">ଏହି ସାଇଟ୍ ପାଇଁ Chrome ଆପଣଙ୍କର ମାଇକ୍ରୋଫୋନ୍ ଆକ୍‌ସେସ୍ କରିବାକୁ ଅନୁମତି ଆବଶ୍ୟକ କରୁଛି</translation>
 <translation id="2770231113462710648">ଏଠାକୁ ଡିଫଲ୍ଟ ବ୍ରାଉଜର୍‌କୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ:</translation>
+<translation id="2775140325783767197">Chrome ଆପଣଙ୍କର ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। ଆପଣଙ୍କର ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ ଯାଞ୍ଚ କରି ଦେଖନ୍ତୁ।</translation>
 <translation id="2799223571221894425">ପୁଣି ଲଞ୍ଚ କରନ୍ତୁ</translation>
 <translation id="2847461019998147611">ଏହି ଭାଷାରେ Google Chrome‍କୁ ପ୍ରଦର୍ଶନ କରନ୍ତୁ</translation>
 <translation id="2857540653560290388">Chrome ଲଞ୍ଚ ହେଉଛି...</translation>
@@ -83,10 +85,12 @@
 <translation id="3395323229510056640">Chromium OS ସହ ସାହାଯ୍ୟ ପ୍ରାପ୍ତ କରନ୍ତୁ</translation>
 <translation id="3396977131400919238">ସଂସ୍ଥାପନ ସମୟରେ ଏକ ସଞ୍ଚାଳନ ସିଷ୍ଟମ୍ ତ୍ରୁଟି ସଂଘଠିତ ହୋଇଛି । ଦୟାକରି Google Chrome ପୁନଃ ଡାଉନଲୋଡ୍ କରନ୍ତୁ ।</translation>
 <translation id="3398288718845740432">Chrome ମେନୁରେ ଲୁଚାନ୍ତୁ</translation>
+<translation id="3434246496373299699">ଆପଣ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟ ମାଧ୍ୟମରେ ସାଇନ୍ ଇନ୍ କଲେ, Chrome ଆପଣଙ୍କର ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ</translation>
 <translation id="3451115285585441894">Chromeକୁ ଯୋଗ କରାଯାଉଛି...</translation>
 <translation id="345171907106878721">ନିଜକୁ Chromeରେ ଯୋଗ କରନ୍ତୁ</translation>
 <translation id="34857402635545079">Chromeରୁ ମଧ୍ୟ ଡାଟା ଖାଲି କରନ୍ତୁ (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">ଏହି ସାଇଟ୍ ସହ ଆପଣଙ୍କ ଲୋକେସନ୍ ସେୟାର୍ କରିବା ପାଇଁ Chrome ଆପଣଙ୍କ ଲୋକେସନ୍‌କୁ ଆକ୍‌ସେସ୍ କରିବାକୁ ଚାହୁଁଛି</translation>
+<translation id="3533694711092285624">ସେଭ୍ କରାଯାଇଥିବା କୌଣସି ପାସୱାର୍ଡ ନାହିଁ। ଆପଣ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ସେଭ୍ କଲେ Chrome ସେଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ।</translation>
 <translation id="3576528680708590453"><ph name="TARGET_URL_HOSTNAME" />କୁ ଆକ୍ସେସ୍‌ କରିବା ପାଇଁ ଏକ ବିକଳ୍ପ ବ୍ରାଉଜର୍‌ ଖୋଲିବାକୁ ଆପଣଙ୍କର ସିଷ୍ଟମ୍ ବ୍ୟବସ୍ଥାପକ Google Chrome କନ୍‌ଫିଗର୍‌ କରିଛନ୍ତି।</translation>
 <translation id="3582972582564653026">Chromeକୁ ଆପଣଙ୍କ ଡିଭାଇସ୍‍ଗୁଡ଼ିକରେ ସିଙ୍କ କରି ବ୍ୟକ୍ତିଗତକୃତ କରନ୍ତୁ</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{ଆପଣଙ୍କ ଆଡ୍‍ମିନିଷ୍ଟ୍ରେଟର୍ ଚାହୁଁଛନ୍ତି ଯେ ଆପଣ ଏକ ଅପ୍‌ଡେଟ୍ ଲାଗୁ କରିବା ପାଇଁ Chromeକୁ ପୁଣି ଲଞ୍ଚ କରନ୍ତୁ}=1{ଆପଣଙ୍କ ଆଡ୍‍ମିନିଷ୍ଟ୍ରେଟର୍ ଚାହୁଁଛନ୍ତି ଯେ ଆପଣ ଏକ ଅପ୍‌ଡେଟ୍ ଲାଗୁ କରିବା ପାଇଁ Chromeକୁ ପୁଣି ଲଞ୍ଚ କରନ୍ତୁ। ଆପଣଙ୍କର ଇନ୍‌କଗ୍ନିଟୋ ୱିଣ୍ଡୋ ପୁଣି ଖୋଲିବ ନାହିଁ।}other{ଆପଣଙ୍କ ଆଡ୍‍ମିନିଷ୍ଟ୍ରେଟର୍ ଚାହୁଁଛନ୍ତି ଯେ ଆପଣ ଏକ ଅପ୍‌ଡେଟ୍ ଲାଗୁ କରିବା ପାଇଁ Chromeକୁ ପୁଣି ଲଞ୍ଚ କରନ୍ତୁ। ଆପଣଙ୍କର #ଟି ଇନ୍‌କଗ୍ନିଟୋ ୱିଣ୍ଡୋ ପୁଣି ଖୋଲିବ ନାହିଁ।}}</translation>
@@ -236,6 +240,7 @@
 <translation id="8556340503434111824">Google Chromeର ଏକ ନୂଆ ସଂସ୍କରଣ ଉପଲବ୍ଧ ଅଛି ଏବଂ ଏହା ସବୁଠାରୁ ଦ୍ରୁତ ଅଟେ।</translation>
 <translation id="8614913330719544658">Google Chrome କୌଣସି ପ୍ରତିକ୍ରିୟା ଦେଉନାହିଁ। ପୁଣିଥରେ ଲଞ୍ଚ କରିବେ?</translation>
 <translation id="8625237574518804553">{0,plural, =1{1 ମିନିଟ୍‌ରେ Chrome ପୁଣି ଲଞ୍ଚ ହେବ}other{# ମିନିଟ୍‌ରେ Chrome ପୁଣି ଲଞ୍ଚ ହେବ}}</translation>
+<translation id="8641606876632989680">ଆପଣ ଏକ ଚୋରି ହୋଇଯାଇଥିବା ପାସୱାର୍ଡ ମାଧ୍ୟମରେ ସାଇନ୍ ଇନ୍ କଲେ Chrome ଆପଣଙ୍କୁ ସୂଚିତ କରିବ</translation>
 <translation id="8669527147644353129">Google Chrome ସାହାଯ୍ୟକାରୀ</translation>
 <translation id="8679801911857917785">ଏଥିରୁ ଏହା ମଧ୍ୟ ନିୟନ୍ତ୍ରଣ ହୋ‍ଇଥାଏ ଯେ ଯେତେବେଳେ ଆପଣ Chrome ଆରମ୍ଭ କରନ୍ତି, ସେତେବେଳେ କେଉଁ ପୃଷ୍ଠା ଦେଖାଯିବ।</translation>
 <translation id="870251953148363156">&amp;Google Chrome ଅପ୍‌ଡେଟ୍ କରନ୍ତୁ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pa.xtb b/chrome/app/resources/google_chrome_strings_pa.xtb
index 1c8456b5..67a44b4 100644
--- a/chrome/app/resources/google_chrome_strings_pa.xtb
+++ b/chrome/app/resources/google_chrome_strings_pa.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">ਇਹ Google Chrome ਦੀ ਇੱਕ ਸੈਕੰਡਰੀ ਸਥਾਪਨਾ ਹੈ, ਅਤੇ ਇਸਨੂੰ ਤੁਹਾਡਾ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਬ੍ਰਾਊਜ਼ਰ ਨਹੀਂ ਬਣਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।</translation>
 <translation id="2341767445688917208">Chrome OS ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦਾ ਸਮਕਾਲੀਕਰਨ ਨਹੀਂ ਕਰ ਸਕਿਆ। ਹੁਣੇ ਠੀਕ ਕਰੋ।</translation>
 <translation id="2348335408836342058">Chrome ਨੂੰ ਇਸ ਸਾਈਟ ਵਾਸਤੇ ਤੁਹਾਡੇ ਕੈਮਰੇ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ</translation>
+<translation id="234869673307233423">Chrome ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
 <translation id="2429317896000329049">Google Chrome ਤੁਹਾਡਾ ਡਾਟਾ ਸਮਕਾਲੀਕਰਨ ਨਹੀਂ ਕਰ ਸਕਿਆ ਕਿਉਂਕਿ ਸਮਕਾਲੀਕਰਨ ਤੁਹਾਡੀ ਡੋਮੇਨ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।</translation>
 <translation id="2467438592969358367">Google Chrome ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਨਿਰਯਾਤ ਕਰਨਾ ਚਾਹੁੰਦਾ ਹੈ। ਇਹ ਕਰਨ ਦੇਣ ਲਈ ਆਪਣਾ Windows ਪਾਸਵਰਡ ਟਾਈਪ ਕਰੋ।</translation>
 <translation id="2485422356828889247">ਅਣਸਥਾਪਤ ਕਰੋ</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">ਇਸ ਐਕਸਟੈਂਸ਼ਨ ਨੇ ਤੁਹਾਡੇ ਵੱਲੋਂ Chrome ਸ਼ੁਰੂ ਕੀਤਾ ਜਾਣ ਵੇਲੇ ਦਿਖਾਏ ਜਾਣ ਵਾਲੇ ਪੰਨੇ ਨੂੰ ਬਦਲ ਦਿੱਤਾ ਹੈ।</translation>
 <translation id="2765403129283291972">Chrome ਨੂੰ ਇਸ ਸਾਈਟ ਵਾਸਤੇ ਤੁਹਾਡੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ</translation>
 <translation id="2770231113462710648">ਪੂਰਵ-ਨਿਰਧਾਰਤ ਬ੍ਰਾਊਜ਼ਰ ਨੂੰ ਇਸ ਵਿੱਚ ਬਦਲੋ:</translation>
+<translation id="2775140325783767197">Chrome ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਆਪਣੇ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰਕੇ ਦੇਖੋ।</translation>
 <translation id="2799223571221894425">ਰੀਲੌਂਚ ਕਰੋ</translation>
 <translation id="2847461019998147611">Google Chrome ਨੂੰ ਇਸ ਭਾਸ਼ਾ ਵਿੱਚ ਦਿਖਾਓ</translation>
 <translation id="2857540653560290388">Chrome ਲਾਂਚ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome OS ਬਾਰੇ ਮਦਦ ਪ੍ਰਾਪਤ ਕਰੋ</translation>
 <translation id="3396977131400919238">ਸਥਾਪਤ ਕਰਨ ਦੌਰਾਨ ਇੱਕ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਵਿੱਚ ਗੜਬੜ ਹੋਈ। ਕਿਰਪਾ ਕਰਕੇ Google Chrome ਨੂੰ ਦੁਬਾਰਾ ਡਾਊਨਲੋਡ ਕਰੋ।</translation>
 <translation id="3398288718845740432">Chrome ਮੀਨੂ ਵਿੱਚ ਲੁਕਾਓ</translation>
+<translation id="3434246496373299699">ਤੁਹਾਡੇ ਵੱਲੋਂ ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਨ 'ਤੇ Chrome ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹੈ</translation>
 <translation id="3451115285585441894">Chrome ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...</translation>
 <translation id="345171907106878721">ਖੁਦ ਨੂੰ Chrome ਨਾਲ ਜੋੜੋ</translation>
 <translation id="34857402635545079">Chrome (<ph name="URL" />) ਤੋਂ ਵੀ ਡਾਟਾ ਕਲੀਅਰ ਕਰੋ</translation>
 <translation id="3503306920980160878">Chrome ਨੂੰ ਇਸ ਸਾਈਟ ਨਾਲ ਤੁਹਾਡੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਸਾਂਝੀ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਟਿਕਾਣੇ 'ਤੇ ਪਹੁੰਚ ਕਰਨ ਦੀ ਲੋੜ ਹੈ</translation>
+<translation id="3533694711092285624">ਕੋਈ ਰੱਖਿਅਤ ਕੀਤੇ ਪਾਸਵਰਡ ਨਹੀਂ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਆਪਣੇ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਕਰਨ 'ਤੇ Chrome ਉਹਨਾਂ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹੈ।</translation>
 <translation id="3576528680708590453">ਤੁਹਾਡੇ ਸਿਸਟਮ ਪ੍ਰਸ਼ਾਸਕ ਨੇ <ph name="TARGET_URL_HOSTNAME" /> ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਵਾਸਤੇ ਕੋਈ ਵਿਕਲਪਿਕ ਬ੍ਰਾਊਜ਼ਰ ਖੋਲ੍ਹਣ ਲਈ Google Chrome ਦਾ ਸੰਰੂਪਣ ਕੀਤਾ ਹੈ।</translation>
 <translation id="3582972582564653026">ਸਮਕਾਲੀਕਰਨ ਕਰਕੇ ਆਪਣੇ ਡੀਵਾਈਸਾਂ ਵਿਚਾਲੇ Chrome ਨੂੰ ਵਿਅਕਤੀਗਤ ਬਣਾਓ</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਚਾਹੁੰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਅੱਪਡੇਟ ਲਾਗੂ ਕਰਨ ਲਈ Chrome ਨੂੰ ਮੁੜ-ਲਾਂਚ ਕਰੋ}=1{ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਚਾਹੁੰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਅੱਪਡੇਟ ਲਾਗੂ ਕਰਨ ਲਈ Chrome ਨੂੰ ਮੁੜ-ਲਾਂਚ ਕਰੋ। ਤੁਹਾਡੀ ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋ ਦੁਬਾਰਾ ਨਹੀਂ ਖੁੱਲ੍ਹੇਗੀ।}other{ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਚਾਹੁੰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਅੱਪਡੇਟ ਲਾਗੂ ਕਰਨ ਲਈ Chrome ਨੂੰ ਮੁੜ-ਲਾਂਚ ਕਰੋ। ਤੁਹਾਡੀਆਂ # ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋ ਦੁਬਾਰਾ ਨਹੀਂ ਖੁੱਲ੍ਹਣਗੀਆਂ।}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Google Chrome ਦਾ ਇੱਕ ਨਵਾਂ ਵਰਜਨ ਉਪਲਬਧ ਹੈ ਅਤੇ ਇਹ ਪਹਿਲਾਂ ਨਾਲੋਂ ਵੱਧ ਤੇਜ਼ ਹੈ।</translation>
 <translation id="8614913330719544658">Google Chrome ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਿਹਾ ਹੈ। ਕੀ ਹੁਣੇ ਮੁੜ-ਲਾਂਚ ਕਰਨਾ ਹੈ?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 1 ਮਿੰਟ ਵਿੱਚ ਮੁੜ-ਲਾਂਚ ਹੋਵੇਗਾ}one{Chrome # ਮਿੰਟ ਵਿੱਚ ਮੁੜ-ਲਾਂਚ ਹੋਵੇਗਾ}other{Chrome # ਮਿੰਟਾਂ ਵਿੱਚ ਮੁੜ-ਲਾਂਚ ਹੋਵੇਗਾ}}</translation>
+<translation id="8641606876632989680">ਤੁਹਾਡੇ ਵੱਲੋਂ ਕਿਸੇ ਛੇੜਛਾੜ ਵਾਲੇ ਪਾਸਵਰਡ ਨਾਲ ਸਾਈਨ-ਇਨ ਕਰਨ 'ਤੇ Chrome ਤੁਹਾਨੂੰ ਸੂਚਿਤ ਕਰੇਗਾ</translation>
 <translation id="8669527147644353129">Google Chrome ਸਹਾਇਕ</translation>
 <translation id="8679801911857917785">ਇਹ ਇਸ ਨੂੰ ਵੀ ਕੰਟਰੋਲ ਕਰਦਾ ਹੈ ਕਿ ਜਦੋਂ ਤੁਸੀਂ Chrome ਨੂੰ ਸ਼ੁਰੂ ਕਰਦੇ ਹੋ ਤਾਂ ਕਿਹੜਾ ਪੰਨਾ ਦਿਖਾਇਆ ਜਾਵੇ।</translation>
 <translation id="870251953148363156">&amp;Google Chrome ਅੱਪਡੇਟ ਕਰੋ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pl.xtb b/chrome/app/resources/google_chrome_strings_pl.xtb
index 8122775d..6fb8395 100644
--- a/chrome/app/resources/google_chrome_strings_pl.xtb
+++ b/chrome/app/resources/google_chrome_strings_pl.xtb
@@ -47,6 +47,7 @@
 <translation id="2309047409763057870">To jest druga instalacja Google Chrome. Nie można ustawić jej jako przeglądarki domyślnej.</translation>
 <translation id="2341767445688917208">System operacyjny Chrome nie może zsynchronizować haseł. Napraw teraz.</translation>
 <translation id="2348335408836342058">Chrome potrzebuje uprawnień dostępu do aparatu i mikrofonu na tej stronie</translation>
+<translation id="234869673307233423">Chrome nie może sprawdzić Twoich haseł. Spróbuj później.</translation>
 <translation id="2429317896000329049">Google Chrome nie może zsynchronizować danych, ponieważ synchronizacja jest niedostępna w Twojej domenie.</translation>
 <translation id="2467438592969358367">Google Chrome chce wyeksportować Twoje hasła. Wpisz swoje hasło do Windows, by na to zezwolić.</translation>
 <translation id="2485422356828889247">Odinstaluj</translation>
@@ -61,6 +62,7 @@
 <translation id="2689103672227170538">To rozszerzenie ustawiło inną stronę wyświetlaną po uruchomieniu Chrome.</translation>
 <translation id="2765403129283291972">Chrome potrzebuje uprawnień dostępu do mikrofonu na tej stronie</translation>
 <translation id="2770231113462710648">Zmień przeglądarkę domyślną na:</translation>
+<translation id="2775140325783767197">Chrome nie może sprawdzić Twoich haseł. Sprawdź połączenie z internetem.</translation>
 <translation id="2799223571221894425">Uruchom ponownie</translation>
 <translation id="2847461019998147611">Wyświetlaj Google Chrome w tym języku</translation>
 <translation id="2857540653560290388">Uruchamiam Chrome…</translation>
@@ -79,10 +81,12 @@
 <translation id="3395323229510056640">Pomoc do Chrome OS</translation>
 <translation id="3396977131400919238">Podczas instalacji wystąpił błąd systemu operacyjnego. Pobierz Google Chrome ponownie.</translation>
 <translation id="3398288718845740432">Ukryj w menu Chrome</translation>
+<translation id="3434246496373299699">Chrome może sprawdzić Twoje hasła, gdy zalogujesz się na swoje konto Google.</translation>
 <translation id="3451115285585441894">Dodaję do Chrome...</translation>
 <translation id="345171907106878721">Dodaj siebie do Chrome</translation>
 <translation id="34857402635545079">Wyczyść też dane z Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome musi mieć dostęp do Twojej lokalizacji, by udostępnić ją tej stronie</translation>
+<translation id="3533694711092285624">Brak zapisanych haseł. Chrome może sprawdzać Twoje hasła, gdy je zapiszesz.</translation>
 <translation id="3576528680708590453">Administrator systemu skonfigurował Google Chrome w taki sposób, by strona <ph name="TARGET_URL_HOSTNAME" /> otwierała się w alternatywnej przeglądarce.</translation>
 <translation id="3582972582564653026">Synchronizuj dane Chrome i korzystaj z własnych ustawień przeglądarki na wielu urządzeniach</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administrator wymaga ponownego uruchomienia Chrome, by przeglądarka mogła zainstalować aktualizację}=1{Administrator wymaga ponownego uruchomienia Chrome, by przeglądarka mogła zainstalować aktualizację. Okno incognito nie otworzy się ponownie.}few{Administrator wymaga ponownego uruchomienia Chrome, by przeglądarka mogła zainstalować aktualizację. # okna incognito nie otworzą się ponownie.}many{Administrator wymaga ponownego uruchomienia Chrome, by przeglądarka mogła zainstalować aktualizację. # okien incognito nie otworzy się ponownie.}other{Administrator wymaga ponownego uruchomienia Chrome, by przeglądarka mogła zainstalować aktualizację. # okna incognito nie otworzy się ponownie.}}</translation>
@@ -228,6 +232,7 @@
 <translation id="8556340503434111824">Dostępna jest nowa, szybsza niż kiedykolwiek wersja przeglądarki Google Chrome.</translation>
 <translation id="8614913330719544658">Przeglądarka Google Chrome nie odpowiada. Uruchomić ją teraz ponownie?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome uruchomi się ponownie za minutę}few{Chrome uruchomi się ponownie za # minuty}many{Chrome uruchomi się ponownie za # minut}other{Chrome uruchomi się ponownie za # minuty}}</translation>
+<translation id="8641606876632989680">Chrome powiadomi Cię w razie logowania za pomocą przejętego hasła</translation>
 <translation id="8669527147644353129">Pomoc Google Chrome</translation>
 <translation id="8679801911857917785">Kontroluje także to, jaka strona wyświetla się po uruchomieniu Chrome.</translation>
 <translation id="870251953148363156">Aktualizuj &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
index e0dd2cf..8732fdd 100644
--- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb
+++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -47,6 +47,7 @@
 <translation id="2309047409763057870">Como esta é uma instalação secundária do Google Chrome, ele não pode se tornar seu navegador padrão.</translation>
 <translation id="2341767445688917208">O Chrome OS não pôde sincronizar suas senhas. Corrigir agora.</translation>
 <translation id="2348335408836342058">O Chrome precisa de permissão para este site acessar sua câmera e seu microfone</translation>
+<translation id="234869673307233423">O Chrome não pode verificar suas senhas. Tente mais tarde.</translation>
 <translation id="2429317896000329049">O Google Chrome não pôde sincronizar seus dados porque a sincronização não está disponível para seu domínio.</translation>
 <translation id="2467438592969358367">O Google Chrome quer exportar suas senhas. Digite sua senha do Windows para permitir isso.</translation>
 <translation id="2485422356828889247">Desinstalar</translation>
@@ -61,6 +62,7 @@
 <translation id="2689103672227170538">Esta extensão alterou a página que é exibida quando você inicia o Chrome.</translation>
 <translation id="2765403129283291972">O Chrome precisa de permissão para este site acessar seu microfone</translation>
 <translation id="2770231113462710648">Alterar navegador padrão para:</translation>
+<translation id="2775140325783767197">O Chrome não pode verificar suas senhas. Verifique sua conexão com a Internet.</translation>
 <translation id="2799223571221894425">Reiniciar</translation>
 <translation id="2847461019998147611">Exibir o Google Chrome neste idioma</translation>
 <translation id="2857540653560290388">Iniciando o Chrome…</translation>
@@ -79,10 +81,12 @@
 <translation id="3395323229510056640">Ajuda com o Chrome OS</translation>
 <translation id="3396977131400919238">Ocorreu um erro no sistema operacional durante a instalação. Baixe o Google Chrome novamente.</translation>
 <translation id="3398288718845740432">Esconder no menu do Google Chrome</translation>
+<translation id="3434246496373299699">O Chrome pode verificar suas senhas quando você faz login com sua Conta do Google</translation>
 <translation id="3451115285585441894">Adicionando ao Google Chrome...</translation>
 <translation id="345171907106878721">Cadastrar-se no Chrome</translation>
 <translation id="34857402635545079">Limpar também dados do Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">O Chrome precisa acessar seu local para compartilhá-lo com este site</translation>
+<translation id="3533694711092285624">Nenhuma senha salva. O Chrome poderá verificar suas senhas quando elas forem salvas.</translation>
 <translation id="3576528680708590453">O administrador do seu sistema configurou o Google Chrome para abrir um navegador alternativo ao acessar <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sincronize e personalize o Chrome em todos os seus dispositivos</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Seu administrador exige que você reinicie o Chrome para que uma atualização seja feita.}=1{Seu administrador exige que você reinicie o Chrome para que uma atualização seja feita. Sua janela anônima não será aberta novamente.}one{Seu administrador exige que você reinicie o Chrome para que uma atualização seja feita. Sua janela anônima não será aberta novamente.}other{Seu administrador exige que você reinicie o Chrome para que uma atualização seja feita. Suas # janelas anônimas não serão abertas novamente.}}</translation>
@@ -228,6 +232,7 @@
 <translation id="8556340503434111824">Há uma nova versão ainda mais rápida do Google Chrome disponível.</translation>
 <translation id="8614913330719544658">O Google Chrome não responde. Reiniciar agora?</translation>
 <translation id="8625237574518804553">{0,plural, =1{O Chrome será reiniciado em 1 minuto}one{O Chrome será reiniciado em # minuto}other{O Chrome será reiniciado em # minutos}}</translation>
+<translation id="8641606876632989680">O Chrome enviará uma notificação quando você fizer login com uma senha comprometida</translation>
 <translation id="8669527147644353129">Auxiliar do Google Chrome</translation>
 <translation id="8679801911857917785">Controla também qual página deve ser exibida quando você inicia o Chrome.</translation>
 <translation id="870251953148363156">Atualizar o Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-PT.xtb b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
index 176b11f1..92a3157 100644
--- a/chrome/app/resources/google_chrome_strings_pt-PT.xtb
+++ b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Esta é uma instalação secundária do Google Chrome, pelo que não pode tornar-se o navegador predefinido.</translation>
 <translation id="2341767445688917208">O Chrome OS não conseguiu sincronizar as suas palavras-passe. Corrija agora.</translation>
 <translation id="2348335408836342058">O Chrome necessita de autorização de acesso à câmara e ao microfone para este site.</translation>
+<translation id="234869673307233423">O Chrome não consegue verificar as suas palavras-passe. Tente novamente mais tarde.</translation>
 <translation id="2429317896000329049">O Google Chrome não conseguiu sincronizar os dados porque a Sincronização não está disponível para o seu domínio.</translation>
 <translation id="2467438592969358367">O Google Chrome pretende exportar as suas palavras-passe. Escreva a sua palavra-passe do Windows para permitir esta ação.</translation>
 <translation id="2485422356828889247">Desinstalar</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Esta extensão alterou a página apresentada quando inicia o Chrome.</translation>
 <translation id="2765403129283291972">O Chrome necessita de autorização de acesso ao microfone para este site.</translation>
 <translation id="2770231113462710648">Alterar o navegador predefinido para:</translation>
+<translation id="2775140325783767197">O Chrome não consegue verificar as suas palavras-passe. Experimente verificar a sua ligação à Internet.</translation>
 <translation id="2799223571221894425">Reiniciar</translation>
 <translation id="2847461019998147611">Apresentar o Google Chrome neste idioma</translation>
 <translation id="2857540653560290388">A iniciar o Chrome…</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Obter ajuda relacionada com o Chrome OS</translation>
 <translation id="3396977131400919238">Ocorreu um erro no sistema operativo durante a instalação. Transfira de novo o Google Chrome.</translation>
 <translation id="3398288718845740432">Ocultar no menu do Chrome</translation>
+<translation id="3434246496373299699">O Chrome pode verificar as suas palavras-passe quando inicia sessão com a sua Conta Google.</translation>
 <translation id="3451115285585441894">A adicionar ao Chrome...</translation>
 <translation id="345171907106878721">Adicionar-se ao Chrome</translation>
 <translation id="34857402635545079">Limpar também os dados do Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">O Chrome necessita de acesso à sua localização para a partilhar com este site.</translation>
+<translation id="3533694711092285624">Não existem palavras-passe guardadas. O Chrome consegue verificar as suas palavras-passe quando as guarda.</translation>
 <translation id="3576528680708590453">O administrador do seu sistema configurou o Google Chrome para abrir um navegador alternativo, de modo a aceder a <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sincronizar e personalizar o Chrome em todos os dispositivos</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{O seu administrador necessita que reinicie o Chrome para aplicar uma atualização.}=1{O seu administrador necessita que reinicie o Chrome para aplicar uma atualização. Não é possível reabrir a sua janela de navegação anónima.}other{O seu administrador necessita que reinicie o Chrome para aplicar uma atualização. Não é possível reabrir as suas # janelas de navegação anónima.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Está disponível uma nova versão do Google Chrome, mais rápida do que nunca.</translation>
 <translation id="8614913330719544658">O Google Chrome não responde. Reiniciar agora?</translation>
 <translation id="8625237574518804553">{0,plural, =1{O Chrome será reiniciado dentro de 1 minuto}other{O Chrome será reiniciado dentro de # minutos}}</translation>
+<translation id="8641606876632989680">O Chrome envia-lhe uma notificação quando iniciar sessão com uma palavra-passe comprometida.</translation>
 <translation id="8669527147644353129">Ajudante do Google Chrome</translation>
 <translation id="8679801911857917785">Também controla a página apresentada quando inicia o Chrome.</translation>
 <translation id="870251953148363156">Atualizar o &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb
index 5653f8c..fd31b90 100644
--- a/chrome/app/resources/google_chrome_strings_ro.xtb
+++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Aceasta este o instalare secundară a browserului Google Chrome și nu poate fi setat ca browser prestabilit.</translation>
 <translation id="2341767445688917208">Sistemul de operare Chrome nu a putut sincroniza parolele. Remediază acum.</translation>
 <translation id="2348335408836342058">Chrome are nevoie de permisiune ca să acceseze camera foto și microfonul pentru acest site</translation>
+<translation id="234869673307233423">Chrome nu îți poate verifica parolele. Încearcă din nou mai târziu.</translation>
 <translation id="2429317896000329049">Google Chrome nu a putut sincroniza datele, deoarece sincronizarea nu este disponibilă pentru domeniul dvs.</translation>
 <translation id="2467438592969358367">Google Chrome vrea să îți exporte parolele. Pentru a permite asta, introdu parola pentru Windows.</translation>
 <translation id="2485422356828889247">Dezinstalează</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Această extensie a modificat ce pagină se afișează când pornești Chrome.</translation>
 <translation id="2765403129283291972">Chrome are nevoie de permisiune ca să acceseze microfonul pentru acest site</translation>
 <translation id="2770231113462710648">Schimbă browserul prestabilit la:</translation>
+<translation id="2775140325783767197">Chrome nu îți poate verifica parolele. Verifică-ți conexiunea la internet.</translation>
 <translation id="2799223571221894425">Repornește</translation>
 <translation id="2847461019998147611">Afișează Google Chrome în această limbă</translation>
 <translation id="2857540653560290388">Se lansează Chrome...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Obține ajutor privind sistemul de operare Chrome</translation>
 <translation id="3396977131400919238">S-a produs o eroare de sistem de operare în timpul instalării. Descarcă din nou Google Chrome.</translation>
 <translation id="3398288718845740432">Ascunde în meniul Chrome</translation>
+<translation id="3434246496373299699">Chrome poate să îți verifice parolele atunci când te conectezi folosind Contul Google</translation>
 <translation id="3451115285585441894">Se adaugă la Chrome...</translation>
 <translation id="345171907106878721">Adăugați-vă la Chrome</translation>
 <translation id="34857402635545079">Șterge și datele din Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome are nevoie de acces la locația ta ca să permită accesul la locație pentru acest site</translation>
+<translation id="3533694711092285624">Nu există parole salvate. Chrome îți poate verifica parolele dacă le salvezi.</translation>
 <translation id="3576528680708590453">Administratorul sistemului a configurat Google Chrome astfel încât să deschidă un browser secundar pentru a accesa <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sincronizează și personalizează Chrome pe toate dispozitivele</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administratorul solicită să relansezi Chrome pentru a aplica o actualizare}=1{Administratorul solicită să relansezi Chrome pentru a aplica o actualizare. Fereastra incognito nu se va mai deschide.}few{Administratorul solicită să relansezi Chrome pentru a aplica o actualizare. Cele # ferestre incognito nu se vor mai deschide.}other{Administratorul solicită să relansezi Chrome pentru a aplica o actualizare. Cele # de ferestre incognito nu se vor mai deschide.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Este disponibilă o nouă versiune de Google Chrome, iar aceasta este mai rapidă ca oricând.</translation>
 <translation id="8614913330719544658">Google Chrome nu mai răspunde. Îl repornești acum?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome se va relansa într-un minut}few{Chrome se va relansa în # minute}other{Chrome se va relansa în # de minute}}</translation>
+<translation id="8641606876632989680">Chrome te va anunța dacă te conectezi folosind o parolă compromisă</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Stabilește și ce pagină se afișează când porniți Chrome.</translation>
 <translation id="870251953148363156">Actualizați &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb
index 5621f35c..e8e782c 100644
--- a/chrome/app/resources/google_chrome_strings_ru.xtb
+++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -47,6 +47,7 @@
 <translation id="2309047409763057870">Это дополнительная установка Google Chrome. Его нельзя сделать браузером по умолчанию.</translation>
 <translation id="2341767445688917208">Не удалось синхронизировать пароли. Войдите, чтобы исправить эту ошибку.</translation>
 <translation id="2348335408836342058">Для этого сайта Chrome запрашивает доступ к камере и микрофону.</translation>
+<translation id="234869673307233423">Не удается запустить проверку паролей в Chrome. Повторите попытку позже.</translation>
 <translation id="2429317896000329049">Google Chrome не удалось синхронизировать данные, поскольку служба Sync недоступна для вашего домена.</translation>
 <translation id="2467438592969358367">Чтобы экспортировать пароли из Google Chrome, введите пароль своего аккаунта Windows.</translation>
 <translation id="2485422356828889247">Удалить</translation>
@@ -61,6 +62,7 @@
 <translation id="2689103672227170538">Расширение изменило стартовую страницу Chrome.</translation>
 <translation id="2765403129283291972">Для этого сайта Chrome запрашивает доступ к микрофону.</translation>
 <translation id="2770231113462710648">Назначить браузером по умолчанию:</translation>
+<translation id="2775140325783767197">Не удается запустить проверку паролей в Chrome. Проверьте подключение к Интернету.</translation>
 <translation id="2799223571221894425">Перезапустить</translation>
 <translation id="2847461019998147611">Отображать Google Chrome на этом языке</translation>
 <translation id="2857540653560290388">Запуск Chrome...</translation>
@@ -79,10 +81,12 @@
 <translation id="3395323229510056640">Справка Chrome OS</translation>
 <translation id="3396977131400919238">При установке произошла ошибка операционной системы. Скачайте Google Chrome снова.</translation>
 <translation id="3398288718845740432">Не показывать в Меню Google Chrome</translation>
+<translation id="3434246496373299699">Chrome сможет проверить ваши пароли, когда вы войдете в аккаунт Google.</translation>
 <translation id="3451115285585441894">Установка...</translation>
 <translation id="345171907106878721">Добавить пользователя Chrome</translation>
 <translation id="34857402635545079">Также удалить данные из Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Для этого сайта Chrome запрашивает доступ к данным о вашем местоположении.</translation>
+<translation id="3533694711092285624">Сохраненных паролей нет. Чтобы браузер Chrome мог проверять пароли, сохраните их.</translation>
 <translation id="3576528680708590453">Ваш системный администратор задал настройки, согласно которым Google Chrome должен запускать альтернативный браузер для доступа к сайту <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Синхронизируйте данные Chrome на всех устройствах</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Администратор требует перезапустить Chrome для установки обновления.}=1{Администратор требует перезапустить Chrome для установки обновления. Окно в режиме инкогнито не будет открыто повторно.}one{Администратор требует перезапустить Chrome для установки обновления. # окно в режиме инкогнито не будет открыто повторно.}few{Администратор требует перезапустить Chrome для установки обновления. # окна в режиме инкогнито не будут открыты повторно.}many{Администратор требует перезапустить Chrome для установки обновления. # окон в режиме инкогнито не будут открыты повторно.}other{Администратор требует перезапустить Chrome для установки обновления. # окна в режиме инкогнито не будут открыты повторно.}}</translation>
@@ -228,6 +232,7 @@
 <translation id="8556340503434111824">Доступна новая версия Google Chrome, которая стала еще быстрее.</translation>
 <translation id="8614913330719544658">Google Chrome не отвечает. Перезапустить сейчас?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome перезапустится через 1 минуту}one{Chrome перезапустится через # минуту}few{Chrome перезапустится через # минуты}many{Chrome перезапустится через # минут}other{Chrome перезапустится через # минуты}}</translation>
+<translation id="8641606876632989680">Вы получите уведомление от Chrome, если войдете в аккаунт с паролем, который был раскрыт.</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Кроме того, расширение изменило стартовую страницу Chrome.</translation>
 <translation id="870251953148363156">Обновить &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_si.xtb b/chrome/app/resources/google_chrome_strings_si.xtb
index fa8dfa1..8f3c0c0 100644
--- a/chrome/app/resources/google_chrome_strings_si.xtb
+++ b/chrome/app/resources/google_chrome_strings_si.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">මෙය Google Chrome හි දෙවන ස්ථාපනයක් වන අතර, ඔබේ පෙරනිමි බ්‍රව්සරය කළ නොහැකිය.</translation>
 <translation id="2341767445688917208">Chrome OS හට ඔබේ මුරපද සමමුහූර්ත කිරීමට නොහැකි විය. දැන් නිරාකරණ කරන්න.</translation>
 <translation id="2348335408836342058">Chrome හට මෙම අඩවිය සදහා ඔබේ කැමරාවට සහ මයික්‍රෆෝනයට ප්‍රවේශ වීමට අවසර අවශ්‍යයි</translation>
+<translation id="234869673307233423">Chrome හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. පසුව නැවත උත්සාහ කරන්න.</translation>
 <translation id="2429317896000329049">ඔබේ වසම සඳහා සම්මුහු නොපවතින බැවින් Google Chrome හට ඔබේ දත්ත සම්මුහු කළ නොහැකි විය.</translation>
 <translation id="2467438592969358367">Google Chrome හට ඔබගේ මුරපද නිර්යාත කිරීමට අවශ්‍යය. මේ සඳහා අවසර දීමට ඔබගේ Windows මුරපදය ටයිප් කරන්න.</translation>
 <translation id="2485422356828889247">අස්ථාපනය</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">මෙම දිගුව විසින් ඔබ Chrome ආරම්භ කරන විට පෙන්වන පිටුව වෙනස් කර ඇත.</translation>
 <translation id="2765403129283291972">Chrome හට මෙම අඩවිය සදහා ඔබේ මයික්‍රෆෝනයට ප්‍රවේශ වීමට අවසර අවශ්‍යයි</translation>
 <translation id="2770231113462710648">පෙර නිමි බ්‍රවුසරය වෙනස් කරන්න:</translation>
+<translation id="2775140325783767197">Chrome හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැක. ඔබේ අන්තර්ජාල සම්බන්ධතාව පරීක්‍ෂා කිරීමට උත්සාහ කරන්න.</translation>
 <translation id="2799223571221894425">නැවත දියත් කරන්න</translation>
 <translation id="2847461019998147611">මෙම භාෂාවෙන් Google Chrome දර්ශනය කරන්න</translation>
 <translation id="2857540653560290388">Chrome දියත් කරමින්...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Chrome OS සමගින් උදවු ලබා ගන්න</translation>
 <translation id="3396977131400919238">ස්ථාපනය අතරතුර මෙහෙයුම් පද්ධති දෝෂයක් මතුවිය. නැවතත් Google ක්‍රෝම් බාගෙන උත්සාහ කරන්න.</translation>
 <translation id="3398288718845740432">Chrome මෙනුව තුළ සඟවන්න</translation>
+<translation id="3434246496373299699">ඔබ ඔබේ Google ගිණුම මඟින් පුරන විට Chrome ඔබේ මුරපද පරීක්‍ෂා කළ හැක</translation>
 <translation id="3451115285585441894">Chrome වෙත එක් කරමින්...</translation>
 <translation id="345171907106878721">ඔබව Chromeවෙත එක් කරන්න</translation>
 <translation id="34857402635545079">Chrome වෙතින් ද දත්ත හිස් කරන්න (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome හට මෙම අඩවිය සමඟ ඔබේ ස්ථානය බෙදා ගැනීමට ඔබේ ස්ථානයට ප්‍රවේශය අවශ්‍යයි</translation>
+<translation id="3533694711092285624">සුරැකි මුරපද නැත. ඔබ ඔබේ මුරපද පරීක්‍ෂා කරන විට Chrome හට ඒවා පරීක්‍ෂා කළ හැක.</translation>
 <translation id="3576528680708590453">ඔබේ පද්ධති පරිපාලකයා <ph name="TARGET_URL_HOSTNAME" /> වෙත ප්‍රවේශ වීමට වෛකල්පික බ්‍රවුසරයක් විවෘත කිරීමට Google Chrome වින්‍යාස කර ඇත.</translation>
 <translation id="3582972582564653026">ඔබගේ උපාංග හරහා Chrome සමමුහුර්ත කර පෞද්ගලීකරණය කරන්න</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{යාවත්කාලීනයක් යෙදීමට ඔබ Chrome නැවත ආරම්භ කිරීම පරිපාලකයාට අවශ්‍ය වේ}=1{යාවත්කාලීනයක් යෙදීමට ඔබ Chrome නැවත ආරම්භ කිරීම පරිපාලකයාට අවශ්‍ය වේ. ඔබේ අප්‍රසිද්ධ කවුළුව යළි විවෘත නොවෙයි.}one{යාවත්කාලීනයක් යෙදීමට ඔබ Chrome නැවත ආරම්භ කිරීම පරිපාලකයාට අවශ්‍ය වේ. ඔබේ අප්‍රසිද්ධ කවුළු # යළි විවෘත නොවෙයි.}other{යාවත්කාලීනයක් යෙදීමට ඔබ Chrome නැවත ආරම්භ කිරීම පරිපාලකයාට අවශ්‍ය වේ. ඔබේ අප්‍රසිද්ධ කවුළු # යළි විවෘත නොවෙයි.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Google Chrome හි නව සංස්කරණයක් පවතී, එය සැමදාටම වඩා වේගවත්.</translation>
 <translation id="8614913330719544658">Google Chrome ප්‍රතිචාර නොදක්වයි. යළි දියත් කරන්නද?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 1 විනාඩියකින් යළි දියත් වෙයි}one{Chrome විනාඩි # කින් යළි දියත් වෙයි}other{Chrome විනාඩි # කින් යළි දියත් වෙයි}}</translation>
+<translation id="8641606876632989680">ඔබ සමථයට පත් වූ මුරපදයක් සමඟ පුරන විට Chrome ඔබට දැනුම් දෙයි</translation>
 <translation id="8669527147644353129">Google Chrome උදව් කරන්නා</translation>
 <translation id="8679801911857917785">තවද එය ඔබ Chrome ආරම්භයේදී දකින පිටුවද වෙනස් කරයි.</translation>
 <translation id="870251953148363156">Google Chrome යාවත්කාලීන කරන්න</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb
index 1f6fe54f..8b60f00 100644
--- a/chrome/app/resources/google_chrome_strings_sk.xtb
+++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -49,6 +49,7 @@
 <translation id="2309047409763057870">Toto je sekundárna inštalácia prehliadača Google Chrome – nemôže byť nastavený ako váš predvolený prehliadač.</translation>
 <translation id="2341767445688917208">Systému Chrome OS sa nepodarilo synchronizovať vaše heslá. Opraviť.</translation>
 <translation id="2348335408836342058">Chrome potrebuje povolenie pre tento web na prístup k fotoaparátu a mikrofónu</translation>
+<translation id="234869673307233423">Chrome nemôže skontrolovať heslá. Skúste to znova neskôr.</translation>
 <translation id="2429317896000329049">Prehliadaču Google Chrome sa nepodarilo synchronizovať vaše údaje, pretože možnosť synchronizácie nie je pre vašu doménu k dispozícii.</translation>
 <translation id="2467438592969358367">Google Chrome sa pokúša exportovať vaše heslá. Ak to chcete povoliť, zadajte heslo systému Windows.</translation>
 <translation id="2485422356828889247">Odinštalovať</translation>
@@ -63,6 +64,7 @@
 <translation id="2689103672227170538">Toto rozšírenie zmenilo stránku, ktorá sa zobrazí pri spustení prehliadača Chrome.</translation>
 <translation id="2765403129283291972">Chrome potrebuje povolenie pre tento web na prístup k mikrofónu</translation>
 <translation id="2770231113462710648">Zmeniť predvolený prehliadač na:</translation>
+<translation id="2775140325783767197">Chrome nemôže skontrolovať heslá. Skontrolujte internetové pripojenie.</translation>
 <translation id="2799223571221894425">Znova spustiť</translation>
 <translation id="2847461019998147611">Zobrazovať Google Chrome v tomto jazyku</translation>
 <translation id="2857540653560290388">Spúšťa sa Chrome…</translation>
@@ -81,10 +83,12 @@
 <translation id="3395323229510056640">Pomoc so systémom Chrome OS</translation>
 <translation id="3396977131400919238">V priebehu inštalácie sa vyskytla chyba operačného systému. Stiahnite prehliadač Google Chrome znova.</translation>
 <translation id="3398288718845740432">Skryť v Ponuke Chrome</translation>
+<translation id="3434246496373299699">Keď sa prihlásite pomocou účtu Google, Chrome môže skontrolovať vaše heslá</translation>
 <translation id="3451115285585441894">Prebieha pridávanie do prehliadača Chrome...</translation>
 <translation id="345171907106878721">Pridajte si účet do prehliadača Chrome</translation>
 <translation id="34857402635545079">Tiež vymazať údaje z Chromu (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome potrebuje prístup k vašej polohe, aby ju mohol zdieľať s týmto webom</translation>
+<translation id="3533694711092285624">Žiadne uložené heslá. Chrome môže skontrolovať heslá, keď ich uložíte.</translation>
 <translation id="3576528680708590453">Správca systému nakonfiguroval Google Chrome, aby web <ph name="TARGET_URL_HOSTNAME" /> otváral v alternatívnom prehliadači.</translation>
 <translation id="3582972582564653026">Synchronizujte a prispôsobte si Chrome v rôznych zariadeniach</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Správca požaduje nové spustenie Chromu, aby sa použila aktualizácia}=1{Správca požaduje nové spustenie Chromu, aby sa použila aktualizácia. Vaše okno inkognito sa neotvorí.}few{Správca požaduje nové spustenie Chromu, aby sa použila aktualizácia. Vaše # okná inkognito sa neotvoria.}many{Správca požaduje nové spustenie Chromu, aby sa použila aktualizácia. Your # Incognito windows won't reopen.}other{Správca požaduje nové spustenie Chromu, aby sa použila aktualizácia. Vašich # okien inkognito sa neotvorí.}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">K dispozícii je nová verzia prehliadača Google Chrome, ktorá je rýchlejšia ako kedykoľvek predtým.</translation>
 <translation id="8614913330719544658">Google Chrome nereaguje. Chcete ho spustiť znova?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome sa reštartuje o 1 minútu}few{Chrome sa reštartuje o # minúty}many{Chrome sa reštartuje o # minúty}other{Chrome sa reštartuje o # minút}}</translation>
+<translation id="8641606876632989680">Chrome vás upozorní, keď sa prihlásite pomocou prelomeného hesla</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Tiež určuje, ktorá stránka sa zobrazí pri spustení prehliadača Chrome.</translation>
 <translation id="870251953148363156">Aktualizácia prehliadača &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb
index 31641f03..0b64799 100644
--- a/chrome/app/resources/google_chrome_strings_sl.xtb
+++ b/chrome/app/resources/google_chrome_strings_sl.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">To je sekundarna namestitev Google Chroma in ga ni mogoče nastaviti kot privzeti brskalnik.</translation>
 <translation id="2341767445688917208">OS Chrome ni mogel sinhronizirati gesel. Odpravite težavo.</translation>
 <translation id="2348335408836342058">Chrome potrebuje dovoljenje za dostop do fotoaparata in mikrofona za to spletno mesto</translation>
+<translation id="234869673307233423">Chrome ne more preveriti vaših gesel. Poskusite pozneje.</translation>
 <translation id="2429317896000329049">Google Chrome ni mogel sinhronizirati podatkov, ker sinhronizacija ni na voljo za vašo domeno.</translation>
 <translation id="2467438592969358367">Google Chrome želi izvoziti gesla. Če želite omogočiti to, vnesite geslo za Windows.</translation>
 <translation id="2485422356828889247">Odmeščanje</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Zaradi te razširitve se je spremenila stran, ki je prikazana, ko zaženete Chrome.</translation>
 <translation id="2765403129283291972">Chrome potrebuje dovoljenje za dostop do mikrofona za to spletno mesto</translation>
 <translation id="2770231113462710648">Spremeni privzeti brskalnik na:</translation>
+<translation id="2775140325783767197">Chrome ne more preveriti vaših gesel. Poskusite preveriti internetno povezavo.</translation>
 <translation id="2799223571221894425">Vnovičen zagon</translation>
 <translation id="2847461019998147611">Prikaži Google Chrome v tem jeziku</translation>
 <translation id="2857540653560290388">Zagon Chroma …</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Pomoč za OS Chrome</translation>
 <translation id="3396977131400919238">Med namestitvijo je prišlo do napake v operacijskem sistemu. Ponovno prenesite program Google Chrome.</translation>
 <translation id="3398288718845740432">Skrij v meniju Chroma</translation>
+<translation id="3434246496373299699">Chrome lahko preveri vaša gesla, ko se prijavite z računom Google</translation>
 <translation id="3451115285585441894">Dodajanje v Chrome ...</translation>
 <translation id="345171907106878721">Dodajte se v Chrome</translation>
 <translation id="34857402635545079">Počisti tudi podatke iz Chroma (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome potrebuje dostop do vaše lokacije, da jo bo lahko delil s tem spletnim mestom</translation>
+<translation id="3533694711092285624">Ni shranjenih gesel. Chrome lahko preveri gesla, če jih shranite.</translation>
 <translation id="3576528680708590453">Skrbnik sistema je Google Chrome nastavil tako, da za dostop do <ph name="TARGET_URL_HOSTNAME" /> odpre drug brskalnik.</translation>
 <translation id="3582972582564653026">V vseh svojih napravah sinhronizirajte in prilagodite Chrome</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome.}=1{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome. Okno brez beleženja zgodovine se ne bo znova odprlo.}one{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome. # okno brez beleženja zgodovine se ne bo znova odprlo.}two{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome. # okni brez beleženja zgodovine se ne bosta znova odprli.}few{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome. # okna brez beleženja zgodovine se ne bodo znova odprla.}other{Skrbnik zahteva, da za uveljavitev te posodobitve znova zaženete Chrome. # oken brez beleženja zgodovine se ne bo znova odprlo.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Na voljo je nova različica Google Chroma, ki je najhitrejša doslej.</translation>
 <translation id="8614913330719544658">Google Chrome se ne odziva. Ga želite znova zagnati?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome se bo znova zagnal čez eno minuto}one{Chrome se bo znova zagnal čez # minuto}two{Chrome se bo znova zagnal čez # minuti}few{Chrome se bo znova zagnal čez # minute}other{Chrome se bo znova zagnal čez # minut}}</translation>
+<translation id="8641606876632989680">Chrome vas bo obvestil, če se prijavite z ogroženim geslom</translation>
 <translation id="8669527147644353129">Pomočnik za Google Chrome</translation>
 <translation id="8679801911857917785">Določa tudi, katera stran je prikazana, ko zaženete Chrome.</translation>
 <translation id="870251953148363156">Posodabljanje &amp;Google Chroma</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sq.xtb b/chrome/app/resources/google_chrome_strings_sq.xtb
index 3d93f477..dfc07a21 100644
--- a/chrome/app/resources/google_chrome_strings_sq.xtb
+++ b/chrome/app/resources/google_chrome_strings_sq.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Ky është instalim dytësor i Google Chrome dhe nuk mund të bëhet shfletuesi yt i parazgjedhur.</translation>
 <translation id="2341767445688917208">Sistemi operativ Chrome nuk mund t'i sinkronizonte fjalëkalimet e tua. Rregulloje tani.</translation>
 <translation id="2348335408836342058">Chrome ka nevojë për leje për t'u qasur te kamera dhe mikrofoni yt për këtë sajt</translation>
+<translation id="234869673307233423">Chrome nuk mund t'i kontrollojë fjalëkalimet e tua. Provo përsëri më vonë.</translation>
 <translation id="2429317896000329049">Google Chrome nuk mund t'i sinkronizonte të dhënat për shkak se sinkronizimi nuk ofrohet për domenin tënd.</translation>
 <translation id="2467438592969358367">Google Chrome dëshiron të eksportojë fjalëkalimet e tua. Shkruaj fjalëkalimin tënd të Windows për ta lejuar këtë.</translation>
 <translation id="2485422356828889247">Çinstalo</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Kjo shtesë ka ndryshuar se cila faqe shfaqet kur nis Chrome.</translation>
 <translation id="2765403129283291972">Chrome ka nevojë për leje për t'u qasur te mikrofoni yt për këtë sajt</translation>
 <translation id="2770231113462710648">Ndrysho shfletuesin me parazgjedhje në:</translation>
+<translation id="2775140325783767197">Chrome nuk mund t'i kontrollojë fjalëkalimet e tua. Provo të kontrollosh lidhjen e internetit.</translation>
 <translation id="2799223571221894425">Nis sërish</translation>
 <translation id="2847461019998147611">Shfaq Google Chrome në këtë gjuhë</translation>
 <translation id="2857540653560290388">Po hapet Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Merr ndihmë për Chrome OS</translation>
 <translation id="3396977131400919238">Ndodhi një gabim në sistemin operativ gjatë instalimit. Shkarko përsëri Google Chrome.</translation>
 <translation id="3398288718845740432">Fshih në Menynë e Chrome</translation>
+<translation id="3434246496373299699">Chrome mund t'i kontrollojë fjalëkalimet e tua kur të identifikohesh me "Llogarinë tënde të Google"</translation>
 <translation id="3451115285585441894">Po shton te Chrome...</translation>
 <translation id="345171907106878721">Shtoje veten te Chrome</translation>
 <translation id="34857402635545079">Pastro po ashtu të dhënat nga Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome ka nevojë për qasje te vendndodhja jote për të ndarë vendndodhjen me këtë sajt</translation>
+<translation id="3533694711092285624">Nuk ka asnjë fjalëkalim të ruajtur. Chrome mund t'i kontrollojë fjalëkalimet e tua kur ti i ruan ato.</translation>
 <translation id="3576528680708590453">Administratori i sistemit ka konfiguruar Google Chrome që të hapë një shfletues alternativ për t'u qasur te <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sinkronizo dhe personalizo Chrome nëpër pajisjet e tua</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administratori yt kërkon që të hapësh përsëri Chrome për të zbatuar këtë përditësim}=1{Administratori yt kërkon që të hapësh përsëri Chrome për të zbatuar këtë përditësim Dritarja jote "e fshehtë" nuk do të rihapet.}other{Administratori yt kërkon që të hapësh përsëri Chrome për të zbatuar këtë përditësim # dritaret e tua "të fshehta" nuk do të rihapen.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Ofrohet një version i ri i Google Chrome dhe është më i shpejtë se kurrë.</translation>
 <translation id="8614913330719544658">Google Chrome nuk përgjigjet. Dëshiron ta hapësh sërish tani?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome do të hapet përsëri për 1 minutë}other{Chrome do të hapet përsëri për # minuta}}</translation>
+<translation id="8641606876632989680">Chrome do të të njoftojë kur të identifikohesh me një fjalëkalim të komprometuar</translation>
 <translation id="8669527147644353129">Ndihmësi i Google Chrome</translation>
 <translation id="8679801911857917785">Kontrollon gjithashtu se cila faqe shfaqet kur fillon Chrome.</translation>
 <translation id="870251953148363156">Përditëso Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
index c6f12a3..a4338b2a 100644
--- a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Ovo je sekundarna instalacija Google Chrome-a pa ne možete da ga podesite kao podrazumevani pregledač.</translation>
 <translation id="2341767445688917208">Chrome OS nije uspeo da sinhronizuje lozinke. Rešite problem.</translation>
 <translation id="2348335408836342058">Chrome traži dozvolu da pristupi kameri i mikrofonu za ovaj sajt</translation>
+<translation id="234869673307233423">Chrome ne može da vam proverava lozinke. Probajte ponovo kasnije.</translation>
 <translation id="2429317896000329049">Google Chrome ne može da sinhronizuje podatke jer Sinhronizacija nije dostupna za domen.</translation>
 <translation id="2467438592969358367">Google Chrome želi da izveze lozinke. Unesite lozinku za Windows da biste to omogućili.</translation>
 <translation id="2485422356828889247">Deinstaliraj</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Ovaj dodatak je promenio stranicu koja se prikazuje kada pokrenete Chrome.</translation>
 <translation id="2765403129283291972">Chrome traži dozvolu da pristupi mikrofonu za ovaj sajt</translation>
 <translation id="2770231113462710648">Promeni podrazumevani pregledač u:</translation>
+<translation id="2775140325783767197">Chrome ne može da vam proverava lozinke. Proverite internet vezu.</translation>
 <translation id="2799223571221894425">Ponovo pokreni</translation>
 <translation id="2847461019998147611">Prikazuj Google Chrome na ovom jeziku</translation>
 <translation id="2857540653560290388">Pokreće se Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Pronađite pomoć za Chrome OS</translation>
 <translation id="3396977131400919238">Tokom instalacije je došlo do greške u operativnom sistemu. Preuzmite Google Chrome ponovo.</translation>
 <translation id="3398288718845740432">Sakrij u Chrome meniju</translation>
+<translation id="3434246496373299699">Chrome može da vam proverava lozinke kada se prijavite pomoću Google naloga</translation>
 <translation id="3451115285585441894">Dodavanje u Chrome...</translation>
 <translation id="345171907106878721">Dodajte sebe u Chrome</translation>
 <translation id="34857402635545079">Obriši podatke i iz Chrome-a (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome traži pristup vašoj lokaciji da biste je delili sa ovim sajtom</translation>
+<translation id="3533694711092285624">Nema sačuvanih lozinki. Chrome može da proverava lozinke kada ih sačuvate.</translation>
 <translation id="3576528680708590453">Administrator sistema je konfigurisao Chrome da otvara alternativni pregledač za pristup URL-u <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sinhronizujte i personalizujte Chrome na svim uređajima</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administrator zahteva da ponovo pokrenete Chrome da biste primenili ažuriranje}=1{Administrator zahteva da ponovo pokrenete Chrome da biste primenili ažuriranje. Prozor bez arhiviranja se neće ponovo otvoriti.}one{Administrator zahteva da ponovo pokrenete Chrome da biste primenili ažuriranje. # prozor bez arhiviranja se neće ponovo otvoriti.}few{Administrator zahteva da ponovo pokrenete Chrome da biste primenili ažuriranje. # prozora bez arhiviranja se neće ponovo otvoriti.}other{Administrator zahteva da ponovo pokrenete Chrome da biste primenili ažuriranje. # prozora bez arhiviranja se neće ponovo otvoriti.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Dostupna je nova verzija Google Chrome pregledača, brža nego ikad pre.</translation>
 <translation id="8614913330719544658">Google Chrome ne reaguje. Želite li da ga odmah ponovo pokrenete?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Ponovo ćemo pokrenuti Chrome za 1 minut}one{Ponovo ćemo pokrenuti Chrome za # minut}few{Ponovo ćemo pokrenuti Chrome za # minuta}other{Ponovo ćemo pokrenuti Chrome za # minuta}}</translation>
+<translation id="8641606876632989680">Chrome će vas obavestiti kada se prijavite pomoću ugrožene lozinke</translation>
 <translation id="8669527147644353129">Google Chrome pomoćnik</translation>
 <translation id="8679801911857917785">Kontroliše i stranicu koja se prikazuje kada pokrenete Chrome.</translation>
 <translation id="870251953148363156">Ažuriraj &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb
index 5d56ee3c..84de897e 100644
--- a/chrome/app/resources/google_chrome_strings_sr.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Ово је секундарна инсталација Google Chrome-а па не можете да га подесите као подразумевани прегледач.</translation>
 <translation id="2341767445688917208">Chrome ОС није успео да синхронизује лозинке. Решите проблем.</translation>
 <translation id="2348335408836342058">Chrome тражи дозволу да приступи камери и микрофону за овај сајт</translation>
+<translation id="234869673307233423">Chrome не може да вам проверава лозинке. Пробајте поново касније.</translation>
 <translation id="2429317896000329049">Google Chrome не може да синхронизује податке јер Синхронизација није доступна за домен.</translation>
 <translation id="2467438592969358367">Google Chrome жели да извезе лозинке. Унесите лозинку за Windows да бисте то омогућили.</translation>
 <translation id="2485422356828889247">Деинсталирај</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Овај додатак је променио страницу која се приказује када покренете Chrome.</translation>
 <translation id="2765403129283291972">Chrome тражи дозволу да приступи микрофону за овај сајт</translation>
 <translation id="2770231113462710648">Промени подразумевани прегледач у:</translation>
+<translation id="2775140325783767197">Chrome не може да вам проверава лозинке. Проверите интернет везу.</translation>
 <translation id="2799223571221894425">Поново покрени</translation>
 <translation id="2847461019998147611">Приказуј Google Chrome на овом језику</translation>
 <translation id="2857540653560290388">Покреће се Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Пронађите помоћ за Chrome OS</translation>
 <translation id="3396977131400919238">Током инсталације је дошло до грешке у оперативном систему. Преузмите Google Chrome поново.</translation>
 <translation id="3398288718845740432">Сакриј у Chrome менију</translation>
+<translation id="3434246496373299699">Chrome може да вам проверава лозинке када се пријавите помоћу Google налога</translation>
 <translation id="3451115285585441894">Додавање у Chrome...</translation>
 <translation id="345171907106878721">Додајте себе у Chrome</translation>
 <translation id="34857402635545079">Обриши податке и из Chrome-а (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome тражи приступ вашој локацији да бисте је делили са овим сајтом</translation>
+<translation id="3533694711092285624">Нема сачуваних лозинки. Chrome може да проверава лозинке када их сачувате.</translation>
 <translation id="3576528680708590453">Администратор система је конфигурисао Chrome да отвара алтернативни прегледач за приступ URL-у <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Синхронизујте и персонализујте Chrome на свим уређајима</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Администратор захтева да поново покренете Chrome да бисте применили ажурирање}=1{Администратор захтева да поново покренете Chrome да бисте применили ажурирање. Прозор без архивирања се неће поново отворити.}one{Администратор захтева да поново покренете Chrome да бисте применили ажурирање. # прозор без архивирања се неће поново отворити.}few{Администратор захтева да поново покренете Chrome да бисте применили ажурирање. # прозора без архивирања се неће поново отворити.}other{Администратор захтева да поново покренете Chrome да бисте применили ажурирање. # прозора без архивирања се неће поново отворити.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Доступна је нова верзија Google Chrome прегледача, бржа него икад пре.</translation>
 <translation id="8614913330719544658">Google Chrome не реагује. Желите ли да га одмах поново покренете?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Поново ћемо покренути Chrome за 1 минут}one{Поново ћемо покренути Chrome за # минут}few{Поново ћемо покренути Chrome за # минута}other{Поново ћемо покренути Chrome за # минута}}</translation>
+<translation id="8641606876632989680">Chrome ће вас обавестити када се пријавите помоћу угрожене лозинке</translation>
 <translation id="8669527147644353129">Google Chrome помоћник</translation>
 <translation id="8679801911857917785">Контролише и страницу која се приказује када покренете Chrome.</translation>
 <translation id="870251953148363156">Ажурирај &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sv.xtb b/chrome/app/resources/google_chrome_strings_sv.xtb
index 87fe90f..5d2fe29 100644
--- a/chrome/app/resources/google_chrome_strings_sv.xtb
+++ b/chrome/app/resources/google_chrome_strings_sv.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Det här är en sekundär installation av Google Chrome. Det går inte att göra den till standardwebbläsare.</translation>
 <translation id="2341767445688917208">Det gick inte att synkronisera lösenord i Chrome OS. Åtgärda nu.</translation>
 <translation id="2348335408836342058">Du behöver ge Chrome behörighet att använda kameran och mikrofonen på webbplatsen</translation>
+<translation id="234869673307233423">Chrome kan inte kontrollera dina lösenord. Försök igen senare.</translation>
 <translation id="2429317896000329049">Google Chrome kunde inte synkronisera data eftersom synkronisering inte är tillgängligt för din domän.</translation>
 <translation id="2467438592969358367">Lösenorden exporteras från Google Chrome. Skriv ditt Windows-lösenord om du tillåter detta.</translation>
 <translation id="2485422356828889247">Avinstallera</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Det här tillägget har ändrat vilken sida som visas när du startar Chrome.</translation>
 <translation id="2765403129283291972">Du behöver ge Chrome behörighet att använda mikrofonen på webbplatsen</translation>
 <translation id="2770231113462710648">Ändra standardwebbläsare till:</translation>
+<translation id="2775140325783767197">Chrome kan inte kontrollera dina lösenord. Testa att kontrollera internetanslutningen.</translation>
 <translation id="2799223571221894425">Starta om</translation>
 <translation id="2847461019998147611">Visa Google Chrome på det här språket</translation>
 <translation id="2857540653560290388">Chrome startas …</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Få hjälp med Chrome OS</translation>
 <translation id="3396977131400919238">Ett operativsystemsfel inträffade under installationen. Ladda ned Google Chrome igen.</translation>
 <translation id="3398288718845740432">Dölj i Chrome-menyn</translation>
+<translation id="3434246496373299699">Chrome kan kontrollera dina lösenord när du loggar in med Google-kontot</translation>
 <translation id="3451115285585441894">Lägger till i Chrome ...</translation>
 <translation id="345171907106878721">Lägg till dig själv i Chrome</translation>
 <translation id="34857402635545079">Rensa även data från Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Du behöver ge Chrome åtkomst till din plats om den ska kunna delas med webbplatsen</translation>
+<translation id="3533694711092285624">Det finns inga sparade lösenord. Chrome kan bara kontrollera dina lösenord om du sparar dem.</translation>
 <translation id="3576528680708590453">Systemadministratören har konfigurerat Google Chrome så att <ph name="TARGET_URL_HOSTNAME" /> öppnas i en annan webbläsare.</translation>
 <translation id="3582972582564653026">Synkronisera och anpassa Chrome på alla enheter du använder</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administratören meddelar att du måste starta om Chrome så att en uppdatering tillämpas}=1{Administratören meddelar att du måste starta om Chrome så att en uppdatering tillämpas. Inkognitofönstret öppnas inte igen.}other{Administratören meddelar att du måste starta om Chrome så att en uppdatering tillämpas. De # inkognitofönstren öppnas inte igen.}}</translation>
@@ -239,6 +243,7 @@
 <translation id="8556340503434111824">Det finns en ny version av Google Chrome och den är snabbare än någonsin.</translation>
 <translation id="8614913330719544658">Google Chrome svarar inte. Vill du starta om nu?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Om en minut startas Chrome om}other{Om # minuter startas Chrome om}}</translation>
+<translation id="8641606876632989680">Chrome aviserar dig om du loggar in med ett utsatt lösenord</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Det styr också vilken sida som visas när du startar Chrome.</translation>
 <translation id="870251953148363156">Uppdatera &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sw.xtb b/chrome/app/resources/google_chrome_strings_sw.xtb
index c17b83c..8db0b39 100644
--- a/chrome/app/resources/google_chrome_strings_sw.xtb
+++ b/chrome/app/resources/google_chrome_strings_sw.xtb
@@ -51,6 +51,7 @@
 <translation id="2309047409763057870">Huu ni usakinishaji wa pili wa Google Chrome, na haiwezi kufanywa kuwa kivinjari chako chaguomsingi.</translation>
 <translation id="2341767445688917208">Mfumo wa Uendeshaji Chrome umeshindwa kusawazisha manenosiri yako. Rekebisha sasa.</translation>
 <translation id="2348335408836342058">Chrome inahitaji ruhusa ya kufikia kamera na maikrofoni yako katika tovuti hii</translation>
+<translation id="234869673307233423">Chrome imeshindwa kukagua manenosiri yako. Jaribu tena baadaye.</translation>
 <translation id="2429317896000329049">Google Chrome haikuweza kusawazisha data yako kwa sababu Usawazishaji haupatikani kwa kikoa chako.</translation>
 <translation id="2467438592969358367">Google Chrome ingependa kuhamisha manenosiri yako. Andika nenosiri lako la Windows ili uruhusu shughuli hii.</translation>
 <translation id="2485422356828889247">Ondoa</translation>
@@ -65,6 +66,7 @@
 <translation id="2689103672227170538">Kiendelezi hiki kimebadilisha ukurasa unaoonyeshwa unapoanzisha Chrome.</translation>
 <translation id="2765403129283291972">Chrome inahitaji ruhusa ya kufikia maikrofoni yako katika tovuti hii</translation>
 <translation id="2770231113462710648">Badilisha kivinjari chaguomsingi kiwe:</translation>
+<translation id="2775140325783767197">Chrome imeshindwa kukagua manenosiri yako. Jaribu kuangalia muunganisho wako wa Intaneti.</translation>
 <translation id="2799223571221894425">Funga na ufungue</translation>
 <translation id="2847461019998147611">Onyesha Google Chrome katika lugha hii</translation>
 <translation id="2857540653560290388">Inaanzisha Chrome...</translation>
@@ -83,10 +85,12 @@
 <translation id="3395323229510056640">Pata usaidizi wa kutumia mfumo wa uendeshaji wa Chrome</translation>
 <translation id="3396977131400919238">Hitilafu ya mfumo wa uendeshaji imetokea wakati wa kusanidi. Tafadhali pakua Google Chrome tena.</translation>
 <translation id="3398288718845740432">Ficha katika Menyu ya Chrome</translation>
+<translation id="3434246496373299699">Chrome inaweza kukagua manenosiri unapoingia ukitumia Akaunti yako ya Google</translation>
 <translation id="3451115285585441894">Inaongeza kwenye Chrome...</translation>
 <translation id="345171907106878721">Jiongeze kwenye Chrome</translation>
 <translation id="34857402635545079">Futa pia data kutoka Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome inahitaji kufikia maelezo ya mahali ulipo ili kuyashiriki na tovuti hii</translation>
+<translation id="3533694711092285624">Hakuna manenosiri yaliyohifadhiwa. Chrome inaweza kukagua manenosiri yako unapoyahifadhi.</translation>
 <translation id="3576528680708590453">Msimamizi wa mfumo unaotumia ameweka mipangilio ya Google Chrome ifungue kivinjari mbadala ili kufikia <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Sawazisha na uweke mapendeleo kwenye Chrome katika vifaa vyako vyote</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Msimamizi wako anataka ufungue Chrome tena ili utumie sasisho}=1{Msimamizi wako anataka ufungue Chrome tena ili utumie sasisho. Haitafungua upya dirisha fiche.}other{Msimamizi wako anataka ufungue Chrome tena ili utumie sasisho. Haitafungua upya madirisha # fiche.}}</translation>
@@ -237,6 +241,7 @@
 <translation id="8556340503434111824">Kuna toleo jipya linalopatikana la Google Chrome, na ni la kasi kuliko la awali.</translation>
 <translation id="8614913330719544658">Google Chrome imelemazwa. Izindue upya sasa?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome itafunguka upya ndani ya dakika 1}other{Chrome itafunguka upya ndani ya dakika #}}</translation>
+<translation id="8641606876632989680">Chrome itakuarifu ukiingia katika akaunti ukitumia nenosiri lililoathiriwa</translation>
 <translation id="8669527147644353129">Msaidizi wa Google Chrome</translation>
 <translation id="8679801911857917785">Pia inadhibiti ukurasa unaoonyeshwa unapoanzisha Chrome.</translation>
 <translation id="870251953148363156">Sasisha &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ta.xtb b/chrome/app/resources/google_chrome_strings_ta.xtb
index 8275ce26..0a54ffc 100644
--- a/chrome/app/resources/google_chrome_strings_ta.xtb
+++ b/chrome/app/resources/google_chrome_strings_ta.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">இது Google Chrome இன் இரண்டாம் நிலை நிறுவல் என்பதால், அதை இயல்புநிலை உலாவியாக அமைக்க முடியாது.</translation>
 <translation id="2341767445688917208">உங்கள் கடவுச்சொற்களை Chrome OSஸால் ஒத்திசைக்க முடியவில்லை. இப்போதே சரிசெய்யுங்கள்.</translation>
 <translation id="2348335408836342058">இந்தத் தளத்திற்காகக் கேமராவையும் மைக்ரோஃபோனையும் அணுக Chromeமுக்கு அனுமதி தேவை</translation>
+<translation id="234869673307233423">Chromeமால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை. பிறகு முயலவும்.</translation>
 <translation id="2429317896000329049">உங்கள் களத்திற்கு ஒத்திசைவு இல்லாததால், Google Chrome ஆல் உங்கள் தரவை ஒத்திசைக்க முடியவில்லை.</translation>
 <translation id="2467438592969358367">Google Chrome உங்கள் கடவுச்சொற்களை ஏற்ற விரும்புகிறது. இதை அனுமதிக்க, உங்கள் Windows கடவுச்சொல்லை உள்ளிடவும்.</translation>
 <translation id="2485422356828889247">நிறுவல் நீக்கு</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Chromeஐத் தொடங்கும் போது காண்பிக்கப்படும் பக்கத்தை இந்த நீட்டிப்பு மாற்றியுள்ளது.</translation>
 <translation id="2765403129283291972">இந்தத் தளத்திற்காக மைக்ரோஃபோனை அணுக Chromeமுக்கு அனுமதி தேவை</translation>
 <translation id="2770231113462710648">இயல்புநிலை உலாவியாக இதை அமை:</translation>
+<translation id="2775140325783767197">Chromeமால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை. உங்கள் இணைய இணைப்பைச் சரிபார்க்க முயலவும்.</translation>
 <translation id="2799223571221894425">மீண்டும் தொடங்கு</translation>
 <translation id="2847461019998147611">Google Chromeமை இந்த மொழியில் காட்டு</translation>
 <translation id="2857540653560290388">Chromeமைத் தொடங்குகிறது...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Chrome OS தொடர்பான உதவி பெறுக</translation>
 <translation id="3396977131400919238">நிறுவலின்போது இயக்கமுறைமையில் பிழை ஏற்பட்டது. Google Chromeமை மீண்டும் பதிவிறக்குக.</translation>
 <translation id="3398288718845740432">Chrome மெனுவில் மறை</translation>
+<translation id="3434246496373299699">Google கணக்கைப் பயன்படுத்தி நீங்கள் உள்நுழையும்போது Chrome உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியும்</translation>
 <translation id="3451115285585441894">Chrome இல் சேர்க்கிறது...</translation>
 <translation id="345171907106878721">உங்களை Chrome இல் சேர்க்கவும்</translation>
 <translation id="34857402635545079">Chromeமிலிருந்தும் தரவை அழி (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">இந்தத் தளத்துடன் இருப்பிடத்தைப் பகிர Chromeமுக்கு உங்கள் இருப்பிடத்திற்கான அணுகல் தேவை</translation>
+<translation id="3533694711092285624">சேமித்த கடவுச்சொற்கள் எதுவும் இல்லை. நீங்கள் அவற்றைச் சேமிக்கும்போது Chromeமால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியும்.</translation>
 <translation id="3576528680708590453"><ph name="TARGET_URL_HOSTNAME" />ஐ அணுக Google Chrome அதை மாற்று உலாவியில் திறக்கும்படி உங்கள் சிஸ்டம் நிர்வாகி உள்ளமைத்துள்ளார்.</translation>
 <translation id="3582972582564653026">உங்கள் எல்லாச் சாதனங்களிலும் Chromeஐ ஒத்திசைக்கலாம், தனிப்பயனாக்கலாம்</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{புதுப்பிப்பைப் பயன்படுத்த Chromeமை மீண்டும் தொடங்கும்படி உங்கள் நிர்வாகி சொல்கிறார்}=1{புதுப்பிப்பைப் பயன்படுத்த Chromeமை மீண்டும் தொடங்கும்படி உங்கள் நிர்வாகி சொல்கிறார். உங்கள் மறைநிலை சாளரம் மீண்டும் திறக்காது.}other{புதுப்பிப்பைப் பயன்படுத்த Chromeமை மீண்டும் தொடங்கும்படி உங்கள் நிர்வாகி சொல்கிறார். உங்கள் # மறைநிலை சாளரங்கள் மீண்டும் திறக்காது.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Google Chrome இன் புதிய பதிப்பு கிடைக்கிறது, அது முன்னெப்போதையும் விட விரைவானது.</translation>
 <translation id="8614913330719544658">Google Chrome பதிலளிக்கவில்லை. இப்போது மீண்டும் தொடங்கவா?</translation>
 <translation id="8625237574518804553">{0,plural, =1{ஒரு நிமிடத்தில் Chrome மீண்டும் தொடங்கும்}other{# நிமிடங்களில் Chrome மீண்டும் தொடங்கும்}}</translation>
+<translation id="8641606876632989680">களவாடப்பட்ட கடவுச்சொல் முலம் நீங்கள் உள்நுழையும்போது Chrome உங்களுக்குத் தெரியப்படுத்தும்</translation>
 <translation id="8669527147644353129">Google Chrome உதவி</translation>
 <translation id="8679801911857917785">Chrome ஐத் தொடங்கும்போது காண்பிக்கப்படும் பக்கத்தையும் இது கட்டுப்படுத்துகிறது.</translation>
 <translation id="870251953148363156">&amp;Google Chrome ஐப் புதுப்பி</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb
index 04b913a..a2451d4 100644
--- a/chrome/app/resources/google_chrome_strings_te.xtb
+++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">ఇది Google Chrome యొక్క రెండవ ఇన‌స్ట‌లేష‌న్. దీన్ని మీ డిఫాల్ట్ బ్రౌజర్‌గా చేయడం సాధ్యపడదు.</translation>
 <translation id="2341767445688917208">Chrome OS మీ పాస్‌వర్డ్‌‌లను సింక్ చేయలేకపోయింది. ఇప్పుడే సమస్యను పరిష్కరించండి.</translation>
 <translation id="2348335408836342058">ఈ సైట్ కోసం మీ కెమెరా మరియు మైక్రోఫోన్‌ను యాక్సెస్ చేయడానికి Chromeకు అనుమతి అవసరం</translation>
+<translation id="234869673307233423">Chrome మీ పాస్‌వర్డ్‌లను తనిఖీ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation>
 <translation id="2429317896000329049">మీ డొమైన్ కోసం సింక్‌ అందుబాటులో లేనందున Google Chrome మీ డేటాను సింక్ చేయ‌లేక‌పోయింది.</translation>
 <translation id="2467438592969358367">Google Chrome మీ పాస్‌వర్డ్‌లను ఎగుమతి చేయాలనుకుంటోంది. దీనిని అనుమతించడం కోసం మీ Windows పాస్‌వర్డ్‌ని టైప్ చేయండి.</translation>
 <translation id="2485422356828889247">అన్ఇన్‌స్టాల్ చేయి</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">ఈ పొడిగింపు మీరు Chromeని ప్రారంభించినప్పుడు చూపబడే పేజీని మార్చింది.</translation>
 <translation id="2765403129283291972">ఈ సైట్ కోసం మీ మైక్రోఫోన్‌ను యాక్సెస్ చేయడానికి Chromeకు అనుమతి అవసరం</translation>
 <translation id="2770231113462710648">డిఫాల్ట్ బ్రౌజర్‌ను దీనికి మార్చు:</translation>
+<translation id="2775140325783767197">Chrome మీ పాస్‌వర్డ్‌లను చెక్ చేయలేకపోయింది. మీ ఇంటర్నెట్ కనెక్షన్ సరిచూసుకుని, తర్వాత ట్రై చేయండి.</translation>
 <translation id="2799223571221894425">మళ్లీ ప్రారంభించు</translation>
 <translation id="2847461019998147611">Google Chromeను ఈ భాషలో ప్రదర్శించు</translation>
 <translation id="2857540653560290388">Chromeను ప్రారంభిస్తోంది...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Chrome OS గురించి సహాయాన్ని పొందండి</translation>
 <translation id="3396977131400919238">ఇన‌స్ట‌లేష‌న్‌ సమయంలో ఒక ఆపరేటింగ్ సిస్టమ్ ఎర్ర‌ర్‌ ఏర్పడింది. దయచేసి Google Chromeను మ‌ళ్లీ డౌన్‌లోడ్ చేయండి.</translation>
 <translation id="3398288718845740432">Chrome మెనూలో దాచండి</translation>
+<translation id="3434246496373299699">మీరు మీ Google ఖాతాతో సైన్ ఇన్ చేసి ఉన్నప్పుడు Chrome మీ పాస్‌వర్డ్‌లను చెక్ చేయగలుగుతుంది</translation>
 <translation id="3451115285585441894">Chromeకు జోడిస్తోంది...</translation>
 <translation id="345171907106878721">Chromeకు మిమ్మల్ని జోడించుకోండి</translation>
 <translation id="34857402635545079">అలాగే (<ph name="URL" />)లో ఉన్న Chromeకి సంబంధించిన డేటాని తీసివేయి</translation>
 <translation id="3503306920980160878">ఈ సైట్‌తో మీ స్థానాన్ని షేర్ చేయడానికి Chromeకు మీ స్థాన యాక్సెస్ అవసరం</translation>
+<translation id="3533694711092285624">సేవ్ చేసిన పాస్‌వర్డ్‌లు లేవు. మీరు మీ పాస్‌వర్డ్‌లను సేవ్ చేసినప్పుడు Chrome వాటిని చెక్ చేయగలదు.</translation>
 <translation id="3576528680708590453"><ph name="TARGET_URL_HOSTNAME" />‌ను యాక్సెస్ చేయడం కోసం ఒక ప్రత్యామ్నాయ బ్రౌజర్‌ను తెరిచే విధంగా Google Chromeను మీ సిస్టమ్ నిర్వాహకులు కాన్ఫిగర్ చేశారు.</translation>
 <translation id="3582972582564653026">మీ పరికరాల అంతటా Chromeను సింక్ చేయండి మరియు వ్యక్తిగతీకరించండి</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromeను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు}=1{అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromeను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు. మీ అజ్ఞాత విండో మళ్లీ తెరవబడదు.}other{అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromeను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు. మీ # అజ్ఞాత విండోలు మళ్లీ తెరవబడవు.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Google Chrome యొక్క కొత్త వెర్షన్ అందుబాటులో ఉంది, ఇది మునుపటి కంటే వేగవంతంగా ఉంటుంది.</translation>
 <translation id="8614913330719544658">Google Chrome స్పందించడం లేదు. ఇప్పుడే పునఃప్రారంభించాలా?</translation>
 <translation id="8625237574518804553">{0,plural, =1{1 నిమిషంలో Chrome తిరిగి ప్రారంభించబడుతుంది}other{# నిమిషాల్లో Chrome తిరిగి ప్రారంభించబడుతుంది}}</translation>
+<translation id="8641606876632989680">చోరీకి గురైన పాస్‌వర్డ్‌తో మీరు సైన్ ఇన్ చేసినప్పుడు, Chrome తెలియజేస్తుంది</translation>
 <translation id="8669527147644353129">Google Chrome సహాయకారుడు</translation>
 <translation id="8679801911857917785">ఇది మీరు Chromeని ప్రారంభించేటప్పుడు చూపబడే పేజీని కూడా నియంత్రిస్తుంది.</translation>
 <translation id="870251953148363156">&amp;Google Chromeను అప్‌డేట్ చేయి</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb
index 8d69ccba..f880d9a 100644
--- a/chrome/app/resources/google_chrome_strings_th.xtb
+++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -47,6 +47,7 @@
 <translation id="2309047409763057870">นี่เป็นการติดตั้ง Google Chrome แบบสำรอง และไม่สามารถใช้เป็นเบราว์เซอร์เริ่มต้นของคุณ</translation>
 <translation id="2341767445688917208">Chrome OS ซิงค์รหัสผ่านของคุณไม่ได้ แก้ไขเลย</translation>
 <translation id="2348335408836342058">Chrome ต้องการสิทธิ์เข้าถึงไมโครโฟนและกล้องถ่ายรูปของคุณสำหรับเว็บไซต์นี้</translation>
+<translation id="234869673307233423">Chrome ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดลองอีกครั้งภายหลัง</translation>
 <translation id="2429317896000329049">Google Chrome ไม่สามารถซิงค์ข้อมูลของคุณเนื่องจากไม่สามารถใช้การซิงค์กับโดเมนของคุณ</translation>
 <translation id="2467438592969358367">Google Chrome ต้องการส่งออกรหัสผ่านของคุณ พิมพ์รหัสผ่าน Windows เพื่ออนุญาตให้ดำเนินการ</translation>
 <translation id="2485422356828889247">ถอนการติดตั้ง</translation>
@@ -61,6 +62,7 @@
 <translation id="2689103672227170538">ส่วนขยายนี้ได้เปลี่ยนหน้าที่จะแสดงเมื่อคุณเริ่มต้น Chrome</translation>
 <translation id="2765403129283291972">Chrome ต้องการสิทธิ์เข้าถึงไมโครโฟนของคุณสำหรับเว็บไซต์นี้</translation>
 <translation id="2770231113462710648">เปลี่ยนเบราว์เซอร์ที่เป็นค่าเริ่มต้นเป็น:</translation>
+<translation id="2775140325783767197">Chrome ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดลองตรวจสอบการเชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="2799223571221894425">เปิดใหม่</translation>
 <translation id="2847461019998147611">แสดง Google Chrome ในภาษานี้</translation>
 <translation id="2857540653560290388">กำลังเปิด Chrome...</translation>
@@ -79,10 +81,12 @@
 <translation id="3395323229510056640">รับความช่วยเหลือเกี่ยวกับ Chrome OS</translation>
 <translation id="3396977131400919238">มีข้อผิดพลาดของระบบปฏิบัติการเกิดขึ้นในระหว่างการติดตั้ง โปรดดาวน์โหลด Google Chrome อีกครั้ง</translation>
 <translation id="3398288718845740432">ซ่อนในเมนู Chrome</translation>
+<translation id="3434246496373299699">Chrome จะตรวจสอบรหัสผ่านได้เมื่อคุณลงชื่อเข้าใช้ด้วยบัญชี Google</translation>
 <translation id="3451115285585441894">กำลังเพิ่มลงใน Chrome...</translation>
 <translation id="345171907106878721">เพิ่มตัวคุณเองใน Chrome</translation>
 <translation id="34857402635545079">ล้างข้อมูลจาก Chrome (<ph name="URL" />) ด้วย</translation>
 <translation id="3503306920980160878">Chrome ต้องการสิทธิ์เข้าถึงตำแหน่งของคุณเพื่อแชร์ตำแหน่งกับเว็บไซต์นี้</translation>
+<translation id="3533694711092285624">ไม่มีรหัสผ่านที่บันทึกไว้ Chrome จะตรวจสอบรหัสผ่านได้เมื่อคุณบันทึกรหัสผ่านไว้</translation>
 <translation id="3576528680708590453">ผู้ดูแลระบบของคุณกำหนดค่าให้ Google Chrome เปิดเบราว์เซอร์สำรองเพื่อเข้าถึง <ph name="TARGET_URL_HOSTNAME" /></translation>
 <translation id="3582972582564653026">ซิงค์และปรับเปลี่ยน Chrome ในอุปกรณ์ต่างๆ</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{ผู้ดูแลระบบต้องการให้คุณเปิด Chrome ขึ้นมาใหม่เพื่อใช้การอัปเดต}=1{ผู้ดูแลระบบต้องการให้คุณเปิด Chrome ขึ้นมาใหม่เพื่อใช้การอัปเดต หน้าต่างที่ไม่ระบุตัวตนจะไม่เปิดให้อีก}other{ผู้ดูแลระบบต้องการให้คุณเปิด Chrome ขึ้นมาใหม่เพื่อใช้การอัปเดต หน้าต่างที่ไม่ระบุตัวตนจำนวน # หน้าต่างจะไม่เปิดให้อีก}}</translation>
@@ -228,6 +232,7 @@
 <translation id="8556340503434111824">มี Chrome รุ่นใหม่ให้ใช้งานแล้วและเร็วกว่าเดิม</translation>
 <translation id="8614913330719544658">Google Chrome ไม่ตอบสนอง เปิดใช้งานใหม่ตอนนี้หรือไม่</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome จะเปิดขึ้นมาใหม่ใน 1 นาที}other{Chrome จะเปิดขึ้นมาใหม่ใน # นาที}}</translation>
+<translation id="8641606876632989680">Chrome จะแจ้งให้คุณทราบเมื่อคุณลงชื่อเข้าใช้ด้วยรหัสผ่านที่ไม่รัดกุม</translation>
 <translation id="8669527147644353129">ตัวช่วยเหลือของ Google Chrome</translation>
 <translation id="8679801911857917785">อีกทั้งยังควบคุมหน้าที่จะแสดงเมื่อคุณเปิด Chrome ด้วย</translation>
 <translation id="870251953148363156">อัปเดต &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_tr.xtb b/chrome/app/resources/google_chrome_strings_tr.xtb
index c743c60..a8b92394 100644
--- a/chrome/app/resources/google_chrome_strings_tr.xtb
+++ b/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Bu, Google Chrome'un ikincil bir yüklemesidir ve varsayılan tarayıcınız yapılamaz.</translation>
 <translation id="2341767445688917208">Chrome OS, şifrelerinizi senkronize edemedi. Şimdi düzelt.</translation>
 <translation id="2348335408836342058">Chrome'un bu sitede kameranıza ve mikrofonunuza erişmesi için izin gerekiyor</translation>
+<translation id="234869673307233423">Chrome, şifrelerinizi kontrol edemiyor. Daha sonra tekrar deneyin.</translation>
 <translation id="2429317896000329049">Senkronizasyon, alan adınızda kullanılamadığından Google Chrome, verilerinizi senkronize edemedi.</translation>
 <translation id="2467438592969358367">Google Chrome şifrelerinizi dışa aktarmak istiyor. Buna izin vermek için Windows şifrenizi yazın.</translation>
 <translation id="2485422356828889247">Yüklemeyi Kaldır</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Bu uzantı, Chrome'u başlattığınızda gösterilen sayfayı değiştirdi.</translation>
 <translation id="2765403129283291972">Chrome'un bu sitede mikrofonunuza erişmesi için izin gerekiyor</translation>
 <translation id="2770231113462710648">Varsayılan tarayıcıyı şuna dönüştür:</translation>
+<translation id="2775140325783767197">Chrome, şifrelerinizi kontrol edemiyor. İnternet bağlantınızı kontrol etmeyi deneyin.</translation>
 <translation id="2799223571221894425">Yeniden başlat</translation>
 <translation id="2847461019998147611">Google Chrome'u bu dilde görüntüle</translation>
 <translation id="2857540653560290388">Chrome başlatılıyor...</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Chrome OS ile ilgili yardım alın</translation>
 <translation id="3396977131400919238">Yükleme sırasında bir işletim sistemi hatası oluştu. Lütfen Google Chrome'u yeniden indirin.</translation>
 <translation id="3398288718845740432">Chrome Menüsünde Gizle</translation>
+<translation id="3434246496373299699">Chrome, Google Hesabınızla oturum açtığınızda şifrelerinizi kontrol edebilir</translation>
 <translation id="3451115285585441894">Chrome'a ekleniyor...</translation>
 <translation id="345171907106878721">Kendinizi Chrome'a ekleyin</translation>
 <translation id="34857402635545079">Chrome'daki verileri de temizle (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Konumunuzu bu siteyle paylaşabilmek için Chrome'un konum bilgilerinize erişmesi gerekiyor</translation>
+<translation id="3533694711092285624">Kaydedilen şifre yok. Kaydetmeniz halinde Chrome, şifrelerinizi kontrol edebilir.</translation>
 <translation id="3576528680708590453">Sistem yöneticiniz Google Chrome'u <ph name="TARGET_URL_HOSTNAME" /> adresine erişmek için alternatif bir tarayıcıyı açacak şekilde yapılandırmış.</translation>
 <translation id="3582972582564653026">Chrome'u cihazlarınız arasında senkronize edin ve kişiselleştirin</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Yöneticiniz bir güncellemeyi uygulamak için Chrome'u yeniden başlatmanızı gerektiriyor}=1{Yöneticiniz bir güncellemeyi uygulamak için Chrome'u yeniden başlatmanızı gerektiriyor. Gizli pencereniz yeniden açılmayacak.}other{Yöneticiniz bir güncellemeyi uygulamak için Chrome'u yeniden başlatmanızı gerektiriyor. # Gizli pencereniz yeniden açılmayacak.}}</translation>
@@ -232,6 +236,7 @@
 <translation id="8556340503434111824">Kullanabileceğiniz yeni bir Google Chrome sürümü var ve bu sürüm, her zamankinden daha hızlı.</translation>
 <translation id="8614913330719544658">Google Chrome yanıt vermiyor. Yeniden başlatılsın mı?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 1 dakika içinde yeniden başlatılacak}other{Chrome # dakika içinde yeniden başlatılacak}}</translation>
+<translation id="8641606876632989680">Chrome, güvenliği ihlal edilmiş bir şifreyle oturum açtığınızda size haber verir</translation>
 <translation id="8669527147644353129">Google Chrome Helper</translation>
 <translation id="8679801911857917785">Ayrıca Chrome'u başlattığınızda gösterilecek sayfayı da denetler.</translation>
 <translation id="870251953148363156">&amp;Google Chrome'u güncelle</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uk.xtb b/chrome/app/resources/google_chrome_strings_uk.xtb
index 3869e45..0133084 100644
--- a/chrome/app/resources/google_chrome_strings_uk.xtb
+++ b/chrome/app/resources/google_chrome_strings_uk.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">Це додаткове встановлення Google Chrome. Його не можна зробити вашим веб-переглядачем за умовчанням.</translation>
 <translation id="2341767445688917208">ОС Chrome не вдалося синхронізувати ваші паролі. Виправити.</translation>
 <translation id="2348335408836342058">Chrome потрібен дозвіл на використання камери й мікрофона, щоб надати цьому сайту доступ до них</translation>
+<translation id="234869673307233423">Chrome не може перевірити паролі. Повторіть спробу пізніше.</translation>
 <translation id="2429317896000329049">Google Chrome не вдалося синхронізувати ваші дані, оскільки синхронізація для вашого домену недоступна.</translation>
 <translation id="2467438592969358367">Google Chrome хоче експортувати ваші паролі. Щоб дозволити, введіть свій пароль Windows.</translation>
 <translation id="2485422356828889247">Видалити</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">Це розширення змінило сторінку, яка відкривається під час запуску Chrome.</translation>
 <translation id="2765403129283291972">Chrome потрібен дозвіл на використання мікрофона, щоб надати цьому сайту доступ до нього</translation>
 <translation id="2770231113462710648">Змінити веб-переглядач за умовчанням на:</translation>
+<translation id="2775140325783767197">Chrome не може перевірити паролі. Перевірте інтернет-з'єднання.</translation>
 <translation id="2799223571221894425">Перезапустити</translation>
 <translation id="2847461019998147611">Вибрати цю мову для Google Chrome</translation>
 <translation id="2857540653560290388">Запускається Chrome…</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">Отримати довідку щодо ОС Chrome</translation>
 <translation id="3396977131400919238">Під час установлення сталася помилка операційної системи. Завантажте Google Chrome ще раз.</translation>
 <translation id="3398288718845740432">Сховати в меню Chrome</translation>
+<translation id="3434246496373299699">Chrome зможе перевірити ваші паролі, коли ви ввійдете у свій обліковий запис Google</translation>
 <translation id="3451115285585441894">Додавання в Chrome...</translation>
 <translation id="345171907106878721">Додати себе в Chrome</translation>
 <translation id="34857402635545079">Також очистити дані Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome потрібен доступ до геоданих, щоб повідомляти цьому сайту ваше місцезнаходження</translation>
+<translation id="3533694711092285624">Немає збережених паролів. Chrome зможе перевірити ваші паролі, коли ви їх збережете.</translation>
 <translation id="3576528680708590453">Ваш системний адміністратор налаштував Chrome відкривати сторінку <ph name="TARGET_URL_HOSTNAME" /> в альтернативному веб-переглядачі.</translation>
 <translation id="3582972582564653026">Синхронізуйте та персоналізуйте роботу Chrome на всіх своїх пристроях</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення}=1{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення. Вікно в режимі анонімного перегляду не відновиться й не відкриється знову.}one{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення. # вікно в режимі анонімного перегляду не відновиться й не відкриється знову.}few{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення. # вікна в режимі анонімного перегляду не відновляться й не відкриються знову.}many{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення. # вікон в режимі анонімного перегляду не відновляться й не відкриються знову.}other{Адміністратор вимагає перезапустити Chrome, щоб застосувати оновлення. # вікна в режимі анонімного перегляду не відновиться й не відкриється знову.}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Доступна нова версія Google Chrome – швидша, ніж будь-коли.</translation>
 <translation id="8614913330719544658">Google Chrome не відповідає. Перезапустити зараз?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome перезапуститься через 1 хвилину}one{Chrome перезапуститься через # хвилину}few{Chrome перезапуститься через # хвилини}many{Chrome перезапуститься через # хвилин}other{Chrome перезапуститься через # хвилини}}</translation>
+<translation id="8641606876632989680">Chrome сповістить, коли ви ввійдете в обліковий запис за допомогою зламаного пароля</translation>
 <translation id="8669527147644353129">Помічник Google Chrome</translation>
 <translation id="8679801911857917785">Розширення також змінило сторінку, яка відкривається під час запуску Chrome.</translation>
 <translation id="870251953148363156">Оновити &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ur.xtb b/chrome/app/resources/google_chrome_strings_ur.xtb
index 53ec6b8..86ebc5f 100644
--- a/chrome/app/resources/google_chrome_strings_ur.xtb
+++ b/chrome/app/resources/google_chrome_strings_ur.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">‏یہ Google Chrome کا ثانوی انسٹالیشن ہے اور اسے آپ کا ڈیفالٹ براؤزر نہیں بنایا جا سکتا ہے۔</translation>
 <translation id="2341767445688917208">‏Chrome OS آپ کے پاس ورڈز کی مطابقت پذیری نہیں کر سکا۔ ابھی درست کریں۔</translation>
 <translation id="2348335408836342058">‏Chrome کو اس سائٹ کیلئے آپ کے کیمرے اور مائیکروفون تک رسائی کی اجازت درکار ہے</translation>
+<translation id="234869673307233423">‏Chrome آپ کے پاس ورڈز چیک نہیں کر سکتا ہے۔ بعد میں دوبارہ کوشش کریں۔</translation>
 <translation id="2429317896000329049">‏Google Chrome کلاؤڈ آپ کے ڈیٹا کی مطابقت پذیری نہیں کر سکا کیونکہ مطابقت پذیری آپ کے ڈومین کیلئے فعال نہیں ہے۔</translation>
 <translation id="2467438592969358367">‏Google Chrome آپ کے پاس ورڈز برآمد کرنا چاہتا ہے۔ اس کی اجازت دینے کیلئے، اپنا Windows پاس ورڈ ٹائپ کریں۔</translation>
 <translation id="2485422356828889247">ان انسٹال کریں</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">‏آپ کی جانب سے Chrome شروع کرنے پر دکھائی دینے والے صفحہ کو اس ایکسٹینشن نے تبدیل کر دیا ہے۔</translation>
 <translation id="2765403129283291972">‏Chrome کو اس سائٹ کیلئے آپ کے مائیکروفون تک رسائی کی اجازت درکار ہے</translation>
 <translation id="2770231113462710648">ڈیفالٹ براؤزر کو اس میں تبدیل کریں:</translation>
+<translation id="2775140325783767197">‏Chrome آپ کے پاس ورڈز چیک نہیں کر سکتا ہے۔ اپنا انٹرنیٹ کنکشن چیک کرنے کی کوشش کریں۔</translation>
 <translation id="2799223571221894425">دوبارہ شروع کریں</translation>
 <translation id="2847461019998147611">‏Google Chrome کو اس زبان میں ڈسپلے کریں</translation>
 <translation id="2857540653560290388">‏Chrome شروع ہو رہا ہے…</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">‏Chromium OS کے بارے میں مدد حاصل کریں</translation>
 <translation id="3396977131400919238">‏انسٹالیشن کے دوران آپریٹنگ سسٹم کی ایک خرابی پیش آ گئی۔ براہ کرم Google Chrome دوبارہ ڈاؤن لوڈ کریں۔</translation>
 <translation id="3398288718845740432">‏Chrome مینو میں مخفی کریں</translation>
+<translation id="3434246496373299699">‏جب آپ اپنے Google اکاؤنٹ سے سائن ان ہوتے ہیں تو Chrome آپ کے پاس ورڈز کو چیک کر سکتا ہے</translation>
 <translation id="3451115285585441894">‏Chrome میں شامل کیا جا رہا ہے…</translation>
 <translation id="345171907106878721">‏خود کو Chrome میں شامل کریں</translation>
 <translation id="34857402635545079">‏Chrome کا ڈیٹا بھی صاف کریں (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">‏Chrome کو اس سائٹ کے ساتھ آپ کے مقام کا اشتراک کرنے کیلئے آپ کے مقام تک رسائی درکار ہے</translation>
+<translation id="3533694711092285624">‏کوئی محفوظ کردہ پاس ورڈز نہیں۔ جب آپ پاس ورڈز کو محفوظ کرتے ہیں تو Chrome انہیں چیک کر سکتا ہے۔</translation>
 <translation id="3576528680708590453">‏آپ کے سسٹم کے منتظم نے <ph name="TARGET_URL_HOSTNAME" /> تک رسائی حاصل کرنے کے لیے Google Chrome کو ایک متبادل براؤزر کھولنے کے لیے کنفیگر کیا ہے۔</translation>
 <translation id="3582972582564653026">‏اپنے آلات پر Chrome کو مطابقت پذیر اور ذاتی نوعیت کا بنائیں</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{‏آپ کے منتظم کا مطالبہ ہے کہ آپ اپ ڈیٹ کو لاگو کرنے کیلئے Chrome کو بند کر کے دوبارہ چلائیں}=1{‏آپ کے منتظم کا مطالبہ ہے کہ آپ اپ ڈیٹ کو لاگو کرنے کیلئے Chrome کو بند کر کے دوبارہ چلائیں۔ آپ کی پوشیدگی ونڈو دوبارہ نہیں کھلے گی۔}other{‏آپ کے منتظم کا مطالبہ ہے کہ آپ اپ ڈیٹ کو لاگو کرنے کیلئے Chrome کو بند کر کے دوبارہ چلائیں۔ آپ کی # پوشیدگی ونڈوز دوبارہ نہیں کھلیں گی۔}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">‏Google Chrome کا ایک نیا ورژن دستیاب ہے اور پہلے سے کہیں زیادہ تیز ہے۔</translation>
 <translation id="8614913330719544658">‏Google Chrome جواب نہیں دے رہا ہے۔ ابھی دوبارہ شروع کریں؟</translation>
 <translation id="8625237574518804553">{0,plural, =1{‏1 منٹ میں Chrome دوبارہ لانچ ہوگا}other{‏# منٹ میں Chrome دوبارہ لانچ ہوگا}}</translation>
+<translation id="8641606876632989680">‏جب آپ کسی متاثرہ پاس ورڈ سے سائن ان کریں گے تو Chrome آپ کو مطلع کرے گا</translation>
 <translation id="8669527147644353129">‏Google Chrome مدد کنندہ</translation>
 <translation id="8679801911857917785">‏یہ آپ کی جانب سے Chrome شروع کیے جانے پر دکھائی دینے والے صفحہ کو بھی کنٹرول کرتا ہے۔</translation>
 <translation id="870251953148363156">‏‎&amp;Google Chrome اپ ڈیٹ کریں</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uz.xtb b/chrome/app/resources/google_chrome_strings_uz.xtb
index ed6de15..2724667 100644
--- a/chrome/app/resources/google_chrome_strings_uz.xtb
+++ b/chrome/app/resources/google_chrome_strings_uz.xtb
@@ -49,6 +49,7 @@
 <translation id="2309047409763057870">Google Chrome takroran o‘rnatilgan, shuning uchun u asosiy brauzer bo‘la olmaydi.</translation>
 <translation id="2341767445688917208">Chrome OS tizimidagi parollaringiz sinxronlanmadi. Tuzatish.</translation>
 <translation id="2348335408836342058">Bu sayt kamera va mikrofoningizdan foydalanishi uchun Chrome brauzeriga ruxsat berishingiz lozim</translation>
+<translation id="234869673307233423">Chrome parollaringizni tekshira olmadi. Keyinroq qayta urining.</translation>
 <translation id="2429317896000329049">Google Chrome domeningizda Sync xizmati yo‘qligi sababli ma’lumotlaringizni sinxronlay olmadi.</translation>
 <translation id="2467438592969358367">Google Chrome parollaringizni eksport qilmoqchi. Ruxsat berish uchun Windows platformasidagi parolingizni kiriting.</translation>
 <translation id="2485422356828889247">O‘chirib tashlash</translation>
@@ -63,6 +64,7 @@
 <translation id="2689103672227170538">Bu kengaytma Chrome ishga tushganda ko‘rinadigan sahifani o‘zgartirdi.</translation>
 <translation id="2765403129283291972">Bu sayt mikrofoningizdan foydalanishi uchun Chrome brauzeriga ruxsat berishingiz lozim</translation>
 <translation id="2770231113462710648">Standart brauzer etib tayinlash:</translation>
+<translation id="2775140325783767197">Chrome parollaringizni tekshira olmadi. Internet aloqasini tekshiring.</translation>
 <translation id="2799223571221894425">Qaytadan ishga tushirish</translation>
 <translation id="2847461019998147611">Google Chrome shu tilda ko‘rsatilsin</translation>
 <translation id="2857540653560290388">Chrome ishga tushmoqda...</translation>
@@ -81,10 +83,12 @@
 <translation id="3395323229510056640">Chrome OS yordam markazi</translation>
 <translation id="3396977131400919238">O‘rnatish mobaynida operatsion tizim xatoligi yuz berdi. Google Chrome’ni qaytadan yuklab oling.</translation>
 <translation id="3398288718845740432">Google Chrome menyusida ko‘rsatilmasin</translation>
+<translation id="3434246496373299699">Google hisobingizga kirsangiz, Chrome parollaringizni tekshira oladi</translation>
 <translation id="3451115285585441894">O‘rnatilmoqda...</translation>
 <translation id="345171907106878721">Chrome foydalanuvchisini qo‘shish</translation>
 <translation id="34857402635545079">Chrome maʼlumotlari ham tozalansin (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Bu sayt manzilingizdan foydalanishi uchun Chrome brauzeriga ruxsat berishingiz lozim</translation>
+<translation id="3533694711092285624">Hech qanday parol saqlanmagan. Chrome faqat saqlangan parollaringizni tekshira oladi.</translation>
 <translation id="3576528680708590453">Chrome <ph name="TARGET_URL_HOSTNAME" /> havolasini muqobil brauzerda ochishi tizim administratori tomonidan sozlangan.</translation>
 <translation id="3582972582564653026">Chrome brauzerini barcha qurilmalringizda sinxronlang va o‘zingizga moslab oling</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Administrator yangilishlarni oʻrnatish uchun Chrome brauzerini qayta ishga tushirishni talab qilmoqda}=1{Administrator yangilishlarni oʻrnatish uchun Chrome brauzerini qayta ishga tushirishni talab qilmoqda Inkognito oynalar qayta ochilmaydi.}other{Administrator yangilishlarni oʻrnatish uchun Chrome brauzerini qayta ishga tushirishni talab qilmoqda # ta inkognito oyna qayta ochilmaydi.}}</translation>
@@ -235,6 +239,7 @@
 <translation id="8556340503434111824">Google Chrome brauzerining yanada tezroq ishlaydigan yangi versiyasi chiqdi.</translation>
 <translation id="8614913330719544658">Google Chrome javob bermayapti. Qaytadan ishga tushirilsinmi?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 1 daqiqadan keyin qayta ishga tushadi}other{Chrome # daqiqadan keyin qayta ishga tushadi}}</translation>
+<translation id="8641606876632989680">Google hisobingizga kirsangiz, Chrome oshkor qilingan parollar haqida xabar qiladi</translation>
 <translation id="8669527147644353129">Google Chrome yordamchisi</translation>
 <translation id="8679801911857917785">Bundan tashqari, kengaytma Chrome bosh sahifasini o‘zgarib qo‘ydi.</translation>
 <translation id="870251953148363156">&amp;Google Chrome’ni yangilash</translation>
diff --git a/chrome/app/resources/google_chrome_strings_vi.xtb b/chrome/app/resources/google_chrome_strings_vi.xtb
index 512a5a0..fec2bd5 100644
--- a/chrome/app/resources/google_chrome_strings_vi.xtb
+++ b/chrome/app/resources/google_chrome_strings_vi.xtb
@@ -50,6 +50,7 @@
 <translation id="2309047409763057870">Đây là cài đặt thứ cấp của Google Chrome và không thể trở thành trình duyệt mặc định của bạn.</translation>
 <translation id="2341767445688917208">Chrome OS không thể đồng bộ hóa mật khẩu của bạn. Khắc phục ngay.</translation>
 <translation id="2348335408836342058">Chrome cần có quyền truy cập vào máy ảnh và micrô của bạn cho trang web này</translation>
+<translation id="234869673307233423">Chrome không thể kiểm tra mật khẩu của bạn. Hãy thử lại sau.</translation>
 <translation id="2429317896000329049">Google Chrome không thể đồng bộ hóa dữ liệu của bạn vì Đồng bộ hóa không khả dụng cho miền của bạn.</translation>
 <translation id="2467438592969358367">Google Chrome muốn xuất các mật khẩu của bạn. Hãy nhập mật khẩu Windows để cho phép thực hiện việc này.</translation>
 <translation id="2485422356828889247">Gỡ cài đặt</translation>
@@ -64,6 +65,7 @@
 <translation id="2689103672227170538">Tiện ích này đã thay đổi trang nào được hiển thị khi bạn khởi động Chrome.</translation>
 <translation id="2765403129283291972">Chrome cần có quyền truy cập vào micrô của bạn cho trang web này</translation>
 <translation id="2770231113462710648">Thay đổi trình duyệt mặc định thành:</translation>
+<translation id="2775140325783767197">Chrome không thể kiểm tra mật khẩu của bạn. Hãy thử kiểm tra kết nối Internet.</translation>
 <translation id="2799223571221894425">Chạy lại</translation>
 <translation id="2847461019998147611">Hiển thị Google Chrome bằng ngôn ngữ này</translation>
 <translation id="2857540653560290388">Đang khởi động Chrome...</translation>
@@ -82,10 +84,12 @@
 <translation id="3395323229510056640">Nhận trợ giúp về Chrome OS</translation>
 <translation id="3396977131400919238">Đã xảy ra lỗi hệ điều hành trong quá trình cài đặt. Vui lòng tải xuống lại Google Chrome.</translation>
 <translation id="3398288718845740432">Ẩn trong menu Chrome</translation>
+<translation id="3434246496373299699">Chrome có thể kiểm tra mật khẩu khi bạn đăng nhập bằng Tài khoản Google của mình</translation>
 <translation id="3451115285585441894">Đang thêm vào Chrome...</translation>
 <translation id="345171907106878721">Thêm chính bạn vào Chrome</translation>
 <translation id="34857402635545079">Đồng thời xóa dữ liệu khỏi Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome cần quyền truy cập vào vị trí của bạn để chia sẻ thông tin vị trí với trang web này</translation>
+<translation id="3533694711092285624">Bạn chưa lưu mật khẩu nào. Chrome có thể kiểm tra các mật khẩu của bạn khi bạn lưu các mật khẩu đó.</translation>
 <translation id="3576528680708590453">Quản trị viên hệ thống của bạn đã định cấu hình Google Chrome để mở một trình duyệt thay thế khi truy cập vào <ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Đồng bộ hóa và cá nhân hóa Chrome trên các thiết bị của bạn</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Quản trị viên của bạn yêu cầu bạn chạy lại Chrome để áp dụng bản cập nhật}=1{Quản trị viên của bạn yêu cầu bạn chạy lại Chrome để áp dụng bản cập nhật. Cửa sổ ẩn danh của bạn sẽ không mở lại.}other{Quản trị viên của bạn yêu cầu bạn chạy lại Chrome để áp dụng bản cập nhật. # cửa sổ ẩn danh của bạn sẽ không mở lại.}}</translation>
@@ -234,6 +238,7 @@
 <translation id="8556340503434111824">Hiện đã có phiên bản mới của Google Chrome và phiên bản này nhanh hơn bao giờ hết.</translation>
 <translation id="8614913330719544658">Google Chrome không hồi đáp. Chạy lại ngay bây giờ?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome sẽ khởi động lại sau 1 phút}other{Chrome sẽ khởi động lại sau # phút}}</translation>
+<translation id="8641606876632989680">Chrome sẽ thông báo khi mật khẩu bạn dùng để đăng nhập đã bị lộ</translation>
 <translation id="8669527147644353129">Trình trợ giúp của Google Chrome</translation>
 <translation id="8679801911857917785">Tiện ích này cũng điều khiển trang nào được hiển thị khi bạn khởi động Chrome.</translation>
 <translation id="870251953148363156">Cập nhật &amp;Google Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-CN.xtb b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
index 2414ad7..2ff2703 100644
--- a/chrome/app/resources/google_chrome_strings_zh-CN.xtb
+++ b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">这是 Google Chrome 的并行安装,您无法将此浏览器设为默认浏览器。</translation>
 <translation id="2341767445688917208">Chrome 操作系统无法同步您的密码。请立即修正。</translation>
 <translation id="2348335408836342058">Chrome 需要获得相应权限,才能允许此网站使用您的摄像头和麦克风</translation>
+<translation id="234869673307233423">Chrome 无法检查您的密码。请稍后重试。</translation>
 <translation id="2429317896000329049">由于您的网域停用了同步功能,Google Chrome无法同步您的数据。</translation>
 <translation id="2467438592969358367">Google Chrome 想导出您的密码。请输入您的 Windows 密码以允许此操作。</translation>
 <translation id="2485422356828889247">卸载</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">此扩展程序更改了 Chrome 启动后系统显示的页面。</translation>
 <translation id="2765403129283291972">Chrome 需要获得相应权限,才能允许此网站使用您的麦克风</translation>
 <translation id="2770231113462710648">将默认浏览器更改为:</translation>
+<translation id="2775140325783767197">Chrome 无法检查您的密码。请检查您的互联网连接。</translation>
 <translation id="2799223571221894425">重新启动</translation>
 <translation id="2847461019998147611">以这种语言显示 Google Chrome</translation>
 <translation id="2857540653560290388">正在启动 Chrome…</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">获取有关 Chrome 操作系统的帮助</translation>
 <translation id="3396977131400919238">安装过程中出现操作系统错误。请重新下载 Google Chrome。</translation>
 <translation id="3398288718845740432">在 Chrome 菜单中隐藏</translation>
+<translation id="3434246496373299699">您需要先登录 Google 帐号才能使用 Chrome 的密码检查功能。</translation>
 <translation id="3451115285585441894">正在添加到 Chrome 浏览器...</translation>
 <translation id="345171907106878721">将您自己添加到Chrome</translation>
 <translation id="34857402635545079">一并清除 Chrome (<ph name="URL" />) 中的数据</translation>
 <translation id="3503306920980160878">Chrome 需要获得位置权限,才能将您的位置信息共享给此网站</translation>
+<translation id="3533694711092285624">尚未保存任何密码。您需要先保存密码才能使用 Chrome 的密码检查功能。</translation>
 <translation id="3576528680708590453">您的系统管理员已将 Google Chrome 配置为使用备用浏览器访问 <ph name="TARGET_URL_HOSTNAME" />。</translation>
 <translation id="3582972582564653026">在您的所有设备上同步并个性化设置 Chrome</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{您的管理员要求您重新启动 Chrome 以应用一项更新}=1{您的管理员要求您重新启动 Chrome 以应用一项更新。您的无痕式窗口不会重新打开。}other{您的管理员要求您重新启动 Chrome 以应用一项更新。您的 # 个无痕式窗口不会重新打开。}}</translation>
@@ -230,6 +234,7 @@
 <translation id="8556340503434111824">Google Chrome 浏览器现已推出速度更快的新版本。</translation>
 <translation id="8614913330719544658">Google Chrome 未响应。是否立即重新启动?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 将在 1 分钟后重新启动}other{Chrome 将在 # 分钟后重新启动}}</translation>
+<translation id="8641606876632989680">当您使用已泄露的密码登录时,Chrome 会通知您</translation>
 <translation id="8669527147644353129">Google Chrome 浏览器帮助程序</translation>
 <translation id="8679801911857917785">它还能够控制Chrome启动后显示的页面。</translation>
 <translation id="870251953148363156">更新 Google Chrome(&amp;G)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-HK.xtb b/chrome/app/resources/google_chrome_strings_zh-HK.xtb
index c95110d..733e260 100644
--- a/chrome/app/resources/google_chrome_strings_zh-HK.xtb
+++ b/chrome/app/resources/google_chrome_strings_zh-HK.xtb
@@ -51,6 +51,7 @@
 <translation id="2309047409763057870">這是以並行形式安裝的第二個 Google Chrome,因此無法設定為您的預設瀏覽器。</translation>
 <translation id="2341767445688917208">Chrome OS 無法同步您的密碼。請立即修正。</translation>
 <translation id="2348335408836342058">Chrome 需要取得權限,才能讓這個網站存取您的相機和麥克風</translation>
+<translation id="234869673307233423">Chrome 無法檢查密碼,請稍後再試。</translation>
 <translation id="2429317896000329049">您的網域無法使用「同步功能」,因此 Google Chrome 無法同步處理您的數據。</translation>
 <translation id="2467438592969358367">Google Chrome 想匯出您的密碼。請輸入 Windows 密碼以允許此操作。</translation>
 <translation id="2485422356828889247">解除安裝</translation>
@@ -65,6 +66,7 @@
 <translation id="2689103672227170538">擴充功能已變更 Chrome 啟動時所顯示的網頁。</translation>
 <translation id="2765403129283291972">Chrome 需要取得權限,才能讓這個網站存取您的麥克風</translation>
 <translation id="2770231113462710648">將預設瀏覽器變更為:</translation>
+<translation id="2775140325783767197">Chrome 無法檢查密碼,請檢查互聯網連線。</translation>
 <translation id="2799223571221894425">重新啟動</translation>
 <translation id="2847461019998147611">以此語言顯示 Google Chrome</translation>
 <translation id="2857540653560290388">正在啟動 Chrome…</translation>
@@ -83,10 +85,12 @@
 <translation id="3395323229510056640">取得 Chrome 作業系統相關說明</translation>
 <translation id="3396977131400919238">安裝過程中發生作業系統錯誤,請再次下載 Google Chrome。</translation>
 <translation id="3398288718845740432">隱藏在 Chrome 選單中</translation>
+<translation id="3434246496373299699">Chrome 可在您使用 Google 帳戶登入時檢查密碼</translation>
 <translation id="3451115285585441894">正在新增至 Chrome…</translation>
 <translation id="345171907106878721">新增為 Chrome 使用者</translation>
 <translation id="34857402635545079">一併清除 Chrome 的資料 (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome 需要位置資訊存取權,才能與這個網站分享您的位置資訊</translation>
+<translation id="3533694711092285624">沒有已儲存的密碼。儲存密碼時,Chrome 可檢查您的密碼。</translation>
 <translation id="3576528680708590453">系統管理員已設定 Google Chrome 開啟替代瀏覽器來存取 <ph name="TARGET_URL_HOSTNAME" />。</translation>
 <translation id="3582972582564653026">在不同裝置上同步和設定個人化的 Chrome</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{管理員要求您重新啟動 Chrome,以套用更新}=1{管理員要求您重新啟動 Chrome,以套用更新。您的無痕式視窗不會重新開啟。}other{管理員要求您重新啟動 Chrome,以套用更新。您的 # 個無痕式視窗不會重新開啟。}}</translation>
@@ -236,6 +240,7 @@
 <translation id="8556340503434111824">Google Chrome 推出全新版本,速度更勝從前。</translation>
 <translation id="8614913330719544658">Google Chrome 沒有回應,要立即重新啟動嗎?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 將於 1 分鐘後重新啟動}other{Chrome 將於 # 分鐘後重新啟動}}</translation>
+<translation id="8641606876632989680">如果您使用被盜用的密碼登入帳戶,Chrome 會通知您</translation>
 <translation id="8669527147644353129">Google Chrome 輔助工具</translation>
 <translation id="8679801911857917785">這個擴充功能也會管制 Chrome 啟動時所顯示的網頁。</translation>
 <translation id="870251953148363156">更新 Google Chrome(&amp;G)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-TW.xtb b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
index c246b25..19b9f2c9 100644
--- a/chrome/app/resources/google_chrome_strings_zh-TW.xtb
+++ b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
@@ -48,6 +48,7 @@
 <translation id="2309047409763057870">這是以並存形式安裝的次要 Google Chrome,無法設為您的預設瀏覽器。</translation>
 <translation id="2341767445688917208">Chrome 作業系統無法同步處理你的密碼。立即修正。</translation>
 <translation id="2348335408836342058">Chrome 需要相關權限,才能讓這個網站使用你的攝影機和麥克風</translation>
+<translation id="234869673307233423">Chrome 無法檢查你的密碼,請稍後再試。</translation>
 <translation id="2429317896000329049">你的網域無法使用「同步功能」,因此 Google Chrome 無法同步處理你的資料。</translation>
 <translation id="2467438592969358367">Google Chrome 要求匯出你的密碼。如果允許,請輸入你的 Windows 密碼。</translation>
 <translation id="2485422356828889247">解除安裝</translation>
@@ -62,6 +63,7 @@
 <translation id="2689103672227170538">這個擴充功能已變更 Chrome 啟動時所顯示的網頁。</translation>
 <translation id="2765403129283291972">Chrome 需要相關權限,才能讓這個網站使用你的麥克風</translation>
 <translation id="2770231113462710648">將預設瀏覽器變更為:</translation>
+<translation id="2775140325783767197">Chrome 無法檢查你的密碼,請查看你的網際網路連線狀態。</translation>
 <translation id="2799223571221894425">重新啟動</translation>
 <translation id="2847461019998147611">將 Google Chrome 的介面文字設為這種語言</translation>
 <translation id="2857540653560290388">正在啟動 Chrome…</translation>
@@ -80,10 +82,12 @@
 <translation id="3395323229510056640">前往 Chrome 作業系統說明頁面</translation>
 <translation id="3396977131400919238">安裝過程中發生作業系統錯誤,請再次下載 Google Chrome。</translation>
 <translation id="3398288718845740432">在 Chrome 選單中隱藏</translation>
+<translation id="3434246496373299699">如果你使用 Google 帳戶登入,Chrome 可以檢查你的密碼</translation>
 <translation id="3451115285585441894">正在新增至 Chrome...</translation>
 <translation id="345171907106878721">新增為 Chrome 使用者</translation>
 <translation id="34857402635545079">一併清除 Chrome 中的資料 (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">Chrome 需要位置資訊存取權,才能與這個網站分享你的位置資訊</translation>
+<translation id="3533694711092285624">未儲存任何密碼。你必須先儲存密碼,才能使用 Chrome 的密碼檢查功能。</translation>
 <translation id="3576528680708590453">系統管理員已設定 Google Chrome 開啟替代瀏覽器來存取 <ph name="TARGET_URL_HOSTNAME" />。</translation>
 <translation id="3582972582564653026">進行同步處理即可在你的所有裝置上享有個人化的 Chrome 體驗</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{系統管理員要求你重新啟動 Chrome,以套用更新}=1{系統管理員要求你重新啟動 Chrome,以套用更新。你的無痕式視窗不會重新開啟。}other{系統管理員要求你重新啟動 Chrome,以套用更新。你的 # 個無痕式視窗不會重新開啟。}}</translation>
@@ -232,6 +236,7 @@
 <translation id="8556340503434111824">Google Chrome 推出全新版本,速度更勝以往。</translation>
 <translation id="8614913330719544658">Google Chrome 沒有回應,要立即重新啟動嗎?</translation>
 <translation id="8625237574518804553">{0,plural, =1{Chrome 將在 1 分鐘後重新啟動}other{Chrome 將在 # 分鐘後重新啟動}}</translation>
+<translation id="8641606876632989680">如果你使用遭外洩的密碼登入帳戶,Chrome 會通知你</translation>
 <translation id="8669527147644353129">Google Chrome 小幫手</translation>
 <translation id="8679801911857917785">這個擴充功能也會控管 Chrome 啟動時所顯示的網頁。</translation>
 <translation id="870251953148363156">更新 Google Chrome(&amp;G)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zu.xtb b/chrome/app/resources/google_chrome_strings_zu.xtb
index cb160fc..45fa10d 100644
--- a/chrome/app/resources/google_chrome_strings_zu.xtb
+++ b/chrome/app/resources/google_chrome_strings_zu.xtb
@@ -52,6 +52,7 @@
 <translation id="2309047409763057870">Lokhu ukufakwa kwesibili kwe-Google Chrome, futhi akukwazi ukwenziwa isiphequluli sakho esizenzakalelayo.</translation>
 <translation id="2341767445688917208">I-Chrome OS ayikwazanga ukuvumelanisa amaphasiwedi wakho. Lungisa manje.</translation>
 <translation id="2348335408836342058">I-Chrome idinga imvume ukuze ifinyelele kukhamera yakho nemakrofoni yaleli sayithi</translation>
+<translation id="234869673307233423">I-Chrome ayikwazi ukuhlola amaphasiwedi akho. Zama futhi emuva kwesikhathi.</translation>
 <translation id="2429317896000329049">I-Google Chrome ayikwazanga ukuvumelanisa idatha yakho ngoba ukuvumelanisa akutholakali kusizinda sakho.</translation>
 <translation id="2467438592969358367">I-Google Chrome ifuna ukuthumela amaphasiwedi akho. Thayipha iphasiwedi yakho ye-Windows ukuze uvumele lokhu.</translation>
 <translation id="2485422356828889247">Khipha</translation>
@@ -66,6 +67,7 @@
 <translation id="2689103672227170538">Lesi sandiso siguqule ukuthi yiliphi ikhasi eliboniswa uma uqala i-Chrome.</translation>
 <translation id="2765403129283291972">I-Chrome idinga imvume ukuze ifinyelele kukhamera yakho kuleli sayithi</translation>
 <translation id="2770231113462710648">Guqula isiphequluli esizenzakalelayo sibe yi-:</translation>
+<translation id="2775140325783767197">I-Chrome ayikwazi ukuhlola amaphasiwedi akho. Zama ukuhlola ukuxhumeka kwakho ku-inthanethi.</translation>
 <translation id="2799223571221894425">Qalisa kabusha</translation>
 <translation id="2847461019998147611">Bonisa i-Google Chrome ngalolu limi</translation>
 <translation id="2857540653560290388">Iqalisa i-Chrome...</translation>
@@ -84,10 +86,12 @@
 <translation id="3395323229510056640">Thola usizo nge-Chrome OS</translation>
 <translation id="3396977131400919238">Iphutha lesistimu yokusebenza livele ngesikhathi sokufakwa. Sicela ulande i-Google Chrome futhi.</translation>
 <translation id="3398288718845740432">Fihla kumenyu ye-Chrome</translation>
+<translation id="3434246496373299699">I-Chrome ingahlola amaphasiwedi akho uma ungena ngemvume nge-Akhawunti yakho ye-Google</translation>
 <translation id="3451115285585441894">Ingeza ku-Chrome...</translation>
 <translation id="345171907106878721">Zingeze ngokwakho ku-Chrome</translation>
 <translation id="34857402635545079">Futhi sula idatha kusuka ku-Chrome (<ph name="URL" />)</translation>
 <translation id="3503306920980160878">I-Chrome idinga ukufinyelela kundawo yakho ukuze yabelane ngendawo yakho naleli sayithi</translation>
+<translation id="3533694711092285624">Awekho amaphasiwedi alondoloziwe. I-Chrome ingahlola amaphasiwedi akho uma uwalondolozile.</translation>
 <translation id="3576528680708590453">Umlawuli wakho wesistimu ulungise i-Google Chrome ukuvula esinye isiphequluli ikufinyelela i-<ph name="TARGET_URL_HOSTNAME" />.</translation>
 <translation id="3582972582564653026">Vumelanisa uphinde wenze kube ngeyakho i-Chrome kumadivayisi akho onkana</translation>
 <translation id="3596080736082218006">{COUNT,plural, =0{Umlawuli wakho udinga ukuthi uqalise kabusha i-Chrome ukuze kusetshenziswe isibuyekezo}=1{Umlawuli wakho udinga ukuthi uqalise kabusha i-Chrome ukuze usebenzise isibuyekezo. Iwindi lakho le-Incognito ngeke liphinde livuleke.}one{Umlawuli wakho udinga ukuthi uqalise kabusha i-Chrome ukuze usebenzise isibuyekezo. Amawindi akho angu-# e-Incognito ngeke aze aphinde avuleke.}other{Umlawuli wakho udinga ukuthi uqalise kabusha i-Chrome ukuze usebenzise isibuyekezo. Amawindi akho angu-# e-Incognito ngeke aze aphinde avuleke.}}</translation>
@@ -238,6 +242,7 @@
 <translation id="8556340503434111824">Kukhona inguqulo entsha ye-Google Chrome etholakalayo, futhi ishesha kakhulu kunakuqala.</translation>
 <translation id="8614913330719544658">I-Google Chrome ayiphenduli. Qalisa kabusha manje?</translation>
 <translation id="8625237574518804553">{0,plural, =1{I-Chrome izoqalisa kabusha kuminithi elingu-1}one{I-Chrome izoqalisa kabusha kumaminithi angu-#}other{I-Chrome izoqalisa kabusha kumaminithi angu-#}}</translation>
+<translation id="8641606876632989680">I-Chrome izokwazisa uma ungena ngemvume ngephasiwedi eyonakalisiwe</translation>
 <translation id="8669527147644353129">Isisizi se-Google Chrome</translation>
 <translation id="8679801911857917785">Iphinda ilawule ukuthi yiliphi ikhasi eliboniswayo uma uqala i-Chrome.</translation>
 <translation id="870251953148363156">Buyekeza i-&amp;Google Chrome</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index 07b139a..c6b31c8 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -1031,6 +1031,9 @@
   <message name="IDS_SETTINGS_SAFETY_CHECK_ICON_WARNING_ARIA_LABEL" desc="Accessibility text for a safety check child icon, that indicates a warning for the child check.">
     Warning
   </message>
+  <message name="IDS_SETTINGS_SAFETY_CHECK_REVIEW" desc="Text for a button that allows users to review safety check findings, such as compromised passwords or blocklisted extensions.">
+    Review
+  </message>
   <message name="IDS_SETTINGS_SAFETY_CHECK_UPDATES_PRIMARY_LABEL" desc="'Updates' is an element in safety check that shows the update status of Chrome.">
     Updates
   </message>
@@ -1040,10 +1043,8 @@
   <message name="IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_PRIMARY_LABEL" desc="'Passwords' is an element in safety check that allows users to check for their passwords being compromised.">
     Passwords
   </message>
-  <message name="IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_BUTTON" desc="This button allows users to change their compromised passwords.">
-    {NUM_PASSWORDS, plural,
-     =1 {Change password}
-     other {Change passwords}}
+  <message name="IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_BUTTON_ARIA_LABEL" desc="Accessibility text for the button that allows users to review their passwords.">
+    Review passwords
   </message>
   <message name="IDS_SETTINGS_SAFETY_CHECK_SAFE_BROWSING_ENABLED" desc="This text points out that Safe Browsing is enabled and that the user is protected.">
     Safe Browsing is on and protecting you from harmful sites and downloads
@@ -1081,9 +1082,6 @@
      =1 {Your administrator turned 1 potentially harmful extension back on}
      other {Your administrator turned {NUM_EXTENSIONS} potentially harmful extensions back on}}
   </message>
-  <message name="IDS_SETTINGS_SAFETY_CHECK_EXTENSIONS_BUTTON" desc="This button allows users to review their extensions settings.">
-    Review
-  </message>
   <message name="IDS_SETTINGS_SAFETY_CHECK_EXTENSIONS_BUTTON_ARIA_LABEL" desc="Accessibility text for the button that allows users to review their extensions settings.">
     Review extensions
   </message>
@@ -1171,12 +1169,6 @@
   <message name="IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TEXT" desc="The text of a confirmation dialog that confirms that the user want to send the 'Do Not Track' header">
     Enabling "Do Not Track" means that a request will be included with your browsing traffic. Any effect depends on whether a website responds to the request, and how the request is interpreted. For example, some websites may respond to this request by showing you ads that aren't based on other websites you've visited. Many websites will still collect and use your browsing data - for example to improve security, to provide content, services, ads and recommendations on their websites, and to generate reporting statistics. <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
   </message>
-  <message name="IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION" desc="description label for verified access about premium contents">
-    Enable Verified Access
-  </message>
-  <message name="IDS_SETTINGS_WAKE_ON_WIFI_DESCRIPTION" desc="In the settings tab, the text next to the checkbox for enabling quickly reconnecting to known Wi-Fi SSIDs.">
-    Keep Wi-Fi on during sleep
-  </message>
   <message name="IDS_SETTINGS_PERMISSIONS" desc="Name of the settings page which allows users to manage permissions and site content settings">
     Permissions and content settings
   </message>
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW.png.sha1
new file mode 100644
index 0000000..7f57c7b
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW.png.sha1
@@ -0,0 +1 @@
+da19e11e7b0bd1e7d303905f144b334f40094575
\ No newline at end of file
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index e2bfce05..9421e3e 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2978,12 +2978,6 @@
      flag_descriptions::kExpensiveBackgroundTimerThrottlingName,
      flag_descriptions::kExpensiveBackgroundTimerThrottlingDescription, kOsAll,
      FEATURE_VALUE_TYPE(features::kExpensiveBackgroundTimerThrottling)},
-#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
-    {"enable-cloud-printer-handler",
-     flag_descriptions::kCloudPrinterHandlerName,
-     flag_descriptions::kCloudPrinterHandlerDescription, kOsDesktop,
-     FEATURE_VALUE_TYPE(features::kCloudPrinterHandler)},
-#endif
 
 #if defined(OS_CHROMEOS)
     {ui_devtools::switches::kEnableUiDevTools,
diff --git a/chrome/browser/chromeos/policy/device_login_screen_policy_browsertest.cc b/chrome/browser/chromeos/policy/device_login_screen_policy_browsertest.cc
index 5a59e9b..e463ada67 100644
--- a/chrome/browser/chromeos/policy/device_login_screen_policy_browsertest.cc
+++ b/chrome/browser/chromeos/policy/device_login_screen_policy_browsertest.cc
@@ -204,13 +204,7 @@
 // Tests that enabling/disabling public accounts correctly reflects in the login
 // UI.
 IN_PROC_BROWSER_TEST_F(DeviceLoginScreenPolicyBrowsertest, DeviceLocalAccount) {
-  chromeos::OobeScreenWaiter(chromeos::GaiaView::kScreenId).Wait();
-
-  // Wait for Gaia dialog to be open.
-  chromeos::test::TestPredicateWaiter(base::BindRepeating([]() {
-    return ash::LoginScreenTestApi::IsOobeDialogVisible();
-  })).Wait();
-
+  EXPECT_TRUE(ash::LoginScreenTestApi::IsOobeDialogVisible());
   em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
   auto* account = proto.mutable_device_local_accounts()->add_account();
   account->set_account_id("test");
@@ -222,6 +216,7 @@
   chromeos::test::TestPredicateWaiter(base::BindRepeating([]() {
     return !ash::LoginScreenTestApi::IsOobeDialogVisible();
   })).Wait();
+  EXPECT_EQ(ash::LoginScreenTestApi::GetUsersCount(), 1);
 
   proto.clear_device_local_accounts();
   RefreshDevicePolicy();
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index b766aa3..8f459492 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1230,11 +1230,6 @@
     "expiry_milestone": 79
   },
   {
-    "name": "enable-cloud-printer-handler",
-    "owners": [ "//printing/OWNERS" ],
-    "expiry_milestone": 82
-  },
-  {
     "name": "enable-command-line-on-non-rooted-devices",
     "owners": [ "chrome-android-app" ],
     // This flag is used for debugging on Android; it causes Android Chromium
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 1a918a8f..2e164d2 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -306,12 +306,6 @@
     "When the PDF plugin is unavailable, show a click-to-open placeholder for "
     "embedded PDFs.";
 
-const char kCloudPrinterHandlerName[] = "Enable Cloud Printer Handler";
-const char kCloudPrinterHandlerDescription[] =
-    "Use the new cloud printer handler for communicating with the cloud "
-    "print server, instead of the cloud print interface in the Print "
-    "Preview WebUI.";
-
 const char kDecodeJpeg420ImagesToYUVName[] = "YUV decoding for JPEG";
 const char kDecodeJpeg420ImagesToYUVDescription[] =
     "Decode and render 4:2:0 formatted jpeg images from YUV instead of RGB."
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 49e9616..a66ad67 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -185,9 +185,6 @@
 extern const char kClickToOpenPDFName[];
 extern const char kClickToOpenPDFDescription[];
 
-extern const char kCloudPrinterHandlerName[];
-extern const char kCloudPrinterHandlerDescription[];
-
 extern const char kDecodeJpeg420ImagesToYUVName[];
 extern const char kDecodeJpeg420ImagesToYUVDescription[];
 
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb
index ce3f2238..f217f33 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">رابط</translation>
 <translation id="2381733276052567791">تفعيل ميزة تحويل النص إلى كلام أو إيقافها</translation>
 <translation id="2390264819538553347">‏للتقدم، اضغط على Enter، وللرجوع للخلف، اضغط على Backspace.</translation>
+<translation id="2398579267367951220">‏اكتب للبحث في الصفحة. اضغط على enter للحصول على النتيجة سريعًا، أو اضغط على الأسهم المتّجهة للأسفل أو للأعلى لتصفّح النتائج، أو استمر بالكتابة لتغيير البحث، أو اضغط على escape للإلغاء.</translation>
 <translation id="240709722712693803">بنفسجي مزرق</translation>
 <translation id="2416512023405990736">مربع اختيار غير محدد</translation>
 <translation id="2417569100218200841">معلومات المحتوى</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_as.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_as.xtb
index 1bfc40b..8093434d 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_as.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_as.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">এটা লিংক</translation>
 <translation id="2381733276052567791">কথন অন বা অফ কৰিবলৈ ট’গ’ল কৰক</translation>
 <translation id="2390264819538553347">আগবাঢ়িবলৈ এণ্টাৰ দবাওক; উভতি যাবলৈ বেকস্পেছ দবাওক।</translation>
+<translation id="2398579267367951220">পৃষ্ঠাখনত সন্ধান কৰিবলৈ টাইপ কৰক। ফলাফললৈ পোনপটীয়াকৈ যাবলৈ এণ্টাৰ টিপক, ফলাফল ব্ৰাউজ কৰিবলৈ আপ অথবা ডাউন এৰ’সমূহ টিপক, আপোনাৰ সন্ধান সলনি কৰিবলৈ টাইপ কৰি থাকক অথবা বাতিল কৰিবলৈ এস্কে’প টিপক।</translation>
 <translation id="240709722712693803">নীলা বেঙুনীয়া</translation>
 <translation id="2416512023405990736">টিক চিহ্ন নিদিয়া চ্চেকবক্স</translation>
 <translation id="2417569100218200841">সমলৰ তথ্য</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb
index a40f88b9..24d1ec92 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Link</translation>
 <translation id="2381733276052567791">Nitqi aktiv və ya deaktiv edin</translation>
 <translation id="2390264819538553347">Davam etmək üçün daxil etmək, geri qayıtmaq üçün geri düyməsinə basın.</translation>
+<translation id="2398579267367951220">Səhifədə axtarın. Nəticəyə keçmək üçün enter düyməsinə basın, nəticələrə baxmaq üçün yuxarı və ya aşağı oxa basın, axtarışı dəyişmək üçün yazmağa davam edin və ya ləğv etmək üçün escape düyməsinə basın.</translation>
 <translation id="240709722712693803">Göyümtül Bənövşəyi</translation>
 <translation id="2416512023405990736">İşarələnməmiş xana</translation>
 <translation id="2417569100218200841">Məzmun haqqında məlumat</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_be.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_be.xtb
index b0eedc5b..1c329ae 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_be.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_be.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Спасылка</translation>
 <translation id="2381733276052567791">Уключыць або выключыць маўленне</translation>
 <translation id="2390264819538553347">Націсніце клавішу Enter, каб перайсці на наступную старонку, або Backspace, каб вярнуцца на папярэднюю.</translation>
+<translation id="2398579267367951220">Увядзіце тэкст, які трэба знайсці на старонцы. Enter – перайсці да выніку, стрэлкі ўверх або ўніз – пераключыцца паміж вынікамі. Каб змяніць пошукавы запыт, увядзіце патрэбны тэкст. Esc – скасаваць пошук.</translation>
 <translation id="240709722712693803">Сіне-фіялетавы</translation>
 <translation id="2416512023405990736">Поле для птушкі: птушка знята</translation>
 <translation id="2417569100218200841">Інфармацыя пра змесціва</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb
index 2d10225..ba316c2 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Връзка</translation>
 <translation id="2381733276052567791">Включване или изключване на функцията за реч</translation>
 <translation id="2390264819538553347">За да продължите, натиснете Enter, а за да се върнете – Backspace.</translation>
+<translation id="2398579267367951220">Въведете текст, за да търсите в страницата. Натиснете Enter, за да преминете към резултата, клавиша със стрелка нагоре или надолу за разглеждане на резултатите, продължете да въвеждате текст, за да промените търсенето си, или натиснете Escape за анулиране.</translation>
 <translation id="240709722712693803">ярковиолетово</translation>
 <translation id="2416512023405990736">Квадратче без отметка</translation>
 <translation id="2417569100218200841">Информация за съдържанието</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb
index 02bfefc..948ac5b 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Odkaz</translation>
 <translation id="2381733276052567791">Zapnout či vypnout hlasovou odezvu</translation>
 <translation id="2390264819538553347">Na další stránku přejdete stisknutím klávesy Enter. Na předchozí stránku přejdete stisknutím klávesy Backspace.</translation>
+<translation id="2398579267367951220">Zadejte stránku, kterou chcete vyhledat. Stisknutím klávesy Enter přejdete na výsledek, pomocí šipek nahoru a dolů lze procházet výsledky, pokračováním v zadávání můžete vyhledávání upravit a pomocí klávesy Escape jej zrušíte.</translation>
 <translation id="240709722712693803">Modrofialová</translation>
 <translation id="2416512023405990736">Nezaškrtnuté zaškrtávací políčko</translation>
 <translation id="2417569100218200841">Informace o obsahu</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es-419.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es-419.xtb
index 6895620..cba150c5 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es-419.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es-419.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Un vínculo</translation>
 <translation id="2381733276052567791">Activa o desactiva el habla</translation>
 <translation id="2390264819538553347">Para avanzar, presiona Intro; para volver, presiona la tecla de retroceso.</translation>
+<translation id="2398579267367951220">Escribe el nombre de la página para buscarla. Presiona Intro para ir a los resultados, las flechas hacia arriba y abajo para seleccionar uno, sigue escribiendo para cambiar la búsqueda o presiona Esc para cancelarla.</translation>
 <translation id="240709722712693803">Violeta azulado</translation>
 <translation id="2416512023405990736">Una casilla de verificación desmarcada</translation>
 <translation id="2417569100218200841">Información del contenido</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb
index 33626b0..bff3746 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Link</translation>
 <translation id="2381733276052567791">Kõne sisse- või väljalülitamine</translation>
 <translation id="2390264819538553347">Edasiliikumiseks vajutage sisestusklahvi, tagasiliikumiseks tagasilükkeklahvi.</translation>
+<translation id="2398579267367951220">Sisestage lehelt otsimiseks. Vajutage sisestusklahvi tulemuse juurde liikumiseks, üles- või allanoolt tulemuste sirvimiseks, jätkake sisestamist otsingu muutmiseks või vajutage paoklahvi tühistamiseks.</translation>
 <translation id="240709722712693803">Sinakaslilla</translation>
 <translation id="2416512023405990736">Märkimata ruut</translation>
 <translation id="2417569100218200841">Sisu teave</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb
index 946735e..7ba3719 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Esteka bat</translation>
 <translation id="2381733276052567791">Aktibatu edo desaktibatu hizketa</translation>
 <translation id="2390264819538553347">Aurrera egiteko, sakatu Sartu; atzera egiteko, berriz, sakatu zuriune-barra.</translation>
+<translation id="2398579267367951220">Idatzi orrian bilatu nahi duzuna. Sakatu Sartu tekla emaitza saltatzeko, Gora edo Behera geziak emaitzak arakatzeko, jarraitu idazten bilaketa aldatzeko edo sakatu Ihes tekla uzteko.</translation>
 <translation id="240709722712693803">Bioleta urdinxka</translation>
 <translation id="2416512023405990736">Markatu gabeko kontrol-lauki bat</translation>
 <translation id="2417569100218200841">Edukiaren informazioa</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb
index 8e693fe..6252724 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Un lien</translation>
 <translation id="2381733276052567791">Activez ou désactivez la reconnaissance vocale</translation>
 <translation id="2390264819538553347">Pour avancer, appuyez sur Entrée; pour retourner à la page précédente, appuyez sur Retour arrière.</translation>
+<translation id="2398579267367951220">Tapez pour rechercher du texte dans la page. Appuyez sur Entrée pour accéder aux résultats, ou sur les flèches vers le haut ou le bas pour passer d'un résultat à l'autre; continuez à écrire pour modifier la recherche; ou appuyez sur Échap pour annuler la recherche.</translation>
 <translation id="240709722712693803">Bleu violet</translation>
 <translation id="2416512023405990736">Une case décochée</translation>
 <translation id="2417569100218200841">Information sur le contenu</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb
index 04a5b5b..6277e4a 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Un lien</translation>
 <translation id="2381733276052567791">Activer/Désactiver la voix</translation>
 <translation id="2390264819538553347">Pour avancer, appuyez sur Entrée. Pour revenir en arrière, appuyez sur Retour arrière.</translation>
+<translation id="2398579267367951220">Saisissez le texte à rechercher dans la page. Appuyez sur Entrée pour accéder au résultat. Appuyez sur les flèches vers le haut et vers le bas pour passer d'un résultat à l'autre. Continuez de saisir du texte pour modifier votre recherche, ou appuyez sur Échap pour l'annuler.</translation>
 <translation id="240709722712693803">Bleu-violet</translation>
 <translation id="2416512023405990736">Une case décochée</translation>
 <translation id="2417569100218200841">Infos sur le contenu</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
index c770127a..04788251 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">લિંક</translation>
 <translation id="2381733276052567791">વાણી ચાલુ અથવા બંધ કરવાનું ટૉગલ કરો</translation>
 <translation id="2390264819538553347">આગળ જવા માટે, enter દબાવો, પાછળ જવા માટે backspace દબાવો.</translation>
+<translation id="2398579267367951220">પેજ શોધવા માટે ટાઇપ કરો. પરિણામ પર જવા માટે enter, પરિણામો બ્રાઉઝ કરવા માટે ઉપર અથવા નીચે એરો દબાવો, તમારી શોધમાં ફેરફાર કરવા માટે ટાઇપ કરવાનું ચાલુ રાખો અથવા રદ કરવા માટે escape દબાવો.</translation>
 <translation id="240709722712693803">ભૂરો જાંબલી</translation>
 <translation id="2416512023405990736">અનચેક કરેલુંં ચેકબોક્સ</translation>
 <translation id="2417569100218200841">કન્ટેન્ટ માહિતી</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb
index c470934..21f41c1 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">लिंक</translation>
 <translation id="2381733276052567791">बोली को चालू या बंद पर टॉगल करें</translation>
 <translation id="2390264819538553347">आगे जाने के लिए, enter दबाएं, वापस जाने के लिए, backspace दबाएं.</translation>
+<translation id="2398579267367951220">पेज खाेजने के लिए टाइप करें. नतीजे पर जाने के लिए Enter दबाएं, नतीजाें को ब्राउज़ करने के लिए, अप या डाउन ऐराे (नीचे या ऊपर की ओर तीर के निशान वाले बटन) बटन दबाएं. साथ ही, दूसरी चीज़ें खाेजने के लिए टाइप करते रहें या रद्द करने के लिए Escape दबाएं.</translation>
 <translation id="240709722712693803">नीला बैंगनी</translation>
 <translation id="2416512023405990736">अनचेक किया गया चेकबॉक्स</translation>
 <translation id="2417569100218200841">सामग्री की जानकारी</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb
index 521023b..5cd0bcd 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Tautan</translation>
 <translation id="2381733276052567791">Mengaktifkan atau menonaktifkan fitur ucapan</translation>
 <translation id="2390264819538553347">Untuk melanjutkan, tekan enter; untuk kembali, tekan backspace.</translation>
+<translation id="2398579267367951220">Ketik untuk menelusuri halaman. Tekan enter untuk langsung menuju ke hasil, panah atas atau bawah untuk menjelajahi hasil, terus mengetik untuk mengubah penelusuran, atau escape untuk membatalkan.</translation>
 <translation id="240709722712693803">Blue Violet</translation>
 <translation id="2416512023405990736">Kotak centang yang tidak dicentang</translation>
 <translation id="2417569100218200841">Info konten</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb
index fd23be7..8997de1 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb
@@ -167,7 +167,7 @@
 <translation id="2347456970887948350">Un link</translation>
 <translation id="2381733276052567791">Attiva o disattiva la sintesi vocale</translation>
 <translation id="2390264819538553347">Per avanzare premi INVIO; per tornare indietro premi BACKSPACE.</translation>
-<translation id="2398579267367951220">Digita il testo da cercare nella pagina. Premi Invio per passare al risultato, le Frecce su e giù per scorrere i risultati, continua a digitare per modificare la ricerca oppure premi Esc per annullare.</translation>
+<translation id="2398579267367951220">Digita il testo da cercare nella pagina. Premi INVIO per passare al risultato, le FRECCE SU e GIÙ per scorrere i risultati, continua a digitare per modificare la ricerca oppure premi ESC per annullare.</translation>
 <translation id="240709722712693803">Blu-violetto</translation>
 <translation id="2416512023405990736">Una casella di controllo deselezionata</translation>
 <translation id="2417569100218200841">Informazioni sui contenuti</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb
index 9be54faf..eca620d4 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">リンク</translation>
 <translation id="2381733276052567791">読み上げの有効と無効を切り替えます</translation>
 <translation id="2390264819538553347">次に進むには Enter キー、前に戻るには Backspace キーを押します。</translation>
+<translation id="2398579267367951220">ページ内を検索するには入力してください。見つかった結果に移動するには、Enter キーを押します。結果を 1 つずつ確認するには、上矢印または下矢印キーを押します。違う語句を検索する場合は、その語句を入力します。キャンセルする場合は、Esc キーを押します。</translation>
 <translation id="240709722712693803">ブルー バイオレット</translation>
 <translation id="2416512023405990736">チェックボックスがオフ</translation>
 <translation id="2417569100218200841">コンテンツ情報</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb
index a690d0d..ba4921df 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">ბმული</translation>
 <translation id="2381733276052567791">გახმოვანების ჩართვა ან გამორთვა</translation>
 <translation id="2390264819538553347">წინ გადასასვლელად, დააჭირეთ „Enter“-ს; უკან გადასასვლელად, დააჭირეთ „უკუშლას“.</translation>
+<translation id="2398579267367951220">აკრიფეთ ტექსტი გვერდზე ძიებისთვის. შედეგზე გადასასვლელად დააჭირეთ კლავიშს „enter“, შედეგების დასათვალიერებლად — კლავიშებს ზემოთ/ქვემოთ მიმართული ისრებით. საძიებო მოთხოვნის შესაცვლელად გააგრძელეთ ტექსტის აკრეფა, ხოლო გასაუქმებლად დააჭირეთ კლავიშს „escape“.</translation>
 <translation id="240709722712693803">მოლურჯო იისფერი</translation>
 <translation id="2416512023405990736">მოუნიშნავი მოსანიშნი ველი</translation>
 <translation id="2417569100218200841">შიგთავსის ინფორმაცია</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb
index 0161f328..3b189fc3 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Сілтеме</translation>
 <translation id="2381733276052567791">Дауыстап оқуды қосу немесе өшіру</translation>
 <translation id="2390264819538553347">Келесі бетке өту үшін Enter пернесін, ал кері қайту үшін Backspace пернесін басыңыз.</translation>
+<translation id="2398579267367951220">Беттен ізделетін мәтінді теріңіз. Нәтижелерге өту үшін Enter пернесін, ал оларды шолып шығу үшін жоғары не төмен көрсеткі пернесін басыңыз. Іздеу сұрауын өзгерту үшін мәтін теріңіз, ал бас тарту үшін Escape пернесін басыңыз.</translation>
 <translation id="240709722712693803">Көкшіл күлгін</translation>
 <translation id="2416512023405990736">Белгіленбеген құсбелгі ұяшығы</translation>
 <translation id="2417569100218200841">Мазмұн ақпараты</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb
index 3e4348de..a299182 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">តំណ</translation>
 <translation id="2381733276052567791">បិទ ឬ​បើក​ការនិយាយ</translation>
 <translation id="2390264819538553347">ដើម្បីបន្ត​ សូមចុច​ចូល ឬ​ប្រសិន​បើ​ចង់ថយក្រោយ សូមចុច​លុបថយក្រោយ។</translation>
+<translation id="2398579267367951220">វាយបញ្ចូល ដើម្បីស្វែងរក​ទំព័រ។ ចុច enter ដើម្បីរំលងទៅ​លទ្ធផល ចុចព្រួញ up ឬ down ដើម្បីរុករក​លទ្ធផល បន្តវាយបញ្ចូលដើម្បីប្ដូរការស្វែងរក​របស់អ្នក ឬចុច escape ដើម្បីបោះបង់។</translation>
 <translation id="240709722712693803">ស្វាយចាស់</translation>
 <translation id="2416512023405990736">ប្រអប់ធីកដែលមិនបានធីក</translation>
 <translation id="2417569100218200841">ព័ត៌មានមាតិកា</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb
index d381522..6fad7f0 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">ಒಂದು ಲಿಂಕ್</translation>
 <translation id="2381733276052567791">ಧ್ವನಿ ಆನ್ ಅಥವಾ ಆಫ್ ಮಾಡಿ</translation>
 <translation id="2390264819538553347">ಮುಂದುವರಿಯಲು, ಎಂಟರ್ ಒತ್ತಿರಿ; ಹಿಂದಕ್ಕೆ ಮರಳಲು, ಬ್ಯಾಕ್‌ಸ್ಪೇಸ್‌ ಒತ್ತಿ.</translation>
+<translation id="2398579267367951220">ಪುಟವನ್ನು ಹುಡುಕಲು ಟೈಪ್ ಮಾಡಿ. ಫಲಿತಾಂಶವನ್ನು ನೋಡಲು enter, ಫಲಿತಾಂಶಗಳನ್ನು ಬ್ರೌಸ್ ಮಾಡಲು ಮೇಲ್ಮುಖ ಅಥವಾ ಕೆಳಮುಖ ಬಾಣದ ಕೀಗಳನ್ನು ಒತ್ತಿರಿ, ನಿಮ್ಮ ಹುಡುಕಾಟವನ್ನು ಬದಲಾಯಿಸಲು ಟೈಪ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಿ ಅಥವಾ ರದ್ದುಗೊಳಿಸಲು ಎಸ್ಕೇಪ್ ಒತ್ತಿರಿ.</translation>
 <translation id="240709722712693803">ನೀಲಿ ನೇರಳೆ</translation>
 <translation id="2416512023405990736">ಗುರುತಿಸದೆ ಇರುವ ಚೆಕ್‌ಬಾಕ್ಸ್</translation>
 <translation id="2417569100218200841">ವಿಷಯ ಮಾಹಿತಿ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb
index 5b617022..c749274 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">링크</translation>
 <translation id="2381733276052567791">음성을 사용 또는 사용 중지로 전환</translation>
 <translation id="2390264819538553347">계속하려면 Enter를 누릅니다. 뒤로 돌아가려면 Backspace를 누릅니다.</translation>
+<translation id="2398579267367951220">페이지를 검색하려면 입력하세요. Enter를 눌러 결과로 바로 이동하거나 위쪽 또는 아래쪽 화살표를 사용하여 결과를 탐색할 수 있습니다. 검색어를 변경하려면 계속 입력하세요. 취소하려면 Esc를 누릅니다.</translation>
 <translation id="240709722712693803">블루 바이올렛</translation>
 <translation id="2416512023405990736">선택 취소된 체크박스</translation>
 <translation id="2417569100218200841">콘텐츠 정보</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb
index 16049e8f..f8a1f37 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Шилтеме</translation>
 <translation id="2381733276052567791">Кепти өчүрүү/күйгүзүү</translation>
 <translation id="2390264819538553347">Алдыга жылдыруу үчүн "enter" баскычын басыңыз; артка жылдыруу үчүн "backspace" баскычын басыңыз.</translation>
+<translation id="2398579267367951220">Баракты издөө үчүн териңиз. Натыйжаларга өтүү үчүн "enter" баскычын, натыйжаларды серептөө үчүн өйдө жана ылдый жебелерин басыңыз, издеп жаткан нерсени өзгөртүү үчүн тере бериңиз, жокко чыгаруу үчүн "escape" баскычын басыңыз.</translation>
 <translation id="240709722712693803">Көгүш сыя</translation>
 <translation id="2416512023405990736">Кутуча белгиленген эмес</translation>
 <translation id="2417569100218200841">Мазмун боюнча маалымат</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb
index 4a4c963..20c2af36 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">ລິ້ງ</translation>
 <translation id="2381733276052567791">ເປີດ ຫຼື ປິດສຽງເວົ້າ</translation>
 <translation id="2390264819538553347">ເພື່ອສືບຕໍ່, ກົດ enter; ເພື່ອກັບຄືນ, ກົດ backspace.</translation>
+<translation id="2398579267367951220">ພິມເພື່ອຊອກຫາໜ້າ. ກົດ Enter ເພື່ອຂ້າມໄປຫາຜົນການຊອກຫາ, ກົດລູກສອນຂຶ້ນ ຫຼື ລົງເພື່ອເລື່ອນເບິ່ງຜົນຊອກຫາ, ສືບຕໍ່ພິມເພື່ອປ່ຽນການຊອກຫາຂອງທ່ານ ຫຼື Escape ເພື່ອຍົກເລີກ.</translation>
 <translation id="240709722712693803">ສີຟ້າບລູໄວໂອເລັດ</translation>
 <translation id="2416512023405990736">ກ່ອງທີ່ບໍ່ໄດ້ໝາຍເອົາ</translation>
 <translation id="2417569100218200841">ຂໍ້​ມູນ​ເນື້ອ​ໃນ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb
index 3adb46a..6e6e12f 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Nuoroda</translation>
 <translation id="2381733276052567791">Įjungti arba išjungti kalbėjimą</translation>
 <translation id="2390264819538553347">Jei norite eiti pirmyn, paspauskite „Enter“; jei norite grįžti, paspauskite naikinimo klavišą.</translation>
+<translation id="2398579267367951220">Įveskite, jei norite ieškoti puslapio. Paspaudę klavišą „Enter“ pereisite prie rezultatų, rodyklėmis aukštyn ir žemyn juos naršysite, vesdami tekstą toliau pakeisite paiešką, o paspaudę klavišą „Escape“ atšauksite.</translation>
 <translation id="240709722712693803">Violetinė spalva</translation>
 <translation id="2416512023405990736">Nepažymėtas žymimasis laukelis</translation>
 <translation id="2417569100218200841">Turinio informacija</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb
index ade020e7..8a68c9bf 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Saite</translation>
 <translation id="2381733276052567791">Tiek ieslēgta vai izslēgta runa</translation>
 <translation id="2390264819538553347">Lai pārietu uz nākamo lapu, nospiediet ievadīšanas taustiņu; lai pārietu uz iepriekšējo lapu, nospiediet atpakaļatkāpes taustiņu.</translation>
+<translation id="2398579267367951220">Rakstiet, lai meklētu saturu lapā. Nospiediet ievadīšanas taustiņu, lai pārietu uz rezultātu, augšupvērsto vai lejupvērsto bultiņu, lai pārlūkotu rezultātus, turpiniet rakstīt, lai mainītu meklēšanas vaicājumu, vai nospiediet atsoļa taustiņu, lai atceltu meklēšanu.</translation>
 <translation id="240709722712693803">Zili violeta</translation>
 <translation id="2416512023405990736">Neatzīmēta izvēles rūtiņa</translation>
 <translation id="2417569100218200841">Satura informācija</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb
index 1f72c8e..d0a76a4 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">ഒരു ലിങ്ക്</translation>
 <translation id="2381733276052567791">സംഭാഷണം ഓണാക്കൽ അല്ലെങ്കിൽ ഓഫാക്കൽ മാറ്റുക</translation>
 <translation id="2390264819538553347">അടുത്ത പേജിലേക്ക് പോകാൻ 'എന്റർ' അമർത്തുക; തിരികെ പോകാൻ 'ബാക്ക്‌സ്‌പെയ്‌സ്' അമർത്തുക.</translation>
+<translation id="2398579267367951220">പേജ് തിരയാൻ ടൈപ്പ് ചെയ്യുക. ഫലത്തിലേക്ക് പോകാൻ എന്റർ അമർത്തുക, ഫലങ്ങൾ ബ്രൗസ് ചെയ്യാൻ മുകളിലേക്കും താഴേക്കുമുള്ള അമ്പടയാളങ്ങൾ ഉപയോഗിക്കുക, തിരയൽ മാറ്റാൻ ടൈപ്പ് ചെയ്യുന്നത് തുടരുക, റദ്ദാക്കാൻ എസ്‌കേപ്പ് അമർത്തുക.</translation>
 <translation id="240709722712693803">നീല കലർന്ന വയലറ്റ്</translation>
 <translation id="2416512023405990736">അൺചെക്ക് ചെയ്‌ത ഒരു ചെക്ക്‌ ബോക്‌സ്</translation>
 <translation id="2417569100218200841">ഉള്ളടക്ക വിവരം</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb
index 6e2092e3..4a91cca2 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Холбоос</translation>
 <translation id="2381733276052567791">Яриаг унтраах/асаах</translation>
 <translation id="2390264819538553347">Дараагийн хуудсанд очих бол Enter товчлуурыг; буцахын тулд арилгах товчлуурыг дарна уу.</translation>
+<translation id="2398579267367951220">Хуудаснаас хайхын тулд бичнэ үү. Илэрц рүү үсэрч очихын тулд Enter, илэрцүүдийг үзэхийн тулд дээш эсвэл доош сумыг дарж, хайлтаа өөрчлөхийн тулд үргэлжлүүлэн бичнэ үү эсвэл болихын тулд escape товчийг дарна уу.</translation>
 <translation id="240709722712693803">Нил хөх ягаан (Яргуйн өнгө)</translation>
 <translation id="2416512023405990736">Сонгоогүй checkbox</translation>
 <translation id="2417569100218200841">Контентын мэдээлэл</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb
index cf2393d..cf61dec 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">एक लिंक</translation>
 <translation id="2381733276052567791">भाषण सुरू किंवा बंद करा</translation>
 <translation id="2390264819538553347">पुढे जाण्यासाठी, एंटर दाबा; मागे जाण्यासाठी, बॅकस्पेस दाबा.</translation>
+<translation id="2398579267367951220">पेज शोधण्यासाठी टाइप करा. परिणामांवर जाण्यासाठी एंटर, परिणाम ब्राउझ करण्यासाठी अप किंवा डाउन अ‍ॅरो दाबा, तुमचा शोध बदलण्यासाठी टाइप करणे सुरू ठेवा किंवा रद्द करण्यासाठी एस्केप दाबा.</translation>
 <translation id="240709722712693803">निळसर जांभळा</translation>
 <translation id="2416512023405990736">अनचेक केलेला चेकबॉक्स</translation>
 <translation id="2417569100218200841">आशय माहिती</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb
index bc364b5..0a5a2a3 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb
@@ -70,7 +70,7 @@
 <translation id="1480046233931937785">क्रेडिटहरू</translation>
 <translation id="1487494366197411587">यस Chromebook मा यो खोजको कुञ्जी बायाँतिरको सिफ्ट कुञ्जीको ठिक माथितिर छ।</translation>
 <translation id="1498498210836053409">पाठ सम्पादन गर्दा स्टिकी मोड निष्क्रिय पार्नुहोस् (स्मार्ट स्टिकी मोड)</translation>
-<translation id="1499041187027566160">आवाज ठूलो</translation>
+<translation id="1499041187027566160">आवाज ठुलो</translation>
 <translation id="1502086903961450562">अघिल्लो ग्राफिक</translation>
 <translation id="1506187449813838456">पिच वृद्धि गर्नु</translation>
 <translation id="151784044608172266">अर्को वाक्य</translation>
@@ -89,7 +89,7 @@
 <translation id="1616111909442424068">गहुँगोरो</translation>
 <translation id="1618597272655350600">हालको स्थितिको पूरा विवरण घोषणा गर्छ</translation>
 <translation id="1627222324347828322">भूत जस्तो सेतो</translation>
-<translation id="1639634871799530612">{COUNT,plural, =1{ भन्दा ठूलो}other{ संकेतहरू # भन्दा सानो}}</translation>
+<translation id="1639634871799530612">{COUNT,plural, =1{ भन्दा ठुलो}other{ संकेतहरू # भन्दा सानो}}</translation>
 <translation id="1653266918374749391">अघिल्लो तह 3 शीर्षक</translation>
 <translation id="1657616855184033958">घटनाका स्ट्रिमसम्बन्धी फिल्टरहरू देखाउनुहोस्</translation>
 <translation id="1659072772017912254">जाँच गरिएको छैन</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb
index def9fd14..83a2bb10 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">ଏକ ଲିଙ୍କ୍</translation>
 <translation id="2381733276052567791">ସ୍ପୀଚ୍‌ ଚାଲୁ କିମ୍ବା ବନ୍ଦ କରି ଟୋଗଲ୍ କରନ୍ତୁ</translation>
 <translation id="2390264819538553347">ଆଗକୁ ବଢ଼ିବା ପାଇଁ, ଏଣ୍ଟର୍ ଦବାନ୍ତୁ; ପଛକୁ ଯିବା ପାଇଁ, ବ୍ୟାକସ୍ପେସ୍‌ ଦବାନ୍ତୁ।</translation>
+<translation id="2398579267367951220">ପୃଷ୍ଠା ସନ୍ଧାନ କରିବା ପାଇଁ ଟାଇପ୍ କରନ୍ତୁ ଫଳାଫଳକୁ ଯିବା ପାଇଁ ଏଣ୍ଟର୍ କୀ, ଫଳାଫଳଗୁଡ଼ିକୁ ବ୍ରାଉଜ୍ କରିବା ପାଇଁ ଉପର କିମ୍ବା ତଳ ତୀର କୀ'ଗୁଡ଼ିକ ଦବାନ୍ତୁ, ଆପଣଙ୍କ ସନ୍ଧାନ ପରିବର୍ତ୍ତନ କରିବାକୁ ଟାଇପିଂ ଜାରି ରଖନ୍ତୁ କିମ୍ବା ବାତିଲ୍ କରିବାକୁ ଏସ୍କେପ୍ କୀ ଦବାନ୍ତୁ।</translation>
 <translation id="240709722712693803">ନୀଳ ବାଇଗଣୀ</translation>
 <translation id="2416512023405990736">ଏକ ଚେକ୍‌ କରାଯାଇନଥିବା ଚେକ୍‌ବକ୍ସ</translation>
 <translation id="2417569100218200841">ବିଷୟବସ୍ତୁ ସୂଚନା</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb
index 1d21b47..4238a90 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">ਇੱਕ ਲਿੰਕ</translation>
 <translation id="2381733276052567791">ਬੋਲੀ ਨੂੰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨ ਲਈ ਟੌਗਲ ਕਰੋ</translation>
 <translation id="2390264819538553347">ਅੱਗੇ ਵਧਣ ਲਈ, ਐਂਟਰ ਕੁੰਜੀ ਦਬਾਓ; ਵਾਪਸ ਜਾਣ ਲਈ, ਬੈਕਸਪੇਸ ਕੁੰਜੀ ਦਬਾਓ।</translation>
+<translation id="2398579267367951220">ਪੰਨਾ ਖੋਜਣ ਲਈ ਟਾਈਪ ਕਰੋ। ਨਤੀਜੇ 'ਤੇ ਜਾਣ ਲਈ Enter ਦਬਾਓ, ਨਤੀਜਿਆਂ ਨੂੰ ਬ੍ਰਾਊਜ਼ ਕਰਨ ਲਈ ਉੱਪਰ ਜਾਂ ਹੇਠਾਂ ਵੱਲ ਦੀਆਂ ਤੀਰ ਕੁੰਜੀਆਂ ਦਬਾਓ, ਆਪਣੀ ਖੋਜ ਨੂੰ ਬਦਲਣ ਲਈ ਟਾਈਪ ਕਰਦੇ ਰਹੋ, ਜਾਂ ਰੱਦਕਰਨ ਲਈ Escape ਦਬਾਓ।</translation>
 <translation id="240709722712693803">ਨੀਲ ਜਾਮਨੀ</translation>
 <translation id="2416512023405990736">ਬਿਨਾਂ ਸਹੀ ਦੇ ਨਿਸ਼ਾਨ ਤੋਂ ਚੈੱਕ-ਬਾਕਸ</translation>
 <translation id="2417569100218200841">ਸਮੱਗਰੀ ਜਾਣਕਾਰੀ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb
index a689295..47624a0 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Ссылка</translation>
 <translation id="2381733276052567791">Включить или выключить озвучивание действий</translation>
 <translation id="2390264819538553347">Чтобы продолжить, нажмите ВВОД. Чтобы вернуться на предыдущую страницу, нажмите BACKSPACE.</translation>
+<translation id="2398579267367951220">Чтобы выполнить поиск на странице, начните вводить текст. Чтобы перейти к результатам, нажмите клавишу Ввод. Для перемещения по результатам используйте стрелки вверх и вниз. При необходимости измените запрос или нажмите Esc, чтобы отменить поиск.</translation>
 <translation id="240709722712693803">Сине-фиолетовый</translation>
 <translation id="2416512023405990736">Снятый флажок</translation>
 <translation id="2417569100218200841">Сведения о контенте</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
index e6ae184..6d665ae 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Povezava</translation>
 <translation id="2381733276052567791">Vklop ali izklop govora</translation>
 <translation id="2390264819538553347">Če želite nadaljevati, pritisnite tipko Enter, če se želite vrniti, pritisnite vračalko.</translation>
+<translation id="2398579267367951220">Vnesite, če želite iskati na strani. Pritisnite tipko Enter, če želite skočiti na rezultat, puščični tipki gor in dol, če želite brskati po rezultatih, vnašajte naprej, če želite spremeniti iskanje, ali pritisnite tipko Escape, če želite preklicati.</translation>
 <translation id="240709722712693803">Vijoličnomodra</translation>
 <translation id="2416512023405990736">Neizbrano potrditveno polje</translation>
 <translation id="2417569100218200841">Informacije o vsebini</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sq.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sq.xtb
index 39bae82..ae6c7fd3 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sq.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sq.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">Një lidhje</translation>
 <translation id="2381733276052567791">Aktivizo/çaktivizo të folurën</translation>
 <translation id="2390264819538553347">Për të shkuar përpara, shtyp tastin "Enter", për t'u kthyer pas shtyp tastin "Backspace"</translation>
+<translation id="2398579267367951220">Shkruaj për të kërkuar në faqe. Shtyp "Enter" për të kaluar te rezultati, shigjetat lart ose poshtë për të shfletuar rezultatet, vazhdo të shkruash për të ndryshuar kërkimin tënd, ose shtyp "Escape" për ta anuluar.</translation>
 <translation id="240709722712693803">Vjollcë blu</translation>
 <translation id="2416512023405990736">Një kuti kontrolli e pazgjedhur</translation>
 <translation id="2417569100218200841">Informacion mbi përmbajtjen</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb
index 2c59ea6..e79afea9 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">En länk</translation>
 <translation id="2381733276052567791">Aktivera och inaktivera tal</translation>
 <translation id="2390264819538553347">Tryck på Retur om du vill fortsätta. Tryck på mellanslag om du vill öppna föregående sida.</translation>
+<translation id="2398579267367951220">Skriv det du vill söka efter på sidan. Hoppa till resultatet genom att trycka på Retur. Bläddra mellan resultaten med uppåt- och nedåtpil, fortsätt skriva om du vill ändra sökningen eller tryck på Esc om du vill avbryta.</translation>
 <translation id="240709722712693803">Blåviolett</translation>
 <translation id="2416512023405990736">En omarkerad kryssruta</translation>
 <translation id="2417569100218200841">Innehållsinformation</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
index 8c06939..96433c8 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">లింక్</translation>
 <translation id="2381733276052567791">ప్రసంగాన్ని ఆన్ లేదా ఆఫ్ చేయండి</translation>
 <translation id="2390264819538553347">ముందుకు వెళ్లడానికి, enter నొక్కండి; వెనుకకు వెళ్లడానికి, backspace నొక్కండి.</translation>
+<translation id="2398579267367951220">పేజీని వెతకడానికి టైప్ చేయండి. ఫలితానికి వెంటనే వెళ్లడానికి enterను నొక్కండి, ఫలితాలను బ్రౌజ్ చేయడానికి పైకి లేదా కిందికి బాణాలు, మీ శోధనను మార్చడానికి టైప్ చేస్తూ ఉండండి లేదా రద్దు చేసేందుకు escapeను నొక్కండి.</translation>
 <translation id="240709722712693803">నీలలోహిత రంగు</translation>
 <translation id="2416512023405990736">ఎంచుకున్నట్లు గుర్తు పెట్టని చెక్‌బాక్స్‌</translation>
 <translation id="2417569100218200841">కంటెంట్ సమాచారం</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb
index afe82f5..591b66ba 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">ลิงก์</translation>
 <translation id="2381733276052567791">เปิดหรือปิดสวิตช์เสียงพูด</translation>
 <translation id="2390264819538553347">กด Enter เพื่อดำเนินการต่อ หรือกด Backspace เพื่อกลับ</translation>
+<translation id="2398579267367951220">พิมพ์เพื่อค้นหาในหน้า กด Enter เพื่อข้ามไปยังผลลัพธ์ กดลูกศรขึ้นหรือลงเพื่อเรียกดูผลลัพธ์ พิมพ์ต่อเพื่อเปลี่ยนคำค้นหา หรือกด Escape เพื่อยกเลิก</translation>
 <translation id="240709722712693803">สีม่วงอมน้ำเงิน</translation>
 <translation id="2416512023405990736">ช่องทำเครื่องหมายที่ไม่ได้ทำเครื่องหมาย</translation>
 <translation id="2417569100218200841">ข้อมูลเนื้อหา</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-CN.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-CN.xtb
index 1302e7a1..1821f0242 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-CN.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-CN.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">链接</translation>
 <translation id="2381733276052567791">开启或关闭语音</translation>
 <translation id="2390264819538553347">要前进,请按 Enter 键;要后退,请按退格键。</translation>
+<translation id="2398579267367951220">输入文字即可在页面中搜索。按 Enter 键可跳至搜索结果,按向上箭头或向下箭头可浏览搜索结果,继续输入文字可更改搜索内容,按 Esc 键可取消搜索。</translation>
 <translation id="240709722712693803">蓝紫色</translation>
 <translation id="2416512023405990736">未选中的复选框</translation>
 <translation id="2417569100218200841">内容信息</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb
index 707392b..4ed21cb 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb
@@ -167,6 +167,7 @@
 <translation id="2347456970887948350">連結</translation>
 <translation id="2381733276052567791">將語音功能切換為開啟或關閉</translation>
 <translation id="2390264819538553347">如要前往下一頁,請按下 Enter 鍵;如要返回上一頁,請按下 Backspace 鍵。</translation>
+<translation id="2398579267367951220">輸入要在頁面中搜尋的字詞。按下 Enter 鍵可跳至搜尋結果;按向上或向下箭頭可瀏覽搜尋結果;繼續輸入可變更搜尋字詞;按下 Escape 鍵可取消搜尋。</translation>
 <translation id="240709722712693803">藍紫</translation>
 <translation id="2416512023405990736">未勾選的核取方塊</translation>
 <translation id="2417569100218200841">內容資訊</translation>
diff --git a/chrome/browser/resources/print_preview/BUILD.gn b/chrome/browser/resources/print_preview/BUILD.gn
index eac678d..b55cb154 100644
--- a/chrome/browser/resources/print_preview/BUILD.gn
+++ b/chrome/browser/resources/print_preview/BUILD.gn
@@ -69,7 +69,6 @@
     ":cloud_print_interface",
     ":cloud_print_interface_js",
     ":cloud_print_interface_manager",
-    ":cloud_print_interface_native",
     ":dark_mode_behavior",
     ":metrics",
     ":native_layer",
@@ -101,7 +100,6 @@
   deps = [
     ":cloud_print_interface",
     ":cloud_print_interface_js",
-    ":cloud_print_interface_native",
     ":native_layer",
     "//ui/webui/resources/js:load_time_data.m",
   ]
@@ -119,10 +117,6 @@
   ]
 }
 
-js_library("cloud_print_interface_native") {
-  deps = [ ":cloud_print_interface" ]
-}
-
 js_library("native_layer") {
   deps = [
     "data:destination",
diff --git a/chrome/browser/resources/print_preview/cloud_print_interface_manager.js b/chrome/browser/resources/print_preview/cloud_print_interface_manager.js
index f33ac2897..b004d5a0 100644
--- a/chrome/browser/resources/print_preview/cloud_print_interface_manager.js
+++ b/chrome/browser/resources/print_preview/cloud_print_interface_manager.js
@@ -5,7 +5,6 @@
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {CloudPrintInterface} from './cloud_print_interface.js';
 import {CloudPrintInterfaceJS} from './cloud_print_interface_js.js';
-import {CloudPrintInterfaceNative} from './cloud_print_interface_native.js';
 import {NativeLayer} from './native_layer.js';
 
 /** @type {?CloudPrintInterface} */
@@ -24,12 +23,8 @@
 export function getCloudPrintInterface(
     baseUrl, nativeLayer, isInAppKioskMode, uiLocale) {
   if (instance === null) {
-    if (loadTimeData.getBoolean('cloudPrinterHandlerEnabled')) {
-      instance = new CloudPrintInterfaceNative();
-    } else {
-      instance = new CloudPrintInterfaceJS(
-          baseUrl, nativeLayer, isInAppKioskMode, uiLocale);
-    }
+    instance = new CloudPrintInterfaceJS(
+        baseUrl, nativeLayer, isInAppKioskMode, uiLocale);
   }
   return instance;
 }
diff --git a/chrome/browser/resources/print_preview/cloud_print_interface_native.js b/chrome/browser/resources/print_preview/cloud_print_interface_native.js
deleted file mode 100644
index 983e2ffe..0000000
--- a/chrome/browser/resources/print_preview/cloud_print_interface_native.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2018 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 {CloudPrintInterface} from './cloud_print_interface.js';
-
-/** @implements {CloudPrintInterface} */
-export class CloudPrintInterfaceNative {
-  constructor() {}
-
-  /** @override */
-  areCookieDestinationsDisabled() {}
-
-  /** @override */
-  isCloudDestinationSearchInProgress() {}
-
-  /** @override */
-  getEventTarget() {}
-
-  /** @override */
-  search(opt_account, opt_origin) {}
-
-  /** @override */
-  setUsers(users) {}
-
-  /** @override */
-  invites(account) {}
-
-  /** @override */
-  processInvite(invitation, accept) {}
-
-  /** @override */
-  submit(destination, printTicket, documentTitle, data) {}
-
-  /** @override */
-  printer(printerId, origin, account) {}
-}
diff --git a/chrome/browser/resources/print_preview/data/destination_store.js b/chrome/browser/resources/print_preview/data/destination_store.js
index fab9b63..f8b40cdd 100644
--- a/chrome/browser/resources/print_preview/data/destination_store.js
+++ b/chrome/browser/resources/print_preview/data/destination_store.js
@@ -890,17 +890,9 @@
       PrinterType.LOCAL_PRINTER,
     ];
 
-    // If the cloud printer handler is enabled, request cloud printers from
-    // the handler instead of trying to directly communicate with the cloud
-    // print server. See https://crbug.com/829414.
-    if (loadTimeData.getBoolean('cloudPrinterHandlerEnabled')) {
-      // Add cloud printer to the map.
-      this.destinationSearchStatus_.set(
-          PrinterType.CLOUD_PRINTER, DestinationStorePrinterSearchStatus.START);
-      types.push(PrinterType.CLOUD_PRINTER);
-    } else {
-      this.startLoadCloudDestinations();
-    }
+    // Cloud destinations are pulled from the cloud print server instead of the
+    // NativeLayer/PrintPreviewHandler.
+    this.startLoadCloudDestinations();
 
     for (const printerType of types) {
       this.startLoadDestinations_(printerType);
diff --git a/chrome/browser/resources/print_preview/print_preview_resources.grd b/chrome/browser/resources/print_preview/print_preview_resources.grd
index 57807c6..4ae825d 100644
--- a/chrome/browser/resources/print_preview/print_preview_resources.grd
+++ b/chrome/browser/resources/print_preview/print_preview_resources.grd
@@ -152,9 +152,6 @@
                  file="cloud_print_interface_js.js"
                  type="chrome_html"
                  preprocess="true" />
-      <structure name="IDR_PRINT_PREVIEW_CLOUD_PRINT_INTERFACE_NATIVE_JS"
-                 file="cloud_print_interface_native.js"
-                 type="chrome_html" />
       <structure name="IDR_PRINT_PREVIEW_CLOUD_PRINT_INTERFACE_MANAGER_JS"
                  file="cloud_print_interface_manager.js"
                  type="chrome_html" />
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.html b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.html
index 91ad8773..e18c9cb3 100644
--- a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.html
+++ b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.html
@@ -121,7 +121,7 @@
       </div>
       <settings-localized-link class="secondary"
           localized-string="$i18n{nearbyPrintersListDescription}"
-          link-url="$i18n{nearbyPrintersListDescription}">
+          link-url="$i18n{printingCUPSPrintLearnMoreUrl}">
       </settings-localized-link>
       <template is="dom-if" if="[[!addPrinterButtonActive_(canAddPrinter,
           prefs.native_printing.user_native_printers_allowed.value)]]">
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.html b/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.html
index 6f372adb..1e82b3a 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.html
+++ b/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.html
@@ -19,6 +19,7 @@
         --cr-toolbar-field-width: 480px;
         --cr-toolbar-icon-container-size: 32px;
         --cr-toolbar-icon-margin: 6px 12px;
+        --separator-height: 8px;
         display: flex;
         flex-basis: var(--cr-toolbar-field-width);
         flex-direction: row;
@@ -39,7 +40,6 @@
         --cr-toolbar-search-field-border-radius: 20px;
         --cr-toolbar-search-field-paper-spinner-margin: 0 12px;
         --cr-toolbar-search-field-prompt-margin-inline-start: 140px;
-        transition: height 150ms;
       }
 
       :host(:focus-within) cr-toolbar-search-field {
@@ -48,8 +48,8 @@
 
       :host(:focus-within[should-show-dropdown_]) cr-toolbar-search-field {
         --cr-toolbar-search-field-border-radius: 20px 20px 0 0;
-        border-bottom: var(--cr-separator-line);
-        height: 48px;
+        height: 56px;
+        margin-top: var(--separator-height);
       }
 
       :host(:focus-within:not([narrow])) cr-toolbar-search-field {
@@ -66,7 +66,7 @@
         border-radius: 0 0 20px 20px;
         box-shadow: var(--cr-menu-shadow);
         display: table;
-        padding: 8px 0 12px 0;
+        padding-bottom: 16px;
       }
 
       :host([narrow]) iron-dropdown [slot='dropdown-content'] {
@@ -74,12 +74,39 @@
       }
 
       :host(:not([narrow])) iron-dropdown [slot='dropdown-content'] {
-        width: var(--cr-toolbar-field-width, 680px);
+        width: var(--cr-toolbar-field-width);
       }
 
       :host([narrow]) os-search-result-row {
         --cr-toolbar-icon-margin: 6px 12px 6px 18px;
       }
+
+      #noSearchResultsContainer {
+        height: 24px;
+        margin-top: var(--separator-height);
+      }
+
+      :host(:not([narrow])) #noSearchResultsContainer {
+        margin-inline-start: 56px;
+      }
+
+      :host([narrow]) #noSearchResultsContainer {
+        margin-inline-start: 62px;
+      }
+
+      /* The separator covers the top box shadow of the dropdown so that
+       * var(--cr-menu-shadow) can be used instead of custom values. */
+      .separator {
+        background-color: var(--cr-menu-background-color);
+        border-bottom: none;
+        border-inline-end: none;
+        border-inline-start: none;
+        border-top: 2px solid var(--cr-separator-color);
+        height: var(--separator-height);
+        margin-inline-end: 0;
+        margin-inline-start: 0;
+        margin-top: calc(-1*var(--separator-height));
+      }
     </style>
     <cr-toolbar-search-field id="search" narrow="[[narrow]]"
         label="$i18n{searchPrompt}" clear-label="$i18n{clearSearch}"
@@ -91,6 +118,7 @@
             hidden until iron-dropdown's opened attribute is set true, or when
             iron-dropdown's open() is called on the JS side. -->
       <div slot="dropdown-content">
+        <div class="separator"></div>
         <iron-list id="searchResultList" selection-enabled
             items="[[searchResults_]]" selected-item="{{selectedItem_}}"
             on-selected-item-changed="onSelectedItemChanged_">
@@ -109,6 +137,9 @@
             </os-search-result-row>
           </template>
         </iron-list>
+        <div id="noSearchResultsContainer" hidden="[[searchResultsExist_]]">
+          $i18n{searchNoResults}
+        </div>
       </div>
     </iron-dropdown>
   </template>
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.js b/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.js
index 4926bdb..261b4e4 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.js
+++ b/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.js
@@ -117,17 +117,23 @@
      */
     searchResults_: {
       type: Array,
-      observer: 'selectFirstRow_',
+      observer: 'onSearchResultsChanged_',
     },
 
     /** @private */
     shouldShowDropdown_: {
       type: Boolean,
       value: false,
-      computed: 'computeShouldShowDropdown_(searchResults_)',
       reflectToAttribute: true,
     },
 
+    /** @private */
+    searchResultsExist_: {
+      type: Boolean,
+      value: false,
+      computed: 'computeSearchResultsExist_(searchResults_)',
+    },
+
     /**
      * Used by FocusRowBehavior to track the last focused element inside a
      * <os-search-result-row> with the attribute 'focus-row-control'.
@@ -177,16 +183,24 @@
   },
 
   /**
+   * @return {string} The current input string.
+   * @private
+   */
+  getCurrentQuery_() {
+    return this.$.search.getSearchInput().value;
+  },
+
+  /**
    * @return {boolean}
    * @private
    */
-  computeShouldShowDropdown_() {
+  computeSearchResultsExist_() {
     return this.searchResults_.length !== 0;
   },
 
   /** @private */
   fetchSearchResults_() {
-    const query = this.$.search.getSearchInput().value;
+    const query = this.getCurrentQuery_();
     if (query === '') {
       this.searchResults_ = [];
       return;
@@ -218,7 +232,7 @@
    * @private
    */
   onSearchResultsReceived_(query, results) {
-    if (query !== this.$.search.getSearchInput().value) {
+    if (query !== this.getCurrentQuery_()) {
       // Received search results are invalid as the query has since changed.
       return;
     }
@@ -232,7 +246,7 @@
   /** @private */
   onNavigatedtoResultRowRoute_() {
     // Settings has navigated to another page; close search results dropdown.
-    this.$.searchResults.close();
+    this.shouldShowDropdown_ = false;
 
     // Blur search input to prevent blinking caret.
     this.$.search.blur();
@@ -245,18 +259,17 @@
   onBlur_(e) {
     e.stopPropagation();
 
-    // The user has clicked a region outside the search box or the input has
-    // been blurred; close the dropdown regardless if there are searchResults_.
-    this.$.searchResults.close();
+    // Close the dropdown because  a region outside the search box was clicked.
+    this.shouldShowDropdown_ = false;
   },
 
   /** @private */
   onSearchInputFocused_() {
     this.lastFocused_ = null;
 
-    if (this.shouldShowDropdown_) {
+    if (this.searchResultsExist_) {
       // Restore previous results instead of re-fetching.
-      this.$.searchResults.open();
+      this.shouldShowDropdown_ = true;
       return;
     }
 
@@ -287,11 +300,16 @@
   },
 
   /** @private */
-  selectFirstRow_() {
-    if (!this.shouldShowDropdown_) {
+  onSearchResultsChanged_() {
+    // Only show dropdown if focus is on search field with a non empty query.
+    this.shouldShowDropdown_ =
+        this.$.search.isSearchFocused() && !!this.getCurrentQuery_();
+
+    if (!this.searchResultsExist_) {
       return;
     }
 
+    // Select the first search result.
     this.selectedItem_ = this.searchResults_[0];
   },
 
@@ -348,7 +366,7 @@
    * @private
    */
   onKeyDown_(e) {
-    if (!this.shouldShowDropdown_) {
+    if (!this.searchResultsExist_) {
       // No action should be taken if there are no search results.
       return;
     }
diff --git a/chrome/browser/resources/settings/safety_check_page/safety_check_page.html b/chrome/browser/resources/settings/safety_check_page/safety_check_page.html
index ada43bae..e7dd6ce 100644
--- a/chrome/browser/resources/settings/safety_check_page/safety_check_page.html
+++ b/chrome/browser/resources/settings/safety_check_page/safety_check_page.html
@@ -129,8 +129,8 @@
           <div class="separator"></div>
           <cr-button id="safetyCheckPasswordsButton" class="action-button"
               on-click="onPasswordsButtonClick_" no-search
-              aria-label="$i18n{safetyCheckExtensionsButton}">
-            $i18n{safetyCheckExtensionsButton}
+              aria-label="$i18n{safetyCheckPasswordsButtonAriaLabel}">
+            $i18n{safetyCheckReview}
           </cr-button>
         </template>
       </div>
@@ -184,7 +184,7 @@
               class$="[[getExtensionsButtonClass_(extensionsStatus_)]]"
               on-click="onSafetyCheckExtensionsButtonClick_" no-search
               aria-label="$i18n{safetyCheckExtensionsButtonAriaLabel}">
-            $i18n{safetyCheckExtensionsButton}
+            $i18n{safetyCheckReview}
           </cr-button>
         </template>
         <template is="dom-if"
diff --git a/chrome/browser/resources/settings/safety_check_page/safety_check_page.js b/chrome/browser/resources/settings/safety_check_page/safety_check_page.js
index fe8c0f1..f422ed8 100644
--- a/chrome/browser/resources/settings/safety_check_page/safety_check_page.js
+++ b/chrome/browser/resources/settings/safety_check_page/safety_check_page.js
@@ -43,7 +43,6 @@
  * @typedef {{
  *   newState: settings.SafetyCheckPasswordsStatus,
  *   displayString: string,
- *   buttonString: string,
  * }}
  */
 let PasswordsChangedEvent;
@@ -147,12 +146,6 @@
      * @private
      */
     extensionsDisplayString_: String,
-
-    /**
-     * UI string to display in the password button.
-     * @private
-     */
-    passwordsButtonString_: String,
   },
 
   /** @private {settings.SafetyCheckBrowserProxy} */
@@ -273,7 +266,6 @@
    */
   onSafetyCheckPasswordsChanged_: function(event) {
     this.passwordsDisplayString_ = event.displayString;
-    this.passwordsButtonString_ = event.buttonString;
     this.passwordsStatus_ = event.newState;
     this.updateParentFromChildren_();
   },
diff --git a/chrome/browser/tab/BUILD.gn b/chrome/browser/tab/BUILD.gn
new file mode 100644
index 0000000..37d7b38
--- /dev/null
+++ b/chrome/browser/tab/BUILD.gn
@@ -0,0 +1,12 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/android/config.gni")
+import("//build/config/android/rules.gni")
+import("//chrome/android/features/android_library_factory_tmpl.gni")
+import("//chrome/browser/buildflags.gni")
+
+android_library("java") {
+  sources = [ "java/src/org/chromium/chrome/browser/tab/Dummy.java" ]
+}
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Dummy.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Dummy.java
new file mode 100644
index 0000000..5cab495
--- /dev/null
+++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Dummy.java
@@ -0,0 +1,11 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tab;
+
+/**
+ * Dummy class to get the build working for the new target chrome/browser/tab:java.
+ * TODO(jinsukkim): Remove the class once the real target classes are in place.
+ */
+public class Dummy {}
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index dac79f8..2ee89169 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -3149,6 +3149,8 @@
       "views/omnibox/omnibox_result_view.h",
       "views/omnibox/omnibox_row_view.cc",
       "views/omnibox/omnibox_row_view.h",
+      "views/omnibox/omnibox_suggestion_button_row_view.cc",
+      "views/omnibox/omnibox_suggestion_button_row_view.h",
       "views/omnibox/omnibox_tab_switch_button.cc",
       "views/omnibox/omnibox_tab_switch_button.h",
       "views/omnibox/omnibox_text_view.cc",
@@ -4182,8 +4184,6 @@
     sources += [
       "webui/print_preview/cloud_print_signin.cc",
       "webui/print_preview/cloud_print_signin.h",
-      "webui/print_preview/cloud_printer_handler.cc",
-      "webui/print_preview/cloud_printer_handler.h",
       "webui/print_preview/extension_printer_handler.cc",
       "webui/print_preview/extension_printer_handler.h",
       "webui/print_preview/pdf_printer_handler.cc",
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
index bf80d91..3438ce7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -181,7 +181,7 @@
 <translation id="2315043854645842844">अपरेटिङ सिस्टमले क्लाइन्ट साइड प्रमाणपत्रको चयनलाई समर्थन गर्दैन।</translation>
 <translation id="2318045970523081853">कल गर्न ट्याप गर्नुहोस्</translation>
 <translation id="2321086116217818302">पासवर्डहरू निर्यात गर्ने तयारी गरिँदै…</translation>
-<translation id="2321958826496381788">तपाईंले आरामसँग पढ्न सक्दासम्म स्लाइडरलाई तान्नुहोस्। अनुच्छेदमा दोहोरो ट्याप गरेपछि पाठ कम्तीमा पनि यतिको ठूलो देखिनुपर्छ।</translation>
+<translation id="2321958826496381788">तपाईंले आरामसँग पढ्न सक्दासम्म स्लाइडरलाई तान्नुहोस्। अनुच्छेदमा दोहोरो ट्याप गरेपछि पाठ कम्तीमा पनि यतिको ठुलो देखिनुपर्छ।</translation>
 <translation id="2323763861024343754">साइटको भण्डारण</translation>
 <translation id="2328985652426384049">साइन इन गर्न सकिएन</translation>
 <translation id="234265804618409743">तपाईंको क्यामेरा खोल्न सकिएन। केही चिज गडबड भयो।</translation>
@@ -641,7 +641,7 @@
 <translation id="569536719314091526">थप विकल्पहरू नामक बटनबाट यस पृष्ठलाई जुनसुकै भाषामा अनुवाद गर्नुहोस्</translation>
 <translation id="5710871682236653961">तपाईंले NFC यन्त्रहरूमा ट्याप गर्दा साइटहरूलाई जानकारी पठाउने र प्राप्त गर्ने अनुमति दिनुअघि सोध्नुहोस् (सिफारिस गरिएको)</translation>
 <translation id="572328651809341494">हालका ट्याबहरू</translation>
-<translation id="5726692708398506830">पृष्ठमा रहेको सबै कुरालाई अझ ठूलो बनाउनुहोस्</translation>
+<translation id="5726692708398506830">पृष्ठमा रहेको सबै कुरालाई अझ ठुलो बनाउनुहोस्</translation>
 <translation id="5748802427693696783">मानक ट्याबहरूमा स्विच गरियो</translation>
 <translation id="5749068826913805084">Chromeलाई फाइलहरु डाउनलोड गर्न भण्डारणको पहुँच आवश्यक छ ।</translation>
 <translation id="5763382633136178763">इनकग्निटो ट्याबहरू</translation>
@@ -710,7 +710,7 @@
 <translation id="624789221780392884">अपडेट तैयार छ</translation>
 <translation id="6255999984061454636">सामग्रीसम्बन्धी सुझावहरू</translation>
 <translation id="6270391203985052864">साइटहरूले सूचनाहरू पठाउनका निम्ति अनुमति माग्न सक्छन्।</translation>
-<translation id="6277522088822131679">पृष्ठ मुद्रण गर्नमा एक समस्या थियो। कृपया पुन: प्रयास गर्नुहोस्।</translation>
+<translation id="6277522088822131679">पृष्ठ प्रिन्टिङ गर्नमा एक समस्या थियो। कृपया पुन: प्रयास गर्नुहोस्।</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>
 <translation id="6295158916970320988">सबै साइटहरू</translation>
 <translation id="629730747756840877">खाता</translation>
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
index 83dfcc9d..ba6c220f 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -19,6 +19,7 @@
 #include "chrome/browser/ui/views/location_bar/selected_keyword_view.h"
 #include "chrome/browser/ui/views/omnibox/omnibox_match_cell_view.h"
 #include "chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h"
+#include "chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.h"
 #include "chrome/browser/ui/views/omnibox/omnibox_tab_switch_button.h"
 #include "chrome/browser/ui/views/omnibox/omnibox_text_view.h"
 #include "chrome/browser/ui/views/omnibox/remove_suggestion_bubble.h"
@@ -39,39 +40,12 @@
 #include "ui/events/event.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/views/controls/button/image_button_factory.h"
-#include "ui/views/controls/button/md_text_button.h"
 #include "ui/views/controls/focus_ring.h"
 #include "ui/views/controls/highlight_path_generator.h"
 #if defined(OS_WIN)
 #include "base/win/atl.h"
 #endif
 
-namespace {
-
-views::MdTextButton* CreatePillButton(views::View* button_row,
-                                      OmniboxResultView* parent_view,
-                                      const char* message) {
-  views::MdTextButton* button = button_row->AddChildView(
-      views::MdTextButton::Create(parent_view, base::ASCIIToUTF16(message)));
-  button->SetCornerRadius(16);
-  button->SetVisible(false);
-  return button;
-}
-
-size_t LayoutPillButton(views::MdTextButton* button,
-                        size_t button_indent,
-                        size_t suggestion_height) {
-  gfx::Size button_size = button->GetPreferredSize();
-  button->SetBounds(button_indent,
-                    (suggestion_height - button_size.height()) / 2,
-                    button_size.width(), button_size.height());
-  button->SetVisible(true);
-  // TODO(orinj): Determine and use the right gap between buttons.
-  return button_indent + button_size.width() + 10;
-}
-
-}  // namespace
-
 ////////////////////////////////////////////////////////////////////////////////
 // OmniboxResultView, public:
 
@@ -111,31 +85,11 @@
   });
 
   if (OmniboxFieldTrial::IsSuggestionButtonRowEnabled()) {
-    button_row_ = AddChildView(std::make_unique<views::View>());
+    button_row_ = AddChildView(std::make_unique<OmniboxSuggestionButtonRowView>(
+        popup_contents_view_, model_index));
+    // The button row shows itself during Layout when appropriate.
+    // TODO(orinj): Visibility should also be revisited when layout is reworked.
     button_row_->SetVisible(false);
-    keyword_button_ = CreatePillButton(button_row_, this, "Keyword search");
-    pedal_button_ = CreatePillButton(button_row_, this, "Pedal");
-    // TODO(orinj): Use the real translated string table values here instead.
-    tab_switch_button_ =
-        CreatePillButton(button_row_, this, "Switch to this tab");
-
-    const auto make_predicate = [=](auto state) {
-      return [=](View* view) {
-        return view->GetVisible() &&
-               popup_contents_view_->model()->selection() ==
-                   OmniboxPopupModel::Selection(model_index_, state);
-      };
-    };
-    keyword_button_focus_ring_ = views::FocusRing::Install(keyword_button_);
-    keyword_button_focus_ring_->SetHasFocusPredicate(
-        make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_KEYWORD));
-    pedal_button_focus_ring_ = views::FocusRing::Install(pedal_button_);
-    pedal_button_focus_ring_->SetHasFocusPredicate(
-        make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_PEDAL));
-    tab_switch_button_focus_ring_ =
-        views::FocusRing::Install(tab_switch_button_);
-    tab_switch_button_focus_ring_->SetHasFocusPredicate(
-        make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH));
   }
 
   keyword_view_ = AddChildView(std::make_unique<OmniboxMatchCellView>(this));
@@ -189,14 +143,9 @@
         match_.description, match_.description_class, deemphasize);
   }
 
-  // With button row, |keyword_button_| is used instead of |keyword_view_|.
+  // With button row, its keyword button is used instead of |keyword_view_|.
   if (OmniboxFieldTrial::IsSuggestionButtonRowEnabled()) {
-    const OmniboxEditModel* edit_model =
-        popup_contents_view_->model()->edit_model();
-    const base::string16& keyword = edit_model->keyword();
-    const auto names = SelectedKeywordView::GetKeywordLabelNames(
-        keyword, edit_model->client()->GetTemplateURLService());
-    keyword_button_->SetText(names.full_name);
+    button_row_->UpdateKeyword();
   } else {
     AutocompleteMatch* keyword_match = match_.associated_keyword.get();
     keyword_view_->SetVisible(keyword_match != nullptr);
@@ -264,9 +213,7 @@
   }
 
   if (OmniboxFieldTrial::IsSuggestionButtonRowEnabled()) {
-    keyword_button_focus_ring_->SchedulePaint();
-    pedal_button_focus_ring_->SchedulePaint();
-    tab_switch_button_focus_ring_->SchedulePaint();
+    button_row_->OnStyleRefresh();
   }
 }
 
@@ -381,7 +328,7 @@
 
 void OmniboxResultView::ButtonPressed(views::Button* button,
                                       const ui::Event& event) {
-  if (button == suggestion_tab_switch_button_ || button == tab_switch_button_) {
+  if (button == suggestion_tab_switch_button_) {
     OpenMatch(WindowOpenDisposition::SWITCH_TO_TAB, event.time_stamp());
   } else if (button == remove_suggestion_button_) {
     if (!base::FeatureList::IsEnabled(
@@ -409,28 +356,6 @@
                                         weak_factory_.GetWeakPtr()));
 
     popup_contents_view_->model()->set_popup_closes_on_blur(true);
-  } else if (button == keyword_button_) {
-    // TODO(orinj): Clear out existing suggestions, particularly this one, as
-    // once we AcceptKeyword, we are really in a new scope state and holding
-    // onto old suggestions is confusing and error prone. Without this check,
-    // a second click of the button violates assumptions in |AcceptKeyword|.
-    if (popup_contents_view_->model()->edit_model()->is_keyword_hint()) {
-      auto method = metrics::OmniboxEventProto::INVALID;
-      if (event.IsKeyEvent()) {
-        method = metrics::OmniboxEventProto::KEYBOARD_SHORTCUT;
-      } else if (event.IsMouseEvent()) {
-        method = metrics::OmniboxEventProto::CLICK_HINT_VIEW;
-      } else if (event.IsGestureEvent()) {
-        method = metrics::OmniboxEventProto::TAP_HINT_VIEW;
-      }
-      DCHECK_NE(method, metrics::OmniboxEventProto::INVALID);
-      popup_contents_view_->model()->edit_model()->AcceptKeyword(method);
-    }
-  } else if (button == pedal_button_) {
-    DCHECK(match_.pedal);
-    // Pedal action intent means we execute the match instead of opening it.
-    popup_contents_view_->model()->edit_model()->ExecutePedal(
-        match_, event.time_stamp());
   } else {
     NOTREACHED();
   }
@@ -499,46 +424,13 @@
                               suggestion_height);
 
   if (OmniboxFieldTrial::IsSuggestionButtonRowEnabled()) {
-    const auto check_state = [=](auto state) {
-      return popup_contents_view_->model()->IsSelectionAvailable(
-          OmniboxPopupModel::Selection(model_index_, state));
-    };
-    int start_indent = OmniboxMatchCellView::GetTextIndent();
-    // This button_indent strictly increases with each button added.
-    int button_indent = start_indent;
-    if (check_state(OmniboxPopupModel::FOCUSED_BUTTON_KEYWORD)) {
-      button_indent =
-          LayoutPillButton(keyword_button_, button_indent, suggestion_height);
-    } else if (keyword_button_->GetVisible()) {
-      // Setting visibility does lots of work, even if not changing.
-      keyword_button_->SetVisible(false);
-    }
-    if (check_state(OmniboxPopupModel::FOCUSED_BUTTON_PEDAL)) {
-      pedal_button_->SetText(match_.pedal->GetLabelStrings().hint);
-      button_indent =
-          LayoutPillButton(pedal_button_, button_indent, suggestion_height);
-    } else if (pedal_button_->GetVisible()) {
-      pedal_button_->SetVisible(false);
-    }
-    if (check_state(OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH)) {
-      button_indent = LayoutPillButton(tab_switch_button_, button_indent,
-                                       suggestion_height);
-    } else if (tab_switch_button_->GetVisible()) {
-      tab_switch_button_->SetVisible(false);
-    }
-
-    if (button_indent != start_indent) {
-      // TODO(orinj): Determine and use the best way to set bounds; probably
-      // GetPreferredSize() with a layout manager.
-      button_row_->Layout();
-      // Put it below the suggestion view.
-      button_row_->SetBounds(0, button_row_->height(),
-                             suggestion_width - suggestion_indent,
-                             suggestion_height);
-      button_row_->SetVisible(true);
-    } else if (button_row_->GetVisible()) {
-      button_row_->SetVisible(false);
-    }
+    // TODO(orinj): Determine and use the best way to set bounds; probably
+    // GetPreferredSize() with a layout manager.
+    // Put it below the suggestion view.
+    button_row_->SetBounds(0, button_row_->height(),
+                           suggestion_width - suggestion_indent,
+                           suggestion_height);
+    button_row_->Layout();
   }
 }
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.h b/chrome/browser/ui/views/omnibox/omnibox_result_view.h
index 145157b..81ef18e 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_result_view.h
+++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.h
@@ -27,6 +27,7 @@
 
 class OmniboxMatchCellView;
 class OmniboxPopupContentsView;
+class OmniboxSuggestionButtonRowView;
 class OmniboxTabSwitchButton;
 enum class OmniboxPart;
 enum class OmniboxPartState;
@@ -38,7 +39,6 @@
 namespace views {
 class Button;
 class FocusRing;
-class MdTextButton;
 }  // namespace views
 
 class OmniboxResultView : public views::View,
@@ -168,14 +168,8 @@
   OmniboxTabSwitchButton* suggestion_tab_switch_button_;
 
   // The row of buttons, only assigned and used if OmniboxSuggestionButtonRow
-  // feature is enabled.
-  views::View* button_row_ = nullptr;
-  views::MdTextButton* keyword_button_ = nullptr;
-  views::MdTextButton* pedal_button_ = nullptr;
-  views::MdTextButton* tab_switch_button_ = nullptr;
-  std::unique_ptr<views::FocusRing> keyword_button_focus_ring_;
-  std::unique_ptr<views::FocusRing> pedal_button_focus_ring_;
-  std::unique_ptr<views::FocusRing> tab_switch_button_focus_ring_;
+  // feature is enabled. It is owned by the base view, not this raw pointer.
+  OmniboxSuggestionButtonRowView* button_row_ = nullptr;
 
   // The "X" button at the end of the match cell, used to remove suggestions.
   views::ImageButton* remove_suggestion_button_;
diff --git a/chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.cc b/chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.cc
new file mode 100644
index 0000000..da0ed71
--- /dev/null
+++ b/chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.cc
@@ -0,0 +1,164 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.h"
+
+#include "chrome/browser/ui/views/location_bar/selected_keyword_view.h"
+#include "chrome/browser/ui/views/omnibox/omnibox_match_cell_view.h"
+#include "chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h"
+#include "components/omnibox/browser/omnibox_edit_model.h"
+#include "components/omnibox/browser/omnibox_pedal.h"
+#include "third_party/metrics_proto/omnibox_event.pb.h"
+#include "ui/views/controls/focus_ring.h"
+
+namespace {
+
+views::MdTextButton* CreatePillButton(
+    OmniboxSuggestionButtonRowView* button_row,
+    const char* message) {
+  views::MdTextButton* button = button_row->AddChildView(
+      views::MdTextButton::Create(button_row, base::ASCIIToUTF16(message)));
+  button->SetCornerRadius(16);
+  button->SetVisible(false);
+  return button;
+}
+
+size_t LayoutPillButton(views::MdTextButton* button,
+                        size_t button_indent,
+                        size_t suggestion_height) {
+  gfx::Size button_size = button->GetPreferredSize();
+  button->SetBounds(button_indent,
+                    (suggestion_height - button_size.height()) / 2,
+                    button_size.width(), button_size.height());
+  button->SetVisible(true);
+  // TODO(orinj): Determine and use the right gap between buttons.
+  return button_indent + button_size.width() + 10;
+}
+
+}  // namespace
+
+OmniboxSuggestionButtonRowView::OmniboxSuggestionButtonRowView(
+    OmniboxPopupContentsView* popup_contents_view,
+    int model_index)
+    : popup_contents_view_(popup_contents_view), model_index_(model_index) {
+  keyword_button_ = CreatePillButton(this, "Keyword search");
+  pedal_button_ = CreatePillButton(this, "Pedal");
+  // TODO(orinj): Use the real translated string table values here instead.
+  tab_switch_button_ = CreatePillButton(this, "Switch to this tab");
+
+  const auto make_predicate = [=](auto state) {
+    return [=](View* view) {
+      return view->GetVisible() &&
+             model()->selection() ==
+                 OmniboxPopupModel::Selection(model_index_, state);
+    };
+  };
+  keyword_button_focus_ring_ = views::FocusRing::Install(keyword_button_);
+  keyword_button_focus_ring_->SetHasFocusPredicate(
+      make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_KEYWORD));
+  pedal_button_focus_ring_ = views::FocusRing::Install(pedal_button_);
+  pedal_button_focus_ring_->SetHasFocusPredicate(
+      make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_PEDAL));
+  tab_switch_button_focus_ring_ = views::FocusRing::Install(tab_switch_button_);
+  tab_switch_button_focus_ring_->SetHasFocusPredicate(
+      make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH));
+}
+
+OmniboxSuggestionButtonRowView::~OmniboxSuggestionButtonRowView() = default;
+
+void OmniboxSuggestionButtonRowView::UpdateKeyword() {
+  const OmniboxEditModel* edit_model = model()->edit_model();
+  const base::string16& keyword = edit_model->keyword();
+  const auto names = SelectedKeywordView::GetKeywordLabelNames(
+      keyword, edit_model->client()->GetTemplateURLService());
+  keyword_button_->SetText(names.full_name);
+}
+
+void OmniboxSuggestionButtonRowView::OnStyleRefresh() {
+  keyword_button_focus_ring_->SchedulePaint();
+  pedal_button_focus_ring_->SchedulePaint();
+  tab_switch_button_focus_ring_->SchedulePaint();
+}
+
+void OmniboxSuggestionButtonRowView::ButtonPressed(views::Button* button,
+                                                   const ui::Event& event) {
+  if (button == tab_switch_button_) {
+    popup_contents_view_->OpenMatch(
+        model_index_, WindowOpenDisposition::SWITCH_TO_TAB, event.time_stamp());
+  } else if (button == keyword_button_) {
+    // TODO(orinj): Clear out existing suggestions, particularly this one, as
+    // once we AcceptKeyword, we are really in a new scope state and holding
+    // onto old suggestions is confusing and error prone. Without this check,
+    // a second click of the button violates assumptions in |AcceptKeyword|.
+    if (model()->edit_model()->is_keyword_hint()) {
+      auto method = metrics::OmniboxEventProto::INVALID;
+      if (event.IsKeyEvent()) {
+        method = metrics::OmniboxEventProto::KEYBOARD_SHORTCUT;
+      } else if (event.IsMouseEvent()) {
+        method = metrics::OmniboxEventProto::CLICK_HINT_VIEW;
+      } else if (event.IsGestureEvent()) {
+        method = metrics::OmniboxEventProto::TAP_HINT_VIEW;
+      }
+      DCHECK_NE(method, metrics::OmniboxEventProto::INVALID);
+      model()->edit_model()->AcceptKeyword(method);
+    }
+  } else if (button == pedal_button_) {
+    DCHECK(match().pedal);
+    // Pedal action intent means we execute the match instead of opening it.
+    model()->edit_model()->ExecutePedal(match(), event.time_stamp());
+  }
+}
+
+void OmniboxSuggestionButtonRowView::Layout() {
+  views::View::Layout();
+
+  // TODO(orinj): Rework layout with a layout manager. For now this depends
+  // on bounds already being set by parent.
+  const int suggestion_height = height();
+
+  const auto check_state = [=](auto state) {
+    return model()->IsSelectionAvailable(
+        OmniboxPopupModel::Selection(model_index_, state));
+  };
+  int start_indent = OmniboxMatchCellView::GetTextIndent();
+  // This button_indent strictly increases with each button added.
+  int button_indent = start_indent;
+  if (check_state(OmniboxPopupModel::FOCUSED_BUTTON_KEYWORD)) {
+    button_indent =
+        LayoutPillButton(keyword_button_, button_indent, suggestion_height);
+  } else if (keyword_button_->GetVisible()) {
+    // Setting visibility does lots of work, even if not changing.
+    keyword_button_->SetVisible(false);
+  }
+  if (check_state(OmniboxPopupModel::FOCUSED_BUTTON_PEDAL)) {
+    pedal_button_->SetText(match().pedal->GetLabelStrings().hint);
+    button_indent =
+        LayoutPillButton(pedal_button_, button_indent, suggestion_height);
+  } else if (pedal_button_->GetVisible()) {
+    pedal_button_->SetVisible(false);
+  }
+  if (check_state(OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH)) {
+    button_indent =
+        LayoutPillButton(tab_switch_button_, button_indent, suggestion_height);
+  } else if (tab_switch_button_->GetVisible()) {
+    tab_switch_button_->SetVisible(false);
+  }
+
+  if (button_indent != start_indent) {
+    SetVisible(true);
+  } else if (GetVisible()) {
+    SetVisible(false);
+  }
+
+  // TODO(orinj): Migrate to BoxLayout or FlexLayout. Ideally we don't do any
+  // more layouts ourselves. Also, check visibility management in result view.
+}
+
+const OmniboxPopupModel* OmniboxSuggestionButtonRowView::model() const {
+  return popup_contents_view_->model();
+}
+
+const AutocompleteMatch& OmniboxSuggestionButtonRowView::match() const {
+  return model()->result().match_at(model_index_);
+}
diff --git a/chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.h b/chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.h
new file mode 100644
index 0000000..653ea4f
--- /dev/null
+++ b/chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.h
@@ -0,0 +1,58 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_OMNIBOX_OMNIBOX_SUGGESTION_BUTTON_ROW_VIEW_H_
+#define CHROME_BROWSER_UI_VIEWS_OMNIBOX_OMNIBOX_SUGGESTION_BUTTON_ROW_VIEW_H_
+
+#include "base/macros.h"
+#include "components/omnibox/browser/autocomplete_match.h"
+#include "components/omnibox/browser/omnibox_popup_model.h"
+#include "ui/views/controls/button/button.h"
+#include "ui/views/controls/button/md_text_button.h"
+#include "ui/views/view.h"
+
+class OmniboxPopupContentsView;
+
+// A view to contain the button row within a result view.
+class OmniboxSuggestionButtonRowView : public views::View,
+                                       public views::ButtonListener {
+ public:
+  explicit OmniboxSuggestionButtonRowView(OmniboxPopupContentsView* view,
+                                          int model_index);
+  ~OmniboxSuggestionButtonRowView() override;
+
+  // Gets keyword information and applies it to the keyword button label.
+  // TODO(orinj): This should eventually be made private after refactoring.
+  void UpdateKeyword();
+
+  // Called when themes, styles, and visibility is refreshed in result view.
+  void OnStyleRefresh();
+
+  // views::ButtonListener:
+  void ButtonPressed(views::Button* sender, const ui::Event& event) override;
+
+  // views::View:
+  void Layout() override;
+
+ private:
+  // Get the popup model from the view.
+  const OmniboxPopupModel* model() const;
+
+  // Digs into the model with index to get the match for owning result view.
+  const AutocompleteMatch& match() const;
+
+  OmniboxPopupContentsView* const popup_contents_view_;
+  size_t const model_index_;
+
+  views::MdTextButton* keyword_button_ = nullptr;
+  views::MdTextButton* pedal_button_ = nullptr;
+  views::MdTextButton* tab_switch_button_ = nullptr;
+  std::unique_ptr<views::FocusRing> keyword_button_focus_ring_;
+  std::unique_ptr<views::FocusRing> pedal_button_focus_ring_;
+  std::unique_ptr<views::FocusRing> tab_switch_button_focus_ring_;
+
+  DISALLOW_COPY_AND_ASSIGN(OmniboxSuggestionButtonRowView);
+};
+
+#endif  // CHROME_BROWSER_UI_VIEWS_OMNIBOX_OMNIBOX_SUGGESTION_BUTTON_ROW_VIEW_H_
diff --git a/chrome/browser/ui/webui/print_preview/cloud_printer_handler.cc b/chrome/browser/ui/webui/print_preview/cloud_printer_handler.cc
deleted file mode 100644
index c8d5070a..0000000
--- a/chrome/browser/ui/webui/print_preview/cloud_printer_handler.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/webui/print_preview/cloud_printer_handler.h"
-
-#include <utility>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/values.h"
-
-namespace printing {
-
-CloudPrinterHandler::CloudPrinterHandler() {}
-
-CloudPrinterHandler::~CloudPrinterHandler() {}
-
-void CloudPrinterHandler::Reset() {}
-
-void CloudPrinterHandler::StartGetPrinters(
-    AddedPrintersCallback added_printers_callback,
-    GetPrintersDoneCallback done_callback) {
-  // TODO(https://crbug.com/829414): Actually retrieve the printers
-  std::move(done_callback).Run();
-}
-
-void CloudPrinterHandler::StartGetCapability(const std::string& destination_id,
-                                             GetCapabilityCallback callback) {
-  // TODO(https://crbug.com/829414): Get capabilities.
-  std::move(callback).Run(base::Value());
-}
-
-void CloudPrinterHandler::StartPrint(
-    const base::string16& job_title,
-    base::Value settings,
-    scoped_refptr<base::RefCountedMemory> print_data,
-    PrintCallback callback) {
-  // TODO(https://crbug.com/829414): Print to cloud print
-  NOTIMPLEMENTED();
-}
-
-}  // namespace printing
diff --git a/chrome/browser/ui/webui/print_preview/cloud_printer_handler.h b/chrome/browser/ui/webui/print_preview/cloud_printer_handler.h
deleted file mode 100644
index 71737d2..0000000
--- a/chrome/browser/ui/webui/print_preview/cloud_printer_handler.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_CLOUD_PRINTER_HANDLER_H_
-#define CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_CLOUD_PRINTER_HANDLER_H_
-
-#include <memory>
-#include <string>
-
-#include "base/macros.h"
-#include "chrome/browser/ui/webui/print_preview/printer_handler.h"
-
-namespace printing {
-
-// Implementation of PrinterHandler interface
-class CloudPrinterHandler : public PrinterHandler {
- public:
-  CloudPrinterHandler();
-
-  ~CloudPrinterHandler() override;
-
-  // PrinterHandler implementation:
-  void Reset() override;
-  void StartGetPrinters(AddedPrintersCallback added_printers_callback,
-                        GetPrintersDoneCallback done_callback) override;
-  void StartGetCapability(const std::string& destination_id,
-                          GetCapabilityCallback callback) override;
-  void StartPrint(const base::string16& job_title,
-                  base::Value settings,
-                  scoped_refptr<base::RefCountedMemory> print_data,
-                  PrintCallback callback) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(CloudPrinterHandler);
-};
-
-}  // namespace printing
-
-#endif  // CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_CLOUD_PRINTER_HANDLER_H_
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
index c29a529..ec12c351 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -50,7 +50,6 @@
 #include "chrome/browser/ui/webui/print_preview/print_preview_ui.h"
 #include "chrome/browser/ui/webui/print_preview/printer_handler.h"
 #include "chrome/common/buildflags.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/cloud_print/cloud_print_constants.h"
 #include "chrome/common/crash_keys.h"
@@ -1137,8 +1136,7 @@
   if (!policies.DictEmpty())
     initial_settings.SetKey(kPolicies, std::move(policies));
 
-  if (IsCloudPrintEnabled() &&
-      !base::FeatureList::IsEnabled(features::kCloudPrinterHandler)) {
+  if (IsCloudPrintEnabled()) {
     initial_settings.SetStringKey(
         kCloudPrintURL, GURL(cloud_devices::GetCloudPrintURL()).spec());
   }
@@ -1419,14 +1417,6 @@
     }
     return local_printer_handler_.get();
   }
-  if (printer_type == PrinterType::kCloudPrinter) {
-    // This printer handler is currently experimental. Ensure it is never
-    // created unless the flag is enabled.
-    CHECK(base::FeatureList::IsEnabled(features::kCloudPrinterHandler));
-    if (!cloud_printer_handler_)
-      cloud_printer_handler_ = PrinterHandler::CreateForCloudPrinters();
-    return cloud_printer_handler_.get();
-  }
   NOTREACHED();
   return nullptr;
 }
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.h b/chrome/browser/ui/webui/print_preview/print_preview_handler.h
index e99a3731..60f5533 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler.h
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.h
@@ -265,7 +265,8 @@
                         const std::string& printer_name,
                         base::Value settings_info);
 
-  // Send the PDF data to the cloud to print.
+  // Send the PDF data to Print Preview so that it can be sent to the cloud
+  // print server to print.
   void SendCloudPrintJob(const std::string& callback_id,
                          const base::RefCountedMemory* data);
 
@@ -333,10 +334,6 @@
   // for GAIA cookie changes.
   signin::IdentityManager* identity_manager_ = nullptr;
 
-  // Handles requests for cloud printers. Created lazily by calling
-  // GetPrinterHandler().
-  std::unique_ptr<PrinterHandler> cloud_printer_handler_;
-
   // Handles requests for extension printers. Created lazily by calling
   // GetPrinterHandler().
   std::unique_ptr<PrinterHandler> extension_printer_handler_;
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
index 6bad173b..d4f1257 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -11,7 +11,6 @@
 #include "base/bind.h"
 #include "base/containers/flat_map.h"
 #include "base/containers/id_map.h"
-#include "base/feature_list.h"
 #include "base/lazy_instance.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted_memory.h"
@@ -34,7 +33,6 @@
 #include "chrome/browser/ui/webui/print_preview/print_preview_handler.h"
 #include "chrome/browser/ui/webui/theme_source.h"
 #include "chrome/browser/ui/webui/webui_util.h"
-#include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/grit/browser_resources.h"
@@ -54,7 +52,6 @@
 #include "printing/page_size_margins.h"
 #include "printing/print_job_constants.h"
 #include "ui/base/l10n/l10n_util.h"
-#include "ui/base/ui_base_features.h"
 #include "ui/base/webui/web_ui_util.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/web_dialogs/web_dialog_delegate.h"
@@ -330,11 +327,6 @@
   enterprise_managed = base::IsMachineExternallyManaged();
 #endif
   source->AddBoolean("isEnterpriseManaged", enterprise_managed);
-
-  bool cloud_printer_handler_enabled =
-      base::FeatureList::IsEnabled(features::kCloudPrinterHandler);
-  source->AddBoolean("cloudPrinterHandlerEnabled",
-                     cloud_printer_handler_enabled);
 }
 
 void SetupPrintPreviewPlugin(content::WebUIDataSource* source) {
diff --git a/chrome/browser/ui/webui/print_preview/printer_handler.cc b/chrome/browser/ui/webui/print_preview/printer_handler.cc
index f939659e..b2ba1508 100644
--- a/chrome/browser/ui/webui/print_preview/printer_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/printer_handler.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/ui/webui/print_preview/printer_handler.h"
 
 #include "build/buildflag.h"
-#include "chrome/browser/ui/webui/print_preview/cloud_printer_handler.h"
 #include "chrome/browser/ui/webui/print_preview/extension_printer_handler.h"
 #include "chrome/browser/ui/webui/print_preview/pdf_printer_handler.h"
 #include "chrome/common/buildflags.h"
@@ -23,11 +22,6 @@
 namespace printing {
 
 // static
-std::unique_ptr<PrinterHandler> PrinterHandler::CreateForCloudPrinters() {
-  return std::make_unique<CloudPrinterHandler>();
-}
-
-// static
 std::unique_ptr<PrinterHandler> PrinterHandler::CreateForExtensionPrinters(
     Profile* profile) {
   return std::make_unique<ExtensionPrinterHandler>(profile);
diff --git a/chrome/browser/ui/webui/print_preview/printer_handler.h b/chrome/browser/ui/webui/print_preview/printer_handler.h
index c30ed7b..5f6e5d4 100644
--- a/chrome/browser/ui/webui/print_preview/printer_handler.h
+++ b/chrome/browser/ui/webui/print_preview/printer_handler.h
@@ -54,10 +54,6 @@
       base::OnceCallback<void(const std::string& license)>;
 #endif
 
-  // Creates an instance of a PrinterHandler for cloud printers.
-  // Note: Implementation currently empty, see https://crbug.com/829414
-  static std::unique_ptr<PrinterHandler> CreateForCloudPrinters();
-
   // Creates an instance of a PrinterHandler for extension printers.
   static std::unique_ptr<PrinterHandler> CreateForExtensionPrinters(
       Profile* profile);
diff --git a/chrome/browser/ui/webui/settings/chromeos/os_settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/chromeos/os_settings_localized_strings_provider.cc
index 384ea03..fcb4cb9 100644
--- a/chrome/browser/ui/webui/settings/chromeos/os_settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/os_settings_localized_strings_provider.cc
@@ -1987,8 +1987,8 @@
 void AddPrivacyStrings(content::WebUIDataSource* html_source) {
   static constexpr webui::LocalizedString kLocalizedStrings[] = {
       {"privacyPageTitle", IDS_SETTINGS_PRIVACY},
-      {"enableLogging", IDS_SETTINGS_ENABLE_LOGGING_PREF},
-      {"enableLoggingDesc", IDS_SETTINGS_ENABLE_LOGGING_PREF_DESC},
+      {"enableLogging", IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_TITLE},
+      {"enableLoggingDesc", IDS_SETTINGS_ENABLE_LOGGING_TOGGLE_DESC},
       {"wakeOnWifi", IDS_SETTINGS_WAKE_ON_WIFI_DESCRIPTION},
       {"enableContentProtectionAttestation",
        IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION},
diff --git a/chrome/browser/ui/webui/settings/safety_check_handler.cc b/chrome/browser/ui/webui/settings/safety_check_handler.cc
index ea863b1..67ba6ac 100644
--- a/chrome/browser/ui/webui/settings/safety_check_handler.cc
+++ b/chrome/browser/ui/webui/settings/safety_check_handler.cc
@@ -41,7 +41,6 @@
 constexpr char kGetParentRanDisplayString[] = "getSafetyCheckRanDisplayString";
 constexpr char kNewState[] = "newState";
 constexpr char kDisplayString[] = "displayString";
-constexpr char kButtonString[] = "buttonString";
 constexpr char kPasswordsCompromised[] = "passwordsCompromised";
 constexpr char kExtensionsReenabledByUser[] = "extensionsReenabledByUser";
 constexpr char kExtensionsReenabledByAdmin[] = "extensionsReenabledByAdmin";
@@ -274,10 +273,6 @@
   event.SetIntKey(kNewState, static_cast<int>(status));
   if (status == PasswordsStatus::kCompromisedExist) {
     event.SetIntKey(kPasswordsCompromised, compromised.value());
-    event.SetStringKey(
-        kButtonString,
-        l10n_util::GetPluralStringFUTF16(
-            IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_BUTTON, compromised.value()));
   }
   event.SetStringKey(kDisplayString,
                      GetStringForPasswords(status, compromised, done, total));
diff --git a/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc b/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc
index 82c7855..64b7e45 100644
--- a/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc
@@ -190,10 +190,6 @@
                            const base::string16& expected);
   void VerifyDisplayString(const base::DictionaryValue* event,
                            const std::string& expected);
-  void VerifyButtonString(const base::DictionaryValue* event,
-                          const base::string16& expected);
-  void VerifyButtonString(const base::DictionaryValue* event,
-                          const std::string& expected);
 
  protected:
   TestVersionUpdater* version_updater_ = nullptr;
@@ -288,20 +284,6 @@
   VerifyDisplayString(event, base::ASCIIToUTF16(expected));
 }
 
-void SafetyCheckHandlerTest::VerifyButtonString(
-    const base::DictionaryValue* event,
-    const base::string16& expected) {
-  base::string16 button;
-  ASSERT_TRUE(event->GetString("buttonString", &button));
-  EXPECT_EQ(expected, button);
-}
-
-void SafetyCheckHandlerTest::VerifyButtonString(
-    const base::DictionaryValue* event,
-    const std::string& expected) {
-  VerifyButtonString(event, base::ASCIIToUTF16(expected));
-}
-
 void SafetyCheckHandlerTest::ReplaceBrowserName(base::string16* s) {
   base::ReplaceSubstringsAfterOffset(s, 0, base::ASCIIToUTF16("Google Chrome"),
                                      base::ASCIIToUTF16("Browser"));
@@ -712,7 +694,6 @@
   ASSERT_TRUE(event2);
   VerifyDisplayString(
       event2, base::NumberToString(kCompromised) + " compromised passwords");
-  VerifyButtonString(event2, "Change passwords");
   histogram_tester_.ExpectBucketCount(
       "Settings.SafetyCheck.PasswordsResult",
       SafetyCheckHandler::PasswordsStatus::kCompromisedExist, 1);
@@ -752,7 +733,6 @@
               SafetyCheckHandler::PasswordsStatus::kCompromisedExist));
   ASSERT_TRUE(event);
   VerifyDisplayString(event, "1 compromised password");
-  VerifyButtonString(event, "Change password");
   histogram_tester_.ExpectBucketCount(
       "Settings.SafetyCheck.PasswordsResult",
       SafetyCheckHandler::PasswordsStatus::kCompromisedExist, 1);
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 955ad93..914d8126e 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1228,20 +1228,19 @@
        IDS_SETTINGS_SAFETY_CHECK_ICON_INFO_ARIA_LABEL},
       {"safetyCheckIconWarningAriaLabel",
        IDS_SETTINGS_SAFETY_CHECK_ICON_WARNING_ARIA_LABEL},
+      {"safetyCheckReview", IDS_SETTINGS_SAFETY_CHECK_REVIEW},
       {"safetyCheckUpdatesPrimaryLabel",
        IDS_SETTINGS_SAFETY_CHECK_UPDATES_PRIMARY_LABEL},
       {"safetyCheckUpdatesButtonAriaLabel",
        IDS_UPDATE_RECOMMENDED_DIALOG_TITLE},
-      {"safetyCheckPasswordsButton",
-       IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_BUTTON},
+      {"safetyCheckPasswordsButtonAriaLabel",
+       IDS_SETTINGS_SAFETY_CHECK_PASSWORDS_BUTTON_ARIA_LABEL},
       {"safetyCheckSafeBrowsingButton",
        IDS_SETTINGS_SAFETY_CHECK_SAFE_BROWSING_BUTTON},
       {"safetyCheckSafeBrowsingButtonAriaLabel",
        IDS_SETTINGS_SAFETY_CHECK_SAFE_BROWSING_BUTTON_ARIA_LABEL},
       {"safetyCheckExtensionsPrimaryLabel",
        IDS_SETTINGS_SAFETY_CHECK_EXTENSIONS_PRIMARY_LABEL},
-      {"safetyCheckExtensionsButton",
-       IDS_SETTINGS_SAFETY_CHECK_EXTENSIONS_BUTTON},
       {"safetyCheckExtensionsButtonAriaLabel",
        IDS_SETTINGS_SAFETY_CHECK_EXTENSIONS_BUTTON_ARIA_LABEL},
   };
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index 690514b..648c94a 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -561,15 +561,6 @@
                                              base::FEATURE_ENABLED_BY_DEFAULT};
 #endif
 
-#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
-// If enabled, Print Preview will use the CloudPrinterHandler instead of the
-// cloud print interface to communicate with the cloud print server. This
-// prevents Print Preview from making direct network requests. See
-// https://crbug.com/829414.
-const base::Feature kCloudPrinterHandler{"CloudPrinterHandler",
-                                         base::FEATURE_DISABLED_BY_DEFAULT};
-#endif
-
 // Enables or disables push subscriptions keeping Chrome running in the
 // background when closed.
 const base::Feature kPushMessagingBackgroundMode{
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index 4800c40..503b034 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -345,11 +345,6 @@
 extern const base::Feature kFlashDeprecationWarning;
 #endif
 
-#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
-COMPONENT_EXPORT(CHROME_FEATURES)
-extern const base::Feature kCloudPrinterHandler;
-#endif
-
 COMPONENT_EXPORT(CHROME_FEATURES)
 extern const base::Feature kPushMessagingBackgroundMode;
 
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb
index 430e1bc..f3f600b 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">‏تعذَّرت مزامنة كلمة مرور حساب العمل مع ملفك الشخصي على Windows لأن مؤسستك تقيّد تغيير كلمة المرور على جهازك. يمكنك الاتصال بالمشرف للحصول على مساعدة.</translation>
 <translation id="5186761973554910131">اسم الكمبيوتر الذي تم تقديمه أثناء محاولة تغيير كلمة المرور غير صحيح، يُرجى التواصل مع المشرف.</translation>
 <translation id="5265714013989877288">‏تتعذّر المتابَعة بسبب حدوث خطأ أثناء تغيير كلمة مرور Windows. يُرجى التواصل مع مشرفك.</translation>
+<translation id="5581861273642234526">‏هناك حساب عمل آخر مرتبط بهذا الجهاز. يُرجى تسجيل الدخول باستخدام حسابك على Windows.</translation>
 <translation id="6033715878377252112">‏مزوّد بيانات الاعتماد في Google لمساعد Windows</translation>
 <translation id="6149399665202317746">‏مزوّد بيانات الاعتماد في Google لنظام التشغيل Windows</translation>
 <translation id="6243062314475217481">‏لا تفي كلمة مرور حساب العمل بمستوى الصعوبة المطلوبة لدى Windows. يمكنك الاتصال بالمشرف للحصول على مساعدة.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_as.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_as.xtb
index 2927cbfa..1b2aae02 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_as.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_as.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">আপোনাৰ প্ৰতিষ্ঠানে আপোনাৰ ডিভাইচত পাছৱর্ডৰ আপডে'টসমূহ সীমাবদ্ধ কৰাৰ বাবে আপোনাৰ কৰ্মস্থানৰ একাউণ্টটো আপোনাৰ Windows প্ৰ'ফাইলৰ সৈতে ছিংক কৰিব পৰা নগ'ল। সহায়ৰ বাবে আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation>
 <translation id="5186761973554910131">পাছৱৰ্ড সলনি কৰাৰ প্ৰয়াসৰ সময়ত ভুল কম্পিউটাৰৰ নাম দিয়া হৈছে। অনুগ্ৰহ কৰি আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation>
 <translation id="5265714013989877288">আপোনাৰ Windowsৰ পাছৱর্ডটো সলনি কৰাৰ সময়ত কোনো আসোঁৱাহ হোৱাৰ বাবে অব্যাহত ৰাখিব নোৱাৰি। অনুগ্ৰহ কৰি আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation>
+<translation id="5581861273642234526">এই ডিভাইচটোৰ লগত ইতিমধ্যে এটা কৰ্মস্থানৰ একাউণ্ট জড়িত হৈ আছে। আপোনাৰ Windows একাউণ্টটোৰ জৰিয়তে ছাইন ইন কৰক।</translation>
 <translation id="6033715878377252112">Windows সহায়কৰ বাবে Google ক্ৰিডেনশ্বিয়েল প্ৰদানকাৰী</translation>
 <translation id="6149399665202317746">Windowsৰ বাবে Google ক্ৰিডেনশ্বিয়েল প্ৰদানকাৰী</translation>
 <translation id="6243062314475217481">আপোনাৰ কর্মস্থানৰ একাউণ্টৰ পাছৱৰ্ডটোৱে Windowsৰ জটিলতাৰ আৱশ্যকীয়তাসমূহ পূৰা কৰা নাই। সহায়ৰ বাবে আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_az.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_az.xtb
index 94fe657..edd58fc 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_az.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_az.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Cihazınızda parol yeniləmələri təşkilatınız tərəfindən məhdudlaşdırıldığı üçün iş hesabı parolunuz Windows profiliniz ilə sinxronlaşdırıla bilmədi. Yardım üçün inzibatçınız ilə əlaqə saxlayın.</translation>
 <translation id="5186761973554910131">Parol dəyişmə cəhdi zamanı yanlış kompüter adı təqdim edildi. Administratorunuz ilə əlaqə saxlayın.</translation>
 <translation id="5265714013989877288">Windows parolunuzu dəyişərkən xəta olduğu üçün davam etmək olmur. İnzibatçınız ilə əlaqə saxlayın.</translation>
+<translation id="5581861273642234526">Başqa iş hesabı hazırda bu cihazla əlaqələndirilib. Windows hesabınız ilə daxil olun.</translation>
 <translation id="6033715878377252112">Windows köməkçisi üçün Google Kredensial Provayderi</translation>
 <translation id="6149399665202317746">Windows üçün Google Kredensial Provayderi</translation>
 <translation id="6243062314475217481">İş hesabı parolunuz Windows üçün mürəkkəblik tələblərinə uyğun deyil. Yardım üçün inzibatçınız ilə əlaqə saxlayın.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_be.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_be.xtb
index 50bedc4..b64743a 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_be.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_be.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Не ўдалося сінхранізаваць пароль працоўнага ўліковага запісу з профілем Windows, бо абнаўленне пароляў на прыладзе забаронена вашай арганізацыяй. Звярніцеся па дапамогу да адміністратара.</translation>
 <translation id="5186761973554910131">Пры спробе змены пароля ўказана несапраўднае імя камп'ютара. Звярніцеся да адміністратара.</translation>
 <translation id="5265714013989877288">Не ўдаецца працягнуць, бо пры змяненні пароля Windows адбылася памылка. Звярніцеся да адміністратара.</translation>
+<translation id="5581861273642234526">З гэтай прыладай ужо звязаны іншы працоўны ўліковы запіс. Увайдзіце ва ўліковы запіс Windows.</translation>
 <translation id="6033715878377252112">Памочнік Правайдара ўліковых даных Google для Windows</translation>
 <translation id="6149399665202317746">Правайдар уліковых даных Google для Windows</translation>
 <translation id="6243062314475217481">Пароль вашага працоўнага ўліковага запісу не адпавядае патрабаванням да складанасці Windows. Звярніцеся па дапамогу да адміністратара.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_bg.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_bg.xtb
index 2d60298..82f3b889 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_bg.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_bg.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Паролата за служебния ви профил не бе синхронизирана с профила ви в Windows, защото актуализирането на паролите на устройството е ограничено от организацията ви. За помощ се обърнете към администратора си.</translation>
 <translation id="5186761973554910131">При опита за промяна на паролата бе предоставено невалидно име на компютър. Моля, обърнете се към администратора си.</translation>
 <translation id="5265714013989877288">Не може да се продължи поради грешка при промяната на паролата ви за Windows. Моля, обърнете се към администратора си.</translation>
+<translation id="5581861273642234526">Друг служебен профил вече е свързан с това устройство. Влезте с профила си в Windows.</translation>
 <translation id="6033715878377252112">Помощник за доставчика на идентификационни данни за Google за Windows</translation>
 <translation id="6149399665202317746">Доставчик на идентификационни данни за Google за Windows</translation>
 <translation id="6243062314475217481">Паролата за служебния ви профил не отговаря на изискванията за сложност на Windows. За помощ се обърнете към администратора си.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_cs.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_cs.xtb
index e366f30..0638e3c 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_cs.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_cs.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Pracovní účet nebylo možné synchronizovat do profilu Windows, protože vaše organizace aktualizace hesel na zařízení omezuje. Obraťte se na administrátora.</translation>
 <translation id="5186761973554910131">Při pokusu změnit heslo byl zadán nesprávný název počítače. Obraťte se na administrátora.</translation>
 <translation id="5265714013989877288">Nelze pokračovat, protože při změně hesla vašeho účtu Windows došlo k chybě. Obraťte se na administrátora.</translation>
+<translation id="5581861273642234526">S tímto zařízením je již propojen jiný pracovní účet. Přihlaste se pomocí účtu Windows.</translation>
 <translation id="6033715878377252112">Pomocník Poskytovatele identifikačních údajů Google pro Windows</translation>
 <translation id="6149399665202317746">Poskytovatel identifikačních údajů Google pro Windows</translation>
 <translation id="6243062314475217481">Váš pracovní účet nesplňuje požadavky na složitost pro Windows. Obraťte se na administrátora.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_es-419.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_es-419.xtb
index ac25fe5..2367121 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_es-419.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_es-419.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">No se pudo sincronizar la contraseña de la cuenta de trabajo con el perfil de Windows porque la organización restringió las actualizaciones de contraseña para el dispositivo. Comunícate con el administrador para obtener más ayuda.</translation>
 <translation id="5186761973554910131">En el intento para cambiar la contraseña, se proporcionó un nombre de computadora no válido. Comunícate con tu administrador.</translation>
 <translation id="5265714013989877288">No puedes continuar porque se produjo un error al cambiar la contraseña de Windows. Comunícate con el administrador.</translation>
+<translation id="5581861273642234526">Este dispositivo ya tiene asociada otra cuenta de trabajo. Accede con tu cuenta de Windows.</translation>
 <translation id="6033715878377252112">Proveedor de credenciales de Google para el asistente de Windows</translation>
 <translation id="6149399665202317746">Proveedor de credenciales de Google para Windows</translation>
 <translation id="6243062314475217481">La contraseña de la cuenta de trabajo no cumple con los requisitos de complejidad de Windows. Comunícate con el administrador para obtener más ayuda.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_et.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_et.xtb
index b545ce04..edb5bdf9 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_et.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_et.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Teie töökonto parooli ei saanud teie Windowsi profiiliga sünkroonida, kuna teie organisatsioon on selles seadmes paroolivärskendused piiranud. Abi saamiseks võtke ühendust administraatoriga.</translation>
 <translation id="5186761973554910131">Parooli muutmise katsel esitati arvuti vale nimi. Võtke ühendust administraatoriga.</translation>
 <translation id="5265714013989877288">Ei saa jätkata, kuna Windowsi parooli muutmisel ilmnes viga. Võtke ühendust administraatoriga.</translation>
+<translation id="5581861273642234526">Selle seadmega on juba seotud teine töökonto. Logige sisse oma Windowsi kontoga.</translation>
 <translation id="6033715878377252112">Windowsi jaoks mõeldud Google'i identimisteabe teenuste pakkuja abi</translation>
 <translation id="6149399665202317746">Windowsi jaoks mõeldud Google'i identimisteabe teenuste pakkuja</translation>
 <translation id="6243062314475217481">Teie töökonto parool ei vasta Windowsi keerukuse nõuetele. Abi saamiseks võtke ühendust administraatoriga.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_eu.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_eu.xtb
index db036b9..b321679 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_eu.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_eu.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Laneko kontuaren pasahitza ezin izan da sinkronizatu Windows-eko profilarekin, zure erakundeak mugatu egiten baitu gailuko pasahitzak eguneratzeko aukera. Laguntza lortzeko, jarri administratzailearekin harremanetan.</translation>
 <translation id="5186761973554910131">Pasahitza aldatzen saiatzean emandako ordenagailu-izenak ez du balio. Jarri administratzailearekin harremanetan.</translation>
 <translation id="5265714013989877288">Ezin duzu egin aurrera, errore bat gertatu delako Windows-eko pasahitza aldatzean. Jarri administratzailearekin harremanetan.</translation>
+<translation id="5581861273642234526">Laneko beste kontu bat gailu honekin erlazionatuta dago dagoeneko. Hasi saioa Windows-eko kontuarekin.</translation>
 <translation id="6033715878377252112">Windows-erako Google-ren Kredentzial-hornitzailea programaren laguntzailea</translation>
 <translation id="6149399665202317746">Windows-erako Google-ren Kredentzial-hornitzailea</translation>
 <translation id="6243062314475217481">Laneko kontuaren pasahitza ez da Windows-ek eskatu bezain konplexua. Laguntza lortzeko, jarri administratzailearekin harremanetan.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_fr-CA.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_fr-CA.xtb
index 2a50938..ff9e52b 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_fr-CA.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_fr-CA.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Le mot de passe de votre compte professionnel n'a pas pu être synchronisé avec votre profil Windows parce que votre organisation restreint la mise à jour des mots de passe. Pour obtenir de l'aide, communiquez avec votre administrateur.</translation>
 <translation id="5186761973554910131">Un nom d'ordinateur incorrect a été fourni lors du changement de mot de passe. Veuillez communiquer avec votre administrateur.</translation>
 <translation id="5265714013989877288">Impossible de continuer parce qu'une erreur s'est produite durant la modification de votre mot de passe Windows. Veuillez communiquer avec votre administrateur.</translation>
+<translation id="5581861273642234526">Un autre compte professionnel est déjà associé à cet appareil. Connectez-vous à l'aide de votre compte Windows.</translation>
 <translation id="6033715878377252112">Aide du fournisseur d'authentifiants Google pour Windows</translation>
 <translation id="6149399665202317746">Fournisseur d'authentifiants Google pour Windows</translation>
 <translation id="6243062314475217481">Le mot de passe de votre compte professionnel ne répond pas aux exigences de complexité pour Windows. Pour obtenir de l'aide, communiquez avec votre administrateur.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb
index 6dae026..c9d5fae 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Impossible de synchroniser le mot de passe de votre compte professionnel avec votre profil Windows, car la mise à jour des mots de passe sur votre appareil est limitée par votre organisation. Contactez votre administrateur pour obtenir de l'aide.</translation>
 <translation id="5186761973554910131">Nom d'ordinateur non valide fourni lors de la tentative de changement de mot de passe. Veuillez contacter votre administrateur.</translation>
 <translation id="5265714013989877288">Impossible de poursuivre, car une erreur est survenue lors de la modification de votre mot de passe Windows. Veuillez contacter votre administrateur.</translation>
+<translation id="5581861273642234526">Un autre compte professionnel est déjà associé à cet appareil. Connectez-vous avec votre compte Windows.</translation>
 <translation id="6033715878377252112">Outil d'aide du fournisseur d'informations d'identification Google pour Windows</translation>
 <translation id="6149399665202317746">Fournisseur d'informations d'identification Google pour Windows</translation>
 <translation id="6243062314475217481">Le mot de passe de votre compte professionnel n'est pas assez complexe pour Windows. Contactez votre administrateur pour obtenir de l'aide.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_gu.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_gu.xtb
index f10c997..c990881 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_gu.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_gu.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">તમારી સંસ્થાએ તમારા ડિવાઇસ પર પાસવર્ડ અપડેટની સુવિધા પ્રતિબંધિત કરેલી હોવાને કારણે તમારા ઑફિસનાં એકાઉન્ટના પાસવર્ડને તમારી Windows પ્રોફાઇલ સાથે સિંક કરી શકાયો નથી. સહાય માટે તમારા વ્યવસ્થાપકનો સંપર્ક કરો.</translation>
 <translation id="5186761973554910131">પાસવર્ડ બદલવાનો પ્રયાસ કરતી વખતે અમાન્ય કમ્પ્યુટર નામ આપવામાં આવ્યું હતું. કૃપા કરીને તમારા વ્યવસ્થાપકનો સંપર્ક કરો.</translation>
 <translation id="5265714013989877288">તમારો Windows પાસવર્ડ બદલતી વખતે ભૂલ આવી હોવાને કારણે ચાલુ રાખી શકતા નથી. કૃપા કરીને તમારા વ્યવસ્થાપકનો સંપર્ક કરો.</translation>
+<translation id="5581861273642234526">બીજું ઑફિસનું એકાઉન્ટ પહેલેથી જ આ ડિવાઇસ સાથે સંકળાયેલું છે. તમારા Windowsના એકાઉન્ટ વડે સાઇન ઇન કરો.</translation>
 <translation id="6033715878377252112">Windows માટે Google એકાઉન્ટની પાત્રતા ચકાસનાર સહાયક</translation>
 <translation id="6149399665202317746">Windows માટે Google એકાઉન્ટની પાત્રતા ચકાસનાર</translation>
 <translation id="6243062314475217481">તમારા ઑફિસના એકાઉન્ટનો પાસવર્ડ Windows માટેની જટિલતાની આવશ્યકતાઓ પૂર્ણ કરતો નથી. સહાય માટે તમારા વ્યવસ્થાપકનો સંપર્ક કરો.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_hi.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_hi.xtb
index d635ccd..b7fdf2c 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_hi.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_hi.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">आपके काम से जुड़े खाते के पासवर्ड को आपकी Windows प्रोफ़ाइल से सिंक नहीं किया जा सका, क्योंकि आपके संगठन ने डिवाइस के पासवर्ड बदलने की सुविधा पर पाबंदी लगाई है. मदद के लिए अपने एडमिन से संपर्क करें.</translation>
 <translation id="5186761973554910131">पासवर्ड बदलते समय कंप्यूटर का नाम गलत बताया गया. कृपया अपने एडमिन से संपर्क करें.</translation>
 <translation id="5265714013989877288">जारी नहीं रख सकते, क्योंकि आपके Windows पासवर्ड को बदलते समय कोई गड़बड़ी हुई. कृपया अपने एडमिन से संपर्क करें.</translation>
+<translation id="5581861273642234526">काम से जुड़ा एक अन्य खाता पहले ही इस डिवाइस से जुड़ा है. अपने Windows खाते से साइन इन करें.</translation>
 <translation id="6033715878377252112">'Windows के लिए Google क्रेडेंशियल देने वाला' सहायक</translation>
 <translation id="6149399665202317746">Windows के लिए Google क्रेडेंशियल देने वाला</translation>
 <translation id="6243062314475217481">आपके ऑफ़िस के खाते का पासवर्ड, Windows के लिए मज़बूत पासवर्ड बनाने की ज़रूरी शर्तों को पूरा नहीं करता है. मदद के लिए अपने एडमिन से संपर्क करें.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_id.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_id.xtb
index 53be1a6..6565858 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_id.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_id.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Sandi akun kerja Anda tidak dapat disinkronkan ke profil Windows karena pembaruan sandi di perangkat Anda dibatasi oleh organisasi Anda. Hubungi administrator untuk meminta bantuan.</translation>
 <translation id="5186761973554910131">Nama komputer yang diberikan saat percobaan perubahan sandi tidak valid. Harap hubungi administrator Anda.</translation>
 <translation id="5265714013989877288">Tidak dapat melanjutkan karena terjadi error saat mengubah sandi Windows. Harap hubungi administrator Anda.</translation>
+<translation id="5581861273642234526">Akun kerja lain sudah dikaitkan dengan perangkat ini. Login dengan akun Windows Anda.</translation>
 <translation id="6033715878377252112">Bantuan Penyedia Kredensial Google untuk Windows</translation>
 <translation id="6149399665202317746">Penyedia Kredensial Google untuk Windows</translation>
 <translation id="6243062314475217481">Sandi akun kerja Anda tidak cocok dengan persyaratan kerumitan sandi untuk Windows. Hubungi administrator untuk meminta bantuan.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ja.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ja.xtb
index ebde7ae0..5fc851c4 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ja.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ja.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">仕事用アカウントのパスワードを Windows プロファイルに同期することはできません。お使いのデバイスでは組織によってパスワードの更新が制限されています。詳しくは管理者にお問い合わせください。</translation>
 <translation id="5186761973554910131">パスワードの変更中に無効なコンピュータ名が指定されました。管理者にお問い合わせください。</translation>
 <translation id="5265714013989877288">Windows のパスワードの変更中にエラーが発生したため続行できません。管理者にお問い合わせください。</translation>
+<translation id="5581861273642234526">別の仕事用アカウントがこのデバイスにすでに関連付けられています。Windows アカウントでログインしてください。</translation>
 <translation id="6033715878377252112">Windows 用 Google 認証情報プロバイダ ヘルパー</translation>
 <translation id="6149399665202317746">Windows 用 Google 認証情報プロバイダ</translation>
 <translation id="6243062314475217481">仕事用アカウントのパスワードは Windows の複雑さの要件を満たしていません。詳しくは管理者にお問い合わせください。</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ka.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ka.xtb
index e10399cb..8240cac 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ka.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ka.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">თქვენი სამსახურის ანგარიშის პაროლის Windows-ის პროფილთან სინქრონიზაცია ვერ მოხერხდა, ვინაიდან თქვენს მოწყობილობაზე პაროლების განახლებები იზღუდება თქვენი ორგანიზაციის მიერ. დახმარებისთვის დაუკავშირდით თქვენს ადმინისტრატორს.</translation>
 <translation id="5186761973554910131">პაროლის შეცვლის მცდელობისას მოწოდებული იყო კომპიუტერის არასწორი სახელი. გთხოვთ, დაუკავშირდეთ თქვენს ადმინისტრატორს.</translation>
 <translation id="5265714013989877288">გაგრძელება ვერ მოხერხდება Windows-ის პაროლის შეცვლისას წარმოქმნილი პრობლემის გამო. გთხოვთ, დაუკავშირდეთ თქვენს ადმინისტრატორს.</translation>
+<translation id="5581861273642234526">ამ მოწყობილობასთან უკვე დაკავშირებულია სამსახურის სხვა ანგარიში. შედით სისტემაში Windows-ის ანგარიშით.</translation>
 <translation id="6033715878377252112">Windows-ის Google ავტორიზაციის მონაცემების პროვაიდერის დამხმარე</translation>
 <translation id="6149399665202317746">Google ავტორიზაციის მონაცემების პროვაიდერი Windows-ისთვის</translation>
 <translation id="6243062314475217481">თქვენი სამსახურის ანგარიშის პაროლი არ აკმაყოფილებს Windows-ის მოთხოვნებს პაროლების სირთულის მიმართ. დახმარებისთვის დაუკავშირდით თქვენს ადმინისტრატორს.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_kk.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_kk.xtb
index cb41bd4..a4ffaf04 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_kk.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_kk.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Жұмыс есептік жазбаңыздың құпия сөзін Windows профиліңізбен синхрондау мүмкін болмады, себебі ұйымыңыз құрылғыңыздағы құпия сөзді жаңарту функцияларын өшіріп қойған. Әкімшіңізден көмек сұраңыз.</translation>
 <translation id="5186761973554910131">Құпия сөзді ауыстыру барысында компьютердің атауы қате жазылды. Әкімшіге хабарласыңыз.</translation>
 <translation id="5265714013989877288">Windows құпия сөзін өзгерту кезінде қате шыққандықтан, операцияны жалғастыру мүмкін емес. Әкімшіге хабарласыңыз.</translation>
+<translation id="5581861273642234526">Бұл құрылғымен басқа жұмыс есептік жазбасы байланыстырылған. Windows есептік жазбаңызбен кіріңіз.</translation>
 <translation id="6033715878377252112">Windows жүйесіне арналған Google Credential Provider көмекшісі</translation>
 <translation id="6149399665202317746">Windows жүйесіне арналған Google Credential Provider</translation>
 <translation id="6243062314475217481">Жұмыс есептік жазбаңыздың құпия сөзі Windows-тың күрделілік талаптарына сәйкес келмейді. Әкімшіңізден көмек сұраңыз.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_km.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_km.xtb
index a9ca3b37..5970e8f 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_km.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_km.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">មិនអាចធ្វើសមកាលកម្មពាក្យសម្ងាត់គណនីការងារទៅកម្រងព័ត៌មាន Windows របស់អ្នកបានទេ ដោយសារស្ថាប័នរបស់អ្នកបានដាក់កំហិតលើការធ្វើបច្ចុប្បន្នភាពពាក្យសម្ងាត់នៅលើឧបករណ៍របស់អ្នក។ សូមទាក់ទង​អ្នកគ្រប់គ្រង​របស់អ្នក ដើម្បីទទួលបានជំនួយ។</translation>
 <translation id="5186761973554910131">បានផ្ដល់ឈ្មោះ​កុំព្យូទ័រមិនត្រឹមត្រូវ អំឡុងពេលព្យាយាមប្ដូរ​ពាក្យសម្ងាត់។ សូមទាក់ទង​អ្នកគ្រប់គ្រង​របស់អ្នក។</translation>
 <translation id="5265714013989877288">មិន​អាចបន្តបានទេ ដោយសារ​មានបញ្ហា ពេលកំពុងប្ដូរពាក្យសម្ងាត់ Windows របស់អ្នក។ សូមទាក់ទង​អ្នកគ្រប់គ្រង​របស់អ្នក។</translation>
+<translation id="5581861273642234526">គណនីការងារ​ផ្សេងទៀត​ត្រូវបានភ្ជាប់ជាមួយ​ឧបករណ៍នេះ​រួចហើយ។ ចូល​ដោយប្រើ​គណនី Windows របស់អ្នក។</translation>
 <translation id="6033715878377252112">កម្មវិធី​ផ្ដល់ព័ត៌មានផ្ទៀងផ្ទាត់ ​Google សម្រាប់ជំនួយការ Windows</translation>
 <translation id="6149399665202317746">កម្មវិធី​ផ្ដល់ព័ត៌មាន​ផ្ទៀងផ្ទាត់ Google សម្រាប់ Windows</translation>
 <translation id="6243062314475217481">ពាក្យសម្ងាត់គណនីការងាររបស់អ្នកមិនបំពេញតាម​លក្ខខណ្ឌតម្រូវនៃភាព​ស្មុគស្មាញសម្រាប់ Windows ទេ។ សូមទាក់ទង​អ្នកគ្រប់គ្រង​របស់អ្នក ដើម្បីទទួលបានជំនួយ។</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb
index 56be69a..27b7b4a 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪಾಸ್‌ವರ್ಡ್ ಅಪ್‌ಡೇಟ್ ಮಾಡದ ಹಾಗೆ ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ನಿರ್ಬಂಧಿಸಿರುವ ಕಾರಣ, ನಿಮ್ಮ ಕೆಲಸದ ಖಾತೆಯ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನಿಮ್ಮ Windows ಪ್ರೊಫೈಲ್‌ನೊಂದಿಗೆ ಸಿಂಕ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಸಹಾಯ ಬೇಕಿದ್ದರೆ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="5186761973554910131">ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಬದಲಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವಾಗ ಅಮಾನ್ಯವಾದ ಕಂಪ್ಯೂಟರ್ ಹೆಸರನ್ನು ನೀಡಲಾಗಿದೆ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="5265714013989877288">ನಿಮ್ಮ Windows ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಬದಲಾಯಿಸುವಾಗ ದೋಷ ಉಂಟಾದ ಕಾರಣ, ಮುಂದುವರಿಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
+<translation id="5581861273642234526">ಈಗಾಗಲೇ ಬೇರೊಂದು ಕೆಲಸದ ಖಾತೆಯು ಈ ಸಾಧನದ ಜೊತೆಗೆ ಸಂಯೋಜಿತವಾಗಿದೆ. ನಿಮ್ಮ Windows ಖಾತೆಯನ್ನು ಬಳಸಿ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation>
 <translation id="6033715878377252112">Windows ಸಹಾಯಕಕ್ಕಾಗಿ Google ರುಜುವಾತು ಪೂರೈಕೆದಾರ</translation>
 <translation id="6149399665202317746">Windows ಗಾಗಿ Google ರುಜುವಾತು ಪೂರೈಕೆದಾರ</translation>
 <translation id="6243062314475217481">ನಿಮ್ಮ ಕೆಲಸದ ಖಾತೆಯ ಪಾಸ್‌ವರ್ಡ್, Windows ನ ಸಂಕೀರ್ಣತೆ ಅವಶ್ಯಕತೆಗಳನ್ನು ಪೂರೈಸುತ್ತಿಲ್ಲ. ಸಹಾಯ ಬೇಕಿದ್ದರೆ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ko.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ko.xtb
index 3c67f71..edabd34 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ko.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ko.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">조직에서 기기에서의 비밀번호 업데이트를 제한하기 때문에 직장 계정 비밀번호를 Windows 프로필과 동기화할 수 없습니다. 관리자에게 도움을 요청하세요.</translation>
 <translation id="5186761973554910131">비밀번호 변경 시도 중 잘못된 컴퓨터 이름을 입력했습니다. 관리자에게 문의하세요.</translation>
 <translation id="5265714013989877288">Windows 비밀번호를 변경하는 동안 오류가 발생하여 계속할 수 없습니다. 관리자에게 문의하세요.</translation>
+<translation id="5581861273642234526">다른 직장 계정이 이미 기기와 연결되어 있습니다. Windows 계정으로 로그인하세요.</translation>
 <translation id="6033715878377252112">Windows 도우미용 Google 사용자 인증 정보 제공 프로그램</translation>
 <translation id="6149399665202317746">Windows용 Google 사용자 인증 정보 제공 프로그램</translation>
 <translation id="6243062314475217481">직장 계정 비밀번호가 Windows 비밀번호 복잡성 요구사항을 충족하지 못했습니다. 관리자에게 도움을 요청하세요.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ky.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ky.xtb
index 1080eb75..36fbeb1 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ky.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ky.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Жумуш аккаунтуңуздун сырсөзү Windows профилиңиз менен шайкештирилген жок, анткени түзмөгүңүздөгү сырсөздөрдү жаңыртуу функциясын уюмуңуз чектеп койгон. Жардам алуу үчүн администраторуңузга кайрылыңыз.</translation>
 <translation id="5186761973554910131">Сырсөздү өзгөртүүгө аракет жасалганда компьютердин аталышы туура эмес көрсөтүлдү. Администраторуңузга кайрылыңыз.</translation>
 <translation id="5265714013989877288">Windows сырсөзүңүздү өзгөртүүдө ката кеткендиктен улам улантуу мүмкүн эмес. Администраторуңузга кайрылыңыз.</translation>
+<translation id="5581861273642234526">Бул түзмөккө башка жумуш аккаунту байланыштырылган. Windows аккаунтуңуз менен кириңиз.</translation>
 <translation id="6033715878377252112">Windows үчүн Google'дун эсептик дайындарын камсыздоочунун жардамчысы</translation>
 <translation id="6149399665202317746">Windows үчүн Google'дун эсептик дайындарын камсыздоочу</translation>
 <translation id="6243062314475217481">Жумуш аккаунтуңуздун сырсөзү Windows койгон талаптарга жооп бербейт. Жардам алуу үчүн администраторуңузга кайрылыңыз.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_lo.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_lo.xtb
index d513a22d..9e30aa73 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_lo.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_lo.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">ບໍ່ສາມາດຊິ້ງຂໍ້ມູນລະຫັດຜ່ານບັນຊີບ່ອນເຮັດວຽກຂອງທ່ານກັບໂປຣໄຟລ໌ Windows ຂອງທ່ານໄດ້ ເພາະວ່າອົງການຂອງທ່ານຈຳກັດການອັບເດດລະຫັດຜ່ານໃນອຸປະກອນຂອງທ່ານໄວ້. ກະລຸນາຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານເພື່ອຂໍຄວາມຊ່ວຍເຫຼືອ.</translation>
 <translation id="5186761973554910131">ລະບຸຊື່ຄອມພິວເຕີບໍ່ຖືກຕ້ອງໃນຂະນະພະຍາຍາມປ່ຽນລະຫັດຜ່ານ. ກະລຸນາຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ.</translation>
 <translation id="5265714013989877288">ບໍ່ສາມາດສືບຕໍ່ໄດ້ ເພາະວ່າເກີດຂໍ້ຜິດພາດໃນຂະນະປ່ຽນລະຫັດຜ່ານ Windows ຂອງທ່ານ. ກະລຸນາຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ.</translation>
+<translation id="5581861273642234526">ບັນຊີເຄືອຂ່າຍອື່ນເຊື່ອມໂຍງກັບອຸປະກອນນີ້ຢູ່ແລ້ວ. ເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ Windows ຂອງທ່ານ.</translation>
 <translation id="6033715878377252112">ຕົວຊ່ວຍຜູ້ໃຫ້ບໍລິການຂໍ້ມູນປະຈຳຕົວຂອງ Google ສຳລັບ Windows</translation>
 <translation id="6149399665202317746">ຜູ້ໃຫ້ບໍລິການຂໍ້ມູນປະຈຳຕົວຂອງ Google ສຳລັບ Windows</translation>
 <translation id="6243062314475217481">ລະຫັດຜ່ານບັນຊີບ່ອນເຮັດວຽກຂອງທ່ານບໍ່ກົງກັບຂໍ້ກຳນົດຄວາມສັບສົນສຳລັບ Windows. ກະລຸນາຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານເພື່ອຂໍຄວາມຊ່ວຍເຫຼືອ.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_lt.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_lt.xtb
index e5f4957..cc4c804 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_lt.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_lt.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Nepavyko sinchronizuoti jūsų darbo paskyros slaptažodžio su „Windows“ profiliu, nes organizacija riboja slaptažodžių atnaujinimą jūsų įrenginyje. Susisiekite su administratoriumi, kad gautumėte pagalbos.</translation>
 <translation id="5186761973554910131">Bandant pakeisti slaptažodį pateiktas netinkamas kompiuterio pavadinimas. Susisiekite su administratoriumi.</translation>
 <translation id="5265714013989877288">Negalima tęsti, nes keičiant „Windows“ slaptažodį iškilo problema. Susisiekite su administratoriumi.</translation>
+<translation id="5581861273642234526">Su šiuo įrenginiu jau susieta kita darbo paskyra. Prisijunkite naudodami „Windows“ paskyrą.</translation>
 <translation id="6033715878377252112">„Windows“ pagalbos priemonės „Google“ prisijungimo duomenų teikėjas</translation>
 <translation id="6149399665202317746">Sistemos „Windows“ „Google“ prisijungimo duomenų teikėjas</translation>
 <translation id="6243062314475217481">Jūsų darbo paskyros slaptažodis neatitinka „Windows“ taikomų sudėtingumo reikalavimų. Susisiekite su administratoriumi, kad gautumėte pagalbos.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_lv.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_lv.xtb
index 60abb46d..1fa6038 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_lv.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_lv.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Jūsu darba konta paroli nevar sinhronizēt ar jūsu Windows profilu, jo jūsu organizācija ierobežo paroļu atjauninājumus jūsu ierīcē. Lai saņemtu palīdzību, sazinieties ar administratoru.</translation>
 <translation id="5186761973554910131">Mēģinot mainīt paroli, tika norādīts nederīgs datora nosaukums. Lūdzu, sazinieties ar administratoru.</translation>
 <translation id="5265714013989877288">Nevar turpināt, jo, mainot Windows paroli, radās kļūda. Lūdzu, sazinieties ar administratoru.</translation>
+<translation id="5581861273642234526">Ar šo ierīci jau ir saistīts cits darba konts. Pierakstieties, izmantojot savu Windows kontu.</translation>
 <translation id="6033715878377252112">Palīgs programmai “Google akreditācijas datu nodrošinātājs” operētājsistēmai Windows</translation>
 <translation id="6149399665202317746">Google akreditācijas datu nodrošinātājs operētājsistēmai Windows</translation>
 <translation id="6243062314475217481">Jūsu darba konta parole neatbilst Windows paroļu sarežģītības prasībām. Lai saņemtu palīdzību, sazinieties ar administratoru.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ml.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ml.xtb
index 7a73e40..53367aa 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ml.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ml.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">നിങ്ങളുടെ ഉപകരണത്തിലെ പാസ്‌വേഡ് അപ്‌ഡേറ്റുകൾ നിങ്ങളുടെ ഓർഗനൈസേഷൻ നിയന്ത്രിച്ചിരിക്കുന്നതിനാൽ ഔദ്യോഗിക അക്കൗണ്ടിന്റെ പാസ്‌വേഡ് നിങ്ങളുടെ Windows പ്രൊഫൈലുമായി സമന്വയിപ്പിക്കാനായില്ല. സഹായത്തിനായി നിങ്ങളുടെ അഡ്‌മിനെ ബന്ധപ്പെടുക.</translation>
 <translation id="5186761973554910131">പാസ്‌വേഡ് മാറ്റാൻ ശ്രമിച്ചപ്പോൾ നൽകിയ കമ്പ്യൂട്ടറിന്റെ പേര് അസാധുവാണ്. നിങ്ങളുടെ അഡ്മിനെ ബന്ധപ്പെടുക.</translation>
 <translation id="5265714013989877288">നിങ്ങളുടെ Windows പാസ്‌വേഡ് മാറ്റുന്നതിനിടയിൽ ഒരു പിശകുണ്ടായതിനാൽ തുടരാനാവില്ല. നിങ്ങളുടെ അഡ്‌മിനെ ബന്ധപ്പെടുക.</translation>
+<translation id="5581861273642234526">ഈ ഉപകരണവുമായി മറ്റൊരു ഔദ്യോഗിക അക്കൗണ്ട് മുമ്പേ തന്നെ ബന്ധപ്പെടുത്തിയിരിക്കുന്നു. നിങ്ങളുടെ Windows അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="6033715878377252112">Windows സഹായിയ്ക്കുള്ള Google ക്രെഡൻഷ്യൽ ദാതാവ്</translation>
 <translation id="6149399665202317746">Windows-നായുള്ള Google ക്രെഡൻഷ്യൽ ദാതാവ്</translation>
 <translation id="6243062314475217481">നിങ്ങളുടെ ഔദ്യോഗിക അക്കൗണ്ടിന്റെ പാസ്‌വേഡ് Windows-ന്റെ സങ്കീർണ്ണതാ ആവശ്യകതകളുമായി പൊരുത്തപ്പെടുന്നില്ല. സഹായത്തിനായി നിങ്ങളുടെ അഡ്‌മിനെ ബന്ധപ്പെടുക.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_mn.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_mn.xtb
index b038bc0..8600377 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_mn.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_mn.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Таны төхөөрөмж дээр нууц үг шинэчлэхийг танай байгууллага хязгаарладаг тул таны ажлын бүртгэлийн нууц үгийг таны Windows-н профайлтай синк хийж чадсангүй. Тусламж хэрэгтэй бол администратортайгаа холбогдоно уу.</translation>
 <translation id="5186761973554910131">Нууц үгийг өөрчлөх оролдлогын үеэр компьютерын нэрийг буруу оруулсан. Администратортайгаа холбогдоно уу.</translation>
 <translation id="5265714013989877288">Таны Windows-н нууц үгийг өөрчлөх үед алдаа гарсан тул үргэлжлүүлэх боломжгүй байна. Администратортайгаа холбогдоно уу.</translation>
+<translation id="5581861273642234526">Энэ төхөөрөмжтэй аль хэдийн өөр ажлын бүртгэлийг холбосон байна. Windows-н бүртгэлээрээ нэвтэрнэ үү.</translation>
 <translation id="6033715878377252112">Windows туслагчид зориулсан Google Мандат үнэмлэх олгогч</translation>
 <translation id="6149399665202317746">Windows-т зориулсан Google Мандат үнэмлэх олгогч</translation>
 <translation id="6243062314475217481">Таны ажлын бүртгэлийн нууц үг Windows-н төвөгтэй байдлын шаардлагатай тохирохгүй байна. Тусламж хэрэгтэй бол администратортайгаа холбогдоно уу.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_mr.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_mr.xtb
index 1c9cede..53431ea 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_mr.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_mr.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">तुमच्या संस्थेने तुमच्या डिव्हाइसवर पासवर्ड अपडेट प्रतिबंधित केली असल्यामुळे तुमचा ऑफिस खाते पासवर्ड तुमच्या Windows प्रोफाइलशी सिंक करता आला नाही. मदतीसाठी तुमच्या अ‍ॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="5186761973554910131">पासवर्ड बदलण्याचा प्रयत्न करत असताना कॉंप्युटर नाव चुकीचे दिले. कृपया तुमच्या अ‍ॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="5265714013989877288">तुमचा Windows पासवर्ड बदलताना एरर आल्यामुळे सुरू ठेवू शकत नाही. कृपया तुमच्या अ‍ॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
+<translation id="5581861273642234526">दुसरे ऑफिस खाते या डिव्हाइसशी आधीच संबंधित आहे. तुमच्या Windows खात्याने साइन इन करा.</translation>
 <translation id="6033715878377252112">Windows हेल्परसाठी Google क्रेडेंशियल पुरवठादार</translation>
 <translation id="6149399665202317746">Windows साठी Google क्रेडेंशियल पुरवठादार</translation>
 <translation id="6243062314475217481">तुमचा ऑफिस खाते पासवर्ड Windows च्या क्लिष्टता आवश्यकतांशी जुळत नाही. मदतीसाठी तुमच्या अ‍ॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_or.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_or.xtb
index a79cb3c1..39924ad 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_or.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_or.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">ଆପଣଙ୍କର ସଂସ୍ଥା ଦ୍ୱାରା ଆପଣଙ୍କ ଡିଭାଇସରେ ପାସୱାର୍ଡ ଅପଡେଟଗୁଡ଼ିକ ପ୍ରତିବନ୍ଧିତ କରାଯାଇଥିବାରୁ ଆପଣଙ୍କର କାର୍ଯ୍ୟସ୍ଥଳୀ ଆକାଉଣ୍ଟ ପାସୱାର୍ଡ ଆପଣଙ୍କ Windows ପ୍ରୋଫାଇଲକୁ ସିଙ୍କ୍ କରାଯାଇପାରିଲା ନାହିଁ। ସହାୟତା ପାଇଁ ଆପଣଙ୍କର ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
 <translation id="5186761973554910131">ପାସୱାର୍ଡ ପରିବର୍ତ୍ତନ କରିବାକୁ ଚେଷ୍ଟା କରିବା ସମୟରେ ଅବୈଧ କମ୍ପ୍ୟୁଟର୍ ନାମ ପ୍ରଦାନ କରାଯାଇଛି। ଦୟାକରି ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କୁ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
 <translation id="5265714013989877288">ଆପଣଙ୍କର Windows ପାସୱାର୍ଡ ପରିବର୍ତ୍ତନ କରିବା ସମୟରେ ଏକ ତ୍ରୁଟି ଦେଖାଦେଇଥିବାରୁ, ଏହା ଜାରି ରଖିପାରିବେ ନାହିଁ। ଦୟାକରି ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
+<translation id="5581861273642234526">ଅନ୍ୟ ଏକ କାର୍ଯ୍ୟସ୍ଥଳୀ ଆକାଉଣ୍ଟ ଏହି ଡିଭାଇସ୍ ସହିତ ପୂର୍ବରୁ ସମ୍ବନ୍ଧିତ ଅଛି। ଆପଣଙ୍କ Windows ଆକାଉଣ୍ଟରେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ।</translation>
 <translation id="6033715878377252112">Windows Helper ପାଇଁ Google କ୍ରେଡେନ୍‌ସିଆଲ୍ ପ୍ରଦାନକାରୀ</translation>
 <translation id="6149399665202317746">Windows ପାଇଁ Google କ୍ରେଡେନ୍‍ସିଆଲ୍ ପ୍ରଦାନକାରୀ</translation>
 <translation id="6243062314475217481">ଆପଣଙ୍କ କାର୍ଯ୍ୟସ୍ଥଳୀ ଆକାଉଣ୍ଟର ପାସୱାର୍ଡ Windows ପାଇଁ ଜଟିଳତା ଆବଶ୍ୟକତାଗୁଡ଼ିକ ସହ ମେଳ ଖାଉନାହିଁ। ସହାୟତା ପାଇଁ ଆପଣଙ୍କର ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_pa.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_pa.xtb
index 03f74e55..689b70b 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_pa.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_pa.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">ਤੁਹਾਡੇ Windows ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ ਤੁਹਾਡੇ ਕਾਰਜ ਖਾਤੇ ਦੇ ਪਾਸਵਰਡ ਦਾ ਸਮਕਾਲੀਕਰਨ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਕਿਉਂਕਿ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ 'ਤੇ ਪਾਸਵਰਡ ਅੱਪਡੇਟਾਂ 'ਤੇ ਪਾਬੰਦੀ ਲਗਾਈ ਗਈ ਹੈ। ਮਦਦ ਲਈ ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।</translation>
 <translation id="5186761973554910131">ਪਾਸਵਰਡ ਬਦਲਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਵੇਲੇ ਅਵੈਧ ਕੰਪਿਊਟਰ ਨਾਮ ਮੁਹੱਈਆ ਕਰਵਾਇਆ ਗਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।</translation>
 <translation id="5265714013989877288">ਤੁਹਾਡੇ Windows ਪਾਸਵਰਡ ਨੂੰ ਬਦਲਣ ਦੌਰਾਨ ਕੋਈ ਗੜਬੜ ਹੋਣ ਕਰਕੇ ਜਾਰੀ ਨਹੀਂ ਰੱਖਿਆ ਜਾ ਸਕਦਾ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।</translation>
+<translation id="5581861273642234526">ਕੋਈ ਹੋਰ ਕਾਰਜ ਖਾਤਾ ਇਸ ਡੀਵਾਈਸ ਨਾਲ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਜੁੜਿਆ ਹੋਇਆ ਹੈ। ਆਪਣੇ Windows ਖਾਤੇ ਨਾਲ ਸਾਈਨ-ਇਨ ਕਰੋ।</translation>
 <translation id="6033715878377252112">'Windows ਲਈ Google ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਪ੍ਰਦਾਨਕ' ਸੰਬੰਧੀ ਸਹਾਇਕ</translation>
 <translation id="6149399665202317746">Windows ਲਈ Google ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਪ੍ਰਦਾਨਕ</translation>
 <translation id="6243062314475217481">ਤੁਹਾਡਾ ਕਾਰਜ ਖਾਤਾ ਪਾਸਵਰਡ Windows ਲਈ ਪਾਸਵਰਡ ਸੰਬੰਧੀ ਜਟਿਲਤਾ ਦੀਆਂ ਲੋੜਾਂ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ ਹੈ। ਮਦਦ ਲਈ ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb
index 66c755bf6..ff228d7 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Не удалось синхронизировать пароль от рабочего аккаунта с профилем Windows, так как ваша организация запретила обновлять пароли на этом устройстве. Обратитесь к администратору за дополнительной информацией.</translation>
 <translation id="5186761973554910131">При попытке изменить пароль было указано неверное название компьютера. Обратитесь к администратору.</translation>
 <translation id="5265714013989877288">Не удалось сменить пароль для Windows. Обратитесь к администратору.</translation>
+<translation id="5581861273642234526">С этим устройством уже связан другой рабочий аккаунт. Войдите с аккаунтом Windows.</translation>
 <translation id="6033715878377252112">Мастер поставщика учетных данных Google для Windows</translation>
 <translation id="6149399665202317746">Поставщик учетных данных Google для Windows</translation>
 <translation id="6243062314475217481">Пароль рабочего аккаунта не соответствует требованиям Windows. Обратитесь к администратору за дополнительной информацией.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_sl.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_sl.xtb
index 5d5d1f5..81bd7c9 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_sl.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_sl.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Gesla za službeni račun ni bilo mogoče sinhronizirati s profilom za Windows, ker posodobitve gesel v napravi omejuje organizacija. Za pomoč se obrnite na skrbnika.</translation>
 <translation id="5186761973554910131">Med poskusom spremembe gesla je bilo navedeno neveljavno ime računalnika. Obrnite se na skrbnika.</translation>
 <translation id="5265714013989877288">Pri spreminjanju gesla za Windows je prišlo do napake, zato ni mogoče nadaljevati. Obrnite se na skrbnika.</translation>
+<translation id="5581861273642234526">S to napravo je že povezan drug službeni račun. Prijavite se z računom za Windows.</translation>
 <translation id="6033715878377252112">Pomočnik za Googlov ponudnik poverilnic za Windows</translation>
 <translation id="6149399665202317746">Googlov ponudnik poverilnic za Windows</translation>
 <translation id="6243062314475217481">Geslo za službeni račun ne izpolnjuje zahtev glede zapletenosti gesla za Windows. Za pomoč se obrnite na skrbnika.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_sq.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_sq.xtb
index 2c7484965..4439a43 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_sq.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_sq.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Fjalëkalimi i llogarisë sate të punës nuk mund të sinkronizohej me profilin tënd të Windows sepse përditësimet e fjalëkalimit në pajisjen tënde janë të kufizuara nga organizata jote. Kontakto me administratorin tënd për ndihmë.</translation>
 <translation id="5186761973554910131">Një emër i pavlefshëm kompjuteri është dhënë gjatë përpjekjes për ndryshimin e fjalëkalimit. Kontakto me administratorin tënd.</translation>
 <translation id="5265714013989877288">Nuk mund të vazhdojë sepse ndodhi një gabim gjatë ndryshimit të fjalëkalimit tënd të Windows. Kontakto me administratorin tënd.</translation>
+<translation id="5581861273642234526">Një llogari tjetër pune është e lidhur tashmë me këtë pajisje. Identifikohu me llogarinë tënde të Windows.</translation>
 <translation id="6033715878377252112">Ndihmësi i "Ofruesit të kredencialeve të Google" për Windows</translation>
 <translation id="6149399665202317746">"Ofruesi i kredencialeve të Google" për Windows</translation>
 <translation id="6243062314475217481">Fjalëkalimi i llogarisë sate të punës nuk përputhet me kërkesat e kompleksitetit për Windows. Kontakto me administratorin tënd për ndihmë.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_sv.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_sv.xtb
index 0856c5e..6e38c9b7 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_sv.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_sv.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">Det gick inte att synkronisera lösenordet för jobbkontot till Windows-profilen eftersom lösenordsuppdateringar på enheten är begränsade till organisationen. Kontakta administratören om du behöver hjälp.</translation>
 <translation id="5186761973554910131">Ogiltigt datornamn angavs under försöket att byta lösenord. Kontakta administratören.</translation>
 <translation id="5265714013989877288">Det gick inte att fortsätta eftersom ett fel uppstod medan lösenordet för Windows ändrades. Kontakta administratören.</translation>
+<translation id="5581861273642234526">Ett annat jobbkonto har redan kopplats till den här enheten. Logga in med ditt Windows-konto.</translation>
 <translation id="6033715878377252112">Hjälpprogram för Googles autentiseringsprovider för Windows</translation>
 <translation id="6149399665202317746">Googles autentiseringsprovider för Windows</translation>
 <translation id="6243062314475217481">Lösenordet för jobbkontot uppfyller inte komplexitetskraven för Windows. Kontakta administratören om du behöver hjälp.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb
index 0ba4900..22ca988 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">మీ పరికరంలో పాస్‌వర్డ్ అప్‌డేట్‌లను మీ సంస్థ నిలిపివేసినందున మీ కార్యాలయ ఖాతాను మీ Windows ప్రొఫైల్‌తో సింక్ చేయడం సాధ్యపడలేదు. సహాయం కోసం మీ అడ్మినిస్ట్రేటర్‌ను కాంటాక్ట్ చేయండి.</translation>
 <translation id="5186761973554910131">పాస్‌వర్డ్‌ను మార్చే ప్రయత్నంలో చెల్లని కంప్యూటర్ పేరును అందించారు . దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి.</translation>
 <translation id="5265714013989877288">మీ Windows పాస్‌వర్డ్‌ను మారుస్తున్నప్పుడు ఎర్రర్ ఏర్పడినందున కొనసాగించడం సాధ్యపడదు. దయచేసి మీ అడ్మినిస్ట్రేటర్‌ను సంప్రదించండి.</translation>
+<translation id="5581861273642234526">మరొక కార్యాలయ ఖాతా ఇప్పటికే ఈ పరికరంతో అనుబంధించబడింది. మీ Windows ఖాతాతో సైన్ ఇన్ చేయండి.</translation>
 <translation id="6033715878377252112">Windows సహాయకం కోసం Google ఆధారాల ప్రదాత</translation>
 <translation id="6149399665202317746">Windows కోసం Google ఆధారాల ప్రదాత</translation>
 <translation id="6243062314475217481">మీ కార్యాలయ ఖాతా పాస్‌వర్డ్ Windowsలోని సంక్లిష్ట నియమాలకు తగినట్లుగా లేదు. సహాయం కోసం మీ అడ్మినిస్ట్రేటర్‌ను కాంటాక్ట్ చేయండి.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb
index 3d1b0ad..098be295 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">ซิงค์รหัสผ่านบัญชีงานของคุณกับโปรไฟล์ Windows ไม่ได้เนื่องจากองค์กรของคุณจำกัดการอัปเดตรหัสผ่านในอุปกรณ์ โปรดติดต่อผู้ดูแลระบบเพื่อขอรับความช่วยเหลือ</translation>
 <translation id="5186761973554910131">ระบุชื่อคอมพิวเตอร์ไม่ถูกต้องขณะพยายามเปลี่ยนรหัสผ่าน โปรดติดต่อผู้ดูแลระบบ</translation>
 <translation id="5265714013989877288">ดำเนินการต่อไม่ได้เนื่องจากเกิดข้อผิดพลาดขณะเปลี่ยนรหัสผ่าน Windows ของคุณ โปรดติดต่อผู้ดูแลระบบ</translation>
+<translation id="5581861273642234526">มีบัญชีงานอื่นที่เชื่อมโยงกับอุปกรณ์นี้แล้ว โปรดลงชื่อเข้าใช้ด้วยบัญชี Windows</translation>
 <translation id="6033715878377252112">ตัวช่วยเหลือโปรแกรมการเข้าสู่ระบบโดยใช้บัญชี Google สำหรับ Windows</translation>
 <translation id="6149399665202317746">โปรแกรมการเข้าสู่ระบบโดยใช้บัญชี Google สำหรับ Windows</translation>
 <translation id="6243062314475217481">รหัสผ่านบัญชีงานไม่ตรงตามข้อกำหนดด้านความซับซ้อนของ Windows โปรดติดต่อผู้ดูแลระบบเพื่อขอรับความช่วยเหลือ</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-CN.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-CN.xtb
index e635c78..90d57f1b 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-CN.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-CN.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">无法将您的工作帐号密码同步到您的 Windows 个人资料,因为贵组织不允许用户更新设备上的密码。请联系您的管理员以获得帮助。</translation>
 <translation id="5186761973554910131">您在尝试更改密码期间提供的计算机名称无效。请与管理员联系。</translation>
 <translation id="5265714013989877288">无法继续,因为更改您的 Windows 密码时出错。请联系您的管理员。</translation>
+<translation id="5581861273642234526">另一个工作帐号已与此设备相关联。请使用您的 Windows 帐号登录。</translation>
 <translation id="6033715878377252112">Windows 版 Google 凭据提供程序助手</translation>
 <translation id="6149399665202317746">Windows 版 Google 凭据提供程序</translation>
 <translation id="6243062314475217481">您的工作帐号密码不符合 Windows 的密码复杂度要求。请联系您的管理员以获得帮助。</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-TW.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-TW.xtb
index 930cb6ad..7fbd960 100644
--- a/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-TW.xtb
+++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-TW.xtb
@@ -18,6 +18,7 @@
 <translation id="4744575902940448763">由於貴機構禁止更新裝置上的密碼,因此系統無法將你的公司帳戶密碼同步到你的 Windows 設定檔。如需協助,請與系統管理員聯絡。</translation>
 <translation id="5186761973554910131">嘗試變更密碼時提供的電腦名稱無效。請與你的系統管理員聯絡。</translation>
 <translation id="5265714013989877288">變更你的 Windows 密碼時發生錯誤,因此無法繼續。請與系統管理員聯絡。</translation>
+<translation id="5581861273642234526">其他公司帳戶已與這部裝置建立關聯。請使用你的 Windows 帳戶登入。</translation>
 <translation id="6033715878377252112">Google 憑證提供者 Windows 版輔助程式</translation>
 <translation id="6149399665202317746">Google 憑證提供者 Windows 版</translation>
 <translation id="6243062314475217481">你的公司帳戶密碼不符合 Windows 的密碼複雜度要求。如需協助,請與系統管理員聯絡。</translation>
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_search_box_test.js b/chrome/test/data/webui/settings/chromeos/os_settings_search_box_test.js
index e506822..bf95ebfd 100644
--- a/chrome/test/data/webui/settings/chromeos/os_settings_search_box_test.js
+++ b/chrome/test/data/webui/settings/chromeos/os_settings_search_box_test.js
@@ -26,6 +26,9 @@
   /** @type {?chromeos.settings.mojom.UserActionRecorderInterface} */
   let userActionRecorder;
 
+  /** @type {?HTMLElement} */
+  let noResultsSection;
+
   /** @param {string} term */
   async function simulateSearch(term) {
     field.$.searchInput.value = term;
@@ -68,6 +71,8 @@
     assertTrue(!!dropDown);
     resultList = searchBox.$$('iron-list');
     assertTrue(!!resultList);
+    noResultsSection = searchBox.$$('#noSearchResultsContainer');
+    assertTrue(!!noResultsSection);
 
     settingsSearchHandler = new settings.FakeSettingsSearchHandler();
     settings.setSearchHandlerForTesting(settingsSearchHandler);
@@ -93,17 +98,21 @@
   });
 
   test('Dropdown opens correctly when results are fetched', async () => {
-    // Closed dropdown if no results are returned.
+    // Show no results in dropdown if no results are returned.
     settingsSearchHandler.setFakeResults([]);
     assertFalse(dropDown.opened);
     await simulateSearch('query 1');
-    assertFalse(dropDown.opened);
+    assertTrue(dropDown.opened);
+    assertEquals(searchBox.searchResults_.length, 0);
+    assertFalse(noResultsSection.hidden);
+
     assertEquals(userActionRecorder.searchCount, 1);
 
-    // Open dropdown if results are returned.
+    // Show result list if results are returned, and hide no results div.
     settingsSearchHandler.setFakeResults([fakeResult('result')]);
     await simulateSearch('query 2');
-    assertTrue(dropDown.opened);
+    assertNotEquals(searchBox.searchResults_.length, 0);
+    assertTrue(noResultsSection.hidden);
   });
 
   test('Restore previous existing search results', async () => {
diff --git a/chrome/test/data/webui/settings/safety_check_page_test.js b/chrome/test/data/webui/settings/safety_check_page_test.js
index 7a119f46..38c1eb5e 100644
--- a/chrome/test/data/webui/settings/safety_check_page_test.js
+++ b/chrome/test/data/webui/settings/safety_check_page_test.js
@@ -273,7 +273,7 @@
     assertFalse(!!page.$$('#safetyCheckSafeBrowsingManagedIcon'));
   });
 
-  test('safeBrowsingCheckingUiTest', function() {
+  test('safeBrowsingEnabledUiTest', function() {
     fireSafetyCheckSafeBrowsingEvent(
         settings.SafetyCheckSafeBrowsingStatus.ENABLED);
     Polymer.dom.flush();
@@ -281,7 +281,7 @@
     assertFalse(!!page.$$('#safetyCheckSafeBrowsingManagedIcon'));
   });
 
-  test('safeBrowsingCheckingUiTest', async function() {
+  test('safeBrowsingDisabledUiTest', async function() {
     fireSafetyCheckSafeBrowsingEvent(
         settings.SafetyCheckSafeBrowsingStatus.DISABLED);
     Polymer.dom.flush();
@@ -304,7 +304,7 @@
         settings.Router.getInstance().getCurrentRoute());
   });
 
-  test('safeBrowsingCheckingUiTest', function() {
+  test('safeBrowsingDisabledByAdminUiTest', function() {
     fireSafetyCheckSafeBrowsingEvent(
         settings.SafetyCheckSafeBrowsingStatus.DISABLED_BY_ADMIN);
     Polymer.dom.flush();
@@ -312,7 +312,7 @@
     assertTrue(!!page.$$('#safetyCheckSafeBrowsingManagedIcon'));
   });
 
-  test('safeBrowsingCheckingUiTest', function() {
+  test('safeBrowsingDisabledByExtensionUiTest', function() {
     fireSafetyCheckSafeBrowsingEvent(
         settings.SafetyCheckSafeBrowsingStatus.DISABLED_BY_EXTENSION);
     Polymer.dom.flush();
@@ -335,21 +335,6 @@
     assertFalse(!!page.$$('#safetyCheckExtensionsManagedIcon'));
   });
 
-  test('extensionsCheckingUiTest', function() {
-    fireSafetyCheckExtensionsEvent(
-        settings.SafetyCheckExtensionsStatus.CHECKING);
-    Polymer.dom.flush();
-    assertFalse(!!page.$$('#safetyCheckExtensionsButton'));
-    assertFalse(!!page.$$('#safetyCheckExtensionsManagedIcon'));
-  });
-
-  test('extensionsErrorUiTest', function() {
-    fireSafetyCheckExtensionsEvent(settings.SafetyCheckExtensionsStatus.ERROR);
-    Polymer.dom.flush();
-    assertFalse(!!page.$$('#safetyCheckExtensionsButton'));
-    assertFalse(!!page.$$('#safetyCheckExtensionsManagedIcon'));
-  });
-
   test('extensionsSafeUiTest', function() {
     fireSafetyCheckExtensionsEvent(
         settings.SafetyCheckExtensionsStatus.NO_BLOCKLISTED_EXTENSIONS);
diff --git a/chrome/updater/constants.cc b/chrome/updater/constants.cc
index 46fd725f..6e760e8 100644
--- a/chrome/updater/constants.cc
+++ b/chrome/updater/constants.cc
@@ -27,6 +27,10 @@
 const char kSingleProcessSwitch[] = "single-process";
 const char kAppIdSwitch[] = "appid";
 
+#if defined(OS_WIN)
+const char kInstallFromOutDir[] = "install-from-out-dir";
+#endif  // OS_WIN
+
 // URLs.
 const char kUpdaterJSONDefaultUrl[] =
     "https://update.googleapis.com/service/update2/json";
diff --git a/chrome/updater/constants.h b/chrome/updater/constants.h
index 98a4ed9..1ec96ca4 100644
--- a/chrome/updater/constants.h
+++ b/chrome/updater/constants.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_UPDATER_CONSTANTS_H_
 #define CHROME_UPDATER_CONSTANTS_H_
 
+#include "build/build_config.h"
 #include "components/update_client/update_client_errors.h"
 
 namespace updater {
@@ -55,6 +56,14 @@
 // Installs the updater.
 extern const char kInstallSwitch[];
 
+#if defined(OS_WIN)
+// A debug switch to indicate that --install is running from the `out` directory
+// of the build. When this switch is present, the setup picks up the run time
+// dependencies of the updater from the `out` directory instead of using the
+// metainstaller uncompressed archive.
+extern const char kInstallFromOutDir[];
+#endif  // OS_WIN
+
 // Uninstalls the updater.
 extern const char kUninstallSwitch[];
 
diff --git a/chrome/updater/tag.cc b/chrome/updater/tag.cc
index ed38e51..a0f0e4ca 100644
--- a/chrome/updater/tag.cc
+++ b/chrome/updater/tag.cc
@@ -4,6 +4,9 @@
 
 #include "chrome/updater/tag.h"
 
+#include <map>
+#include <utility>
+
 #include "base/no_destructor.h"
 #include "base/optional.h"
 #include "base/strings/string_number_conversions.h"
@@ -11,6 +14,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "chrome/updater/lib_util.h"
+#include "chrome/updater/util.h"
 
 namespace updater {
 namespace tagging {
@@ -104,15 +108,8 @@
   return base::nullopt;
 }
 
-// Functor for case-insensitive ASCII comparisons with StringPiece for std::map.
-//
-// See base::CaseInsensitiveCompareASCII for usage with unicode.
-struct CaseInsensitiveCompareASCII {
- public:
-  bool operator()(base::StringPiece x, base::StringPiece y) const {
-    return CompareCaseInsensitiveASCII(x, y) > 0;
-  }
-};
+// A custom comparator functor class for the parse tables.
+using ParseTableCompare = CaseInsensitiveASCIICompare<std::string>;
 
 namespace global_attributes {
 
@@ -217,9 +214,8 @@
 using ParseGlobalAttributeFunPtr = ErrorCode (*)(base::StringPiece value,
                                                  TagArgs* args);
 
-using GlobalParseTable = std::map<base::StringPiece,
-                                  ParseGlobalAttributeFunPtr,
-                                  CaseInsensitiveCompareASCII>;
+using GlobalParseTable =
+    std::map<base::StringPiece, ParseGlobalAttributeFunPtr, ParseTableCompare>;
 
 const GlobalParseTable& GetTable() {
   static const base::NoDestructor<GlobalParseTable> instance{{
@@ -289,9 +285,8 @@
 using ParseAppAttributeFunPtr = ErrorCode (*)(base::StringPiece value,
                                               AppArgs* args);
 
-using AppParseTable = std::map<base::StringPiece,
-                               ParseAppAttributeFunPtr,
-                               CaseInsensitiveCompareASCII>;
+using AppParseTable =
+    std::map<base::StringPiece, ParseAppAttributeFunPtr, ParseTableCompare>;
 
 const AppParseTable& GetTable() {
   static const base::NoDestructor<AppParseTable> instance{{
@@ -355,7 +350,7 @@
 
 using InstallerDataParseTable = std::map<base::StringPiece,
                                          ParseInstallerDataAttributeFunPtr,
-                                         CaseInsensitiveCompareASCII>;
+                                         ParseTableCompare>;
 
 const InstallerDataParseTable& GetTable() {
   static const base::NoDestructor<InstallerDataParseTable> instance{{
diff --git a/chrome/updater/test/data/updater.runtime_deps b/chrome/updater/test/data/updater.runtime_deps
new file mode 100644
index 0000000..cb87bd5
--- /dev/null
+++ b/chrome/updater/test/data/updater.runtime_deps
@@ -0,0 +1,8 @@
+./updater.exe
+./updater.exe.pdb
+./base.dll
+./base.dll.pdb
+msvcp140d.dll
+gen/mojo/public/interfaces/bindings/interface_control_messages.mojom.js
+icudtl.dat
+gen/chrome/updater/win/uninstall.cmd
diff --git a/chrome/updater/updater.cc b/chrome/updater/updater.cc
index eb85c6f1..3442627 100644
--- a/chrome/updater/updater.cc
+++ b/chrome/updater/updater.cc
@@ -40,6 +40,9 @@
 // directory of the build.
 // - To debug, append the following arguments to any updater command line:
 //    --enable-logging --vmodule=*/chrome/updater/*=2.
+// - To run the `updater --install` from the `out` directory of the build,
+//   use --install-from-out-dir command line switch in addition to other
+//   arguments for --install.
 
 namespace updater {
 
diff --git a/chrome/updater/util.h b/chrome/updater/util.h
index 3a77c7d..16427e1 100644
--- a/chrome/updater/util.h
+++ b/chrome/updater/util.h
@@ -6,6 +6,8 @@
 #define CHROME_UPDATER_UTIL_H_
 
 #include "base/files/file_path.h"
+#include "base/strings/string_piece.h"
+#include "base/strings/string_util.h"
 
 namespace updater {
 
@@ -15,6 +17,17 @@
 // Initializes logging for an executable.
 void InitLogging(const base::FilePath::StringType& filename);
 
+// Functor used by associative containers of strings as a case-insensitive ASCII
+// compare. |T| could be std::string or base::string16.
+template <typename T>
+struct CaseInsensitiveASCIICompare {
+ public:
+  bool operator()(base::BasicStringPiece<T> x,
+                  base::BasicStringPiece<T> y) const {
+    return base::CompareCaseInsensitiveASCII(x, y) > 0;
+  }
+};
+
 }  // namespace updater
 
 #endif  // CHROME_UPDATER_UTIL_H_
diff --git a/chrome/updater/win/BUILD.gn b/chrome/updater/win/BUILD.gn
index d99d03f..ee66bf8 100644
--- a/chrome/updater/win/BUILD.gn
+++ b/chrome/updater/win/BUILD.gn
@@ -29,6 +29,8 @@
     "//chrome/updater:lib",
     "//chrome/updater/win/ui:ui_resources",
   ]
+
+  data_deps = [ ":uninstall.cmd" ]
 }
 
 copy("uninstall.cmd") {
@@ -184,6 +186,7 @@
 
   sources = [
     "//chrome/updater/win/test/test_main.cc",
+    "setup/setup_util_unittest.cc",
     "task_scheduler_unittest.cc",
   ]
 
@@ -198,4 +201,6 @@
     "//chrome/updater/win/test:test_strings",
     "//testing/gtest",
   ]
+
+  data = [ "//chrome/updater/test/data/updater.runtime_deps" ]
 }
diff --git a/chrome/updater/win/installer/BUILD.gn b/chrome/updater/win/installer/BUILD.gn
index 6790235..85d4eb0 100644
--- a/chrome/updater/win/installer/BUILD.gn
+++ b/chrome/updater/win/installer/BUILD.gn
@@ -38,7 +38,7 @@
 # This target creats a list of runtime dependencies for the component
 # builds. This list is parsed by the |create_installer_archive| script, the
 # DLL paths extracted out from the list, and included in the archive.
-updater_runtime_deps = "$root_gen_dir/updater.runtime_deps"
+updater_runtime_deps = "$target_gen_dir/updater.runtime_deps"
 group("updater_runtime_deps") {
   write_runtime_deps = updater_runtime_deps
   data_deps = [ "//chrome/updater/win:updater" ]
@@ -83,7 +83,6 @@
 
     deps = [
       ":updater_runtime_deps",
-      "//chrome/updater/win:uninstall.cmd",
       "//chrome/updater/win:updater",
       "//third_party/icu:icudata",
     ]
diff --git a/chrome/updater/win/setup/setup.cc b/chrome/updater/win/setup/setup.cc
index eda6bcc..b4829e89 100644
--- a/chrome/updater/win/setup/setup.cc
+++ b/chrome/updater/win/setup/setup.cc
@@ -7,11 +7,13 @@
 #include <shlobj.h>
 
 #include <memory>
+#include <string>
 #include <vector>
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
@@ -34,30 +36,8 @@
 #include "chrome/updater/win/util.h"
 
 namespace updater {
-
 namespace {
 
-const base::char16* kUpdaterFiles[] = {
-    L"icudtl.dat",
-    L"updater.exe",
-    L"uninstall.cmd",
-#if defined(COMPONENT_BUILD)
-    // TODO(sorin): get the list of component dependencies from a build-time
-    // file instead of hardcoding the names of the components here.
-    L"base.dll",
-    L"base_i18n.dll",
-    L"boringssl.dll",
-    L"crcrypto.dll",
-    L"icui18n.dll",
-    L"icuuc.dll",
-    L"libc++.dll",
-    L"prefs.dll",
-    L"protobuf_lite.dll",
-    L"url_lib.dll",
-    L"zlib.dll",
-#endif
-};
-
 // Adds work items to register the COM Server with Windows.
 void AddComServerWorkItems(HKEY root,
                            const base::FilePath& com_server_path,
@@ -183,8 +163,38 @@
   }
 }
 
+// Returns a list of base file names which the setup copies to the install
+// directory. The source of these files is either the unpacked metainstaller
+// archive, or the `out` directory of the build, if a command line argument is
+// present. In the former case, which is the normal execution flow, the files
+// are enumerated from the directory where the metainstaller unpacked its
+// contents. In the latter case, the file containing the run time dependencies
+// of the updater (which is generated by GN at build time) is parsed, and the
+// relevant file names are extracted.
+std::vector<base::FilePath> GetSetupFiles(const base::FilePath& source_dir) {
+  const auto* command_line = base::CommandLine::ForCurrentProcess();
+  if (command_line->HasSwitch(kInstallFromOutDir)) {
+    return ParseFilesFromDeps(source_dir.Append(FILE_PATH_LITERAL(
+        "gen\\chrome\\updater\\win\\installer\\updater.runtime_deps")));
+  }
+  std::vector<base::FilePath> result;
+  base::FileEnumerator it(
+      source_dir, false, base::FileEnumerator::FileType::FILES,
+      FILE_PATH_LITERAL("*"), base::FileEnumerator::FolderSearchPolicy::ALL,
+      base::FileEnumerator::ErrorPolicy::STOP_ENUMERATION);
+  for (base::FilePath file = it.Next(); !file.empty(); file = it.Next()) {
+    result.push_back(file.BaseName());
+  }
+  if (it.GetError() != base::File::Error::FILE_OK) {
+    VLOG(2) << __func__ << " could not enumerate files : " << it.GetError();
+    return {};
+  }
+  return result;
+}
+
 }  // namespace
 
+// TODO(crbug.com/1069976): use specific return values for different code paths.
 int Setup(bool is_machine) {
   VLOG(1) << __func__ << ", is_machine: " << is_machine;
   DCHECK(!is_machine || ::IsUserAnAdmin());
@@ -216,11 +226,18 @@
     return -1;
   }
 
-  const base::FilePath source_dir = exe_path.DirName();
+  const auto source_dir = exe_path.DirName();
+  const auto setup_files = GetSetupFiles(source_dir);
+  if (setup_files.empty()) {
+    LOG(ERROR) << "No files to set up.";
+    return -1;
+  }
 
+  // All source files are installed in a flat directory structure inside the
+  // install directory, hence the BaseName function call below.
   std::unique_ptr<WorkItemList> install_list(WorkItem::CreateWorkItemList());
-  for (const auto* file : kUpdaterFiles) {
-    const base::FilePath target_path = product_dir.Append(file);
+  for (const auto& file : setup_files) {
+    const base::FilePath target_path = product_dir.Append(file.BaseName());
     const base::FilePath source_path = source_dir.Append(file);
     install_list->AddCopyTreeWorkItem(source_path.value(), target_path.value(),
                                       temp_dir.value(), WorkItem::ALWAYS);
diff --git a/chrome/updater/win/setup/setup_util.cc b/chrome/updater/win/setup/setup_util.cc
index e39a5da..fd8569fc 100644
--- a/chrome/updater/win/setup/setup_util.cc
+++ b/chrome/updater/win/setup/setup_util.cc
@@ -4,14 +4,22 @@
 
 #include "chrome/updater/win/setup/setup_util.h"
 
+#include <string>
+
 #include "base/command_line.h"
+#include "base/containers/flat_set.h"
 #include "base/files/file_path.h"
+#include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/stl_util.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string16.h"
+#include "base/strings/string_split.h"
+#include "base/strings/utf_string_conversions.h"
 #include "base/win/win_util.h"
-#include "chrome/updater/win/task_scheduler.h"
 #include "chrome/updater/server/win/updater_idl.h"
+#include "chrome/updater/util.h"
+#include "chrome/updater/win/task_scheduler.h"
 
 namespace updater {
 
@@ -66,4 +74,26 @@
       {L"Software\\Classes\\TypeLib\\", base::win::String16FromGUID(iid)});
 }
 
+std::vector<base::FilePath> ParseFilesFromDeps(const base::FilePath& deps) {
+  constexpr size_t kDepsFileSizeMax = 0x2000;  // 8KB.
+  std::string contents;
+  if (!base::ReadFileToStringWithMaxSize(deps, &contents, kDepsFileSizeMax))
+    return {};
+  const base::flat_set<const base::char16*,
+                       CaseInsensitiveASCIICompare<base::string16>>
+      exclude_extensions = {L".pdb", L".js"};
+  std::vector<base::FilePath> result;
+  for (const auto& line :
+       base::SplitString(contents, "\r\n", base::TRIM_WHITESPACE,
+                         base::SPLIT_WANT_NONEMPTY)) {
+    const auto filename =
+        base::FilePath(base::ASCIIToUTF16(line)).NormalizePathSeparators();
+    if (!base::Contains(exclude_extensions,
+                        filename.FinalExtension().c_str())) {
+      result.push_back(filename);
+    }
+  }
+  return result;
+}
+
 }  // namespace updater
diff --git a/chrome/updater/win/setup/setup_util.h b/chrome/updater/win/setup/setup_util.h
index 6380e3dd..04d9300 100644
--- a/chrome/updater/win/setup/setup_util.h
+++ b/chrome/updater/win/setup/setup_util.h
@@ -7,13 +7,16 @@
 
 #include <guiddef.h>
 
-namespace base {
-class CommandLine;
-}  // namespace base
+#include <vector>
 
 #include "base/strings/string16.h"
 #include "base/win/windows_types.h"
 
+namespace base {
+class CommandLine;
+class FilePath;
+}  // namespace base
+
 namespace updater {
 
 bool RegisterUpdateAppsTask(const base::CommandLine& run_command);
@@ -26,6 +29,12 @@
 base::string16 GetComIidRegistryPath(REFIID iid);
 base::string16 GetComTypeLibRegistryPath(REFIID iid);
 
+// Parses the run time dependency file which contains all dependencies of
+// the `updater` target. This file is a text file, where each line of
+// text represents a single dependency. Some dependencies are not needed for
+// updater to run, and are filtered out from the return value of this function.
+std::vector<base::FilePath> ParseFilesFromDeps(const base::FilePath& deps);
+
 }  // namespace updater
 
 #endif  // CHROME_UPDATER_WIN_SETUP_SETUP_UTIL_H_
diff --git a/chrome/updater/win/setup/setup_util_unittest.cc b/chrome/updater/win/setup/setup_util_unittest.cc
new file mode 100644
index 0000000..0f60c71
--- /dev/null
+++ b/chrome/updater/win/setup/setup_util_unittest.cc
@@ -0,0 +1,31 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/updater/win/setup/setup_util.h"
+#include "base/base_paths.h"
+#include "base/files/file_path.h"
+#include "base/path_service.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace updater {
+
+TEST(UpdaterSetupUtil, ParseFilesFromDeps) {
+  base::FilePath source_path;
+  ASSERT_TRUE(base::PathService::Get(base::DIR_SOURCE_ROOT, &source_path));
+  const base::FilePath deps = source_path.AppendASCII("chrome")
+                                  .AppendASCII("updater")
+                                  .AppendASCII("test")
+                                  .AppendASCII("data")
+                                  .AppendASCII("updater.runtime_deps");
+  const auto files = ParseFilesFromDeps(deps);
+  EXPECT_EQ(files.size(), 5u);
+  EXPECT_EQ(files[0], base::FilePath(FILE_PATH_LITERAL(".\\updater.exe")));
+  EXPECT_EQ(files[1], base::FilePath(FILE_PATH_LITERAL(".\\base.dll")));
+  EXPECT_EQ(files[2], base::FilePath(FILE_PATH_LITERAL("msvcp140d.dll")));
+  EXPECT_EQ(files[3], base::FilePath(FILE_PATH_LITERAL("icudtl.dat")));
+  EXPECT_EQ(files[4], base::FilePath(FILE_PATH_LITERAL(
+                          "gen\\chrome\\updater\\win\\uninstall.cmd")));
+}
+
+}  // namespace updater
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index 40f1e85..e3ab0fa 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-13018.0.0
\ No newline at end of file
+13036.0.0
\ No newline at end of file
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 396220d..775a14e 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -363,7 +363,6 @@
 <translation id="1523774894176285446">Für konfigurierte Websites soll ein alternativer Browser geöffnet werden.</translation>
 <translation id="152657506688053119">Liste alternativer URLs für den Standardsuchanbieter</translation>
 <translation id="1530812829012954197">Immer die folgenden URL-Muster im Host-Browser darstellen</translation>
-<translation id="1541170838458414064">Druckseitengröße einschränken</translation>
 <translation id="1553532014072799546">Weiße Liste für App-Zeitbeschränkungen</translation>
 <translation id="1553684822621013552">Wenn diese Richtlinie auf "true" gesetzt ist, wird ARC für den Nutzer aktiviert.
       Dies unterliegt jedoch zusätzlichen Überprüfungen der Richtlinieneinstellungen
@@ -850,17 +849,6 @@
 Diese Richtlinie gilt auch für Komponentenerweiterungen, zum Beispiel die Hangouts-Erweiterung.</translation>
 <translation id="2223598546285729819">Standardeinstellung für Benachrichtigungen</translation>
 <translation id="2231817271680715693">Browserverlauf bei erster Ausführung aus Standardbrowser importieren</translation>
-<translation id="2234855698900783408">Erlaubt die Einschränkung von <ph name="CORS" />-Prüfungen in der neuen <ph name="CORS" />-Implementierung, wodurch Erweiterungen kompatibles Verhalten beibehalten können und <ph name="PRODUCT_NAME" /> angegebene Header ohne <ph name="CORS" />-Prüfungen senden kann.
-
-      Wird diese Liste leergelassen, versucht <ph name="PRODUCT_NAME" />, Erweiterungen auf kompatible Weise auszuführen und setzt keine <ph name="API" />-Änderungen für Version 79 von <ph name="PRODUCT_NAME" /> um, wie unter <ph name="WEB_REQUEST_API_MANUAL" /> erläutert.
-
-      Wenn diese Liste die <ph name="HTTP" />-Headernamen von Anfragen enthält, werden diese bei der <ph name="CORS" />-Prüfung ignoriert und die Einschränkung von Prüfungen für Erweiterungen aktiviert.
-
-      Ist die Liste nicht konfiguriert, wird keine der beiden zuvor beschriebenen Einschränkungen angewendet.
-
-      Details zu <ph name="CORS" /> erhalten Sie unter <ph name="CORS_HELP_URL" />.
-
-      Diese Richtlinie wird in Version 82 von <ph name="PRODUCT_NAME" /> entfernt.</translation>
 <translation id="2236488539271255289">Speichern von lokalen Daten für keine Website zulassen</translation>
 <translation id="2240879329269430151">Ermöglicht Ihnen zu bestimmen, ob Websites Pop-ups anzeigen dürfen. Das Anzeigen von Pop-ups kann entweder allen Websites gestattet oder für alle unterbunden werden. Wenn diese Richtlinie nicht konfiguriert ist, so kommt "BlockPopups" zum Einsatz, wobei der Nutzer dies ändern kann.</translation>
 <translation id="2241498944622759244">Diese Funktion wurde nie eingeführt und die Richtlinie deshalb eingestellt. Wenn sie auf "true" festgelegt oder nicht konfiguriert wird, schlägt <ph name="PRODUCT_NAME" /> Seiten vor, die der aktuellen Seite ähnlich sind.
@@ -3658,17 +3646,6 @@
 <translation id="6467613372414922590">Hosts für natives Messaging, die ohne Berechtigung des Administrators installiert wurden, auf Nutzerebene zulassen</translation>
 <translation id="6468980648680553776">Diese Richtlinie wurde eingestellt. Verwenden Sie stattdessen "RemoteAccessHostClientDomainList".</translation>
 <translation id="6473623140202114570">Hiermit wird die Liste der Domains konfiguriert, auf denen durch Safe Browsing keine Warnungen ausgelöst werden.</translation>
-<translation id="6487780893361255867">Hiermit kann die alte <ph name="CORS" />-Implementierung statt des neuen <ph name="CORS" /> verwendet werden.
-
-      Wenn diese Einstellung auf "true" festgelegt ist, wird die alte Implementierung verwendet, die kompatibel mit vorherigen Versionen sein sollte.
-
-      Wird die Richtlinie auf "false" gesetzt oder nicht konfiguriert, kommt die neue Implementierung zum Einsatz, die bei Chrome Enterprise-Nutzern zu Kompatibilitätsproblemen führen kann.
-
-      Die Richtlinie wird nach einigen Meilensteinen entfernt.
-
-      Details zu <ph name="CORS" /> erhalten Sie unter <ph name="CORS_HELP_URL" />.
-
-      Diese Richtlinie wird in Version 82 von <ph name="PRODUCT_NAME" /> entfernt.</translation>
 <translation id="6488627892044759800">Konfiguriert den Typ der Standard-Startseite in <ph name="PRODUCT_NAME" /> und verhindert, dass Nutzer die Startseiteneinstellungen ändern. Als Startseite kann entweder eine URL oder die "Neuer Tab"-Seite festgelegt werden.
 
           Wenn diese Einstellung aktiviert ist, wird immer die Seite "Neuer Tab" als Startseite verwendet. Die Startseiten-URL wird in diesem Fall ignoriert.
@@ -4247,7 +4224,6 @@
       </translation>
 <translation id="7372831798009983116">Bedienungshilfe "Automatisch klicken" aktivieren</translation>
 <translation id="7373200034079131670">Nach Nutzerabmeldung neu starten, wenn Android oder eine VM gestartet wurde.</translation>
-<translation id="737655323154569539">Dadurch wird die Druckseitengröße eingeschränkt. Ist die Richtlinie nicht konfiguriert, wird keine Einschränkung angewendet.</translation>
 <translation id="7382191643394429934">Drucken mit und ohne Hintergrundgrafiken zulassen</translation>
 <translation id="7389872682701720082">Wenn Sie diese Einstellung aktivieren, werden nicht veraltete Plug-ins immer ausgeführt.
 
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index ad440c37..15210ba 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -366,7 +366,6 @@
 <translation id="1523774894176285446">Navegador alternativo que se inicia para sitios web configurados</translation>
 <translation id="152657506688053119">Lista de las URL alternativas para el proveedor de búsqueda predeterminado</translation>
 <translation id="1530812829012954197">Siempre procesar los siguientes patrones de direcciones URL en el navegador del host</translation>
-<translation id="1541170838458414064">Restringir el tamaño de la página de impresión</translation>
 <translation id="1553532014072799546">Lista blanca de límites de tiempo por app</translation>
 <translation id="1553684822621013552">Cuando esta política se establece en true, ARC estará habilitado para el usuario
       (sujeto a verificaciones adicionales de configuraciones de políticas. ARC
@@ -393,6 +392,7 @@
 <translation id="1561424797596341174">Anulaciones de políticas en compilaciones de depuración del host de acceso remoto</translation>
 <translation id="1561967320164410511">U2F más extensiones para atestación individual</translation>
 <translation id="1583248206450240930">Utilizar <ph name="PRODUCT_FRAME_NAME" /> de manera predeterminada</translation>
+<translation id="1588240398285670601">Configuración del navegador</translation>
 <translation id="1599424828227887013">Habilitar el aislamiento de sitios para orígenes específicos en dispositivos Android</translation>
 <translation id="1608755754295374538">Las URL que recibirán acceso a dispositivos de captura de audio sin solicitarlo</translation>
 <translation id="1615221548356595305">Permitir la integración de conexiones HTTP/2 para estos hosts incluso cuando se usan certificados de cliente</translation>
@@ -839,17 +839,6 @@
       Esta política también se aplica en las extensiones de componentes, como la extensión de Servicios de Hangout.</translation>
 <translation id="2223598546285729819">Configuración de notificación predeterminada</translation>
 <translation id="2231817271680715693">Importar historial de navegación del navegador predeterminado en la primera ejecución</translation>
-<translation id="2234855698900783408">Habilita las mitigaciones de comprobación de <ph name="CORS" /> en la nueva implementación de <ph name="CORS" />, lo que permite que las extensiones mantengan su compatibilidad y que <ph name="PRODUCT_NAME" /> envíe encabezados específicos sin la necesidad de comprobaciones de <ph name="CORS" />.
-
-      Si se establece esta lista como vacía, <ph name="PRODUCT_NAME" /> intentará ejecutar las extensiones de forma compatible y no introducirá cambios de <ph name="API" /> para <ph name="PRODUCT_NAME" /> 79, como se explica en el <ph name="WEB_REQUEST_API_MANUAL" />.
-
-      Si se establece que en esta lista <ph name="HTTP" /> solicita nombres de encabezado, la inspección de <ph name="CORS" /> ignorará los encabezados enumerados y habilitará la mitigación para las extensiones.
-
-      Si no se establece, no se aplicarán las mitigaciones que explicaron anteriormente.
-
-      Para obtener más información sobre <ph name="CORS" />, visita la siguiente página web: <ph name="CORS_HELP_URL" />.
-
-      Ten en cuenta que se quitará esta política en la versión 82 de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2236488539271255289">No permitir que ningún sitio configure los datos locales.</translation>
 <translation id="2240879329269430151">Te permite configurar si los sitios web pueden mostrar ventanas emergentes. Las ventanas emergentes pueden permitirse para todos los sitios web o denegarse para todos los sitios web. Si esta política no se configura, se usará "BlockPopups" y el usuario podrá cambiarlo.</translation>
 <translation id="2241498944622759244">La política dejó de estar disponible porque esta función nunca se lanzó. Si la política se establece como verdadera o no se establece, <ph name="PRODUCT_NAME" /> sugerirá páginas relacionadas con la página actual.
@@ -1344,6 +1333,7 @@
 <translation id="2872961005593481000">Cerrar</translation>
 <translation id="2873651257716068683">Anula el tamaño predeterminado para la página de impresión. Si el tamaño de la página no está disponible, se ignorará esta política.</translation>
 <translation id="2874209944580848064">Nota para dispositivos <ph name="PRODUCT_OS_NAME" /> compatibles con apps de Android:</translation>
+<translation id="2874901846804525128">Impide que el usuario use apps de Android de fuentes no confiables.</translation>
 <translation id="2875192972412983412">Especifica el subconjunto de servidores de impresión que se consultará para las impresoras de servidor.
 
       Si se usa esta política, el usuario solo podrá acceder a las impresoras de servidor con ID que coincidan con los valores en esta política.
@@ -2947,6 +2937,7 @@
           Si está configurada en verdadero o si no está configurada, este usuario podrá crear y administrar usuarios supervisados.</translation>
 <translation id="5369937289900051171">Solo impresión a color</translation>
 <translation id="5370279767682621504">Habilitar la compatibilidad con HTTP/0.9 en puertos no predeterminados</translation>
+<translation id="5377606826822211923">Controlar la forma en que el usuario usa las apps de Android de fuentes no confiables</translation>
 <translation id="5378985487213287085">Te permite configurar si los sitios web pueden mostrar notificaciones de escritorio. Esto se puede permitir de manera predeterminada, se puede denegar de manera predeterminada o se le puede preguntar al usuario cada vez que un sitio web quiera mostrar notificaciones de escritorio. Si esta política no se configura, se usará "AskNotifications" y el usuario podrá cambiarlo.</translation>
 <translation id="5380329473151894945">Establece el estado predeterminado de la función de accesibilidad del cursor grande en la pantalla de acceso.
 
@@ -3663,17 +3654,6 @@
 <translation id="6467613372414922590">Permite el uso de hosts de mensajería nativa en el nivel de usuario (instalados sin permisos de administrador).</translation>
 <translation id="6468980648680553776">Esta política es obsoleta. Usa la política RemoteAccessHostClientDomainList en su lugar.</translation>
 <translation id="6473623140202114570">Configura la lista de dominios donde la Navegación segura no activa advertencias.</translation>
-<translation id="6487780893361255867">Utiliza la implementación heredada de <ph name="CORS" /> en lugar de la nueva implementación de <ph name="CORS" />.
-
-      Si se establece esta configuración como verdadera, se utilizará la implementación heredada, la cual debe ser compatible con las versiones anteriores.
-
-      Si se establece como falsa o no se establece, se utilizará la nueva implementación; es posible que esto genere problemas de compatibilidad específicos en empresas.
-
-      Después de algunos hitos, se quitará esta política.
-
-      Para obtener más información sobre <ph name="CORS" />, visita la siguiente página web: <ph name="CORS_HELP_URL" />.
-
-      Ten en cuenta que se quitará esta política en la versión 82 de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="6488627892044759800">Configura el tipo de la página principal predeterminada en <ph name="PRODUCT_NAME" /> y evita que los usuarios cambien las preferencias de la página principal. Puede establecerse la página principal para que sea una URL que especifiques o la página Nueva pestaña.
 
           Si habilitas esta configuración, se utilizará siempre la página Nueva pestaña para la página principal y se omitirá la URL de la página principal.
@@ -3752,6 +3732,7 @@
       Ten en cuenta que se puede anular esta política con las políticas EnabledPlugins y DisabledPluginsExceptions.
 
       Si no se configura esta política, el usuario podrá usar cualquier complemento instalado en el sistema, excepto aquellos que sean peligrosos, obsoletos o incompatibles por el código.</translation>
+<translation id="6571871508154591774">Inhabilitar la cámara y la configuración del navegador y del SO</translation>
 <translation id="6573305661369899995">Establece una fuente externa de restrcicciones de URL</translation>
 <translation id="6583851521569686409">Configura una lista de impresoras.
 
@@ -3828,6 +3809,7 @@
 <translation id="6731757988219967594">Aplicar filtros de contenido para adultos a los sitios principales (pero no a los iframes incorporados)</translation>
 <translation id="6734521799274931721">Controlar la disponibilidad de "Network File Shares" para el Sistema operativo Chrome</translation>
 <translation id="6735701345096330595">Habilitar la corrección ortográfica de idiomas</translation>
+<translation id="6737677282967014160">Permite que el usuario utilice apps de Android de fuentes no confiables.</translation>
 <translation id="6757613329154374267">Se habilitó la funcionalidad de copia de seguridad y restablecimiento</translation>
 <translation id="6758659208493449452">Esta política controla si los usuarios inscritos en el Programa de Protección Avanzada reciben protección adicional. Es posible que algunas de estas funciones compartan datos con Google (por ejemplo, los usuarios de la Protección avanzada podrán enviar sus descargas a Google para comprobar que no incluyan software malicioso). Si se establece como verdadera o no se establece, los usuarios inscritos recibirán protección adicional. Si se establece como falsa, los usuarios de la Protección avanzada solo recibirán las funciones estándar para el consumidor.</translation>
 <translation id="6762235610019366960">Permite controlar la presentación en pestaña completa de contenido educativo o promocional en <ph name="PRODUCT_NAME" />.
@@ -4253,7 +4235,6 @@
       </translation>
 <translation id="7372831798009983116">Habilita la función de accesibilidad de clic automático</translation>
 <translation id="7373200034079131670">Reiniciar cuando el usuario sale de su cuenta si se inició Android o una VM</translation>
-<translation id="737655323154569539">Restringe el tamaño de la página de impresión. Si la política no se configura o se establece con un valor vacío, no se aplicará ninguna restricción.</translation>
 <translation id="7382191643394429934">Permitir la impresión con y sin gráficos de fondo</translation>
 <translation id="7389872682701720082">Si habilitas esta opción, se ejecutarán siempre los complementos actualizados.
 
@@ -4357,6 +4338,13 @@
       Los patrones de URL deben tener un formato conforme a lo especificado en la política "URLBlacklist", documentada en https://www.chromium.org/administrators/url-blacklist-filter-format.
       </translation>
 <translation id="7566878661979235378">Tipo de autenticación del acceso SAML</translation>
+<translation id="7567373982693549834">Esta política controla la forma en cada usuario usa las apps de Android de fuentes no seguras (que no provienen de Google Play Store).
+
+      Si no se establece el valor para esta política, no se permitirá la funcionalidad.
+
+      Si el dispositivo del usuario está administrado, la disponibilidad de esta funcionalidad también depende de la política de dispositivo correspondiente.
+
+      Si el dispositivo no está administrado, la disponibilidad de esta funcionalidad también depende de si el usuario es el propietario del dispositivo.</translation>
 <translation id="757395965347379751">Cuando se habilita esta configuración, <ph name="PRODUCT_NAME" /> permite los certificados firmados por SHA-1 siempre que estén validados correctamente y vinculados a certificados de CA instalados de forma local.
 
       Ten en cuenta que esta política depende de la pila de verificación de certificado del sistema operativo que permite las firmas SHA-1. Si una actualización del sistema operativo cambia la forma en la que este maneja los certificados con firma SHA-1, esta política ya no tendrá efecto. Además, se trata de una solución temporal para que las empresas tengan más tiempo para dejar las firmas SHA-1. Esta política se quitará el 1 de enero de 2019 o cerca de esta fecha.
@@ -4545,6 +4533,7 @@
 
           Nota: <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" /> anula esta política si se especifica la política anterior.</translation>
 <translation id="7846952520291088817">Las URL para las que se exponen las IP locales en los candidatos ICE de WebRTC</translation>
+<translation id="7848641140449742406">Configuración del SO</translation>
 <translation id="7858404742201086014">Si habilitas esta configuración, los complementos desactualizados se usarán como complementos normales.
 
       Si se inhabilita esta configuración, no se usarán los complementos desactualizados y no se solicitará autorización a los usuarios para ejecutarlos.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index c3765e5d..05b34543 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -361,7 +361,6 @@
 <translation id="1523774894176285446">Navegador alternativo donde se abren los sitios web configurados.</translation>
 <translation id="152657506688053119">Lista de URL alternativas para el proveedor de búsquedas predeterminado</translation>
 <translation id="1530812829012954197">Mostrar siempre los patrones de URL que se indican a continuación en el navegador del host</translation>
-<translation id="1541170838458414064">Restringir el tamaño de impresión de página</translation>
 <translation id="1553532014072799546">Lista blanca de límites de tiempo por aplicación</translation>
 <translation id="1553684822621013552">Si se asigna el valor true a esta política, se habilitará ARC para el usuario
       (la política está sujeta a comprobaciones adicionales de la configuración de la política: ARC no estará
@@ -857,17 +856,6 @@
       Esta política también se aplica a extensiones de componentes, como la extensión Hangout Services.</translation>
 <translation id="2223598546285729819">Configuración de notificación predeterminada</translation>
 <translation id="2231817271680715693">Importar el historial de navegación desde el navegador predeterminado en la primera ejecución</translation>
-<translation id="2234855698900783408">Permite habilitar las mitigaciones de comprobación de <ph name="CORS" /> en la nueva implementación de <ph name="CORS" />. Así, las extensiones continúan siendo compatibles y <ph name="PRODUCT_NAME" /> puede enviar encabezados definidos sin comprobaciones de <ph name="CORS" />.
-
-      Si esta lista se deja vacía, <ph name="PRODUCT_NAME" /> intentará ejecutar las extensiones de forma compatible y no introducirá cambios de <ph name="API" /> en <ph name="PRODUCT_NAME" /> 79, tal y como se explica en <ph name="WEB_REQUEST_API_MANUAL" />.
-
-      Si la lista se configura para que tenga nombres de encabezado de solicitud <ph name="HTTP" />, la comprobación de <ph name="CORS" /> ignorará los encabezados de la lista y habilitará la mitigación en el caso de las extensiones.
-
-      Si no se establece esta lista, no se aplicará ninguna de las dos mitigaciones explicadas arriba.
-
-      Para consultar más información sobre <ph name="CORS" />, visita <ph name="CORS_HELP_URL" />.
-
-      Ten en cuenta que esta política se eliminará de la versión 82 de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2236488539271255289">No permitir que ningún sitio establezca datos locales</translation>
 <translation id="2240879329269430151">Permite establecer si los sitios web pueden mostrar o no pop-ups. La ejecución de pop-ups se permite o se deniega a todos los sitios web.
 
@@ -3755,17 +3743,6 @@
 <translation id="6467613372414922590">Permitir hosts de mensajes nativos en el nivel de usuario (instalados sin permisos de administrador)</translation>
 <translation id="6468980648680553776">Esta política está obsoleta. Sustitúyela por la política RemoteAccessHostClientDomainList.</translation>
 <translation id="6473623140202114570">Configura la lista de dominios en los que la Navegación Segura no activará advertencias.</translation>
-<translation id="6487780893361255867">Permite usar la implementación antigua de <ph name="CORS" /> en vez de la nueva implementación de <ph name="CORS" />.
-
-      Si se asigna el valor "True" a esta política, se usa la implementación antigua, la cual debería ser compatible con las versiones anteriores.
-
-      Si se le asigna el valor "False" o no se establece, se usa la nueva implementación, lo que podría causar distintos problemas de compatibilidad según la empresa.
-
-      Esta política se eliminará después de dos hitos.
-
-      Para consultar más información sobre <ph name="CORS" />, visita <ph name="CORS_HELP_URL" />.
-
-      Ten en cuenta que esta política se eliminará de la versión 82 de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="6488627892044759800">Configura el tipo de página de inicio predeterminada de <ph name="PRODUCT_NAME" /> y evita que los usuarios modifiquen las preferencias de dicha página. La página de inicio puede ser una URL que especifiques o la página Nueva pestaña.
 
           Si habilitas esta opción, se utilizará siempre la página Nueva pestaña como página de inicio y se ignorará la ubicación de la URL de la página de inicio.
@@ -4358,7 +4335,6 @@
       </translation>
 <translation id="7372831798009983116">Habilitar la función de accesibilidad de clic automático</translation>
 <translation id="7373200034079131670">Reinicia cuando el usuario cierra sesión si se ha iniciado Android o una máquina virtual.</translation>
-<translation id="737655323154569539">Restringe el tamaño de impresión de la página. Si esta política no se configura o tiene ningún valor, no se aplica ninguna restricción.</translation>
 <translation id="7382191643394429934">Permitir imprimir con gráficos de fondo y sin ellos</translation>
 <translation id="7389872682701720082">Si se habilita esta opción, se ejecutarán siempre los complementos que no estén desactualizados.
 
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index e6ee9be..7e99b19 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -368,7 +368,6 @@
 <translation id="1523774894176285446">Navigateur secondaire à lancer pour les sites Web configurés.</translation>
 <translation id="152657506688053119">Liste d'URL alternatives pour le moteur de recherche par défaut</translation>
 <translation id="1530812829012954197">Toujours rendre les formats d'URL suivants dans le navigateur hôte</translation>
-<translation id="1541170838458414064">Limiter le format de la page d'impression</translation>
 <translation id="1553532014072799546">Liste blanche des restrictions temporelles spécifiques à chaque application</translation>
 <translation id="1553684822621013552">Lorsque cette règle est définie sur "True", ARC est activé pour l'utilisateur
       (sous réserve de contrôles supplémentaires des paramètres de la règle. ARC
@@ -395,6 +394,7 @@
 <translation id="1561424797596341174">Remplacements de règle pour les versions de débogage de l'hôte distant</translation>
 <translation id="1561967320164410511">U2F plus extensions pour chaque attestation</translation>
 <translation id="1583248206450240930">Utiliser <ph name="PRODUCT_FRAME_NAME" /> par défaut</translation>
+<translation id="1588240398285670601">Paramètres du navigateur</translation>
 <translation id="1599424828227887013">Activer l'isolation des sites pour des origines définies sur les appareils Android</translation>
 <translation id="1608755754295374538">URL autorisées à accéder aux appareils de capture audio sans avis préalable</translation>
 <translation id="1615221548356595305">Autoriser le multiplexage des connexions HTTP/2 pour les hôtes qui utilisent des certificats client</translation>
@@ -868,17 +868,6 @@
       Cette règle s'applique également aux extensions de composant telles que l'extension Hangout Services.</translation>
 <translation id="2223598546285729819">Paramètre de notification par défaut</translation>
 <translation id="2231817271680715693">Importer l'historique de navigation du navigateur par défaut à la première exécution</translation>
-<translation id="2234855698900783408">Permet d'atténuer les contrôles <ph name="CORS" /> dans la nouvelle mise en œuvre de <ph name="CORS" />. Les extensions peuvent ainsi conserver un comportement compatible, et <ph name="PRODUCT_NAME" /> peut envoyer les en-têtes spécifiés sans contrôles <ph name="CORS" />.
-
-      Si la liste est vide, <ph name="PRODUCT_NAME" /> essaie d'exécuter les extensions de manière compatible, et n'introduit pas de modifications de l'<ph name="API" /> pour <ph name="PRODUCT_NAME" /> 79 (comme indiqué à la page <ph name="WEB_REQUEST_API_MANUAL" />).
-
-      Si la liste contient des en-têtes de requêtes <ph name="HTTP" />, ces en-têtes sont ignorés lors des contrôles <ph name="CORS" />. Les contrôles sont en outre atténués pour les extensions.
-
-      Si cette liste n'est pas configurée, aucune des mesures d'atténuation expliquées ci-dessus n'est appliquée.
-
-      Pour en savoir plus sur <ph name="CORS" />, consultez la page <ph name="CORS_HELP_URL" />.
-
-      Notez que cette règle sera supprimée dans la version 82 de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2236488539271255289">Interdire à tous les sites de définir des données locales</translation>
 <translation id="2240879329269430151">Permet de définir si les sites Web sont autorisés à afficher les pop-ups. L'affichage des pop-ups peut être soit autorisé pour tous les sites, soit refusé pour tous les sites. 
 
@@ -1385,6 +1374,7 @@
 <translation id="2872961005593481000">Éteindre</translation>
 <translation id="2873651257716068683">Remplace le format de page d'impression par défaut. Si la taille de la page est indisponible, cette règle est ignorée.</translation>
 <translation id="2874209944580848064">Remarque concernant les appareils <ph name="PRODUCT_OS_NAME" /> compatibles avec les applications Android :</translation>
+<translation id="2874901846804525128">Empêchez l'utilisateur de se servir des applications Android provenant de sources non approuvées.</translation>
 <translation id="2875192972412983412">Permet de spécifier le sous-ensemble des serveurs d'impression qui sont interrogés pour accéder aux imprimantes disponibles qui y sont associées.
 
       Si cette règle est configurée, seules les imprimantes de serveur dont l'ID correspond aux valeurs définies dans cette règle sont proposées aux utilisateurs.
@@ -3019,6 +3009,7 @@
           Si elle est associée à la valeur "true" ou si elle n'est pas configurée, cet utilisateur peut créer et gérer des comptes utilisateur supervisés.</translation>
 <translation id="5369937289900051171">Impression couleur seulement</translation>
 <translation id="5370279767682621504">Activer la compatibilité avec HTTP 0.9 sur les ports non utilisés par défaut</translation>
+<translation id="5377606826822211923">Contrôler l'accès par l'utilisateur aux applications Android provenant de sources non approuvées</translation>
 <translation id="5378985487213287085">Permet de définir si les sites Web sont autorisés à afficher des notifications sur le bureau. L'affichage des notifications sur le bureau peut être autorisé par défaut, refusé par défaut, ou bien l'utilisateur peut recevoir un message chaque fois qu'un site veut afficher ces notifications. 
 
 Si cette règle n'est pas configurée, le paramètre "AskNotifications" est utilisé et l'utilisateur est en mesure de le modifier.</translation>
@@ -3747,17 +3738,6 @@
 <translation id="6467613372414922590">Autoriser les hôtes de messagerie natifs au niveau de l'utilisateur (installés sans l'autorisation d'un administrateur)</translation>
 <translation id="6468980648680553776">Cette règle est obsolète. Veuillez utiliser RemoteAccessHostClientDomainList.</translation>
 <translation id="6473623140202114570">Configurez la liste des domaines sur lesquels la navigation sécurisée ne déclenchera aucun avertissement.</translation>
-<translation id="6487780893361255867">Permet d'utiliser l'ancienne mise en œuvre de <ph name="CORS" /> au lieu de la nouvelle mise en œuvre de <ph name="CORS" />.
-
-      Si cette règle est définie sur "True", l'ancienne mise en œuvre est utilisée. Elle est normalement compatible avec les versions précédentes.
-
-      Si cette règle est définie sur "False" ou qu'elle n'est pas configurée, la nouvelle mise en œuvre est utilisée. Elle peut causer des problèmes de compatibilité spécifiques à l'entreprise.
-
-      Cette règle sera supprimée après quelques étapes intermédiaires.
-
-      Pour en savoir plus sur <ph name="CORS" />, consultez la page <ph name="CORS_HELP_URL" />.
-
-      Notez que cette règle sera supprimée dans la version 82 de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="6488627892044759800">Permet de configurer le type de page d'accueil par défaut dans <ph name="PRODUCT_NAME" /> et d'empêcher les utilisateurs de modifier les préférences de page d'accueil. Vous pouvez définir la page d'accueil sur une URL que vous spécifiez ou sur la page Nouvel onglet.
 
           Si vous activez ce paramètre, la page Nouvel onglet est systématiquement utilisée en guise de page d'accueil, et l'adresse URL de la page d'accueil est ignorée.
@@ -3836,6 +3816,7 @@
       Cette règle peut être ignorée par EnabledPlugins et DisabledPluginsExceptions.
 
       Si cette règle n'est pas configurée, l'utilisateur peut utiliser n'importe quel plug-in installé sur le système, à l'exception des plug-ins codés en dur incompatibles, et des plug-ins obsolètes ou dangereux.</translation>
+<translation id="6571871508154591774">Désactiver la caméra, les paramètres du navigateur et les paramètres de l'OS</translation>
 <translation id="6573305661369899995">Définir une source externe pour les restrictions d'URL</translation>
 <translation id="6583851521569686409">Permet de configurer une liste d'imprimantes.
 
@@ -3911,6 +3892,7 @@
 <translation id="6731757988219967594">Filtrer les sites de premier niveau (mais pas les iFrame intégrés) présentant des contenus réservés aux adultes</translation>
 <translation id="6734521799274931721">Vérifie la disponibilité de la fonctionnalité Partages de fichiers en réseau pour Chrome OS</translation>
 <translation id="6735701345096330595">Forcer l'activation des langues de la vérification orthographique</translation>
+<translation id="6737677282967014160">Autorisez l'utilisateur à se servir des applications Android provenant de sources non approuvées.</translation>
 <translation id="6757613329154374267">Service de sauvegarde et de restauration activé</translation>
 <translation id="6758659208493449452">Cette règle détermine si les utilisateurs inscrits au Programme Protection Avancée bénéficient de protections supplémentaires. Ces fonctionnalités peuvent impliquer le partage de données avec Google (par exemple, les utilisateurs du programme Protection Avancée peuvent envoyer leurs téléchargements à Google pour les faire analyser afin de détecter d'éventuels logiciels malveillants). Si cette règle est définie sur "True" ou si elle n'est pas configurée, les utilisateurs inscrits bénéficieront de protections supplémentaires. Si elle est définie sur "False", les utilisateurs du programme Protection Avancée ne bénéficieront que des fonctionnalités grand public standards.</translation>
 <translation id="6762235610019366960">Vous permet de contrôler la présentation de contenus promotionnels et/ou éducatifs en mode Plein onglet dans <ph name="PRODUCT_NAME" />.
@@ -4342,7 +4324,6 @@
       </translation>
 <translation id="7372831798009983116">Activer la fonctionnalité d'accessibilité de clic automatique</translation>
 <translation id="7373200034079131670">Redémarrage en cas de déconnexion de l'utilisateur si Android ou une VM sont lancés</translation>
-<translation id="737655323154569539">Limite le format de la page d'impression. Si la règle n'est pas définie ou qu'elle est vide, on considère qu'il n'y a aucune restriction.</translation>
 <translation id="7382191643394429934">Autoriser l'impression à la fois avec et sans images de fond</translation>
 <translation id="7389872682701720082">Si vous activez ce paramètre, les plug-ins non obsolètes sont toujours exécutés.
 
@@ -4446,6 +4427,13 @@
       Les formats d'URL suivent le modèle de la règle "URLBlacklist", décrit sur la page https://www.chromium.org/administrators/url-blacklist-filter-format.
       </translation>
 <translation id="7566878661979235378">Type d'authentification pour les connexions SAML</translation>
+<translation id="7567373982693549834">Cette règle permet de contrôler l'utilisation des applications Android provenant de sources non approuvées (autres que le Google Play Store) au niveau de chaque utilisateur.
+
+      Si la valeur de cette règle n'est pas définie, la règle est considérée comme non autorisée.
+
+      Si l'appareil de l'utilisateur est géré, la disponibilité de cette règle dépend également des règles relatives aux appareils correspondantes.
+
+      Si l'appareil de l'utilisateur n'est pas géré, la disponibilité de cette règle varie également selon que l'utilisateur est le propriétaire de l'appareil ou non.</translation>
 <translation id="757395965347379751">Lorsque ce paramètre est activé, <ph name="PRODUCT_NAME" /> autorise les certificats signés par SHA-1 tant qu'ils sont validés et que leurs chaînes renvoient à un certificat CA installé localement.
 
       Notez que cette règle dépend de la pile de validation des certificats du système d'exploitation qui autorise les signatures SHA-1. Si la mise à jour d'un OS modifie la gestion des certificats SHA-1 par l'OS, cette règle n'aura plus d'effet. En outre, cette règle sera supprimée dans les environs du 1er janvier 2019.
@@ -4640,6 +4628,7 @@
 
           Remarque : Si elle est définie, la règle <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" /> remplace cette règle.</translation>
 <translation id="7846952520291088817">URL pour lesquelles les candidats WebRTC ICE affichent les adresses IP locales</translation>
+<translation id="7848641140449742406">Paramètres de l'OS</translation>
 <translation id="7858404742201086014">Si vous activez ce paramètre, les plug-ins obsolètes sont utilisés comme des plug-ins normaux.
 
       Si vous désactivez ce paramètre, les plug-ins obsolètes ne sont pas utilisés, et l'autorisation des utilisateurs ne sera pas requise pour leur exécution.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index cb1a7dd..141c383 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -353,7 +353,6 @@
 <translation id="1523774894176285446">Browser alternatif untuk membuka situs yang dikonfigurasi.</translation>
 <translation id="152657506688053119">Daftar URL pengganti untuk penyedia penelusuran default</translation>
 <translation id="1530812829012954197">Selalu urai pola URL berikut di browser host</translation>
-<translation id="1541170838458414064">Batasi ukuran halaman pencetakan</translation>
 <translation id="1553532014072799546">Daftar yang Diizinkan terkait Batas Waktu per Aplikasi</translation>
 <translation id="1553684822621013552">Jika kebijakan ini disetel ke True, ARC akan diaktifkan untuk pengguna
       (tunduk pada pemeriksaan setelan kebijakan tambahan - ARC akan tetap
@@ -380,6 +379,7 @@
 <translation id="1561424797596341174">Penggantian kebijakan untuk versi Debug host akses jarak jauh</translation>
 <translation id="1561967320164410511">U2F ditambah beberapa ekstensi untuk masing-masing pengesahan</translation>
 <translation id="1583248206450240930">Gunakan <ph name="PRODUCT_FRAME_NAME" /> jika tidak diubah</translation>
+<translation id="1588240398285670601">Setelan Browser</translation>
 <translation id="1599424828227887013">Mengaktifkan Isolasi Situs untuk asal yang ditentukan di perangkat Android</translation>
 <translation id="1608755754295374538">URL yang akan diberi akses ke perangkat perekam audio tanpa peringatan</translation>
 <translation id="1615221548356595305">Izinkan koneksi HTTP/2 bergabung untuk host ini bahkan saat sertifikat klien digunakan</translation>
@@ -838,17 +838,6 @@
 <translation id="2214880135980649323">Jika kebijakan ini diaktifkan, ekstensi yang diinstal oleh kebijakan perusahaan diizinkan untuk menggunakan Enterprise Hardware Platform API. Jika kebijakan ini dinonaktifkan atau tidak ditetapkan, tidak ada ekstensi yang diizinkan untuk menggunakan Enterprise Hardware Platform API. Kebijakan ini juga berlaku untuk ekstensi komponen seperti ekstensi Layanan Hangout.</translation>
 <translation id="2223598546285729819">Setelan pemberitahuan default</translation>
 <translation id="2231817271680715693">Impor histori browseran dari browser default saat pertama kali dijalankan</translation>
-<translation id="2234855698900783408">Mengaktifkan mitigasi pemeriksaan <ph name="CORS" /> dalam implementasi <ph name="CORS" /> yang baru, sehingga memungkinkan Ekstensi tetap kompatibel, dan mengizinkan <ph name="PRODUCT_NAME" /> mengirim header tertentu tanpa pemeriksaan <ph name="CORS" />.
-
-      Jika daftar ini dibiarkan kosong, <ph name="PRODUCT_NAME" /> akan mencoba menjalankan Ekstensi secara kompatibel, dan tidak menerapkan perubahan <ph name="API" /> untuk <ph name="PRODUCT_NAME" /> 79 seperti yang dijelaskan dalam <ph name="WEB_REQUEST_API_MANUAL" />.
-
-      Jika daftar ini ditetapkan untuk memiliki nama header permintaan <ph name="HTTP" />, pemeriksaan <ph name="CORS" /> akan mengabaikan header yang tercantum dan mengaktifkan mitigasi untuk Ekstensi.
-
-      Jika daftar ini tidak ditetapkan, kedua mitigasi yang dijelaskan di atas tidak akan diterapkan.
-
-      Untuk mengetahui detail tentang <ph name="CORS" />, buka: <ph name="CORS_HELP_URL" />.
-
-      Perhatikan bahwa kebijakan ini akan dihapus di <ph name="PRODUCT_NAME" /> versi 82.</translation>
 <translation id="2236488539271255289">Jangan izinkan situs mana pun menyetel data lokal</translation>
 <translation id="2240879329269430151">Memungkinkan Anda menentukan apakah situs diizinkan untuk menampilkan pop-up. Menampilkan pop-up dapat diizinkan atau diblokir untuk semua situs. Jika kebijakan ini tidak disetel, 'BlockPopups' akan digunakan dan pengguna dapat mengubahnya.</translation>
 <translation id="2241498944622759244">Fitur ini tidak pernah diluncurkan sehingga kebijakannya tidak digunakan lagi. Jika fitur ini ditetapkan ke true atau tidak ditetapkan, <ph name="PRODUCT_NAME" /> akan menyarankan halaman yang terkait dengan halaman saat ini.
@@ -1345,6 +1334,7 @@
 <translation id="2872961005593481000">Matikan</translation>
 <translation id="2873651257716068683">Mengganti ukuran halaman pencetakan default. Jika ukuran halaman tidak tersedia, kebijakan ini akan diabaikan.</translation>
 <translation id="2874209944580848064">Catatan untuk perangkat <ph name="PRODUCT_OS_NAME" /> yang mendukung aplikasi Android:</translation>
+<translation id="2874901846804525128">Mencegah pengguna menggunakan aplikasi Android dari sumber yang tidak tepercaya.</translation>
 <translation id="2875192972412983412">Menentukan subset server cetak yang akan dikueri untuk server printer.
 
       Jika kebijakan ini ditetapkan, hanya server printer yang memiliki id yang cocok dengan nilai kebijakan ini yang akan tersedia untuk pengguna.
@@ -2951,6 +2941,7 @@
           Jika disetel ke true atau tidak dikonfigurasi, pengguna yang dilindungi dapat dibuat dan dikelola oleh pengguna ini.</translation>
 <translation id="5369937289900051171">Khusus pencetakan warna</translation>
 <translation id="5370279767682621504">Aktifkan dukungan HTTP/0.9 pada porta non-default</translation>
+<translation id="5377606826822211923">Mengontrol penggunaan aplikasi Android dari sumber yang tidak tepercaya untuk pengguna</translation>
 <translation id="5378985487213287085">Memungkinkan Anda menyetel apakah situs web diizinkan untuk menampilkan pemberitahuan desktop. Menampilkan pemberitahuan desktop dapat diizinkan secara default, ditolak secara default, atau pengguna dapat ditanya setiap kali sebuah situs web ingin menampilkan pemberitahuan desktop. Jika kebijakan ini tidak disetel, 'AskNotifications' akan digunakan dan pengguna dapat mengubahnya.</translation>
 <translation id="5380329473151894945">Menyetel status default fitur aksesibilitas kursor besar di layar login.
 
@@ -3651,17 +3642,6 @@
 <translation id="6467613372414922590">Mengizinkan host Native Messaging level pengguna (diinstal tanpa izin admin)</translation>
 <translation id="6468980648680553776">Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan RemoteAccessHostClientDomainList.</translation>
 <translation id="6473623140202114570">Mengonfigurasi daftar domain tempat Safe Browsing tidak akan memicu peringatan.</translation>
-<translation id="6487780893361255867">Menggunakan implementasi <ph name="CORS" /> lama, bukan <ph name="CORS" /> baru.
-
-      Jika setelan ini ditetapkan ke True, implementasi lama yang digunakan seharusnya kompatibel dengan versi sebelumnya.
-
-      Jika setelan ini ditetapkan ke False, atau tidak ditetapkan, implementasi baru yang digunakan dapat menyebabkan potensi masalah kompatibilitas khusus perusahaan.
-
-      Kebijakan ini akan dihapus setelah beberapa target.
-
-      Untuk mengetahui detail tentang <ph name="CORS" />, buka: <ph name="CORS_HELP_URL" />.
-
-      Perhatikan bahwa kebijakan ini akan dihapus di <ph name="PRODUCT_NAME" /> versi 82.</translation>
 <translation id="6488627892044759800">Mengonfigurasi jenis halaman beranda default di <ph name="PRODUCT_NAME" /> dan mencegah pengguna mengubah preferensi halaman beranda. Halaman beranda dapat disetel ke URL yang Anda tetapkan, atau disetel ke Halaman Tab Baru.
 
           Jika Anda mengaktifkan setelan ini, Halaman Tab Baru akan selalu digunakan untuk halaman beranda, dan lokasi URL halaman beranda akan diabaikan.
@@ -3740,6 +3720,7 @@
       Perlu diketahui bahwa kebijakan ini dapat diganti dengan EnabledPlugins dan DisabledPluginsExceptions.
 
       Jika kebijakan ini tidak ditetapkan, pengguna dapat menggunakan plugin mana pun yang diinstal di sistem kecuali plugin yang tidak kompatibel saat dilakukan hard code, usang, atau berbahaya.</translation>
+<translation id="6571871508154591774">Mengonfigurasi kamera, setelan browser, dan fitur setelan OS untuk dinonaktifkan</translation>
 <translation id="6573305661369899995">Setel sumber eksternal batasan URL</translation>
 <translation id="6583851521569686409">Mengonfigurasi daftar printer.
 
@@ -3816,6 +3797,7 @@
 <translation id="6731757988219967594">Filter konten khusus dewasa dari situs level teratas (namun bukan iframe yang tersemat)</translation>
 <translation id="6734521799274931721">Mengontrol fitur Berbagi File Jaringan untuk ketersediaan ChromeOS</translation>
 <translation id="6735701345096330595">Mengaktifkan paksa pemeriksaan ejaan bahasa</translation>
+<translation id="6737677282967014160">Mengizinkan pengguna menggunakan aplikasi Android dari sumber yang tidak tepercaya.</translation>
 <translation id="6757613329154374267">Pencadangan dan pemulihan diaktifkan</translation>
 <translation id="6758659208493449452">Kebijakan ini mengontrol apakah pengguna yang terdaftar dalam Program Perlindungan Lanjutan menerima perlindungan tambahan. Beberapa fitur ini dapat mencakup pembagian data kepada Google (misalnya, pengguna Perlindungan Lanjutan akan dapat mengirimkan hasil downloadnya ke Google untuk pemindaian malware). Jika ditetapkan ke Benar atau tidak ditetapkan, pengguna terdaftar akan menerima perlindungan tambahan. Jika ditetapkan ke Salah, pengguna Perlindungan Lanjutan hanya akan menerima fitur konsumen standar.</translation>
 <translation id="6762235610019366960">Memungkinkan Anda mengontrol penyajian konten promosi dan/atau edukasi tab penuh di <ph name="PRODUCT_NAME" />.
@@ -4239,7 +4221,6 @@
       </translation>
 <translation id="7372831798009983116">Mengaktifkan fitur aksesibilitas klik otomatis</translation>
 <translation id="7373200034079131670">Reboot saat pengguna logout jika Android atau VM telah dimulai.</translation>
-<translation id="737655323154569539">Membatasi ukuran halaman pencetakan. Kebijakan yang tidak disetel dan setelan kosong diperlakukan sebagai tidak ada batasan.</translation>
 <translation id="7382191643394429934">Izinkan pencetakan dengan dan tanpa grafis latar belakang</translation>
 <translation id="7389872682701720082">Jika setelan ini diaktifkan, plugin yang masih berlaku selalu berjalan.
 
@@ -4343,6 +4324,13 @@
       Pola URL memiliki format yang sama dengan kebijakan 'URLBlacklist', yang didokumentasikan di https://www.chromium.org/administrators/url-blacklist-filter-format.
       </translation>
 <translation id="7566878661979235378">Jenis autentikasi login SAML</translation>
+<translation id="7567373982693549834">Kebijakan ini mengontrol penggunaan aplikasi Android dari sumber yang tidak tepercaya (selain Google Play Store) untuk setiap pengguna.
+
+      Jika nilai kebijakan ini tidak ditetapkan, fungsinya dianggap tidak diizinkan.
+
+      Jika perangkat pengguna dikelola, kemampuan untuk menyetel kebijakan ini akan tergantung pada kebijakan perangkat terkait.
+
+      Jika perangkat pengguna tidak dikelola, kemampuan untuk menyetel kebijakan ini akan tergantung pada apakah pengguna merupakan pemilik perangkat atau bukan.</translation>
 <translation id="757395965347379751">Jika setelan ini diaktifkan, <ph name="PRODUCT_NAME" /> mengizinkan sertifikat bertanda tangan SHA-1 selama sertifikat tersebut berhasil memvalidasi dan mengarah ke sertifikat CA yang terpasang secara lokal.
 
       Perlu diingat bahwa kebijakan ini bergantung pada tumpukan verifikasi sertifikat sistem operasi yang mengizinkan tanda tangan SHA-1. Jika pembaruan OS mengubah penanganan OS terkait sertifikat SHA-1, kebijakan ini mungkin tidak berlaku lagi.  Selain itu, kebijakan ini dimaksudkan sebagai solusi sementara guna memberikan perusahaan lebih banyak waktu untuk beralih dari SHA-1.  Kebijakan ini akan dihapus pada atau sekitar tanggal 1 Januari 2019.
@@ -4531,6 +4519,7 @@
 
           Catatan: <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" /> akan mengganti kebijakan ini jika kebijakan tersebut ditentukan.</translation>
 <translation id="7846952520291088817">URL yang akan menampilkan IP lokal dalam kandidat WebRTC ICE</translation>
+<translation id="7848641140449742406">Setelan OS</translation>
 <translation id="7858404742201086014">Jika setelan ini diaktifkan, plugin yang sudah tidak berlaku akan digunakan sebagai plugin normal.
 
       Jika setelan ini dinonaktifkan, plugin yang sudah tidak berlaku tidak akan digunakan dan pengguna tidak akan dimintai izin untuk menjalankannya.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 70bf910..3d9d634 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -353,7 +353,6 @@
 <translation id="1523774894176285446">Browser alternativo da aprire per i siti web configurati.</translation>
 <translation id="152657506688053119">Elenco di URL alternativi per il fornitore del servizio di ricerca predefinito</translation>
 <translation id="1530812829012954197">Visualizza sempre i seguenti schemi URL nel browser host</translation>
-<translation id="1541170838458414064">Limita le dimensioni delle pagine di stampa</translation>
 <translation id="1553532014072799546">Whitelist limiti di utilizzo per app</translation>
 <translation id="1553684822621013552">Quando questo criterio è impostato su true, ARC è attivato (soggetto ad altri controlli delle impostazioni dei criteri - ARC continuerà a essere disattivato se nella sessione utente corrente è attivata la modalità temporanea o l'accesso simultaneo).
 
@@ -821,17 +820,6 @@
       Questa norma si applica anche a estensioni di componenti come l'estensione Hangout Services.</translation>
 <translation id="2223598546285729819">Impostazione di notifica predefinita</translation>
 <translation id="2231817271680715693">Importa cronologia di navigazione dal browser predefinito alla prima esecuzione</translation>
-<translation id="2234855698900783408">Consente di attivare le mitigazioni dei controlli <ph name="CORS" /> nella nuova implementazione <ph name="CORS" />, consentendo alle estensioni di mantenere un comportamento compatibile e a <ph name="PRODUCT_NAME" /> di inviare le intestazioni specificate senza controlli <ph name="CORS" />.
-
-      Se questo elenco viene lasciato vuoto, <ph name="PRODUCT_NAME" /> prova a eseguire le estensioni in modalità compatibili e non introduce modifiche <ph name="API" /> per la versione 79 di <ph name="PRODUCT_NAME" />, come spiegato all'indirizzo <ph name="WEB_REQUEST_API_MANUAL" />.
-
-      Se per questo elenco vengono impostati nomi di intestazioni di richieste <ph name="HTTP" />, il controllo <ph name="CORS" /> ignorerà le intestazioni elencate e attiverà la mitigazione per le estensioni.
-
-      Se questo elenco non viene impostato, entrambe le mitigazioni spiegate sopra non vengono applicate.
-
-      Per informazioni dettagliate su <ph name="CORS" />, visita la pagina <ph name="CORS_HELP_URL" />.
-
-      Tieni presente che questo criterio verrà rimosso nella versione 82 di <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2236488539271255289">Non consentire ai siti di impostare i dati locali</translation>
 <translation id="2240879329269430151">Permette di stabilire se consentire o meno la visualizzazione dei popup nei siti web. La visualizzazione dei popup può essere consentita o negata per tutti i siti web. Se questa norma non viene impostata, verrà utilizzato il valore "BlockPopups", che potrà essere modificato dagli utenti.</translation>
 <translation id="2241498944622759244">Questa funzionalità non è mai stata lanciata, pertanto il criterio è obsoleto. Se è impostato su true o non è impostato, <ph name="PRODUCT_NAME" /> suggerisce pagine correlate alla pagina corrente.
@@ -3632,17 +3620,6 @@
 <translation id="6467613372414922590">Consenti host di messaggistica nativi a livello di utente (installati senza privilegi di amministratore)</translation>
 <translation id="6468980648680553776">Questa norma è obsoleta. Al suo posto utilizza RemoteAccessHostClientDomainList.</translation>
 <translation id="6473623140202114570">Configura l'elenco di domini sui quali Navigazione sicura non attiverà avvisi.</translation>
-<translation id="6487780893361255867">Consente di usare l'implementazione <ph name="CORS" /> legacy anziché la nuova implementazione <ph name="CORS" />.
-
-      Se questo criterio viene impostato su true, viene usata l'implementazione legacy, che dovrebbe essere compatibile con le versioni precedenti.
-
-      Se questo criterio viene impostato su false o non viene impostato, viene usata la nuova implementazione, che potrebbe causare problemi di compatibilità per le aziende.
-
-      Questo criterio verrà rimosso dopo il lancio di un paio di nuove versioni.
-
-      Per informazioni dettagliate su <ph name="CORS" />, visita la pagina <ph name="CORS_HELP_URL" />.
-
-      Tieni presente che questo criterio verrà rimosso nella versione 82 di <ph name="PRODUCT_NAME" />.</translation>
 <translation id="6488627892044759800">Consente di configurare il tipo di home page predefinita di <ph name="PRODUCT_NAME" /> e di impedire agli utenti di modificare le preferenze della home page. L'home page può essere impostata sull'URL specificato oppure sulla pagina Nuova scheda.
 
           Se attivi questa impostazione, la pagina Nuova scheda verrà sempre utilizzata come home page e l'URL della home page verrà ignorato.
@@ -4224,7 +4201,6 @@
       </translation>
 <translation id="7372831798009983116">Attiva la funzione di accessibilità di clic automatico</translation>
 <translation id="7373200034079131670">Riavvia all'uscita dell'utente se si avvia Android o una VM.</translation>
-<translation id="737655323154569539">Consente di limitare le dimensioni delle pagine di stampa. Se la norma non viene impostata o viene lasciata vuota non vengono applicate limitazioni.</translation>
 <translation id="7382191643394429934">Consenti la stampa con e senza immagini di sfondo</translation>
 <translation id="7389872682701720082">Se attivi questa impostazione, i plug-in non obsoleti verranno sempre eseguiti.
 
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 38f6f61..d0c0262 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -367,7 +367,6 @@
 <translation id="1523774894176285446">設定したウェブサイトに対して起動する代替ブラウザ。</translation>
 <translation id="152657506688053119">デフォルトの検索プロバイダが使用する代替 URL のリスト</translation>
 <translation id="1530812829012954197">ホスト ブラウザに次の URL パターンを常に表示する</translation>
-<translation id="1541170838458414064">印刷ページサイズを制限</translation>
 <translation id="1553532014072799546">アプリごとの時間制限のホワイトリスト</translation>
 <translation id="1553684822621013552">このポリシーを true に設定すると、ユーザーが ARC を使用できるようになります
       (ポリシー設定について追加の確認が行われ、現在のユーザー セッションで
@@ -394,6 +393,7 @@
 <translation id="1561424797596341174">リモート アクセス ホストの Debug ビルドでのポリシー オーバーライド</translation>
 <translation id="1561967320164410511">U2F と個人認証用拡張機能</translation>
 <translation id="1583248206450240930">デフォルトで <ph name="PRODUCT_FRAME_NAME" /> を使用する</translation>
+<translation id="1588240398285670601">ブラウザの設定</translation>
 <translation id="1599424828227887013">Android デバイスで指定の発行元に対してサイト分離を有効にする</translation>
 <translation id="1608755754295374538">ユーザー確認なしで音声キャプチャ デバイスへのアクセスが許可される URL</translation>
 <translation id="1615221548356595305">クライアント証明書が使用されているときでも、指定したホストで HTTP/2 接続の統合を許可する</translation>
@@ -840,17 +840,6 @@
       このポリシーは、ハングアウト サービス拡張機能のようなコンポーネント型拡張機能にも適用されます。</translation>
 <translation id="2223598546285729819">デフォルトの通知設定</translation>
 <translation id="2231817271680715693">初回実行時にデフォルトのブラウザから閲覧履歴をインポートする</translation>
-<translation id="2234855698900783408">新しい <ph name="CORS" /> の実装で <ph name="CORS" /> チェックの緩和措置を有効にして、拡張機能の互換性のある動作が保たれるように、また <ph name="PRODUCT_NAME" /> で <ph name="CORS" /> チェックなしに指定ヘッダーが送信されるようにします。
-
-      このリストを空に設定した場合、<ph name="PRODUCT_NAME" /> では拡張機能が互換性を保つように実行され、<ph name="PRODUCT_NAME" /> 79 での <ph name="API" /> の変更(<ph name="WEB_REQUEST_API_MANUAL" /> を参照)は適用されません。
-
-      このリストを <ph name="HTTP" /> リクエスト ヘッダー名を含めて設定した場合は、拡張機能向けの緩和措置が有効になることに加えて、リストにあるヘッダーが <ph name="CORS" /> チェックで無視されます。
-
-      このリストを設定しない場合、上記の緩和措置はいずれも適用されません。
-
-      <ph name="CORS" /> の詳細については、<ph name="CORS_HELP_URL" /> をご覧ください。
-
-      このポリシーは <ph name="PRODUCT_NAME" /> バージョン 82 で削除されます。</translation>
 <translation id="2236488539271255289">すべてのサイトに対してローカル データの設定を許可しない</translation>
 <translation id="2240879329269430151">ウェブサイトに対してポップアップ表示を許可するかどうかを設定できます。ポップアップ表示は、すべてのウェブサイトに対して許可または禁止することができます。このポリシーが未設定の場合、「BlockPopups」が使用され、ユーザーはこの設定を変更できます。</translation>
 <translation id="2241498944622759244">この機能は公開に至らなかったため、このポリシーはサポート終了となりました。このポリシーが true または未設定の場合、<ph name="PRODUCT_NAME" /> では現在のページに関連のあるページがおすすめとして表示されます。
@@ -1343,6 +1332,7 @@
 <translation id="2872961005593481000">終了</translation>
 <translation id="2873651257716068683">デフォルトの印刷ページサイズをオーバーライドします。ページサイズを使用できない場合、このポリシーは無視されます。</translation>
 <translation id="2874209944580848064">Android アプリをサポートする <ph name="PRODUCT_OS_NAME" /> デバイスに関する注意:</translation>
+<translation id="2874901846804525128">信頼できない提供元の Android アプリの使用をユーザーに許可しない。</translation>
 <translation id="2875192972412983412">サーバー プリンタについてのクエリを送信するプリント サーバーのサブセットを指定します。
 
       このポリシーを使用する場合は、このポリシーで指定した ID に一致するサーバー プリンタのみがユーザーに使用可能となります。
@@ -2934,6 +2924,7 @@
           true に設定されている場合や未設定の場合、このユーザーは監視対象ユーザーを作成し管理できます。</translation>
 <translation id="5369937289900051171">カラー印刷のみ</translation>
 <translation id="5370279767682621504">デフォルト以外のポートで HTTP/0.9 サポートを有効にする</translation>
+<translation id="5377606826822211923">信頼できない提供元の Android アプリの使用をユーザー単位で管理する</translation>
 <translation id="5378985487213287085">ウェブサイトに対してデスクトップ通知の表示を許可するかどうかを設定できます。デスクトップ通知の表示は、デフォルトで許可または禁止することができます。また、ウェブサイトでデスクトップ通知が表示される前にユーザーが毎回確認することもできます。このポリシーが未設定の場合、「AskNotifications」が使用され、ユーザーはこの設定を変更できます。</translation>
 <translation id="5380329473151894945">ログイン画面で「大きいカーソル」ユーザー補助機能のデフォルト状態を設定します。
 
@@ -3653,17 +3644,6 @@
 <translation id="6467613372414922590">ユーザーレベルのネイティブ メッセージング ホスト(管理者権限なしでインストールされたホスト)を許可する</translation>
 <translation id="6468980648680553776">このポリシーはサポートを終了しました。代わりに RemoteAccessHostClientDomainList を使用してください。</translation>
 <translation id="6473623140202114570">セーフ ブラウジングによる警告の表示を行わないドメインのリストを設定する。</translation>
-<translation id="6487780893361255867">新しい <ph name="CORS" /> の実装ではなく以前の <ph name="CORS" /> の実装を使用します。
-
-      True に設定した場合は、以前のバージョンと互換性のある以前の実装が使用されます。
-
-      False または未設定のままにした場合は新しい実装が使用されますが、互換性に関する企業特有の問題が発生する可能性があります。
-
-      このポリシーは数回のマイルストーンを経て削除される予定です。
-
-      <ph name="CORS" /> の詳細については、<ph name="CORS_HELP_URL" /> をご覧ください。
-
-      このポリシーは <ph name="PRODUCT_NAME" /> バージョン 82 で削除されます。</translation>
 <translation id="6488627892044759800"><ph name="PRODUCT_NAME" /> のデフォルトのホームページのタイプを設定するとともに、ユーザーがホームページ設定を変更できないようにします。ホームページは、指定する URL または新しいタブページに設定できます。
 
           この設定を有効にすると、新しいタブページが常にホームページに使用され、ホームページの URL の場所は無視されます。
@@ -3741,6 +3721,7 @@
       このポリシーよりも EnabledPlugins と DisabledPluginsExceptions が優先されます。
 
       このポリシーを設定しない場合、ユーザーはシステムにインストールされたどのプラグインも使用できます(互換性のないハードコードされたプラグイン、古いプラグイン、危険なプラグインは除く)。</translation>
+<translation id="6571871508154591774">カメラ、ブラウザの設定、OS の設定機能を無効にする</translation>
 <translation id="6573305661369899995">URL に関する制限の外部ソースを設定</translation>
 <translation id="6583851521569686409">プリンタのリストを設定します。
 
@@ -3817,6 +3798,7 @@
 <translation id="6731757988219967594">アダルト コンテンツに基づいて最上位サイト(埋め込み iframe 以外)を除外する</translation>
 <translation id="6734521799274931721">Chrome OS でネットワーク ファイル共有を使用できるかどうかの設定</translation>
 <translation id="6735701345096330595">言語のスペルチェックを強制的に有効にする</translation>
+<translation id="6737677282967014160">信頼できない提供元の Android アプリの使用をユーザーに許可する。</translation>
 <translation id="6757613329154374267">バックアップと復元が有効</translation>
 <translation id="6758659208493449452">このポリシーは、高度な保護機能プログラムに登録しているユーザーが追加の保護機能を使用できるようにするかどうかを制御します。追加の機能では、Google とデータが共有されることがあります。たとえば、高度な保護機能のユーザーは、不正なソフトウェアをスキャンする目的で、ダウンロードしたファイルを Google に送信できます。True に設定するか未設定のままにした場合、登録ユーザーは追加の保護機能を使用できます。False に設定した場合、高度な保護機能のユーザーは標準的な消費者向けの機能のみを使用できます。</translation>
 <translation id="6762235610019366960"><ph name="PRODUCT_NAME" /> のタブ全体にプロモーション コンテンツや教育用コンテンツを表示するかどうかを制御します。
@@ -4239,7 +4221,6 @@
       </translation>
 <translation id="7372831798009983116">「自動クリック」のユーザー補助機能を有効にする</translation>
 <translation id="7373200034079131670">Android または VM が起動している場合、ユーザーのログアウト時に再起動する。</translation>
-<translation id="737655323154569539">印刷ページサイズを制限します。ポリシーが未設定または空白に設定されている場合は、制限なしとして扱われます。</translation>
 <translation id="7382191643394429934">背景のグラフィックありの印刷となしの印刷を両方許可する</translation>
 <translation id="7389872682701720082">この設定が有効の場合、新しいプラグインが常に実行されます。
 
@@ -4342,6 +4323,13 @@
       URL パターンは、https://www.chromium.org/administrators/url-blacklist-filter-format で説明されている「URLBlacklist」ポリシーと同じ形式で指定します。
       </translation>
 <translation id="7566878661979235378">SAML ログイン認証タイプ</translation>
+<translation id="7567373982693549834">このポリシーでは、信頼できない提供元(Google Play ストア以外の提供元)の Android アプリの使用をユーザー単位で管理します。
+
+      このポリシーの値を設定しない場合は、この機能を許可しないものと見なされます。
+
+      ユーザーのデバイスが管理対象の場合、この機能を使用できるかどうかは、対応するデバイス ポリシーの設定にも左右されます。
+
+      ユーザーのデバイスが管理対象でない場合、この機能を使用できるかどうかは、ユーザーがデバイスの所有者かどうかにも左右されます。</translation>
 <translation id="757395965347379751">この設定が有効になっていると、SHA-1 署名証明書が検証され、ローカルにインストールされた CA 証明書に関連付けされている限り、<ph name="PRODUCT_NAME" /> は SHA-1 署名証明書を許可します。
 
       ただし、このポリシーは SHA-1 署名を許可するオペレーティング システムの証明書検証スタックにより異なります。OS のアップデートにより SHA-1 署名証明書を処理する OS が変更になると、このポリシーは効力を失います。さらに、このポリシーは一時的な措置として企業に SHA-1 から移行するための猶予期間を与えることを目的としています。このポリシーは 2019 年 1 月 1 日をめどに削除される予定です。
@@ -4523,6 +4511,7 @@
 
           注: <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" /> が指定されている場合はこのポリシーより優先されます。</translation>
 <translation id="7846952520291088817">WebRTC ICE の候補にローカル IP を表示する URL</translation>
+<translation id="7848641140449742406">OS の設定</translation>
 <translation id="7858404742201086014">この設定を有効にした場合、古いプラグインが通常のプラグインとして使用されます。
 
       この設定を無効にした場合、古いプラグインは使用されず、ユーザーに実行の許可を求めるメッセージも表示されません。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index ff95f5e2..17461d0 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -367,7 +367,6 @@
 <translation id="1523774894176285446">구성된 웹사이트를 실행하기 위한 대체 브라우저입니다.</translation>
 <translation id="152657506688053119">기본 검색 공급자의 대체 URL 목록</translation>
 <translation id="1530812829012954197">호스트 브라우저에서 다음 URL 패턴을 항상 렌더링</translation>
-<translation id="1541170838458414064">인쇄 페이지 크기 제한</translation>
 <translation id="1553532014072799546">앱별 시간 제한 허용 목록</translation>
 <translation id="1553684822621013552">이 정책이 true로 설정된 경우 사용자에게 ARC가 사용 설정됩니다
       (추가 정책 설정 선택에 따라 다름 - 현재 사용자 세션에 임시 모드나
@@ -394,6 +393,7 @@
 <translation id="1561424797596341174">정책은 원격 액세스 호스트의 디버그 빌드를 무시합니다.</translation>
 <translation id="1561967320164410511">개별 인증을 위한 U2F 및 확장 프로그램</translation>
 <translation id="1583248206450240930">기본으로 <ph name="PRODUCT_FRAME_NAME" /> 사용</translation>
+<translation id="1588240398285670601">브라우저 설정</translation>
 <translation id="1599424828227887013">Android 기기에서 지정된 출처의 사이트 격리 사용 설정</translation>
 <translation id="1608755754295374538">별도 메시지를 표시하지 않고 오디오 캡처 기기에 대한 액세스 권한이 부여되는 URL입니다.</translation>
 <translation id="1615221548356595305">클라이언트 인증서가 사용되는 경우에도 이러한 호스트에 HTTP/2 연결 병합 허용</translation>
@@ -855,17 +855,6 @@
       이 정책은 행아웃 서비스 확장 프로그램과 같은 구성요소 확장 프로그램에도 적용됩니다.</translation>
 <translation id="2223598546285729819">기본 알림 설정</translation>
 <translation id="2231817271680715693">처음 실행 시 기본 브라우저에서 인터넷 사용기록 가져오기</translation>
-<translation id="2234855698900783408">새로운 <ph name="CORS" /> 구현에서 <ph name="CORS" /> 확인 완화를 사용 설정하여 확장 프로그램이 호환되는 동작을 유지하도록 허용하고 <ph name="PRODUCT_NAME" />에서 <ph name="CORS" /> 확인 없이 지정된 헤더를 전송하도록 허용합니다.
-
-      목록이 빈 상태로 설정되어 있으면 <ph name="PRODUCT_NAME" />은(는) 호환되는 방식으로 확장 프로그램을 실행하도록 시도하고 <ph name="WEB_REQUEST_API_MANUAL" />에 설명된 것처럼 <ph name="PRODUCT_NAME" /> 79의 <ph name="API" /> 변경사항을 적용하지 않습니다.
-
-      목록이 <ph name="HTTP" /> 요청 헤더 이름을 가지도록 설정되어 있으면 <ph name="CORS" /> 검사에서 등록된 헤더를 무시하고 확장 프로그램의 완화를 사용 설정합니다.
-
-      목록이 설정되지 않으면 위에서 설명된 완화가 모두 적용되지 않습니다.
-
-      <ph name="CORS" />의 세부사항을 확인하려면 <ph name="CORS_HELP_URL" /> 페이지를 참조하세요.
-
-      이 정책은 <ph name="PRODUCT_NAME" /> 버전 82에서 삭제될 예정입니다.</translation>
 <translation id="2236488539271255289">모든 사이트에서 로컬 데이터 설정 허용 안함</translation>
 <translation id="2240879329269430151">웹사이트에서 팝업을 표시하도록 허용할지 여부를 설정할 수 있습니다. 팝업 표시는 모든 사이트에서 허용 또는 거부하도록 할 수 있습니다.
 
@@ -1372,6 +1361,7 @@
 <translation id="2872961005593481000">종료</translation>
 <translation id="2873651257716068683">기본 인쇄 페이지 크기를 덮어씁니다. 페이지 크기를 사용할 수 없는 경우 이 정책은 무시됩니다.</translation>
 <translation id="2874209944580848064">Android 앱을 지원하는 <ph name="PRODUCT_OS_NAME" /> 기기 관련 주의사항:</translation>
+<translation id="2874901846804525128">사용자가 신뢰할 수 없는 출처의 Android 앱을 사용하는 것을 방지</translation>
 <translation id="2875192972412983412">서버 프린터를 검색할 프린트 서버의 하위 집합을 지정합니다.
 
       이 정책을 사용하면 이 정책의 값과 ID가 일치하는 서버 프린터만 사용자에게 제공됩니다.
@@ -3012,6 +3002,7 @@
           true로 설정하거나 설정하지 않으면 이 사용자가 관리 대상 사용자를 생성하고 관리할 수 있습니다.</translation>
 <translation id="5369937289900051171">컬러 인쇄만</translation>
 <translation id="5370279767682621504">기본 포트가 아닌 포트에서 HTTP/0.9 지원 사용</translation>
+<translation id="5377606826822211923">사용자를 위해 신뢰할 수 없는 출처의 Android 앱 사용 제어</translation>
 <translation id="5378985487213287085">웹사이트에서 데스크톱 알림을 표시하도록 허용할지 여부를 설정할 수 있습니다. 데스크톱 알림 표시는 기본적으로 허용 또는 거부하거나 웹사이트에서 데스크톱 알림을 표시할 때마다 사용자에게 확인하도록 할 수 있습니다.
 
           이 정책을 설정하지 않은 경우 'AskNotifications' 정책이 사용되며 사용자가 설정을 변경할 수 있습니다.</translation>
@@ -3748,17 +3739,6 @@
 <translation id="6467613372414922590">관리자 권한 없이 설치된 사용자 수준의 기본 메시지 호스트를 허용합니다.</translation>
 <translation id="6468980648680553776">이 정책은 지원이 중단되었습니다. 대신 RemoteAccessHostClientDomainList를 사용하세요.</translation>
 <translation id="6473623140202114570">세이프 브라우징에서 경고를 표시하지 않는 도메인의 목록을 설정합니다.</translation>
-<translation id="6487780893361255867">새 <ph name="CORS" /> 대신 기존 <ph name="CORS" /> 구현을 사용합니다.
-
-      설정이 True로 설정되어 있으면 이전 버전과 호환되어야 하는 기존 구현이 사용됩니다.
-
-      설정이 False로 설정되어 있거나 설정되어 있지 않으면 엔터프라이즈별 호환성 문제를 일으킬 수 있는 새 구현이 사용됩니다.
-
-      이 정책은 몇 번의 기능 출시를 거치고 나면 삭제됩니다.
-
-      <ph name="CORS" />의 세부사항을 확인하려면 <ph name="CORS_HELP_URL" /> 페이지를 참조하세요.
-
-      이 정책은 <ph name="PRODUCT_NAME" /> 버전 82에서 삭제될 예정입니다.</translation>
 <translation id="6488627892044759800"><ph name="PRODUCT_NAME" />의 기본 홈페이지 유형을 구성하고 사용자가 홈페이지 환경설정을 변경하지 못하게 차단합니다. 홈페이지는 지정한 URL로 설정할 수도 있고 새 탭 페이지로 설정할 수도 있습니다.
 
           이 설정이 사용되면 홈페이지에 항상 새 탭 페이지가 사용되며 홈페이지 URL 위치는 무시됩니다.
@@ -3837,6 +3817,7 @@
       이 정책은 EnabledPlugins 및 DisabledPluginsExceptions에 의해 재정의될 수 있습니다.
 
       아 정책을 설정하지 않으면 사용자가 시스템에 설치된 플러그인 중 하드 코딩되었으며 호환되지 않거나, 오래되었거나, 위험한 플러인을 제외한 모든 플러그인을 사용할 수 있습니다.</translation>
+<translation id="6571871508154591774">카메라, 브라우저 설정 및 OS 설정 기능을 사용 중지로 구성</translation>
 <translation id="6573305661369899995">URL 제한의 외부 소스 설정</translation>
 <translation id="6583851521569686409">프린터 목록을 설정합니다.
 
@@ -3913,6 +3894,7 @@
 <translation id="6731757988219967594">최상위 사이트(삽입된 iframe 제외)에 성인용 콘텐츠 필터링을 적용함</translation>
 <translation id="6734521799274931721">Chrome OS의 네트워크 파일 공유 가능 여부를 제어합니다.</translation>
 <translation id="6735701345096330595">언어 맞춤법 검사 강제 사용</translation>
+<translation id="6737677282967014160">사용자가 신뢰할 수 없는 출처의 Android 앱을 사용하도록 허용</translation>
 <translation id="6757613329154374267">백업 및 복원 사용 설정됨</translation>
 <translation id="6758659208493449452">이 정책은 고급 보호 프로그램에 등록한 사용자에게 추가 보호를 제공할지 결정합니다. 추가 기능 중 일부를 사용하려면 Google과 데이터를 공유해야 합니다. 예를 들어, 고급 보호 사용자가 멀웨어 검사를 위해 다운로드 항목을 Google에 전송할 수 있습니다. 정책을 True로 설정하거나 설정하지 않으면 등록된 사용자에게 추가 보호가 제공됩니다. False로 설정하면 고급 보호 사용자에게 표준 소비자 기능만 제공됩니다.</translation>
 <translation id="6762235610019366960"><ph name="PRODUCT_NAME" />에서의 전체 탭 프로모션 및/또는 교육용 콘텐츠 표시를 제어할 수 있습니다.
@@ -4351,7 +4333,6 @@
       </translation>
 <translation id="7372831798009983116">자동 클릭 접근성 기능 사용</translation>
 <translation id="7373200034079131670">Android 또는 VM이 시작되었을 때 사용자가 로그아웃하면 재부팅합니다.</translation>
-<translation id="737655323154569539">인쇄 페이지 크기를 제한합니다. 정책이 설정되어 있지 않거나 비어 있으면 제한이 없는 것으로 간주됩니다.</translation>
 <translation id="7382191643394429934">배경 그래픽이 있을 때와 없을 때 모두 인쇄를 허용합니다.</translation>
 <translation id="7389872682701720082">이 설정을 사용하면 항상 최신 플러그인이 실행됩니다.
 
@@ -4455,6 +4436,13 @@
       URL 패턴의 형식은 https://www.chromium.org/administrators/url-blacklist-filter-format에 설명되어 있는 'URLBlacklist' 정책과 동일합니다.
       </translation>
 <translation id="7566878661979235378">SAML 로그인 인증 유형</translation>
+<translation id="7567373982693549834">이 정책은 Google Play 스토어 외의 신뢰할 수 없는 출처에서 다운로드한 Android 앱의 사용을 사용자별로 제어합니다.
+
+      이 정책의 값을 설정하지 않으면 기능이 허용되지 않는 것으로 간주됩니다.
+
+      사용자의 기기가 관리된다면 이 기능의 사용 가능 여부는 상응하는 기기 정책에 따라 추가로 달라집니다.
+
+      사용자의 기기가 관리되지 않는다면 이 기능의 사용 가능 여부는 사용자가 기기 소유자인지에 따라 추가로 달라집니다.</translation>
 <translation id="757395965347379751">이 설정이 사용 설정되었다면 <ph name="PRODUCT_NAME" />은(는) 로컬에 설치된 CA 인증서를 성공적으로 확인하고 체인을 구축하는 한 SHA-1 서명 인증서를 허용합니다.
 
       이 정책은 SHA-1 서명을 허용하는 운영체제 인증서 확인 스택에 따라 다릅니다. OS 업데이트가 SHA-1 인증서의 OS 처리를 변경하는 경우 이 정책은 더 이상 유효하지 않을 수 있습니다. 또한 이 정책은 기업에게 SHA-1에서 전환할 시간을 부여하는 임시 해결 방법으로 활용됩니다. 이 정책은 2019년 1월 1일쯤 삭제될 예정입니다.
@@ -4648,6 +4636,7 @@
 
           참고: <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" />이(가) 지정된 경우 이 정책을 재정의합니다.</translation>
 <translation id="7846952520291088817">WebRTC ICE 후보에 노출된 로컬 IP의 URL</translation>
+<translation id="7848641140449742406">OS 설정</translation>
 <translation id="7858404742201086014">이 설정을 사용하면 오래된 플러그인이 표준 플러그인으로 사용됩니다.
 
       이 설정을 사용 중지하면 오래된 플러그인은 사용할 수 없으며 사용자에게 실행 권한을 요청하는 메시지가 표시되지 않습니다
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 9f49051..5130efd1 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -365,7 +365,6 @@
 <translation id="1523774894176285446">Alternatieve browser die wordt gestart voor geconfigureerde websites.</translation>
 <translation id="152657506688053119">Lijst met alternatieve URL's voor de standaardzoekprovider</translation>
 <translation id="1530812829012954197">De volgende URL-patronen altijd verwerken in de hostbrowser</translation>
-<translation id="1541170838458414064">Grootte van afdrukpagina beperken</translation>
 <translation id="1553532014072799546">Witte lijst voor tijdslimieten per app</translation>
 <translation id="1553684822621013552">Als dit beleid is ingesteld op 'True', wordt ARC ingeschakeld voor de gebruiker (onderhevig aan extra controles van de beleidsinstellingen; ARC is nog steeds niet beschikbaar als de kortstondige modus of toegang tot meerdere accounts is ingeschakeld in de huidige gebruikerssessie).
 
@@ -851,17 +850,6 @@
       Dit beleid is ook van toepassing op componentextensies zoals de Hangout Services-extensie.</translation>
 <translation id="2223598546285729819">Standaardinstelling voor meldingen</translation>
 <translation id="2231817271680715693">Browsegeschiedenis importeren uit standaardbrowser bij eerste uitvoering</translation>
-<translation id="2234855698900783408">Schakel <ph name="CORS" />-controlebeperkingen voor de nieuwe <ph name="CORS" />-implementatie in, waardoor extensies geschikt gedrag kunnen behouden en <ph name="PRODUCT_NAME" /> toestemming heeft om opgegeven headers te sturen zonder <ph name="CORS" />-controle.
-
-      Als deze lijst leeg is, probeert <ph name="PRODUCT_NAME" /> extensies op geschikte manieren uit te voeren en worden er geen <ph name="API" />-wijzingen geïntroduceerd voor <ph name="PRODUCT_NAME" /> 79, zoals uitgelegd in <ph name="WEB_REQUEST_API_MANUAL" />.
-
-      Als deze lijst is ingesteld voor headernamen van <ph name="HTTP" />-verzoeken, negeert de <ph name="CORS" />-controle de vermelde headers om de beperking voor extensies in te schakelen.
-
-      Als deze lijst niet is ingesteld, worden beide beperkingen (zoals hierboven uitgelegd) niet toegepast.
-
-      Ga naar <ph name="CORS_HELP_URL" /> voor meer informatie over <ph name="CORS" />.
-
-      Dit beleid wordt verwijderd in <ph name="PRODUCT_NAME" /> versie 82.</translation>
 <translation id="2236488539271255289">Niet toestaan dat sites lokaal gegevens instellen</translation>
 <translation id="2240879329269430151">Hiermee kun je instellen of websites pop-ups mogen weergeven. Het weergeven van pop-ups kan worden toegestaan voor alle websites of worden geweigerd voor alle websites.
 
@@ -3713,17 +3701,6 @@
 <translation id="6467613372414922590">Hosts voor native berichten op gebruikersniveau toestaan (geïnstalleerd zonder beheerdersrechten)</translation>
 <translation id="6468980648680553776">Dit beleid is beëindigd. Gebruik in plaats daarvan RemoteAccessHostClientDomainList.</translation>
 <translation id="6473623140202114570">Configureer de lijst met domeinen waar Safe Browsing geen waarschuwingen activeert.</translation>
-<translation id="6487780893361255867">Gebruik de verouderde <ph name="CORS" />-implementatie in plaats van de nieuwe <ph name="CORS" />.
-
-      Als deze instelling is ingesteld op True, wordt de verouderde implementatie gebruikt die zou moeten werken met eerdere versies.
-
-      Als deze instelling is ingesteld op False of niet is ingesteld, wordt de nieuwe implementatie gebruikt die mogelijk ondernemingsspecifieke compatibiliteitsproblemen kan veroorzaken.
-
-      Dit beleid wordt na een aantal mijlpalen verwijderd.
-
-      Ga naar <ph name="CORS_HELP_URL" /> voor meer informatie over <ph name="CORS" />.
-
-      Dit beleid wordt verwijderd in <ph name="PRODUCT_NAME" /> versie 82.</translation>
 <translation id="6488627892044759800">Hiermee configureer je het type standaardhomepage in <ph name="PRODUCT_NAME" /> en voorkom je dat gebruikers de voorkeuren voor de homepage wijzigen. De homepage kan worden ingesteld op een URL of op de pagina 'Nieuw tabblad'.
 
           Als je deze instelling inschakelt, wordt altijd de pagina 'Nieuw tabblad' gebruikt voor de homepage en wordt de URL voor de homepage genegeerd.
@@ -4313,7 +4290,6 @@
       </translation>
 <translation id="7372831798009983116">De toegankelijkheidsfunctie voor automatisch klikken inschakelen</translation>
 <translation id="7373200034079131670">Opnieuw opstarten bij uitloggen gebruiker als Android of een VM is gestart.</translation>
-<translation id="737655323154569539">Hiermee beperk je de grootte van de afdrukpagina. Als er geen beleid is ingesteld of de instelling leeg is, gelden er geen beperkingen.</translation>
 <translation id="7382191643394429934">Afdrukken zowel met als zonder achtergrondbeelden toestaan</translation>
 <translation id="7389872682701720082">Als je deze instelling inschakelt, worden plug-ins altijd uitgevoerd als ze niet verouderd zijn.
 
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 2714a97e..7fe7df5 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -361,7 +361,6 @@
 <translation id="1523774894176285446">Navegador alternativo que será iniciado com sites configurados.</translation>
 <translation id="152657506688053119">Lista de URLs alternativos para o provedor de pesquisa padrão</translation>
 <translation id="1530812829012954197">Sempre renderizar os seguintes padrões de URL no navegador do host</translation>
-<translation id="1541170838458414064">Restringir o tamanho da página de impressão</translation>
 <translation id="1553532014072799546">Autorização de limites de tempo por app</translation>
 <translation id="1553684822621013552">Quando esta política está definida como "true", o recurso ARC fica ativado para o usuário
       (sujeito a verificações de configuração adicionais de política - O ARC ainda estará
@@ -841,17 +840,6 @@
       Esta política também se aplica a extensões de componentes, como a extensão Serviços do Hangout.</translation>
 <translation id="2223598546285729819">Configuração padrão de notificações</translation>
 <translation id="2231817271680715693">Importar histórico de navegação do navegador padrão na primeira execução</translation>
-<translation id="2234855698900783408">Ative as mitigações de verificação de <ph name="CORS" /> na nova implementação de <ph name="CORS" />, permitindo que as extensões mantenham um comportamento compatível e permitindo que o <ph name="PRODUCT_NAME" /> envie cabeçalhos especificados sem verificações de <ph name="CORS" />.
-
-      Se esta lista for definida como vazia, o <ph name="PRODUCT_NAME" /> tentará executar extensões de maneiras compatíveis e não introduzirá mudanças de <ph name="API" /> para o <ph name="PRODUCT_NAME" /> 79, conforme explicado em <ph name="WEB_REQUEST_API_MANUAL" />.
-
-      Se esta lista for definida para ter nomes de cabeçalho de solicitação <ph name="HTTP" />, a inspeção <ph name="CORS" /> ignorará os cabeçalhos listados e ativará a mitigação para extensões.
-
-      Se esta lista não for definida, nenhuma das mitigações explicadas acima será aplicada.
-
-      Para ver detalhes sobre <ph name="CORS" />, acesse: <ph name="CORS_HELP_URL" />.
-
-      Observe que esta política será removida na versão 82 do <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2236488539271255289">Não permitir que nenhum site defina dados locais</translation>
 <translation id="2240879329269430151">Permite que você defina se websites estão autorizados a exibir pop-ups. A exibição de pop-ups pode ser permitida ou negada para todos os websites. Se esta política for deixada sem definição, a política "BlockPopups" será utilizada, mas pode ser modificada pelo usuário.</translation>
 <translation id="2241498944622759244">Esse recurso nunca foi lançado, por isso a política está obsoleta. Se esta política for definida como verdadeira ou não for definida, páginas relacionadas à atual serão sugeridas no <ph name="PRODUCT_NAME" />.
@@ -3641,17 +3629,6 @@
 <translation id="6467613372414922590">Permitir hosts de mensagens nativas no nível do usuário (instalados sem permissão do administrador)</translation>
 <translation id="6468980648680553776">O uso desta política foi suspenso. Use RemoteAccessHostClientDomainList.</translation>
 <translation id="6473623140202114570">Configure a lista de domínios em que a política Navegação segura não acionará avisos.</translation>
-<translation id="6487780893361255867">Use a implementação legada de <ph name="CORS" /> em vez do novo <ph name="CORS" />.
-
-      Se esta configuração for definida como verdadeira, a implementação legada será usada e precisará ser compatível com versões anteriores.
-
-      Se esta configuração for definida como falsa ou não for definida, a nova implementação será usada e poderá causar possíveis problemas de compatibilidade específicos da empresa.
-
-      Esta política será removida depois de alguns marcos.
-
-      Para ver detalhes sobre <ph name="CORS" />, acesse: <ph name="CORS_HELP_URL" />.
-
-      Observe que esta política será removida na versão 82 do <ph name="PRODUCT_NAME" />.</translation>
 <translation id="6488627892044759800">Configura o tipo de página inicial padrão no <ph name="PRODUCT_NAME" /> e evita que os usuários alterem as preferências de página inicial. A página inicial pode ser definida como um URL especificado por você ou como a página nova guia.
 
           Se você ativar essa configuração, a página nova guia será sempre usada como página inicial, e o local do URL da página inicial será ignorado.
@@ -4230,7 +4207,6 @@
       </translation>
 <translation id="7372831798009983116">Ativar o recurso de acessibilidade de clique automático</translation>
 <translation id="7373200034079131670">Reinicializar quando o usuário sair se o Android ou uma VM tiver sido iniciada.</translation>
-<translation id="737655323154569539">Restringe o tamanho da página de impressão. Se a política não for definida ou estiver em branco, não haverá restrição.</translation>
 <translation id="7382191643394429934">Permitir a impressão com e sem gráficos de segundo plano</translation>
 <translation id="7389872682701720082">Se você ativar esta configuração, plug-ins que não estiverem obsoletos sempre serão executados.
 
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index c9504da..4f9681d 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -362,7 +362,6 @@
 <translation id="1523774894176285446">Запуск альтернативного браузера для сайтов из списка</translation>
 <translation id="152657506688053119">Список дополнительных URL для поисковой системы по умолчанию</translation>
 <translation id="1530812829012954197">Всегда обрабатывать следующие шаблоны URL в основном браузере</translation>
-<translation id="1541170838458414064">Ограничить размер страницы для печати</translation>
 <translation id="1553532014072799546">Белый список для ограничения времени использования отдельных приложений</translation>
 <translation id="1553684822621013552">Если правило применяется (задано значение true), для пользователя включается ARC.
       Необходима дополнительная проверка. ARC недоступно, если 
@@ -388,6 +387,7 @@
 <translation id="1561424797596341174">Позволяет изменить правила сборок для отладки хоста удаленного доступа</translation>
 <translation id="1561967320164410511">U2F и расширения для персонального подтверждения</translation>
 <translation id="1583248206450240930">Использовать <ph name="PRODUCT_FRAME_NAME" /> по умолчанию</translation>
+<translation id="1588240398285670601">Настройки браузера</translation>
 <translation id="1599424828227887013">Включить изоляцию для определенных сайтов на устройствах Android</translation>
 <translation id="1608755754295374538">URL, которым доступ к аудиозаписывающим устройствам предоставляется без запроса</translation>
 <translation id="1615221548356595305">Разрешить повторное использование соединений HTTP/2 для этих хостов, даже если применяются сертификаты клиентов</translation>
@@ -846,17 +846,6 @@
       Правило также применяется к расширениям компонентов, например Hangout Services.</translation>
 <translation id="2223598546285729819">Настройка уведомлений по умолчанию</translation>
 <translation id="2231817271680715693">Импорт истории просмотров из браузера, используемого по умолчанию, при первом запуске</translation>
-<translation id="2234855698900783408">Позволяет смягчить проверки <ph name="CORS" /> в новой реализации <ph name="CORS" />, благодаря чему расширения продолжают работать в совместимом режиме, а <ph name="PRODUCT_NAME" /> может отправлять указанные заголовки без проверок <ph name="CORS" />.
-
-      Если установлен пустой список, <ph name="PRODUCT_NAME" /> пробует запустить расширения в совместимом режиме и не вносит изменения в <ph name="API" /> для <ph name="PRODUCT_NAME" /> 79, как описано на странице <ph name="WEB_REQUEST_API_MANUAL" />.
-
-      Если в списке заданы названия заголовков запроса <ph name="HTTP" />, то эти заголовки будут пропущены при проверке <ph name="CORS" />. Такая же смягченная проверка будет применяться и для расширений.
-
-      Если значение для списка не задано, при проверке не будет применяться ни одно из описанных выше смягчений.
-
-      Подробнее о технологии <ph name="CORS" />: <ph name="CORS_HELP_URL" />.
-
-      Правило будет удалено из <ph name="PRODUCT_NAME" /> 82.</translation>
 <translation id="2236488539271255289">Запретить сайтам сохранять данные на компьютер</translation>
 <translation id="2240879329269430151">Позволяет запретить или разрешить всплывающие окна на всех сайтах. Если это правило не настроено, действует правило BlockPopups и пользователи могут самостоятельно изменить его значение.</translation>
 <translation id="2241498944622759244">Эта функция не была запущена, поэтому правило не поддерживается. Если задано значение True или правило не настроено, пользователю <ph name="PRODUCT_NAME" /> будут предлагаться страницы, похожие на уже открытую.
@@ -1349,6 +1338,7 @@
 <translation id="2872961005593481000">Завершить работу</translation>
 <translation id="2873651257716068683">Переопределяет размер страницы для печати по умолчанию. Если размер страницы недоступен, это правило не действует.</translation>
 <translation id="2874209944580848064">Примечание для устройств на платформе <ph name="PRODUCT_OS_NAME" />, поддерживающих приложения Android.</translation>
+<translation id="2874901846804525128">Запретить использование приложений для Android из ненадежных источников</translation>
 <translation id="2875192972412983412">Определяет набор серверов печати, на которые будут отправляться запросы о принтерах.
 
       Если правило включено, пользователь может работать только с теми серверными принтерами, идентификаторы которых в нем прописаны.
@@ -2948,6 +2938,7 @@
           Если задано значение "true" или значение не задано, этот пользователь сможет создавать контролируемые профили и управлять ими.</translation>
 <translation id="5369937289900051171">Только цветная печать</translation>
 <translation id="5370279767682621504">Включить поддержку HTTP/0.9 для портов, не заданных по умолчанию</translation>
+<translation id="5377606826822211923">Контроль за использованием приложений для Android из ненадежных источников</translation>
 <translation id="5378985487213287085">Позволяет указать, каким сайтам разрешено отображать уведомления на рабочем столе. По умолчанию можно разрешить показ уведомлений, запретить его или настроить вывод запроса пользователю каждый раз, когда сайт должен показать уведомление. Если это правило не настроено, действует правило AskNotifications и пользователи могут самостоятельно изменить его значение.</translation>
 <translation id="5380329473151894945">Определяет режим по умолчанию для большого курсора на экране входа.
 
@@ -3672,17 +3663,6 @@
 <translation id="6467613372414922590">Разрешить установку хостов обмена сообщениями с оригинальными приложениями на уровне пользователей (без разрешения администратора)</translation>
 <translation id="6468980648680553776">Правило больше не поддерживается. Вместо него используется правило RemoteAccessHostClientDomainList.</translation>
 <translation id="6473623140202114570">Настроить список доменов, в которых Безопасный просмотр не будет показывать уведомления об угрозах.</translation>
-<translation id="6487780893361255867">Позволяет назначить приоритет устаревшей версии <ph name="CORS" /> перед новой реализацией <ph name="CORS" />.
-
-      Если задано значение True, используется устаревшая реализация, которая должна быть совместима с предыдущими версиями.
-
-      Если задано значение False или правило не настроено, используется новая реализация. При этом могут возникнуть проблемы совместимости с некоторыми браузерами.
-
-      Правило будет удалено после нескольких крупных обновлений.
-
-      Подробнее о технологии <ph name="CORS" />: <ph name="CORS_HELP_URL" />.
-
-      Правило будет удалено из <ph name="PRODUCT_NAME" /> 82.</translation>
 <translation id="6488627892044759800">Настраивает тип главной страницы по умолчанию в <ph name="PRODUCT_NAME" /> и запрещает пользователям менять ее настройки. В качестве главной страницы можно выбрать определенный URL или страницу быстрого доступа.
 
           Если этот параметр включен, в качестве главной страницы всегда используется страница быстрого доступа, а заданный URL главной страницы игнорируется.
@@ -3761,6 +3741,7 @@
       Примечание. Настройки этого правила могут быть переопределены при помощи EnabledPlugins и DisabledPluginsExceptions.
 
       Если правило не настроено, пользователям разрешается использовать любые установленные в системе плагины, за исключением несовместимых (хотя и заданных в коде), а также устаревших и вредоносных.</translation>
+<translation id="6571871508154591774">Отключить камеру, настройки браузера и доступ к настройкам ОС</translation>
 <translation id="6573305661369899995">Установить внешний источник ограничений для URL-адресов</translation>
 <translation id="6583851521569686409">Позволяет настроить список принтеров.
 
@@ -3836,6 +3817,7 @@
 <translation id="6731757988219967594">Фильтровать сайты верхнего уровня (кроме встроенных окон iframe), содержащие контент для взрослых</translation>
 <translation id="6734521799274931721">Управление функцией совместного доступа к файлам в сети для Chrome OS</translation>
 <translation id="6735701345096330595">Принудительная проверка правописания для определенных языков</translation>
+<translation id="6737677282967014160">Разрешить использование приложений для Android из ненадежных источников</translation>
 <translation id="6757613329154374267">Включить резервное копирование и восстановление</translation>
 <translation id="6758659208493449452">Это правило определяет, получают ли пользователи, зарегистрированные в программе Дополнительной защиты, доступ к расширенным функциям безопасности. Некоторые из этих функций предполагают отправку сведений в Google. Например, пользователи, зарегистрированные в программе Дополнительной защиты, могут отправлять скачиваемые файлы в Google для проверки на наличие вредоносного ПО. Если правило не настроено или задано значение True, пользователи, зарегистрированные в программе Дополнительной защиты, будут получать доступ к расширенным функциям безопасности. Если указано значение False, пользователи, зарегистрированные в программе Дополнительной защиты, будут получать доступ только к стандартным функциям.</translation>
 <translation id="6762235610019366960">Устанавливает, как в <ph name="PRODUCT_NAME" /> показываются коммерческие и образовательные материалы, полностью занимающие вкладку.
@@ -4259,7 +4241,6 @@
       </translation>
 <translation id="7372831798009983116">Включить автоматическое нажатие (специальная возможность)</translation>
 <translation id="7373200034079131670">Перезагружать устройство после выхода пользователя, когда запущена виртуальная машина или система Android.</translation>
-<translation id="737655323154569539">Ограничивает размер страницы для печати. Если правило не задано, ограничение не действует.</translation>
 <translation id="7382191643394429934">Разрешить оба режима печати: с фоновыми цветами и изображениями и без них</translation>
 <translation id="7389872682701720082">Если параметр включен, актуальные плагины всегда выполняются.
 
@@ -4363,6 +4344,13 @@
       Шаблоны URL имеют тот же формат, который использует правило URLBlacklist. Подробная информация о формате приведена в этом документе: https://www.chromium.org/administrators/url-blacklist-filter-format.
       </translation>
 <translation id="7566878661979235378">Тип аутентификации при входе через SAML</translation>
+<translation id="7567373982693549834">Это правило определяет, могут ли конкретные пользователи работать с приложениями для Android из ненадежных источников (не из Google Play).
+
+      Если правило не задано, такими приложениями пользоваться нельзя.
+
+      Если устройство пользователя является управляемым, то возможность работы с приложениями из указанной категории также зависит от заданных для устройства правил.
+
+      Если устройство не находится под управлением, то возможность работы с приложениями из указанной категории также зависит от того, является ли пользователь владельцем устройства.</translation>
 <translation id="757395965347379751">Когда эта настройка включена, <ph name="PRODUCT_NAME" /> разрешает использовать сертификаты с подписью SHA-1, если они успешно прошли проверку и связаны с локальным сертификатом ЦС.
 
       Обратите внимание, что это правило зависит от стека проверки сертификата операционной системы, разрешающего подписи SHA-1. Если обновление ОС изменит обработку сертификатов SHA-1, это правило может перестать действовать. Кроме того, настоящее правило задумано как временное решение: оно дает предприятиям дополнительное время на отказ от SHA-1. Правило будет удалено ориентировочно 1 января 2019 года.
@@ -4551,6 +4539,7 @@
 
           Примечание. Если настроено правило "<ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" />", его значение будет иметь приоритет над этим правилом.</translation>
 <translation id="7846952520291088817">URL, для которых локальные IP-адреса указываются в ICE-кандидатах WebRTC</translation>
+<translation id="7848641140449742406">Настройки ОС</translation>
 <translation id="7858404742201086014">Если параметр включен, устаревшие плагины используются как обычные.
 
       Если параметр отключен, устаревшие плагины не используются и запрос о разрешении их запуска не появляется.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index e83e495..05637e0f 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -364,7 +364,6 @@
 <translation id="1523774894176285446">เบราว์เซอร์สำรองที่จะเปิดสำหรับเว็บไซต์ที่กำหนดค่า</translation>
 <translation id="152657506688053119">รายการ URL สำรองของผู้ให้บริการค้นหาเริ่มต้น</translation>
 <translation id="1530812829012954197">แสดงรูปแบบ URL ต่อไปนี้เสมอในเบราว์เซอร์โฮสต์</translation>
-<translation id="1541170838458414064">จำกัดขนาดหน้าที่พิมพ์</translation>
 <translation id="1553532014072799546">รายการที่อนุญาตพิเศษสำหรับการจำกัดเวลาต่อแอป</translation>
 <translation id="1553684822621013552">เมื่อตั้งค่านโยบายเป็น True ระบบจะเปิดใช้ ARC สำหรับผู้ใช้
       (ขึ้นอยู่กับการตรวจสอบการตั้งค่านโยบายเพิ่มเติม ARC จะยังไม่พร้อมใช้งานถ้าเปิดใช้โหมดชั่วคราวหรือการลงชื่อเข้าสู่ระบบพร้อมกันหลายบัญชีในเซสชันของผู้ใช้ปัจจุบัน)
@@ -388,6 +387,7 @@
 <translation id="1561424797596341174">การลบล้างนโยบายสำหรับเวอร์ชันการแก้ปัญหาของโฮสต์การเข้าถึงระยะไกล</translation>
 <translation id="1561967320164410511">U2F พร้อมส่วนขยายสำหรับการรับรองแต่ละรายการ</translation>
 <translation id="1583248206450240930">ใช้ <ph name="PRODUCT_FRAME_NAME" /> โดยค่าเริ่มต้น</translation>
+<translation id="1588240398285670601">การตั้งค่าเบราว์เซอร์</translation>
 <translation id="1599424828227887013">เปิดใช้การแยกเว็บไซต์สำหรับต้นทางที่เจาะจงในอุปกรณ์ Android</translation>
 <translation id="1608755754295374538">URL ที่จะได้รับสิทธิ์การเข้าถึงอุปกรณ์จับเสียงโดยไม่ต้องแจ้ง</translation>
 <translation id="1615221548356595305">อนุญาตการรวมการเชื่อมต่อ HTTP/2 สำหรับโฮสต์เหล่านี้แม้จะมีการใช้ใบรับรองไคลเอ็นต์</translation>
@@ -839,17 +839,6 @@
       นโยบายนี้มีผลกับส่วนขยายคอมโพเนนต์ด้วย เช่น ส่วนขยายบริการ Hangouts</translation>
 <translation id="2223598546285729819">การตั้งค่าการแจ้งเตือนเริ่มต้น</translation>
 <translation id="2231817271680715693">นำเข้าประวัติการเรียกดูจากเบราว์เซอร์เริ่มต้นในการเรียกใช้งานครั้งแรก</translation>
-<translation id="2234855698900783408">เปิดใช้การลดการตรวจสอบ <ph name="CORS" /> ในการนำ <ph name="CORS" /> ใหม่ไปใช้ เพื่อให้ส่วนขยายยังคงทำงานร่วมกันได้ และให้ <ph name="PRODUCT_NAME" /> ส่งส่วนหัวที่ระบุโดยไม่ต้องตรวจสอบ <ph name="CORS" />
-
-      หากตั้งค่ารายการนี้ให้ว่างเปล่า <ph name="PRODUCT_NAME" /> จะเรียกใช้ส่วนขยายในลักษณะการทำงานที่เข้ากันได้ และจะไม่แสดงการเปลี่ยนแปลง <ph name="API" /> สำหรับ <ph name="PRODUCT_NAME" /> 79 ดังที่อธิบายไว้ใน <ph name="WEB_REQUEST_API_MANUAL" />
-
-      หากตั้งค่ารายการนี้ให้มีชื่อส่วนหัวของคำขอ <ph name="HTTP" /> การตรวจสอบ <ph name="CORS" /> จะเพิกเฉยต่อส่วนหัวที่อยู่ในรายการ พร้อมทั้งเปิดใช้การลดการตรวจสอบสำหรับส่วนขยาย
-
-      หากไม่ได้ตั้งค่ารายการนี้ไว้ ระบบจะไม่บังคับใช้การลดการตรวจสอบทั้ง 2 รายการที่อธิบายไว้ด้านบน
-
-      ดูรายละเอียดเกี่ยวกับ <ph name="CORS" /> ได้ที่ <ph name="CORS_HELP_URL" />
-
-      โปรดทราบว่า เราจะนำนโยบายนี้ออกใน <ph name="PRODUCT_NAME" /> เวอร์ชัน 82</translation>
 <translation id="2236488539271255289">ไม่อนุญาตให้ไซต์ใดๆ ตั้งค่าข้อมูลในตัวเครื่อง</translation>
 <translation id="2240879329269430151">ช่วยให้คุณกำหนดว่าเว็บไซต์จะได้รับอนุญาตให้แสดงป๊อปอัปหรือไม่ การแสดงป๊อปอัปสามารถจะได้รับอนุญาตสำหรับเว็บไซต์ทั้งหมดหรือปฏิเสธสำหรับเว็บไซต์ทั้งหมดก็ได้ หากนโยบายนี้ไม่มีการตั้งค่าไว้ จะมีการใช้ "BlockPopups" และผู้ใช้สามารถที่จะเปลี่ยนแปลงได้</translation>
 <translation id="2241498944622759244">ไม่เคยมีการเปิดตัวฟีเจอร์นี้ เราจึงเลิกใช้งานนโยบายนี้ หากตั้งค่านโยบายนี้เป็น "จริง" หรือ "ไม่ได้ตั้งค่า" <ph name="PRODUCT_NAME" /> จะแนะนำหน้าที่เกี่ยวข้องกับหน้าปัจจุบัน
@@ -1342,6 +1331,7 @@
 <translation id="2872961005593481000">ปิด</translation>
 <translation id="2873651257716068683">ลบล้างขนาดหน้าการพิมพ์เริ่มต้น ระบบจะเพิกเฉยนโยบายนี้หากไม่มีขนาดหน้าให้เลือก</translation>
 <translation id="2874209944580848064">หมายเหตุสำหรับอุปกรณ์ <ph name="PRODUCT_OS_NAME" /> ที่รองรับแอป Android:</translation>
+<translation id="2874901846804525128">ป้องกันไม่ให้ผู้ใช้ใช้แอป Android จากแหล่งที่มาที่ไม่น่าเชื่อถือ</translation>
 <translation id="2875192972412983412">ระบุเซิร์ฟเวอร์การพิมพ์ส่วนหนึ่งที่จะใช้สำหรับค้นหาเครื่องพิมพ์ในเซิร์ฟเวอร์
 
       หากใช้นโยบายนี้ จะมีเพียงเครื่องพิมพ์ในเซิร์ฟเวอร์ที่มี ID ตรงกับค่าในนโยบายนี้เท่านั้นที่พร้อมใช้งานสำหรับผู้ใช้
@@ -2934,6 +2924,7 @@
           หากตั้งค่าเป็นจริงหรือไม่ได้กำหนดค่า ผู้ใช้รายนี้จะสามารถสร้างและจัดการผู้ใช้ภายใต้การดูแลได้</translation>
 <translation id="5369937289900051171">การพิมพ์สีเท่านั้น</translation>
 <translation id="5370279767682621504">เปิดใช้การรองรับ HTTP/0.9 บนพอร์ตที่ไม่ใช่ค่าเริ่มต้น</translation>
+<translation id="5377606826822211923">ควบคุมการใช้แอป Android จากแหล่งที่มาที่ไม่น่าเชื่อถือสำหรับผู้ใช้แต่ละราย</translation>
 <translation id="5378985487213287085">ช่วยให้คุณกำหนดว่าเว็บไซต์จะได้รับอนุญาตให้แสดงการแจ้งเตือนเดสก์ท็อปหรือไม่ การแสดงการแจ้งเตือนเดสก์ท็อปอาจจะได้รับอนุญาตโดยค่าเริ่มต้น ปฏิเสธโดยค่าเริ่มต้น หรือผู้ใช้อาจได้รับคำถามทุกครั้งที่เว็บไซต์ต้องการจะแสดงการแจ้งเตือนเดสก์ท็อป หากนโยบายนี้ไม่มีการตั้งค่าไว้ จะมีการใช้ "AskNotifications" และผู้ใช้สามารถจะเปลี่ยนแปลงได้</translation>
 <translation id="5380329473151894945">ตั้งค่าสถานะเริ่มต้นของฟีเจอร์การช่วยเหลือพิเศษด้วยเคอร์เซอร์ขนาดใหญ่ในหน้าจอการเข้าสู่ระบบ
 
@@ -3646,17 +3637,6 @@
 <translation id="6467613372414922590">อนุญาตให้ใช้โฮสต์การรับส่งข้อความดั้งเดิมระดับผู้ใช้ (ติดตั้งโดยไม่มีสิทธิ์ของผู้ดูแลระบบ)</translation>
 <translation id="6468980648680553776">นโยบายนี้เลิกใช้งานไปแล้ว โปรดใช้ RemoteAccessHostClientDomainList แทน</translation>
 <translation id="6473623140202114570">กำหนดค่ารายการโดเมนที่ Safe Browsing จะไม่เรียกให้คำเตือนแสดง</translation>
-<translation id="6487780893361255867">ควรใช้การใช้งาน <ph name="CORS" /> เดิมมากกว่า <ph name="CORS" /> ใหม่
-
-      หากตั้งค่านี้เป็น "จริง" ระบบจะใช้การใช้งานเดิมซึ่งควรจะเข้ากันได้กับเวอร์ชันก่อนหน้า
-
-      หากตั้งค่าเป็น "เท็จ" หรือไม่ได้ตั้งค่า การใช้งานใหม่อาจก่อให้เกิดปัญหาด้านความเข้ากันได้เฉพาะสำหรับองค์กร
-
-      เราจะนำนโยบายนี้ออกหลังจากเวลาผ่านไประยะหนึ่ง
-
-      ดูรายละเอียดเกี่ยวกับ <ph name="CORS" /> ได้ที่ <ph name="CORS_HELP_URL" />
-
-      โปรดทราบว่า เราจะนำนโยบายนี้ออกใน <ph name="PRODUCT_NAME" /> เวอร์ชัน 82</translation>
 <translation id="6488627892044759800">กำหนดประเภทหน้าแรกเริ่มต้นใน <ph name="PRODUCT_NAME" /> และป้องกันไม่ให้ผู้ใช้เปลี่ยนค่ากำหนดหน้าแรก ตั้งค่าหน้าแรกเป็น URL ที่คุณระบุหรือตั้งค่าเป็นหน้าแท็บใหม่
 
           หากคุณเปิดใช้การตั้งค่านี้ ระบบจะใช้หน้าแท็บใหม่เป็นหน้าแรกเสมอ และจะเพิกเฉยต่อตำแหน่ง URL หน้าแรก
@@ -3735,6 +3715,7 @@
       โปรดทราบว่า EnabledPlugins และ DisabledPluginsExceptions ลบล้างนโยบายนี้ได้
 
       หากไม่ได้ตั้งค่านโยบายนี้ ผู้ใช้จะใช้ปลั๊กอินใดก็ตามที่ติดตั้งไว้ในระบบได้ ยกเว้นปลั๊กอินที่มีฮาร์ดโค้ดที่เข้ากันไม่ได้ ล้าสมัย หรือเป็นอันตราย</translation>
+<translation id="6571871508154591774">ปิดใช้การกำหนดค่ากล้อง เบราว์เซอร์ และการตั้งค่าระบบปฏิบัติการ</translation>
 <translation id="6573305661369899995">ตั้งค่าแหล่งที่มาภายนอกของข้อจำกัด URL</translation>
 <translation id="6583851521569686409">กำหนดค่ารายการเครื่องพิมพ์
 
@@ -3810,6 +3791,7 @@
 <translation id="6731757988219967594">กรองเว็บไซต์ระดับบนสุด (แต่ไม่กรอง iframe ที่ฝังไว้) ที่มีเนื้อหาสำหรับผู้ใหญ่</translation>
 <translation id="6734521799274931721">ควบคุมพื้นที่แชร์ไฟล์ของเครือข่ายเพื่อความพร้อมใช้งานของ ChromeOS</translation>
 <translation id="6735701345096330595">บังคับให้เปิดใช้การตรวจการสะกดของภาษาต่างๆ</translation>
+<translation id="6737677282967014160">อนุญาตให้ผู้ใช้ใช้แอป Android จากแหล่งที่มาที่ไม่น่าเชื่อถือ</translation>
 <translation id="6757613329154374267">การสำรองและกู้คืนข้อมูลเปิดใช้อยู่</translation>
 <translation id="6758659208493449452">นโยบายนี้ควบคุมว่าผู้ใช้ที่ลงทะเบียนในโปรแกรมการปกป้องขั้นสูงจะได้รับการปกป้องเพิ่มเติมหรือไม่ บางฟีเจอร์เหล่านี้อาจมีการแชร์ข้อมูลกับ Google (เช่น ผู้ใช้การปกป้องขั้นสูงจะส่งไฟล์ที่ดาวน์โหลดไปให้ Google สแกนหามัลแวร์ได้) หากตั้งค่าเป็น "จริง" หรือไม่ได้ตั้งค่า ผู้ใช้ที่ลงทะเบียนจะได้รับการปกป้องเพิ่มเติม หากตั้งค่าเป็น "เท็จ" ผู้ใช้การปกป้องขั้นสูงจะได้รับเฉพาะฟีเจอร์มาตรฐานสำหรับผู้ใช้ทั่วไป</translation>
 <translation id="6762235610019366960">ให้คุณควบคุมการนำเสนอเนื้อหาโปรโมตและ/หรือเนื้อหาด้านการศึกษาใน <ph name="PRODUCT_NAME" /> แบบเต็มแท็บ
@@ -4234,7 +4216,6 @@
       </translation>
 <translation id="7372831798009983116">เปิดใช้ฟีเจอร์การช่วยเหลือพิเศษสำหรับการคลิกอัตโนมัติ</translation>
 <translation id="7373200034079131670">รีบูตเมื่อผู้ใช้ออกจากระบบหาก Android หรือ VM เริ่มต้นแล้ว</translation>
-<translation id="737655323154569539">จำกัดขนาดหน้าของการพิมพ์ ระบบจะถือว่าไม่มีข้อจำกัดหากไม่ได้ตั้งค่านโยบายหรือค่าว่างเปล่า</translation>
 <translation id="7382191643394429934">อนุญาตการพิมพ์ทั้งกรณีที่มีและไม่มีกราฟิกพื้นหลัง</translation>
 <translation id="7389872682701720082">หากคุณเปิดใช้การตั้งค่านี้ ปลั๊กอินที่ยังไม่ล้าสมัยจะทำงานเสมอ
 
@@ -4338,6 +4319,13 @@
       รูปแบบ URL มีรูปแบบเดียวกับนโยบาย "URLBlacklist" ตามที่บันทึกไว้ที่ https://www.chromium.org/administrators/url-blacklist-filter-format
       </translation>
 <translation id="7566878661979235378">ประเภทการตรวจสอบสิทธิ์ของการเข้าสู่ระบบด้วย SAML</translation>
+<translation id="7567373982693549834">นโยบายนี้ควบคุมการใช้งานแอป Android จากแหล่งที่มาที่ไม่น่าเชื่อถือ (แหล่งที่ไม่ใช่ Google Play Store) สำหรับผู้ใช้แต่ละราย
+
+      หากไม่ได้ตั้งค่าในนโยบายนี้ จะถือว่าตั้งค่าเป็นไม่อนุญาต
+
+      หากอุปกรณ์ของผู้ใช้มีการจัดการ ความพร้อมใช้งานของนโยบายนี้จะขึ้นอยู่กับนโยบายด้านอุปกรณ์ที่เกี่ยวข้องด้วย
+
+      หากอุปกรณ์ของผู้ใช้ไม่มีการจัดการ ความพร้อมใช้งานของนโยบายนี้จะขึ้นอยู่กับว่าผู้ใช้เป็นเจ้าของอุปกรณ์หรือไม่ด้วย</translation>
 <translation id="757395965347379751">เมื่อเปิดใช้การตั้งค่านี้ <ph name="PRODUCT_NAME" /> จะอนุญาตใบรับรองที่มีการลงชื่อของ SHA-1 ตราบใดที่ผ่านการตรวจสอบความถูกต้องและอยู่ในห่วงโซ่เดียวกับใบรับรอง CA ที่ติดตั้งในเครื่อง
 
       โปรดทราบว่านโยบายนี้ขึ้นอยู่กับกลุ่มการตรวจสอบใบรับรองระบบปฏิบัติการที่อนุญาตลายเซ็นของ SHA-1 หากการอัปเดตระบบปฏิบัติการเปลี่ยนแปลงการจัดการใบรับรอง SHA-1 ของระบบปฏิบัติการ นโยบายนี้จะไม่มีผลบังคับใช้อีกต่อไป นอกจากนี้ นโยบายนี้ยังมีจุดประสงค์เพื่อใช้เป็นการแก้ปัญหาชั่วคราวเพื่อให้องค์กรต่างๆ มีเวลามากขึ้นในการเลิกใช้งาน SHA-1  การถอดนโยบายนี้ออกจะเกิดขึ้นประมาณวันที่ 1 มกราคม 2019
@@ -4533,6 +4521,7 @@
 
           หมายเหตุ: <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" /> จะลบล้างนโยบายนี้หากระบุนโยบายเดิมไว้</translation>
 <translation id="7846952520291088817">URL ที่ IP ของเครื่องแสดงใน ICE Candidate ผ่าน WebRTC</translation>
+<translation id="7848641140449742406">การตั้งค่าระบบปฏิบัติการ</translation>
 <translation id="7858404742201086014">หากคุณเปิดใช้การตั้งค่านี้ ระบบจะใช้ปลั๊กอินเก่าเป็นปลั๊กอินปกติ
 
       หากคุณปิดใช้การตั้งค่านี้ ระบบจะไม่ใช้ปลั๊กอินเก่าและจะไม่ขอสิทธิ์เรียกใช้ปลั๊กอินเหล่านี้จากผู้ใช้
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index 7574f12..2329932 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -356,7 +356,6 @@
 <translation id="1523774894176285446">Yapılandırılan web siteleri için başlatılacak alternatif tarayıcı.</translation>
 <translation id="152657506688053119">Varsayılan arama sağlayıcısına ilişkin alternatif URL'lerin listesi</translation>
 <translation id="1530812829012954197">Aşağıdaki URL kalıplarını her zaman ana makine tarayıcısında oluştur</translation>
-<translation id="1541170838458414064">Yazdırma sayfası boyutunu kısıtla</translation>
 <translation id="1553532014072799546">Uygulama Başına Süre Sınırları Beyaz Listesi</translation>
 <translation id="1553684822621013552">Bu politika doğru değerine ayarlandığında, ARC kullanıcı için
       etkinleştirilir (ek politika ayarı kontrollerine tabidir; geçerli
@@ -853,17 +852,6 @@
       Bu politika, Hangout Hizmetleri uzantısı gibi bileşen uzantıları için de geçerli olur.</translation>
 <translation id="2223598546285729819">Varsayılan bildirim ayarı</translation>
 <translation id="2231817271680715693">İlk çalıştırmada tarama geçmişini varsayılan tarayıcıdan içe aktar</translation>
-<translation id="2234855698900783408">Yeni <ph name="CORS" /> uygulamasındaki çözümlerin <ph name="CORS" /> tarafından kontrol edilmesini sağlayarak Uzantıların uyumlu davranışı sürdürmesine ve belirtilen üstbilgilerin <ph name="PRODUCT_NAME" /> tarafından <ph name="CORS" /> kontrolleri olmadan gönderilmesine olanak tanıyın.
-
-      Bu liste boş değere ayarlanırsa <ph name="PRODUCT_NAME" />, Uzantıları uyumlu şekillerde çalıştırmayı dener ve <ph name="WEB_REQUEST_API_MANUAL" /> içinde açıklanan <ph name="PRODUCT_NAME" /> 79 için <ph name="API" /> değişikliklerini uygulamaz.
-
-      Bu liste <ph name="HTTP" /> istek üst bilgi adlarına sahip olacak şekilde ayarlanırsa <ph name="CORS" /> incelemesi, Uzantılar için çözüm sağlamaya ek olarak listelenen üst bilgileri de yoksayar.
-
-      Bu liste ayarlanmazsa yukarıda açıklanan çözümlerin ikisi de uygulanmaz.
-
-      <ph name="CORS" /> ile ilgili ayrıntılar için şu adresi ziyaret edin: <ph name="CORS_HELP_URL" />.
-
-      Bu politikanın <ph name="PRODUCT_NAME" /> sürüm 82'de kaldırılacağını hatırlatırız.</translation>
 <translation id="2236488539271255289">Hiçbir sitenin yerel verileri ayarlamasına izin verme</translation>
 <translation id="2240879329269430151">Web sitelerinin pop-up göstermesine izin verilip verilmeyeceğini ayarlamanıza olanak tanır. Tüm web siteleri için pop-up'ların gösterilmesine izin verilebilir veya tüm web sitelerinin pop-up göstermesi reddedilebilir.
 
@@ -3717,17 +3705,6 @@
 <translation id="6467613372414922590">Kullanıcı düzeyinde Yerel Mesajlaşma ana makinelerine izin ver (yönetici şifreleri olmadan yüklenir)</translation>
 <translation id="6468980648680553776">Bu politika kullanımdan kaldırılmıştır. Lütfen bunun yerine RemoteAccessHostClientDomainList politikasını kullanın.</translation>
 <translation id="6473623140202114570">Güvenli Tarama'nın uyarıları tetiklemeyeceği alan adlarının listesini yapılandırır.</translation>
-<translation id="6487780893361255867">Yeni <ph name="CORS" /> yerine eski <ph name="CORS" /> uygulamasını kullan.
-
-      Bu ayar True (Doğru) değerine ayarlanırsa önceki sürümlerle uyumlu olması gereken eski uygulama kullanılır.
-
-      Bu ayar False (Yanlış) değerine ayarlanır veya hiç ayarlanmazsa kuruma özel uyumluluk sorunlarına yol açabilecek yeni uygulama kullanılır.
-
-      Bu politika, birkaç aşamadan sonra kaldırılacaktır.
-
-      <ph name="CORS" /> ile ilgili ayrıntılar için şu adresi ziyaret edin: <ph name="CORS_HELP_URL" />.
-
-      Bu politikanın <ph name="PRODUCT_NAME" /> sürüm 82'de kaldırılacağını hatırlatırız.</translation>
 <translation id="6488627892044759800"><ph name="PRODUCT_NAME" /> ürününde varsayılan ana sayfa türünü yapılandırır ve kullanıcıların ana sayfa tercihlerini değiştirmesini engeller. Ana sayfa sizin belirttiğiniz bir URL'ye veya Yeni Sekme Sayfası'na ayarlanabilir.
 
           Bu ayarı etkinleştirirseniz ana sayfa için her zaman Yeni Sekme Sayfası kullanılır ve ana sayfa URL konumu yoksayılır.
@@ -4321,7 +4298,6 @@
       </translation>
 <translation id="7372831798009983116">Otomatik tıklama erişilebilirlik özelliğini etkinleştir</translation>
 <translation id="7373200034079131670">Android veya bir sanal makine başlatılmışsa kullanıcı oturumu kapatıldığında cihazı yeniden başlatır.</translation>
-<translation id="737655323154569539">Yazdırma sayfası boyutunu kısıtlar. Ayarlanmayan ve boş bırakılan politika kısıtlama yokmuş gibi işlenir.</translation>
 <translation id="7382191643394429934">Arka plan grafikleri ile ve bu grafikler olmadan yazdırmaya izin ver</translation>
 <translation id="7389872682701720082">Bu ayarı etkinleştirirseniz eski olmayan eklentiler her zaman çalışır.
 
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index c1c34a6..d7bebcbd 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -370,7 +370,6 @@
 <translation id="1523774894176285446">Альтернативний веб-переглядач, у якому мають відкриватися налаштовані веб-сайти.</translation>
 <translation id="152657506688053119">Список альтернативних URL-адрес для пошукової системи за умовчанням</translation>
 <translation id="1530812829012954197">Завжди відтворювати перелічені шаблони URL-адреси у веб-переглядачі хосту</translation>
-<translation id="1541170838458414064">Обмежити розмір сторінки друку</translation>
 <translation id="1553532014072799546">Білий список для обмеження часу використання додатка</translation>
 <translation id="1553684822621013552">Якщо для цього правила встановлено значення "true", користувач
       отримує доступ до додатка ARC (можливі додаткові перевірки
@@ -863,17 +862,6 @@
       Це правило також застосовується до розширень компонентів, як-от розширення сервісів Hangouts.</translation>
 <translation id="2223598546285729819">Налаштування сповіщень за умовчанням</translation>
 <translation id="2231817271680715693">Імпорт історії веб-перегляду з веб-переглядача за умовчанням під час першого запуску</translation>
-<translation id="2234855698900783408">Увімкнути для <ph name="CORS" /> зменшення кількості перевірок у новому застосуванні <ph name="CORS" />, що дає змогу розширенням надалі мати сумісну поведінку, а <ph name="PRODUCT_NAME" /> – надсилати вказані заголовки без перевірок <ph name="CORS" />.
-
-      Якщо цей список порожній, <ph name="PRODUCT_NAME" /> намагається сумісно запускати розширення й не впроваджує зміни <ph name="API" /> для <ph name="PRODUCT_NAME" /> 79, як це описано на сторінці <ph name="WEB_REQUEST_API_MANUAL" />.
-
-      Якщо для цього списку вказано назви заголовків запитів <ph name="HTTP" />, перевірка <ph name="CORS" /> ігноруватиме вказані заголовки, а також зменшить кількість перевірок для розширень.
-
-      Якщо цей список не налаштовано, описані вище зменшення не застосовуються.
-
-      Докладніше про <ph name="CORS" /> читайте на сторінці <ph name="CORS_HELP_URL" />.
-
-      Зауважте, що це правило буде вилучене в <ph name="PRODUCT_NAME" /> версії 82.</translation>
 <translation id="2236488539271255289">Забороняти всім сайтам установлювати локальні дані</translation>
 <translation id="2240879329269430151">Дозволяє вказувати, чи можуть веб-сайти показувати спливаючі вікна. Показ спливаючих вікон можна дозволити чи заборонити для всіх веб-сайтів. Якщо це правило не встановлено, використовується правило "BlockPopups", але користувач може змінювати це налаштування.</translation>
 <translation id="2241498944622759244">Ця функція ніколи не запускалася, тому правило не підтримується. Якщо для цього правила вибрано значення true або його не налаштовано, <ph name="PRODUCT_NAME" /> пропонуватиме сторінки, пов'язані з поточною.
@@ -3697,17 +3685,6 @@
 <translation id="6467613372414922590">Дозволити хости на рівні користувача для обміну повідомленнями з оригінальними додатками (установлені без дозволів адміністратора)</translation>
 <translation id="6468980648680553776">Це правило більше не підтримується. Натомість застосовуйте RemoteAccessHostClientDomainList.</translation>
 <translation id="6473623140202114570">Налаштувати список доменів, у яких Безпечний перегляд не показуватиме застережень.</translation>
-<translation id="6487780893361255867">Використовувати для <ph name="CORS" /> застаріле застосування <ph name="CORS" />, а не нове.
-
-      Якщо вибрано значення true, використовується застаріле застосування, яке буде сумісним із попередніми версіями.
-
-      Якщо для цього правила вибрано значення false або його не налаштовано, використовується нове застосування, яке потенційно може викликати проблеми із сумісністю для певних підприємств.
-
-      Це правило буде вилучено через кілька версій.
-
-      Докладніше про <ph name="CORS" /> читайте на сторінці <ph name="CORS_HELP_URL" />.
-
-      Зауважте, що це правило буде вилучене в <ph name="PRODUCT_NAME" /> версії 82.</translation>
 <translation id="6488627892044759800">Налаштовує тип домашньої сторінки за умовчанням у <ph name="PRODUCT_NAME" /> і не дозволяє користувачам змінювати параметри домашньої сторінки. Домашньою сторінкою можна встановити зазначену URL-адресу або сторінку нової вкладки.
 
           Якщо ввімкнути це налаштування, сторінка нової вкладки завжди використовуватиметься як домашня сторінка, а розташування URL-адреси домашньої сторінки ігноруватиметься.
@@ -3863,7 +3840,7 @@
 <translation id="6731757988219967594">Фільтрувати сайти вищого рівня (але не вбудовані iframe) із вмістом для дорослих</translation>
 <translation id="6734521799274931721">Визначає, чи може ОС Chrome обмінюватися файлами в мережі</translation>
 <translation id="6735701345096330595">Примусово вмикати мови перевірки правопису</translation>
-<translation id="6737677282967014160">Дозволити користувачеві завантажувати додатки для Android з ненадійних джерел.</translation>
+<translation id="6737677282967014160">Дозволити користувачеві завантажувати додатки для Android із ненадійних джерел.</translation>
 <translation id="6757613329154374267">Резервне копіювання й відновлення ввімкнено</translation>
 <translation id="6758659208493449452">Це правило дає змогу вибрати, чи має користувач, який зареєструвався в Програмі додаткового захисту, доступ до функцій посиленої безпеки. Деякі з цих функцій можуть включати обмін даними з Google (наприклад, користувачі Додаткового захисту зможуть надсилати свої завантаження в Google для перевірки на наявність зловмисного програмного забезпечення). Якщо для цього правила вибрано значення true або його не налаштовано, зареєстровані користувачі отримають доступ до функцій посиленої безпеки. Якщо для нього вибрано значення false, користувачі Додаткового захисту матимуть доступ лише до стандартних користувацьких функцій.</translation>
 <translation id="6762235610019366960">Дає змогу керувати показом вмісту рекламного та/або навчального характеру на всю вкладку в <ph name="PRODUCT_NAME" />.
@@ -4290,7 +4267,6 @@
       </translation>
 <translation id="7372831798009983116">Увімкнути спеціальну можливість "Автоклік"</translation>
 <translation id="7373200034079131670">Перезапускати після виходу користувача з облікового запису, якщо запущено Android або віртуальну машину.</translation>
-<translation id="737655323154569539">Обмежує розмір сторінки друку. Якщо це правило не налаштоване або порожнє, вважається, що воно не має обмежень.</translation>
 <translation id="7382191643394429934">Дозволити друк із фоновими зображеннями й без них</translation>
 <translation id="7389872682701720082">Якщо це налаштування ввімкнено, завжди запускаються актуальні плагіни.
 
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 04f7189..b494402 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -368,7 +368,6 @@
 <translation id="1523774894176285446">Trình duyệt thay thế để chạy các trang web đã định cấu hình.</translation>
 <translation id="152657506688053119">Danh sách các URL thay thế cho nhà cung cấp dịch vụ tìm kiếm mặc định</translation>
 <translation id="1530812829012954197">Luôn hiển thị các mẫu URL sau đây trong trình duyệt chính</translation>
-<translation id="1541170838458414064">Giới hạn kích thước trang in</translation>
 <translation id="1553532014072799546">Danh sách cho phép về giới hạn thời gian cho mỗi ứng dụng</translation>
 <translation id="1553684822621013552">Khi chính sách này được đặt thành true, ARC sẽ được bật cho người dùng
       (theo kiểm tra cài đặt chính sách bổ sung - ARC sẽ vẫn không khả
@@ -858,17 +857,6 @@
       Chính sách này cũng áp dụng cho các tiện ích thành phần, chẳng hạn như tiện ích Dịch vụ Hangout.</translation>
 <translation id="2223598546285729819">Cài đặt thông báo mặc định</translation>
 <translation id="2231817271680715693">Nhập lịch sử duyệt từ trình duyệt mặc định trong lần chạy đầu tiên</translation>
-<translation id="2234855698900783408">Bật tùy chọn giảm thiểu kiểm tra <ph name="CORS" /> trong quy trình triển khai <ph name="CORS" /> mới, cho phép Tiện ích duy trì hành vi tương thích và cho phép <ph name="PRODUCT_NAME" /> gửi các tiêu đề đã chỉ định mà không cần kiểm tra <ph name="CORS" />.
-
-      Nếu bạn để trống danh sách này, thì <ph name="PRODUCT_NAME" /> sẽ cố chạy Tiện ích theo cách tương thích và không làm thay đổi <ph name="API" /> đối với <ph name="PRODUCT_NAME" /> 79 như giải thích tại <ph name="WEB_REQUEST_API_MANUAL" />.
-
-      Nếu bạn đặt danh sách này thành có tên tiêu đề yêu cầu <ph name="HTTP" />, thì quá trình kiểm tra <ph name="CORS" /> sẽ bật tùy chọn giảm thiểu cho Tiện ích và bỏ qua các tiêu đề có trong danh sách.
-
-      Nếu bạn không đặt danh sách này, thì cả hai tùy chọn giảm thiểu giải thích ở trên đều không áp dụng.
-
-      Để biết thông tin chi tiết về <ph name="CORS" />, hãy truy cập vào: <ph name="CORS_HELP_URL" />.
-
-      Xin lưu ý rằng chính sách này sẽ bị loại bỏ trong <ph name="PRODUCT_NAME" /> phiên bản 82.</translation>
 <translation id="2236488539271255289">Không cho phép bất kỳ trang web nào lưu dữ liệu trên máy</translation>
 <translation id="2240879329269430151">Cho phép bạn đặt liệu các trang web có được phép hiển thị cửa sổ bật lên hay không. Bạn có thể cho phép hoặc từ chối hiển thị cửa sổ bật lên đối với tất cả các trang web.
 
@@ -3749,17 +3737,6 @@
 <translation id="6467613372414922590">Cho phép các máy chủ Nhắn tin gốc ở cấp người dùng (cài đặt mà không cần có quyền quản trị).</translation>
 <translation id="6468980648680553776">Chính sách này không còn dùng nữa. Thay vào đó, hãy sử dụng RemoteAccessHostClientDomainList.</translation>
 <translation id="6473623140202114570">Định cấu hình danh sách các miền mà Duyệt web an toàn sẽ không kích hoạt cảnh báo.</translation>
-<translation id="6487780893361255867">Sử dụng quy trình triển khai <ph name="CORS" /> cũ thay vì <ph name="CORS" /> mới.
-
-      Nếu bạn đặt tùy chọn cài đặt này thành True, thì quy trình triển khai cũ tương thích với các phiên bản trước sẽ được sử dụng.
-
-      Nếu bạn đặt tùy chọn cài đặt này thành False hoặc không đặt, thì quy trình triển khai mới sẽ được sử dụng và có thể gây ra các sự cố tương thích cụ thể đối với doanh nghiệp.
-
-      Chính sách này sẽ bị loại bỏ sau một số mốc thời gian.
-
-      Để biết thông tin chi tiết về <ph name="CORS" />, hãy truy cập vào: <ph name="CORS_HELP_URL" />.
-
-      Xin lưu ý rằng chính sách này sẽ bị loại bỏ trong <ph name="PRODUCT_NAME" /> phiên bản 82.</translation>
 <translation id="6488627892044759800">Định cấu hình loại trang chủ mặc định trong <ph name="PRODUCT_NAME" /> và ngăn không cho người dùng thay đổi các tùy chọn trang chủ. Bạn có thể đặt trang chủ thành một URL mà bạn chỉ định hoặc đặt thành trang tab mới.
 
           Nếu bạn bật tùy chọn cài đặt này, thì Trang tab mới luôn được dùng cho trang chủ và vị trí URL trang chủ sẽ bị bỏ qua.
@@ -4350,7 +4327,6 @@
       </translation>
 <translation id="7372831798009983116">Bật tính năng hỗ trợ tiếp cận về tự động nhấp</translation>
 <translation id="7373200034079131670">Khởi động lại khi đăng xuất người dùng nếu Android hoặc một máy chủ ảo (VM) đã khởi động.</translation>
-<translation id="737655323154569539">Hạn chế kích thước trang in. Nếu bạn không đặt hoặc để trống chính sách, thì hệ thống sẽ coi là không có hạn chế.</translation>
 <translation id="7382191643394429934">Cho phép in cả khi có và không có đồ họa nền</translation>
 <translation id="7389872682701720082">Nếu bạn bật tùy chọn cài đặt này, các plugin không bị lỗi thời sẽ luôn chạy.
 
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index cd64965..c6deca32 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -348,7 +348,6 @@
 <translation id="1523774894176285446">对于配置的网站要启动的替代浏览器。</translation>
 <translation id="152657506688053119">默认搜索服务提供商的备选网址列表</translation>
 <translation id="1530812829012954197">总是通过托管浏览器呈现以下网址格式</translation>
-<translation id="1541170838458414064">限制打印页面大小</translation>
 <translation id="1553532014072799546">应用级使用时间限制白名单</translation>
 <translation id="1553684822621013552">如果将这项政策设为 true,系统会为用户启用 ARC(需要经过额外的政策设置检查;如果目前的用户会话中已启用暂存模式或多帐号登录功能,则用户仍然无法使用 ARC)。
 
@@ -371,6 +370,7 @@
 <translation id="1561424797596341174">覆盖与远程访问主机的调试版本号相关的政策</translation>
 <translation id="1561967320164410511">用于个人认证的 U2F 和扩展程序</translation>
 <translation id="1583248206450240930">默认情况下使用“<ph name="PRODUCT_FRAME_NAME" />”</translation>
+<translation id="1588240398285670601">浏览器设置</translation>
 <translation id="1599424828227887013">在 Android 设备上为指定的来源启用网站隔离功能</translation>
 <translation id="1608755754295374538">无需提示用户即可使用音频捕获设备的网址</translation>
 <translation id="1615221548356595305">允许为这些主机聚合 HTTP/2 连接(即使是在使用客户端证书时)</translation>
@@ -807,17 +807,6 @@
       此政策也适用于组件扩展程序(例如 Hangout Services 扩展程序)。</translation>
 <translation id="2223598546285729819">默认通知设置</translation>
 <translation id="2231817271680715693">首次运行时,从默认浏览器导入浏览记录</translation>
-<translation id="2234855698900783408">在新版 <ph name="CORS" /> 实现方案中启用 <ph name="CORS" /> 检查缓解功能,从而允许扩展程序保持兼容的行为,并允许 <ph name="PRODUCT_NAME" /> 无需进行 <ph name="CORS" /> 检查便可发送指定标头。
-
-      如果此列表设为空,<ph name="PRODUCT_NAME" /> 会尝试以兼容的方式运行扩展程序,而不会激活 <ph name="PRODUCT_NAME" /> 79 中引入的 <ph name="API" /> 更改(如 <ph name="WEB_REQUEST_API_MANUAL" /> 所述)。
-
-      如果此列表设为包含 <ph name="HTTP" /> 请求标头名称,则 <ph name="CORS" /> 检查将会忽略所列的标头,并会为扩展程序启用缓解功能。
-
-      如果此列表未设置,系统将不会应用上文介绍的两项缓解功能。
-
-      如需详细了解 <ph name="CORS" />,请访问:<ph name="CORS_HELP_URL" />。
-
-      请注意,在 <ph name="PRODUCT_NAME" /> 版本 82 中,此政策将被移除。</translation>
 <translation id="2236488539271255289">不允许任何网站设置本地数据</translation>
 <translation id="2240879329269430151">可让您设置是否允许网站显示弹出式窗口。可以针对所有网站允许或拒绝显示弹出式窗口。如果未设置此政策,系统将使用“BlockPopups”并允许用户更改此设置。</translation>
 <translation id="2241498944622759244">该功能从未被发布,所以此政策已被弃用。如果此政策设为 true 或未设置,<ph name="PRODUCT_NAME" /> 将会根据当前网页来建议相关网页。
@@ -1311,6 +1300,7 @@
 <translation id="2872961005593481000">关机</translation>
 <translation id="2873651257716068683">替换默认打印页面大小。如果这种页面大小不适用,则忽略此政策。</translation>
 <translation id="2874209944580848064">针对支持 Android 应用的 <ph name="PRODUCT_OS_NAME" />设备的注意事项:</translation>
+<translation id="2874901846804525128">阻止用户使用来源不受信任的 Android 应用。</translation>
 <translation id="2875192972412983412">指定要让系统为确认是否有可用的服务器打印机而查询的部分打印服务器。
 
       如果使用此政策,则只有那些具有与此政策中所列值匹配的 ID 的服务器打印机才可供用户使用。
@@ -2895,6 +2885,7 @@
           如果此政策的值设置为 True 或未配置,这位用户即可创建并管理受监管用户。</translation>
 <translation id="5369937289900051171">仅限彩色打印</translation>
 <translation id="5370279767682621504">在非默认端口上启用 HTTP/0.9 支持</translation>
+<translation id="5377606826822211923">控制用户对来源不受信任的 Android 应用的使用</translation>
 <translation id="5378985487213287085">可让您设置是否允许网站显示桌面通知。默认情况下,可以允许或拒绝显示桌面通知,也可以在每次网站要显示桌面通知时询问用户。如果未设置此政策,系统将使用“AskNotifications”并允许用户更改此设置。</translation>
 <translation id="5380329473151894945">设置大号光标无障碍功能在登录屏幕上的默认状态。
 
@@ -3589,17 +3580,6 @@
 <translation id="6467613372414922590">允许使用用户级本地消息传递主机(安装时没有管理员权限)</translation>
 <translation id="6468980648680553776">此政策已被弃用。请改用 RemoteAccessHostClientDomainList。</translation>
 <translation id="6473623140202114570">配置安全浏览功能在哪些网域中不会触发警告。</translation>
-<translation id="6487780893361255867">使用旧版 <ph name="CORS" /> 实现方案,而非新版 <ph name="CORS" />。
-
-      如果此设置设为 True,系统会使用旧版实现方案(此版实现方案应该会与以往的版本兼容)。
-
-      如果此设置设为 False 或未设置,系统会使用新版实现方案(此版实现方案可能会导致出现特定于企业的兼容性问题)。
-
-      在几个里程碑后,此政策将被移除。
-
-      如需详细了解 <ph name="CORS" />,请访问:<ph name="CORS_HELP_URL" />。
-
-      请注意,在 <ph name="PRODUCT_NAME" /> 版本 82 中,此政策将被移除。</translation>
 <translation id="6488627892044759800">配置 <ph name="PRODUCT_NAME" /> 中的默认主页的类型,并禁止用户更改主页偏好设置。您可以将主页设为指定的网址,也可以将其设为“新标签页”页面。
 
           如果您启用了此设置,该浏览器将会始终使用“新标签页”页面作为主页,并会忽略主页网址。
@@ -3678,6 +3658,7 @@
       请注意,此政策可被 EnabledPlugins 和 DisabledPluginsExceptions 覆盖。
 
       如果未设置此政策,则用户可以使用系统中安装的任何插件,经过硬编码且不兼容、已过期或危险的插件除外。</translation>
+<translation id="6571871508154591774">配置要停用的摄像头、浏览器设置和操作系统设置功能</translation>
 <translation id="6573305661369899995">设置网址限制条件的外部来源</translation>
 <translation id="6583851521569686409">配置打印机列表。
 
@@ -3754,6 +3735,7 @@
 <translation id="6731757988219967594">滤除提供成人内容的顶级网站(但不滤除嵌入式 iframe)</translation>
 <translation id="6734521799274931721">控制是否允许在 Chrome 操作系统中使用网络文件共享功能</translation>
 <translation id="6735701345096330595">强制检查语言拼写</translation>
+<translation id="6737677282967014160">允许用户使用来源不受信任的 Android 应用。</translation>
 <translation id="6757613329154374267">已启用备份和恢复服务</translation>
 <translation id="6758659208493449452">此政策决定了加入“高级保护”计划的用户是否可获享额外的保护。其中部分功能可能涉及与 Google 共享数据(例如,加入“高级保护”计划的用户可将他们的下载内容发送给 Google 进行恶意软件扫描)。如果此政策设为 True 或未设置,已加入“高级保护”计划的用户将会获享额外的保护。如果此政策设为 False,已加入“高级保护”计划的用户只能使用标准的消费者级功能。</translation>
 <translation id="6762235610019366960">让您能够控制是否在 <ph name="PRODUCT_NAME" /> 中使用整个标签页显示宣传内容和/或教育内容。
@@ -4175,7 +4157,6 @@
       </translation>
 <translation id="7372831798009983116">启用“自动点击”无障碍功能</translation>
 <translation id="7373200034079131670">在用户退出后重新启动(如果 Android 或虚拟机已启动)。</translation>
-<translation id="737655323154569539">限制打印页面大小。如果未设置此政策或将其留空,则会被视为无限制。</translation>
 <translation id="7382191643394429934">始终允许打印(无论是否有背景图片)</translation>
 <translation id="7389872682701720082">如果启用了此设置,则未过期的插件会一直运行。
 
@@ -4279,6 +4260,13 @@
       这些网址格式与“URLBlacklist”政策中的网址格式相同,详见 https://www.chromium.org/administrators/url-blacklist-filter-format。
       </translation>
 <translation id="7566878661979235378">SAML 登录身份验证类型</translation>
+<translation id="7567373982693549834">此政策可以控制每个用户对来源不受信任(来自 Google Play 商店之外)的 Android 应用的使用。
+
+      如果此政策的值未设置,则系统会视为不允许使用此功能。
+
+      如果用户的设备为受管理设备,则此功能的可用性还取决于相应的设备政策。
+
+      如果用户的设备不是受管理设备,则此功能的可用性还取决于用户是不是设备所有者。</translation>
 <translation id="757395965347379751">启用此设置后,只要 SHA-1 签名证书成功验证并关联到本地安装的 CA 证书,<ph name="PRODUCT_NAME" /> 就会允许使用这些证书。
 
       请注意,此政策取决于操作系统证书验证堆栈是否允许 SHA-1 签名。如果操作系统更新更改了操作系统处理 SHA-1 证书的方式,则此政策可能不再有效。此外,此政策仅用作临时解决方法,旨在为企业提供更多时间来弃用 SHA-1。系统将于 2019 年 1 月 1 日(或左右)取消此政策。
@@ -4467,6 +4455,7 @@
 
           注意:<ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" />(若已指定)会覆盖此政策。</translation>
 <translation id="7846952520291088817">在 WebRTC ICE 候选路径中显示本地 IP 的网址</translation>
+<translation id="7848641140449742406">操作系统设置</translation>
 <translation id="7858404742201086014">如果您启用了此设置,则过期插件可作为正常插件使用。
 
       如果您停用了此设置,则过期插件将无法使用,并且系统不会要求用户提供运行过期插件的权限。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index 13f671a..cb5f722 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -357,7 +357,6 @@
 <translation id="1523774894176285446">要啟動的替代瀏覽器 (適用於已設定的網站)。</translation>
 <translation id="152657506688053119">預設搜尋的替代網址清單</translation>
 <translation id="1530812829012954197">一律在瀏覽器中算繪以下網址模式</translation>
-<translation id="1541170838458414064">限制列印頁面大小</translation>
 <translation id="1553532014072799546">個別應用程式時間限制許可清單</translation>
 <translation id="1553684822621013552">如果將這項政策設為 true,系統會為使用者啟用 ARC
       (需經過額外政策設定檢查 - 如果目前的
@@ -384,6 +383,7 @@
 <translation id="1561424797596341174">針對遠端存取主機的偵錯版本覆寫政策</translation>
 <translation id="1561967320164410511">用於個人認證的 U2F 和擴充功能</translation>
 <translation id="1583248206450240930">根據預設使用 <ph name="PRODUCT_FRAME_NAME" /></translation>
+<translation id="1588240398285670601">瀏覽器設定</translation>
 <translation id="1599424828227887013">在 Android 裝置上為指定來源啟用網站隔離</translation>
 <translation id="1608755754295374538">系統會直接授權存取音訊擷取裝置而不需提示的網址</translation>
 <translation id="1615221548356595305">即使在用戶端憑證已有人使用的情況下,仍允許這些主機合併 HTTP/2 連線</translation>
@@ -837,17 +837,6 @@
       這項政策也適用於元件擴充功能,例如 Hangout Services 擴充功能。</translation>
 <translation id="2223598546285729819">預設通知設定</translation>
 <translation id="2231817271680715693">第一次執行時從預設瀏覽器匯入瀏覽記錄</translation>
-<translation id="2234855698900783408">在新版 <ph name="CORS" /> 模式中啟用 <ph name="CORS" /> 檢查安全防護措施,讓擴充功能保持相容行為,並允許 <ph name="PRODUCT_NAME" /> 不需經過 <ph name="CORS" /> 檢查即可傳送指定標頭。
-
-      如果將這份清單設為空白,<ph name="PRODUCT_NAME" /> 會嘗試以相容方式執行擴充功能,且不會採用 <ph name="PRODUCT_NAME" /> 第 79 版的 <ph name="API" /> 變更,詳情請參閱 <ph name="WEB_REQUEST_API_MANUAL" />。
-
-      如果將這份清單設為具有 <ph name="HTTP" /> 要求標頭名稱,則 <ph name="CORS" /> 檢查將忽略此處列出的標頭,並啟用擴充功能的安全防護措施。
-
-      如果未設定這份清單,則不會套用上述兩種安全防護措施。
-
-      如要進一步瞭解 <ph name="CORS" />,請前往:<ph name="CORS_HELP_URL" />。
-
-      請注意,這項政策將在 <ph name="PRODUCT_NAME" />第 82 版中移除。</translation>
 <translation id="2236488539271255289">不允許任何網站設定本機資料</translation>
 <translation id="2240879329269430151">允許你設定是否要讓網站顯示彈出式視窗。你可以允許或禁止所有網站顯示彈出式視窗。如果未設定這項政策,系統會使用「BlockPopups」,不過使用者可以變更設定。</translation>
 <translation id="2241498944622759244">此功能從未推出,因此這項政策目前已淘汰。如果將這項政策設為 True 或不設定,<ph name="PRODUCT_NAME" /> 會提供與目前網頁相關的網頁建議。
@@ -1338,6 +1327,7 @@
 <translation id="2872961005593481000">關閉</translation>
 <translation id="2873651257716068683">覆寫預設列印頁面大小。如果設定的頁面大小不適用,系統會忽略這項政策。</translation>
 <translation id="2874209944580848064">支援 Android 裝置的 <ph name="PRODUCT_OS_NAME" />裝置注意事項:</translation>
+<translation id="2874901846804525128">禁止使用者使用來源不受信任的 Android 應用程式。</translation>
 <translation id="2875192972412983412">指定系統尋找伺服器印表機時,要查詢符合何種條件的列印伺服器。
 
       如果使用這項政策,使用者只能使用 ID 符合本政策值的伺服器印表機。
@@ -2920,6 +2910,7 @@
           如果設為 True 或不予設定,這位使用者即可建立並管理受監督的使用者。</translation>
 <translation id="5369937289900051171">僅限彩色列印</translation>
 <translation id="5370279767682621504">在非預設通訊埠啟用 HTTP/0.9 支援功能</translation>
+<translation id="5377606826822211923">控管使用者是否可使用來源不受信任的 Android 應用程式</translation>
 <translation id="5378985487213287085">允許你設定是否要讓網站顯示桌面通知。你可以將網站預設為允許或禁止顯示桌面通知,也可以設為每次網站要顯示桌面通知時再詢問使用者。如果未設定這項政策,系統會使用「AskNotifications」,但使用者可以變更這項設定。</translation>
 <translation id="5380329473151894945">設定大型游標無障礙功能在登入畫面中的預設狀態。
 
@@ -3622,17 +3613,6 @@
 <translation id="6467613372414922590">允許使用者層級的內建訊息傳遞主機 (在無管理員權限的情況下安裝)。</translation>
 <translation id="6468980648680553776">這項政策已遭到淘汰,請改用 RemoteAccessHostClientDomainList。</translation>
 <translation id="6473623140202114570">設定安全瀏覽功能在哪些網域中不會觸發警告。</translation>
-<translation id="6487780893361255867">使用舊版 <ph name="CORS" /> 模式,而不使用新版 <ph name="CORS" />。
-
-     如果將這項政策設為 True,系統會使用舊版模式,該模式應與先前的版本相容。
-
-      如果將這項政策設為 False 或不予設定,系統會使用新版模式,這可能會導致企業特定的相容性問題。
-
-      這項政策將在日後的版本中移除。
-
-      如要進一步瞭解 <ph name="CORS" />,請前往:<ph name="CORS_HELP_URL" />。
-
-      請注意,這項政策將在 <ph name="PRODUCT_NAME" />第 82 版中移除。</translation>
 <translation id="6488627892044759800">設定 <ph name="PRODUCT_NAME" /> 的預設首頁類型,並禁止使用者變更首頁偏好設定。首頁可以設為你指定的網址,也可以設為「新分頁」。
 
           啟用此設定時,系統一律會將「新分頁」當做首頁,並忽略指定的首頁網址位置。
@@ -3708,6 +3688,7 @@
       如果啟用這項設定,<ph name="PRODUCT_NAME" /> 一律不會使用清單中指定的外掛程式,並且會在「about:plugins」中將這些外掛程式標示為已停用,使用者將無法予以啟用。請注意,EnabledPlugins 和 DisabledPluginsExceptions 可覆寫這項政策。
 
       如果不設定這項政策,使用者可以使用系統上安裝的任何外掛程式 (不含與硬式編碼不相容、過舊或危險的外掛程式)。</translation>
+<translation id="6571871508154591774">設定要停用的攝影機、瀏覽器設定和 OS 設定功能</translation>
 <translation id="6573305661369899995">設定外部網址來源限制</translation>
 <translation id="6583851521569686409">設定印表機清單。
 
@@ -3783,6 +3764,7 @@
 <translation id="6731757988219967594">針對成人內容篩選頂層網站 (但不篩選嵌入的 iframe)</translation>
 <translation id="6734521799274931721">控管是否允許在 Chrome 作業系統使用網路檔案共用功能</translation>
 <translation id="6735701345096330595">強制執行拼字檢查的語言</translation>
+<translation id="6737677282967014160">允許使用者使用來源不受信任的 Android 應用程式。</translation>
 <translation id="6757613329154374267">已啟用備份與還原功能</translation>
 <translation id="6758659208493449452">這項政策可控管已加入進階保護計畫的使用者是否可以享有額外的防護。部分功能可能涉及與 Google 共用資料 (例如,進階保護計畫的使用者可將下載內容傳送至 Google 進行惡意軟體掃描)。如果設為 True 或不予設定,已加入計畫的使用者將能享有額外的防護。如果設為 False,進階保護計畫的使用者只能享有標準的消費者功能。</translation>
 <translation id="6762235610019366960">讓你控制 <ph name="PRODUCT_NAME" /> 能否以完整分頁顯示宣傳和/或教學內容。
@@ -4205,7 +4187,6 @@
       </translation>
 <translation id="7372831798009983116">啟用自動點擊無障礙功能</translation>
 <translation id="7373200034079131670">在 Android 或 VM 已啟動的前提下,於使用者登出時重新啟動。</translation>
-<translation id="737655323154569539">限制列印頁面大小。未設定這項政策或將設定留空,系統會視為未設限制。</translation>
 <translation id="7382191643394429934">不論是否使用背景圖形一律允許列印</translation>
 <translation id="7389872682701720082">如果啟用這項設定,系統會一律執行未過期的外掛程式。
 
@@ -4309,6 +4290,13 @@
       網址模式的格式必須符合 https://www.chromium.org/administrators/url-blacklist-filter-format 中的「URLBlacklist」政策規定。
       </translation>
 <translation id="7566878661979235378">SAML 登入驗證類型</translation>
+<translation id="7567373982693549834">這項政策可控管每位使用者是否能使用來源不受信任 (並非來自 Google Play 商店) 的 Android 應用程式。
+
+      如果不設定這項政策的值,系統會視為禁止使用這項功能。
+
+      如果是受管理的使用者裝置,這項功能的可用性會根據對應的裝置政策而定。
+
+      如果是未受到管理的使用者裝置,這項功能的可用性會根據使用者是否為裝置擁有者而定。</translation>
 <translation id="757395965347379751">啟用這項設定時,只要 SHA-1 簽署憑證成功通過驗證並鏈結至本機安裝的 CA 憑證,即可在 <ph name="PRODUCT_NAME" /> 中使用。
 
       請注意,這項政策取決於允許 SHA-1 簽名的作業系統憑證驗證堆疊。如果作業系統更新變更了作業系統的 SHA-1 憑證處理方式,這項政策可能就會失效。此外,這項政策是暫時性的解決方案,目的是讓使用 SHA-1 憑證的企業有更多時間尋找其他解決方案。我們將於 2019 年 1 月 1 日左右移除這項政策。
@@ -4491,6 +4479,7 @@
 
           注意:如果指定 <ph name="DEVICE_LOGIN_SCREEN_HIGH_CONTRAST_ENABLED_POLICY_NAME" />,這項政策會遭到覆寫。</translation>
 <translation id="7846952520291088817">會在 WebRTC ICE 候選項目中顯示本機 IP 的網址</translation>
+<translation id="7848641140449742406">OS 設定</translation>
 <translation id="7858404742201086014">如果啟用這項設定,系統會將舊版外掛程式視為一般外掛程式執行。
 
       如果停用這項設定,則系統不會使用舊版外掛程式,也不會徵求使用者許可來執行這些外掛程式。
diff --git a/components/schema_org/extractor.cc b/components/schema_org/extractor.cc
index da1bb38..3af88bd 100644
--- a/components/schema_org/extractor.cc
+++ b/components/schema_org/extractor.cc
@@ -75,14 +75,6 @@
 
   schema_org::property::PropertyConfiguration prop_config =
       schema_org::property::GetPropertyConfiguration(property_type);
-  if (prop_config.text) {
-    values->string_values.push_back(value.as_string());
-    return true;
-  }
-  if (prop_config.url) {
-    values->url_values.push_back(GURL(value));
-    return true;
-  }
   if (prop_config.number) {
     double d;
     bool parsed_double = base::StringToDouble(value, &d);
@@ -133,11 +125,17 @@
       return true;
     }
   }
-  if (!prop_config.enum_types.empty()) {
+  if (!prop_config.thing_types.empty() || !prop_config.enum_types.empty() ||
+      prop_config.url) {
     auto url = GURL(value);
-    if (!url.is_valid())
-      return false;
-    values->url_values.push_back(url);
+    if (url.is_valid()) {
+      values->url_values.push_back(url);
+      return true;
+    }
+  }
+  if (!prop_config.thing_types.empty() || !prop_config.enum_types.empty() ||
+      prop_config.text) {
+    values->string_values.push_back(value.as_string());
     return true;
   }
   return false;
diff --git a/components/schema_org/extractor_unittest.cc b/components/schema_org/extractor_unittest.cc
index 8a803e53..01d33c6f 100644
--- a/components/schema_org/extractor_unittest.cc
+++ b/components/schema_org/extractor_unittest.cc
@@ -312,6 +312,22 @@
   EXPECT_EQ(expected, extracted);
 }
 
+// The extractor should accept a string value for a property that has an
+// expected entity type. https://schema.org/docs/gs.html#schemaorg_expected
+TEST_F(SchemaOrgExtractorTest, StringValueForThingType) {
+  EntityPtr extracted = Extract(
+      "{\"@type\": \"VideoObject\",\"author\": \"Google Chrome Developers\"}");
+
+  ASSERT_FALSE(extracted.is_null());
+
+  EntityPtr expected = Entity::New();
+  expected->type = "VideoObject";
+  expected->properties.push_back(
+      CreateStringProperty("author", "Google Chrome Developers"));
+
+  EXPECT_EQ(expected, extracted);
+}
+
 TEST_F(SchemaOrgExtractorTest, UrlValue) {
   EntityPtr extracted = Extract(
       "{\"@type\": \"VideoObject\", "
diff --git a/components/schema_org/validator.cc b/components/schema_org/validator.cc
index a7af929..8d547e2 100644
--- a/components/schema_org/validator.cc
+++ b/components/schema_org/validator.cc
@@ -46,7 +46,10 @@
     property::PropertyConfiguration config =
         property::GetPropertyConfiguration((*it)->name);
 
-    if (!(*it)->values->string_values.empty() && !config.text) {
+    bool allows_text = config.text || !config.thing_types.empty() ||
+                       !config.enum_types.empty();
+
+    if (!(*it)->values->string_values.empty() && !allows_text) {
       it = entity->properties.erase(it);
     } else if (!(*it)->values->double_values.empty() && !config.number) {
       it = entity->properties.erase(it);
@@ -110,6 +113,31 @@
         } else {
           ++it;
         }
+      } else if (!config.thing_types.empty()) {
+        // Check all the url values in this property. Remove any ones that
+        // aren't a valid URL to an item in thing_types, or a descendant of an
+        // item in thing_types.
+        bool has_valid_entities = false;
+        auto nested_it = (*it)->values->url_values.begin();
+        while (nested_it != (*it)->values->url_values.end()) {
+          auto& url = *nested_it;
+          auto type_name = ObjectNameFromId(url.spec());
+          if (!type_name.has_value() ||
+              !EntityPropertyIsValidType(config, type_name.value())) {
+            nested_it = (*it)->values->url_values.erase(nested_it);
+          } else {
+            has_valid_entities = true;
+            ++nested_it;
+          }
+        }
+
+        // If there were no valid url values representing entity types for this
+        // property, remove the whole property.
+        if (!has_valid_entities) {
+          it = entity->properties.erase(it);
+        } else {
+          ++it;
+        }
       } else {
         // This property shouldn't have any url values according to the config.
         it = entity->properties.erase(it);
diff --git a/components/schema_org/validator_unittest.cc b/components/schema_org/validator_unittest.cc
index f376ab2..a5e71336 100644
--- a/components/schema_org/validator_unittest.cc
+++ b/components/schema_org/validator_unittest.cc
@@ -48,12 +48,28 @@
   EXPECT_EQ(1u, entity->properties.size());
 }
 
-TEST_F(SchemaOrgValidatorTest, InvalidStringPropertyValue) {
+TEST_F(SchemaOrgValidatorTest, AllowsStringPropertyValueForThingType) {
   EntityPtr entity = Entity::New();
-  entity->type = entity::kAboutPage;
+  entity->type = entity::kCreativeWork;
 
   PropertyPtr property = Property::New();
-  property->name = property::kAbout;
+  property->name = property::kAuthor;
+  property->values = Values::New();
+  property->values->string_values.push_back("foo");
+
+  entity->properties.push_back(std::move(property));
+
+  bool validated_entity = ValidateEntity(entity.get());
+  EXPECT_TRUE(validated_entity);
+  EXPECT_EQ(1u, entity->properties.size());
+}
+
+TEST_F(SchemaOrgValidatorTest, InvalidStringPropertyValue) {
+  EntityPtr entity = Entity::New();
+  entity->type = entity::kSingleFamilyResidence;
+
+  PropertyPtr property = Property::New();
+  property->name = property::kAdditionalNumberOfGuests;
   property->values = Values::New();
   property->values->string_values.push_back("foo");
 
@@ -225,6 +241,25 @@
   EXPECT_EQ(1u, entity->properties.size());
 }
 
+TEST_F(SchemaOrgValidatorTest, ValidUrlPropertyValueDescendedType) {
+  EntityPtr entity = Entity::New();
+  entity->type = entity::kVideoObject;
+
+  PropertyPtr property = Property::New();
+  property->name = property::kThumbnail;
+  property->values = Values::New();
+
+  // Barcode is descended from ImageObject, an acceptable type for the thumbnail
+  // property. So barcode should also be accepted.
+  property->values->url_values.push_back(GURL("http://schema.org/Barcode"));
+
+  entity->properties.push_back(std::move(property));
+
+  bool validated_entity = ValidateEntity(entity.get());
+  EXPECT_TRUE(validated_entity);
+  EXPECT_EQ(1u, entity->properties.size());
+}
+
 TEST_F(SchemaOrgValidatorTest, ValidRepeatedEntityPropertyValue) {
   EntityPtr entity = Entity::New();
   entity->type = entity::kRestaurant;
diff --git a/components/services/storage/public/mojom/service_worker_storage_control.mojom b/components/services/storage/public/mojom/service_worker_storage_control.mojom
index b8b2563..bd2c1b8 100644
--- a/components/services/storage/public/mojom/service_worker_storage_control.mojom
+++ b/components/services/storage/public/mojom/service_worker_storage_control.mojom
@@ -68,6 +68,15 @@
   WriteMetadata(mojo_base.mojom.BigBuffer data) => (int32 status);
 };
 
+// Represents an entry of user data which is stored with a service worker
+// registration. An entry of user data is an arbitrary key-vaule pair. The
+// lifetime of user data is tied up with the registration.
+// It will be deleted when the corresponding registration is deleted.
+struct ServiceWorkerUserData {
+  string key;
+  string value;
+};
+
 // Controls the state of service worker storage within a partition. This is a
 // privileged interface and must not be brokered to untrusted clients.
 //
@@ -122,4 +131,18 @@
   CreateResourceMetadataWriter(
       int64 resource_id,
       pending_receiver<ServiceWorkerResourceMetadataWriter> writer);
+
+  // Gets user data associated with the given |registration_id|.
+  // Succeeds only when all keys are found. On success, the size and the order
+  // of |values| are the same as |keys|.
+  GetUserData(int64 registration_id, array<string> keys) =>
+      (ServiceWorkerDatabaseStatus status, array<string> values);
+  // Stores |user_data| on persistent storage.
+  StoreUserData(int64 registration_id,
+                url.mojom.Url origin,
+                array<ServiceWorkerUserData> user_data) =>
+      (ServiceWorkerDatabaseStatus status);
+  // Clears user data specified by |registration_id| and |keys|.
+  ClearUserData(int64 registration_id, array<string> keys) =>
+      (ServiceWorkerDatabaseStatus status);
 };
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 8b950bf16..8e99faa 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">برتقالي</translation>
 <translation id="1201402288615127009">التالي</translation>
 <translation id="1201895884277373915">المزيد من هذا الموقع</translation>
+<translation id="1205963431094182634">‏يُرجى تسجيل الدخول لاستخدام كلمة المرور المُخزّنة في حسابك على Google.</translation>
 <translation id="1206967143813997005">توقيع أوَّلي سيئ</translation>
 <translation id="1209206284964581585">إخفاء الآن</translation>
 <translation id="121201262018556460">لقد حاولت الوصول إلى <ph name="DOMAIN" />، ولكن الخادم قدّم شهادة تحتوي على مفتاح ضعيف. ربما قام أحد المهاجمين باختراق المفتاح الخاص، ولا يكون الخادم هو الخادم الذي تتوقعه (قد تكون على اتصال بأحد المهاجمين).</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb
index 3f13a9e..6c7d238c5 100644
--- a/components/strings/components_strings_as.xtb
+++ b/components/strings/components_strings_as.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">কমলা</translation>
 <translation id="1201402288615127009">পৰৱৰ্তী</translation>
 <translation id="1201895884277373915">এই ছাইটৰ পৰা অধিক</translation>
+<translation id="1205963431094182634">আপোনাৰ Google একাউণ্টত ষ্ট’ৰ কৰা পাছৱৰ্ডসমূহ ব্যৱহাৰ কৰিবলৈ ছাইন ইন কৰক</translation>
 <translation id="1206967143813997005">প্ৰাৰম্ভিক স্বাক্ষৰটো বেয়া</translation>
 <translation id="1209206284964581585">এতিয়াৰ বাবে লুকুৱাওক</translation>
 <translation id="121201262018556460">আপুনি <ph name="DOMAIN" /> পাবলৈ প্ৰয়াস কৰিছে কিন্তু ছার্ভাৰে কোনো দুর্বল চাবি থকা প্ৰমাণপত্ৰ উপস্থাপন কৰিছে। কোনো আক্ৰমণকাৰীয়ে ব্যক্তিগত চাবিটো ভাঙিব পাৰে আৰু আপুনি বিচৰা ছার্ভাৰটো এইটো নহ'বও পাৰে (আপুনি কোনো আক্ৰমণকাৰীৰ সৈতে যোগাযোগ কৰি থাকিব পাৰে)।</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb
index 5ed2acd..8827dc0 100644
--- a/components/strings/components_strings_az.xtb
+++ b/components/strings/components_strings_az.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Narıncı</translation>
 <translation id="1201402288615127009">Növbəti</translation>
 <translation id="1201895884277373915">Bu saytdan daha çox</translation>
+<translation id="1205963431094182634">Google hesabınızda saxlanılan parolları istifadə etmək üçün daxil olun</translation>
 <translation id="1206967143813997005">Yanlış inisial imzası</translation>
 <translation id="1209206284964581585">Hələlik gizlədin</translation>
 <translation id="121201262018556460">Siz <ph name="DOMAIN" /> üzərinə daxil olmağa çalışırsız, lakin server zəif açardan ibarət sertifikat təqdim edir.  Hücumçunun şəxsi açarı qırıq ola bilər və server gözlədiyiniz server olmaya bilər. (bir hücumçu ilə əlaqə yaratmış ola bilərsiniz)</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb
index 34df5ba0..45d7a27 100644
--- a/components/strings/components_strings_be.xtb
+++ b/components/strings/components_strings_be.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Аранжавы</translation>
 <translation id="1201402288615127009">Далей</translation>
 <translation id="1201895884277373915">Іншае з гэтага сайта</translation>
+<translation id="1205963431094182634">Каб выкарыстоўваць захаваныя ва Уліковым запісе Google паролі, увайдзіце ў яго</translation>
 <translation id="1206967143813997005">Недапушчальны зыходны подпіс</translation>
 <translation id="1209206284964581585">Схаваць гэты раз</translation>
 <translation id="121201262018556460">Вы спрабавалі трапіць на дамен <ph name="DOMAIN" />, але сервер выдаў сертыфікат, які змяшчае слабы ключ. Магчыма, зламыснік узламаў закрыты ключ, і сервер можа быць не тым серверам, які вам патрэбны (магчыма, вы абменьваецеся данымі са зламыснікам).</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index 215171ea..bda37d03 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">оранжево</translation>
 <translation id="1201402288615127009">Напред</translation>
 <translation id="1201895884277373915">Още от този сайт</translation>
+<translation id="1205963431094182634">Влезте в профила си в Google, за да използвате съхраняваните в него пароли</translation>
 <translation id="1206967143813997005">Невалиден първоначален подпис</translation>
 <translation id="1209206284964581585">Скриване засега</translation>
 <translation id="121201262018556460">Направихте опит да се свържете с/ъс <ph name="DOMAIN" />, но сървърът предостави сертификат, съдържащ слаб ключ. Възможно е извършител на атака да е пробил личния ключ и сървърът да не е този, който очаквате (възможно е да сте се свързали с извършител на атака).</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 8edbbd9..e70648f1 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Oranžová</translation>
 <translation id="1201402288615127009">Další</translation>
 <translation id="1201895884277373915">Více z tohoto webu</translation>
+<translation id="1205963431094182634">Chcete-li používat hesla uložená v účtu Google, přihlaste se</translation>
 <translation id="1206967143813997005">Chybný počáteční podpis</translation>
 <translation id="1209206284964581585">Prozatím skrýt</translation>
 <translation id="121201262018556460">Pokusili jste se přejít na web <ph name="DOMAIN" />, server však předložil certifikát obsahující slabý klíč. Útočník možná prolomil soukromý klíč a může se jednat o jiný server, než předpokládáte (můžete komunikovat s útočníkem).</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 304f7f1a..b2f7d4d 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Naranja</translation>
 <translation id="1201402288615127009">Siguiente</translation>
 <translation id="1201895884277373915">Más sobre este sitio</translation>
+<translation id="1205963431094182634">Accede a tu Cuenta de Google para usar las contraseñas almacenadas allí</translation>
 <translation id="1206967143813997005">La firma inicial no es válida</translation>
 <translation id="1209206284964581585">Ocultar por el momento</translation>
 <translation id="121201262018556460">Intentaste acceder a <ph name="DOMAIN" />, pero el servidor  presentó un certificado que contiene una clave no segura. Es posible que un atacante haya descifrado la clave privada y que este no sea el servidor esperado (es posible que hayas establecido comunicación con un atacante).</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 2a36d84c..0457335 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Oranž</translation>
 <translation id="1201402288615127009">Edasi</translation>
 <translation id="1201895884277373915">Veel sellelt saidilt</translation>
+<translation id="1205963431094182634">Logige sisse, et kasutada oma Google'i kontole salvestatud paroole</translation>
 <translation id="1206967143813997005">Sobimatu algne allkiri</translation>
 <translation id="1209206284964581585">Peida praeguseks</translation>
 <translation id="121201262018556460">Proovisite jõuda saidile <ph name="DOMAIN" />, kuid server esitas nõrka võtit sisaldava sertifikaadi. Võimalik, et ründaja on privaatvõtme lahti murdnud ja tegemist ei pruugi olla oodatud serveriga (võimalik, et suhtlete ründajaga).</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index fbf2fa1b..5d78cfd 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Laranja</translation>
 <translation id="1201402288615127009">Hurrengoa</translation>
 <translation id="1201895884277373915">Webgune honetako gehiago</translation>
+<translation id="1205963431094182634">Hasi saioa Google-ko kontuan gordetako pasahitzak erabiltzeko</translation>
 <translation id="1206967143813997005">Hasierako sinadurak ez du balio</translation>
 <translation id="1209206284964581585">Ezkutatu</translation>
 <translation id="121201262018556460"><ph name="DOMAIN" /> domeinuarekin komunikatzen saiatu zara, baina zerbitzariak aurkeztu duen ziurtagiriaren gakoa ez da segurua. Agian erasotzaile batek gako pribatua bortxatu du eta zerbitzaria ez da espero zenuena (agian erasotzaile batekin komunikatzen ari zara).</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index de3a39e..04addd0 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Orange</translation>
 <translation id="1201402288615127009">Suivant</translation>
 <translation id="1201895884277373915">Plus de résultats pour ce site</translation>
+<translation id="1205963431094182634">Connectez-vous pour utiliser les mots de passe stockés dans votre compte Google</translation>
 <translation id="1206967143813997005">Signature initiale incorrecte</translation>
 <translation id="1209206284964581585">Masquer pour l'instant</translation>
 <translation id="121201262018556460">Vous avez tenté d'accéder à <ph name="DOMAIN" />, mais le serveur a présenté un certificat contenant une clé faible. Il est possible qu'un pirate ait compromis la clé privée. Il est donc possible que le serveur auquel vous avez accédé ne soit pas celui que vous croyez, et que vous soyez en train de communiquer avec un pirate informatique.</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 0bd09686..1a2f67d 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Orange</translation>
 <translation id="1201402288615127009">Suivant</translation>
 <translation id="1201895884277373915">Plus de résultats pour ce site</translation>
+<translation id="1205963431094182634">Connectez-vous pour utiliser les mots de passe enregistrés dans votre compte Google</translation>
 <translation id="1206967143813997005">Signature initiale incorrecte</translation>
 <translation id="1209206284964581585">Masquer pour le moment</translation>
 <translation id="121201262018556460">Vous avez tenté d'accéder à <ph name="DOMAIN" />, mais le serveur a présenté un certificat contenant une clé faible. Il est possible qu'un pirate ait compromis la clé privée. Il est donc possible que le serveur auquel vous avez accédé ne soit pas celui que vous croyez, et que vous soyez en train de communiquer avec un pirate informatique.</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 5a75ce4f..82fc3e8d 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">નારંગી</translation>
 <translation id="1201402288615127009">આગલું</translation>
 <translation id="1201895884277373915">આ સાઇટથી વધુ</translation>
+<translation id="1205963431094182634">તમારા Google એકાઉન્ટમાં સ્ટોર કરેલા પાસવર્ડનો ઉપયોગ કરવા માટે સાઇન ઇન કરો</translation>
 <translation id="1206967143813997005">ખોટી નાની સહી</translation>
 <translation id="1209206284964581585">હમણાં માટે છુપાવો</translation>
 <translation id="121201262018556460">તમે <ph name="DOMAIN" /> સુધી પહોંચવાનો પ્રયાસ કર્યો, પણ પ્રમાણપત્ર રજૂ કરતા સર્વર પાસે નબળી કી છે. હુમલાખોરે ખાનગી કી તોડી હોઈ શકે છે, અને બને કે સર્વર તમારું અપેક્ષિત સર્વર ન હોય (તમે કોઈ હુમલાખોર સાથે વાર્તાલાપ કરી રહ્યાં હોઈ શકો છો).</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 7d3603b..94a8229a 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">नारंगी</translation>
 <translation id="1201402288615127009">अगला</translation>
 <translation id="1201895884277373915">इस साइट की ओर से ज़्यादा</translation>
+<translation id="1205963431094182634">अपने Google खाते में सेव किए गए पासवर्ड इस्तेमाल करने के लिए साइन इन करें</translation>
 <translation id="1206967143813997005">नाम के पहले अक्षर के गलत हस्ताक्षर</translation>
 <translation id="1209206284964581585">अभी छिपाएं</translation>
 <translation id="121201262018556460">आपने <ph name="DOMAIN" /> तक पहुंचने का प्रयास किया, लेकिन लेकिन सर्वर ने कमज़ोर कुंजी वाला प्रमाणपत्र प्रस्‍तुत किया. संभवत: हमलावर ने निजी कुंजी का पता लगा लिया है, और हो सकता है कि सर्वर आपका अपेक्षित सर्वर न हो (हो सकता है कि आप किसी हमलावर से बातचीत कर रहे हों).</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index 0cb3e505..a9a3977 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Oranye</translation>
 <translation id="1201402288615127009">Berikutnya</translation>
 <translation id="1201895884277373915">Lainnya dari situs ini</translation>
+<translation id="1205963431094182634">Login untuk menggunakan sandi yang disimpan di Akun Google Anda</translation>
 <translation id="1206967143813997005">Tanda tangan awal tidak valid</translation>
 <translation id="1209206284964581585">Sembunyikan sekarang</translation>
 <translation id="121201262018556460">Anda bermaksud membuka <ph name="DOMAIN" />, namun server menyajikan sertifikat yang berisi kunci yang lemah. Penyerang mungkin telah merusak kunci pribadi, dan server mungkin bukan yang diharapkan (Anda mungkin sedang berkomunikasi dengan penyerang).</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index b8cb00f..d1c081ff 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">オレンジ</translation>
 <translation id="1201402288615127009">次へ</translation>
 <translation id="1201895884277373915">このサイトからの他の履歴</translation>
+<translation id="1205963431094182634">Google アカウントに保存したパスワードを使用するには、ログインしてください</translation>
 <translation id="1206967143813997005">最初の署名に問題があります</translation>
 <translation id="1209206284964581585">今は表示しない</translation>
 <translation id="121201262018556460"><ph name="DOMAIN" /> にアクセスしようとしましたが、サーバーから提示された証明書には脆弱な暗号鍵が含まれています。悪意のあるユーザーによって秘密鍵が破られた可能性があり、アクセスしようとしたサーバーとは異なるサーバーであるおそれがあります(悪意のあるユーザーと通信している可能性があります)。</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb
index 9ed4820..c9aacd5 100644
--- a/components/strings/components_strings_ka.xtb
+++ b/components/strings/components_strings_ka.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">ნარინჯისფერი</translation>
 <translation id="1201402288615127009">შემდეგი</translation>
 <translation id="1201895884277373915">მეტი ამ საიტიდან</translation>
+<translation id="1205963431094182634">თქვენს Google ანგარიშში შენახული პაროლების გამოსაყენებლად შედით სისტემაში</translation>
 <translation id="1206967143813997005">საწყისი ხელმოწერა არასწორია</translation>
 <translation id="1209206284964581585">ამჯერად დამალვა</translation>
 <translation id="121201262018556460">თქვენ სცადეთ <ph name="DOMAIN" />-ზე წვდომა, მაგრამ სერვერმა წარმოადგინა სუსტი გასაღების შემცველი სერთიფიკატი. შესაძლოა თავდამსხმელმა გატეხა პირადი გასაღები და შეიძლება სერვერი არ იყოს სერვერი, რომელსაც თქვენ მოელოდით (შეიძლება თქვენ ურთიერთობა გაქვთ თავდამსხმელთან).</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index 523ba86..1aeffa01 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Қызғылт сары</translation>
 <translation id="1201402288615127009">Келесі</translation>
 <translation id="1201895884277373915">Бұл сайттан толығырақ</translation>
+<translation id="1205963431094182634">Google есептік жазбаңызда сақталған құпия сөздерді пайдалану үшін кіріңіз</translation>
 <translation id="1206967143813997005">Бастапқы қолтаңба дұрыс емес</translation>
 <translation id="1209206284964581585">Әзірге жасыру</translation>
 <translation id="121201262018556460"><ph name="DOMAIN" /> доменіне қол жеткізуге әрекет еттіңіз, бірақ сервер кілті әлсіз сертификатты ұсынды. Қаскүнем жеке кілтті бұзып, басқа серверге кіріп жатқан болуыңыз мүмкін (қаскүнеммен байланысып жатқан болуыңыз мүмкін).</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb
index 3e4b86d..59030ac 100644
--- a/components/strings/components_strings_km.xtb
+++ b/components/strings/components_strings_km.xtb
@@ -53,6 +53,7 @@
 <translation id="1197088940767939838">ទឹក​ក្រូច</translation>
 <translation id="1201402288615127009">បន្ទាប់</translation>
 <translation id="1201895884277373915">របស់ជាច្រើនទៀតពីគេហទំព័រនេះ</translation>
+<translation id="1205963431094182634">ចូលគណនី ដើម្បីប្រើ​ពាក្យសម្ងាត់​ដែលរក្សាទុក​នៅក្នុងគណនី Google របស់អ្នក</translation>
 <translation id="1206967143813997005">ហត្ថលេខាខ្លីមិនល្អ</translation>
 <translation id="1209206284964581585">លាក់ឥឡូវនេះ</translation>
 <translation id="121201262018556460">អ្នកបានព្យាយាមទៅកាន់ <ph name="DOMAIN" /> ប៉ុន្តែម៉ាស៊ីនមេបានបង្ហាញវិញ្ញាបនប័ត្រដែលផ្ទុកសោខ្សោយ។ អ្នកវាយប្រហារប្រហែលជាបានបំបែកសោឯកជននោះ ហើយម៉ាស៊ីនមេប្រហែលជាមិនមែនជាម៉ាស៊ីនមេដែលអ្នកបានរំពឹងទុកនោះទេ (អ្នកអាចកំពុងទំនាក់ទំនងជាមួយអ្នកវាយប្រហារ)។</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index ad78cbfd4..52b73c97 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">ಕಿತ್ತಳೆ</translation>
 <translation id="1201402288615127009">ಮುಂದೆ</translation>
 <translation id="1201895884277373915">ಈ ಸೈಟ್‌ನಿಂದ ಇನ್ನಷ್ಟು</translation>
+<translation id="1205963431094182634">ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಸಂಗ್ರಹಣೆ ಮಾಡಲಾದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಬಳಸಲು ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 <translation id="1206967143813997005">ತಪ್ಪು ಪ್ರಾರಂಭಿಕ ಸಹಿ</translation>
 <translation id="1209206284964581585">ಸದ್ಯಕ್ಕೆ ಮರೆಮಾಡಿ</translation>
 <translation id="121201262018556460">ನೀವು <ph name="DOMAIN" /> ಅನ್ನು ತಲುಪಲು ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ, ಆದರೆ ದುರ್ಬಲ ಕೀಲಿಯನ್ನು ಹೊಂದಿರುವ ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಒದಗಿಸಿದೆ. ಆಕ್ರಮಣಕಾರರು ಖಾಸಗಿ ಕೀಲಿಯನ್ನು ಮುರಿದುಹಾಕಿರಬಹುದು, ಮತ್ತು ನೀವು ನಿರೀಕ್ಷಿಸಿದ ಸರ್ವರ್ ಅದಾಗಿರದೇ ಇರಬಹುದು. (ನೀವು ದಾಳಿಕೋರರೊಂದಿಗೆ ಸಂವಹನ ಮಾಡುತ್ತಿರಬಹುದು)</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 0f63e9d..04d550b6 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">오렌지색</translation>
 <translation id="1201402288615127009">다음</translation>
 <translation id="1201895884277373915">이 사이트에서 더보기</translation>
+<translation id="1205963431094182634">로그인하여 Google 계정에 저장된 비밀번호 사용</translation>
 <translation id="1206967143813997005">잘못된 초기 서명</translation>
 <translation id="1209206284964581585">지금 숨기기</translation>
 <translation id="121201262018556460"><ph name="DOMAIN" />에 접속하려 했으나 서버가 안전성이 낮은 키가 포함된 인증서를 전달했습니다. 공격자가 비공개 키를 손상시켰을 수 있으며 서버를 가장한 공격자와 통신 중일 수 있습니다.</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index 51cb668..f70ed573 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Кызгылт сары</translation>
 <translation id="1201402288615127009">Кийинки</translation>
 <translation id="1201895884277373915">Бул сайттан дагы көбүрөөк маалымат</translation>
+<translation id="1205963431094182634">Google аккаунтуңузда сакталган сырсөздөрдү колдонуу үчүн аккаунтуңузга кириңиз</translation>
 <translation id="1206967143813997005">Баштапкы колтамга начар</translation>
 <translation id="1209206284964581585">Азырынча жашыруу</translation>
 <translation id="121201262018556460"><ph name="DOMAIN" /> доменин ачканга аракет кылдыңыз, бирок сервер чабал ачкычты камтыган тастыктаманы сунуштады. Башкача айтканда, зыянкеч чабуулчу жеке ачкычты бузгандыктан, сервер сиз күтүп жаткан сервер болбой калышы мүмкүн (балким, чабуулчу менен байланышып жатасыз).</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 43c7227..d639ee5 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">ສີໝາກກ້ຽງ</translation>
 <translation id="1201402288615127009">ຕໍ່ໄປ</translation>
 <translation id="1201895884277373915">ເພີ່ມເຕີມຈາກ​ເວັບ​ໄຊ​ທ໌ນີ້</translation>
+<translation id="1205963431094182634">ເຂົ້າສູ່ລະບົບເພື່ອໃຊ້ລະຫັດຜ່ານທີ່ເກັບໄວ້ໃນບັນຊີ Google ຂອງທ່ານ</translation>
 <translation id="1206967143813997005">ລາຍເຊັນເບື້ອງຕົ້ນທີ່ບໍ່ດີ</translation>
 <translation id="1209206284964581585">ເຊື່ອງສຳລັບຕອນນີ້</translation>
 <translation id="121201262018556460">ທ່ານໄດ້ພະຍາຍາມທີ່ຈະເຂົ້າຫາ <ph name="DOMAIN" />, ແຕ່ເຊີບເວີໄດ້ນໍາສະເໜີໃບຢັ້ງຢືນທີ່ມີລະຫັດອ່ອນ. ຜູ້ໂຈມຕີສາມາດທໍາລາຍລະຫັດສ່ວນຕົວໄດ້, ແລະເຊີບເວີອາດຈະບໍ່ເປັນເຊີບເວີທີ່ທ່ານຄາດໄວ້ (ທ່ານອາດຈະກໍາລັງສື່ສານກັບຜູ້ໂຈມຕີຢູ່).</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index 61ce6b0..ddc2cf860 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Oranžinė</translation>
 <translation id="1201402288615127009">Kitas</translation>
 <translation id="1201895884277373915">Daugiau iš šios svetainės</translation>
+<translation id="1205963431094182634">Prisijunkite, kad galėtumėte naudoti „Google“ paskyroje saugomus slaptažodžius</translation>
 <translation id="1206967143813997005">Netinkamas pirminis parašas</translation>
 <translation id="1209206284964581585">Slėpti dabar</translation>
 <translation id="121201262018556460">Bandėte pasiekti <ph name="DOMAIN" />, bet serveris pateikė nesudėtingą raktą turintį sertifikatą. Užpuolikas galėjo nulaužti privatųjį raktą, o šis serveris gali būti ne tas, kurio tikėjotės (gali būti, kad bendraujate su užpuoliku).</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 54ddce1..6dbd391 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Oranža</translation>
 <translation id="1201402288615127009">Tālāk</translation>
 <translation id="1201895884277373915">Vairāk no šīs vietnes</translation>
+<translation id="1205963431094182634">Pierakstieties, lai izmantotu jūsu Google kontā saglabātās paroles</translation>
 <translation id="1206967143813997005">Sākotnējais paraksts nav derīgs</translation>
 <translation id="1209206284964581585">Pagaidām slēpt</translation>
 <translation id="121201262018556460">Jūs centāties sasniegt <ph name="DOMAIN" />, bet servera uzrādītais sertifikāts satur vāju atslēgu. Iespējams, uzbrucējs ir uzlauzis privāto atslēgu un serveris var nebūt tas, ko centāties sasniegt (iespējams, jūs sazināties ar uzbrucēju).</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index fa8a140..ade623a 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">ഓറഞ്ച്</translation>
 <translation id="1201402288615127009">അടുത്തത്</translation>
 <translation id="1201895884277373915">ഈ സൈറ്റിൽ നിന്നും കൂടുതൽ</translation>
+<translation id="1205963431094182634">നിങ്ങളുടെ Google അക്കൗണ്ടിൽ സംഭരിച്ചിരിക്കുന്ന പാസ്‌വേഡുകൾ ഉപയോഗിക്കാൻ സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="1206967143813997005">പ്രാരംഭ സിഗ്നേച്ചർ ശരിയല്ല</translation>
 <translation id="1209206284964581585">ഇപ്പോഴത്തേയ്‌ക്ക് മറയ്‌ക്കുക</translation>
 <translation id="121201262018556460">നിങ്ങള്‍‌ <ph name="DOMAIN" /> എന്നതില്‍ എത്താന്‍‌ ശ്രമിച്ചു, പക്ഷെ സെർവർ ഹാജരാക്കിയ സർട്ടിഫിക്കറ്റിൽ ഒരു ദുർബലമായ കീ ഉൾപ്പെടുന്നു. ഒരു ആക്രമണകാരിക്ക് സ്വകാര്യ കീ നശിപ്പിച്ചിരിക്കാം, കൂടാതെ സെർവർ നിങ്ങൾ പ്രതീക്ഷിച്ച സെർവർ ആയിരിക്കില്ല (നിങ്ങൾ ആശയവിനിമയം നടത്തുന്നത് ഒരു ആക്രമണകാരിയുമായിട്ടാകാം).</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index 670973c..ccdbf16 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Улбар шар</translation>
 <translation id="1201402288615127009">Дараагийнх</translation>
 <translation id="1201895884277373915">Энэ сайтаас илүү ихийг</translation>
+<translation id="1205963431094182634">Google бүртгэлдээ хадгалсан нууц үгсийг ашиглахын тулд нэвтэрнэ үү</translation>
 <translation id="1206967143813997005">Анхны муу гарын үсэг</translation>
 <translation id="1209206284964581585">Одоо нуух</translation>
 <translation id="121201262018556460">Та <ph name="DOMAIN" />-д хандах оролдлого хийсэн боловч сервер нь сул кодлол ашигласан сертификаттай байна. Халдагч системийн хувийн кодлолыг гэмтээсэн байж болзошгүй бөгөөд энэхүү сервер нь таны хандахыг хүссэн сервер (та халдагчтай харилцаж байж болно) биш байж болох юм.</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index cd3a093..e364dce 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">नारिंगी</translation>
 <translation id="1201402288615127009">पुढील</translation>
 <translation id="1201895884277373915">या साइटकडून अधिक</translation>
+<translation id="1205963431094182634">तुमच्या Google खात्यामध्ये स्टोअर केलेले पासवर्ड वापरण्यासाठी साइन इन करा</translation>
 <translation id="1206967143813997005">खराब प्रारंभिक स्वाक्षरी</translation>
 <translation id="1209206284964581585">आतासाठी लपवा</translation>
 <translation id="121201262018556460">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केलात, परंतु सर्व्हरने एक कमकुवत की असलेले सर्टिफिकेट सादर केले. हल्लेखोराने गोपनीय की तोडलेली असू शकते आणि सर्व्हर हे तुम्हाला अपेक्षित असणारे सर्व्हर नसू शकते (तुम्ही कदाचित हल्लेखोराशी संवाद प्रस्थापित करत असाल).</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index 49604807..28ff72d 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -7,7 +7,7 @@
 <translation id="1019413721762100891">निष्क्रिय छ</translation>
 <translation id="1021110881106174305">स्वीकार गरिएका कार्डहरू</translation>
 <translation id="1021753677514347426">तपाईं वा अरू कसैले तपाईंको यन्त्रमा प्रमाणपत्र स्थापना गरेका कारण यस्तो समस्या आउँछ। उक्त प्रमाणपत्र नेटवर्कहरूको निगरानी गर्न र अवरोध गर्न प्रयोग गरिने भनी चिनिन्छ Chromium ले यसलाई विश्वास गर्दैन। विद्यालय वा कम्पनीको नेटवर्क जस्ता केही स्थानका हकमा निगरानी गरिने कार्य वैध नै मानिन्छ र तपाईंले त्यस्ता निगरानीलाई रोक्न नसक्ने भए तापनि Chromium तपाईं त्यसबारे जानकार रहनुहोस् भन्ने चाहन्छ। वेबमाथि पहुँच गर्न सक्ने जुनसुकै ब्राउजर वा अनुप्रयोगमाथि निगरानी हुन सक्छ।</translation>
-<translation id="1030706264415084469"><ph name="URL" /> तपाईंको यन्त्रमा स्थायी रूपमा ठूलो परिमाणको डेटा भण्डारण गर्न चाहन्छ</translation>
+<translation id="1030706264415084469"><ph name="URL" /> तपाईंको यन्त्रमा स्थायी रूपमा ठुलो परिमाणको डेटा भण्डारण गर्न चाहन्छ</translation>
 <translation id="1032854598605920125">घडीको दिशामा घुमाउनुहोस्</translation>
 <translation id="1036348656032585052">निस्कृय पार्नुहोस्</translation>
 <translation id="1038842779957582377">अज्ञात नाम</translation>
@@ -249,7 +249,7 @@
 तपाईं <ph name="EMBEDDED_URL" /> लाई <ph name="TOP_LEVEL_URL" /> का कुकी र साइटको डेटा प्रयोग गर्ने अनुमति दिन चाहनुहुन्छ?
 
 अन्यथा, तपाईंको गोपनीयतासम्बन्धी सेटिङअनुसार कुकी र साइटको डेटामाथि पहुँच राख्न रोक लगाइने छ। तपाईंले यो अनुमति दिनुभयो भने तपाईंले अन्तर्क्रिया गर्ने सामग्रीले अझ राम्रोसँग काम गर्न सक्ने छ। तर साथसाथै <ph name="EMBEDDED_URL" /> ले तपाईंको क्रियाकलापको ट्र्याक गर्न सक्ने सम्भावना हुन्छ।</translation>
-<translation id="1997484222658892567"><ph name="URL" /> तपाईंको स्थानीय कम्प्युटरमा स्थायी रूपमा ठूलो परिमाणको डेटा भण्डारण गर्न चाहन्छ</translation>
+<translation id="1997484222658892567"><ph name="URL" /> तपाईंको स्थानीय कम्प्युटरमा स्थायी रूपमा ठुलो परिमाणको डेटा भण्डारण गर्न चाहन्छ</translation>
 <translation id="2001146170449793414">{COUNT,plural, =1{र थप १}other{र थप #}}</translation>
 <translation id="2003709556000175978">अहिले आफ्नो पासवर्ड रिसेट गर्नुहोस्</translation>
 <translation id="2003775180883135320">सिरानमा चार प्वाल</translation>
@@ -1612,7 +1612,7 @@
 <translation id="7882421473871500483">खैरो</translation>
 <translation id="7887683347370398519">तपाईँको CVC जाँच गर्नुहोस् र फेरि प्रयास गर्नुहोस्</translation>
 <translation id="7887885240995164102">picture-in-picture मोडमा प्रविष्टि गर्नुहोस्‌</translation>
-<translation id="7888575728750733395">मुद्रण रेन्डर गर्ने प्रक्रियाको उद्देश्य</translation>
+<translation id="7888575728750733395">प्रिन्टिङ रेन्डर गर्ने प्रक्रियाको उद्देश्य</translation>
 <translation id="7904208859782148177">C3 (Envelope)</translation>
 <translation id="7932579305932748336">कोट</translation>
 <translation id="79338296614623784">मान्य फोन नम्बर प्रविष्टि गर्नुहोस्</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb
index 470293c..6bd3a05 100644
--- a/components/strings/components_strings_or.xtb
+++ b/components/strings/components_strings_or.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">କମଳା</translation>
 <translation id="1201402288615127009">ପରବର୍ତ୍ତୀ</translation>
 <translation id="1201895884277373915">ଏହି ସାଇଟ୍‌ ତରଫରୁ ଅଧିକ</translation>
+<translation id="1205963431094182634">ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ଷ୍ଟୋର୍ କରାଯାଇଥିବା ପାସୱାର୍ଡଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବାକୁ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ</translation>
 <translation id="1206967143813997005">ପ୍ରାରମ୍ଭିକ ଭୁଲ୍‌ ଦସ୍ତଖତ</translation>
 <translation id="1209206284964581585">ବର୍ତ୍ତମାନ ପାଇଁ ଲୁଚାନ୍ତୁ</translation>
 <translation id="121201262018556460">ଆପଣ <ph name="DOMAIN" />ରେ ପହଞ୍ଚିବାକୁ ଚେଷ୍ଟା କରିଛନ୍ତି କିନ୍ତୁ ସର୍ଭର୍ ଏକ ଦୁର୍ବଳ କୀ ଧାରଣ କରିଥିବା ସାର୍ଟିଫିକେଟ୍ ଉପସ୍ଥାପନ କରିଛି। ଜଣେ ଆକ୍ରମଣକାରୀ ବ୍ୟକ୍ତିଗତ କୀ'ପାଖରେ ପହଞ୍ଚିପାରେ ଏବଂ ସର୍ଭର୍‌ଟି ହୁଏତ ଆପଣଙ୍କର ପ୍ରତ୍ୟାଶିତ ସର୍ଭର୍ ନ ହୋଇଥାଇପାରେ (ଆପଣ ହୁଏତ ଜଣେ ଆକ୍ରମଣକାରୀଙ୍କ ସହିତ ଯୋଗାଯୋଗ କରୁଥାଇପାରନ୍ତି)।</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb
index ed515fc6..cb7f885 100644
--- a/components/strings/components_strings_pa.xtb
+++ b/components/strings/components_strings_pa.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">ਸੰਤਰੀ</translation>
 <translation id="1201402288615127009">ਅੱਗੇ</translation>
 <translation id="1201895884277373915">ਇਸ ਸਾਈਟ ਤੋਂ ਹੋਰ</translation>
+<translation id="1205963431094182634">ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚ ਸਟੋਰ ਕੀਤੇ ਪਾਸਵਰਡ ਵਰਤਣ ਲਈ ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
 <translation id="1206967143813997005">ਗਲਤ ਛੋਟੇ ਹਸਤਾਖਰ</translation>
 <translation id="1209206284964581585">ਫਿਲਹਾਲ ਲੁਕਾਓ</translation>
 <translation id="121201262018556460">ਤੁਸੀਂ <ph name="DOMAIN" /> ਤੱਕ ਪਹੁੰਚਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ, ਪਰ ਸਰਵਰ ਨੇ ਕਮਜ਼ੋਰ ਕੁੰਜੀ ਵਾਲਾ ਇੱਕ ਸਰਟੀਫਿਕੇਟ ਪੇਸ਼ ਕੀਤਾ ਹੈ। ਕਿਸੇ ਹਮਲਾਵਰ ਨੇ ਨਿੱਜੀ ਕੁੰਜੀ ਨੂੰ ਬ੍ਰੇਕ ਕੀਤਾ ਹੋ ਸਕਦਾ ਹੈ ਅਤੇ ਜਿਸ ਕਰਕੇ ਸਰਵਰ ਤੁਹਾਡੀ ਉਮੀਦ ਤੋਂ ਵੱਖਰਾ ਹੋ ਸਕਦਾ ਹੈ (ਤੁਸੀਂ ਸ਼ਾਇਦ ਇੱਕ ਹਮਲਾਵਰ ਨਾਲ ਸੰਚਾਰ ਕਰ ਰਹੇ ਹੋ)।</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 26b43c05..0c323169 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Оранжевый</translation>
 <translation id="1201402288615127009">Далее</translation>
 <translation id="1201895884277373915">Другие записи по этому сайту</translation>
+<translation id="1205963431094182634">Чтобы использовать пароли, сохраненные в аккаунте Google, выполните вход.</translation>
 <translation id="1206967143813997005">Начальная подпись недействительна</translation>
 <translation id="1209206284964581585">Скрыть</translation>
 <translation id="121201262018556460">Вы попытались перейти на сайт <ph name="DOMAIN" />, но сервер предоставил сертификат с ненадежным ключом. Возможно, частный ключ был взломан злоумышленником, а сервер выдает себя за другой (вероятно, это атака).</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index 30f91d9..3b8b1bb 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Oranžna</translation>
 <translation id="1201402288615127009">Naprej</translation>
 <translation id="1201895884277373915">Več s tega mesta</translation>
+<translation id="1205963431094182634">Prijavite se, če želite uporabljati gesla, shranjena v računu Google</translation>
 <translation id="1206967143813997005">Neveljaven prvotni podpis</translation>
 <translation id="1209206284964581585">Zaenkrat skrij</translation>
 <translation id="121201262018556460">Poskusili ste dostopati do domene <ph name="DOMAIN" />, vendar ima strežnik potrdilo s šibkim ključem. Napadalec je morda dešifriral zasebni ključ in strežnik morda ni tisti, ki ste ga pričakovali (morda komunicirate z napadalcem).</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb
index 81d9342..737e707 100644
--- a/components/strings/components_strings_sq.xtb
+++ b/components/strings/components_strings_sq.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Portokalli</translation>
 <translation id="1201402288615127009">Tjetra</translation>
 <translation id="1201895884277373915">Më shumë nga ky sajt</translation>
+<translation id="1205963431094182634">Identifikohu për të përdorur fjalëkalimet e ruajtura në "Llogarinë tënde të Google"</translation>
 <translation id="1206967143813997005">Nënshkrimi fillestar i gabuar</translation>
 <translation id="1209206284964581585">Fshih për momentin</translation>
 <translation id="121201262018556460">Tentove të hapje <ph name="DOMAIN" />, por serveri paraqiti një certifikatë që përmban një çelës të dobët. Një sulmues mund ta ketë prishur çelësin privat dhe serveri mund të mos jetë ai që prisje (mund të jesh duke komunikuar me një sulmues).</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index 95ca7be..b6d90a9 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">Orange</translation>
 <translation id="1201402288615127009">Nästa</translation>
 <translation id="1201895884277373915">Mer från den här webbplatsen</translation>
+<translation id="1205963431094182634">Logga in om du vill använda lösenord som har sparats i Google-kontot</translation>
 <translation id="1206967143813997005">Felaktig första signatur</translation>
 <translation id="1209206284964581585">Dölj för tillfället</translation>
 <translation id="121201262018556460">Du försökte öppna <ph name="DOMAIN" />, men servern visade ett certifikat som signerats med en svag nyckel. Det innebär att den privata nyckeln som servern visar kan vara en förfalskning och att servern kanske inte är den server du tror (du kanske kommunicerar med en skadlig server).</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index f4b1d17..133dcd1f 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">నారింజ రంగు</translation>
 <translation id="1201402288615127009">తరువాత</translation>
 <translation id="1201895884277373915">ఈ సైట్ నుండి మరికొన్ని</translation>
+<translation id="1205963431094182634">మీ Google ఖాతాలో స్టోర్ చేయబడిన పాస్‌వర్డ్‌లను ఉపయోగించడానికి సైన్ ఇన్ చేయండి</translation>
 <translation id="1206967143813997005">తప్పు ప్రారంభ సంతకం</translation>
 <translation id="1209206284964581585">ప్రస్తుతానికి దాచు</translation>
 <translation id="121201262018556460">మీరు <ph name="DOMAIN" />ను చేరుకోవడానికి ప్రయత్నించారు, కానీ సర్వర్ బలహీన కీని కలిగి ఉన్న ప్రమాణపత్రాన్ని అందించింది. దాడి చేసేవారు ప్రైవేట్ కీని విచ్ఛిన్నం చేశారు మరియు సర్వర్ మీరు ఊహించిన సర్వర్ కాకపోవచ్చు (మీరు దాడి చేసే వారితో కమ్యూనికేట్ చేస్తుండవచ్చు).</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 94f35cc3..88248b4c 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">สีส้ม</translation>
 <translation id="1201402288615127009">ถัดไป</translation>
 <translation id="1201895884277373915">เพิ่มเติมจากไซต์นี้</translation>
+<translation id="1205963431094182634">ลงชื่อเข้าใช้เพื่อใช้รหัสผ่านที่จัดเก็บในบัญชี Google</translation>
 <translation id="1206967143813997005">ลายเซ็นเริ่มต้นไม่ถูกต้อง</translation>
 <translation id="1209206284964581585">ซ่อนไปก่อน</translation>
 <translation id="121201262018556460">คุณพยายามเข้าถึง <ph name="DOMAIN" /> แต่เซิร์ฟเวอร์แสดงใบรับรองที่มีคีย์ที่ไม่รัดกุม ผู้โจมตีอาจทำให้คีย์ส่วนตัวเสียหายไปแล้วและเซิร์ฟเวอร์นี้อาจไม่ใช่เซิร์ฟเวอร์ที่คุณคิด (คุณอาจกำลังติดต่อกับผู้โจมตี)</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 83a204c..0f5b1d69 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">橙色</translation>
 <translation id="1201402288615127009">下一步</translation>
 <translation id="1201895884277373915">来自该网站的更多内容</translation>
+<translation id="1205963431094182634">登录即可使用存储在您 Google 帐号中的密码</translation>
 <translation id="1206967143813997005">初始签名不正确</translation>
 <translation id="1209206284964581585">暂时隐藏</translation>
 <translation id="121201262018556460">您尝试访问的是 <ph name="DOMAIN" />,但是服务器出示的证书包含弱密钥。攻击者可能已经破解了私钥,因此这可能并不是您想要访问的服务器(您可能正在与攻击者进行通信)。</translation>
@@ -169,7 +170,7 @@
 <translation id="1644574205037202324">历史记录</translation>
 <translation id="1645368109819982629">协议不受支持</translation>
 <translation id="1652415888492971589">JIS B8</translation>
-<translation id="1656024727720460136">Chrome 简化了该页面,让内容更易于阅读。Chrome 通过安全的连接检索到了原始网页。</translation>
+<translation id="1656024727720460136">Chrome 已简化该页面,让内容更易于阅读,并且通过安全的连接检索到了原始网页。</translation>
 <translation id="1656489000284462475">取货</translation>
 <translation id="1662550410081243962">保存并填写付款方式</translation>
 <translation id="1663943134801823270">信用卡选项和地址选项均来自 Chrome。您可在<ph name="BEGIN_LINK" />设置<ph name="END_LINK" />中管理这些选项。</translation>
@@ -1358,7 +1359,7 @@
 <translation id="6874604403660855544">恢复添加(&amp;R)</translation>
 <translation id="6884662655240309489">大小:1</translation>
 <translation id="6886577214605505410"><ph name="LOCATION_TITLE" /> <ph name="SHORT_URL" /></translation>
-<translation id="6888584790432772780">Chrome 简化了该页面,让内容更易于阅读。Chrome 通过不安全的连接检索到了原始网页。</translation>
+<translation id="6888584790432772780">Chrome 已简化该页面,让内容更易于阅读,并且通过不安全的连接检索到了原始网页。</translation>
 <translation id="6891596781022320156">政策级别不受支持。</translation>
 <translation id="6895330447102777224">已确认您的信用卡</translation>
 <translation id="6897140037006041989">用户代理</translation>
@@ -1587,7 +1588,7 @@
 <translation id="777702478322588152">县</translation>
 <translation id="7791196057686275387">捆绑式装订</translation>
 <translation id="7791543448312431591">添加</translation>
-<translation id="7798389633136518089">已被忽略,因为此政策不是由云端来源设置的。</translation>
+<translation id="7798389633136518089">此政策不是由云端来源设置,因此已被忽略。</translation>
 <translation id="7800304661137206267">该连接是使用 <ph name="CIPHER" /> 进行加密的,同时使用 <ph name="MAC" /> 进行讯息身份验证并使用 <ph name="KX" /> 作为密钥交换机制。</translation>
 <translation id="7802523362929240268">网站是合规的</translation>
 <translation id="780301667611848630">不用了,谢谢</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 14cb223..a0131d7 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -52,6 +52,7 @@
 <translation id="1197088940767939838">橘色</translation>
 <translation id="1201402288615127009">繼續</translation>
 <translation id="1201895884277373915">這個網站的更多內容</translation>
+<translation id="1205963431094182634">登入即可使用儲存在 Google 帳戶中的密碼</translation>
 <translation id="1206967143813997005">縮寫簽名無效</translation>
 <translation id="1209206284964581585">暫時隱藏</translation>
 <translation id="121201262018556460">你嘗試前往 <ph name="DOMAIN" />,但伺服器所提供的憑證含有防護力薄弱的金鑰。攻擊者可能已破壞私密金鑰,而該伺服器可能並非你的目標伺服器 (你的連線對象可能是攻擊者的電腦)。</translation>
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
index fd5e7c5..ab6f58e9 100644
--- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
+++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
@@ -1619,22 +1619,20 @@
 }
 
 bool SkiaOutputSurfaceImplOnGpu::MakeCurrent(bool need_fbo0) {
-  if (context_state_->context_lost())
+  // need_fbo0 implies need_gl too.
+  bool need_gl = need_fbo0;
+  // Only make current with |gl_surface_|, if following operations will use
+  // fbo0.
+  auto* gl_surface = need_fbo0 ? gl_surface_.get() : nullptr;
+  if (!context_state_->MakeCurrent(gl_surface, need_gl)) {
+    LOG(ERROR) << "Failed to make current.";
+    dependency_->DidLoseContext(
+        gpu::error::kMakeCurrentFailed,
+        GURL("chrome://gpu/SkiaOutputSurfaceImplOnGpu::MakeCurrent"));
+    MarkContextLost(CONTEXT_LOST_MAKECURRENT_FAILED);
     return false;
-
-  if (gpu_preferences_.gr_context_type == gpu::GrContextType::kGL) {
-    // Only make current with |gl_surface_|, if following operations will use
-    // fbo0.
-    if (!context_state_->MakeCurrent(need_fbo0 ? gl_surface_.get() : nullptr)) {
-      LOG(ERROR) << "Failed to make current.";
-      dependency_->DidLoseContext(
-          gpu::error::kMakeCurrentFailed,
-          GURL("chrome://gpu/SkiaOutputSurfaceImplOnGpu::MakeCurrent"));
-      MarkContextLost(CONTEXT_LOST_MAKECURRENT_FAILED);
-      return false;
-    }
-    context_state_->set_need_context_state_reset(true);
   }
+  context_state_->set_need_context_state_reset(true);
   return true;
 }
 
diff --git a/content/browser/frame_host/navigation_request.h b/content/browser/frame_host/navigation_request.h
index 4f407d4..e75ccb7 100644
--- a/content/browser/frame_host/navigation_request.h
+++ b/content/browser/frame_host/navigation_request.h
@@ -903,7 +903,9 @@
   // be set in CreatedNavigationRequest.
   // Note: |browser_initiated_| and |common_params_| may be mutated by
   // ContentBrowserClient::OverrideNavigationParams at StartNavigation time
-  // (i.e. before we actually kick off the navigation).
+  // (i.e. before we actually kick off the navigation). |browser_initiated|
+  // will always be true for history navigations, even if they began in the
+  // renderer using the history API.
   mojom::CommonNavigationParamsPtr common_params_;
   mojom::BeginNavigationParamsPtr begin_params_;
   mojom::CommitNavigationParamsPtr commit_params_;
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc
index 0a8a18d..daffcb50 100644
--- a/content/browser/navigation_browsertest.cc
+++ b/content/browser/navigation_browsertest.cc
@@ -2023,7 +2023,8 @@
   WaitForPageLoad(main_contents);
   frame_observer.WaitForScrollOffsetAtTop(
       /*expected_scroll_offset_at_top=*/false);
-  EXPECT_FALSE(main_contents->GetMainFrame()->GetView()->IsScrollOffsetAtTop());
+  RunUntilInputProcessed(GetWidgetHost());
+  EXPECT_EQ(true, EvalJs(main_contents, "did_scroll;"));
 }
 
 IN_PROC_BROWSER_TEST_F(TextFragmentAnchorBrowserTest,
@@ -2039,7 +2040,8 @@
   WaitForPageLoad(main_contents);
   frame_observer.WaitForScrollOffsetAtTop(
       /*expected_scroll_offset_at_top=*/false);
-  EXPECT_FALSE(main_contents->GetMainFrame()->GetView()->IsScrollOffsetAtTop());
+  RunUntilInputProcessed(GetWidgetHost());
+  EXPECT_EQ(true, EvalJs(main_contents, "did_scroll;"));
 }
 
 IN_PROC_BROWSER_TEST_F(TextFragmentAnchorBrowserTest,
@@ -2064,7 +2066,8 @@
   WaitForPageLoad(main_contents);
   frame_observer.WaitForScrollOffsetAtTop(
       /*expected_scroll_offset_at_top=*/false);
-  EXPECT_FALSE(main_contents->GetMainFrame()->GetView()->IsScrollOffsetAtTop());
+  RunUntilInputProcessed(GetWidgetHost());
+  EXPECT_EQ(true, EvalJs(main_contents, "did_scroll;"));
 }
 
 IN_PROC_BROWSER_TEST_F(TextFragmentAnchorBrowserTest,
@@ -2091,7 +2094,7 @@
       FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout());
   run_loop.Run();
   RunUntilInputProcessed(GetWidgetHost());
-  EXPECT_TRUE(main_contents->GetMainFrame()->GetView()->IsScrollOffsetAtTop());
+  EXPECT_EQ(false, EvalJs(main_contents, "did_scroll;"));
 }
 
 IN_PROC_BROWSER_TEST_F(TextFragmentAnchorBrowserTest,
@@ -2127,7 +2130,13 @@
       FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout());
   run_loop.Run();
   RunUntilInputProcessed(GetWidgetHost());
-  EXPECT_TRUE(main_contents->GetMainFrame()->GetView()->IsScrollOffsetAtTop());
+
+  // Note: we use a scroll handler in the page to check whether any scrolls
+  // happened at all, rather than checking the current scroll offset. This is
+  // to ensure that if the offset is reset back to the top for other reasons
+  // (e.g. history restoration) we still fail this test. See
+  // https://crbug.com/1042986 for why this matters.
+  EXPECT_EQ(false, EvalJs(main_contents, "did_scroll;"));
 }
 
 IN_PROC_BROWSER_TEST_F(TextFragmentAnchorBrowserTest,
@@ -2142,11 +2151,13 @@
 
   WaitForPageLoad(main_contents);
   frame_observer.WaitForScrollOffsetAtTop(false);
-  EXPECT_FALSE(main_contents->GetMainFrame()->GetView()->IsScrollOffsetAtTop());
 
-  // Scroll the page back to top.
+  // Scroll the page back to top. Make sure we reset the |did_scroll| variable
+  // we'll use below to ensure the same-document navigation invokes the text
+  // fragment.
   EXPECT_TRUE(ExecuteScript(main_contents, "window.scrollTo(0, 0)"));
   frame_observer.WaitForScrollOffsetAtTop(true);
+  EXPECT_TRUE(ExecJs(main_contents, "did_scroll = false;"));
 
   // Perform a same-document browser initiated navigation
   GURL same_doc_url(embedded_test_server()->GetURL(
@@ -2156,7 +2167,8 @@
   WaitForPageLoad(main_contents);
   frame_observer.WaitForScrollOffsetAtTop(
       /*expected_scroll_offset_at_top=*/false);
-  EXPECT_FALSE(main_contents->GetMainFrame()->GetView()->IsScrollOffsetAtTop());
+  RunUntilInputProcessed(GetWidgetHost());
+  EXPECT_EQ(true, EvalJs(main_contents, "did_scroll;"));
 }
 
 IN_PROC_BROWSER_TEST_F(TextFragmentAnchorBrowserTest,
@@ -2184,7 +2196,7 @@
       FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout());
   run_loop.Run();
   RunUntilInputProcessed(GetWidgetHost());
-  EXPECT_TRUE(main_contents->GetMainFrame()->GetView()->IsScrollOffsetAtTop());
+  EXPECT_EQ(false, EvalJs(main_contents, "did_scroll;"));
 }
 
 IN_PROC_BROWSER_TEST_F(TextFragmentAnchorBrowserTest, EnabledByDocumentPolicy) {
@@ -2211,6 +2223,12 @@
       "Content-Type: text/html; charset=utf-8\r\n"
       "Document-Policy: no-force-load-at-top\r\n"
       "\r\n"
+      "<script>"
+      "  let did_scroll = false;"
+      "  window.addEventListener('scroll', () => {"
+      "    did_scroll = true;"
+      "  });"
+      "</script>"
       "<p style='position: absolute; top: 10000px;'>Some text</p>");
   response.Done();
 
@@ -2221,7 +2239,8 @@
   WaitForPageLoad(main_contents);
   frame_observer.WaitForScrollOffsetAtTop(
       /*expected_scroll_offset_at_top=*/false);
-  EXPECT_FALSE(main_contents->GetMainFrame()->GetView()->IsScrollOffsetAtTop());
+  RunUntilInputProcessed(GetWidgetHost());
+  EXPECT_EQ(true, EvalJs(main_contents, "did_scroll;"));
 }
 
 IN_PROC_BROWSER_TEST_F(TextFragmentAnchorBrowserTest,
@@ -2248,6 +2267,12 @@
       "Content-Type: text/html; charset=utf-8\r\n"
       "Document-Policy: force-load-at-top\r\n"
       "\r\n"
+      "<script>"
+      "  let did_scroll = false;"
+      "  window.addEventListener('scroll', () => {"
+      "    did_scroll = true;"
+      "  });"
+      "</script>"
       "<p style='position: absolute; top: 10000px;'>Some text</p>");
   response.Done();
 
@@ -2262,7 +2287,7 @@
       FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout());
   run_loop.Run();
   RunUntilInputProcessed(GetWidgetHost());
-  EXPECT_TRUE(main_contents->GetMainFrame()->GetView()->IsScrollOffsetAtTop());
+  EXPECT_EQ(false, EvalJs(main_contents, "did_scroll;"));
 }
 
 // Regression test for https://crbug.com/996044
diff --git a/content/browser/payments/payment_app_provider_impl.cc b/content/browser/payments/payment_app_provider_impl.cc
index 3b9a9bfc..ff7499b7 100644
--- a/content/browser/payments/payment_app_provider_impl.cc
+++ b/content/browser/payments/payment_app_provider_impl.cc
@@ -16,6 +16,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
+#include "base/supports_user_data.h"
 #include "base/task/post_task.h"
 #include "base/token.h"
 #include "components/payments/core/native_error_strings.h"
@@ -578,28 +579,65 @@
   }
 }
 
-void CheckPermissionForPaymentApps(
-    BrowserContext* browser_context,
-    PaymentAppProvider::GetAllPaymentAppsCallback callback,
-    PaymentAppProvider::PaymentApps apps) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
-  PermissionController* permission_controller =
-      BrowserContext::GetPermissionController(browser_context);
-  DCHECK(permission_controller);
-
-  PaymentAppProvider::PaymentApps permitted_apps;
-  for (auto& app : apps) {
-    GURL origin = app.second->scope.GetOrigin();
-    if (permission_controller->GetPermissionStatus(
-            PermissionType::PAYMENT_HANDLER, origin, origin) ==
-        blink::mojom::PermissionStatus::GRANTED) {
-      permitted_apps[app.first] = std::move(app.second);
-    }
+// Callbacks for checking permissions asynchronously. Owned by the browser
+// context to avoid using the browser context after it has been freed. Deleted
+// after the callback is invoked.
+// Sample usage:
+//   PostTask(&PermissionChecker::CheckPermissionForPaymentApps,
+//       PermissionChecker::Create(browser_context), std::move(callback));
+class PermissionChecker : public base::SupportsUserData::Data {
+ public:
+  static base::WeakPtr<PermissionChecker> Create(
+      BrowserContext* browser_context) {
+    auto owned = std::make_unique<PermissionChecker>(browser_context);
+    auto weak_pointer_result = owned->weak_ptr_factory_.GetWeakPtr();
+    void* key = owned.get();
+    browser_context->SetUserData(key, std::move(owned));
+    return weak_pointer_result;
   }
 
-  std::move(callback).Run(std::move(permitted_apps));
-}
+  // Do not use this method directly! Use the static PermissionChecker::Create()
+  // method instead. (The constructor must be public for std::make_unique<> in
+  // the Create() method.)
+  explicit PermissionChecker(BrowserContext* browser_context)
+      : browser_context_(browser_context) {}
+  ~PermissionChecker() override = default;
+
+  // Disallow copy and assign.
+  PermissionChecker(const PermissionChecker& other) = delete;
+  PermissionChecker& operator=(const PermissionChecker& other) = delete;
+
+  void CheckPermissionForPaymentApps(
+      PaymentAppProvider::GetAllPaymentAppsCallback callback,
+      PaymentAppProvider::PaymentApps apps) {
+    DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+    PermissionController* permission_controller =
+        BrowserContext::GetPermissionController(browser_context_);
+    DCHECK(permission_controller);
+
+    PaymentAppProvider::PaymentApps permitted_apps;
+    for (auto& app : apps) {
+      GURL origin = app.second->scope.GetOrigin();
+      if (permission_controller->GetPermissionStatus(
+              PermissionType::PAYMENT_HANDLER, origin, origin) ==
+          blink::mojom::PermissionStatus::GRANTED) {
+        permitted_apps[app.first] = std::move(app.second);
+      }
+    }
+
+    std::move(callback).Run(std::move(permitted_apps));
+
+    // Deletes this PermissionChecker object.
+    browser_context_->RemoveUserData(/*key=*/this);
+  }
+
+ private:
+  // Owns this PermissionChecker object, so it's always valid.
+  BrowserContext* browser_context_;
+
+  base::WeakPtrFactory<PermissionChecker> weak_ptr_factory_{this};
+};
 
 void AbortInvokePaymentApp(BrowserContext* browser_context,
                            PaymentEventResponseType reason) {
@@ -770,9 +808,11 @@
 
   RunOrPostTaskOnThread(
       FROM_HERE, ServiceWorkerContext::GetCoreThreadId(),
-      base::BindOnce(&GetAllPaymentAppsOnCoreThread, payment_app_context,
-                     base::BindOnce(&CheckPermissionForPaymentApps,
-                                    browser_context, std::move(callback))));
+      base::BindOnce(
+          &GetAllPaymentAppsOnCoreThread, payment_app_context,
+          base::BindOnce(&PermissionChecker::CheckPermissionForPaymentApps,
+                         PermissionChecker::Create(browser_context),
+                         std::move(callback))));
 }
 
 void PaymentAppProviderImpl::InvokePaymentApp(
diff --git a/content/browser/pointer_lock_browsertest.cc b/content/browser/pointer_lock_browsertest.cc
index 2f8b69e..150d5e8 100644
--- a/content/browser/pointer_lock_browsertest.cc
+++ b/content/browser/pointer_lock_browsertest.cc
@@ -83,21 +83,22 @@
     event_handler()->mouse_locked_unadjusted_movement_.reset();
   }
 
-  bool IsMouseLocked() override { return event_handler()->mouse_locked(); }
-
-  bool HasFocus() override { return true; }
+  bool GetIsMouseLockedUnadjustedMovementForTesting() override {
+    return IsMouseLocked() &&
+           event_handler()->mouse_locked_unadjusted_movement_;
+  }
 
   void OnWindowFocused(aura::Window* gained_focus,
                        aura::Window* lost_focus) override {
     // Ignore window focus events.
   }
 
-  bool GetIsMouseLockedUnadjustedMovementForTesting() override {
-    return IsMouseLocked() &&
-           event_handler()->mouse_locked_unadjusted_movement_;
-  }
+  bool IsMouseLocked() override { return event_handler()->mouse_locked(); }
+
+  bool HasFocus() override { return has_focus_; }
 
   RenderWidgetHostImpl* host_;
+  bool has_focus_ = true;
 };
 
 void InstallCreateHooksForPointerLockBrowserTests() {
@@ -651,6 +652,37 @@
   EXPECT_EQ(nullptr, web_contents()->GetMouseLockWidget());
 }
 
+#ifdef USE_AURA
+IN_PROC_BROWSER_TEST_F(PointerLockBrowserTest, PointerLockOutOfFocus) {
+  GURL main_url(embedded_test_server()->GetURL(
+      "a.com", "/cross_site_iframe_factory.html?a(b)"));
+  EXPECT_TRUE(NavigateToURL(shell(), main_url));
+
+  FrameTreeNode* root = web_contents()->GetFrameTree()->root();
+  MockPointerLockRenderWidgetHostView* root_view =
+      static_cast<MockPointerLockRenderWidgetHostView*>(
+          root->current_frame_host()->GetView());
+
+  root_view->has_focus_ = false;
+  // Request a pointer lock on the root frame's body.
+  ASSERT_TRUE(ExecJs(root, "document.body.requestPointerLock()"));
+
+  // setup promise structure to ensure request finishes.
+  EXPECT_TRUE(ExecJs(root, R"(
+        var advertisementreceivedPromise = new Promise(resolve => {
+          document.addEventListener('pointerlockerror',
+              event => {
+                resolve(true);
+              });
+        });
+      )"));
+
+  // Root frame should not have been granted pointer lock.
+  EXPECT_EQ(false,
+            EvalJs(root, "document.pointerLockElement == document.body"));
+}
+#endif
+
 // Flaky. https://crbug.com/1014324
 IN_PROC_BROWSER_TEST_F(PointerLockBrowserTestWithOptions,
                        DISABLED_PointerLockRequestUnadjustedMovement) {
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 3ba4cce..e33060e 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -2535,6 +2535,11 @@
     return;
   }
 
+  if (!view_ || !view_->HasFocus()) {
+    std::move(response).Run(blink::mojom::PointerLockResult::kWrongDocument);
+    return;
+  }
+
   request_mouse_callback_ = std::move(response);
 
   pending_mouse_lock_request_ = true;
@@ -2860,8 +2865,8 @@
   }
 
   std::move(request_mouse_callback_)
-      .Run(blink::mojom::PointerLockResult::kSuccess);
-  return true;
+      .Run(blink::mojom::PointerLockResult::kWrongDocument);
+  return false;
 }
 
 void RenderWidgetHostImpl::GotResponseToKeyboardLockRequest(bool allowed) {
diff --git a/content/browser/service_worker/service_worker_storage_control_impl.cc b/content/browser/service_worker/service_worker_storage_control_impl.cc
index f990c01..2d22fda 100644
--- a/content/browser/service_worker/service_worker_storage_control_impl.cc
+++ b/content/browser/service_worker/service_worker_storage_control_impl.cc
@@ -68,6 +68,15 @@
   std::move(callback).Run(status, std::move(registrations));
 }
 
+void DidGetUserData(
+    ServiceWorkerStorageControlImpl::GetUserDataCallback callback,
+    const std::vector<std::string>& values,
+    storage::mojom::ServiceWorkerDatabaseStatus status) {
+  // TODO(bashi): Change ServiceWorkerStorage::GetUserDataInDBCallback to remove
+  // this indirection (the order of |values| and |status| is different).
+  std::move(callback).Run(status, values);
+}
+
 }  // namespace
 
 ServiceWorkerStorageControlImpl::ServiceWorkerStorageControlImpl(
@@ -174,4 +183,35 @@
       std::move(writer));
 }
 
+void ServiceWorkerStorageControlImpl::GetUserData(
+    int64_t registration_id,
+    const std::vector<std::string>& keys,
+    GetUserDataCallback callback) {
+  storage_->GetUserData(registration_id, keys,
+                        base::BindOnce(&DidGetUserData, std::move(callback)));
+}
+
+void ServiceWorkerStorageControlImpl::StoreUserData(
+    int64_t registration_id,
+    const GURL& origin,
+    std::vector<storage::mojom::ServiceWorkerUserDataPtr> user_data,
+    StoreUserDataCallback callback) {
+  // TODO(bashi): Change ServiceWorkerStorage::StoreUserData to take
+  // |user_data| so that we don't need to convert it.
+  std::vector<std::pair<std::string, std::string>> key_value_pairs;
+  for (auto& entry : user_data) {
+    key_value_pairs.push_back(
+        std::make_pair(std::move(entry->key), std::move(entry->value)));
+  }
+  storage_->StoreUserData(registration_id, origin, std::move(key_value_pairs),
+                          std::move(callback));
+}
+
+void ServiceWorkerStorageControlImpl::ClearUserData(
+    int64_t registration_id,
+    const std::vector<std::string>& keys,
+    ClearUserDataCallback callback) {
+  storage_->ClearUserData(registration_id, keys, std::move(callback));
+}
+
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_storage_control_impl.h b/content/browser/service_worker/service_worker_storage_control_impl.h
index 77a455f..b2623c5 100644
--- a/content/browser/service_worker/service_worker_storage_control_impl.h
+++ b/content/browser/service_worker/service_worker_storage_control_impl.h
@@ -69,6 +69,17 @@
       int64_t resource_id,
       mojo::PendingReceiver<storage::mojom::ServiceWorkerResourceMetadataWriter>
           writer) override;
+  void GetUserData(int64_t registration_id,
+                   const std::vector<std::string>& keys,
+                   GetUserDataCallback callback) override;
+  void StoreUserData(
+      int64_t registration_id,
+      const GURL& origin,
+      std::vector<storage::mojom::ServiceWorkerUserDataPtr> user_data,
+      StoreUserDataCallback callback) override;
+  void ClearUserData(int64_t registration_id,
+                     const std::vector<std::string>& keys,
+                     ClearUserDataCallback callback) override;
 
   const std::unique_ptr<ServiceWorkerStorage> storage_;
 };
diff --git a/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc b/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc
index 82ec1bd5..e75ef763 100644
--- a/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc
+++ b/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc
@@ -247,6 +247,52 @@
     return return_value;
   }
 
+  void GetUserData(int64_t registration_id,
+                   const std::vector<std::string>& keys,
+                   DatabaseStatus& out_status,
+                   std::vector<std::string>& out_values) {
+    base::RunLoop loop;
+    storage()->GetUserData(
+        registration_id, keys,
+        base::BindLambdaForTesting(
+            [&](DatabaseStatus status, const std::vector<std::string>& values) {
+              out_status = status;
+              out_values = values;
+              loop.Quit();
+            }));
+    loop.Run();
+  }
+
+  DatabaseStatus StoreUserData(
+      int64_t registration_id,
+      const GURL& origin,
+      std::vector<storage::mojom::ServiceWorkerUserDataPtr> user_data) {
+    DatabaseStatus return_value;
+    base::RunLoop loop;
+    storage()->StoreUserData(
+        registration_id, origin, std::move(user_data),
+        base::BindLambdaForTesting([&](DatabaseStatus status) {
+          return_value = status;
+          loop.Quit();
+        }));
+    loop.Run();
+    return return_value;
+  }
+
+  DatabaseStatus ClearUserData(int64_t registration_id,
+                               const std::vector<std::string>& keys) {
+    DatabaseStatus return_value;
+    base::RunLoop loop;
+    storage()->ClearUserData(
+        registration_id, keys,
+        base::BindLambdaForTesting([&](DatabaseStatus status) {
+          return_value = status;
+          loop.Quit();
+        }));
+    loop.Run();
+    return return_value;
+  }
+
   // Create a registration with a single resource and stores the registration.
   DatabaseStatus CreateAndStoreRegistration(int64_t registration_id,
                                             const GURL& scope,
@@ -545,4 +591,97 @@
   }
 }
 
+// Tests that storing/getting user data works.
+TEST_F(ServiceWorkerStorageControlImplTest, StoreAndGetUserData) {
+  const GURL kScope("https://www.example.com/");
+  const GURL kScriptUrl("https://www.example.com/sw.js");
+  const int64_t kScriptSize = 10;
+
+  LazyInitializeForTest();
+
+  const int64_t registration_id = GetNewRegistrationId();
+  DatabaseStatus status;
+  status = CreateAndStoreRegistration(registration_id, kScope, kScriptUrl,
+                                      kScriptSize);
+  ASSERT_EQ(status, DatabaseStatus::kOk);
+
+  // Store user data with two entries.
+  {
+    std::vector<storage::mojom::ServiceWorkerUserDataPtr> user_data;
+    user_data.push_back(
+        storage::mojom::ServiceWorkerUserData::New("key1", "value1"));
+    user_data.push_back(
+        storage::mojom::ServiceWorkerUserData::New("key2", "value2"));
+
+    status = StoreUserData(registration_id, kScope.GetOrigin(),
+                           std::move(user_data));
+    ASSERT_EQ(status, DatabaseStatus::kOk);
+  }
+
+  // Get user data.
+  {
+    std::vector<std::string> keys = {"key1", "key2"};
+    std::vector<std::string> values;
+    GetUserData(registration_id, keys, status, values);
+    ASSERT_EQ(status, DatabaseStatus::kOk);
+    EXPECT_EQ(values.size(), 2UL);
+    EXPECT_EQ("value1", values[0]);
+    EXPECT_EQ("value2", values[1]);
+  }
+
+  // Try to get user data with an unknown key should fail.
+  {
+    std::vector<std::string> keys = {"key1", "key2", "key3"};
+    std::vector<std::string> values;
+    GetUserData(registration_id, keys, status, values);
+    ASSERT_EQ(status, DatabaseStatus::kErrorNotFound);
+    EXPECT_EQ(values.size(), 0UL);
+  }
+
+  // Clear the first entry.
+  {
+    std::vector<std::string> keys = {"key1"};
+    status = ClearUserData(registration_id, keys);
+    ASSERT_EQ(status, DatabaseStatus::kOk);
+
+    std::vector<std::string> values;
+    GetUserData(registration_id, keys, status, values);
+    ASSERT_EQ(status, DatabaseStatus::kErrorNotFound);
+    EXPECT_EQ(values.size(), 0UL);
+  }
+
+  // Getting the second entry should succeed.
+  {
+    std::vector<std::string> keys = {"key2"};
+    std::vector<std::string> values;
+    GetUserData(registration_id, keys, status, values);
+    ASSERT_EQ(status, DatabaseStatus::kOk);
+    EXPECT_EQ(values.size(), 1UL);
+    EXPECT_EQ("value2", values[0]);
+  }
+
+  // Delete the registration and store a new registration for the same
+  // scope.
+  const int64_t new_registration_id = GetNewRegistrationId();
+  {
+    storage::mojom::ServiceWorkerStorageOriginState origin_state;
+    DeleteRegistration(registration_id, kScope.GetOrigin(), status,
+                       origin_state);
+    ASSERT_EQ(status, DatabaseStatus::kOk);
+
+    status = CreateAndStoreRegistration(new_registration_id, kScope, kScriptUrl,
+                                        kScriptSize);
+    ASSERT_EQ(status, DatabaseStatus::kOk);
+  }
+
+  // Try to get user data stored for the previous registration should fail.
+  {
+    std::vector<std::string> keys = {"key2"};
+    std::vector<std::string> values;
+    GetUserData(new_registration_id, keys, status, values);
+    ASSERT_EQ(status, DatabaseStatus::kErrorNotFound);
+    EXPECT_EQ(values.size(), 0UL);
+  }
+}
+
 }  // namespace content
diff --git a/content/test/data/accessibility/aria/aria-progressbar-expected-android.txt b/content/test/data/accessibility/aria/aria-progressbar-expected-android.txt
index a7d45b3..5bee9ea2 100644
--- a/content/test/data/accessibility/aria/aria-progressbar-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-progressbar-expected-android.txt
@@ -1,4 +1,4 @@
 android.webkit.WebView focusable focused scrollable
-++android.widget.ProgressBar range item_index=3 item_count=37 range_min=1 range_max=37 range_current_value=3
-++android.widget.ProgressBar range name='three' item_count=96 item_index=3 range_min=1 range_max=96
-++android.widget.ProgressBar range item_count=10 range_min=0 range_max=10
+++android.widget.ProgressBar role_description='progress indicator' range item_index=5 item_count=100 range_min=1 range_max=37 range_current_value=3
+++android.widget.ProgressBar role_description='progress indicator' range name='three' item_index=2 item_count=100 range_min=1 range_max=96 range_current_value=3
+++android.widget.ProgressBar role_description='progress indicator' range item_count=100 range_max=10
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/canvas-expected-android.txt b/content/test/data/accessibility/html/canvas-expected-android.txt
index ae5470b..351f4ecc 100644
--- a/content/test/data/accessibility/html/canvas-expected-android.txt
+++ b/content/test/data/accessibility/html/canvas-expected-android.txt
@@ -1,6 +1,6 @@
 android.webkit.WebView focusable focused scrollable
 ++android.view.View
-++++android.view.View
-++++++android.view.View name='Static fallback'
-++++android.view.View
-++++++android.view.View clickable focusable name='Interactive fallback'
+++++android.widget.Image name='Static fallback'
+++++android.widget.Image
+++++++android.view.View role_description='link' clickable focusable link name='Interactive fallback'
+++++++++android.widget.TextView name='Interactive fallback'
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/dialog-expected-android.txt b/content/test/data/accessibility/html/dialog-expected-android.txt
index 2b315f6..a00521f8 100644
--- a/content/test/data/accessibility/html/dialog-expected-android.txt
+++ b/content/test/data/accessibility/html/dialog-expected-android.txt
@@ -1,2 +1,2 @@
-android.app.Dialog focusable focused scrollable
-++android.view.View clickable name='Text in dialog'
+android.webkit.WebView focusable focused scrollable
+++android.app.Dialog role_description='dialog' name='Text in dialog'
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/list-markers-expected-android.txt b/content/test/data/accessibility/html/list-markers-expected-android.txt
index 59207ad..cfcf813 100644
--- a/content/test/data/accessibility/html/list-markers-expected-android.txt
+++ b/content/test/data/accessibility/html/list-markers-expected-android.txt
@@ -1,17 +1,17 @@
 android.webkit.WebView focusable focused scrollable
-++android.widget.ListView collection hierarchical item_count=3 row_count=3
-++++android.view.View collection_item name='First item properly groups itself despiteboldedtext.'
-++++++android.view.View clickable name='• '
-++++++android.view.View clickable name='First item properly groups itself despite'
-++++++android.view.View clickable name='bolded'
-++++++android.view.View clickable name='text.'
-++++android.view.View collection_item name='This should also beseenas a group.' item_index=1 row_index=1
-++++++android.view.View clickable name='• '
-++++++android.view.View clickable name='This should also be'
-++++++android.view.View clickable name='seen'
-++++++android.view.View clickable name='as a group.'
-++++android.view.View collection_item name='Somemoretext.' item_index=2 row_index=2
-++++++android.view.View clickable name='• '
-++++++android.view.View clickable name='Some'
-++++++android.view.View clickable name='more'
-++++++android.view.View clickable name='text.'
+++android.widget.ListView collection item_count=3 row_count=3
+++++android.view.View collection_item
+++++++android.view.View name='• '
+++++++android.widget.TextView name='First item properly groups itself despite '
+++++++android.widget.TextView name='bolded'
+++++++android.widget.TextView name=' text.'
+++++android.view.View collection_item item_index=1 row_index=1
+++++++android.view.View name='• '
+++++++android.widget.TextView name='This should also be '
+++++++android.widget.TextView name='seen'
+++++++android.widget.TextView name=' as a group.'
+++++android.view.View collection_item item_index=2 row_index=2
+++++++android.view.View name='• '
+++++++android.widget.TextView name='Some '
+++++++android.widget.TextView name='more'
+++++++android.widget.TextView name=' text.'
diff --git a/content/test/data/accessibility/html/modal-dialog-closed-expected-android.txt b/content/test/data/accessibility/html/modal-dialog-closed-expected-android.txt
index d0ec05ab..dde9bf3 100644
--- a/content/test/data/accessibility/html/modal-dialog-closed-expected-android.txt
+++ b/content/test/data/accessibility/html/modal-dialog-closed-expected-android.txt
@@ -1,6 +1,5 @@
 android.webkit.WebView focusable focused scrollable
-++android.view.View clickable name='Test that elements respawn in the accessibility tree after a modal dialog closes.'
-++android.view.View
-++++android.widget.Button clickable focusable name='This should be in the tree.'
-++android.view.View
-++++android.view.View focusable
+++android.widget.TextView name='Test that elements respawn in the accessibility tree after a modal dialog closes.'
+++android.view.View role_description='region'
+++++android.widget.Spinner role_description='pop up button' clickable focusable name='This should be in the tree.'
+++android.widget.Spinner role_description='color picker' clickable focusable name='#000000'
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/ul-expected-android.txt b/content/test/data/accessibility/html/ul-expected-android.txt
index 429cd7d..3b20dc7 100644
--- a/content/test/data/accessibility/html/ul-expected-android.txt
+++ b/content/test/data/accessibility/html/ul-expected-android.txt
@@ -1,11 +1,11 @@
 android.webkit.WebView focusable focused scrollable
-++android.widget.ListView collection hierarchical item_count=3 row_count=3
-++++android.view.View collection_item name='Item 1'
-++++++android.view.View clickable name='• '
-++++++android.view.View clickable name='Item 1'
-++++android.view.View collection_item name='Item 2' item_index=1 row_index=1
-++++++android.view.View clickable name='• '
-++++++android.view.View clickable name='Item 2'
-++++android.view.View collection_item name='Item 3' item_index=2 row_index=2
-++++++android.view.View clickable name='• '
-++++++android.view.View clickable name='Item 3'
+++android.widget.ListView collection item_count=3 row_count=3
+++++android.view.View collection_item
+++++++android.view.View name='• '
+++++++android.widget.TextView name='Item 1'
+++++android.view.View collection_item item_index=1 row_index=1
+++++++android.view.View name='• '
+++++++android.widget.TextView name='Item 2'
+++++android.view.View collection_item item_index=2 row_index=2
+++++++android.view.View name='• '
+++++++android.widget.TextView name='Item 3'
diff --git a/content/test/data/scrollable_page_with_content.html b/content/test/data/scrollable_page_with_content.html
index c37d095..1ef150d 100644
--- a/content/test/data/scrollable_page_with_content.html
+++ b/content/test/data/scrollable_page_with_content.html
@@ -1,6 +1,12 @@
 <html>
   <head>
     <meta name="viewport" content="width=device-width, minimum-scale=1.0">
+    <script>
+      let did_scroll = false;
+      window.addEventListener('scroll', () => {
+        did_scroll = true;
+      });
+    </script>
     <style>
       p {
         position: absolute;
diff --git a/content/test/data/target_text_link.html b/content/test/data/target_text_link.html
index 00f40bf..ade7e420 100644
--- a/content/test/data/target_text_link.html
+++ b/content/test/data/target_text_link.html
@@ -5,4 +5,4 @@
   <body>
     <a id="link" href="/scrollable_page_with_content.html#:~:text=text">link</a>
   </body>
-</html>>
+</html>
diff --git a/device/bluetooth/strings/bluetooth_strings_uk.xtb b/device/bluetooth/strings/bluetooth_strings_uk.xtb
index 6343496..d6a291e 100644
--- a/device/bluetooth/strings/bluetooth_strings_uk.xtb
+++ b/device/bluetooth/strings/bluetooth_strings_uk.xtb
@@ -22,8 +22,8 @@
 <translation id="654594702871184195">Аудіо (<ph name="ADDRESS" />)</translation>
 <translation id="6744468237221042970">Комп’ютер (<ph name="ADDRESS" />)</translation>
 <translation id="7220023250700248346"><ph name="DEVICE_NAME" />, джойстик</translation>
-<translation id="7501330106833014351">Ігровий планшет (<ph name="ADDRESS" />)</translation>
-<translation id="8613368722576151038"><ph name="DEVICE_NAME" />, ігровий планшет</translation>
+<translation id="7501330106833014351">Геймпад (<ph name="ADDRESS" />)</translation>
+<translation id="8613368722576151038"><ph name="DEVICE_NAME" />, геймпад</translation>
 <translation id="8866374292072238753">Відео (<ph name="ADDRESS" />)</translation>
 <translation id="8952558712545617651">Миша (<ph name="ADDRESS" />)</translation>
 <translation id="8961448405689538648"><ph name="DEVICE_NAME" />, невідомий тип пристрою</translation>
diff --git a/docs/security/mojo.md b/docs/security/mojo.md
index b947961..fd1d223 100644
--- a/docs/security/mojo.md
+++ b/docs/security/mojo.md
@@ -22,7 +22,7 @@
 
 ```c++
 interface TeleporterFactory {
-  Create(Location start, Location end) => (Teleporter);
+  Create(Location start, Location end) => (pending_remote<Teleporter>);
 };
 
 interface Teleporter {
diff --git a/extensions/browser/api/declarative_net_request/utils.cc b/extensions/browser/api/declarative_net_request/utils.cc
index 4f828ea16..d2c8f509 100644
--- a/extensions/browser/api/declarative_net_request/utils.cc
+++ b/extensions/browser/api/declarative_net_request/utils.cc
@@ -16,10 +16,8 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
-#include "base/task/post_task.h"
 #include "components/url_pattern_index/url_pattern_index.h"
 #include "components/web_cache/browser/web_cache_manager.h"
-#include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/api/declarative_net_request/constants.h"
 #include "extensions/browser/api/declarative_net_request/flat/extension_ruleset_generated.h"
@@ -68,10 +66,6 @@
                             GetIndexedRulesetFormatVersion());
 }
 
-void ClearRendererCacheOnUI() {
-  web_cache::WebCacheManager::GetInstance()->ClearCacheOnNavigation();
-}
-
 }  // namespace
 
 bool IsValidRulesetData(base::span<const uint8_t> data, int expected_checksum) {
@@ -157,14 +151,9 @@
   return true;
 }
 
-// Helper to clear each renderer's in-memory cache the next time it navigates.
 void ClearRendererCacheOnNavigation() {
-  if (content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
-    ClearRendererCacheOnUI();
-  } else {
-    base::PostTask(FROM_HERE, {content::BrowserThread::UI},
-                   base::BindOnce(&ClearRendererCacheOnUI));
-  }
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  web_cache::WebCacheManager::GetInstance()->ClearCacheOnNavigation();
 }
 
 void LogReadDynamicRulesStatus(ReadJSONRulesResult::Status status) {
diff --git a/fuchsia/cipd/BUILD.gn b/fuchsia/cipd/BUILD.gn
index 22d7266..cb896fa 100644
--- a/fuchsia/cipd/BUILD.gn
+++ b/fuchsia/cipd/BUILD.gn
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-# Build targets for constructing CIPD release archives.
+# Build targets for constructing CIPD release packages.
 
 assert(is_fuchsia)
 
@@ -16,9 +16,10 @@
   _gn_path = "//buildtools/linux64/gn"
 }
 
+_license_path = "${target_gen_dir}/LICENSE"
+
 # Produces a consolidated license file.
 action("license") {
-  _license_path = "${target_gen_dir}/LICENSE"
   script = "//tools/licenses.py"
   inputs = [ "$_gn_path" ]
   outputs = [ _license_path ]
@@ -45,18 +46,18 @@
   process_only = true
 }
 
-# Prepares a CIPD archive and generates a manifest file.
+# Prepares a CIPD package and generates a package definition.
 #
 # Parameters:
-#   package_definition_yaml: The filename to use for the generated CIPD YAML
-#                            file.
+#   package_definition_name: CIPD package definition filename. "cipd.yaml"
+#                            if unspecified.
 #   package: The path where the package will be located inside the CIPD
 #            repository.
 #   description: Sets the "description" field in CIPD metadata.
 #   install_mode: String, should be either "symlink" or "copy".
 #   deps: A list of targets to build prior to copying files.
 #   sources: A list of files to copy into the staging root.
-template("cipd_archive") {
+template("cipd_package") {
   forward_variables_from(invoker,
                          [
                            "deps",
@@ -66,15 +67,7 @@
   if (!defined(deps)) {
     deps = []
   }
-  deps += [
-    ":build_id",
-    ":license",
-  ]
-
-  if (!defined(sources)) {
-    sources = []
-  }
-  sources += get_target_outputs(":license")
+  deps += [ ":build_id" ]
 
   cipd_package_definition(target_name) {
     testonly = true
@@ -83,17 +76,18 @@
                              "description",
                              "install_mode",
                              "package",
-                             "package_definition_yaml",
+                             "package_definition_name",
                            ])
   }
 }
 
-cipd_archive("webrunner") {
-  package_definition_yaml = "webrunner.yaml"
+cipd_package("webrunner") {
+  package_definition_name = "webrunner.yaml"
   package = "chromium/fuchsia/webrunner-\${targetarch}"
   description = "Prebuilt Chrome and Web Runner binaries for Fuchsia."
 
   deps = [
+    ":license",
     "//fuchsia/engine:web_engine",
     "//fuchsia/runners:web_runner_pkg",
   ]
@@ -101,27 +95,40 @@
   sources = [
     "${root_gen_dir}/fuchsia/engine/web_engine/web_engine.far",
     "${root_gen_dir}/fuchsia/runners/web_runner/web_runner.far",
+    _license_path,
   ]
 }
 
-cipd_archive("castrunner") {
-  package_definition_yaml = "castrunner.yaml"
+cipd_package("castrunner") {
+  package_definition_name = "castrunner.yaml"
   package = "chromium/fuchsia/castrunner-\${targetarch}"
   description = "Prebuilt Cast application Runner binaries for Fuchsia."
 
-  deps = [ "//fuchsia/runners:cast_runner_pkg" ]
+  deps = [
+    ":license",
+    "//fuchsia/runners:cast_runner_pkg",
+  ]
 
-  sources = [ "${root_gen_dir}/fuchsia/runners/cast_runner/cast_runner.far" ]
+  sources = [
+    "${root_gen_dir}/fuchsia/runners/cast_runner/cast_runner.far",
+    _license_path,
+  ]
 }
 
-cipd_archive("http") {
-  package_definition_yaml = "http.yaml"
+cipd_package("http") {
+  package_definition_name = "http.yaml"
   package = "chromium/fuchsia/http-\${targetarch}"
   description = "Prebuilt HTTP service binary for Fuchsia."
 
-  deps = [ "//fuchsia/http:http_pkg" ]
+  deps = [
+    ":license",
+    "//fuchsia/http:http_pkg",
+  ]
 
-  sources = [ "${root_gen_dir}/fuchsia/http/http/http.far" ]
+  sources = [
+    "${root_gen_dir}/fuchsia/http/http/http.far",
+    _license_path,
+  ]
 }
 
 _stripped_chromedriver_file = "${root_out_dir}/clang_x64/stripped/chromedriver"
@@ -149,23 +156,31 @@
   visibility = [ ":*" ]
 }
 
-cipd_archive("chromedriver") {
-  package_definition_yaml = "chromedriver.yaml"
+cipd_package("chromedriver") {
+  package_definition_name = "chromedriver.yaml"
   package = "chromium/fuchsia/chromedriver/\${os}-\${arch}"
   description = "Prebuilt Chromedriver binary for Fuchsia host."
   install_mode = "copy"
-  deps = [ ":strip_chromedriver_binary" ]
 
-  sources = [ _stripped_chromedriver_file ]
+  deps = [
+    ":license",
+    ":strip_chromedriver_binary",
+  ]
+
+  sources = [
+    _license_path,
+    _stripped_chromedriver_file,
+  ]
 }
 
-cipd_archive("tests") {
+cipd_package("tests") {
   _manifest_path = "${target_gen_dir}/test_manifest.json"
-  package_definition_yaml = "tests.yaml"
+  package_definition_name = "tests.yaml"
   package = "chromium/fuchsia/tests-\${targetarch}"
   description = "Prebuilt Chromium tests for Fuchsia."
 
   deps = [
+    ":license",
     "//base:base_unittests_pkg",
     "//fuchsia/runners:cast_runner_integration_tests_pkg",
     "//fuchsia/runners:web_runner_integration_tests_pkg",
@@ -187,7 +202,7 @@
     "${root_gen_dir}/third_party/blink/common/blink_common_unittests/blink_common_unittests.far",
   ]
 
-  # Build a JSON manifest of the tests and include it in the archive.
+  # Build a JSON manifest of the tests and include it in the package.
   _manifest_contents = []
   foreach(source, far_sources) {
     package_name = get_path_info(source, "name")
@@ -201,11 +216,14 @@
   }
   write_file(_manifest_path, _manifest_contents, "json")
 
-  sources = far_sources + [ _manifest_path ]
+  sources = far_sources + [
+              _manifest_path,
+              _license_path,
+            ]
 }
 
-cipd_archive("debug_symbols") {
-  package_definition_yaml = "debug_symbols.yaml"
+cipd_package("debug_symbols") {
+  package_definition_name = "debug_symbols.yaml"
   package = "chromium/fuchsia/debug-symbols-\${targetarch}"
   description = "Debugging symbols for prebuilt binaries from Chromium."
 
@@ -223,21 +241,31 @@
   write_file(_symbol_manifest, _symbol_manifest_contents, "json")
 
   deps = [
+    ":license",
     "//fuchsia/engine:symbol_archive",
     "//fuchsia/runners:cast_runner_symbol_archive",
     "//fuchsia/runners:web_runner_symbol_archive",
   ]
-  sources = [ _symbol_manifest ] + _symbol_tarballs
+  sources = _symbol_tarballs + [
+              _symbol_manifest,
+              _license_path,
+            ]
 }
 
-cipd_archive("clear_key_cdm") {
-  package_definition_yaml = "clear_key_cdm.yaml"
+cipd_package("clear_key_cdm") {
+  package_definition_name = "clear_key_cdm.yaml"
   package = "chromium/fuchsia/libclearkeycdm-\${targetarch}"
   description = "Prebuilt libclearkeycdm.so binary for Fuchsia."
 
-  deps = [ "//media/cdm/library_cdm/clear_key_cdm:clear_key_cdm" ]
+  deps = [
+    ":license",
+    "//media/cdm/library_cdm/clear_key_cdm:clear_key_cdm",
+  ]
 
-  sources = [ "${root_out_dir}/lib/libclearkeycdm.so" ]
+  sources = [
+    "${root_out_dir}/lib/libclearkeycdm.so",
+    _license_path,
+  ]
 }
 
 group("cipd") {
diff --git a/gpu/ipc/common/gpu_watchdog_timeout.h b/gpu/ipc/common/gpu_watchdog_timeout.h
index 2633afca..10d71fd 100644
--- a/gpu/ipc/common/gpu_watchdog_timeout.h
+++ b/gpu/ipc/common/gpu_watchdog_timeout.h
@@ -20,6 +20,9 @@
 #elif defined(OS_MACOSX)
 constexpr base::TimeDelta kGpuWatchdogTimeout =
     base::TimeDelta::FromSeconds(17);
+#elif defined(OS_WIN)
+constexpr base::TimeDelta kGpuWatchdogTimeout =
+    base::TimeDelta::FromSeconds(30);
 #else
 constexpr base::TimeDelta kGpuWatchdogTimeout =
     base::TimeDelta::FromSeconds(15);
diff --git a/gpu/ipc/service/gpu_watchdog_thread_v2.cc b/gpu/ipc/service/gpu_watchdog_thread_v2.cc
index 0cb1b4b..5a55863 100644
--- a/gpu/ipc/service/gpu_watchdog_thread_v2.cc
+++ b/gpu/ipc/service/gpu_watchdog_thread_v2.cc
@@ -112,7 +112,7 @@
     const char kMaxExtraCyclesBeforeKillParam[] =
         "max_extra_cycles_before_kill";
 #if defined(OS_WIN)
-    constexpr int kFinchMaxExtraCyclesBeforeKill = 3;
+    constexpr int kFinchMaxExtraCyclesBeforeKill = 1;
 #else
     constexpr int kFinchMaxExtraCyclesBeforeKill = 2;
 #endif
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
index 60eb50d..f60ac22e 100644
--- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
+++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
@@ -17,7 +17,6 @@
 #include "components/autofill/core/browser/payments/legal_message_line.h"
 #include "components/autofill/core/browser/payments/strike_database.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
-#include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
 #include "components/prefs/pref_service.h"
 #include "components/sync/driver/sync_service.h"
 #import "ios/web_view/internal/autofill/cwv_autofill_client_ios_bridge.h"
@@ -136,7 +135,6 @@
   std::unique_ptr<payments::PaymentsClient> payments_client_;
   std::unique_ptr<FormDataImporter> form_data_importer_;
   StrikeDatabase* strike_database_;
-  scoped_refptr<AutofillWebDataService> autofill_web_data_service_;
   syncer::SyncService* sync_service_ = nullptr;
   std::unique_ptr<LogManager> log_manager_;
 
diff --git a/ios/web_view/shell/shell_view_controller.m b/ios/web_view/shell/shell_view_controller.m
index 62cc8c0..ffe1f105 100644
--- a/ios/web_view/shell/shell_view_controller.m
+++ b/ios/web_view/shell/shell_view_controller.m
@@ -454,6 +454,7 @@
 
   CWVSyncController* syncController = _webView.configuration.syncController;
   CWVIdentity* currentIdentity = syncController.currentIdentity;
+  __weak ShellViewController* weakSelf = self;
   if (currentIdentity) {
     NSString* title = [NSString
         stringWithFormat:@"Stop syncing for %@", currentIdentity.email];
@@ -465,7 +466,6 @@
                                 [syncController stopSyncAndClearIdentity];
                               }]];
 
-    __weak ShellViewController* weakSelf = self;
     if (syncController.passphraseNeeded) {
       [alertController
           addAction:[UIAlertAction
@@ -475,24 +475,6 @@
                                   [weakSelf showPassphraseUnlockAlert];
                                 }]];
     } else {
-      [alertController
-          addAction:[UIAlertAction actionWithTitle:@"Show autofill data"
-                                             style:UIAlertActionStyleDefault
-                                           handler:^(UIAlertAction* action) {
-                                             [weakSelf showAddressData];
-                                           }]];
-      [alertController
-          addAction:[UIAlertAction actionWithTitle:@"Show credit card data"
-                                             style:UIAlertActionStyleDefault
-                                           handler:^(UIAlertAction* action) {
-                                             [weakSelf showCreditCardData];
-                                           }]];
-      [alertController
-          addAction:[UIAlertAction actionWithTitle:@"Show password data"
-                                             style:UIAlertActionStyleDefault
-                                           handler:^(UIAlertAction* action) {
-                                             [weakSelf showPasswordData];
-                                           }]];
     }
   } else {
     for (CWVIdentity* identity in [_authService identities]) {
@@ -519,7 +501,24 @@
                                                .usesSyncAndWalletSandbox ^= YES;
                                          }]];
   }
-
+  [alertController
+      addAction:[UIAlertAction actionWithTitle:@"Show autofill data"
+                                         style:UIAlertActionStyleDefault
+                                       handler:^(UIAlertAction* action) {
+                                         [weakSelf showAddressData];
+                                       }]];
+  [alertController
+      addAction:[UIAlertAction actionWithTitle:@"Show credit card data"
+                                         style:UIAlertActionStyleDefault
+                                       handler:^(UIAlertAction* action) {
+                                         [weakSelf showCreditCardData];
+                                       }]];
+  [alertController
+      addAction:[UIAlertAction actionWithTitle:@"Show password data"
+                                         style:UIAlertActionStyleDefault
+                                       handler:^(UIAlertAction* action) {
+                                         [weakSelf showPasswordData];
+                                       }]];
   [alertController
       addAction:[UIAlertAction actionWithTitle:@"Cancel"
                                          style:UIAlertActionStyleCancel
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index d6483b64..589c88f 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -3383,13 +3383,13 @@
   return bridge_->GetSurfaceId();
 }
 
-void WebMediaPlayerImpl::RequestAnimationFrame() {
+void WebMediaPlayerImpl::RequestVideoFrameCallback() {
   compositor_->SetOnFramePresentedCallback(BindToCurrentLoop(base::BindOnce(
       &WebMediaPlayerImpl::OnNewFramePresentedCallback, weak_this_)));
 }
 
 void WebMediaPlayerImpl::OnNewFramePresentedCallback() {
-  client_->OnRequestAnimationFrame();
+  client_->OnRequestVideoFrameCallback();
 }
 
 std::unique_ptr<blink::WebMediaPlayer::VideoFramePresentationMetadata>
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
index 27285c3..69e853b 100644
--- a/media/blink/webmediaplayer_impl.h
+++ b/media/blink/webmediaplayer_impl.h
@@ -292,7 +292,7 @@
   int GetDelegateId() override;
   base::Optional<viz::SurfaceId> GetSurfaceId() override;
   GURL GetSrcAfterRedirects() override;
-  void RequestAnimationFrame() override;
+  void RequestVideoFrameCallback() override;
   std::unique_ptr<blink::WebMediaPlayer::VideoFramePresentationMetadata>
   GetVideoFramePresentationMetadata() override;
 
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc
index ff784ea..b2356ca 100644
--- a/media/blink/webmediaplayer_impl_unittest.cc
+++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -160,7 +160,7 @@
   MOCK_METHOD0(RequestEnterPictureInPicture, void());
   MOCK_METHOD0(RequestExitPictureInPicture, void());
   MOCK_METHOD0(GetFeatures, Features(void));
-  MOCK_METHOD0(OnRequestAnimationFrame, void());
+  MOCK_METHOD0(OnRequestVideoFrameCallback, void());
 
   void set_was_always_muted(bool value) { was_always_muted_ = value; }
 
@@ -666,7 +666,7 @@
                                    size, base::TimeDelta());
   }
 
-  void RequestAnimationFrame() { wmpi_->RequestAnimationFrame(); }
+  void RequestVideoFrameCallback() { wmpi_->RequestVideoFrameCallback(); }
   void GetVideoFramePresentationMetadata() {
     wmpi_->GetVideoFramePresentationMetadata();
   }
@@ -1179,11 +1179,11 @@
   EXPECT_FALSE(IsSuspended());
 }
 
-TEST_F(WebMediaPlayerImplTest, RequestAnimationFrame) {
+TEST_F(WebMediaPlayerImplTest, RequestVideoFrameCallback) {
   InitializeWebMediaPlayerImpl();
 
   EXPECT_CALL(*compositor_, SetOnFramePresentedCallback(_));
-  RequestAnimationFrame();
+  RequestVideoFrameCallback();
 }
 
 TEST_F(WebMediaPlayerImplTest, GetVideoFramePresentationMetadata) {
@@ -1195,7 +1195,7 @@
 
 TEST_F(WebMediaPlayerImplTest, OnNewFramePresentedCallback) {
   InitializeWebMediaPlayerImpl();
-  EXPECT_CALL(client_, OnRequestAnimationFrame());
+  EXPECT_CALL(client_, OnRequestVideoFrameCallback());
 
   OnNewFramePresentedCallback();
 }
diff --git a/media/gpu/vaapi/vaapi_unittest.cc b/media/gpu/vaapi/vaapi_unittest.cc
index 30b6d3b..7de8dec 100644
--- a/media/gpu/vaapi/vaapi_unittest.cc
+++ b/media/gpu/vaapi/vaapi_unittest.cc
@@ -194,6 +194,25 @@
       VaapiWrapper::IsJpegEncodeSupported(),
       base::Contains(va_info[VAProfileJPEGBaseline], VAEntrypointEncPicture));
 }
+
+TEST_F(VaapiTest, DefaultEntrypointIsSupported) {
+  for (size_t i = 0; i < VaapiWrapper::kCodecModeMax; ++i) {
+    const VaapiWrapper::CodecMode mode =
+        static_cast<VaapiWrapper::CodecMode>(i);
+    std::map<VAProfile, std::vector<VAEntrypoint>> configurations =
+        VaapiWrapper::GetSupportedConfigurationsForCodecModeForTesting(mode);
+    for (const auto& profile_and_entrypoints : configurations) {
+      const VAEntrypoint default_entrypoint =
+          VaapiWrapper::GetDefaultVaEntryPoint(mode,
+                                               profile_and_entrypoints.first);
+      const auto& supported_entrypoints = profile_and_entrypoints.second;
+      EXPECT_TRUE(base::Contains(supported_entrypoints, default_entrypoint))
+          << "Default VAEntrypoint " << default_entrypoint
+          << " (mode = " << mode << ") is not supported for VAProfile = "
+          << profile_and_entrypoints.first;
+    }
+  }
+}
 }  // namespace media
 
 int main(int argc, char** argv) {
diff --git a/media/gpu/vaapi/vaapi_wrapper.cc b/media/gpu/vaapi/vaapi_wrapper.cc
index 0a391158..aa951cf 100644
--- a/media/gpu/vaapi/vaapi_wrapper.cc
+++ b/media/gpu/vaapi/vaapi_wrapper.cc
@@ -525,24 +525,6 @@
   return va_res;
 }
 
-VAEntrypoint GetDefaultVaEntryPoint(VaapiWrapper::CodecMode mode,
-                                    VAProfile profile) {
-  switch (mode) {
-    case VaapiWrapper::kDecode:
-      return VAEntrypointVLD;
-    case VaapiWrapper::kEncode:
-      if (profile == VAProfileJPEGBaseline)
-        return VAEntrypointEncPicture;
-      else
-        return VAEntrypointEncSlice;
-    case VaapiWrapper::kVideoProcess:
-      return VAEntrypointVideoProc;
-    case VaapiWrapper::kCodecModeMax:
-      NOTREACHED();
-      return VAEntrypointVLD;
-  }
-}
-
 std::vector<VAEntrypoint> GetEntryPointsForProfile(const base::Lock* va_lock,
                                                    VADisplay va_display,
                                                    VaapiWrapper::CodecMode mode,
@@ -569,18 +551,19 @@
   supported_entrypoints.resize(num_supported_entrypoints);
 
   // Filter out VAEntrypoints that are not used in Chrome.
-  constexpr VAEntrypoint kSupportedEntryPoints[] = {
-      VAEntrypointVLD,         // for video/jpeg decoding.
-      VAEntrypointEncSlice,    // for encoding.
-      VAEntrypointEncPicture,  // for JPEG encoding.
-      VAEntrypointEncSliceLP,  // for Low Power encoding.
-      VAEntrypointVideoProc,   // for pre/post-processing.
-  };
+  std::vector<VAEntrypoint>
+      whitelisted_entrypoints[VaapiWrapper::CodecMode::kCodecModeMax] = {
+          {VAEntrypointVLD},  // For kDecode.
+          {VAEntrypointEncSlice, VAEntrypointEncPicture,
+           VAEntrypointEncSliceLP},  // For kEncode.
+          {VAEntrypointVideoProc}    // For kVideoProcess.
+      };
   std::vector<VAEntrypoint> entrypoints;
   std::copy_if(supported_entrypoints.begin(), supported_entrypoints.end(),
                std::back_inserter(entrypoints),
-               [&kSupportedEntryPoints](VAEntrypoint entry_point) {
-                 return base::Contains(kSupportedEntryPoints, entry_point);
+               [&whitelisted_entrypoints, mode](VAEntrypoint entrypoint) {
+                 return base::Contains(whitelisted_entrypoints[mode],
+                                       entrypoint);
                });
   return entrypoints;
 }
@@ -1448,6 +1431,37 @@
 }
 
 // static
+std::map<VAProfile, std::vector<VAEntrypoint>>
+VaapiWrapper::GetSupportedConfigurationsForCodecModeForTesting(CodecMode mode) {
+  const std::vector<VASupportedProfiles::ProfileInfo>& profile_infos =
+      VASupportedProfiles::Get().GetSupportedProfileInfosForCodecMode(mode);
+  std::map<VAProfile, std::vector<VAEntrypoint>> configurations;
+  for (const auto& info : profile_infos) {
+    configurations[info.va_profile].push_back(info.va_entrypoint);
+  }
+  return configurations;
+}
+
+// static
+VAEntrypoint VaapiWrapper::GetDefaultVaEntryPoint(CodecMode mode,
+                                                  VAProfile profile) {
+  switch (mode) {
+    case VaapiWrapper::kDecode:
+      return VAEntrypointVLD;
+    case VaapiWrapper::kEncode:
+      if (profile == VAProfileJPEGBaseline)
+        return VAEntrypointEncPicture;
+      else
+        return VAEntrypointEncSlice;
+    case VaapiWrapper::kVideoProcess:
+      return VAEntrypointVideoProc;
+    case VaapiWrapper::kCodecModeMax:
+      NOTREACHED();
+      return VAEntrypointVLD;
+  }
+}
+
+// static
 uint32_t VaapiWrapper::BufferFormatToVARTFormat(gfx::BufferFormat fmt) {
   switch (fmt) {
     case gfx::BufferFormat::BGRX_8888:
diff --git a/media/gpu/vaapi/vaapi_wrapper.h b/media/gpu/vaapi/vaapi_wrapper.h
index 8eb661e..c3190da 100644
--- a/media/gpu/vaapi/vaapi_wrapper.h
+++ b/media/gpu/vaapi/vaapi_wrapper.h
@@ -203,6 +203,12 @@
   // Returns the list of VAImageFormats supported by the driver.
   static const std::vector<VAImageFormat>& GetSupportedImageFormatsForTesting();
 
+  // Returns the list of supported profiles and entrypoints for a given |mode|.
+  static std::map<VAProfile, std::vector<VAEntrypoint>>
+  GetSupportedConfigurationsForCodecModeForTesting(CodecMode mode);
+
+  static VAEntrypoint GetDefaultVaEntryPoint(CodecMode mode, VAProfile profile);
+
   static uint32_t BufferFormatToVARTFormat(gfx::BufferFormat fmt);
 
   // Creates |num_surfaces| VASurfaceIDs of |va_format|, |size| and
diff --git a/services/service_manager/sandbox/mac/common.sb b/services/service_manager/sandbox/mac/common.sb
index 7378211..ec14e48 100644
--- a/services/service_manager/sandbox/mac/common.sb
+++ b/services/service_manager/sandbox/mac/common.sb
@@ -271,6 +271,7 @@
       (syscall-number SYS_proc_info)
       (syscall-number SYS_psynch_mutexdrop)
       (syscall-number SYS_psynch_mutexwait)
+      (syscall-number SYS_psynch_rw_rdlock)
       (syscall-number SYS_read)
       (syscall-number SYS_read_nocancel)
       (syscall-number SYS_readlink)
diff --git a/third_party/blink/perf_tests/events/is-input-pending-all-events.html b/third_party/blink/perf_tests/events/is-input-pending-all-events.html
deleted file mode 100644
index e7b4c12..0000000
--- a/third_party/blink/perf_tests/events/is-input-pending-all-events.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src="../resources/runner.js"></script>
-</script>
-<script>
-PerfTestRunner.measureRunsPerSecond({
-  description: "Measures performance of querying navigator.scheduling.isInputPending with all supported events.",
-  run: () => {
-    navigator.scheduling.isInputPending([
-      "click",
-      "dblclick",
-      "mousedown",
-      "mouseenter",
-      "mouseleave",
-      "mousemove",
-      "mouseout",
-      "mouseover",
-      "mouseup",
-      "wheel",
-      "keydown",
-      "keyup",
-      "touchstart",
-      "touchend",
-      "touchmove",
-      "touchcancel",
-    ]);
-  },
-});
-</script>
-</body>
-</html>
diff --git a/third_party/blink/perf_tests/events/is-input-pending-default-events.html b/third_party/blink/perf_tests/events/is-input-pending-default-events.html
index 44ddbeb..c29149a 100644
--- a/third_party/blink/perf_tests/events/is-input-pending-default-events.html
+++ b/third_party/blink/perf_tests/events/is-input-pending-default-events.html
@@ -4,10 +4,11 @@
 <script src="../resources/runner.js"></script>
 </script>
 <script>
+let options = new IsInputPendingOptions();
 PerfTestRunner.measureRunsPerSecond({
-  description: "Measures performance of querying navigator.scheduling.isInputPending with no event types.",
+  description: "Measures performance of querying navigator.scheduling.isInputPending with default events.",
   run: () => {
-    navigator.scheduling.isInputPending();
+    navigator.scheduling.isInputPending(options);
   },
 });
 </script>
diff --git a/third_party/blink/perf_tests/events/is-input-pending-include-continuous-events.html b/third_party/blink/perf_tests/events/is-input-pending-include-continuous-events.html
new file mode 100644
index 0000000..009fa26
--- /dev/null
+++ b/third_party/blink/perf_tests/events/is-input-pending-include-continuous-events.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src="../resources/runner.js"></script>
+</script>
+<script>
+let options = new IsInputPendingOptions({
+  includeContinuous: true,
+});
+PerfTestRunner.measureRunsPerSecond({
+  description: "Measures performance of querying navigator.scheduling.isInputPending with continuous events included.",
+  run: () => {
+    navigator.scheduling.isInputPending(options);
+  },
+});
+</script>
+</body>
+</html>
diff --git a/third_party/blink/public/platform/web_media_player.h b/third_party/blink/public/platform/web_media_player.h
index 21bccc5..7f659d7 100644
--- a/third_party/blink/public/platform/web_media_player.h
+++ b/third_party/blink/public/platform/web_media_player.h
@@ -128,7 +128,7 @@
   };
 
   // TODO(crbug.com/639174): Attempt to merge this with VideoFrameUploadMetadata
-  // For video.requestAnimationFrame(). https://wicg.github.io/video-raf/
+  // For video.requestVideoFrameCallback(). https://wicg.github.io/video-raf/
   struct VideoFramePresentationMetadata {
     uint32_t presented_frames;
     base::TimeTicks presentation_time;
@@ -453,10 +453,10 @@
 
   // Register a request to be notified the next time a video frame is presented
   // to the compositor. The request will be completed via
-  // WebMediaPlayerClient::OnRequestAnimationFrame(). The frame info can be
+  // WebMediaPlayerClient::OnRequestVideoFrameCallback(). The frame info can be
   // retrieved via GetVideoFramePresentationMetadata().
   // See https://wicg.github.io/video-raf/.
-  virtual void RequestAnimationFrame() {}
+  virtual void RequestVideoFrameCallback() {}
   virtual std::unique_ptr<VideoFramePresentationMetadata>
   GetVideoFramePresentationMetadata() {
     return nullptr;
diff --git a/third_party/blink/public/platform/web_media_player_client.h b/third_party/blink/public/platform/web_media_player_client.h
index 644be44..f47c2934 100644
--- a/third_party/blink/public/platform/web_media_player_client.h
+++ b/third_party/blink/public/platform/web_media_player_client.h
@@ -180,9 +180,9 @@
   virtual void OnPictureInPictureStateChange() = 0;
 
   // Called when a video frame has been presented to the compositor, after a
-  // request was initiated via WebMediaPlayer::RequestAnimationFrame().
+  // request was initiated via WebMediaPlayer::RequestVideoFrameCallback().
   // See https://wicg.github.io/video-raf/.
-  virtual void OnRequestAnimationFrame() {}
+  virtual void OnRequestVideoFrameCallback() {}
 
   struct Features {
     WebString id;
diff --git a/third_party/blink/public/web/modules/mediastream/webmediaplayer_ms.h b/third_party/blink/public/web/modules/mediastream/webmediaplayer_ms.h
index 0d76a982..b597795 100644
--- a/third_party/blink/public/web/modules/mediastream/webmediaplayer_ms.h
+++ b/third_party/blink/public/web/modules/mediastream/webmediaplayer_ms.h
@@ -238,7 +238,7 @@
 
   void OnDisplayTypeChanged(WebMediaPlayer::DisplayType) override;
 
-  void RequestAnimationFrame() override;
+  void RequestVideoFrameCallback() override;
   std::unique_ptr<WebMediaPlayer::VideoFramePresentationMetadata>
   GetVideoFramePresentationMetadata() override;
 
@@ -314,9 +314,10 @@
   scoped_refptr<WebMediaStreamAudioRenderer> audio_renderer_;  // Weak
   media::PaintCanvasVideoRenderer video_renderer_;
 
-  // Indicated whether an outstanding rAF request needs to be forwarded to
-  // |compositor_|. Set when RequestAnimationFrame() is called before Load().
-  bool pending_raf_request_ = false;
+  // Indicated whether an outstanding VideoFrameCallback request needs to be
+  // forwarded to |compositor_|. Set when RequestVideoFrameCallback() is called
+  // before Load().
+  bool pending_rvfc_request_ = false;
 
   bool paused_;
   media::VideoTransformation video_transformation_;
diff --git a/third_party/blink/renderer/bindings/core/v8/generated_code_helper.cc b/third_party/blink/renderer/bindings/core/v8/generated_code_helper.cc
index 9cf5083d..d2db63ce 100644
--- a/third_party/blink/renderer/bindings/core/v8/generated_code_helper.cc
+++ b/third_party/blink/renderer/bindings/core/v8/generated_code_helper.cc
@@ -255,15 +255,33 @@
         v8::SideEffectType::kHasSideEffect);
     v8::Local<v8::FunctionTemplate> interface_template =
         wrapper_type_info->DomTemplate(isolate, world);
-    function_template->SetPrototypeProviderTemplate(interface_template);
-    function_template->ReadOnlyPrototype();
+    function_template->Inherit(interface_template);
     function_template->SetClassName(V8AtomicString(isolate, func_name));
     function_template->InstanceTemplate()->SetInternalFieldCount(
         kV8DefaultWrapperInternalFieldCount);
     per_isolate_data->SetInterfaceTemplate(world, callback_key,
                                            function_template);
   }
-  return function_template->GetFunction(script_state->GetContext());
+
+  v8::Local<v8::Context> context = script_state->GetContext();
+  V8PerContextData* per_context_data = V8PerContextData::From(context);
+  v8::Local<v8::Function> function;
+  if (!function_template->GetFunction(context).ToLocal(&function)) {
+    return v8::MaybeLocal<v8::Function>();
+  }
+  v8::Local<v8::Object> prototype_object =
+      per_context_data->PrototypeForType(wrapper_type_info);
+  bool did_define;
+  if (!function
+           ->DefineOwnProperty(
+               context, V8AtomicString(isolate, "prototype"), prototype_object,
+               static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontEnum |
+                                                  v8::DontDelete))
+           .To(&did_define)) {
+    return v8::MaybeLocal<v8::Function>();
+  }
+  CHECK(did_define);
+  return function;
 }
 
 void InstallUnscopablePropertyNames(
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni
index aa3f1a8ba..0578bb1 100644
--- a/third_party/blink/renderer/bindings/idl_in_modules.gni
+++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -647,9 +647,9 @@
           "//third_party/blink/renderer/modules/storage/window_storage.idl",
           "//third_party/blink/renderer/modules/vibration/navigator_vibration.idl",
           "//third_party/blink/renderer/modules/vibration/testing/internals_vibration.idl",
-          "//third_party/blink/renderer/modules/video_raf/html_video_element_video_request_animation_frame.idl",
-          "//third_party/blink/renderer/modules/video_raf/video_frame_metadata.idl",
-          "//third_party/blink/renderer/modules/video_raf/video_frame_request_callback.idl",
+          "//third_party/blink/renderer/modules/video_rvfc/html_video_element_request_video_frame_callback.idl",
+          "//third_party/blink/renderer/modules/video_rvfc/video_frame_metadata.idl",
+          "//third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback.idl",
           "//third_party/blink/renderer/modules/wake_lock/navigator_wake_lock.idl",
           "//third_party/blink/renderer/modules/wake_lock/wake_lock.idl",
           "//third_party/blink/renderer/modules/wake_lock/wake_lock_sentinel.idl",
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py b/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py
index c6d7e4a..becd1be 100644
--- a/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py
+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py
@@ -340,8 +340,8 @@
             is_initializer_lightweight = True
             assignment_value = "nullptr"
         elif type_info.value_t == "ScriptValue":
-            initializer = None  # ScriptValue::IsEmpty() by default
-            assignment_value = "ScriptValue()"
+            initializer = "${isolate}, v8::Null(${isolate})"
+            assignment_value = "ScriptValue::CreateNull(${isolate})"
         elif idl_type.unwrap().is_union:
             initializer = None  # <union_type>::IsNull() by default
             assignment_value = "{}()".format(type_info.value_t)
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_context.py b/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_context.py
index a19105a..c13121ff 100644
--- a/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_context.py
+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_context.py
@@ -245,6 +245,14 @@
         return self.return_type.unwrap().is_union
 
     @property
+    def is_return_type_promise_type(self):
+        if self.attribute:
+            return self.attribute.idl_type.unwrap().is_promise
+        if self.operation_group:
+            return self.operation_group[0].return_type.unwrap().is_promise
+        return False
+
+    @property
     def may_throw_exception(self):
         if not self.member_like:
             return False
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py b/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
index ea52e71..f90aba4 100644
--- a/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
@@ -335,7 +335,7 @@
     if cg_context.property_ and cg_context.property_.identifier:
         _1.append("${property_name}")
     _2 = ""
-    if cg_context.return_type and cg_context.return_type.unwrap().is_promise:
+    if cg_context.is_return_type_promise_type:
         _2 = ("\n"
               "ExceptionToRejectPromiseScope reject_promise_scope"
               "(${info}, ${exception_state});")
@@ -762,12 +762,14 @@
                    "ExceptionMessages::ConstructorNotCallableAsFunction("
                    "${class_like_name}));\n"
                    "return;")),
-        CxxLikelyIfNode(
-            cond=("ConstructorMode::Current(${isolate}) == "
-                  "ConstructorMode::kWrapExistingObject"),
-            body=T("bindings::V8SetReturnValue(${info}, ${v8_receiver});\n"
-                   "return;")),
     ])
+    if not cg_context.is_named_constructor:
+        node.append(
+            CxxLikelyIfNode(
+                cond=("ConstructorMode::Current(${isolate}) == "
+                      "ConstructorMode::kWrapExistingObject"),
+                body=T("bindings::V8SetReturnValue(${info}, ${v8_receiver});\n"
+                       "return;")))
     node.accumulate(
         CodeGenAccumulator.require_include_headers([
             "third_party/blink/renderer/platform/bindings/v8_object_constructor.h",
@@ -789,7 +791,7 @@
                 body=T("return;")),
         ])
 
-    if cg_context.return_type and cg_context.return_type.unwrap().is_promise:
+    if cg_context.is_return_type_promise_type:
         return SequenceNode([
             T("// Promise returning function: "
               "Convert a TypeError to a reject promise."),
@@ -1802,9 +1804,11 @@
 auto&& v8_private_named_constructor =
     V8PrivateProperty::GetSymbol(${isolate}, kPrivatePropertyNamedConstructor);
 v8::Local<v8::Value> v8_named_constructor;
-if (v8_private_named_constructor.GetOrUndefined(${v8_receiver})
-        .ToLocal(&v8_named_constructor) &&
-    !v8_named_constructor->IsUndefined()) {
+if (!v8_private_named_constructor.GetOrUndefined(${v8_receiver})
+         .ToLocal(&v8_named_constructor)) {
+  return;
+}
+if (!v8_named_constructor->IsUndefined()) {
   bindings::V8SetReturnValue(${info}, v8_named_constructor);
   return;
 }
@@ -3679,10 +3683,16 @@
     if "NotEnumerable" in property_.extended_attributes:
         values.append("v8::DontEnum")
     if "Unforgeable" in property_.extended_attributes:
+        if not isinstance(property_, web_idl.Attribute):
+            values.append("v8::ReadOnly")
         values.append("v8::DontDelete")
     if not values:
         values.append("v8::None")
-    return "static_cast<v8::PropertyAttribute>({})".format(" | ".join(values))
+    if len(values) == 1:
+        return values[0]
+    else:
+        return "static_cast<v8::PropertyAttribute>({})".format(
+            " | ".join(values))
 
 
 def _make_property_entry_on_which_object(property_):
@@ -4141,6 +4151,8 @@
                 for_world=world,
                 v8_callback_type=CodeGenContext.
                 V8_ACCESSOR_NAME_GETTER_CALLBACK)
+        elif "NoInterfaceObject" in exposed_construct.extended_attributes:
+            return  # Skip due to [NoInterfaceObject].
         else:
             cgc = cg_context.make_copy(
                 exposed_construct=exposed_construct,
@@ -4249,33 +4261,69 @@
     return callback_def_nodes
 
 
-def _make_install_unscopables(cg_context):
+def _make_install_prototype_object(cg_context):
     assert isinstance(cg_context, CodeGenContext)
 
+    nodes = []
+
+    class_like = cg_context.class_like
+
     unscopables = []
     is_unscopable = lambda member: "Unscopable" in member.extended_attributes
-    unscopables.extend(filter(is_unscopable, cg_context.class_like.attributes))
-    unscopables.extend(filter(is_unscopable, cg_context.class_like.operations))
-
-    if not unscopables:
-        return None
-
-    return SequenceNode([
-        ListNode([
-            TextNode("// [Unscopable]"),
-            TextNode("static constexpr const char* "
-                     "kUnscopablePropertyNames[] = {"),
+    unscopables.extend(filter(is_unscopable, class_like.attributes))
+    unscopables.extend(filter(is_unscopable, class_like.operations))
+    if unscopables:
+        nodes.extend([
+            TextNode("""\
+// [Unscopable]
+// 3.6.3. Interface prototype object
+// https://heycam.github.io/webidl/#interface-prototype-object
+// step 8. If interface has any member declared with the [Unscopable]
+//   extended attribute, then:\
+"""),
             ListNode([
-                TextNode("\"{}\", ".format(member.identifier))
-                for member in unscopables
+                TextNode("static constexpr const char* "
+                         "kUnscopablePropertyNames[] = {"),
+                ListNode([
+                    TextNode("\"{}\", ".format(member.identifier))
+                    for member in unscopables
+                ]),
+                TextNode("};"),
             ]),
-            TextNode("};"),
-        ]),
-        TextNode("bindings::InstallUnscopablePropertyNames"
-                 "(${isolate}, ${v8_context}, ${prototype_object}, "
-                 "kUnscopablePropertyNames);"),
-        EmptyNode(),
-    ])
+            TextNode("""\
+bindings::InstallUnscopablePropertyNames(
+    ${isolate}, ${v8_context}, ${prototype_object}, kUnscopablePropertyNames);
+"""),
+        ])
+
+    if "NoInterfaceObject" in class_like.extended_attributes:
+        nodes.append(
+            TextNode("""\
+// [NoInterfaceObject]
+// 3.6.3. Interface prototype object
+// https://heycam.github.io/webidl/#interface-prototype-object
+// step 12. If the [NoInterfaceObject] extended attribute was not specified
+//   on interface, then:
+//
+// V8 defines "constructor" property on the prototype object by default.
+${prototype_object}->Delete(
+    ${v8_context}, V8AtomicString(${isolate}, "constructor")).ToChecked();
+"""))
+
+    if ("Global" in class_like.extended_attributes
+            and class_like.indexed_and_named_properties
+            and class_like.indexed_and_named_properties.has_named_properties):
+        nodes.append(
+            TextNode("""\
+// https://heycam.github.io/webidl/#named-properties-object
+// V8 defines "constructor" property on the prototype object by default.
+// Named properties object is currently implemented as a prototype object
+// (implemented with v8::FunctionTemplate::PrototypeTemplate()).
+${prototype_object}->GetPrototype().As<v8::Object>()->Delete(
+    ${v8_context}, V8AtomicString(${isolate}, "constructor")).ToChecked();
+"""))
+
+    return SequenceNode(nodes) if nodes else None
 
 
 def make_install_interface_template(
@@ -4550,12 +4598,13 @@
         for entry in operation_entries)
 
     if is_context_dependent:
-        install_unscopables_node = _make_install_unscopables(cg_context)
+        install_prototype_object_node = _make_install_prototype_object(
+            cg_context)
     else:
-        install_unscopables_node = None
+        install_prototype_object_node = None
 
     if not (attribute_entries or constant_entries or exposed_construct_entries
-            or operation_entries or install_unscopables_node):
+            or operation_entries or install_prototype_object_node):
         return None, None, None
 
     if is_context_dependent:
@@ -4638,7 +4687,7 @@
         })
     bind_installer_local_vars(body, cg_context)
 
-    body.append(install_unscopables_node)
+    body.append(install_prototype_object_node)
 
     def group_by_condition(entries):
         unconditional_entries = []
diff --git a/third_party/blink/renderer/bindings/scripts/generate_global_constructors.py b/third_party/blink/renderer/bindings/scripts/generate_global_constructors.py
index 987f737c..3865e55 100755
--- a/third_party/blink/renderer/bindings/scripts/generate_global_constructors.py
+++ b/third_party/blink/renderer/bindings/scripts/generate_global_constructors.py
@@ -105,9 +105,9 @@
                 interface_name, attributes)
             global_name_to_constructors[argument['exposed']].extend(
                 new_constructors_list)
-    else:
+    elif 'Exposed' in extended_attributes:
         # Exposed=env or Exposed=(env1,...) case
-        exposed_value = extended_attributes.get('Exposed', 'Window')
+        exposed_value = extended_attributes.get('Exposed')
         exposed_global_names = map(str.strip,
                                    exposed_value.strip('()').split(','))
         new_constructors_list = generate_global_constructors_list(
diff --git a/third_party/blink/renderer/core/aom/accessible_node.idl b/third_party/blink/renderer/core/aom/accessible_node.idl
index b8e78529c4..c9a9c5bc 100644
--- a/third_party/blink/renderer/core/aom/accessible_node.idl
+++ b/third_party/blink/renderer/core/aom/accessible_node.idl
@@ -6,6 +6,7 @@
 // Explainer: https://github.com/WICG/aom/blob/master/explainer.md
 // Spec: https://wicg.github.io/aom/spec/
 [
+    Exposed=Window,
     RuntimeEnabled=AccessibilityObjectModel
 ] interface AccessibleNode : EventTarget {
     [CallWith=Document] constructor();
diff --git a/third_party/blink/renderer/core/aom/accessible_node_list.idl b/third_party/blink/renderer/core/aom/accessible_node_list.idl
index 68573677..718ded68 100644
--- a/third_party/blink/renderer/core/aom/accessible_node_list.idl
+++ b/third_party/blink/renderer/core/aom/accessible_node_list.idl
@@ -6,6 +6,7 @@
 // Explainer: https://github.com/WICG/aom/blob/master/explainer.md
 // Spec: https://wicg.github.io/aom/spec/
 [
+    Exposed=Window,
     RuntimeEnabled=AccessibilityObjectModel
 ] interface AccessibleNodeList {
   constructor(optional sequence<AccessibleNode> nodes = []);
diff --git a/third_party/blink/renderer/core/aom/computed_accessible_node.idl b/third_party/blink/renderer/core/aom/computed_accessible_node.idl
index 803e1c5..0765e606 100644
--- a/third_party/blink/renderer/core/aom/computed_accessible_node.idl
+++ b/third_party/blink/renderer/core/aom/computed_accessible_node.idl
@@ -6,6 +6,7 @@
 // Explainer: https://github.com/WICG/aom/blob/master/explainer.md
 // Spec: https://wicg.github.io/aom/spec/
 [
+    Exposed=Window,
     RuntimeEnabled=AccessibilityObjectModel
 ] interface ComputedAccessibleNode {
 
diff --git a/third_party/blink/renderer/core/css/css.idl b/third_party/blink/renderer/core/css/css.idl
index ee1e393..08315b2d 100644
--- a/third_party/blink/renderer/core/css/css.idl
+++ b/third_party/blink/renderer/core/css/css.idl
@@ -30,6 +30,7 @@
 // https://drafts.csswg.org/css-conditional/#the-css-interface
 
 [
+    Exposed=Window,
     ImplementedAs=DOMWindowCSS
 ] interface CSS {
     [CallWith=ExecutionContext] static boolean supports(DOMString property, DOMString value);
diff --git a/third_party/blink/renderer/core/css/css_font_face_rule.idl b/third_party/blink/renderer/core/css/css_font_face_rule.idl
index 2e2a7530..074647a 100644
--- a/third_party/blink/renderer/core/css/css_font_face_rule.idl
+++ b/third_party/blink/renderer/core/css/css_font_face_rule.idl
@@ -20,6 +20,8 @@
 
 // https://drafts.csswg.org/css-fonts/#om-fontface
 
-interface CSSFontFaceRule : CSSRule {
+[
+    Exposed=Window
+] interface CSSFontFaceRule : CSSRule {
     [Measure] readonly attribute CSSStyleDeclaration style;
 };
diff --git a/third_party/blink/renderer/core/css/css_property_rule.idl b/third_party/blink/renderer/core/css/css_property_rule.idl
index 6ab4ed7..f95987fe 100644
--- a/third_party/blink/renderer/core/css/css_property_rule.idl
+++ b/third_party/blink/renderer/core/css/css_property_rule.idl
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 [
+    Exposed=Window,
     RuntimeEnabled=CSSVariables2AtProperty
 ] interface CSSPropertyRule : CSSRule {
     readonly attribute CSSStyleDeclaration style;
diff --git a/third_party/blink/renderer/core/display_lock/render_subtree_activation_event.idl b/third_party/blink/renderer/core/display_lock/render_subtree_activation_event.idl
index 104b4d1b..1fd046d 100644
--- a/third_party/blink/renderer/core/display_lock/render_subtree_activation_event.idl
+++ b/third_party/blink/renderer/core/display_lock/render_subtree_activation_event.idl
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 [
+    Exposed=Window,
     RuntimeEnabled=CSSSubtreeVisibilityActivationEvent
 ] interface RenderSubtreeActivationEvent : Event {
     readonly attribute Element activatedElement;
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 9434d8e..8fc4eb7 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -2451,11 +2451,6 @@
     AtomicString old_id = GetElementData()->IdForStyleResolution();
     AtomicString new_id = MakeIdForStyleResolution(
         params.new_value, GetDocument().InQuirksMode());
-    // Treat empty IDs the same way as nonexistent ID, per
-    // https://dom.spec.whatwg.org/#concept-id.
-    if (new_id.IsEmpty()) {
-      new_id = g_null_atom;
-    }
     if (new_id != old_id) {
       GetElementData()->SetIdForStyleResolution(new_id);
       GetDocument().GetStyleEngine().IdChangedForElement(old_id, new_id, *this);
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h
index 84fdc7a..541b0321 100644
--- a/third_party/blink/renderer/core/dom/element.h
+++ b/third_party/blink/renderer/core/dom/element.h
@@ -1299,17 +1299,7 @@
 }
 
 inline const AtomicString& Element::GetIdAttribute() const {
-  // Note: HasID() can return false even if the id attribute exists. This
-  // happens when the attribute value is empty, which per spec is equivalent to
-  // not having an id attribute at all:
-  // https://dom.spec.whatwg.org/#concept-id. On the other hand, if HasID()
-  // returns true then there must be a non-empty id attribute.
-  if (HasID()) {
-    const AtomicString& attr_value = FastGetAttribute(html_names::kIdAttr);
-    DCHECK(!attr_value.IsEmpty());
-    return attr_value;
-  }
-  return g_null_atom;
+  return HasID() ? FastGetAttribute(html_names::kIdAttr) : g_null_atom;
 }
 
 inline const AtomicString& Element::GetNameAttribute() const {
diff --git a/third_party/blink/renderer/core/dom/scripted_animation_controller.cc b/third_party/blink/renderer/core/dom/scripted_animation_controller.cc
index aec9aa6c..7e54b479 100644
--- a/third_party/blink/renderer/core/dom/scripted_animation_controller.cc
+++ b/third_party/blink/renderer/core/dom/scripted_animation_controller.cc
@@ -83,10 +83,10 @@
   CallMediaQueryListListeners();
 }
 
-void ScriptedAnimationController::ScheduleVideoRafExecution(
-    VideoRafExecutionCallback video_raf_callback) {
-  DCHECK(RuntimeEnabledFeatures::VideoRequestAnimationFrameEnabled());
-  video_raf_queue_.push_back(std::move(video_raf_callback));
+void ScriptedAnimationController::ScheduleVideoFrameCallbacksExecution(
+    ExecuteVfcCallback execute_vfc_callback) {
+  DCHECK(RuntimeEnabledFeatures::RequestVideoFrameCallbackEnabled());
+  vfc_execution_queue_.push_back(std::move(execute_vfc_callback));
   ScheduleAnimationIfNeeded();
 }
 
@@ -103,7 +103,8 @@
 }
 
 bool ScriptedAnimationController::HasFrameCallback() const {
-  return callback_collection_.HasFrameCallback() || !video_raf_queue_.IsEmpty();
+  return callback_collection_.HasFrameCallback() ||
+         !vfc_execution_queue_.IsEmpty();
 }
 
 ScriptedAnimationController::CallbackId
@@ -159,14 +160,14 @@
   }
 }
 
-void ScriptedAnimationController::ExecuteVideoRafCallbacks() {
+void ScriptedAnimationController::ExecuteVideoFrameCallbacks() {
   // dispatchEvents() runs script which can cause the context to be destroyed.
   if (!GetExecutionContext())
     return;
 
-  Vector<VideoRafExecutionCallback> video_raf_callbacks;
-  video_raf_queue_.swap(video_raf_callbacks);
-  for (auto& callback : video_raf_callbacks)
+  Vector<ExecuteVfcCallback> execute_vfc_callbacks;
+  vfc_execution_queue_.swap(execute_vfc_callbacks);
+  for (auto& callback : execute_vfc_callbacks)
     std::move(callback).Run(current_frame_time_ms_);
 }
 
@@ -192,7 +193,7 @@
   return callback_collection_.HasFrameCallback() || !task_queue_.IsEmpty() ||
          !event_queue_.IsEmpty() || !media_query_list_listeners_.IsEmpty() ||
          GetWindow()->document()->HasAutofocusCandidates() ||
-         !video_raf_queue_.IsEmpty();
+         !vfc_execution_queue_.IsEmpty();
 }
 
 void ScriptedAnimationController::ServiceScriptedAnimations(
@@ -242,10 +243,10 @@
   // steps for that Document, passing in now as the timestamp.
   RunTasks();
 
-  if (RuntimeEnabledFeatures::VideoRequestAnimationFrameEnabled()) {
-    // Run the HTMLVideoELement.requestAnimationFrame() callbacks.
+  if (RuntimeEnabledFeatures::RequestVideoFrameCallbackEnabled()) {
+    // Run the fulfilled HTMLVideoELement.requestVideoFrameCallback() callbacks.
     // See https://wicg.github.io/video-raf/.
-    ExecuteVideoRafCallbacks();
+    ExecuteVideoFrameCallbacks();
   }
 
   // 10.11. For each fully active Document in docs, run the animation
diff --git a/third_party/blink/renderer/core/dom/scripted_animation_controller.h b/third_party/blink/renderer/core/dom/scripted_animation_controller.h
index 271781a..d3ac68f2 100644
--- a/third_party/blink/renderer/core/dom/scripted_animation_controller.h
+++ b/third_party/blink/renderer/core/dom/scripted_animation_controller.h
@@ -59,11 +59,11 @@
     return "ScriptedAnimationController";
   }
 
-  // Runs all the video.requestAnimationFrame() callbacks associated with one
-  // HTMLVideoElement. |double| is the current frame time in milliseconds
+  // Runs all the video.requestVideoFrameCallback() callbacks associated with
+  // one HTMLVideoElement. |double| is the current frame time in milliseconds
   // (e.g. |current_frame_time_ms_|), to be passed as the "now" parameter
   // when running the callbacks.
-  using VideoRafExecutionCallback = base::OnceCallback<void(double)>;
+  using ExecuteVfcCallback = base::OnceCallback<void(double)>;
 
   // Animation frame callbacks are used for requestAnimationFrame().
   typedef int CallbackId;
@@ -77,9 +77,9 @@
       FrameRequestCallbackCollection::FrameCallback*);
   void CancelPostFrameCallback(CallbackId);
 
-  // Queues up the execution of video.requestAnimationFrame() callbacks for a
-  // specific HTMLVideoELement, as part of the next rendering steps.
-  void ScheduleVideoRafExecution(VideoRafExecutionCallback);
+  // Queues up the execution of video.requestVideoFrameCallback() callbacks for
+  // a specific HTMLVideoELement, as part of the next rendering steps.
+  void ScheduleVideoFrameCallbacksExecution(ExecuteVfcCallback);
 
   // Animation frame events are used for resize events, scroll events, etc.
   void EnqueueEvent(Event*);
@@ -112,7 +112,7 @@
   void DispatchEvents(
       const AtomicString& event_interface_filter = AtomicString());
   void ExecuteFrameCallbacks();
-  void ExecuteVideoRafCallbacks();
+  void ExecuteVideoFrameCallbacks();
   void CallMediaQueryListListeners();
 
   bool HasScheduledFrameTasks() const;
@@ -124,7 +124,7 @@
 
   FrameRequestCallbackCollection callback_collection_;
   Vector<base::OnceClosure> task_queue_;
-  Vector<VideoRafExecutionCallback> video_raf_queue_;
+  Vector<ExecuteVfcCallback> vfc_execution_queue_;
   HeapVector<Member<Event>> event_queue_;
   using PerFrameEventsMap =
       HeapHashMap<Member<const EventTarget>, HashSet<const StringImpl*>>;
diff --git a/third_party/blink/renderer/core/dom/tree_scope.cc b/third_party/blink/renderer/core/dom/tree_scope.cc
index 7855cb5..f1aef84 100644
--- a/third_party/blink/renderer/core/dom/tree_scope.cc
+++ b/third_party/blink/renderer/core/dom/tree_scope.cc
@@ -110,9 +110,7 @@
 }
 
 Element* TreeScope::getElementById(const AtomicString& element_id) const {
-  // |element_id| can never be null for calls that originated from JavaScript,
-  // but sometimes other C++ code can call this function with g_null_atom.
-  if (element_id.IsNull())
+  if (element_id.IsEmpty())
     return nullptr;
   if (!elements_by_id_)
     return nullptr;
diff --git a/third_party/blink/renderer/core/events/application_cache_error_event.idl b/third_party/blink/renderer/core/events/application_cache_error_event.idl
index c5c59b4..040c370b 100644
--- a/third_party/blink/renderer/core/events/application_cache_error_event.idl
+++ b/third_party/blink/renderer/core/events/application_cache_error_event.idl
@@ -9,6 +9,7 @@
 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22702
 
 [
+    Exposed=Window,
     RuntimeEnabled=AppCache,
     SecureContext=RestrictAppCacheToSecureContexts
 ] interface ApplicationCacheErrorEvent : Event {
diff --git a/third_party/blink/renderer/core/events/mutation_event.idl b/third_party/blink/renderer/core/events/mutation_event.idl
index 0c34b81c..416c0c2 100644
--- a/third_party/blink/renderer/core/events/mutation_event.idl
+++ b/third_party/blink/renderer/core/events/mutation_event.idl
@@ -19,7 +19,9 @@
 
 // https://w3c.github.io/uievents/#interface-MutationEvent
 
-interface MutationEvent : Event {
+[
+    Exposed=Window
+] interface MutationEvent : Event {
     // attrChangeType
     const unsigned short MODIFICATION = 1;
     const unsigned short ADDITION     = 2;
diff --git a/third_party/blink/renderer/core/events/overscroll_event.idl b/third_party/blink/renderer/core/events/overscroll_event.idl
index 909255e..f3e8c8c 100644
--- a/third_party/blink/renderer/core/events/overscroll_event.idl
+++ b/third_party/blink/renderer/core/events/overscroll_event.idl
@@ -5,6 +5,7 @@
 // TODO(sahel): Add link to w3c. https://crbugs.com/907601
 
 [
+    Exposed=Window,
     RuntimeEnabled=OverscrollCustomization
 ] interface OverscrollEvent : Event {
     constructor(DOMString type, boolean bubbles, optional OverscrollEventInit eventInitDict = {});
diff --git a/third_party/blink/renderer/core/events/text_event.idl b/third_party/blink/renderer/core/events/text_event.idl
index 3395b93..7b3fd59 100644
--- a/third_party/blink/renderer/core/events/text_event.idl
+++ b/third_party/blink/renderer/core/events/text_event.idl
@@ -31,7 +31,9 @@
 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=12958
 // https://github.com/w3c/uievents/commit/1a2aa02b474fd4feaf43fdced06e6fd7214196a4
 
-interface TextEvent : UIEvent {
+[
+    Exposed=Window
+] interface TextEvent : UIEvent {
 
     [Measure] readonly attribute DOMString data;
 
diff --git a/third_party/blink/renderer/core/exported/web_image_test.cc b/third_party/blink/renderer/core/exported/web_image_test.cc
index 92e5e7c..7238cb7 100644
--- a/third_party/blink/renderer/core/exported/web_image_test.cc
+++ b/third_party/blink/renderer/core/exported/web_image_test.cc
@@ -33,6 +33,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/web_data.h"
 #include "third_party/blink/public/platform/web_size.h"
+#include "third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h"
 #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
 #include "third_party/blink/renderer/platform/wtf/shared_buffer.h"
 
@@ -44,7 +45,10 @@
   return test::ReadFromFile(file_path);
 }
 
-TEST(WebImageTest, PNGImage) {
+class WebImageTest : public testing::Test,
+                     private ScopedMockOverlayScrollbars {};
+
+TEST_F(WebImageTest, PNGImage) {
   scoped_refptr<SharedBuffer> data = ReadFile("white-1x1.png");
   ASSERT_TRUE(data.get());
 
@@ -54,7 +58,7 @@
   EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), image.getColor(0, 0));
 }
 
-TEST(WebImageTest, ICOImage) {
+TEST_F(WebImageTest, ICOImage) {
   scoped_refptr<SharedBuffer> data = ReadFile("black-and-white.ico");
   ASSERT_TRUE(data.get());
 
@@ -68,7 +72,7 @@
   EXPECT_EQ(SkColorSetARGB(255, 0, 0, 0), images[1].getColor(0, 0));
 }
 
-TEST(WebImageTest, ICOValidHeaderMissingBitmap) {
+TEST_F(WebImageTest, ICOValidHeaderMissingBitmap) {
   scoped_refptr<SharedBuffer> data =
       ReadFile("valid_header_missing_bitmap.ico");
   ASSERT_TRUE(data.get());
@@ -77,7 +81,7 @@
   ASSERT_TRUE(images.empty());
 }
 
-TEST(WebImageTest, BadImage) {
+TEST_F(WebImageTest, BadImage) {
   const char kBadImage[] = "hello world";
   WebVector<SkBitmap> images = WebImage::FramesFromData(WebData(kBadImage));
   ASSERT_EQ(0u, images.size());
@@ -87,7 +91,7 @@
   EXPECT_TRUE(image.isNull());
 }
 
-TEST(WebImageTest, DecodeSVGDesiredSize) {
+TEST_F(WebImageTest, DecodeSVGDesiredSize) {
   const char kImage[] =
       "<svg xmlns='http://www.w3.org/2000/svg' width='32'"
       " height='32'></svg>";
@@ -98,7 +102,7 @@
   EXPECT_EQ(image.height(), 16);
 }
 
-TEST(WebImageTest, DecodeSVGDesiredSizeAspectRatioOnly) {
+TEST_F(WebImageTest, DecodeSVGDesiredSizeAspectRatioOnly) {
   const char kImageAspectRatioOne[] =
       "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'></svg>";
   SkBitmap image =
@@ -118,7 +122,7 @@
   EXPECT_EQ(image.height(), 16);
 }
 
-TEST(WebImageTest, DecodeSVGDesiredSizeEmpty) {
+TEST_F(WebImageTest, DecodeSVGDesiredSizeEmpty) {
   const char kImage[] =
       "<svg xmlns='http://www.w3.org/2000/svg' width='32'"
       " height='32'></svg>";
@@ -129,7 +133,7 @@
   EXPECT_EQ(image.height(), 32);
 }
 
-TEST(WebImageTest, DecodeSVGInvalidImage) {
+TEST_F(WebImageTest, DecodeSVGInvalidImage) {
   const char kBogusImage[] = "bogus";
   SkBitmap image = WebImage::DecodeSVG(WebData(kBogusImage), WebSize(16, 16));
   EXPECT_TRUE(image.empty());
diff --git a/third_party/blink/renderer/core/frame/fragment_directive.idl b/third_party/blink/renderer/core/frame/fragment_directive.idl
index 3f91db9..ecf07ad 100644
--- a/third_party/blink/renderer/core/frame/fragment_directive.idl
+++ b/third_party/blink/renderer/core/frame/fragment_directive.idl
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 // https://github.com/WICG/ScrollToTextFragment
-[RuntimeEnabled=TextFragmentIdentifiers]
-interface FragmentDirective {
+[
+    Exposed=Window,
+    RuntimeEnabled=TextFragmentIdentifiers
+] interface FragmentDirective {
 };
diff --git a/third_party/blink/renderer/core/frame/is_input_pending_options.idl b/third_party/blink/renderer/core/frame/is_input_pending_options.idl
index 19c8fec..48423d1 100644
--- a/third_party/blink/renderer/core/frame/is_input_pending_options.idl
+++ b/third_party/blink/renderer/core/frame/is_input_pending_options.idl
@@ -3,8 +3,10 @@
 // found in the LICENSE file.
 
 // https://github.com/WICG/is-input-pending
-[RuntimeEnabled=ExperimentalIsInputPending]
-interface IsInputPendingOptions {
+[
+    Exposed=Window,
+    RuntimeEnabled=ExperimentalIsInputPending
+] interface IsInputPendingOptions {
     constructor(optional IsInputPendingOptionsInit options = {});
     attribute boolean includeContinuous;
 };
diff --git a/third_party/blink/renderer/core/frame/reporting_observer.idl b/third_party/blink/renderer/core/frame/reporting_observer.idl
index 134e31d..fdeecba 100644
--- a/third_party/blink/renderer/core/frame/reporting_observer.idl
+++ b/third_party/blink/renderer/core/frame/reporting_observer.idl
@@ -7,7 +7,8 @@
 callback ReportingObserverCallback = void (sequence<Report> reports, ReportingObserver observer);
 
 [
-    ActiveScriptWrappable
+    ActiveScriptWrappable,
+    Exposed=Window
 ] interface ReportingObserver {
     [CallWith=ExecutionContext] constructor(ReportingObserverCallback callback, optional ReportingObserverOptions options = {});
     void observe();
diff --git a/third_party/blink/renderer/core/frame/scheduling.idl b/third_party/blink/renderer/core/frame/scheduling.idl
index 5e1582d0..ea3bd840 100644
--- a/third_party/blink/renderer/core/frame/scheduling.idl
+++ b/third_party/blink/renderer/core/frame/scheduling.idl
@@ -3,8 +3,10 @@
 // found in the LICENSE file.
 
 // https://github.com/WICG/is-input-pending
-[RuntimeEnabled=ExperimentalIsInputPending]
-interface Scheduling {
+[
+    Exposed=Window,
+    RuntimeEnabled=ExperimentalIsInputPending
+] interface Scheduling {
     [RuntimeEnabled=ExperimentalIsInputPending] boolean isFramePending();
     [CallWith=ScriptState, MeasureAs=SchedulingIsInputPending, RuntimeEnabled=ExperimentalIsInputPending] boolean isInputPending(IsInputPendingOptions options);
 };
diff --git a/third_party/blink/renderer/core/frame/visual_viewport.idl b/third_party/blink/renderer/core/frame/visual_viewport.idl
index 4d64ea5..6aedf34 100644
--- a/third_party/blink/renderer/core/frame/visual_viewport.idl
+++ b/third_party/blink/renderer/core/frame/visual_viewport.idl
@@ -27,6 +27,7 @@
  // WICG proposal: https://github.com/WICG/ViewportAPI
 
 [
+    Exposed=Window,
     ImplementedAs=DOMVisualViewport
 ] interface VisualViewport : EventTarget {
     [HighEntropy, Measure] readonly attribute double offsetLeft;
diff --git a/third_party/blink/renderer/core/geometry/dom_rect_list.idl b/third_party/blink/renderer/core/geometry/dom_rect_list.idl
index 7afa3d6..79417a7 100644
--- a/third_party/blink/renderer/core/geometry/dom_rect_list.idl
+++ b/third_party/blink/renderer/core/geometry/dom_rect_list.idl
@@ -8,7 +8,9 @@
 // DOMRectList only exists for compatibility with legacy web content.
 // When specifying a new API, use sequence<DOMRect> instead.
 
-interface DOMRectList {
+[
+    Exposed=Window
+] interface DOMRectList {
     readonly attribute unsigned long length;
     [MeasureAs=ClientRectListItem] getter DOMRect? item(unsigned long index);
 };
diff --git a/third_party/blink/renderer/core/html/BUILD.gn b/third_party/blink/renderer/core/html/BUILD.gn
index 0544f47..76cfc6e 100644
--- a/third_party/blink/renderer/core/html/BUILD.gn
+++ b/third_party/blink/renderer/core/html/BUILD.gn
@@ -500,8 +500,8 @@
     "media/remote_playback_controller.cc",
     "media/remote_playback_controller.h",
     "media/remote_playback_observer.h",
-    "media/video_request_animation_frame.cc",
-    "media/video_request_animation_frame.h",
+    "media/video_frame_callback_requester.cc",
+    "media/video_frame_callback_requester.h",
     "media/video_wake_lock.cc",
     "media/video_wake_lock.h",
     "plugin_document.cc",
diff --git a/third_party/blink/renderer/core/html/html_collection.idl b/third_party/blink/renderer/core/html/html_collection.idl
index a07779e..9efafff 100644
--- a/third_party/blink/renderer/core/html/html_collection.idl
+++ b/third_party/blink/renderer/core/html/html_collection.idl
@@ -22,6 +22,7 @@
 // https://dom.spec.whatwg.org/#interface-htmlcollection
 
 [
+    Exposed=Window,
     LegacyUnenumerableNamedProperties
 ] interface HTMLCollection {
     [Affects=Nothing] readonly attribute unsigned long length;
diff --git a/third_party/blink/renderer/core/html/html_content_element.idl b/third_party/blink/renderer/core/html/html_content_element.idl
index 937de47..609d07a 100644
--- a/third_party/blink/renderer/core/html/html_content_element.idl
+++ b/third_party/blink/renderer/core/html/html_content_element.idl
@@ -26,7 +26,9 @@
 
 // https://w3c.github.io/webcomponents/spec/shadow/#the-content-element
 
-interface HTMLContentElement : HTMLElement {
+[
+    Exposed=Window
+] interface HTMLContentElement : HTMLElement {
     [Reflect] attribute DOMString select;
     NodeList getDistributedNodes();
 };
diff --git a/third_party/blink/renderer/core/html/html_shadow_element.idl b/third_party/blink/renderer/core/html/html_shadow_element.idl
index 035492c..1939442 100644
--- a/third_party/blink/renderer/core/html/html_shadow_element.idl
+++ b/third_party/blink/renderer/core/html/html_shadow_element.idl
@@ -30,6 +30,8 @@
 
 // https://w3c.github.io/webcomponents/spec/shadow/#the-shadow-element
 
-interface HTMLShadowElement : HTMLElement {
+[
+    Exposed=Window
+] interface HTMLShadowElement : HTMLElement {
     NodeList getDistributedNodes();
 };
diff --git a/third_party/blink/renderer/core/html/html_slot_element.idl b/third_party/blink/renderer/core/html/html_slot_element.idl
index ce9723f..1185b83 100644
--- a/third_party/blink/renderer/core/html/html_slot_element.idl
+++ b/third_party/blink/renderer/core/html/html_slot_element.idl
@@ -25,8 +25,10 @@
  */
 
 // https://html.spec.whatwg.org/C/#the-slot-element
-[HTMLConstructor]
-interface HTMLSlotElement : HTMLElement {
+[
+    Exposed=Window,
+    HTMLConstructor
+] interface HTMLSlotElement : HTMLElement {
     [CEReactions, Reflect] attribute DOMString name;
     [ImplementedAs=AssignedNodesForBinding] sequence<Node> assignedNodes(optional AssignedNodesOptions options = {});
     [ImplementedAs=AssignedElementsForBinding] sequence<Element> assignedElements(optional AssignedNodesOptions options = {});
diff --git a/third_party/blink/renderer/core/html/image_document_test.cc b/third_party/blink/renderer/core/html/image_document_test.cc
index 0faa1a5c..5b4d48d 100644
--- a/third_party/blink/renderer/core/html/image_document_test.cc
+++ b/third_party/blink/renderer/core/html/image_document_test.cc
@@ -105,6 +105,7 @@
   FillWithEmptyClients(page_clients);
   chrome_client_ = MakeGarbageCollected<WindowToViewportScalingChromeClient>();
   page_clients.chrome_client = chrome_client_;
+  dummy_page_holder_ = nullptr;
   dummy_page_holder_ = std::make_unique<DummyPageHolder>(
       IntSize(view_width, view_height), &page_clients);
 
@@ -253,13 +254,8 @@
   GetDocument().ImageClicked(15, 27);
   ScrollOffset offset =
       GetDocument().GetFrame()->View()->LayoutViewport()->GetScrollOffset();
-  if (RuntimeEnabledFeatures::FractionalScrollOffsetsEnabled()) {
-    EXPECT_EQ(22.5f, offset.Width());
-    EXPECT_EQ(42, offset.Height());
-  } else {
-    EXPECT_EQ(22, offset.Width());
-    EXPECT_EQ(42, offset.Height());
-  }
+  EXPECT_EQ(20, offset.Width());
+  EXPECT_EQ(20, offset.Height());
 
   GetDocument().ImageClicked(20, 20);
 
@@ -268,10 +264,10 @@
       GetDocument().GetFrame()->View()->LayoutViewport()->GetScrollOffset();
   if (RuntimeEnabledFeatures::FractionalScrollOffsetsEnabled()) {
     EXPECT_EQ(11.25f, offset.Width());
-    EXPECT_EQ(22.5f, offset.Height());
+    EXPECT_EQ(20, offset.Height());
   } else {
     EXPECT_EQ(11, offset.Width());
-    EXPECT_EQ(22, offset.Height());
+    EXPECT_EQ(20, offset.Height());
   }
 }
 
diff --git a/third_party/blink/renderer/core/html/media/html_video_element.cc b/third_party/blink/renderer/core/html/media/html_video_element.cc
index d30c99e..50740dd 100644
--- a/third_party/blink/renderer/core/html/media/html_video_element.cc
+++ b/third_party/blink/renderer/core/html/media/html_video_element.cc
@@ -46,7 +46,7 @@
 #include "third_party/blink/renderer/core/html/media/media_custom_controls_fullscreen_detector.h"
 #include "third_party/blink/renderer/core/html/media/media_remoting_interstitial.h"
 #include "third_party/blink/renderer/core/html/media/picture_in_picture_interstitial.h"
-#include "third_party/blink/renderer/core/html/media/video_request_animation_frame.h"
+#include "third_party/blink/renderer/core/html/media/video_frame_callback_requester.h"
 #include "third_party/blink/renderer/core/html/media/video_wake_lock.h"
 #include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h"
 #include "third_party/blink/renderer/core/html_names.h"
@@ -809,9 +809,9 @@
 }
 
 void HTMLVideoElement::OnWebMediaPlayerCreated() {
-  if (RuntimeEnabledFeatures::VideoRequestAnimationFrameEnabled()) {
-    if (auto* video_raf = VideoRequestAnimationFrame::From(*this))
-      video_raf->OnWebMediaPlayerCreated();
+  if (RuntimeEnabledFeatures::RequestVideoFrameCallbackEnabled()) {
+    if (auto* vfc_requester = VideoFrameCallbackRequester::From(*this))
+      vfc_requester->OnWebMediaPlayerCreated();
   }
 }
 
@@ -822,9 +822,9 @@
     UpdatePictureInPictureAvailability();
 }
 
-void HTMLVideoElement::OnRequestAnimationFrame() {
-  DCHECK(RuntimeEnabledFeatures::VideoRequestAnimationFrameEnabled());
-  VideoRequestAnimationFrame::From(*this)->OnRequestAnimationFrame();
+void HTMLVideoElement::OnRequestVideoFrameCallback() {
+  DCHECK(RuntimeEnabledFeatures::RequestVideoFrameCallbackEnabled());
+  VideoFrameCallbackRequester::From(*this)->OnRequestVideoFrameCallback();
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/media/html_video_element.h b/third_party/blink/renderer/core/html/media/html_video_element.h
index ff5474a..5fb512d 100644
--- a/third_party/blink/renderer/core/html/media/html_video_element.h
+++ b/third_party/blink/renderer/core/html/media/html_video_element.h
@@ -179,7 +179,7 @@
 
   // WebMediaPlayerClient implementation.
   void OnBecamePersistentVideo(bool) final;
-  void OnRequestAnimationFrame() final;
+  void OnRequestVideoFrameCallback() final;
 
   bool IsPersistent() const;
 
diff --git a/third_party/blink/renderer/core/html/media/video_frame_callback_requester.cc b/third_party/blink/renderer/core/html/media/video_frame_callback_requester.cc
new file mode 100644
index 0000000..d0998e37
--- /dev/null
+++ b/third_party/blink/renderer/core/html/media/video_frame_callback_requester.cc
@@ -0,0 +1,30 @@
+// 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 "third_party/blink/renderer/core/html/media/video_frame_callback_requester.h"
+
+#include "third_party/blink/renderer/core/html/media/html_video_element.h"
+
+namespace blink {
+
+VideoFrameCallbackRequester::VideoFrameCallbackRequester(
+    HTMLVideoElement& element)
+    : Supplement<HTMLVideoElement>(element) {}
+
+// static
+VideoFrameCallbackRequester* VideoFrameCallbackRequester::From(
+    HTMLVideoElement& element) {
+  return Supplement<HTMLVideoElement>::From<VideoFrameCallbackRequester>(
+      element);
+}
+
+void VideoFrameCallbackRequester::Trace(Visitor* visitor) {
+  Supplement<HTMLVideoElement>::Trace(visitor);
+}
+
+// static
+const char VideoFrameCallbackRequester::kSupplementName[] =
+    "VideoFrameCallbackRequester";
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/html/media/video_frame_callback_requester.h b/third_party/blink/renderer/core/html/media/video_frame_callback_requester.h
new file mode 100644
index 0000000..7f4dff1
--- /dev/null
+++ b/third_party/blink/renderer/core/html/media/video_frame_callback_requester.h
@@ -0,0 +1,42 @@
+// 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 THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_VIDEO_FRAME_CALLBACK_REQUESTER_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_VIDEO_FRAME_CALLBACK_REQUESTER_H_
+
+#include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+#include "third_party/blink/renderer/platform/supplementable.h"
+
+namespace blink {
+
+class HTMLVideoElement;
+
+// Interface defining what the HTMLVideoElement should be aware
+// of in order to support the <video>.requestVideoFrameCallback() API.
+class CORE_EXPORT VideoFrameCallbackRequester
+    : public GarbageCollected<VideoFrameCallbackRequester>,
+      public Supplement<HTMLVideoElement> {
+  USING_GARBAGE_COLLECTED_MIXIN(VideoFrameCallbackRequester);
+
+ public:
+  static const char kSupplementName[];
+
+  static VideoFrameCallbackRequester* From(HTMLVideoElement&);
+
+  virtual ~VideoFrameCallbackRequester() = default;
+
+  void Trace(Visitor*) override;
+
+  virtual void OnWebMediaPlayerCreated() = 0;
+  virtual void OnRequestVideoFrameCallback() = 0;
+
+ protected:
+  explicit VideoFrameCallbackRequester(HTMLVideoElement&);
+  DISALLOW_COPY_AND_ASSIGN(VideoFrameCallbackRequester);
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_VIDEO_FRAME_CALLBACK_REQUESTER_H_
diff --git a/third_party/blink/renderer/core/html/media/video_request_animation_frame.cc b/third_party/blink/renderer/core/html/media/video_request_animation_frame.cc
deleted file mode 100644
index e067020..0000000
--- a/third_party/blink/renderer/core/html/media/video_request_animation_frame.cc
+++ /dev/null
@@ -1,30 +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 "third_party/blink/renderer/core/html/media/video_request_animation_frame.h"
-
-#include "third_party/blink/renderer/core/html/media/html_video_element.h"
-
-namespace blink {
-
-VideoRequestAnimationFrame::VideoRequestAnimationFrame(
-    HTMLVideoElement& element)
-    : Supplement<HTMLVideoElement>(element) {}
-
-// static
-VideoRequestAnimationFrame* VideoRequestAnimationFrame::From(
-    HTMLVideoElement& element) {
-  return Supplement<HTMLVideoElement>::From<VideoRequestAnimationFrame>(
-      element);
-}
-
-void VideoRequestAnimationFrame::Trace(Visitor* visitor) {
-  Supplement<HTMLVideoElement>::Trace(visitor);
-}
-
-// static
-const char VideoRequestAnimationFrame::kSupplementName[] =
-    "VideoRequestAnimationFrame";
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/core/html/media/video_request_animation_frame.h b/third_party/blink/renderer/core/html/media/video_request_animation_frame.h
deleted file mode 100644
index 29b83af..0000000
--- a/third_party/blink/renderer/core/html/media/video_request_animation_frame.h
+++ /dev/null
@@ -1,42 +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 THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_VIDEO_REQUEST_ANIMATION_FRAME_H_
-#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_VIDEO_REQUEST_ANIMATION_FRAME_H_
-
-#include "third_party/blink/renderer/core/core_export.h"
-#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
-#include "third_party/blink/renderer/platform/supplementable.h"
-
-namespace blink {
-
-class HTMLVideoElement;
-
-// Interface that defines the interfaces that HTMLVideoElement should be aware
-// of in order to support the <video>.requestAnimationFrame() API.
-class CORE_EXPORT VideoRequestAnimationFrame
-    : public GarbageCollected<VideoRequestAnimationFrame>,
-      public Supplement<HTMLVideoElement> {
-  USING_GARBAGE_COLLECTED_MIXIN(VideoRequestAnimationFrame);
-
- public:
-  static const char kSupplementName[];
-
-  static VideoRequestAnimationFrame* From(HTMLVideoElement&);
-
-  virtual ~VideoRequestAnimationFrame() = default;
-
-  void Trace(Visitor*) override;
-
-  virtual void OnWebMediaPlayerCreated() = 0;
-  virtual void OnRequestAnimationFrame() = 0;
-
- protected:
-  explicit VideoRequestAnimationFrame(HTMLVideoElement&);
-  DISALLOW_COPY_AND_ASSIGN(VideoRequestAnimationFrame);
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_VIDEO_REQUEST_ANIMATION_FRAME_H_
diff --git a/third_party/blink/renderer/core/input/input_device_capabilities.idl b/third_party/blink/renderer/core/input/input_device_capabilities.idl
index 341f71e..e7f2fb4e 100644
--- a/third_party/blink/renderer/core/input/input_device_capabilities.idl
+++ b/third_party/blink/renderer/core/input/input_device_capabilities.idl
@@ -11,7 +11,9 @@
 
 // https://wicg.github.io/InputDeviceCapabilities/#the-inputdevicecapabilities-interface
 
-interface InputDeviceCapabilities {
+[
+    Exposed=Window
+] interface InputDeviceCapabilities {
     constructor(optional InputDeviceCapabilitiesInit deviceInitDict = {});
 
     // Whether this device dispatches touch events for movement.  This is used to detect
diff --git a/third_party/blink/renderer/core/input/touch_list.idl b/third_party/blink/renderer/core/input/touch_list.idl
index f8381a4..083f6902 100644
--- a/third_party/blink/renderer/core/input/touch_list.idl
+++ b/third_party/blink/renderer/core/input/touch_list.idl
@@ -25,7 +25,9 @@
 
 // https://w3c.github.io/touch-events/#touchlist-interface
 
-interface TouchList {
+[
+    Exposed=Window
+] interface TouchList {
     readonly attribute unsigned long length;
     getter Touch? item(unsigned long index);
 };
diff --git a/third_party/blink/renderer/core/intersection_observer/intersection_observer_entry.idl b/third_party/blink/renderer/core/intersection_observer/intersection_observer_entry.idl
index ec82d861..475284d 100644
--- a/third_party/blink/renderer/core/intersection_observer/intersection_observer_entry.idl
+++ b/third_party/blink/renderer/core/intersection_observer/intersection_observer_entry.idl
@@ -4,7 +4,9 @@
 
 // https://wicg.github.io/IntersectionObserver/#intersection-observer-entry
 
-interface IntersectionObserverEntry {
+[
+    Exposed=Window
+] interface IntersectionObserverEntry {
     readonly attribute DOMHighResTimeStamp time;
     // TODO(szager): |rootBounds| should not be nullable.
     readonly attribute DOMRectReadOnly? rootBounds;
diff --git a/third_party/blink/renderer/core/invisible_dom/activate_invisible_event.idl b/third_party/blink/renderer/core/invisible_dom/activate_invisible_event.idl
index 4ee6aaba..e9d7f614 100644
--- a/third_party/blink/renderer/core/invisible_dom/activate_invisible_event.idl
+++ b/third_party/blink/renderer/core/invisible_dom/activate_invisible_event.idl
@@ -5,6 +5,7 @@
 // Explainer at https://goo.gl/mJUNB5
 
 [
+    Exposed=Window,
     RuntimeEnabled=InvisibleDOM
 ] interface ActivateInvisibleEvent : Event {
     readonly attribute Element? activatedElement;
diff --git a/third_party/blink/renderer/core/layout/layout_inline.cc b/third_party/blink/renderer/core/layout/layout_inline.cc
index 57acf1f3..73e196c 100644
--- a/third_party/blink/renderer/core/layout/layout_inline.cc
+++ b/third_party/blink/renderer/core/layout/layout_inline.cc
@@ -1643,9 +1643,9 @@
   // but LayoutNG has fixed the issue. This function seems to always return
   // zero in LayoutNG. We should probably remove this function for LayoutNG.
 
-  DCHECK(IsInFlowPositioned() || StyleRef().HasFilter() ||
+  DCHECK(IsInFlowPositioned() || StyleRef().HasNonInitialFilter() ||
          StyleRef().HasBackdropFilter());
-  if (!IsInFlowPositioned() && !StyleRef().HasFilter() &&
+  if (!IsInFlowPositioned() && !StyleRef().HasNonInitialFilter() &&
       !StyleRef().HasBackdropFilter()) {
     DCHECK(CreatesGroup())
         << "Inlines with filters or backdrop-filters should create a group";
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc
index 38c270ded..f2dd044 100644
--- a/third_party/blink/renderer/core/layout/layout_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -1332,13 +1332,14 @@
 bool LayoutObject::ComputeIsFixedContainer(const ComputedStyle* style) const {
   if (!style)
     return false;
+  bool is_document_element = IsDocumentElement();
   // https://www.w3.org/TR/filter-effects-1/#FilterProperty
-  if (style->HasFilter() && !IsDocumentElement())
+  if (!is_document_element && style->HasNonInitialFilter())
     return true;
   // Backdrop-filter creates a containing block for fixed and absolute
   // positioned elements:
   // https://drafts.fxtf.org/filter-effects-2/#backdrop-filter-operation
-  if (style->HasBackdropFilter() && !IsDocumentElement())
+  if (!is_document_element && style->HasBackdropFilter())
     return true;
   // The LayoutView is always a container of fixed positioned descendants. In
   // addition, SVG foreignObjects become such containers, so that descendants
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h
index 95e0362..7c26dfcf 100644
--- a/third_party/blink/renderer/core/layout/layout_object.h
+++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -1132,7 +1132,7 @@
   // Not calling style()->hasFilterInducingProperty because some objects force
   // to ignore reflection style (e.g. LayoutInline).
   bool HasFilterInducingProperty() const {
-    return StyleRef().HasFilter() || HasReflection();
+    return StyleRef().HasNonInitialFilter() || HasReflection();
   }
 
   bool HasShapeOutside() const { return StyleRef().ShapeOutside(); }
@@ -1313,6 +1313,8 @@
 
   // Returns true if style would make this object a fixed container.
   // This value gets cached by bitfields_.can_contain_fixed_position_objects_.
+  // TODO(pdr): Should this function be unified with
+  // ComputedStyle::CanContainFixedPositionObjects?
   bool ComputeIsFixedContainer(const ComputedStyle* style) const;
 
   virtual LayoutObject* HoverAncestor() const { return Parent(); }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
index 50a36329..5a57ce2 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
@@ -1205,6 +1205,8 @@
 }
 
 bool NGBlockNode::HasAspectRatio() const {
+  if (Style().AspectRatio().has_value())
+    return true;
   LayoutBox* layout_object = GetLayoutBox();
   if (!layout_object->IsImage() && !IsA<LayoutVideo>(layout_object) &&
       !layout_object->IsCanvas() && !layout_object->IsSVGRoot()) {
@@ -1217,6 +1219,15 @@
 }
 
 LogicalSize NGBlockNode::GetAspectRatio() const {
+  // The CSS parser will ensure that this will only be set if the feature
+  // is enabled.
+  const base::Optional<IntSize>& ratio = Style().AspectRatio();
+  if (ratio.has_value()) {
+    PhysicalSize physical_ratio(LayoutUnit(ratio->Width()),
+                                LayoutUnit(ratio->Height()));
+    return physical_ratio.ConvertToLogical(Style().GetWritingMode());
+  }
+
   base::Optional<LayoutUnit> computed_inline_size;
   base::Optional<LayoutUnit> computed_block_size;
   GetOverrideIntrinsicSize(&computed_inline_size, &computed_block_size);
diff --git a/third_party/blink/renderer/core/layout/scrollbars_test.cc b/third_party/blink/renderer/core/layout/scrollbars_test.cc
index bd666e9..0d242d6 100644
--- a/third_party/blink/renderer/core/layout/scrollbars_test.cc
+++ b/third_party/blink/renderer/core/layout/scrollbars_test.cc
@@ -568,6 +568,45 @@
   EXPECT_TRUE(scrollable_root->HorizontalScrollbar()->FrameRect().IsEmpty());
 }
 
+// Ensure that overlay scrollbars are not created, even in overflow:scroll,
+// situations when there's no overflow. Specifically, after style-only changes.
+TEST_F(ScrollbarsTest, OverlayScrolblarNotCreatedInUnscrollableAxis) {
+  // This test is specifically checking the behavior when overlay scrollbars
+  // are enabled.
+  ENABLE_OVERLAY_SCROLLBARS(true);
+
+  WebView().MainFrameWidget()->Resize(WebSize(800, 600));
+  SimRequest request("https://example.com/test.html", "text/html");
+  LoadURL("https://example.com/test.html");
+  request.Complete(R"HTML(
+    <!DOCTYPE html>
+    <style>
+      #target {
+        width: 100px;
+        height: 100px;
+        overflow-y: scroll;
+        opacity: 0.5;
+      }
+    </style>
+    <div id="target"></div>
+  )HTML");
+
+  Compositor().BeginFrame();
+
+  auto* target = GetDocument().getElementById("target");
+  auto* scrollable_area = target->GetLayoutBox()->GetScrollableArea();
+
+  ASSERT_FALSE(scrollable_area->VerticalScrollbar());
+  ASSERT_FALSE(scrollable_area->HorizontalScrollbar());
+
+  // Mutate the opacity so that we cause a style-only change.
+  target->setAttribute(html_names::kStyleAttr, "opacity: 0.9");
+  Compositor().BeginFrame();
+
+  ASSERT_FALSE(scrollable_area->VerticalScrollbar());
+  ASSERT_FALSE(scrollable_area->HorizontalScrollbar());
+}
+
 TEST_F(ScrollbarsTest, scrollbarIsNotHandlingTouchpadScroll) {
   WebView().MainFrameWidget()->Resize(WebSize(200, 200));
   SimRequest request("https://example.com/test.html", "text/html");
diff --git a/third_party/blink/renderer/core/loader/document_loader.h b/third_party/blink/renderer/core/loader/document_loader.h
index e44fb746..1f77769 100644
--- a/third_party/blink/renderer/core/loader/document_loader.h
+++ b/third_party/blink/renderer/core/loader/document_loader.h
@@ -294,6 +294,9 @@
 
   bool HadTransientActivation() const { return had_transient_activation_; }
 
+  // Whether the navigation originated from the browser process. Note: history
+  // navigation is always considered to be browser initiated, even if the
+  // navigation was started using the history API in the renderer.
   bool IsBrowserInitiated() const { return is_browser_initiated_; }
 
   bool IsSameOriginNavigation() const { return is_same_origin_navigation_; }
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc b/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc
index cb318f34..85046e21 100644
--- a/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc
+++ b/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc
@@ -121,6 +121,7 @@
 
   void RecreateFetchContext(const KURL& url = KURL(),
                             const String& feature_policy_header = String()) {
+    dummy_page_holder = nullptr;
     dummy_page_holder = std::make_unique<DummyPageHolder>(IntSize(500, 500));
     dummy_page_holder->GetPage().SetDeviceScaleFactorDeprecated(1.0);
     if (url.IsValid()) {
diff --git a/third_party/blink/renderer/core/loader/link_loader_test.cc b/third_party/blink/renderer/core/loader/link_loader_test.cc
index f7b1305..fa6fc74 100644
--- a/third_party/blink/renderer/core/loader/link_loader_test.cc
+++ b/third_party/blink/renderer/core/loader/link_loader_test.cc
@@ -21,6 +21,7 @@
 #include "third_party/blink/renderer/core/loader/modulescript/module_script_fetch_request.h"
 #include "third_party/blink/renderer/core/testing/dummy_modulator.h"
 #include "third_party/blink/renderer/core/testing/dummy_page_holder.h"
+#include "third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/loader/fetch/memory_cache.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
@@ -86,7 +87,8 @@
   mutable bool allow_credentials_ = false;
 };
 
-class LinkLoaderPreloadTestBase : public testing::Test {
+class LinkLoaderPreloadTestBase : public testing::Test,
+                                  private ScopedMockOverlayScrollbars {
  public:
   struct Expectations {
     ResourceLoadPriority priority;
@@ -468,7 +470,8 @@
      true, network::mojom::CredentialsMode::kSameOrigin}};
 
 class LinkLoaderModulePreloadTest
-    : public testing::TestWithParam<ModulePreloadTestParams> {};
+    : public testing::TestWithParam<ModulePreloadTestParams>,
+      private ScopedMockOverlayScrollbars {};
 
 class ModulePreloadTestModulator final : public DummyModulator {
  public:
@@ -529,7 +532,8 @@
 
 class LinkLoaderTestPrefetchPrivacyChanges
     : public testing::Test,
-      public testing::WithParamInterface<bool> {
+      public testing::WithParamInterface<bool>,
+      private ScopedMockOverlayScrollbars {
  public:
   LinkLoaderTestPrefetchPrivacyChanges()
       : privacy_changes_enabled_(GetParam()) {}
@@ -593,7 +597,8 @@
   platform_->GetURLLoaderMockFactory()->UnregisterAllURLsAndClearMemoryCache();
 }
 
-class LinkLoaderTest : public testing::Test {
+class LinkLoaderTest : public testing::Test,
+                       private ScopedMockOverlayScrollbars {
  protected:
   ScopedTestingPlatformSupport<TestingPlatformSupport> platform_;
 };
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource_test.cc b/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
index 3ded490..ac88997 100644
--- a/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
+++ b/third_party/blink/renderer/core/loader/resource/image_resource_test.cc
@@ -42,6 +42,7 @@
 #include "third_party/blink/renderer/core/loader/resource/mock_image_resource_observer.h"
 #include "third_party/blink/renderer/core/svg/graphics/svg_image.h"
 #include "third_party/blink/renderer/core/testing/dummy_page_holder.h"
+#include "third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h"
 #include "third_party/blink/renderer/platform/exported/wrapped_resource_response.h"
 #include "third_party/blink/renderer/platform/graphics/bitmap_image.h"
 #include "third_party/blink/renderer/platform/graphics/image.h"
@@ -113,10 +114,13 @@
     sizeof(kJpegImage) - 1;
 constexpr size_t kJpegImageSubrangeWithoutDimensionsLength = 3;
 
+class ImageResourceTest : public testing::Test,
+                          private ScopedMockOverlayScrollbars {};
+
 // Ensure that the image decoder can determine the dimensions of kJpegImage from
 // just the first kJpegImageSubrangeWithDimensionsLength bytes. If this test
 // fails, then the test data here probably needs to be updated.
-TEST(ImageResourceTest, DimensionsDecodableFromPartialTestImage) {
+TEST_F(ImageResourceTest, DimensionsDecodableFromPartialTestImage) {
   scoped_refptr<Image> image = BitmapImage::Create();
   EXPECT_EQ(
       Image::kSizeAvailable,
@@ -211,7 +215,7 @@
       MakeGarbageCollected<TestLoaderFactory>()));
 }
 
-TEST(ImageResourceTest, MultipartImage) {
+TEST_F(ImageResourceTest, MultipartImage) {
   ResourceFetcher* fetcher = CreateFetcher();
   KURL test_url(kTestURL);
   ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
@@ -298,7 +302,7 @@
   EXPECT_TRUE(observer2->ImageNotifyFinishedCalled());
 }
 
-TEST(ImageResourceTest, BitmapMultipartImage) {
+TEST_F(ImageResourceTest, BitmapMultipartImage) {
   ResourceFetcher* fetcher = CreateFetcher();
   KURL test_url(kTestURL);
   ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
@@ -335,7 +339,7 @@
                   .is_multipart());
 }
 
-TEST(ImageResourceTest, CancelOnRemoveObserver) {
+TEST_F(ImageResourceTest, CancelOnRemoveObserver) {
   KURL test_url(kTestURL);
   ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
 
@@ -383,7 +387,7 @@
   MockFinishObserver() = default;
 };
 
-TEST(ImageResourceTest, CancelWithImageAndFinishObserver) {
+TEST_F(ImageResourceTest, CancelWithImageAndFinishObserver) {
   KURL test_url(kTestURL);
   ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
 
@@ -420,7 +424,7 @@
   blink::test::RunPendingTasks();
 }
 
-TEST(ImageResourceTest, DecodedDataRemainsWhileHasClients) {
+TEST_F(ImageResourceTest, DecodedDataRemainsWhileHasClients) {
   ImageResource* image_resource = ImageResource::CreateForTest(NullURL());
   image_resource->NotifyStartLoad();
 
@@ -462,7 +466,7 @@
   // data.
 }
 
-TEST(ImageResourceTest, UpdateBitmapImages) {
+TEST_F(ImageResourceTest, UpdateBitmapImages) {
   ImageResource* image_resource = ImageResource::CreateForTest(NullURL());
   image_resource->NotifyStartLoad();
 
@@ -486,7 +490,7 @@
   EXPECT_TRUE(IsA<BitmapImage>(image_resource->GetContent()->GetImage()));
 }
 
-TEST(ImageResourceTest, SVGImage) {
+TEST_F(ImageResourceTest, SVGImage) {
   KURL url("http://127.0.0.1:8000/foo");
   ImageResource* image_resource = ImageResource::CreateForTest(url);
   auto observer =
@@ -503,7 +507,7 @@
   EXPECT_FALSE(IsA<BitmapImage>(image_resource->GetContent()->GetImage()));
 }
 
-TEST(ImageResourceTest, SVGImageWithSubresource) {
+TEST_F(ImageResourceTest, SVGImageWithSubresource) {
   KURL url("http://127.0.0.1:8000/foo");
   ImageResource* image_resource = ImageResource::CreateForTest(url);
   auto observer =
@@ -548,7 +552,7 @@
   GetMemoryCache()->EvictResources();
 }
 
-TEST(ImageResourceTest, SuccessfulRevalidationJpeg) {
+TEST_F(ImageResourceTest, SuccessfulRevalidationJpeg) {
   KURL url("http://127.0.0.1:8000/foo");
   ImageResource* image_resource = ImageResource::CreateForTest(url);
   auto observer =
@@ -585,7 +589,7 @@
             image_resource->GetContent()->GetImage()->height());
 }
 
-TEST(ImageResourceTest, SuccessfulRevalidationSvg) {
+TEST_F(ImageResourceTest, SuccessfulRevalidationSvg) {
   KURL url("http://127.0.0.1:8000/foo");
   ImageResource* image_resource = ImageResource::CreateForTest(url);
   auto observer =
@@ -618,7 +622,7 @@
   EXPECT_EQ(200, image_resource->GetContent()->GetImage()->height());
 }
 
-TEST(ImageResourceTest, FailedRevalidationJpegToJpeg) {
+TEST_F(ImageResourceTest, FailedRevalidationJpegToJpeg) {
   KURL url("http://127.0.0.1:8000/foo");
   ImageResource* image_resource = ImageResource::CreateForTest(url);
   auto observer =
@@ -653,7 +657,7 @@
   EXPECT_EQ(50, image_resource->GetContent()->GetImage()->height());
 }
 
-TEST(ImageResourceTest, FailedRevalidationJpegToSvg) {
+TEST_F(ImageResourceTest, FailedRevalidationJpegToSvg) {
   KURL url("http://127.0.0.1:8000/foo");
   ImageResource* image_resource = ImageResource::CreateForTest(url);
   auto observer =
@@ -687,7 +691,7 @@
   EXPECT_EQ(200, image_resource->GetContent()->GetImage()->height());
 }
 
-TEST(ImageResourceTest, FailedRevalidationSvgToJpeg) {
+TEST_F(ImageResourceTest, FailedRevalidationSvgToJpeg) {
   KURL url("http://127.0.0.1:8000/foo");
   ImageResource* image_resource = ImageResource::CreateForTest(url);
   auto observer =
@@ -721,7 +725,7 @@
             image_resource->GetContent()->GetImage()->height());
 }
 
-TEST(ImageResourceTest, FailedRevalidationSvgToSvg) {
+TEST_F(ImageResourceTest, FailedRevalidationSvgToSvg) {
   KURL url("http://127.0.0.1:8000/foo");
   ImageResource* image_resource = ImageResource::CreateForTest(url);
   auto observer =
@@ -755,7 +759,7 @@
 
 // Tests for pruning.
 
-TEST(ImageResourceTest, Prune) {
+TEST_F(ImageResourceTest, Prune) {
   KURL url("http://127.0.0.1:8000/foo");
   ImageResource* image_resource = ImageResource::CreateForTest(url);
 
@@ -784,7 +788,7 @@
             image_resource->GetContent()->GetImage()->height());
 }
 
-TEST(ImageResourceTest, CancelOnDecodeError) {
+TEST_F(ImageResourceTest, CancelOnDecodeError) {
   KURL test_url(kTestURL);
   ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
 
@@ -812,7 +816,7 @@
   EXPECT_FALSE(image_resource->IsLoading());
 }
 
-TEST(ImageResourceTest, DecodeErrorWithEmptyBody) {
+TEST_F(ImageResourceTest, DecodeErrorWithEmptyBody) {
   KURL test_url(kTestURL);
   ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
 
@@ -843,7 +847,7 @@
 
 // Testing DecodeError that occurs in didFinishLoading().
 // This is similar to DecodeErrorWithEmptyBody, but with non-empty body.
-TEST(ImageResourceTest, PartialContentWithoutDimensions) {
+TEST_F(ImageResourceTest, PartialContentWithoutDimensions) {
   KURL test_url(kTestURL);
   ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
 
@@ -888,7 +892,7 @@
   EXPECT_FALSE(image_resource->IsLoading());
 }
 
-TEST(ImageResourceTest, PeriodicFlushTest) {
+TEST_F(ImageResourceTest, PeriodicFlushTest) {
   ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler>
       platform;
 
@@ -999,7 +1003,7 @@
   EXPECT_EQ(50, image_resource->GetContent()->GetImage()->height());
 }
 
-TEST(ImageResourceTest, DeferredInvalidation) {
+TEST_F(ImageResourceTest, DeferredInvalidation) {
   ImageResource* image_resource = ImageResource::CreateForTest(NullURL());
   std::unique_ptr<MockImageResourceObserver> obs =
       std::make_unique<MockImageResourceObserver>(image_resource->GetContent());
@@ -1048,7 +1052,7 @@
     0xC8, 0x70, 0x88, 0x0B, 0x6C, 0x54, 0x7A, 0xFB, 0xCA, 0x1D, 0x89, 0x90,
     0xDD, 0x27, 0xEA, 0x7F, 0x28, 0x00, 0x00, 0x00};
 
-TEST(ImageResourceTest, WebPSniffing) {
+TEST_F(ImageResourceTest, WebPSniffing) {
   KURL test_url(kTestURL);
 
   // Test lossy WebP image.
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc
index 2e281e3..50e76a0 100644
--- a/third_party/blink/renderer/core/page/page.cc
+++ b/third_party/blink/renderer/core/page/page.cc
@@ -219,8 +219,7 @@
   // Android, unit tests run without a ThemeEngine and thus must set a mock
   // ScrollbarTheme, if they don't this call will crash. To set a mock theme,
   // see ScopedMockOverlayScrollbars or WebScopedMockScrollbars.
-  // TODO(bokan): Reenable once all tests are fixed. crbug.com/1068595
-  // DCHECK(&GetScrollbarTheme());
+  DCHECK(&GetScrollbarTheme());
 }
 
 Page::~Page() {
diff --git a/third_party/blink/renderer/core/page/scrolling/scroll_state.idl b/third_party/blink/renderer/core/page/scrolling/scroll_state.idl
index 515a5d6..8355852 100644
--- a/third_party/blink/renderer/core/page/scrolling/scroll_state.idl
+++ b/third_party/blink/renderer/core/page/scrolling/scroll_state.idl
@@ -5,7 +5,8 @@
 // https://docs.google.com/document/d/1VnvAqeWFG9JFZfgG5evBqrLGDZYRE5w6G5jEDORekPY
 
 [
-  RuntimeEnabled = ScrollCustomization
+    Exposed=Window,
+    RuntimeEnabled=ScrollCustomization
 ] interface ScrollState
 {
     constructor(optional ScrollStateInit scrollStateInit = {});
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor.cc
index ebdb5b14..cc7cde8 100644
--- a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor.cc
+++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor.cc
@@ -61,12 +61,25 @@
 bool CheckSecurityRestrictions(LocalFrame& frame,
                                bool same_document_navigation) {
   // This algorithm checks the security restrictions detailed in
-  // https://wicg.github.io/ScrollToTextFragment/#should-allow-text-fragment
+  // https://wicg.github.io/ScrollToTextFragment/#should-allow-a-text-fragment
+  // TODO(bokan): These are really only relevant for observable actions like
+  // scrolling. We should consider allowing highlighting regardless of these
+  // conditions. See the TODO in the relevant spec section:
+  // https://wicg.github.io/ScrollToTextFragment/#restricting-the-text-fragment
 
-  // We only allow text fragment anchors for user or browser initiated
-  // navigations, i.e. no script navigations.
-  if (!(frame.Loader().GetDocumentLoader()->HadTransientActivation() ||
-        frame.Loader().GetDocumentLoader()->IsBrowserInitiated())) {
+  // History navigation is special because it's considered to be browser
+  // initiated even if the navigation originated via use of the history API
+  // within the renderer. We avoid creating a text fragment for history
+  // navigations since history scroll restoration should take precedence but
+  // it'd be bad if we ever got here for a history navigation since the check
+  // below would pass even if the user took no action.
+  SECURITY_CHECK(frame.Loader().GetDocumentLoader()->GetNavigationType() !=
+                 kWebNavigationTypeBackForward);
+
+  // We only allow text fragment anchors for user navigations, e.g. link
+  // clicks, omnibox navigations, no script navigations.
+  if (!frame.Loader().GetDocumentLoader()->HadTransientActivation() &&
+      !frame.Loader().GetDocumentLoader()->IsBrowserInitiated()) {
     return false;
   }
 
@@ -104,6 +117,17 @@
   if (!frame.GetDocument()->GetFragmentDirective())
     return nullptr;
 
+  // Avoid invoking the text fragment for history or reload navigations as
+  // they'll be clobbered by scroll restoration; this prevents a transient
+  // scroll as well as user gesture issues; see https://crbug.com/1042986 for
+  // details.
+  auto navigation_type =
+      frame.Loader().GetDocumentLoader()->GetNavigationType();
+  if (navigation_type == kWebNavigationTypeBackForward ||
+      navigation_type == kWebNavigationTypeReload) {
+    return nullptr;
+  }
+
   if (!CheckSecurityRestrictions(frame, same_document_navigation))
     return nullptr;
 
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_test.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_test.cc
index c8c87c9..258b9ac 100644
--- a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_test.cc
+++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_test.cc
@@ -1611,7 +1611,11 @@
 }
 
 // Ensure we restore the text highlight on page reload
-TEST_F(TextFragmentAnchorTest, HighlightOnReload) {
+// TODO(bokan): This test is disabled as this functionality was suppressed in
+// https://crrev.com/c/2135407; it would be better addressed by providing a
+// highlight-only function. See the TODO in
+// https://wicg.github.io/ScrollToTextFragment/#restricting-the-text-fragment
+TEST_F(TextFragmentAnchorTest, DISABLED_HighlightOnReload) {
   SimRequest request("https://example.com/test.html#:~:text=test", "text/html");
   LoadURL("https://example.com/test.html#:~:text=test");
   const String& html = R"HTML(
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping_test.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping_test.cc
index da509ea..b43664b 100644
--- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping_test.cc
+++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping_test.cc
@@ -1776,7 +1776,7 @@
   EXPECT_FALSE(mapping->NeedsRepaint(*vertical_scrollbar_layer));
 
   GetDocument().getElementById("child")->setAttribute(html_names::kStyleAttr,
-                                                      "height: 300px");
+                                                      "height: 50px");
   GetDocument().View()->UpdateAllLifecyclePhasesExceptPaint(
       DocumentUpdateReason::kTest);
   EXPECT_TRUE(mapping->NeedsRepaint(*vertical_scrollbar_layer));
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
index 085c30d..cf5fbf29 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -1437,22 +1437,6 @@
   text_painter.Paint(paint_info, paint_offset);
 }
 
-NGBoxFragmentPainter::MoveTo NGBoxFragmentPainter::PaintLineBoxItem(
-    const NGFragmentItem& item,
-    const PaintInfo& paint_info,
-    const PhysicalOffset& paint_offset) {
-  DCHECK_EQ(item.Type(), NGFragmentItem::kLine);
-  DCHECK(items_);
-  // TODO(kojii): Check CullRect.
-  const PhysicalOffset line_box__offset =
-      paint_offset + item.OffsetInContainerBlock();
-  const NGPhysicalLineBoxFragment* line_box_fragment = item.LineBoxFragment();
-  DCHECK(line_box_fragment);
-  PaintLineBox(*line_box_fragment, item, /* line_box_paint_fragment */ nullptr,
-               &item, paint_info, line_box__offset);
-  return kDontSkipChildren;
-}
-
 // Paint non-culled box item.
 void NGBoxFragmentPainter::PaintBoxItem(
     const NGFragmentItem& item,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h
index ccb1943..7081b0d2 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h
+++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h
@@ -154,9 +154,6 @@
                      const PaintInfo&,
                      const PhysicalOffset& paint_offset,
                      const PhysicalOffset& parent_offset);
-  MoveTo PaintLineBoxItem(const NGFragmentItem& item,
-                          const PaintInfo& paint_info,
-                          const PhysicalOffset& paint_offset);
   void PaintBoxItem(const NGFragmentItem& item,
                     const NGPhysicalBoxFragment& child_fragment,
                     const NGInlineCursor& cursor,
diff --git a/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc b/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc
index bf27da1..a845275 100644
--- a/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc
+++ b/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc
@@ -56,7 +56,9 @@
     style='position: relative'></div>
         <div
     id='non-stacked-layered-child-of-composited-non-stacking-context'
-    style='overflow: scroll'></div>
+    style='overflow: scroll'>
+          <div style="height:40px"></div>
+        </div>
       </div>
     </div>
   )HTML");
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
index 3fcd6749..e585179 100644
--- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
+++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
@@ -1128,13 +1128,6 @@
     UpdateScrollbarProportions();
   }
 
-  if (!scrollbars_are_frozen && HasOverlayScrollbars()) {
-    if (!ScrollSize(kHorizontalScrollbar))
-      SetHasHorizontalScrollbar(false);
-    if (!ScrollSize(kVerticalScrollbar))
-      SetHasVerticalScrollbar(false);
-  }
-
   ClampScrollOffsetAfterOverflowChange();
 
   if (!scrollbars_are_frozen) {
@@ -1303,9 +1296,8 @@
 
   bool needs_horizontal_scrollbar;
   bool needs_vertical_scrollbar;
-  // We add auto scrollbars only during layout to prevent spurious activations.
   ComputeScrollbarExistence(needs_horizontal_scrollbar,
-                            needs_vertical_scrollbar, kForbidAddingAutoBars);
+                            needs_vertical_scrollbar, kOverflowIndependent);
 
   UpdateResizerStyle(old_style);
 
@@ -1557,45 +1549,89 @@
     return;
   }
 
-  needs_horizontal_scrollbar = GetLayoutBox()->ScrollsOverflowX();
-  needs_vertical_scrollbar = GetLayoutBox()->ScrollsOverflowY();
+  mojom::blink::ScrollbarMode h_mode = mojom::blink::ScrollbarMode::kAuto;
+  mojom::blink::ScrollbarMode v_mode = mojom::blink::ScrollbarMode::kAuto;
 
-  // Don't add auto scrollbars if the box contents aren't visible.
-  if (GetLayoutBox()->HasAutoHorizontalScrollbar()) {
-    if (option == kForbidAddingAutoBars)
-      needs_horizontal_scrollbar &= HasHorizontalScrollbar();
-    needs_horizontal_scrollbar &=
-        GetLayoutBox()->IsRooted() && HasHorizontalOverflow() &&
-        VisibleContentRect(kIncludeScrollbars).Height();
+  // First, determine what behavior the scrollbars say they should have.
+  {
+    if (auto* layout_view = DynamicTo<LayoutView>(GetLayoutBox())) {
+      // LayoutView is special as there's various quirks and settings that
+      // style doesn't account for.
+      layout_view->CalculateScrollbarModes(h_mode, v_mode);
+    } else {
+      auto overflow_x = GetLayoutBox()->StyleRef().OverflowX();
+      if (overflow_x == EOverflow::kScroll) {
+        h_mode = mojom::blink::ScrollbarMode::kAlwaysOn;
+      } else if (overflow_x == EOverflow::kHidden ||
+                 overflow_x == EOverflow::kVisible) {
+        h_mode = mojom::blink::ScrollbarMode::kAlwaysOff;
+      }
+
+      auto overflow_y = GetLayoutBox()->StyleRef().OverflowY();
+      if (overflow_y == EOverflow::kScroll) {
+        v_mode = mojom::blink::ScrollbarMode::kAlwaysOn;
+      } else if (overflow_y == EOverflow::kHidden ||
+                 overflow_y == EOverflow::kVisible) {
+        v_mode = mojom::blink::ScrollbarMode::kAlwaysOff;
+      }
+    }
+
+    // Since overlay scrollbars (the fade-in/out kind, not overflow: overlay)
+    // only appear when scrolling, we don't create them if there isn't overflow
+    // to scroll. Thus, overlay scrollbars can't be "always on". i.e.
+    // |overlay:scroll| behaves like |overlay:auto|.
+    bool has_custom_scrollbar_style =
+        ScrollbarStyleSource(*GetLayoutBox())
+            .StyleRef()
+            .HasPseudoElementStyle(kPseudoIdScrollbar);
+    bool will_be_overlay = GetPageScrollbarTheme().UsesOverlayScrollbars() &&
+                           !has_custom_scrollbar_style;
+    if (will_be_overlay) {
+      if (h_mode == mojom::blink::ScrollbarMode::kAlwaysOn)
+        h_mode = mojom::blink::ScrollbarMode::kAuto;
+      if (v_mode == mojom::blink::ScrollbarMode::kAlwaysOn)
+        v_mode = mojom::blink::ScrollbarMode::kAuto;
+    }
   }
 
-  if (GetLayoutBox()->HasAutoVerticalScrollbar()) {
-    if (option == kForbidAddingAutoBars)
-      needs_vertical_scrollbar &= HasVerticalScrollbar();
-    needs_vertical_scrollbar &= GetLayoutBox()->IsRooted() &&
-                                HasVerticalOverflow() &&
-                                VisibleContentRect(kIncludeScrollbars).Width();
-  }
+  // By default, don't make any changes.
+  needs_horizontal_scrollbar = HasHorizontalScrollbar();
+  needs_vertical_scrollbar = HasVerticalScrollbar();
 
-  if (auto* layout_view = DynamicTo<LayoutView>(GetLayoutBox())) {
-    mojom::blink::ScrollbarMode h_mode;
-    mojom::blink::ScrollbarMode v_mode;
-    layout_view->CalculateScrollbarModes(h_mode, v_mode);
-
-    // Look for the scrollbarModes and reset the needs Horizontal & vertical
-    // Scrollbar values based on scrollbarModes, as during force style change
-    // StyleResolver::styleForDocument returns documentStyle with no overflow
-    // values, due to which we are destroying the scrollbars that were already
-    // present.
+  // If the behavior doesn't depend on overflow or any other information, we
+  // can set it now.
+  {
     if (h_mode == mojom::blink::ScrollbarMode::kAlwaysOn)
       needs_horizontal_scrollbar = true;
     else if (h_mode == mojom::blink::ScrollbarMode::kAlwaysOff)
       needs_horizontal_scrollbar = false;
+
     if (v_mode == mojom::blink::ScrollbarMode::kAlwaysOn)
       needs_vertical_scrollbar = true;
     else if (v_mode == mojom::blink::ScrollbarMode::kAlwaysOff)
       needs_vertical_scrollbar = false;
   }
+
+  // If this is being performed before layout, we want to only update scrollbar
+  // existence if its based on purely style based reasons.
+  if (option == kOverflowIndependent)
+    return;
+
+  // If we have clean layout, we can make a decision on any scrollbars that
+  // depend on overflow.
+  {
+    if (h_mode == mojom::blink::ScrollbarMode::kAuto) {
+      // Don't add auto scrollbars if the box contents aren't visible.
+      needs_horizontal_scrollbar =
+          GetLayoutBox()->IsRooted() && HasHorizontalOverflow() &&
+          VisibleContentRect(kIncludeScrollbars).Height();
+    }
+    if (v_mode == mojom::blink::ScrollbarMode::kAuto) {
+      needs_vertical_scrollbar = GetLayoutBox()->IsRooted() &&
+                                 HasVerticalOverflow() &&
+                                 VisibleContentRect(kIncludeScrollbars).Width();
+    }
+  }
 }
 
 bool PaintLayerScrollableArea::TryRemovingAutoScrollbars(
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h
index 4e319bf..afe17a03 100644
--- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h
+++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h
@@ -621,11 +621,21 @@
   int HorizontalScrollbarStart() const;
   IntSize ScrollbarOffset(const Scrollbar&) const;
 
-  enum ComputeScrollbarExistenceOption { kDefault, kForbidAddingAutoBars };
+  // If OverflowIndependent is specified, will only change current scrollbar
+  // existence if the new style doesn't depend on overflow which requires
+  // layout to be clean. It'd be nice if we could always determine existence at
+  // one point, after layout. Unfortunately, it seems that parts of layout are
+  // dependent on scrollbar existence in cases like |overflow:scroll|, removing
+  // the post style pass causes breaks in tests e.g. forms web_tests. Thus, we
+  // must do two scrollbar existence passes.
+  enum ComputeScrollbarExistenceOption {
+    kDependsOnOverflow,
+    kOverflowIndependent
+  };
   void ComputeScrollbarExistence(
       bool& needs_horizontal_scrollbar,
       bool& needs_vertical_scrollbar,
-      ComputeScrollbarExistenceOption = kDefault) const;
+      ComputeScrollbarExistenceOption = kDependsOnOverflow) const;
 
   // If the content fits entirely in the area without auto scrollbars, returns
   // true to try to remove them. This is a heuristic and can be incorrect if the
diff --git a/third_party/blink/renderer/core/resize_observer/resize_observer_size.idl b/third_party/blink/renderer/core/resize_observer/resize_observer_size.idl
index a9d93b39..d043025 100644
--- a/third_party/blink/renderer/core/resize_observer/resize_observer_size.idl
+++ b/third_party/blink/renderer/core/resize_observer/resize_observer_size.idl
@@ -5,7 +5,8 @@
 // https://drafts.csswg.org/resize-observer-1/#resizeobserversize
 
 [
-  RuntimeEnabled=ResizeObserverUpdates
+    Exposed=Window,
+    RuntimeEnabled=ResizeObserverUpdates
 ] interface ResizeObserverSize {
     readonly attribute unrestricted double inlineSize;
     readonly attribute unrestricted double blockSize;
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h
index 15ccd65..d14d1120 100644
--- a/third_party/blink/renderer/core/style/computed_style.h
+++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -1476,6 +1476,10 @@
     return WillChangeProperties().Contains(CSSPropertyID::kOpacity);
   }
   bool HasWillChangeTransformHint() const;
+  bool HasWillChangeFilterHint() const {
+    return WillChangeProperties().Contains(CSSPropertyID::kFilter) ||
+           WillChangeProperties().Contains(CSSPropertyID::kAliasWebkitFilter);
+  }
 
   // Hyphen utility functions.
   Hyphenation* GetHyphenation() const;
@@ -2335,7 +2339,13 @@
   // Returns |true| if any property that renders using filter operations is
   // used (including, but not limited to, 'filter' and 'box-reflect').
   bool HasFilterInducingProperty() const {
-    return HasFilter() || HasBoxReflect();
+    return HasNonInitialFilter() || HasBoxReflect();
+  }
+
+  // Returns |true| if filter should be considered to have non-initial value
+  // for the purposes of containing blocks.
+  bool HasNonInitialFilter() const {
+    return HasFilter() || HasWillChangeFilterHint();
   }
 
   // Returns |true| if opacity should be considered to have non-initial value
@@ -2414,6 +2424,8 @@
   bool CanContainAbsolutePositionObjects() const {
     return GetPosition() != EPosition::kStatic;
   }
+  // TODO(pdr): Should this function be unified with
+  // LayoutObject::ComputeIsFixedContainer?
   bool CanContainFixedPositionObjects(bool is_document_element) const {
     return HasTransformRelatedProperty() ||
            // Filter establishes containing block for non-document elements:
@@ -2421,7 +2433,8 @@
            // Backdrop-filter creates a containing block for fixed and absolute
            // positioned elements:
            // https://drafts.fxtf.org/filter-effects-2/#backdrop-filter-operation
-           (!is_document_element && (HasFilter() || HasBackdropFilter()));
+           (!is_document_element &&
+            (HasNonInitialFilter() || HasBackdropFilter()));
   }
 
   // Whitespace utility functions.
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc b/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc
index 41badf4..5994410 100644
--- a/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc
+++ b/third_party/blink/renderer/core/svg/graphics/svg_image_test.cc
@@ -38,7 +38,7 @@
 
 }  // namespace
 
-class SVGImageTest : public testing::Test {
+class SVGImageTest : public testing::Test, private ScopedMockOverlayScrollbars {
  public:
   SVGImage& GetImage() { return *image_; }
 
@@ -330,7 +330,7 @@
   EXPECT_NEAR(0.11f, features.background_ratio, kEpsilon);
 }
 
-class SVGImageSimTest : public SimTest {};
+class SVGImageSimTest : public SimTest, private ScopedMockOverlayScrollbars {};
 
 TEST_F(SVGImageSimTest, PageVisibilityHiddenToVisible) {
   SimRequest main_resource("https://example.com/", "text/html");
diff --git a/third_party/blink/renderer/core/svg/svg_animate_element.idl b/third_party/blink/renderer/core/svg/svg_animate_element.idl
index 15792170..790eb1d 100644
--- a/third_party/blink/renderer/core/svg/svg_animate_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_animate_element.idl
@@ -25,5 +25,7 @@
 
 // https://svgwg.org/specs/animations/#InterfaceSVGAnimateElement
 
-interface SVGAnimateElement : SVGAnimationElement {
+[
+    Exposed=Window
+] interface SVGAnimateElement : SVGAnimationElement {
 };
diff --git a/third_party/blink/renderer/core/svg/svg_animate_motion_element.idl b/third_party/blink/renderer/core/svg/svg_animate_motion_element.idl
index 1b5b3ca..522b46b 100644
--- a/third_party/blink/renderer/core/svg/svg_animate_motion_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_animate_motion_element.idl
@@ -25,5 +25,7 @@
 
 // https://svgwg.org/specs/animations/#InterfaceSVGAnimateMotionElement
 
-interface SVGAnimateMotionElement : SVGAnimationElement {
+[
+    Exposed=Window
+] interface SVGAnimateMotionElement : SVGAnimationElement {
 };
diff --git a/third_party/blink/renderer/core/svg/svg_animate_transform_element.idl b/third_party/blink/renderer/core/svg/svg_animate_transform_element.idl
index fe64235a..ac30765 100644
--- a/third_party/blink/renderer/core/svg/svg_animate_transform_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_animate_transform_element.idl
@@ -25,5 +25,7 @@
 
 // https://svgwg.org/specs/animations/#InterfaceSVGAnimateTransformElement
 
-interface SVGAnimateTransformElement : SVGAnimationElement {
+[
+    Exposed=Window
+] interface SVGAnimateTransformElement : SVGAnimationElement {
 };
diff --git a/third_party/blink/renderer/core/svg/svg_animation_element.idl b/third_party/blink/renderer/core/svg/svg_animation_element.idl
index 23be2805..3577642 100644
--- a/third_party/blink/renderer/core/svg/svg_animation_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_animation_element.idl
@@ -26,7 +26,9 @@
 
 // https://svgwg.org/specs/animations/#InterfaceSVGAnimationElement
 
-interface SVGAnimationElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGAnimationElement : SVGElement {
     readonly attribute SVGElement targetElement;
 
     attribute EventHandler onbegin;
diff --git a/third_party/blink/renderer/core/svg/svg_clip_path_element.idl b/third_party/blink/renderer/core/svg/svg_clip_path_element.idl
index 31835da..d477641d 100644
--- a/third_party/blink/renderer/core/svg/svg_clip_path_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_clip_path_element.idl
@@ -29,6 +29,8 @@
 // TODO(foolip): SVGClipPathElement should inherit from SVGElement and
 // implement SVGUnitTypes. The transform attribute (which is on
 // SVGGraphicsElement) should also be on SVGClipPathElement.
-interface SVGClipPathElement : SVGGraphicsElement {
+[
+    Exposed=Window
+] interface SVGClipPathElement : SVGGraphicsElement {
     [Measure] readonly attribute SVGAnimatedEnumeration clipPathUnits;
 };
diff --git a/third_party/blink/renderer/core/svg/svg_component_transfer_function_element.idl b/third_party/blink/renderer/core/svg/svg_component_transfer_function_element.idl
index 4a12442..72b44446 100644
--- a/third_party/blink/renderer/core/svg/svg_component_transfer_function_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_component_transfer_function_element.idl
@@ -26,7 +26,8 @@
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGComponentTransferFunctionElement
 
 [
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    Exposed=Window
 ] interface SVGComponentTransferFunctionElement : SVGElement {
     // Component Transfer Types
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN  = 0;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_blend_element.idl b/third_party/blink/renderer/core/svg/svg_fe_blend_element.idl
index a59c570..e2494e64 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_blend_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_blend_element.idl
@@ -26,7 +26,8 @@
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEBlendElement
 
 [
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    Exposed=Window
 ] interface SVGFEBlendElement : SVGElement {
 
     // Blend Mode Types
diff --git a/third_party/blink/renderer/core/svg/svg_fe_color_matrix_element.idl b/third_party/blink/renderer/core/svg/svg_fe_color_matrix_element.idl
index 48a98cd..57691cb3d6 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_color_matrix_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_color_matrix_element.idl
@@ -26,7 +26,8 @@
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEColorMatrixElement
 
 [
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    Exposed=Window
 ] interface SVGFEColorMatrixElement : SVGElement {
     // Color Matrix Types
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_component_transfer_element.idl b/third_party/blink/renderer/core/svg/svg_fe_component_transfer_element.idl
index dcb417db5..52a4341 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_component_transfer_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_component_transfer_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEComponentTransferElement
 
-interface SVGFEComponentTransferElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEComponentTransferElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
 };
 
diff --git a/third_party/blink/renderer/core/svg/svg_fe_composite_element.idl b/third_party/blink/renderer/core/svg/svg_fe_composite_element.idl
index 4723b018..9d0591f 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_composite_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_composite_element.idl
@@ -26,7 +26,8 @@
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFECompositeElement
 
 [
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    Exposed=Window
 ] interface SVGFECompositeElement : SVGElement {
     // Composite Operators
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_convolve_matrix_element.idl b/third_party/blink/renderer/core/svg/svg_fe_convolve_matrix_element.idl
index d1b8c08..132be88 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_convolve_matrix_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_convolve_matrix_element.idl
@@ -26,7 +26,8 @@
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEConvolveMatrixElement
 
 [
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    Exposed=Window
 ] interface SVGFEConvolveMatrixElement : SVGElement {
     // Edge Mode Values
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_diffuse_lighting_element.idl b/third_party/blink/renderer/core/svg/svg_fe_diffuse_lighting_element.idl
index b03edec..593d161 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_diffuse_lighting_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_diffuse_lighting_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEDiffuseLightingElement
 
-interface SVGFEDiffuseLightingElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEDiffuseLightingElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber surfaceScale;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber diffuseConstant;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_displacement_map_element.idl b/third_party/blink/renderer/core/svg/svg_fe_displacement_map_element.idl
index c2879c4c..d1c6431 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_displacement_map_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_displacement_map_element.idl
@@ -26,7 +26,8 @@
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEDisplacementMapElement
 
 [
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    Exposed=Window
 ] interface SVGFEDisplacementMapElement : SVGElement {
     // Channel Selectors
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_CHANNEL_UNKNOWN = 0;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_distant_light_element.idl b/third_party/blink/renderer/core/svg/svg_fe_distant_light_element.idl
index 4c2cd05..0efa530 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_distant_light_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_distant_light_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEDistantLightElement
 
-interface SVGFEDistantLightElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEDistantLightElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber azimuth;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber elevation;
 };
diff --git a/third_party/blink/renderer/core/svg/svg_fe_drop_shadow_element.idl b/third_party/blink/renderer/core/svg/svg_fe_drop_shadow_element.idl
index d07d5b45..7766e41 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_drop_shadow_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_drop_shadow_element.idl
@@ -19,7 +19,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEDropShadowElement
 
-interface SVGFEDropShadowElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEDropShadowElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber dx;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber dy;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_flood_element.idl b/third_party/blink/renderer/core/svg/svg_fe_flood_element.idl
index 973cc2e..e0b322e 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_flood_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_flood_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEFloodElement
 
-interface SVGFEFloodElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEFloodElement : SVGElement {
 };
 
 SVGFEFloodElement includes SVGFilterPrimitiveStandardAttributes;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_func_a_element.idl b/third_party/blink/renderer/core/svg/svg_fe_func_a_element.idl
index 1fab529..4e5bed15 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_func_a_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_func_a_element.idl
@@ -25,5 +25,7 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEFuncAElement
 
-interface SVGFEFuncAElement : SVGComponentTransferFunctionElement {
+[
+    Exposed=Window
+] interface SVGFEFuncAElement : SVGComponentTransferFunctionElement {
 };
diff --git a/third_party/blink/renderer/core/svg/svg_fe_func_b_element.idl b/third_party/blink/renderer/core/svg/svg_fe_func_b_element.idl
index 094d6b9..62a8f86c 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_func_b_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_func_b_element.idl
@@ -25,5 +25,7 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEFuncBElement
 
-interface SVGFEFuncBElement : SVGComponentTransferFunctionElement {
+[
+    Exposed=Window
+] interface SVGFEFuncBElement : SVGComponentTransferFunctionElement {
 };
diff --git a/third_party/blink/renderer/core/svg/svg_fe_func_g_element.idl b/third_party/blink/renderer/core/svg/svg_fe_func_g_element.idl
index f6917930c..4c55b1c 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_func_g_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_func_g_element.idl
@@ -25,5 +25,7 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEFuncGElement
 
-interface SVGFEFuncGElement : SVGComponentTransferFunctionElement {
+[
+    Exposed=Window
+] interface SVGFEFuncGElement : SVGComponentTransferFunctionElement {
 };
diff --git a/third_party/blink/renderer/core/svg/svg_fe_func_r_element.idl b/third_party/blink/renderer/core/svg/svg_fe_func_r_element.idl
index 4f94370..98e41f3 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_func_r_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_func_r_element.idl
@@ -25,5 +25,7 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEFuncRElement
 
-interface SVGFEFuncRElement : SVGComponentTransferFunctionElement {
+[
+    Exposed=Window
+] interface SVGFEFuncRElement : SVGComponentTransferFunctionElement {
 };
diff --git a/third_party/blink/renderer/core/svg/svg_fe_gaussian_blur_element.idl b/third_party/blink/renderer/core/svg/svg_fe_gaussian_blur_element.idl
index a0fc0861..31392491 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_gaussian_blur_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_gaussian_blur_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEGaussianBlurElement
 
-interface SVGFEGaussianBlurElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEGaussianBlurElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber stdDeviationX;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber stdDeviationY;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_image_element.idl b/third_party/blink/renderer/core/svg/svg_fe_image_element.idl
index b9c4661..69340c2 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_image_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_image_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEImageElement
 
-interface SVGFEImageElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEImageElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
 };
 
diff --git a/third_party/blink/renderer/core/svg/svg_fe_merge_element.idl b/third_party/blink/renderer/core/svg/svg_fe_merge_element.idl
index d53acda..ef23402 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_merge_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_merge_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEMergeElement
 
-interface SVGFEMergeElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEMergeElement : SVGElement {
 };
 
 SVGFEMergeElement includes SVGFilterPrimitiveStandardAttributes;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_merge_node_element.idl b/third_party/blink/renderer/core/svg/svg_fe_merge_node_element.idl
index cbe5070..5cdde1ff 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_merge_node_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_merge_node_element.idl
@@ -25,6 +25,8 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEMergeNodeElement
 
-interface SVGFEMergeNodeElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEMergeNodeElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
 };
diff --git a/third_party/blink/renderer/core/svg/svg_fe_morphology_element.idl b/third_party/blink/renderer/core/svg/svg_fe_morphology_element.idl
index 9187763..bccff872 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_morphology_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_morphology_element.idl
@@ -26,7 +26,8 @@
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEMorphologyElement
 
 [
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    Exposed=Window
 ] interface SVGFEMorphologyElement : SVGElement {
     // Morphology Operators
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_offset_element.idl b/third_party/blink/renderer/core/svg/svg_fe_offset_element.idl
index 5278f274..187b340 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_offset_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_offset_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEOffsetElement
 
-interface SVGFEOffsetElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEOffsetElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber dx;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber dy;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_point_light_element.idl b/third_party/blink/renderer/core/svg/svg_fe_point_light_element.idl
index 4786632b..9ce287b 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_point_light_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_point_light_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFEPointLightElement
 
-interface SVGFEPointLightElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFEPointLightElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber x;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber y;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber z;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_specular_lighting_element.idl b/third_party/blink/renderer/core/svg/svg_fe_specular_lighting_element.idl
index 56470b1e..9a90e14b 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_specular_lighting_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_specular_lighting_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFESpecularLightingElement
 
-interface SVGFESpecularLightingElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFESpecularLightingElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber surfaceScale;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber specularConstant;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_spot_light_element.idl b/third_party/blink/renderer/core/svg/svg_fe_spot_light_element.idl
index a6f634ec..bd4ee0c 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_spot_light_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_spot_light_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFESpotLightElement
 
-interface SVGFESpotLightElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFESpotLightElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber x;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber y;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber z;
diff --git a/third_party/blink/renderer/core/svg/svg_fe_tile_element.idl b/third_party/blink/renderer/core/svg/svg_fe_tile_element.idl
index 39cd920..ff6e867 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_tile_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_tile_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFETileElement
 
-interface SVGFETileElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFETileElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
 };
 
diff --git a/third_party/blink/renderer/core/svg/svg_fe_turbulence_element.idl b/third_party/blink/renderer/core/svg/svg_fe_turbulence_element.idl
index 6259e4bb..2351f3cd 100644
--- a/third_party/blink/renderer/core/svg/svg_fe_turbulence_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_fe_turbulence_element.idl
@@ -26,7 +26,8 @@
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFETurbulenceElement
 
 [
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    Exposed=Window
 ] interface SVGFETurbulenceElement : SVGElement {
     // Turbulence Types
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_TURBULENCE_TYPE_UNKNOWN = 0;
diff --git a/third_party/blink/renderer/core/svg/svg_filter_element.idl b/third_party/blink/renderer/core/svg/svg_filter_element.idl
index 598013f..06e1295c0 100644
--- a/third_party/blink/renderer/core/svg/svg_filter_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_filter_element.idl
@@ -26,7 +26,9 @@
 
 // https://drafts.fxtf.org/filter-effects/#InterfaceSVGFilterElement
 
-interface SVGFilterElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGFilterElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration filterUnits;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration primitiveUnits;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength      x;
diff --git a/third_party/blink/renderer/core/svg/svg_image_element.idl b/third_party/blink/renderer/core/svg/svg_image_element.idl
index e18c4ad3..d99d7eed 100644
--- a/third_party/blink/renderer/core/svg/svg_image_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_image_element.idl
@@ -26,7 +26,8 @@
 // https://svgwg.org/svg2-draft/embedded.html#InterfaceSVGImageElement
 
 [
-    ActiveScriptWrappable
+    ActiveScriptWrappable,
+    Exposed=Window
 ] interface SVGImageElement : SVGGraphicsElement {
     [MeasureAs=SVG1DOMImageElement] readonly attribute SVGAnimatedLength x;
     [MeasureAs=SVG1DOMImageElement] readonly attribute SVGAnimatedLength y;
diff --git a/third_party/blink/renderer/core/svg/svg_mask_element.idl b/third_party/blink/renderer/core/svg/svg_mask_element.idl
index 6cb896b..23415a0 100644
--- a/third_party/blink/renderer/core/svg/svg_mask_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_mask_element.idl
@@ -25,7 +25,9 @@
 
 // https://drafts.fxtf.org/css-masking/#InterfaceSVGMaskElement
 
-interface SVGMaskElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGMaskElement : SVGElement {
     [MeasureAs=SVG1DOMMaskElement] readonly attribute SVGAnimatedEnumeration maskUnits;
     [MeasureAs=SVG1DOMMaskElement] readonly attribute SVGAnimatedEnumeration maskContentUnits;
     [MeasureAs=SVG1DOMMaskElement] readonly attribute SVGAnimatedLength x;
diff --git a/third_party/blink/renderer/core/svg/svg_matrix.idl b/third_party/blink/renderer/core/svg/svg_matrix.idl
index 382fd1fa..664fe2e 100644
--- a/third_party/blink/renderer/core/svg/svg_matrix.idl
+++ b/third_party/blink/renderer/core/svg/svg_matrix.idl
@@ -25,6 +25,7 @@
 // TODO(foolip): SVGMatrix is gone from SVG 2, replaced by DOMMatrix.
 // https://crbug.com/709001
 [
+    Exposed=Window,
     ImplementedAs=SVGMatrixTearOff
 ] interface SVGMatrix {
     // FIXME: these attributes should all be floats but since we implement
diff --git a/third_party/blink/renderer/core/svg/svg_mpath_element.idl b/third_party/blink/renderer/core/svg/svg_mpath_element.idl
index 332e69aa..33060185 100644
--- a/third_party/blink/renderer/core/svg/svg_mpath_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_mpath_element.idl
@@ -25,7 +25,9 @@
 
 // https://svgwg.org/specs/animations/#InterfaceSVGMPathElement
 
-interface SVGMPathElement : SVGElement {
+[
+    Exposed=Window
+] interface SVGMPathElement : SVGElement {
 };
 
 SVGMPathElement includes SVGURIReference;
diff --git a/third_party/blink/renderer/core/svg/svg_point.idl b/third_party/blink/renderer/core/svg/svg_point.idl
index ed74a5a5..1c8a6a95 100644
--- a/third_party/blink/renderer/core/svg/svg_point.idl
+++ b/third_party/blink/renderer/core/svg/svg_point.idl
@@ -25,6 +25,7 @@
 // TODO(foolip): SVGPoint is gone from SVG 2, replaced by DOMPoint.
 // https://crbug.com/709001
 [
+    Exposed=Window,
     ImplementedAs=SVGPointTearOff
 ] interface SVGPoint {
     [RaisesException=Setter] attribute unrestricted float x;
diff --git a/third_party/blink/renderer/core/svg/svg_rect.idl b/third_party/blink/renderer/core/svg/svg_rect.idl
index c9e10b7c..4950068 100644
--- a/third_party/blink/renderer/core/svg/svg_rect.idl
+++ b/third_party/blink/renderer/core/svg/svg_rect.idl
@@ -25,6 +25,7 @@
 // TODO(foolip): SVGRect is gone from SVG 2, replaced by DOMRect.
 // https://crbug.com/709001
 [
+    Exposed=Window,
     ImplementedAs=SVGRectTearOff
 ] interface SVGRect {
     [RaisesException=Setter] attribute unrestricted float x;
diff --git a/third_party/blink/renderer/core/svg/svg_set_element.idl b/third_party/blink/renderer/core/svg/svg_set_element.idl
index ecb0229..4fa9c80 100644
--- a/third_party/blink/renderer/core/svg/svg_set_element.idl
+++ b/third_party/blink/renderer/core/svg/svg_set_element.idl
@@ -25,5 +25,7 @@
 
 // https://svgwg.org/specs/animations/#InterfaceSVGSetElement
 
-interface SVGSetElement : SVGAnimationElement {
+[
+    Exposed=Window
+] interface SVGSetElement : SVGAnimationElement {
 };
diff --git a/third_party/blink/renderer/core/testing/dummy_page_holder.cc b/third_party/blink/renderer/core/testing/dummy_page_holder.cc
index 7ab8fb3..e9a7b07 100644
--- a/third_party/blink/renderer/core/testing/dummy_page_holder.cc
+++ b/third_party/blink/renderer/core/testing/dummy_page_holder.cc
@@ -64,7 +64,8 @@
     Page::PageClients* page_clients_argument,
     LocalFrameClient* local_frame_client,
     base::OnceCallback<void(Settings&)> setting_overrider,
-    const base::TickClock* clock) {
+    const base::TickClock* clock)
+    : enable_mock_scrollbars_(true) {
   Page::PageClients page_clients;
   if (!page_clients_argument)
     FillWithEmptyClients(page_clients);
diff --git a/third_party/blink/renderer/core/testing/dummy_page_holder.h b/third_party/blink/renderer/core/testing/dummy_page_holder.h
index 1a10044..9b64a9b 100644
--- a/third_party/blink/renderer/core/testing/dummy_page_holder.h
+++ b/third_party/blink/renderer/core/testing/dummy_page_holder.h
@@ -39,6 +39,7 @@
 #include "base/time/default_tick_clock.h"
 #include "third_party/blink/renderer/core/frame/local_frame_client.h"
 #include "third_party/blink/renderer/core/page/page.h"
+#include "third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h"
 #include "third_party/blink/renderer/platform/geometry/int_size.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
@@ -85,6 +86,11 @@
  private:
   Persistent<Page> page_;
 
+  // Unit tests need to run with a mock theme enabled. This is necessitated
+  // particularly by Android on which unit tests run without a platform theme
+  // engine.
+  ScopedMockOverlayScrollbars enable_mock_scrollbars_;
+
   // The LocalFrame is accessed from worker threads by unit tests
   // (ThreadableLoaderTest), hence we need to allow cross-thread
   // usage of |m_frame|.
diff --git a/third_party/blink/renderer/core/timing/window_performance_test.cc b/third_party/blink/renderer/core/timing/window_performance_test.cc
index a8b52fc..a7ea216 100644
--- a/third_party/blink/renderer/core/timing/window_performance_test.cc
+++ b/third_party/blink/renderer/core/timing/window_performance_test.cc
@@ -78,6 +78,7 @@
   }
 
   void ResetPerformance() {
+    page_holder_ = nullptr;
     page_holder_ = std::make_unique<DummyPageHolder>(IntSize(800, 600));
     page_holder_->GetDocument().SetURL(KURL("https://example.com"));
 
diff --git a/third_party/blink/renderer/core/workers/shared_worker.idl b/third_party/blink/renderer/core/workers/shared_worker.idl
index 36051236..7cdc4b5 100644
--- a/third_party/blink/renderer/core/workers/shared_worker.idl
+++ b/third_party/blink/renderer/core/workers/shared_worker.idl
@@ -33,7 +33,8 @@
 
 [
     ActiveScriptWrappable,
-    // TODO(foolip): Exposed=(Window,Worker),
+    // TODO(foolip): Exposed=(Window, Worker),
+    Exposed=Window,
     RuntimeEnabled=SharedWorker
 ] interface SharedWorker : EventTarget {
     [CallWith=ExecutionContext, RaisesException] constructor(ScriptURLString scriptURL, optional (DOMString or WorkerOptions) options = {});
diff --git a/third_party/blink/renderer/core/workers/worklet.idl b/third_party/blink/renderer/core/workers/worklet.idl
index cb4571e9b..bc08a84 100644
--- a/third_party/blink/renderer/core/workers/worklet.idl
+++ b/third_party/blink/renderer/core/workers/worklet.idl
@@ -5,6 +5,7 @@
 // https://drafts.css-houdini.org/worklets/#worklet
 
 [
+    Exposed=Window,
     SecureContext
 ] interface Worklet {
     [CallWith=ScriptState, RaisesException] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options = {});
diff --git a/third_party/blink/renderer/core/xml/xpath_evaluator.idl b/third_party/blink/renderer/core/xml/xpath_evaluator.idl
index 595ed66..442506ae 100644
--- a/third_party/blink/renderer/core/xml/xpath_evaluator.idl
+++ b/third_party/blink/renderer/core/xml/xpath_evaluator.idl
@@ -17,16 +17,14 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator
+// https://dom.spec.whatwg.org/#interface-xpathevaluator
 
-// Note: The spec says "the XPathEvaluator interface will be implemented on the
-// same object which implements the Document interface" and does not define a
-// constructor or other means to create an XPathEvaluator object. Nonetheless,
-// Blink, Gecko, Presto, WebKit and all have these APIs on both Document and the
-// constructable XPathEvaluator interface.
-
-interface XPathEvaluator {
+[
+    Exposed=Window
+] interface XPathEvaluator {
     [Measure] constructor();
+
+    // https://dom.spec.whatwg.org/#mixin-xpathevaluatorbase
     [Measure, RaisesException] XPathExpression createExpression(DOMString expression, optional XPathNSResolver? resolver = null);
 
     [Measure] XPathNSResolver createNSResolver(Node nodeResolver);
diff --git a/third_party/blink/renderer/core/xml/xpath_expression.idl b/third_party/blink/renderer/core/xml/xpath_expression.idl
index 80d810f..50a935eb 100644
--- a/third_party/blink/renderer/core/xml/xpath_expression.idl
+++ b/third_party/blink/renderer/core/xml/xpath_expression.idl
@@ -18,8 +18,10 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression
+// https://dom.spec.whatwg.org/#interface-xpathexpression
 
-interface XPathExpression {
+[
+    Exposed=Window
+] interface XPathExpression {
      [RaisesException] XPathResult evaluate(Node contextNode, optional unsigned short type = 0, optional object? inResult = null);
 };
diff --git a/third_party/blink/renderer/core/xml/xpath_result.idl b/third_party/blink/renderer/core/xml/xpath_result.idl
index 0a87159..cfc0998 100644
--- a/third_party/blink/renderer/core/xml/xpath_result.idl
+++ b/third_party/blink/renderer/core/xml/xpath_result.idl
@@ -17,9 +17,11 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult
+// https://dom.spec.whatwg.org/#interface-xpathresult
 
-interface XPathResult {
+[
+    Exposed=Window
+] interface XPathResult {
     // XPathResultType
     const unsigned short ANY_TYPE                       = 0;
     const unsigned short NUMBER_TYPE                    = 1;
diff --git a/third_party/blink/renderer/core/xml/xslt_processor.idl b/third_party/blink/renderer/core/xml/xslt_processor.idl
index f6ea356c..6217fa8 100644
--- a/third_party/blink/renderer/core/xml/xslt_processor.idl
+++ b/third_party/blink/renderer/core/xml/xslt_processor.idl
@@ -31,6 +31,7 @@
 // https://hg.mozilla.org/mozilla-central/file/012853bd80b7/dom/webidl/XSLTProcessor.webidl
 
 [
+    Exposed=Window,
     RuntimeEnabled=XSLT
 ] interface XSLTProcessor {
     [CallWith=Document, MeasureAs=XSLTProcessor] constructor();
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn
index 054d8fe..762f66ac93 100644
--- a/third_party/blink/renderer/modules/BUILD.gn
+++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -141,7 +141,7 @@
     "//third_party/blink/renderer/modules/srcobject",
     "//third_party/blink/renderer/modules/storage",
     "//third_party/blink/renderer/modules/vibration",
-    "//third_party/blink/renderer/modules/video_raf",
+    "//third_party/blink/renderer/modules/video_rvfc",
     "//third_party/blink/renderer/modules/wake_lock",
     "//third_party/blink/renderer/modules/webaudio",
     "//third_party/blink/renderer/modules/webcodecs",
@@ -421,8 +421,8 @@
     "service_worker/service_worker_installed_scripts_manager_test.cc",
     "service_worker/thread_safe_script_container_test.cc",
     "service_worker/web_embedded_worker_impl_test.cc",
-    "video_raf/video_frame_request_callback_collection_test.cc",
-    "video_raf/video_request_animation_frame_impl_test.cc",
+    "video_rvfc/video_frame_callback_requester_impl_test.cc",
+    "video_rvfc/video_frame_request_callback_collection_test.cc",
     "wake_lock/wake_lock_manager_test.cc",
     "wake_lock/wake_lock_sentinel_test.cc",
     "wake_lock/wake_lock_test.cc",
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl b/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl
index b706b5e..94f6402a 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl
@@ -7,6 +7,7 @@
 // TODO(840383): Accodring to the specification |effects| is optional and
 // defaults to null. Match that here.
 [
+    Exposed=Window,
     RuntimeEnabled=AnimationWorklet
 ] interface WorkletAnimation {
   [CallWith=ScriptState, RaisesException, MeasureAs=WorkletAnimationConstructor]
diff --git a/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.idl b/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.idl
index 73d2426..a7a5a2c 100644
--- a/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.idl
+++ b/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.idl
@@ -3,7 +3,8 @@
 // found in the LICENSE file.
 
 [
-    ActiveScriptWrappable
+    ActiveScriptWrappable,
+    Exposed=Window
 ] interface BeforeInstallPromptEvent : Event {
     [CallWith=ExecutionContext] constructor(DOMString type, optional BeforeInstallPromptEventInit eventInitDict = {});
     readonly attribute FrozenArray<DOMString> platforms;
diff --git a/third_party/blink/renderer/modules/bluetooth/bluetooth_le_scan.idl b/third_party/blink/renderer/modules/bluetooth/bluetooth_le_scan.idl
index 136b4dd8..9d56511 100644
--- a/third_party/blink/renderer/modules/bluetooth/bluetooth_le_scan.idl
+++ b/third_party/blink/renderer/modules/bluetooth/bluetooth_le_scan.idl
@@ -5,6 +5,7 @@
 // https://webbluetoothcg.github.io/web-bluetooth/scanning.html#bluetoothlescan
 
 [
+    Exposed=Window,
     RuntimeEnabled=WebBluetoothScanning,
     SecureContext
 ] interface BluetoothLEScan {
diff --git a/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_descriptor.idl b/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_descriptor.idl
index 14da64f3..8d5faa4 100644
--- a/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_descriptor.idl
+++ b/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_descriptor.idl
@@ -7,6 +7,7 @@
 // Implement BluetoothRemoteGATTDescriptor interface: https://crbug.com/660699
 
 [
+    Exposed=Window,
     RuntimeEnabled=WebBluetooth,
     SecureContext
 ] interface BluetoothRemoteGATTDescriptor  {
diff --git a/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_server.idl b/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_server.idl
index bb2ece5..f346676 100644
--- a/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_server.idl
+++ b/third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_server.idl
@@ -7,6 +7,7 @@
 // Implement BluetoothGATTRemoteServer interface: https://crbug.com/476735
 
 [
+    Exposed=Window,
     RuntimeEnabled=WebBluetooth,
     SecureContext
 ] interface BluetoothRemoteGATTServer
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad.idl b/third_party/blink/renderer/modules/gamepad/gamepad.idl
index 95024ca..aca2aaa 100644
--- a/third_party/blink/renderer/modules/gamepad/gamepad.idl
+++ b/third_party/blink/renderer/modules/gamepad/gamepad.idl
@@ -33,7 +33,9 @@
 };
 
 // https://w3c.github.io/gamepad/#gamepad-interface
-interface Gamepad {
+[
+    Exposed=Window
+] interface Gamepad {
     readonly attribute DOMString id;
     readonly attribute long index;
     readonly attribute boolean connected;
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_axis_event.idl b/third_party/blink/renderer/modules/gamepad/gamepad_axis_event.idl
index b8f091d..5822a22 100644
--- a/third_party/blink/renderer/modules/gamepad/gamepad_axis_event.idl
+++ b/third_party/blink/renderer/modules/gamepad/gamepad_axis_event.idl
@@ -6,6 +6,7 @@
 // https://docs.google.com/document/d/1rnQ1gU0iwPXbO7OvKS6KO9gyfpSdSQvKhK9_OkzUuKE
 
 [
+    Exposed=Window,
     RuntimeEnabled=GamepadButtonAxisEvents
 ] interface GamepadAxisEvent : GamepadEvent {
     constructor(DOMString type, optional GamepadAxisEventInit eventInitDict = {});
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_button.idl b/third_party/blink/renderer/modules/gamepad/gamepad_button.idl
index 99fae2f2..001a70b2 100644
--- a/third_party/blink/renderer/modules/gamepad/gamepad_button.idl
+++ b/third_party/blink/renderer/modules/gamepad/gamepad_button.idl
@@ -2,7 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-interface GamepadButton {
+[
+    Exposed=Window
+] interface GamepadButton {
     readonly attribute boolean pressed;
     [MeasureAs=GamepadButtonTouched] readonly attribute boolean touched;
     readonly attribute double value;
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_button_event.idl b/third_party/blink/renderer/modules/gamepad/gamepad_button_event.idl
index 5138a3b1..1ca7750 100644
--- a/third_party/blink/renderer/modules/gamepad/gamepad_button_event.idl
+++ b/third_party/blink/renderer/modules/gamepad/gamepad_button_event.idl
@@ -6,6 +6,7 @@
 // https://docs.google.com/document/d/1rnQ1gU0iwPXbO7OvKS6KO9gyfpSdSQvKhK9_OkzUuKE
 
 [
+    Exposed=Window,
     RuntimeEnabled=GamepadButtonAxisEvents
 ] interface GamepadButtonEvent : GamepadEvent {
     constructor(DOMString type, optional GamepadButtonEventInit eventInitDict = {});
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_event.idl b/third_party/blink/renderer/modules/gamepad/gamepad_event.idl
index 6e5d205..a87b497 100644
--- a/third_party/blink/renderer/modules/gamepad/gamepad_event.idl
+++ b/third_party/blink/renderer/modules/gamepad/gamepad_event.idl
@@ -4,7 +4,9 @@
 
 // https://w3c.github.io/gamepad/#gamepadevent-interface
 
-interface GamepadEvent : Event {
+[
+    Exposed=Window
+] interface GamepadEvent : Event {
     constructor(DOMString type, optional GamepadEventInit eventInitDict = {});
     [ImplementedAs=getGamepad] readonly attribute Gamepad gamepad;
 };
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.idl b/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.idl
index e50d9f9..d5553c8 100644
--- a/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.idl
+++ b/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.idl
@@ -21,7 +21,9 @@
 
 // Gamepad vibration is proposed as an extension to the Gamepad API.
 // https://github.com/w3c/gamepad/pull/68
-interface GamepadHapticActuator {
+[
+    Exposed=Window
+] interface GamepadHapticActuator {
     readonly attribute GamepadHapticActuatorType type;
     [CallWith=ScriptState] Promise<GamepadHapticsResult> playEffect(
         GamepadHapticEffectType type,
diff --git a/third_party/blink/renderer/modules/keyboard/keyboard_layout_map.idl b/third_party/blink/renderer/modules/keyboard/keyboard_layout_map.idl
index 76d2acaa..701ce72 100644
--- a/third_party/blink/renderer/modules/keyboard/keyboard_layout_map.idl
+++ b/third_party/blink/renderer/modules/keyboard/keyboard_layout_map.idl
@@ -5,6 +5,7 @@
 // Keyboard Map specification: https://wicg.github.io/keyboard-map/
 
 [
+    Exposed=Window,
     SecureContext
 ] interface KeyboardLayoutMap {
     readonly maplike<DOMString, DOMString>;
diff --git a/third_party/blink/renderer/modules/launch/launch_params.idl b/third_party/blink/renderer/modules/launch/launch_params.idl
index 2d98f3e..f3b6b74 100644
--- a/third_party/blink/renderer/modules/launch/launch_params.idl
+++ b/third_party/blink/renderer/modules/launch/launch_params.idl
@@ -5,6 +5,9 @@
 // TODO(crbug.com/829689): Add link to spec once complete.
 // Explainer: https://github.com/WICG/file-handling/blob/master/explainer.md
 
-[RuntimeEnabled=FileHandling] interface LaunchParams {
+[
+    Exposed=Window,
+    RuntimeEnabled=FileHandling
+] interface LaunchParams {
   readonly attribute FrozenArray<FileSystemHandle> files;
 };
diff --git a/third_party/blink/renderer/modules/launch/launch_queue.idl b/third_party/blink/renderer/modules/launch/launch_queue.idl
index 46d0b9a..f2210da 100644
--- a/third_party/blink/renderer/modules/launch/launch_queue.idl
+++ b/third_party/blink/renderer/modules/launch/launch_queue.idl
@@ -5,7 +5,10 @@
 // TODO(crbug.com/829689): Add link to spec once complete.
 // Explainer: https://github.com/WICG/file-handling/blob/master/explainer.md
 
-[RuntimeEnabled=FileHandling] interface LaunchQueue {
+[
+    Exposed=Window,
+    RuntimeEnabled=FileHandling
+] interface LaunchQueue {
   void setConsumer(LaunchConsumer consumer);
 };
 
diff --git a/third_party/blink/renderer/modules/mediasource/source_buffer.idl b/third_party/blink/renderer/modules/mediasource/source_buffer.idl
index 6ba59576..4354cf7e 100644
--- a/third_party/blink/renderer/modules/mediasource/source_buffer.idl
+++ b/third_party/blink/renderer/modules/mediasource/source_buffer.idl
@@ -36,7 +36,8 @@
 };
 
 [
-    ActiveScriptWrappable
+    ActiveScriptWrappable,
+    Exposed=Window
 ] interface SourceBuffer : EventTarget {
 
     // Gets or sets the AppendMode.
diff --git a/third_party/blink/renderer/modules/mediasource/source_buffer_list.idl b/third_party/blink/renderer/modules/mediasource/source_buffer_list.idl
index 2a3049e2..2016084 100644
--- a/third_party/blink/renderer/modules/mediasource/source_buffer_list.idl
+++ b/third_party/blink/renderer/modules/mediasource/source_buffer_list.idl
@@ -28,7 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface SourceBufferList : EventTarget {
+[
+    Exposed=Window
+] interface SourceBufferList : EventTarget {
     readonly attribute unsigned long length;
     attribute EventHandler onaddsourcebuffer;
     attribute EventHandler onremovesourcebuffer;
diff --git a/third_party/blink/renderer/modules/mediasource/track_default.idl b/third_party/blink/renderer/modules/mediasource/track_default.idl
index 29f943f..c0398e2 100644
--- a/third_party/blink/renderer/modules/mediasource/track_default.idl
+++ b/third_party/blink/renderer/modules/mediasource/track_default.idl
@@ -8,6 +8,7 @@
 enum TrackDefaultType { "audio", "video", "text" };
 
 [
+    Exposed=Window,
     RuntimeEnabled=MediaSourceExperimental
 ] interface TrackDefault {
     [RaisesException] constructor(TrackDefaultType type, DOMString language, DOMString label, sequence<DOMString> kinds, optional DOMString byteStreamTrackID = "");
diff --git a/third_party/blink/renderer/modules/mediasource/track_default_list.idl b/third_party/blink/renderer/modules/mediasource/track_default_list.idl
index 380a9dc..2a2038e 100644
--- a/third_party/blink/renderer/modules/mediasource/track_default_list.idl
+++ b/third_party/blink/renderer/modules/mediasource/track_default_list.idl
@@ -6,6 +6,7 @@
 // https://w3c.github.io/media-source/#trackdefaultlist
 
 [
+    Exposed=Window,
     RuntimeEnabled=MediaSourceExperimental
 ] interface TrackDefaultList {
     [RaisesException] constructor(optional sequence<TrackDefault> trackDefaults = []);
diff --git a/third_party/blink/renderer/modules/mediasource/video_playback_quality.idl b/third_party/blink/renderer/modules/mediasource/video_playback_quality.idl
index 17743bc..f93c17a 100644
--- a/third_party/blink/renderer/modules/mediasource/video_playback_quality.idl
+++ b/third_party/blink/renderer/modules/mediasource/video_playback_quality.idl
@@ -28,6 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 [
+    Exposed=Window,
     RuntimeEnabled=VideoPlaybackQuality
 ] interface VideoPlaybackQuality {
     readonly attribute DOMHighResTimeStamp creationTime;
diff --git a/third_party/blink/renderer/modules/mediastream/overconstrained_error.idl b/third_party/blink/renderer/modules/mediastream/overconstrained_error.idl
index e9a43800..ae23063 100644
--- a/third_party/blink/renderer/modules/mediastream/overconstrained_error.idl
+++ b/third_party/blink/renderer/modules/mediastream/overconstrained_error.idl
@@ -6,7 +6,9 @@
 
 // TODO(guidou): OverconstrainedError should be an Error subclass and not an
 // interface. http://crbug.com/769726
-interface OverconstrainedError {
+[
+    Exposed=Window
+] interface OverconstrainedError {
     constructor(DOMString constraint, DOMString message);
     readonly attribute DOMString name;
     readonly attribute DOMString? message;
diff --git a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms.cc b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms.cc
index 4090717..b757981 100644
--- a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms.cc
+++ b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms.cc
@@ -398,9 +398,9 @@
   // We can receive a call to RequestAnimationFrame() before |compositor_| is
   // created. In that case, we suspend the request, and wait until now to
   // reiniate it.
-  if (pending_raf_request_) {
-    RequestAnimationFrame();
-    pending_raf_request_ = false;
+  if (pending_rvfc_request_) {
+    RequestVideoFrameCallback();
+    pending_rvfc_request_ = false;
   }
 
   SetNetworkState(WebMediaPlayer::kNetworkStateLoading);
@@ -1301,7 +1301,7 @@
 
 void WebMediaPlayerMS::OnNewFramePresentedCallback() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  client_->OnRequestAnimationFrame();
+  client_->OnRequestVideoFrameCallback();
 }
 
 void WebMediaPlayerMS::SendLogMessage(const WTF::String& message) const {
@@ -1318,13 +1318,13 @@
   return compositor_->GetLastPresentedFrameMetadata();
 }
 
-void WebMediaPlayerMS::RequestAnimationFrame() {
-  DCHECK(RuntimeEnabledFeatures::VideoRequestAnimationFrameEnabled());
+void WebMediaPlayerMS::RequestVideoFrameCallback() {
+  DCHECK(RuntimeEnabledFeatures::RequestVideoFrameCallbackEnabled());
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   if (!compositor_) {
     // Reissue the request after |compositor_| is created, in Load().
-    pending_raf_request_ = true;
+    pending_rvfc_request_ = true;
     return;
   }
 
diff --git a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_test.cc b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_test.cc
index a131600..b326d7d 100644
--- a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms_test.cc
@@ -635,7 +635,7 @@
   MOCK_METHOD1(CheckSizeChanged, void(gfx::Size));
   MOCK_CONST_METHOD0(DisplayType, WebMediaPlayer::DisplayType());
   MOCK_CONST_METHOD0(CouldPlayIfEnoughData, bool());
-  MOCK_METHOD0(OnRequestAnimationFrame, void());
+  MOCK_METHOD0(OnRequestVideoFrameCallback, void());
 
   std::unique_ptr<WebSurfaceLayerBridge> CreateMockSurfaceLayerBridge(
       WebSurfaceLayerBridgeObserver*,
@@ -1374,7 +1374,7 @@
 }
 #endif
 
-TEST_P(WebMediaPlayerMSTest, RequestAnimationFrame) {
+TEST_P(WebMediaPlayerMSTest, RequestVideoFrameCallback) {
   InitializeWebMediaPlayerMS();
 
   MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true);
@@ -1385,8 +1385,8 @@
   provider->QueueFrames(timestamps);
 
   // Verify a basic call to RAF.
-  player_->RequestAnimationFrame();
-  EXPECT_CALL(*this, OnRequestAnimationFrame()).Times(1);
+  player_->RequestVideoFrameCallback();
+  EXPECT_CALL(*this, OnRequestVideoFrameCallback()).Times(1);
   message_loop_controller_.RunAndWaitForStatus(
       media::PipelineStatus::PIPELINE_OK);
 
@@ -1397,11 +1397,11 @@
   testing::Mock::VerifyAndClearExpectations(this);
 
   // Make sure multiple calls to RAF only result in one call per frame to OnRAF.
-  player_->RequestAnimationFrame();
-  player_->RequestAnimationFrame();
-  player_->RequestAnimationFrame();
+  player_->RequestVideoFrameCallback();
+  player_->RequestVideoFrameCallback();
+  player_->RequestVideoFrameCallback();
 
-  EXPECT_CALL(*this, OnRequestAnimationFrame()).Times(1);
+  EXPECT_CALL(*this, OnRequestVideoFrameCallback()).Times(1);
   message_loop_controller_.RunAndWaitForStatus(
       media::PipelineStatus::PIPELINE_OK);
   testing::Mock::VerifyAndClearExpectations(this);
@@ -1419,18 +1419,18 @@
 
   // Chain calls to video.rAF.
   int num_frames = 3;
-  player_->RequestAnimationFrame();
+  player_->RequestVideoFrameCallback();
 
   // Verify that the presentation frame counter is monotonically increasing.
   // Queue up a rAF call immediately after each frame.
   int last_frame_counter = -1;
-  EXPECT_CALL(*this, OnRequestAnimationFrame())
+  EXPECT_CALL(*this, OnRequestVideoFrameCallback())
       .Times(num_frames)
       .WillRepeatedly([&]() {
         auto metadata = player_->GetVideoFramePresentationMetadata();
         EXPECT_GT((int)metadata->presented_frames, last_frame_counter);
         last_frame_counter = metadata->presented_frames;
-        player_->RequestAnimationFrame();
+        player_->RequestVideoFrameCallback();
       });
 
   // Wait for each of the frame/kTestBreak pairs.
diff --git a/third_party/blink/renderer/modules/modules_idl_files.gni b/third_party/blink/renderer/modules/modules_idl_files.gni
index 4050c62..8b95cf9 100644
--- a/third_party/blink/renderer/modules/modules_idl_files.gni
+++ b/third_party/blink/renderer/modules/modules_idl_files.gni
@@ -113,7 +113,7 @@
   "//third_party/blink/renderer/modules/srcobject/idls.gni",
   "//third_party/blink/renderer/modules/storage/idls.gni",
   "//third_party/blink/renderer/modules/vibration/idls.gni",
-  "//third_party/blink/renderer/modules/video_raf/idls.gni",
+  "//third_party/blink/renderer/modules/video_rvfc/idls.gni",
   "//third_party/blink/renderer/modules/wake_lock/idls.gni",
   "//third_party/blink/renderer/modules/webaudio/idls.gni",
   "//third_party/blink/renderer/modules/webcodecs/idls.gni",
diff --git a/third_party/blink/renderer/modules/payments/payment_manager.idl b/third_party/blink/renderer/modules/payments/payment_manager.idl
index 48abe2f66..54e4fe7 100644
--- a/third_party/blink/renderer/modules/payments/payment_manager.idl
+++ b/third_party/blink/renderer/modules/payments/payment_manager.idl
@@ -12,6 +12,7 @@
 };
 
 [
+    Exposed=Window,
     RuntimeEnabled=PaymentApp,
     ConstructorCallWith=ExecutionContext
 ] interface PaymentManager {
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.idl b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.idl
index a5996bc..5c01a6c 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.idl
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.idl
@@ -6,8 +6,10 @@
 // TODO(crbug.com/1052765): Add link to standard when available.
 
 // TODO(crbug.com/1052765): Align with WebCodecs definition once it is stable.
-[RuntimeEnabled=RTCInsertableStreams]
-interface RTCEncodedAudioFrame {
+[
+    Exposed=Window,
+    RuntimeEnabled=RTCInsertableStreams
+] interface RTCEncodedAudioFrame {
     readonly attribute unsigned long long timestamp;  // microseconds
     attribute ArrayBuffer data;
     // TODO(crbug.com/1052765): Replace the following fields with a dictionary
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.idl b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.idl
index 14de6bbc..ee618e20 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.idl
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.idl
@@ -12,8 +12,10 @@
 };
 
 // TODO(crbug.com/1052765): Align with WebCodecs definition once it is stable.
-[RuntimeEnabled=RTCInsertableStreams]
-interface RTCEncodedVideoFrame {
+[
+    Exposed=Window,
+    RuntimeEnabled=RTCInsertableStreams
+] interface RTCEncodedVideoFrame {
     readonly attribute RTCCodedVideoFrameType type;
     readonly attribute unsigned long long timestamp;  // microseconds
     attribute ArrayBuffer data;
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc
index ea8a67a..93b81d4b 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc
@@ -27,6 +27,8 @@
 
 namespace {
 
+const uint32_t kSSRC = 1;
+
 class MockWebRtcTransformedFrameCallback
     : public webrtc::TransformedFrameCallback {
  public:
@@ -34,6 +36,27 @@
                void(std::unique_ptr<webrtc::TransformableFrameInterface>));
 };
 
+class FakeVideoFrame : public webrtc::TransformableVideoFrameInterface {
+ public:
+  explicit FakeVideoFrame(uint32_t ssrc) : ssrc_(ssrc) {}
+
+  rtc::ArrayView<const uint8_t> GetData() const override {
+    return rtc::ArrayView<const uint8_t>();
+  }
+
+  // Copies |data| into the owned frame payload data.
+  void SetData(rtc::ArrayView<const uint8_t> data) override {}
+  uint32_t GetTimestamp() const override { return 0; }
+  uint32_t GetSsrc() const override { return ssrc_; }
+  bool IsKeyFrame() const override { return true; }
+  std::vector<uint8_t> GetAdditionalData() const override {
+    return std::vector<uint8_t>();
+  }
+
+ private:
+  uint32_t ssrc_;
+};
+
 }  // namespace
 
 class RTCEncodedVideoUnderlyingSinkTest : public testing::Test {
@@ -46,15 +69,15 @@
         transformer_(main_task_runner_) {}
 
   void SetUp() override {
-    EXPECT_FALSE(transformer_.HasTransformedFrameCallback());
-    transformer_.RegisterTransformedFrameCallback(webrtc_callback_);
-    EXPECT_TRUE(transformer_.HasTransformedFrameCallback());
+    EXPECT_FALSE(transformer_.HasTransformedFrameSinkCallback(kSSRC));
+    transformer_.RegisterTransformedFrameSinkCallback(webrtc_callback_, kSSRC);
+    EXPECT_TRUE(transformer_.HasTransformedFrameSinkCallback(kSSRC));
   }
 
   void TearDown() override {
     platform_->RunUntilIdle();
-    transformer_.UnregisterTransformedFrameCallback();
-    EXPECT_FALSE(transformer_.HasTransformedFrameCallback());
+    transformer_.UnregisterTransformedFrameSinkCallback(kSSRC);
+    EXPECT_FALSE(transformer_.HasTransformedFrameSinkCallback(kSSRC));
   }
 
   RTCEncodedVideoUnderlyingSink* CreateSink(ScriptState* script_state) {
@@ -68,7 +91,7 @@
 
   ScriptValue CreateEncodedVideoFrameChunk(ScriptState* script_state) {
     RTCEncodedVideoFrame* frame = MakeGarbageCollected<RTCEncodedVideoFrame>(
-        std::unique_ptr<webrtc::TransformableVideoFrameInterface>());
+        std::make_unique<FakeVideoFrame>(kSSRC));
     return ScriptValue(script_state->GetIsolate(),
                        ToV8(frame, script_state->GetContext()->Global(),
                             script_state->GetIsolate()));
diff --git a/third_party/blink/renderer/modules/quota/dom_error.idl b/third_party/blink/renderer/modules/quota/dom_error.idl
index 768ac5d..35ca6f7 100644
--- a/third_party/blink/renderer/modules/quota/dom_error.idl
+++ b/third_party/blink/renderer/modules/quota/dom_error.idl
@@ -29,7 +29,9 @@
 // https://dom.spec.whatwg.org/#domerror
 
 // FIXME: DOMError has been removed from the spec. crbug.com/460725
-interface DOMError {
+[
+    Exposed=Window
+] interface DOMError {
     [Measure] constructor(DOMString name, optional DOMString message);
     [Measure] readonly attribute DOMString name;
     [Measure] readonly attribute DOMString message;
diff --git a/third_party/blink/renderer/modules/scheduler/scheduler.idl b/third_party/blink/renderer/modules/scheduler/scheduler.idl
index a90601c..54791a0e 100644
--- a/third_party/blink/renderer/modules/scheduler/scheduler.idl
+++ b/third_party/blink/renderer/modules/scheduler/scheduler.idl
@@ -5,6 +5,7 @@
 // Experimental Scheduling API Proposal:
 // https://docs.google.com/document/d/1Apz-SD-pOagGeyWxIpgOi0ARNkrCrELhPdm18eeu9tw
 [
+    Exposed=Window,
     ImplementedAs=DOMScheduler,
     RuntimeEnabled=WebScheduler
 ] interface Scheduler {
diff --git a/third_party/blink/renderer/modules/scheduler/task_controller.idl b/third_party/blink/renderer/modules/scheduler/task_controller.idl
index ac22aec..f7e66aa 100644
--- a/third_party/blink/renderer/modules/scheduler/task_controller.idl
+++ b/third_party/blink/renderer/modules/scheduler/task_controller.idl
@@ -6,6 +6,7 @@
 // https://docs.google.com/document/d/1xU7HyNsEsbXhTgt0ZnXDbeSXm5-m5FzkLJAT6LTizEI/edit#
 
 [
+    Exposed=Window,
     ImplementedAs=DOMTaskController,
     MeasureAs=TaskControllerConstructor,
     RuntimeEnabled=WebScheduler
diff --git a/third_party/blink/renderer/modules/scheduler/task_signal.idl b/third_party/blink/renderer/modules/scheduler/task_signal.idl
index 1943e81..7bd0804 100644
--- a/third_party/blink/renderer/modules/scheduler/task_signal.idl
+++ b/third_party/blink/renderer/modules/scheduler/task_signal.idl
@@ -6,6 +6,7 @@
 // https://docs.google.com/document/d/1xU7HyNsEsbXhTgt0ZnXDbeSXm5-m5FzkLJAT6LTizEI/edit#
 
 [
+    Exposed=Window,
     ImplementedAs=DOMTaskSignal,
     RuntimeEnabled=WebScheduler
 ] interface TaskSignal : AbortSignal {
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_container.idl b/third_party/blink/renderer/modules/service_worker/service_worker_container.idl
index 857b0d4..86aab55 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_container.idl
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_container.idl
@@ -30,6 +30,7 @@
 
 // https://w3c.github.io/ServiceWorker/#serviceworkercontainer-interface
 [
+    Exposed=Window,
     SecureContext
 ] interface ServiceWorkerContainer : EventTarget {
     readonly attribute ServiceWorker? controller;
diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis_event.idl b/third_party/blink/renderer/modules/speech/speech_synthesis_event.idl
index dcc0e0c..6a5ec2d 100644
--- a/third_party/blink/renderer/modules/speech/speech_synthesis_event.idl
+++ b/third_party/blink/renderer/modules/speech/speech_synthesis_event.idl
@@ -25,6 +25,7 @@
 
 // https://w3c.github.io/speech-api/#speechsynthesisevent
 [
+    Exposed=Window,
     RuntimeEnabled=ScriptedSpeechSynthesis
 ] interface SpeechSynthesisEvent : Event {
     constructor(DOMString type, SpeechSynthesisEventInit eventInitDict);
diff --git a/third_party/blink/renderer/modules/speech/speech_synthesis_utterance.idl b/third_party/blink/renderer/modules/speech/speech_synthesis_utterance.idl
index 4d55106..65b39c4 100644
--- a/third_party/blink/renderer/modules/speech/speech_synthesis_utterance.idl
+++ b/third_party/blink/renderer/modules/speech/speech_synthesis_utterance.idl
@@ -26,6 +26,7 @@
 // https://w3c.github.io/speech-api/#speechsynthesisutterance
 
 [
+    Exposed=Window,
     RuntimeEnabled=ScriptedSpeechSynthesis
 ] interface SpeechSynthesisUtterance : EventTarget {
     [CallWith=ExecutionContext] constructor(optional DOMString text);
diff --git a/third_party/blink/renderer/modules/storage/storage.idl b/third_party/blink/renderer/modules/storage/storage.idl
index 76d918d..9ed1da40 100644
--- a/third_party/blink/renderer/modules/storage/storage.idl
+++ b/third_party/blink/renderer/modules/storage/storage.idl
@@ -25,8 +25,10 @@
 
 // https://html.spec.whatwg.org/C/#the-storage-interface
 
-[ImplementedAs=StorageArea]
-interface Storage {
+[
+    Exposed=Window,
+    ImplementedAs=StorageArea
+] interface Storage {
     [RaisesException=Getter] readonly attribute unsigned long length;
     [RaisesException, MeasureAs=DOMStorageRead] DOMString? key(unsigned long index);
     [LogActivity, RaisesException, MeasureAs=DOMStorageRead] getter DOMString? getItem(DOMString key);
diff --git a/third_party/blink/renderer/modules/video_raf/html_video_element_video_request_animation_frame.idl b/third_party/blink/renderer/modules/video_raf/html_video_element_video_request_animation_frame.idl
deleted file mode 100644
index 0a906e1..0000000
--- a/third_party/blink/renderer/modules/video_raf/html_video_element_video_request_animation_frame.idl
+++ /dev/null
@@ -1,12 +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.
-
-// See https://wicg.github.io/video-raf/.
-[
-    RuntimeEnabled=VideoRequestAnimationFrame,
-    ImplementedAs=VideoRequestAnimationFrameImpl
-] partial interface HTMLVideoElement {
-    long requestAnimationFrame(VideoFrameRequestCallback callback);
-    void cancelAnimationFrame(long handle);
-};
\ No newline at end of file
diff --git a/third_party/blink/renderer/modules/video_raf/BUILD.gn b/third_party/blink/renderer/modules/video_rvfc/BUILD.gn
similarity index 72%
rename from third_party/blink/renderer/modules/video_raf/BUILD.gn
rename to third_party/blink/renderer/modules/video_rvfc/BUILD.gn
index 10aba6b2..6c561e7 100644
--- a/third_party/blink/renderer/modules/video_raf/BUILD.gn
+++ b/third_party/blink/renderer/modules/video_rvfc/BUILD.gn
@@ -4,11 +4,11 @@
 
 import("//third_party/blink/renderer/modules/modules.gni")
 
-blink_modules_sources("video_raf") {
+blink_modules_sources("video_rvfc") {
   sources = [
+    "video_frame_callback_requester_impl.cc",
+    "video_frame_callback_requester_impl.h",
     "video_frame_request_callback_collection.cc",
     "video_frame_request_callback_collection.h",
-    "video_request_animation_frame_impl.cc",
-    "video_request_animation_frame_impl.h",
   ]
 }
diff --git a/third_party/blink/renderer/modules/video_raf/DEPS b/third_party/blink/renderer/modules/video_rvfc/DEPS
similarity index 100%
rename from third_party/blink/renderer/modules/video_raf/DEPS
rename to third_party/blink/renderer/modules/video_rvfc/DEPS
diff --git a/third_party/blink/renderer/modules/video_raf/OWNERS b/third_party/blink/renderer/modules/video_rvfc/OWNERS
similarity index 100%
rename from third_party/blink/renderer/modules/video_raf/OWNERS
rename to third_party/blink/renderer/modules/video_rvfc/OWNERS
diff --git a/third_party/blink/renderer/modules/video_rvfc/html_video_element_request_video_frame_callback.idl b/third_party/blink/renderer/modules/video_rvfc/html_video_element_request_video_frame_callback.idl
new file mode 100644
index 0000000..0f5d397
--- /dev/null
+++ b/third_party/blink/renderer/modules/video_rvfc/html_video_element_request_video_frame_callback.idl
@@ -0,0 +1,12 @@
+// 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.
+
+// See https://wicg.github.io/video-raf/.
+[
+    RuntimeEnabled=RequestVideoFrameCallback,
+    ImplementedAs=VideoFrameCallbackRequesterImpl
+] partial interface HTMLVideoElement {
+    long requestVideoFrameCallback(VideoFrameRequestCallback callback);
+    void cancelVideoFrameCallback(long handle);
+};
\ No newline at end of file
diff --git a/third_party/blink/renderer/modules/video_raf/idls.gni b/third_party/blink/renderer/modules/video_rvfc/idls.gni
similarity index 84%
rename from third_party/blink/renderer/modules/video_raf/idls.gni
rename to third_party/blink/renderer/modules/video_rvfc/idls.gni
index b250a9aa0..5590aab1 100644
--- a/third_party/blink/renderer/modules/video_raf/idls.gni
+++ b/third_party/blink/renderer/modules/video_rvfc/idls.gni
@@ -7,4 +7,4 @@
 modules_dictionary_idl_files = [ "video_frame_metadata.idl" ]
 
 modules_dependency_idl_files =
-    [ "html_video_element_video_request_animation_frame.idl" ]
+    [ "html_video_element_request_video_frame_callback.idl" ]
diff --git a/third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl.cc b/third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl.cc
similarity index 74%
rename from third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl.cc
rename to third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl.cc
index 6109b398..0b25340 100644
--- a/third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl.cc
+++ b/third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl.h"
+#include "third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl.h"
 
 #include <memory>
 #include <utility>
@@ -15,7 +15,7 @@
 #include "third_party/blink/renderer/core/loader/document_loader.h"
 #include "third_party/blink/renderer/core/timing/performance.h"
 #include "third_party/blink/renderer/core/timing/time_clamper.h"
-#include "third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection.h"
+#include "third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 
 namespace blink {
@@ -38,21 +38,21 @@
 
 }  // namespace
 
-VideoRequestAnimationFrameImpl::VideoRequestAnimationFrameImpl(
+VideoFrameCallbackRequesterImpl::VideoFrameCallbackRequesterImpl(
     HTMLVideoElement& element)
-    : VideoRequestAnimationFrame(element),
+    : VideoFrameCallbackRequester(element),
       callback_collection_(
           MakeGarbageCollected<VideoFrameRequestCallbackCollection>(
               element.GetExecutionContext())) {}
 
 // static
-VideoRequestAnimationFrameImpl& VideoRequestAnimationFrameImpl::From(
+VideoFrameCallbackRequesterImpl& VideoFrameCallbackRequesterImpl::From(
     HTMLVideoElement& element) {
-  VideoRequestAnimationFrameImpl* supplement =
-      Supplement<HTMLVideoElement>::From<VideoRequestAnimationFrameImpl>(
+  VideoFrameCallbackRequesterImpl* supplement =
+      Supplement<HTMLVideoElement>::From<VideoFrameCallbackRequesterImpl>(
           element);
   if (!supplement) {
-    supplement = MakeGarbageCollected<VideoRequestAnimationFrameImpl>(element);
+    supplement = MakeGarbageCollected<VideoFrameCallbackRequesterImpl>(element);
     Supplement<HTMLVideoElement>::ProvideTo(element, supplement);
   }
 
@@ -60,30 +60,30 @@
 }
 
 // static
-int VideoRequestAnimationFrameImpl::requestAnimationFrame(
+int VideoFrameCallbackRequesterImpl::requestVideoFrameCallback(
     HTMLVideoElement& element,
     V8VideoFrameRequestCallback* callback) {
-  return VideoRequestAnimationFrameImpl::From(element).requestAnimationFrame(
-      callback);
+  return VideoFrameCallbackRequesterImpl::From(element)
+      .requestVideoFrameCallback(callback);
 }
 
 // static
-void VideoRequestAnimationFrameImpl::cancelAnimationFrame(
+void VideoFrameCallbackRequesterImpl::cancelVideoFrameCallback(
     HTMLVideoElement& element,
     int callback_id) {
-  VideoRequestAnimationFrameImpl::From(element).cancelAnimationFrame(
+  VideoFrameCallbackRequesterImpl::From(element).cancelVideoFrameCallback(
       callback_id);
 }
 
-void VideoRequestAnimationFrameImpl::OnWebMediaPlayerCreated() {
-  DCHECK(RuntimeEnabledFeatures::VideoRequestAnimationFrameEnabled());
+void VideoFrameCallbackRequesterImpl::OnWebMediaPlayerCreated() {
+  DCHECK(RuntimeEnabledFeatures::RequestVideoFrameCallbackEnabled());
   if (!callback_collection_->IsEmpty())
-    GetSupplementable()->GetWebMediaPlayer()->RequestAnimationFrame();
+    GetSupplementable()->GetWebMediaPlayer()->RequestVideoFrameCallback();
 }
 
-void VideoRequestAnimationFrameImpl::ScheduleCallbackExecution() {
+void VideoFrameCallbackRequesterImpl::ScheduleCallbackExecution() {
   TRACE_EVENT1("blink",
-               "VideoRequestAnimationFrameImpl::ScheduleCallbackExecution",
+               "VideoFrameCallbackRequesterImpl::ScheduleCallbackExecution",
                "did_schedule", !pending_execution_);
 
   if (pending_execution_)
@@ -93,15 +93,15 @@
   GetSupplementable()
       ->GetDocument()
       .GetScriptedAnimationController()
-      .ScheduleVideoRafExecution(
-          WTF::Bind(&VideoRequestAnimationFrameImpl::OnRenderingSteps,
+      .ScheduleVideoFrameCallbacksExecution(
+          WTF::Bind(&VideoFrameCallbackRequesterImpl::OnRenderingSteps,
                     WrapWeakPersistent(this)));
 }
 
-void VideoRequestAnimationFrameImpl::OnRequestAnimationFrame() {
-  DCHECK(RuntimeEnabledFeatures::VideoRequestAnimationFrameEnabled());
+void VideoFrameCallbackRequesterImpl::OnRequestVideoFrameCallback() {
+  DCHECK(RuntimeEnabledFeatures::RequestVideoFrameCallbackEnabled());
   TRACE_EVENT1("blink",
-               "VideoRequestAnimationFrameImpl::OnRequestAnimationFrame",
+               "VideoFrameCallbackRequesterImpl::OnRequestVideoFrameCallback",
                "has_callbacks", !callback_collection_->IsEmpty());
 
   // Skip this work if there are no registered callbacks.
@@ -111,12 +111,12 @@
   ScheduleCallbackExecution();
 }
 
-void VideoRequestAnimationFrameImpl::ExecuteFrameCallbacks(
+void VideoFrameCallbackRequesterImpl::ExecuteVideoFrameCallbacks(
     double high_res_now_ms,
     std::unique_ptr<WebMediaPlayer::VideoFramePresentationMetadata>
         frame_metadata) {
   TRACE_EVENT0("blink",
-               "VideoRequestAnimationFrameImpl::ExecuteFrameCallbacks");
+               "VideoFrameCallbackRequesterImpl::ExecuteVideoFrameCallbacks");
 
   last_presented_frames_ = frame_metadata->presented_frames;
 
@@ -171,9 +171,9 @@
   callback_collection_->ExecuteFrameCallbacks(high_res_now_ms, metadata);
 }
 
-void VideoRequestAnimationFrameImpl::OnRenderingSteps(double high_res_now_ms) {
+void VideoFrameCallbackRequesterImpl::OnRenderingSteps(double high_res_now_ms) {
   DCHECK(pending_execution_);
-  TRACE_EVENT1("blink", "VideoRequestAnimationFrameImpl::OnRenderingSteps",
+  TRACE_EVENT1("blink", "VideoFrameCallbackRequesterImpl::OnRenderingSteps",
                "has_callbacks", !callback_collection_->IsEmpty());
 
   pending_execution_ = false;
@@ -197,13 +197,13 @@
     ++consecutive_stale_frames_;
   } else {
     consecutive_stale_frames_ = 0;
-    ExecuteFrameCallbacks(high_res_now_ms, std::move(metadata));
+    ExecuteVideoFrameCallbacks(high_res_now_ms, std::move(metadata));
   }
 
   // If the video's frame rate is relatively close to the screen's refresh rate
   // (or brower's current frame rate), schedule ourselves immediately.
   // Otherwise, jittering and thread hopping means that the call to
-  // OnRequestAnimationFrame() would barely miss the rendering steps, and we
+  // OnRequestVideoFrameCallback() would barely miss the rendering steps, and we
   // would miss a frame.
   // Also check |consecutive_stale_frames_| to make sure we don't schedule
   // executions when paused, or in other scenarios where potentially scheduling
@@ -215,14 +215,14 @@
 }
 
 // static
-double VideoRequestAnimationFrameImpl::GetClampedTimeInMillis(
+double VideoFrameCallbackRequesterImpl::GetClampedTimeInMillis(
     base::TimeDelta time) {
   constexpr double kSecondsToMillis = 1000.0;
   return Performance::ClampTimeResolution(time.InSecondsF()) * kSecondsToMillis;
 }
 
 // static
-double VideoRequestAnimationFrameImpl::GetCoarseClampedTimeInSeconds(
+double VideoFrameCallbackRequesterImpl::GetCoarseClampedTimeInSeconds(
     base::TimeDelta time) {
   constexpr double kCoarseResolutionInSeconds = 100e-6;
   // Add this assert, in case TimeClamper's resolution were to change to be
@@ -236,13 +236,13 @@
   return clamped_time;
 }
 
-int VideoRequestAnimationFrameImpl::requestAnimationFrame(
+int VideoFrameCallbackRequesterImpl::requestVideoFrameCallback(
     V8VideoFrameRequestCallback* callback) {
   TRACE_EVENT0("blink",
-               "VideoRequestAnimationFrameImpl::requestAnimationFrame");
+               "VideoFrameCallbackRequesterImpl::requestVideoFrameCallback");
 
   if (auto* player = GetSupplementable()->GetWebMediaPlayer())
-    player->RequestAnimationFrame();
+    player->RequestVideoFrameCallback();
 
   auto* frame_callback = MakeGarbageCollected<
       VideoFrameRequestCallbackCollection::V8VideoFrameCallback>(callback);
@@ -250,18 +250,18 @@
   return callback_collection_->RegisterFrameCallback(frame_callback);
 }
 
-void VideoRequestAnimationFrameImpl::RegisterCallbackForTest(
+void VideoFrameCallbackRequesterImpl::RegisterCallbackForTest(
     VideoFrameRequestCallbackCollection::VideoFrameCallback* callback) {
   pending_execution_ = true;
 
   callback_collection_->RegisterFrameCallback(callback);
 }
 
-void VideoRequestAnimationFrameImpl::cancelAnimationFrame(int id) {
+void VideoFrameCallbackRequesterImpl::cancelVideoFrameCallback(int id) {
   callback_collection_->CancelFrameCallback(id);
 }
 
-void VideoRequestAnimationFrameImpl::Trace(Visitor* visitor) {
+void VideoFrameCallbackRequesterImpl::Trace(Visitor* visitor) {
   visitor->Trace(callback_collection_);
   Supplement<HTMLVideoElement>::Trace(visitor);
 }
diff --git a/third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl.h b/third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl.h
similarity index 62%
rename from third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl.h
rename to third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl.h
index 4332223..b926f645 100644
--- a/third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl.h
+++ b/third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RAF_VIDEO_REQUEST_ANIMATION_FRAME_IMPL_H_
-#define THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RAF_VIDEO_REQUEST_ANIMATION_FRAME_IMPL_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RVFC_VIDEO_FRAME_CALLBACK_REQUESTER_IMPL_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RVFC_VIDEO_FRAME_CALLBACK_REQUESTER_IMPL_H_
 
 #include "third_party/blink/renderer/core/html/media/html_video_element.h"
-#include "third_party/blink/renderer/core/html/media/video_request_animation_frame.h"
+#include "third_party/blink/renderer/core/html/media/video_frame_callback_requester.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
-#include "third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection.h"
+#include "third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/supplementable.h"
 
@@ -16,44 +16,44 @@
 
 class HTMLVideoElement;
 
-// Implementation of the <video>.requestAnimationFrame() API.
-// Extends HTMLVideoElement via the VideoRequestAnimationFrame interface.
-class MODULES_EXPORT VideoRequestAnimationFrameImpl final
-    : public VideoRequestAnimationFrame {
-  USING_GARBAGE_COLLECTED_MIXIN(VideoRequestAnimationFrameImpl);
+// Implementation of the <video>.requestVideoFrameCallback() API.
+// Extends HTMLVideoElement via the VideoFrameCallbackRequester interface.
+class MODULES_EXPORT VideoFrameCallbackRequesterImpl final
+    : public VideoFrameCallbackRequester {
+  USING_GARBAGE_COLLECTED_MIXIN(VideoFrameCallbackRequesterImpl);
 
  public:
-  static VideoRequestAnimationFrameImpl& From(HTMLVideoElement&);
+  static VideoFrameCallbackRequesterImpl& From(HTMLVideoElement&);
 
   // Web API entry points for requestAnimationFrame().
-  static int requestAnimationFrame(HTMLVideoElement&,
-                                   V8VideoFrameRequestCallback*);
-  static void cancelAnimationFrame(HTMLVideoElement&, int);
+  static int requestVideoFrameCallback(HTMLVideoElement&,
+                                       V8VideoFrameRequestCallback*);
+  static void cancelVideoFrameCallback(HTMLVideoElement&, int);
 
-  explicit VideoRequestAnimationFrameImpl(HTMLVideoElement&);
-  ~VideoRequestAnimationFrameImpl() override = default;
+  explicit VideoFrameCallbackRequesterImpl(HTMLVideoElement&);
+  ~VideoFrameCallbackRequesterImpl() override = default;
 
   void Trace(Visitor*) override;
 
-  int requestAnimationFrame(V8VideoFrameRequestCallback*);
-  void cancelAnimationFrame(int);
+  int requestVideoFrameCallback(V8VideoFrameRequestCallback*);
+  void cancelVideoFrameCallback(int);
 
   void OnWebMediaPlayerCreated() override;
-  void OnRequestAnimationFrame() override;
+  void OnRequestVideoFrameCallback() override;
 
   // Called by ScriptedAnimationController as part of the rendering steps,
   // right before the execution of window.rAF callbacks.
   void OnRenderingSteps(double high_res_now_ms);
 
  private:
-  friend class VideoRequestAnimationFrameImplTest;
+  friend class VideoFrameCallbackRequesterImplTest;
 
   // Utility functions to limit the clock resolution of fields, for security
   // reasons.
   static double GetClampedTimeInMillis(base::TimeDelta time);
   static double GetCoarseClampedTimeInSeconds(base::TimeDelta time);
 
-  void ExecuteFrameCallbacks(
+  void ExecuteVideoFrameCallbacks(
       double high_res_now_ms,
       std::unique_ptr<WebMediaPlayer::VideoFramePresentationMetadata>);
 
@@ -85,9 +85,9 @@
 
   Member<VideoFrameRequestCallbackCollection> callback_collection_;
 
-  DISALLOW_COPY_AND_ASSIGN(VideoRequestAnimationFrameImpl);
+  DISALLOW_COPY_AND_ASSIGN(VideoFrameCallbackRequesterImpl);
 };
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RAF_VIDEO_REQUEST_ANIMATION_FRAME_IMPL_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RVFC_VIDEO_FRAME_CALLBACK_REQUESTER_IMPL_H_
diff --git a/third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl_test.cc b/third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl_test.cc
similarity index 82%
rename from third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl_test.cc
rename to third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl_test.cc
index e919c1c..e7c3fe02 100644
--- a/third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl_test.cc
+++ b/third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl_test.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "third_party/blink/renderer/modules/video_raf/video_request_animation_frame_impl.h"
+#include "third_party/blink/renderer/modules/video_rvfc/video_frame_callback_requester_impl.h"
 
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -32,7 +32,7 @@
 
 class MockWebMediaPlayer : public EmptyWebMediaPlayer {
  public:
-  MOCK_METHOD0(RequestAnimationFrame, void());
+  MOCK_METHOD0(RequestVideoFrameCallback, void());
   MOCK_METHOD0(GetVideoFramePresentationMetadata,
                std::unique_ptr<VideoFramePresentationMetadata>());
 };
@@ -118,12 +118,12 @@
 
 // Helper class that compares the parameters used when invoking a callback, with
 // the reference parameters we expect.
-class VideoRafParameterVerifierCallback
+class VfcRequesterParameterVerifierCallback
     : public VideoFrameRequestCallbackCollection::VideoFrameCallback {
  public:
-  explicit VideoRafParameterVerifierCallback(DocumentLoadTiming& timing)
+  explicit VfcRequesterParameterVerifierCallback(DocumentLoadTiming& timing)
       : timing_(timing) {}
-  ~VideoRafParameterVerifierCallback() override = default;
+  ~VfcRequesterParameterVerifierCallback() override = default;
 
   void Invoke(double now, const VideoFrameMetadata* metadata) override {
     was_invoked_ = true;
@@ -206,12 +206,12 @@
 
 }  // namespace
 
-class VideoRequestAnimationFrameImplTest
+class VideoFrameCallbackRequesterImplTest
     : public PageTestBase,
-      private ScopedVideoRequestAnimationFrameForTest {
+      private ScopedRequestVideoFrameCallbackForTest {
  public:
-  VideoRequestAnimationFrameImplTest()
-      : ScopedVideoRequestAnimationFrameForTest(true) {}
+  VideoFrameCallbackRequesterImplTest()
+      : ScopedRequestVideoFrameCallbackForTest(true) {}
 
   virtual void SetUpWebMediaPlayer() {
     auto mock_media_player = std::make_unique<MockWebMediaPlayer>();
@@ -237,13 +237,13 @@
 
   MockWebMediaPlayer* media_player() { return media_player_; }
 
-  VideoRequestAnimationFrameImpl& video_raf() {
-    return VideoRequestAnimationFrameImpl::From(*video());
+  VideoFrameCallbackRequesterImpl& vfc_requester() {
+    return VideoFrameCallbackRequesterImpl::From(*video());
   }
 
-  void SimulateFramePresented() { video_->OnRequestAnimationFrame(); }
+  void SimulateFramePresented() { video_->OnRequestVideoFrameCallback(); }
 
-  void SimulateAnimationFrame(base::TimeTicks now) {
+  void SimulateVideoFrameCallback(base::TimeTicks now) {
     GetDocument().GetScriptedAnimationController().ServiceScriptedAnimations(
         now);
   }
@@ -252,8 +252,9 @@
     return V8VideoFrameRequestCallback::Create(function->Bind());
   }
 
-  void RegisterCallbackDirectly(VideoRafParameterVerifierCallback* callback) {
-    video_raf().RegisterCallbackForTest(callback);
+  void RegisterCallbackDirectly(
+      VfcRequesterParameterVerifierCallback* callback) {
+    vfc_requester().RegisterCallbackForTest(callback);
   }
 
  private:
@@ -263,8 +264,8 @@
   MockWebMediaPlayer* media_player_;
 };
 
-class VideoRequestAnimationFrameImplNullMediaPlayerTest
-    : public VideoRequestAnimationFrameImplTest {
+class VideoFrameCallbackRequesterImplNullMediaPlayerTest
+    : public VideoFrameCallbackRequesterImplTest {
  public:
   void SetUpWebMediaPlayer() override {
     SetupPageWithClients(nullptr,
@@ -275,14 +276,14 @@
   }
 };
 
-TEST_F(VideoRequestAnimationFrameImplTest, VerifyRequestAnimationFrame) {
+TEST_F(VideoFrameCallbackRequesterImplTest, VerifyRequestVideoFrameCallback) {
   V8TestingScope scope;
 
   auto* function = MockFunction::Create(scope.GetScriptState());
 
   // Queuing up a video.rAF call should propagate to the WebMediaPlayer.
-  EXPECT_CALL(*media_player(), RequestAnimationFrame()).Times(1);
-  video_raf().requestAnimationFrame(GetCallback(function));
+  EXPECT_CALL(*media_player(), RequestVideoFrameCallback()).Times(1);
+  vfc_requester().requestVideoFrameCallback(GetCallback(function));
 
   testing::Mock::VerifyAndClear(media_player());
 
@@ -299,52 +300,54 @@
   EXPECT_CALL(*function, Call(_)).Times(1);
   EXPECT_CALL(*media_player(), GetVideoFramePresentationMetadata())
       .WillOnce(Return(ByMove(std::move(metadata))));
-  SimulateAnimationFrame(base::TimeTicks::Now());
+  SimulateVideoFrameCallback(base::TimeTicks::Now());
 
   testing::Mock::VerifyAndClear(function);
 }
 
-TEST_F(VideoRequestAnimationFrameImplTest,
-       VerifyCancelAnimationFrame_BeforePresentedFrame) {
+TEST_F(VideoFrameCallbackRequesterImplTest,
+       VerifyCancelVideoFrameCallback_BeforePresentedFrame) {
   V8TestingScope scope;
 
   auto* function = MockFunction::Create(scope.GetScriptState());
 
   // Queue and cancel a request before a frame is presented.
-  int callback_id = video_raf().requestAnimationFrame(GetCallback(function));
-  video_raf().cancelAnimationFrame(callback_id);
+  int callback_id =
+      vfc_requester().requestVideoFrameCallback(GetCallback(function));
+  vfc_requester().cancelVideoFrameCallback(callback_id);
 
   EXPECT_CALL(*function, Call(_)).Times(0);
   SimulateFramePresented();
-  SimulateAnimationFrame(base::TimeTicks::Now());
+  SimulateVideoFrameCallback(base::TimeTicks::Now());
 
   testing::Mock::VerifyAndClear(function);
 }
 
-TEST_F(VideoRequestAnimationFrameImplTest,
-       VerifyCancelAnimationFrame_AfterPresentedFrame) {
+TEST_F(VideoFrameCallbackRequesterImplTest,
+       VerifyCancelVideoFrameCallback_AfterPresentedFrame) {
   V8TestingScope scope;
 
   auto* function = MockFunction::Create(scope.GetScriptState());
 
   // Queue a request.
-  int callback_id = video_raf().requestAnimationFrame(GetCallback(function));
+  int callback_id =
+      vfc_requester().requestVideoFrameCallback(GetCallback(function));
   SimulateFramePresented();
 
   // The callback should be scheduled for execution, but not yet run.
   EXPECT_CALL(*function, Call(_)).Times(0);
-  video_raf().cancelAnimationFrame(callback_id);
-  SimulateAnimationFrame(base::TimeTicks::Now());
+  vfc_requester().cancelVideoFrameCallback(callback_id);
+  SimulateVideoFrameCallback(base::TimeTicks::Now());
 
   testing::Mock::VerifyAndClear(function);
 }
 
-TEST_F(VideoRequestAnimationFrameImplTest, VerifyParameters) {
+TEST_F(VideoFrameCallbackRequesterImplTest, VerifyParameters) {
   auto timing = GetDocument().Loader()->GetTiming();
   MetadataHelper::InitializeFields(timing.ReferenceMonotonicTime());
 
   auto* callback =
-      MakeGarbageCollected<VideoRafParameterVerifierCallback>(timing);
+      MakeGarbageCollected<VfcRequesterParameterVerifierCallback>(timing);
 
   // Register the non-V8 callback.
   RegisterCallbackDirectly(callback);
@@ -358,7 +361,7 @@
 
   // Run the callbacks directly, since they weren't scheduled to be run by the
   // ScriptedAnimationController.
-  video_raf().OnRenderingSteps(now_ms);
+  vfc_requester().OnRenderingSteps(now_ms);
 
   EXPECT_EQ(callback->last_now(), now_ms);
   EXPECT_TRUE(callback->was_invoked());
@@ -366,15 +369,15 @@
   testing::Mock::VerifyAndClear(media_player());
 }
 
-TEST_F(VideoRequestAnimationFrameImplNullMediaPlayerTest, VerifyNoCrash) {
+TEST_F(VideoFrameCallbackRequesterImplNullMediaPlayerTest, VerifyNoCrash) {
   V8TestingScope scope;
 
   auto* function = MockFunction::Create(scope.GetScriptState());
 
-  video_raf().requestAnimationFrame(GetCallback(function));
+  vfc_requester().requestVideoFrameCallback(GetCallback(function));
 
   SimulateFramePresented();
-  SimulateAnimationFrame(base::TimeTicks::Now());
+  SimulateVideoFrameCallback(base::TimeTicks::Now());
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/video_raf/video_frame_metadata.idl b/third_party/blink/renderer/modules/video_rvfc/video_frame_metadata.idl
similarity index 100%
rename from third_party/blink/renderer/modules/video_raf/video_frame_metadata.idl
rename to third_party/blink/renderer/modules/video_rvfc/video_frame_metadata.idl
diff --git a/third_party/blink/renderer/modules/video_raf/video_frame_request_callback.idl b/third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback.idl
similarity index 100%
rename from third_party/blink/renderer/modules/video_raf/video_frame_request_callback.idl
rename to third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback.idl
diff --git a/third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection.cc b/third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection.cc
similarity index 96%
rename from third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection.cc
rename to third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection.cc
index a904eec1..b9676a22 100644
--- a/third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection.cc
+++ b/third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection.h"
+#include "third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection.h"
 
 #include "third_party/blink/renderer/core/inspector/inspector_trace_events.h"
 #include "third_party/blink/renderer/core/probe/core_probes.h"
diff --git a/third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection.h b/third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection.h
similarity index 92%
rename from third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection.h
rename to third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection.h
index dd1c111..2cffc39 100644
--- a/third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection.h
+++ b/third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RAF_VIDEO_FRAME_REQUEST_CALLBACK_COLLECTION_H_
-#define THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RAF_VIDEO_FRAME_REQUEST_CALLBACK_COLLECTION_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RVFC_VIDEO_FRAME_REQUEST_CALLBACK_COLLECTION_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RVFC_VIDEO_FRAME_REQUEST_CALLBACK_COLLECTION_H_
 
 #include "third_party/blink/renderer/bindings/modules/v8/v8_video_frame_metadata.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_video_frame_request_callback.h"
@@ -104,4 +104,4 @@
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RAF_VIDEO_FRAME_REQUEST_CALLBACK_COLLECTION_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_VIDEO_RVFC_VIDEO_FRAME_REQUEST_CALLBACK_COLLECTION_H_
diff --git a/third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection_test.cc b/third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection_test.cc
similarity index 98%
rename from third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection_test.cc
rename to third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection_test.cc
index 34a71ef..df0b3e72 100644
--- a/third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection_test.cc
+++ b/third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection_test.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "third_party/blink/renderer/modules/video_raf/video_frame_request_callback_collection.h"
+#include "third_party/blink/renderer/modules/video_rvfc/video_frame_request_callback_collection.h"
 
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/third_party/blink/renderer/modules/webaudio/media_stream_audio_source_node.idl b/third_party/blink/renderer/modules/webaudio/media_stream_audio_source_node.idl
index c625691..9ab5e73f 100644
--- a/third_party/blink/renderer/modules/webaudio/media_stream_audio_source_node.idl
+++ b/third_party/blink/renderer/modules/webaudio/media_stream_audio_source_node.idl
@@ -25,7 +25,8 @@
 
 // See https://webaudio.github.io/web-audio-api/#mediastreamaudiosourcenode
 [
-    ActiveScriptWrappable
+    ActiveScriptWrappable,
+    Exposed=Window
 ] interface MediaStreamAudioSourceNode : AudioNode {
   [RaisesException, Measure] constructor(AudioContext context, MediaStreamAudioSourceOptions options);
   [SameObject, ImplementedAs=getMediaStream] readonly attribute MediaStream mediaStream;
diff --git a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.idl b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.idl
index b2eff05..654b399 100644
--- a/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.idl
+++ b/third_party/blink/renderer/modules/webcodecs/encoded_video_chunk.idl
@@ -8,7 +8,8 @@
 };
 
 [
-   RuntimeEnabled=WebCodecs
+    Exposed=Window,
+    RuntimeEnabled=WebCodecs
 ] interface EncodedVideoChunk {
   constructor(EncodedVideoChunkType type, unsigned long long timestamp, BufferSource data);
   constructor(EncodedVideoChunkType type, unsigned long long timestamp, unsigned long long duration, BufferSource data);
@@ -17,4 +18,4 @@
   readonly attribute unsigned long long timestamp;  // microseconds
   readonly attribute unsigned long long? duration;  // microseconds
   readonly attribute ArrayBuffer data;
-};
\ No newline at end of file
+};
diff --git a/third_party/blink/renderer/modules/webcodecs/video_decoder.idl b/third_party/blink/renderer/modules/webcodecs/video_decoder.idl
index 8d93050..863cf86 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_decoder.idl
+++ b/third_party/blink/renderer/modules/webcodecs/video_decoder.idl
@@ -11,8 +11,10 @@
 // TODO(sandersd): Specify a tune() implementation for changing decoder
 // parameters (separate from stream parameters). This is more important for
 // encoders.
-[RuntimeEnabled=WebCodecs]
-interface VideoDecoder {
+[
+    Exposed=Window,
+    RuntimeEnabled=WebCodecs
+] interface VideoDecoder {
   // |init| includes an |output| callback for emitting VideoFrames and an
   // |error| callback for emitting decode errors.
   //
diff --git a/third_party/blink/renderer/modules/webcodecs/video_encoder.idl b/third_party/blink/renderer/modules/webcodecs/video_encoder.idl
index 34611ed..47e9bc4 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_encoder.idl
+++ b/third_party/blink/renderer/modules/webcodecs/video_encoder.idl
@@ -4,8 +4,10 @@
 
 // https://github.com/WICG/web-codecs
 
-[RuntimeEnabled=WebCodecs]
-interface VideoEncoder {
+[
+    Exposed=Window,
+    RuntimeEnabled=WebCodecs
+] interface VideoEncoder {
     [CallWith=ScriptState, RaisesException]
     constructor(VideoEncoderInit init);
 
@@ -17,4 +19,4 @@
     Promise<void> tune(VideoEncoderTuneOptions options);
 
     Promise<void> close();
-};
\ No newline at end of file
+};
diff --git a/third_party/blink/renderer/modules/webcodecs/video_frame.idl b/third_party/blink/renderer/modules/webcodecs/video_frame.idl
index 4bbb1aac..aefb0b0 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_frame.idl
+++ b/third_party/blink/renderer/modules/webcodecs/video_frame.idl
@@ -4,6 +4,7 @@
 
 // https://github.com/WICG/web-codecs
 [
+    Exposed=Window,
     RuntimeEnabled=WebCodecs
 ] interface VideoFrame {
   [RaisesException] constructor(VideoFrameInit init, ImageBitmap source);
@@ -18,4 +19,4 @@
 
   readonly attribute unsigned long visibleWidth;
   readonly attribute unsigned long visibleHeight;
-};
\ No newline at end of file
+};
diff --git a/third_party/blink/renderer/modules/webcodecs/video_track_reader.idl b/third_party/blink/renderer/modules/webcodecs/video_track_reader.idl
index bb5aded..bb98fde5 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_track_reader.idl
+++ b/third_party/blink/renderer/modules/webcodecs/video_track_reader.idl
@@ -5,9 +5,10 @@
 // See spec in developement at https://github.com/WICG/web-codecs/blob/master/index.bs
 // and https://github.com/WICG/web-codecs/blob/master/explainer.md.
 [
+    Exposed=Window,
     RuntimeEnabled=WebCodecs
 ] interface VideoTrackReader {
   [CallWith=ScriptState, RaisesException]
   constructor(MediaStreamTrack track);
   readonly attribute ReadableStream readable; // of VideoFrame
-};
\ No newline at end of file
+};
diff --git a/third_party/blink/renderer/modules/webcodecs/video_track_writer.idl b/third_party/blink/renderer/modules/webcodecs/video_track_writer.idl
index aa5d3fd1..d0f6c458 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_track_writer.idl
+++ b/third_party/blink/renderer/modules/webcodecs/video_track_writer.idl
@@ -5,10 +5,11 @@
 // See spec in developement at https://github.com/WICG/web-codecs/blob/master/index.bs
 // and https://github.com/WICG/web-codecs/blob/master/explainer.md.
 [
+    Exposed=Window,
     RuntimeEnabled=WebCodecs
 ] interface VideoTrackWriter {
   [CallWith=ScriptState, RaisesException]
   constructor(VideoTrackWriterParameters params);
   readonly attribute WritableStream writable; // of VideoFrame
   readonly attribute MediaStreamTrack track;
-};
\ No newline at end of file
+};
diff --git a/third_party/blink/renderer/modules/webgl/webgl_context_event.idl b/third_party/blink/renderer/modules/webgl/webgl_context_event.idl
index e7bf8202..a96926f 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_context_event.idl
+++ b/third_party/blink/renderer/modules/webgl/webgl_context_event.idl
@@ -25,7 +25,9 @@
 
 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15
 
-interface WebGLContextEvent : Event {
+[
+    Exposed=Window
+] interface WebGLContextEvent : Event {
     constructor(DOMString type, optional WebGLContextEventInit eventInit = {});
     readonly attribute DOMString statusMessage;
 };
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device_lost_info.idl b/third_party/blink/renderer/modules/webgpu/gpu_device_lost_info.idl
index 44fd3a1..210f4cf 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_device_lost_info.idl
+++ b/third_party/blink/renderer/modules/webgpu/gpu_device_lost_info.idl
@@ -5,6 +5,7 @@
 // https://gpuweb.github.io/gpuweb/
 
 [
+    Exposed=Window,
     RuntimeEnabled=WebGPU
 ] interface GPUDeviceLostInfo {
     readonly attribute DOMString message;
diff --git a/third_party/blink/renderer/modules/webmidi/midi_access.idl b/third_party/blink/renderer/modules/webmidi/midi_access.idl
index 6188bb9..60c7c44f 100644
--- a/third_party/blink/renderer/modules/webmidi/midi_access.idl
+++ b/third_party/blink/renderer/modules/webmidi/midi_access.idl
@@ -32,6 +32,7 @@
 
 [
     ActiveScriptWrappable,
+    Exposed=Window,
     SecureContext
 ] interface MIDIAccess : EventTarget {
     readonly attribute MIDIInputMap inputs;
diff --git a/third_party/blink/renderer/modules/webmidi/midi_connection_event.idl b/third_party/blink/renderer/modules/webmidi/midi_connection_event.idl
index 8627cbd..fb46bf28 100644
--- a/third_party/blink/renderer/modules/webmidi/midi_connection_event.idl
+++ b/third_party/blink/renderer/modules/webmidi/midi_connection_event.idl
@@ -31,6 +31,7 @@
 // https://webaudio.github.io/web-midi-api/#MIDIConnectionEvent
 
 [
+    Exposed=Window,
     SecureContext
 ] interface MIDIConnectionEvent : Event {
     constructor(DOMString type, optional MIDIConnectionEventInit eventInitDict = {});
diff --git a/third_party/blink/renderer/modules/webmidi/midi_input.idl b/third_party/blink/renderer/modules/webmidi/midi_input.idl
index 57accaf..24ed45d3 100644
--- a/third_party/blink/renderer/modules/webmidi/midi_input.idl
+++ b/third_party/blink/renderer/modules/webmidi/midi_input.idl
@@ -31,6 +31,7 @@
 // https://webaudio.github.io/web-midi-api/#MIDIInput
 
 [
+    Exposed=Window,
     SecureContext
 ] interface MIDIInput : MIDIPort {
     attribute EventHandler onmidimessage;
diff --git a/third_party/blink/renderer/modules/webmidi/midi_input_map.idl b/third_party/blink/renderer/modules/webmidi/midi_input_map.idl
index fa5dca6a1..1ddbd870 100644
--- a/third_party/blink/renderer/modules/webmidi/midi_input_map.idl
+++ b/third_party/blink/renderer/modules/webmidi/midi_input_map.idl
@@ -5,6 +5,7 @@
 // https://webaudio.github.io/web-midi-api/#MIDIInput
 
 [
+    Exposed=Window,
     SecureContext
 ] interface MIDIInputMap {
     readonly maplike<DOMString, MIDIInput>;
diff --git a/third_party/blink/renderer/modules/webmidi/midi_message_event.idl b/third_party/blink/renderer/modules/webmidi/midi_message_event.idl
index 222b4ce..4ee95186 100644
--- a/third_party/blink/renderer/modules/webmidi/midi_message_event.idl
+++ b/third_party/blink/renderer/modules/webmidi/midi_message_event.idl
@@ -31,6 +31,7 @@
 // https://webaudio.github.io/web-midi-api/#MIDIMessageEvent
 
 [
+    Exposed=Window,
     SecureContext
 ] interface MIDIMessageEvent : Event {
     constructor(DOMString type, optional MIDIMessageEventInit eventInitDict = {});
diff --git a/third_party/blink/renderer/modules/webmidi/midi_output.idl b/third_party/blink/renderer/modules/webmidi/midi_output.idl
index e81d810..f8df338 100644
--- a/third_party/blink/renderer/modules/webmidi/midi_output.idl
+++ b/third_party/blink/renderer/modules/webmidi/midi_output.idl
@@ -31,6 +31,7 @@
 // https://webaudio.github.io/web-midi-api/#MIDIOutput
 
 [
+    Exposed=Window,
     SecureContext
 ] interface MIDIOutput : MIDIPort {
     // TODO(toyoshim): implement void clear()
diff --git a/third_party/blink/renderer/modules/webmidi/midi_output_map.idl b/third_party/blink/renderer/modules/webmidi/midi_output_map.idl
index 267c767..bb9207c 100644
--- a/third_party/blink/renderer/modules/webmidi/midi_output_map.idl
+++ b/third_party/blink/renderer/modules/webmidi/midi_output_map.idl
@@ -5,6 +5,7 @@
 // https://webaudio.github.io/web-midi-api/#MIDIOutputMap
 
 [
+    Exposed=Window,
     SecureContext
 ] interface MIDIOutputMap {
     readonly maplike<DOMString, MIDIOutput>;
diff --git a/third_party/blink/renderer/modules/webmidi/midi_port.idl b/third_party/blink/renderer/modules/webmidi/midi_port.idl
index 19a2556f..32b34c05 100644
--- a/third_party/blink/renderer/modules/webmidi/midi_port.idl
+++ b/third_party/blink/renderer/modules/webmidi/midi_port.idl
@@ -54,6 +54,7 @@
 
 [
     ActiveScriptWrappable,
+    Exposed=Window,
     SecureContext
 ] interface MIDIPort : EventTarget {
     readonly attribute MIDIPortConnectionState connection;
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.cc b/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.cc
index 47238a19..ba9c850 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.cc
@@ -36,22 +36,45 @@
   }
 
   // webrtc::FrameTransformerInterface
+  // TODO(crbug.com/1065838): Remove the non-ssrc version of the registration
+  // and unregistration methods once WebRTC uses the ssrc version in all cases.
   void RegisterTransformedFrameCallback(
       rtc::scoped_refptr<webrtc::TransformedFrameCallback>
           send_frame_to_sink_callback) override {
     PostCrossThreadTask(
         *main_task_runner_, FROM_HERE,
-        CrossThreadBindOnce(
-            &RTCEncodedVideoStreamTransformer::RegisterTransformedFrameCallback,
-            transformer_, std::move(send_frame_to_sink_callback)));
+        CrossThreadBindOnce(&RTCEncodedVideoStreamTransformer::
+                                RegisterTransformedFrameSinkCallback,
+                            transformer_,
+                            std::move(send_frame_to_sink_callback), 0));
   }
 
   void UnregisterTransformedFrameCallback() override {
     PostCrossThreadTask(
         *main_task_runner_, FROM_HERE,
         CrossThreadBindOnce(&RTCEncodedVideoStreamTransformer::
-                                UnregisterTransformedFrameCallback,
-                            transformer_));
+                                UnregisterTransformedFrameSinkCallback,
+                            transformer_, 0));
+  }
+
+  void RegisterTransformedFrameSinkCallback(
+      rtc::scoped_refptr<webrtc::TransformedFrameCallback>
+          send_frame_to_sink_callback,
+      uint32_t ssrc) override {
+    PostCrossThreadTask(
+        *main_task_runner_, FROM_HERE,
+        CrossThreadBindOnce(&RTCEncodedVideoStreamTransformer::
+                                RegisterTransformedFrameSinkCallback,
+                            transformer_,
+                            std::move(send_frame_to_sink_callback), ssrc));
+  }
+
+  void UnregisterTransformedFrameSinkCallback(uint32_t ssrc) override {
+    PostCrossThreadTask(
+        *main_task_runner_, FROM_HERE,
+        CrossThreadBindOnce(&RTCEncodedVideoStreamTransformer::
+                                UnregisterTransformedFrameSinkCallback,
+                            transformer_, ssrc));
   }
 
   void Transform(
@@ -80,15 +103,28 @@
           weak_factory_.GetWeakPtr(), std::move(main_task_runner));
 }
 
-void RTCEncodedVideoStreamTransformer::RegisterTransformedFrameCallback(
-    rtc::scoped_refptr<webrtc::TransformedFrameCallback> callback) {
+void RTCEncodedVideoStreamTransformer::RegisterTransformedFrameSinkCallback(
+    rtc::scoped_refptr<webrtc::TransformedFrameCallback> callback,
+    uint32_t ssrc) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  send_frame_to_sink_cb_ = callback;
+  for (auto& sink_callback : send_frame_to_sink_callbacks_) {
+    if (sink_callback.first == ssrc) {
+      sink_callback.second = std::move(callback);
+      return;
+    }
+  }
+  send_frame_to_sink_callbacks_.push_back(std::make_pair(ssrc, callback));
 }
 
-void RTCEncodedVideoStreamTransformer::UnregisterTransformedFrameCallback() {
+void RTCEncodedVideoStreamTransformer::UnregisterTransformedFrameSinkCallback(
+    uint32_t ssrc) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  send_frame_to_sink_cb_ = nullptr;
+  for (wtf_size_t i = 0; i < send_frame_to_sink_callbacks_.size(); ++i) {
+    if (send_frame_to_sink_callbacks_[i].first == ssrc) {
+      send_frame_to_sink_callbacks_.EraseAt(i);
+      return;
+    }
+  }
 }
 
 void RTCEncodedVideoStreamTransformer::TransformFrame(
@@ -104,8 +140,20 @@
 void RTCEncodedVideoStreamTransformer::SendFrameToSink(
     std::unique_ptr<webrtc::TransformableVideoFrameInterface> frame) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  if (send_frame_to_sink_cb_)
-    send_frame_to_sink_cb_->OnTransformedFrame(std::move(frame));
+  // TODO(crbug.com/1069275): Remove this section once WebRTC reports ssrc in
+  // all sink callback registrations.
+  if (send_frame_to_sink_callbacks_.size() == 1 &&
+      send_frame_to_sink_callbacks_[0].first == 0) {
+    send_frame_to_sink_callbacks_[0].second->OnTransformedFrame(
+        std::move(frame));
+    return;
+  }
+  for (const auto& sink_callback : send_frame_to_sink_callbacks_) {
+    if (sink_callback.first == frame->GetSsrc()) {
+      sink_callback.second->OnTransformedFrame(std::move(frame));
+      return;
+    }
+  }
 }
 
 void RTCEncodedVideoStreamTransformer::SetTransformerCallback(
@@ -124,9 +172,14 @@
   return !transformer_callback_.is_null();
 }
 
-bool RTCEncodedVideoStreamTransformer::HasTransformedFrameCallback() const {
+bool RTCEncodedVideoStreamTransformer::HasTransformedFrameSinkCallback(
+    uint32_t ssrc) const {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  return !!send_frame_to_sink_cb_;
+  for (const auto& sink_callbacks : send_frame_to_sink_callbacks_) {
+    if (sink_callbacks.first == ssrc)
+      return true;
+  }
+  return false;
 }
 
 rtc::scoped_refptr<webrtc::FrameTransformerInterface>
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.h b/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.h
index f7f2d85b..6da97026 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.h
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.h
@@ -8,12 +8,13 @@
 #include <stdint.h>
 
 #include <memory>
-#include <vector>
+#include <utility>
 
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 #include "third_party/webrtc/api/scoped_refptr.h"
 
 namespace base {
@@ -38,13 +39,17 @@
   // Called by WebRTC to let us know about a callback object to send transformed
   // frames to the WebRTC decoder. Runs on an internal WebRTC thread.
   // The callback can run on any thread.
-  void RegisterTransformedFrameCallback(
-      rtc::scoped_refptr<webrtc::TransformedFrameCallback>);
+  void RegisterTransformedFrameSinkCallback(
+      rtc::scoped_refptr<webrtc::TransformedFrameCallback>,
+      uint32_t ssrc);
 
   // Called by WebRTC to let us know that any reference to the callback object
   // reported by RegisterTransformedFrameCallback() should be released since
   // the callback is no longer useful and is intended for destruction.
-  void UnregisterTransformedFrameCallback();
+  // TODO(crbug.com/1065838): Remove the non-ssrc version once WebRTC uses the
+  // ssrc version in all cases.
+  //   void UnregisterTransformedFrameCallback();
+  void UnregisterTransformedFrameSinkCallback(uint32_t ssrc);
 
   // Called by WebRTC to notify of new untransformed frames from the WebRTC
   // stack. Runs on an internal WebRTC thread.
@@ -67,15 +72,18 @@
   // false otherwise. Must run on the main thread.
   bool HasTransformerCallback() const;
 
-  // Returns true if a webrtc::TransformedFrameCallback is registered.
-  bool HasTransformedFrameCallback() const;
+  // Returns true if a webrtc::TransformedFrameCallback is registered for
+  // the given ssrc.
+  bool HasTransformedFrameSinkCallback(uint32_t ssrc) const;
 
   rtc::scoped_refptr<webrtc::FrameTransformerInterface> Delegate();
 
  private:
   THREAD_CHECKER(thread_checker_);
   rtc::scoped_refptr<webrtc::FrameTransformerInterface> delegate_;
-  rtc::scoped_refptr<webrtc::TransformedFrameCallback> send_frame_to_sink_cb_;
+  Vector<
+      std::pair<uint32_t, rtc::scoped_refptr<webrtc::TransformedFrameCallback>>>
+      send_frame_to_sink_callbacks_;
   TransformerCallback transformer_callback_;
   base::WeakPtrFactory<RTCEncodedVideoStreamTransformer> weak_factory_{this};
 };
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer_test.cc b/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer_test.cc
index 10360de..01f1af1 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer_test.cc
@@ -26,6 +26,9 @@
 
 namespace {
 
+const uint32_t kSSRC = 1;
+const uint32_t kNonexistentSSRC = 0;
+
 class MockWebRtcTransformedFrameCallback
     : public webrtc::TransformedFrameCallback {
  public:
@@ -39,6 +42,31 @@
                void(std::unique_ptr<webrtc::TransformableVideoFrameInterface>));
 };
 
+class FakeVideoFrame : public webrtc::TransformableVideoFrameInterface {
+ public:
+  explicit FakeVideoFrame(uint32_t ssrc) : ssrc_(ssrc) {}
+
+  rtc::ArrayView<const uint8_t> GetData() const override {
+    return rtc::ArrayView<const uint8_t>();
+  }
+
+  // Copies |data| into the owned frame payload data.
+  void SetData(rtc::ArrayView<const uint8_t> data) override {}
+  uint32_t GetTimestamp() const override { return 0; }
+  uint32_t GetSsrc() const override { return ssrc_; }
+  bool IsKeyFrame() const override { return true; }
+  std::vector<uint8_t> GetAdditionalData() const override {
+    return std::vector<uint8_t>();
+  }
+
+ private:
+  uint32_t ssrc_;
+};
+
+std::unique_ptr<webrtc::TransformableVideoFrameInterface> CreateFakeFrame() {
+  return std::make_unique<FakeVideoFrame>(kSSRC);
+}
+
 }  // namespace
 
 class RTCEncodedVideoStreamTransformerTest : public ::testing::Test {
@@ -53,17 +81,24 @@
 
   void SetUp() override {
     EXPECT_FALSE(
-        encoded_video_stream_transformer_.HasTransformedFrameCallback());
-    encoded_video_stream_transformer_.RegisterTransformedFrameCallback(
-        webrtc_callback_);
+        encoded_video_stream_transformer_.HasTransformedFrameSinkCallback(
+            kSSRC));
+    encoded_video_stream_transformer_.RegisterTransformedFrameSinkCallback(
+        webrtc_callback_, kSSRC);
     EXPECT_TRUE(
-        encoded_video_stream_transformer_.HasTransformedFrameCallback());
+        encoded_video_stream_transformer_.HasTransformedFrameSinkCallback(
+            kSSRC));
+    EXPECT_FALSE(
+        encoded_video_stream_transformer_.HasTransformedFrameSinkCallback(
+            kNonexistentSSRC));
   }
 
   void TearDown() override {
-    encoded_video_stream_transformer_.UnregisterTransformedFrameCallback();
+    encoded_video_stream_transformer_.UnregisterTransformedFrameSinkCallback(
+        kSSRC);
     EXPECT_FALSE(
-        encoded_video_stream_transformer_.HasTransformedFrameCallback());
+        encoded_video_stream_transformer_.HasTransformedFrameSinkCallback(
+            kSSRC));
   }
 
  protected:
@@ -92,13 +127,13 @@
       *webrtc_task_runner_, FROM_HERE,
       CrossThreadBindOnce(&webrtc::FrameTransformerInterface::Transform,
                           encoded_video_stream_transformer_.Delegate(),
-                          nullptr));
+                          CreateFakeFrame()));
   task_environment_.RunUntilIdle();
 }
 
 TEST_F(RTCEncodedVideoStreamTransformerTest, TransformerForwardsFrameToWebRTC) {
   EXPECT_CALL(*webrtc_callback_, OnTransformedFrame);
-  encoded_video_stream_transformer_.SendFrameToSink(nullptr);
+  encoded_video_stream_transformer_.SendFrameToSink(CreateFakeFrame());
   task_environment_.RunUntilIdle();
 }
 
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index cbd87d6..fc3988ab 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1450,6 +1450,11 @@
       status: {"Android": "stable", "default": ""},
     },
     {
+      // See https://crbug.com/1012063
+      name: "RequestVideoFrameCallback",
+      status: "experimental",
+    },
+    {
       name: "ResizeObserverUpdates",
       status: "stable",
     },
@@ -1800,11 +1805,6 @@
       status: "stable",
     },
     {
-      // See https://crbug.com/1012063
-      name: "VideoRequestAnimationFrame",
-      status: "experimental",
-    },
-    {
       name: "VideoRotateToFullscreen",
     },
     {
diff --git a/third_party/blink/tools/blinkpy/bindings/.style.yapf b/third_party/blink/tools/blinkpy/bindings/.style.yapf
new file mode 100644
index 0000000..557fa7b
--- /dev/null
+++ b/third_party/blink/tools/blinkpy/bindings/.style.yapf
@@ -0,0 +1,2 @@
+[style]
+based_on_style = pep8
diff --git a/third_party/blink/tools/blinkpy/bindings/bindings_tests.py b/third_party/blink/tools/blinkpy/bindings/bindings_tests.py
index 6db448d8..ca0bbd2 100644
--- a/third_party/blink/tools/blinkpy/bindings/bindings_tests.py
+++ b/third_party/blink/tools/blinkpy/bindings/bindings_tests.py
@@ -44,8 +44,7 @@
 from compute_interfaces_info_overall import (compute_interfaces_info_overall,
                                              interfaces_info)
 from generate_origin_trial_features import generate_origin_trial_features
-from idl_compiler import (generate_bindings,
-                          generate_union_type_containers,
+from idl_compiler import (generate_bindings, generate_union_type_containers,
                           generate_dictionary_impl,
                           generate_callback_function_impl)
 from json5_generator import Json5File
@@ -55,7 +54,6 @@
 from utilities import get_first_interface_name_from_idl
 from utilities import to_snake_case
 
-
 PASS_MESSAGE = 'All tests PASS!'
 FAIL_MESSAGE = """Some tests FAIL!
 To update the reference files, execute:
@@ -114,8 +112,9 @@
         # http://bugs.python.org/issue11406
         idl_paths = []
         for dirpath, _, files in os.walk(directory):
-            idl_paths.extend(os.path.join(dirpath, filename)
-                             for filename in fnmatch.filter(files, '*.idl'))
+            idl_paths.extend(
+                os.path.join(dirpath, filename)
+                for filename in fnmatch.filter(files, '*.idl'))
         return idl_paths
 
     def collect_blink_idl_paths():
@@ -139,7 +138,8 @@
         # To avoid this issue, we need to clear relative_dir here.
         for value in info['interfaces_info'].itervalues():
             value['relative_dir'] = ''
-        component_info = info_collector.get_component_info_as_dict(runtime_enabled_features)
+        component_info = info_collector.get_component_info_as_dict(
+            runtime_enabled_features)
         return info, component_info
 
     # We compute interfaces info for *all* IDL files, not just test IDL
@@ -165,15 +165,18 @@
     # includes are invalid), but that's brittle (would need to update this file
     # for each new component) and doesn't test the code generator any better
     # than using a single component.
-    non_test_interfaces_info, non_test_component_info = collect_interfaces_info(non_test_idl_paths)
+    non_test_interfaces_info, non_test_component_info = collect_interfaces_info(
+        non_test_idl_paths)
     test_interfaces_info = {}
     test_component_info = {}
     for component, paths in test_idl_paths.iteritems():
-        test_interfaces_info[component], test_component_info[component] = collect_interfaces_info(paths)
+        test_interfaces_info[component], test_component_info[component] = \
+            collect_interfaces_info(paths)
     # In order to allow test IDL files to override the production IDL files if
     # they have the same interface name, process the test IDL files after the
     # non-test IDL files.
-    info_individuals = [non_test_interfaces_info] + test_interfaces_info.values()
+    info_individuals = [non_test_interfaces_info] + \
+        test_interfaces_info.values()
     compute_interfaces_info_overall(info_individuals)
     # Add typedefs which are specified in the actual IDL files to the testing
     # component info.
@@ -187,8 +190,8 @@
 
 
 class IdlCompilerOptions(object):
-    def __init__(self, output_directory, cache_directory, impl_output_directory,
-                 target_component):
+    def __init__(self, output_directory, cache_directory,
+                 impl_output_directory, target_component):
         self.output_directory = output_directory
         self.cache_directory = cache_directory
         self.impl_output_directory = impl_output_directory
@@ -225,8 +228,10 @@
 
     def delete_cache_files():
         # FIXME: Instead of deleting cache files, don't generate them.
-        cache_files = [path for path in list_files(output_directory)
-                       if is_cache_file(os.path.basename(path))]
+        cache_files = [
+            path for path in list_files(output_directory)
+            if is_cache_file(os.path.basename(path))
+        ]
         for cache_file in cache_files:
             os.remove(cache_file)
 
@@ -253,15 +258,20 @@
         return True
 
     def identical_output_files(output_files):
-        reference_files = [os.path.join(REFERENCE_DIRECTORY,
-                                        os.path.relpath(path, output_directory))
-                           for path in output_files]
-        return all([identical_file(reference_filename, output_filename)
-                    for (reference_filename, output_filename) in zip(reference_files, output_files)])
+        reference_files = [
+            os.path.join(REFERENCE_DIRECTORY,
+                         os.path.relpath(path, output_directory))
+            for path in output_files
+        ]
+        return all([
+            identical_file(reference_filename, output_filename)
+            for (reference_filename,
+                 output_filename) in zip(reference_files, output_files)
+        ])
 
     def no_excess_files(output_files):
-        generated_files = set([os.path.relpath(path, output_directory)
-                               for path in output_files])
+        generated_files = set(
+            [os.path.relpath(path, output_directory) for path in output_files])
         excess_files = []
         for path in list_files(REFERENCE_DIRECTORY):
             relpath = os.path.relpath(path, REFERENCE_DIRECTORY)
@@ -271,14 +281,15 @@
             if relpath not in generated_files:
                 excess_files.append(relpath)
         if excess_files:
-            print ('Excess reference files! '
-                   '(probably cruft from renaming or deleting):\n' +
-                   '\n'.join(excess_files))
+            print('Excess reference files! '
+                  '(probably cruft from renaming or deleting):\n' +
+                  '\n'.join(excess_files))
             return False
         return True
 
     def make_runtime_features_dict():
-        input_filename = os.path.join(TEST_INPUT_DIRECTORY, 'runtime_enabled_features.json5')
+        input_filename = os.path.join(TEST_INPUT_DIRECTORY,
+                                      'runtime_enabled_features.json5')
         json5_file = Json5File.load_from_files([input_filename])
         features_map = {}
         for feature in json5_file.name_dictionaries:
@@ -301,8 +312,8 @@
                 target_component=component)
 
             if component == 'core':
-                partial_interface_output_dir = os.path.join(output_directory,
-                                                            'modules')
+                partial_interface_output_dir = \
+                    os.path.join(output_directory, 'modules')
                 if not os.path.exists(partial_interface_output_dir):
                     os.makedirs(partial_interface_output_dir)
                 partial_interface_options = IdlCompilerOptions(
@@ -325,8 +336,10 @@
                     idl_filenames.append(idl_path)
                     idl_basename = os.path.basename(idl_path)
                     name_from_basename, _ = os.path.splitext(idl_basename)
-                    definition_name = get_first_interface_name_from_idl(get_file_contents(idl_path))
-                    is_partial_interface_idl = to_snake_case(definition_name) != name_from_basename
+                    definition_name = get_first_interface_name_from_idl(
+                        get_file_contents(idl_path))
+                    is_partial_interface_idl = to_snake_case(
+                        definition_name) != name_from_basename
                     if not is_partial_interface_idl:
                         interface_info = interfaces_info[definition_name]
                         if interface_info['is_dictionary']:
@@ -336,32 +349,25 @@
                             partial_interface_filenames.append(idl_path)
 
             info_provider = component_info_providers[component]
-            partial_interface_info_provider = component_info_providers['modules']
+            partial_interface_info_provider = \
+                component_info_providers['modules']
 
             generate_union_type_containers(CodeGeneratorUnionType,
                                            info_provider, options)
             generate_callback_function_impl(CodeGeneratorCallbackFunction,
                                             info_provider, options)
-            generate_bindings(
-                CodeGeneratorV8,
-                info_provider,
-                options,
-                idl_filenames)
-            generate_bindings(
-                CodeGeneratorV8,
-                partial_interface_info_provider,
-                partial_interface_options,
-                partial_interface_filenames)
-            generate_dictionary_impl(
-                CodeGeneratorDictionaryImpl,
-                info_provider,
-                options,
-                dictionary_impl_filenames)
-            generate_origin_trial_features(
-                info_provider,
-                options,
-                [filename for filename in idl_filenames
-                 if filename not in dictionary_impl_filenames])
+            generate_bindings(CodeGeneratorV8, info_provider, options,
+                              idl_filenames)
+            generate_bindings(CodeGeneratorV8, partial_interface_info_provider,
+                              partial_interface_options,
+                              partial_interface_filenames)
+            generate_dictionary_impl(CodeGeneratorDictionaryImpl,
+                                     info_provider, options,
+                                     dictionary_impl_filenames)
+            generate_origin_trial_features(info_provider, options, [
+                filename for filename in idl_filenames
+                if filename not in dictionary_impl_filenames
+            ])
 
     finally:
         delete_cache_files()
@@ -390,6 +396,8 @@
     with TemporaryDirectory() as temp_dir:
         # TODO(peria): Remove this hack.
         # Some internal algorithms depend on the path of output directory.
-        temp_source_path = os.path.join(temp_dir, 'third_party', 'blink', 'renderer')
-        temp_output_path = os.path.join(temp_source_path, 'bindings', 'tests', 'results')
+        temp_source_path = os.path.join(temp_dir, 'third_party', 'blink',
+                                        'renderer')
+        temp_output_path = os.path.join(temp_source_path, 'bindings', 'tests',
+                                        'results')
         return bindings_tests(temp_output_path, verbose, suppress_diff)
diff --git a/third_party/blink/tools/blinkpy/bindings/collect_idls_into_json.py b/third_party/blink/tools/blinkpy/bindings/collect_idls_into_json.py
index 484b2e0..243980c 100755
--- a/third_party/blink/tools/blinkpy/bindings/collect_idls_into_json.py
+++ b/third_party/blink/tools/blinkpy/bindings/collect_idls_into_json.py
@@ -2,7 +2,6 @@
 # Copyright 2015 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.
-
 """Usage: collect_idls_into_json.py path_file.txt json_file.json
 This script collects and organizes interface information and that information dumps into json file.
 """
@@ -17,7 +16,6 @@
 import utilities
 from blink_idl_parser import parse_file, BlinkIDLParser
 
-
 _INTERFACE = 'Interface'
 _IMPLEMENT = 'Implements'
 _PARTIAL = 'Partial'
@@ -89,7 +87,8 @@
     Return:
       True if |definition| is 'partial interface' class, otherwise False.
     """
-    return definition.GetClass() == _INTERFACE and definition.GetProperty(_PARTIAL)
+    return definition.GetClass() == _INTERFACE and definition.GetProperty(
+        _PARTIAL)
 
 
 def get_filepath(interface_node):
@@ -149,10 +148,16 @@
       dictionary of const's information
     """
     return {
-        _NAME: const_node.GetName(),
-        _TYPE: get_const_type(const_node),
-        _VALUE: get_const_value(const_node),
-        _EXTATTRIBUTES: [extattr_node_to_dict(extattr) for extattr in get_extattribute_node_list(const_node)],
+        _NAME:
+        const_node.GetName(),
+        _TYPE:
+        get_const_type(const_node),
+        _VALUE:
+        get_const_value(const_node),
+        _EXTATTRIBUTES: [
+            extattr_node_to_dict(extattr)
+            for extattr in get_extattribute_node_list(const_node)
+        ],
     }
 
 
@@ -182,7 +187,8 @@
                 if type_component.GetClass() == _ARRAY:
                     type_list[-1] += '[]'
                 elif type_component.GetClass() == _SEQUENCE:
-                    for seq_type in type_component.GetOneOf(_TYPE).GetChildren():
+                    for seq_type in type_component.GetOneOf(
+                            _TYPE).GetChildren():
                         type_list.append('<' + seq_type.GetName() + '>')
                 else:
                     type_list.append(type_component.GetName())
@@ -190,16 +196,20 @@
     elif attr_type.GetClass() == _SEQUENCE:
         union_member_types = []
         if attr_type.GetOneOf(_TYPE).GetChildren()[0].GetClass() == _UNIONTYPE:
-            for union_member in attr_type.GetOneOf(_TYPE).GetOneOf(_UNIONTYPE).GetListOf(_TYPE):
+            for union_member in attr_type.GetOneOf(_TYPE).GetOneOf(
+                    _UNIONTYPE).GetListOf(_TYPE):
                 if len(union_member.GetChildren()) != 1:
-                    raise Exception('Complex type in a union in a sequence is not yet supported')
+                    raise Exception(
+                        'Complex type in a union in a sequence is not yet supported'
+                    )
                 type_component = union_member.GetChildren()[0]
                 union_member_types.append(type_component.GetName())
             return '<' + str(union_member_types) + '>'
         else:
             for type_component in attr_type.GetOneOf(_TYPE).GetChildren():
                 if type_component.GetClass() == _SEQUENCE:
-                    raise Exception('Sequence in another sequence is not yet supported')
+                    raise Exception(
+                        'Sequence in another sequence is not yet supported')
                 else:
                     if type_component.GetClass() == _ARRAY:
                         type_list[-1] += []
@@ -229,11 +239,18 @@
       dictionary of attribute's information
     """
     return {
-        _NAME: attribute_node.GetName(),
-        _TYPE: get_attribute_type(attribute_node),
-        _EXTATTRIBUTES: [extattr_node_to_dict(extattr) for extattr in get_extattribute_node_list(attribute_node)],
-        _READONLY: attribute_node.GetProperty(_PROP_READONLY, default=False),
-        _STATIC: attribute_node.GetProperty(_PROP_STATIC, default=False),
+        _NAME:
+        attribute_node.GetName(),
+        _TYPE:
+        get_attribute_type(attribute_node),
+        _EXTATTRIBUTES: [
+            extattr_node_to_dict(extattr)
+            for extattr in get_extattribute_node_list(attribute_node)
+        ],
+        _READONLY:
+        attribute_node.GetProperty(_PROP_READONLY, default=False),
+        _STATIC:
+        attribute_node.GetProperty(_PROP_STATIC, default=False),
     }
 
 
@@ -295,12 +312,21 @@
       dictionary of operation's informantion
     """
     return {
-        _NAME: get_operation_name(operation_node),
-        _ARGUMENTS: [argument_node_to_dict(argument) for argument in get_argument_node_list(operation_node)
-                     if argument_node_to_dict(argument)],
-        _TYPE: get_operation_type(operation_node),
-        _EXTATTRIBUTES: [extattr_node_to_dict(extattr) for extattr in get_extattribute_node_list(operation_node)],
-        _STATIC: operation_node.GetProperty(_PROP_STATIC, default=False),
+        _NAME:
+        get_operation_name(operation_node),
+        _ARGUMENTS: [
+            argument_node_to_dict(argument)
+            for argument in get_argument_node_list(operation_node)
+            if argument_node_to_dict(argument)
+        ],
+        _TYPE:
+        get_operation_type(operation_node),
+        _EXTATTRIBUTES: [
+            extattr_node_to_dict(extattr)
+            for extattr in get_extattribute_node_list(operation_node)
+        ],
+        _STATIC:
+        operation_node.GetProperty(_PROP_STATIC, default=False),
     }
 
 
@@ -351,13 +377,29 @@
       A dictionary of the interface information.
     """
     return {
-        _NAME: interface_node.GetName(),
-        _FILEPATH: get_filepath(interface_node),
-        _CONSTS: [const_node_to_dict(const) for const in get_const_node_list(interface_node)],
-        _ATTRIBUTES: [attribute_node_to_dict(attr) for attr in get_attribute_node_list(interface_node) if attr],
-        _OPERATIONS: [operation_node_to_dict(operation) for operation in get_operation_node_list(interface_node) if operation],
-        _EXTATTRIBUTES: [extattr_node_to_dict(extattr) for extattr in get_extattribute_node_list(interface_node)],
-        _INHERIT: inherit_node_to_dict(interface_node)
+        _NAME:
+        interface_node.GetName(),
+        _FILEPATH:
+        get_filepath(interface_node),
+        _CONSTS: [
+            const_node_to_dict(const)
+            for const in get_const_node_list(interface_node)
+        ],
+        _ATTRIBUTES: [
+            attribute_node_to_dict(attr)
+            for attr in get_attribute_node_list(interface_node) if attr
+        ],
+        _OPERATIONS: [
+            operation_node_to_dict(operation)
+            for operation in get_operation_node_list(interface_node)
+            if operation
+        ],
+        _EXTATTRIBUTES: [
+            extattr_node_to_dict(extattr)
+            for extattr in get_extattribute_node_list(interface_node)
+        ],
+        _INHERIT:
+        inherit_node_to_dict(interface_node)
     }
 
 
@@ -372,10 +414,13 @@
     for interface_name, partial in partials_dict.iteritems():
         interface = interfaces_dict.get(interface_name)
         if not interface:
-            raise Exception('There is a partial interface, but the corresponding non-partial interface was not found.')
+            raise Exception(
+                'There is a partial interface, but the corresponding non-partial interface was not found.'
+            )
         for member in _MEMBERS:
             interface[member].extend(partial.get(member))
-            interface.setdefault(_PARTIAL_FILEPATH, []).append(partial[_FILEPATH])
+            interface.setdefault(_PARTIAL_FILEPATH,
+                                 []).append(partial[_FILEPATH])
     return interfaces_dict
 
 
@@ -390,10 +435,13 @@
     for implement in implement_node_list:
         reference = implement.GetProperty(_PROP_REFERENCE)
         implement = implement.GetName()
-        if reference not in interfaces_dict.keys() or implement not in interfaces_dict.keys():
-            raise Exception('There is not corresponding implement or reference interface.')
+        if (reference not in interfaces_dict.keys()
+                or implement not in interfaces_dict.keys()):
+            raise Exception(
+                'There is not corresponding implement or reference interface.')
         for member in _MEMBERS:
-            interfaces_dict[implement][member].extend(interfaces_dict[reference].get(member))
+            interfaces_dict[implement][member].extend(
+                interfaces_dict[reference].get(member))
     return interfaces_dict
 
 
@@ -408,7 +456,9 @@
 
 
 def usage():
-    sys.stdout.write('Usage: collect_idls_into_json.py <path_file.txt> <output_file.json>\n')
+    sys.stdout.write(
+        'Usage: collect_idls_into_json.py <path_file.txt> <output_file.json>\n'
+    )
 
 
 def main(args):
@@ -418,17 +468,22 @@
     path_file = args[0]
     json_file = args[1]
     path_list = utilities.read_file_to_list(path_file)
-    implement_node_list = [definition
-                           for definition in get_definitions(path_list)
-                           if is_implements(definition)]
-    interfaces_dict = {definition.GetName(): interface_node_to_dict(definition)
-                       for definition in get_definitions(path_list)
-                       if not is_partial(definition)}
-    partials_dict = {definition.GetName(): interface_node_to_dict(definition)
-                     for definition in get_definitions(path_list)
-                     if is_partial(definition)}
+    implement_node_list = [
+        definition for definition in get_definitions(path_list)
+        if is_implements(definition)
+    ]
+    interfaces_dict = {
+        definition.GetName(): interface_node_to_dict(definition)
+        for definition in get_definitions(path_list)
+        if not is_partial(definition)
+    }
+    partials_dict = {
+        definition.GetName(): interface_node_to_dict(definition)
+        for definition in get_definitions(path_list) if is_partial(definition)
+    }
     dictionary = merge_partial_dicts(interfaces_dict, partials_dict)
-    interfaces_dict = merge_implement_nodes(interfaces_dict, implement_node_list)
+    interfaces_dict = merge_implement_nodes(interfaces_dict,
+                                            implement_node_list)
     export_to_jsonfile(dictionary, json_file)
 
 
diff --git a/third_party/blink/tools/blinkpy/bindings/collect_idls_into_json_test.py b/third_party/blink/tools/blinkpy/bindings/collect_idls_into_json_test.py
index f98971b..a77ff75 100755
--- a/third_party/blink/tools/blinkpy/bindings/collect_idls_into_json_test.py
+++ b/third_party/blink/tools/blinkpy/bindings/collect_idls_into_json_test.py
@@ -11,24 +11,27 @@
 testdata_path = os.path.join(
     os.path.dirname(os.path.realpath(__file__)), 'testdata')
 _FILE = os.path.join(testdata_path, 'test_filepath.txt')
-_KEY_SET = set(['Operations', 'Name', 'FilePath', 'Inherit', 'Consts', 'ExtAttributes', 'Attributes'])
+_KEY_SET = set([
+    'Operations', 'Name', 'FilePath', 'Inherit', 'Consts', 'ExtAttributes',
+    'Attributes'
+])
 _PARTIAL = {
     'Node': {
         'Operations': [],
-        'Name': 'Node',
-        'FilePath': 'Source/core/timing/WorkerGlobalScopePerformance.idl',
+        'Name':
+        'Node',
+        'FilePath':
+        'Source/core/timing/WorkerGlobalScopePerformance.idl',
         'Inherit': [],
         'Consts': [],
         'ExtAttributes': [],
-        'Attributes': [
-            {
-                'Static': False,
-                'Readonly': True,
-                'Type': 'WorkerPerformance',
-                'Name': 'performance',
-                'ExtAttributes': []
-            }
-        ]
+        'Attributes': [{
+            'Static': False,
+            'Readonly': True,
+            'Type': 'WorkerPerformance',
+            'Name': 'performance',
+            'ExtAttributes': []
+        }]
     }
 }
 
@@ -36,23 +39,26 @@
 class TestFunctions(unittest.TestCase):
     def setUp(self):
         parser = BlinkIDLParser()
-        path = os.path.join(
-            testdata_path, utilities.read_file_to_list(_FILE)[0])
+        path = os.path.join(testdata_path,
+                            utilities.read_file_to_list(_FILE)[0])
         definitions = parse_file(parser, path)
         self.definition = definitions.GetChildren()[0]
 
     def test_get_definitions(self):
         pathfile = utilities.read_file_to_list(_FILE)
-        pathfile = [os.path.join(testdata_path, filename)
-                    for filename in pathfile]
+        pathfile = [
+            os.path.join(testdata_path, filename) for filename in pathfile
+        ]
         for actual in collect_idls_into_json.get_definitions(pathfile):
             self.assertEqual(actual.GetName(), self.definition.GetName())
 
     def test_is_partial(self):
-        if self.definition.GetClass() == 'Interface' and self.definition.GetProperty('Partial'):
+        if (self.definition.GetClass() == 'Interface'
+                and self.definition.GetProperty('Partial')):
             self.assertTrue(collect_idls_into_json.is_partial(self.definition))
         else:
-            self.assertFalse(collect_idls_into_json.is_partial(self.definition))
+            self.assertFalse(
+                collect_idls_into_json.is_partial(self.definition))
 
     def test_get_filepaths(self):
         filepath = collect_idls_into_json.get_filepath(self.definition)
@@ -60,53 +66,85 @@
 
     def test_const_node_to_dict(self):
         const_member = set(['Name', 'Type', 'Value', 'ExtAttributes'])
-        for const in collect_idls_into_json.get_const_node_list(self.definition):
+        for const in collect_idls_into_json.get_const_node_list(
+                self.definition):
             if const:
                 self.assertEqual(const.GetClass(), 'Const')
-                self.assertEqual(collect_idls_into_json.get_const_type(const), 'unsigned short')
-                self.assertEqual(collect_idls_into_json.get_const_value(const), '1')
-                self.assertTrue(const_member.issuperset(collect_idls_into_json.const_node_to_dict(const).keys()))
+                self.assertEqual(
+                    collect_idls_into_json.get_const_type(const),
+                    'unsigned short')
+                self.assertEqual(
+                    collect_idls_into_json.get_const_value(const), '1')
+                self.assertTrue(
+                    const_member.issuperset(
+                        collect_idls_into_json.const_node_to_dict(const).
+                        keys()))
             else:
                 self.assertEqual(const, None)
 
     def test_attribute_node_to_dict(self):
-        attribute_member = set(['Name', 'Type', 'ExtAttributes', 'Readonly', 'Static'])
-        for attribute in collect_idls_into_json.get_attribute_node_list(self.definition):
+        attribute_member = set(
+            ['Name', 'Type', 'ExtAttributes', 'Readonly', 'Static'])
+        for attribute in collect_idls_into_json.get_attribute_node_list(
+                self.definition):
             if attribute:
                 self.assertEqual(attribute.GetClass(), 'Attribute')
                 self.assertEqual(attribute.GetName(), 'parentNode')
-                self.assertEqual(collect_idls_into_json.get_attribute_type(attribute), 'Node')
-                self.assertTrue(attribute_member.issuperset(collect_idls_into_json.attribute_node_to_dict(attribute).keys()))
+                self.assertEqual(
+                    collect_idls_into_json.get_attribute_type(attribute),
+                    'Node')
+                self.assertTrue(
+                    attribute_member.issuperset(
+                        collect_idls_into_json.attribute_node_to_dict(
+                            attribute).keys()))
             else:
                 self.assertEqual(attribute, None)
 
     def test_operation_node_to_dict(self):
-        operate_member = set(['Static', 'ExtAttributes', 'Type', 'Name', 'Arguments'])
+        operate_member = set(
+            ['Static', 'ExtAttributes', 'Type', 'Name', 'Arguments'])
         argument_member = set(['Name', 'Type'])
-        for operation in collect_idls_into_json.get_operation_node_list(self.definition):
+        for operation in collect_idls_into_json.get_operation_node_list(
+                self.definition):
             if operation:
                 self.assertEqual(operation.GetClass(), 'Operation')
                 self.assertEqual(operation.GetName(), 'appendChild')
-                self.assertEqual(collect_idls_into_json.get_operation_type(operation), 'Node')
-                self.assertTrue(operate_member.issuperset(collect_idls_into_json.operation_node_to_dict(operation).keys()))
-                for argument in collect_idls_into_json.get_argument_node_list(operation):
+                self.assertEqual(
+                    collect_idls_into_json.get_operation_type(operation),
+                    'Node')
+                self.assertTrue(
+                    operate_member.issuperset(
+                        collect_idls_into_json.operation_node_to_dict(
+                            operation).keys()))
+                for argument in collect_idls_into_json.get_argument_node_list(
+                        operation):
                     if argument:
                         self.assertEqual(argument.GetClass(), 'Argument')
                         self.assertEqual(argument.GetName(), 'newChild')
-                        self.assertEqual(collect_idls_into_json.get_argument_type(argument), 'Node')
-                        self.assertTrue(argument_member.issuperset(collect_idls_into_json.argument_node_to_dict(argument).keys()))
+                        self.assertEqual(
+                            collect_idls_into_json.get_argument_type(argument),
+                            'Node')
+                        self.assertTrue(
+                            argument_member.issuperset(
+                                collect_idls_into_json.argument_node_to_dict(
+                                    argument).keys()))
                     else:
                         self.assertEqual(argument, None)
             else:
                 self.assertEqual(operation, None)
 
     def test_extattribute_node_to_dict(self):
-        for extattr in collect_idls_into_json.get_extattribute_node_list(self.definition):
+        for extattr in collect_idls_into_json.get_extattribute_node_list(
+                self.definition):
             if extattr:
                 self.assertEqual(extattr.GetClass(), 'ExtAttribute')
                 self.assertEqual(extattr.GetName(), 'CustomToV8')
-                self.assertEqual(collect_idls_into_json.extattr_node_to_dict(extattr).keys(), ['Name'])
-                self.assertEqual(collect_idls_into_json.extattr_node_to_dict(extattr).values(), ['CustomToV8'])
+                self.assertEqual(
+                    collect_idls_into_json.extattr_node_to_dict(extattr).
+                    keys(), ['Name'])
+                self.assertEqual(
+                    collect_idls_into_json.extattr_node_to_dict(extattr).
+                    values(), ['CustomToV8'])
             else:
                 self.assertEqual(extattr, None)
 
@@ -119,12 +157,17 @@
             self.assertEqual(inherit, [])
 
     def test_interface_node_to_dict(self):
-        self.assertTrue(_KEY_SET.issuperset(collect_idls_into_json.interface_node_to_dict(self.definition)))
+        self.assertTrue(
+            _KEY_SET.issuperset(
+                collect_idls_into_json.interface_node_to_dict(
+                    self.definition)))
 
     def test_merge_partial_dicts(self):
         key_name = self.definition.GetName()
-        merged = collect_idls_into_json.merge_partial_dicts(
-            {key_name: collect_idls_into_json.interface_node_to_dict(self.definition)}, _PARTIAL)[key_name]['Partial_FilePaths']
+        merged = collect_idls_into_json.merge_partial_dicts({
+            key_name:
+            collect_idls_into_json.interface_node_to_dict(self.definition)
+        }, _PARTIAL)[key_name]['Partial_FilePaths']
         expected = [
             'Source/core/timing/WorkerGlobalScopePerformance.idl',
             'Source/core/timing/WorkerGlobalScopePerformance.idl',
diff --git a/third_party/blink/tools/blinkpy/bindings/generate_idl_diff.py b/third_party/blink/tools/blinkpy/bindings/generate_idl_diff.py
index 95debaf..1e66d6206 100755
--- a/third_party/blink/tools/blinkpy/bindings/generate_idl_diff.py
+++ b/third_party/blink/tools/blinkpy/bindings/generate_idl_diff.py
@@ -2,7 +2,6 @@
 # Copyright 2015 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.
-
 """generate_idl_diff.py is a script that generates a diff of two given IDL files.
 Usage: generate_idl_diff.py old_file.json new_file.json diff_file.json
     old_file.json: An input json file including idl data of old Chrome version
@@ -55,8 +54,9 @@
     }
 """
 
-
-EXTATTRIBUTES_AND_MEMBER_TYPES = ['ExtAttributes', 'Consts', 'Attributes', 'Operations']
+EXTATTRIBUTES_AND_MEMBER_TYPES = [
+    'ExtAttributes', 'Consts', 'Attributes', 'Operations'
+]
 DIFF_INSENSITIVE_FIELDS = ['Name']
 DIFF_TAG = 'diff_tag'
 DIFF_TAG_ADDED = 'added'
@@ -139,7 +139,8 @@
     annotated = {}
     for interface_name, interface in new_interfaces.items():
         if interface_name in old_interfaces:
-            annotated_interface, is_changed = members_diff(old_interfaces[interface_name], interface)
+            annotated_interface, is_changed = members_diff(
+                old_interfaces[interface_name], interface)
             if is_changed:
                 annotated[interface_name] = annotated_interface
             del old_interfaces[interface_name]
@@ -166,9 +167,8 @@
 
 def main(argv):
     if len(argv) != 3:
-        sys.stdout.write(
-            'Usage: make_diff.py <old_file.json> <new_file.json> '
-            '<diff_file.json>\n')
+        sys.stdout.write('Usage: make_diff.py <old_file.json> <new_file.json> '
+                         '<diff_file.json>\n')
         exit(1)
     old_json_file = argv[0]
     new_json_file = argv[1]
diff --git a/third_party/blink/tools/blinkpy/bindings/generate_idl_diff_test.py b/third_party/blink/tools/blinkpy/bindings/generate_idl_diff_test.py
index 95c3c583..69c3111 100755
--- a/third_party/blink/tools/blinkpy/bindings/generate_idl_diff_test.py
+++ b/third_party/blink/tools/blinkpy/bindings/generate_idl_diff_test.py
@@ -11,7 +11,6 @@
 from blinkpy.bindings.generate_idl_diff import DIFF_TAG_DELETED
 from blinkpy.bindings.generate_idl_diff import DIFF_TAG_ADDED
 
-
 testdata_path = os.path.join(
     os.path.dirname(os.path.realpath(__file__)), 'testdata')
 old_data_path = os.path.join(testdata_path, 'old_blink_idls.json')
@@ -19,7 +18,6 @@
 
 
 class TestGenerateIDLDiff(unittest.TestCase):
-
     def setUp(self):
         old = generate_idl_diff.load_json_file(old_data_path)
         new = generate_idl_diff.load_json_file(new_data_path)
diff --git a/third_party/blink/tools/blinkpy/bindings/print_idl_diff.py b/third_party/blink/tools/blinkpy/bindings/print_idl_diff.py
index 3540f4e..fd3cb86 100755
--- a/third_party/blink/tools/blinkpy/bindings/print_idl_diff.py
+++ b/third_party/blink/tools/blinkpy/bindings/print_idl_diff.py
@@ -2,7 +2,6 @@
 # Copyright 2015 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.
-
 """Print a diff generated by generate_idl_diff.py.
 Before printing, sort the diff in the alphabetical order or the order of
 diffing tags.
@@ -24,7 +23,6 @@
 from blinkpy.bindings.generate_idl_diff import DIFF_TAG_ADDED
 from blinkpy.bindings.generate_idl_diff import DIFF_TAG_DELETED
 
-
 # pylint: disable=W0105
 """Refer to the explanation of generate_idl_diff.py's input files.
 The deffference between the input structure of generate_idl_diff.py and
@@ -238,8 +236,8 @@
     """
     sorted_interface = OrderedDict()
     for member_type in EXTATTRIBUTES_AND_MEMBER_TYPES:
-        sorted_members = sorted(interface[member_type],
-                                key=lambda member: member['Name'])
+        sorted_members = sorted(
+            interface[member_type], key=lambda member: member['Name'])
         sorted_interface[member_type] = sorted_members
     return sorted_interface
 
@@ -323,6 +321,7 @@
     Args:
         A list of "ExtAttributes" in the "member" object
     """
+
     def callback(extattribute):
         out.write(extattribute['Name'])
 
@@ -350,6 +349,7 @@
     """Print arguments in a "members" object named "Operations".
     Args: A list of "Arguments"
     """
+
     def callback(argument):
         out.write(argument['Name'])
 
@@ -407,7 +407,8 @@
 
 def print_usage():
     """Show usage."""
-    sys.stdout.write('Usage: print_diff.py <diff_file.json> <"TAG"|"ALPHABET">\n')
+    sys.stdout.write(
+        'Usage: print_diff.py <diff_file.json> <"TAG"|"ALPHABET">\n')
 
 
 def main(argv):
diff --git a/third_party/blink/tools/blinkpy/common/base85_unittest.py b/third_party/blink/tools/blinkpy/common/base85_unittest.py
index 165c8cb..d3fe6f7 100644
--- a/third_party/blink/tools/blinkpy/common/base85_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/base85_unittest.py
@@ -8,9 +8,9 @@
 
 
 class TestBase85(unittest.TestCase):
-
     def test_decode(self):
-        self.assertEqual(decode_base85('cmV?d00001'), 'x\x01\x03\x00\x00\x00\x00\x01')
+        self.assertEqual(
+            decode_base85('cmV?d00001'), 'x\x01\x03\x00\x00\x00\x00\x01')
 
     def test_decode_invalid_input(self):
         self.assertRaises(ValueError, decode_base85, '1')
diff --git a/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer.py b/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer.py
index 2015d800..d6960a96 100644
--- a/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer.py
+++ b/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer.py
@@ -36,7 +36,6 @@
 
 
 class BaselineOptimizer(object):
-
     def __init__(self, host, default_port, port_names):
         self._filesystem = host.filesystem
         self._default_port = default_port
@@ -85,7 +84,8 @@
             non_virtual_baseline_name = baseline_name
 
         _log.debug('Optimizing non-virtual fallback path.')
-        succeeded &= self._optimize_subtree(test_name, non_virtual_baseline_name)
+        succeeded &= self._optimize_subtree(test_name,
+                                            non_virtual_baseline_name)
         self._remove_extra_result_at_root(test_name, non_virtual_baseline_name)
 
         if not succeeded:
@@ -95,7 +95,8 @@
     def write_by_directory(self, results_by_directory, writer, indent):
         """Logs results_by_directory in a pretty format."""
         for path in sorted(results_by_directory):
-            writer('%s%s: %s' % (indent, self._platform(path), results_by_directory[path]))
+            writer('%s%s: %s' % (indent, self._platform(path),
+                                 results_by_directory[path]))
 
     def read_results_by_directory(self, test_name, baseline_name):
         """Reads the baselines with the given file name in all directories.
@@ -111,7 +112,8 @@
         for directory in directories:
             path = self._join_directory(directory, baseline_name)
             if self._filesystem.exists(path):
-                results_by_directory[directory] = ResultDigest(self._filesystem, path, self._is_reftest(test_name))
+                results_by_directory[directory] = ResultDigest(
+                    self._filesystem, path, self._is_reftest(test_name))
         return results_by_directory
 
     def _is_reftest(self, test_name):
@@ -119,12 +121,14 @@
 
     def _optimize_subtree(self, test_name, baseline_name):
         basename = self._filesystem.basename(baseline_name)
-        results_by_directory, new_results_by_directory = self._find_optimal_result_placement(test_name, baseline_name)
+        results_by_directory, new_results_by_directory = self._find_optimal_result_placement(
+            test_name, baseline_name)
 
         if new_results_by_directory == results_by_directory:
             if new_results_by_directory:
                 _log.debug('  %s: (already optimal)', basename)
-                self.write_by_directory(results_by_directory, _log.debug, '    ')
+                self.write_by_directory(results_by_directory, _log.debug,
+                                        '    ')
             else:
                 _log.debug('  %s: (no baselines found)', basename)
             # This is just used for unit tests.
@@ -139,7 +143,8 @@
             # sure the script fails in the case of bugs instead of committing
             # incorrect baselines.
             _log.error('  %s: optimization failed', basename)
-            self.write_by_directory(results_by_directory, _log.warning, '      ')
+            self.write_by_directory(results_by_directory, _log.warning,
+                                    '      ')
             return False
 
         _log.debug('  %s:', basename)
@@ -148,15 +153,18 @@
         _log.debug('    After: ')
         self.write_by_directory(new_results_by_directory, _log.debug, '      ')
 
-        self._move_baselines(baseline_name, results_by_directory, new_results_by_directory)
+        self._move_baselines(baseline_name, results_by_directory,
+                             new_results_by_directory)
         return True
 
-    def _move_baselines(self, baseline_name, results_by_directory, new_results_by_directory):
+    def _move_baselines(self, baseline_name, results_by_directory,
+                        new_results_by_directory):
         data_for_result = {}
         for directory, result in results_by_directory.items():
             if result not in data_for_result:
                 source = self._join_directory(directory, baseline_name)
-                data_for_result[result] = self._filesystem.read_binary_file(source)
+                data_for_result[result] = self._filesystem.read_binary_file(
+                    source)
 
         fs_files = []
         for directory, result in results_by_directory.items():
@@ -167,7 +175,8 @@
 
         if fs_files:
             _log.debug('    Deleting (file system):')
-            for platform_dir in sorted(self._platform(filename) for filename in fs_files):
+            for platform_dir in sorted(
+                    self._platform(filename) for filename in fs_files):
                 _log.debug('      ' + platform_dir)
             for filename in fs_files:
                 self._filesystem.remove(filename)
@@ -178,13 +187,16 @@
         for directory, result in new_results_by_directory.items():
             if results_by_directory.get(directory) != result:
                 destination = self._join_directory(directory, baseline_name)
-                self._filesystem.maybe_make_directory(self._filesystem.split(destination)[0])
-                self._filesystem.write_binary_file(destination, data_for_result[result])
+                self._filesystem.maybe_make_directory(
+                    self._filesystem.split(destination)[0])
+                self._filesystem.write_binary_file(destination,
+                                                   data_for_result[result])
                 file_names.append(destination)
 
         if file_names:
             _log.debug('    Adding:')
-            for platform_dir in sorted(self._platform(filename) for filename in file_names):
+            for platform_dir in sorted(
+                    self._platform(filename) for filename in file_names):
                 _log.debug('      ' + platform_dir)
         else:
             _log.debug('    (Nothing to add)')
@@ -197,21 +209,27 @@
         """
         platform_dir = self._web_tests_dir_name + self._filesystem.sep + 'platform' + self._filesystem.sep
         if filename.startswith(platform_dir):
-            return filename.replace(platform_dir, '').split(self._filesystem.sep)[0]
-        platform_dir = self._filesystem.join(self._parent_of_tests, platform_dir)
+            return filename.replace(platform_dir,
+                                    '').split(self._filesystem.sep)[0]
+        platform_dir = self._filesystem.join(self._parent_of_tests,
+                                             platform_dir)
         if filename.startswith(platform_dir):
-            return filename.replace(platform_dir, '').split(self._filesystem.sep)[0]
+            return filename.replace(platform_dir,
+                                    '').split(self._filesystem.sep)[0]
         return '(generic)'
 
     def _port_from_baseline_dir(self, baseline_dir):
         """Returns a Port object from the given baseline directory."""
         baseline_dir = self._filesystem.basename(baseline_dir)
         for port in self._ports.values():
-            if self._filesystem.basename(port.baseline_version_dir()) == baseline_dir:
+            if self._filesystem.basename(
+                    port.baseline_version_dir()) == baseline_dir:
                 return port
-        raise Exception('Failed to find port for primary baseline %s.' % baseline_dir)
+        raise Exception(
+            'Failed to find port for primary baseline %s.' % baseline_dir)
 
-    def _walk_immediate_predecessors_of_virtual_root(self, test_name, extension, baseline_name, worker_func):
+    def _walk_immediate_predecessors_of_virtual_root(
+            self, test_name, extension, baseline_name, worker_func):
         """Maps a function onto each immediate predecessor of the virtual root.
 
         For each immediate predecessor, we call
@@ -227,7 +245,8 @@
             virtual_baseline = self._join_directory(directory, baseline_name)
             # return_default=False mandates expected_filename() to return None
             # instead of a non-existing generic path when nothing is found.
-            non_virtual_fallback = port.expected_filename(actual_test_name, extension, return_default=False)
+            non_virtual_fallback = port.expected_filename(
+                actual_test_name, extension, return_default=False)
             if not non_virtual_fallback:
                 # Unable to find a non-virtual fallback baseline, skipping.
                 continue
@@ -238,36 +257,52 @@
         # virtual suite so that the virtual subtree can be treated completely
         # independently. If an immediate predecessor is missing a baseline, find
         # its non-virtual fallback and copy over.
-        _log.debug('Copying non-virtual baselines to the virtual subtree to make it independent.')
-        virtual_root_baseline_path = self._filesystem.join(self._web_tests_dir, baseline_name)
+        _log.debug(
+            'Copying non-virtual baselines to the virtual subtree to make it independent.'
+        )
+        virtual_root_baseline_path = self._filesystem.join(
+            self._web_tests_dir, baseline_name)
         if self._filesystem.exists(virtual_root_baseline_path):
             return
 
         def patcher(virtual_baseline, non_virtual_fallback):
             if not self._filesystem.exists(virtual_baseline):
-                _log.debug('    Copying (file system): %s -> %s.', non_virtual_fallback, virtual_baseline)
-                self._filesystem.maybe_make_directory(self._filesystem.split(virtual_baseline)[0])
-                self._filesystem.copyfile(non_virtual_fallback, virtual_baseline)
+                _log.debug('    Copying (file system): %s -> %s.',
+                           non_virtual_fallback, virtual_baseline)
+                self._filesystem.maybe_make_directory(
+                    self._filesystem.split(virtual_baseline)[0])
+                self._filesystem.copyfile(non_virtual_fallback,
+                                          virtual_baseline)
 
-        self._walk_immediate_predecessors_of_virtual_root(test_name, extension, baseline_name, patcher)
+        self._walk_immediate_predecessors_of_virtual_root(
+            test_name, extension, baseline_name, patcher)
 
     def _optimize_virtual_root(self, test_name, extension, baseline_name):
-        virtual_root_baseline_path = self._filesystem.join(self._web_tests_dir, baseline_name)
+        virtual_root_baseline_path = self._filesystem.join(
+            self._web_tests_dir, baseline_name)
         if self._filesystem.exists(virtual_root_baseline_path):
-            _log.debug('Virtual root baseline found. Checking if we can remove it.')
-            self._try_to_remove_virtual_root(test_name, baseline_name, virtual_root_baseline_path)
+            _log.debug(
+                'Virtual root baseline found. Checking if we can remove it.')
+            self._try_to_remove_virtual_root(test_name, baseline_name,
+                                             virtual_root_baseline_path)
         else:
-            _log.debug('Virtual root baseline not found. Searching for virtual baselines redundant with non-virtual ones.')
+            _log.debug(
+                'Virtual root baseline not found. Searching for virtual baselines redundant with non-virtual ones.'
+            )
             self._unpatch_virtual_subtree(test_name, extension, baseline_name)
 
-    def _try_to_remove_virtual_root(self, test_name, baseline_name, virtual_root_baseline_path):
+    def _try_to_remove_virtual_root(self, test_name, baseline_name,
+                                    virtual_root_baseline_path):
         # See if all the successors of the virtual root (i.e. all non-virtual
         # platforms) have the same baseline as the virtual root. If so, the
         # virtual root is redundant and can be safely removed.
-        virtual_root_digest = ResultDigest(self._filesystem, virtual_root_baseline_path, self._is_reftest(test_name))
+        virtual_root_digest = ResultDigest(self._filesystem,
+                                           virtual_root_baseline_path,
+                                           self._is_reftest(test_name))
 
         # Read the base (non-virtual) results.
-        results_by_directory = self.read_results_by_directory(test_name, self._virtual_base(baseline_name))
+        results_by_directory = self.read_results_by_directory(
+            test_name, self._virtual_base(baseline_name))
         results_by_port_name = self._results_by_port_name(results_by_directory)
 
         for port_name in self._ports.keys():
@@ -284,13 +319,18 @@
         # duplicate with their non-virtual fallback, essentially undoing some
         # of the work done in _patch_virtual_subtree.
         is_reftest = self._is_reftest(test_name)
+
         def unpatcher(virtual_baseline, non_virtual_fallback):
             if self._filesystem.exists(virtual_baseline) and \
                     (ResultDigest(self._filesystem, virtual_baseline, is_reftest) ==
                      ResultDigest(self._filesystem, non_virtual_fallback, is_reftest)):
-                _log.debug('    Deleting (file system): %s (redundant with %s).', virtual_baseline, non_virtual_fallback)
+                _log.debug(
+                    '    Deleting (file system): %s (redundant with %s).',
+                    virtual_baseline, non_virtual_fallback)
                 self._filesystem.remove(virtual_baseline)
-        self._walk_immediate_predecessors_of_virtual_root(test_name, extension, baseline_name, unpatcher)
+
+        self._walk_immediate_predecessors_of_virtual_root(
+            test_name, extension, baseline_name, unpatcher)
 
     def _baseline_root(self):
         """Returns the name of the root (generic) baseline directory."""
@@ -309,7 +349,10 @@
         relative to the parent of the test directory.
         """
         baseline_search_path = self._baseline_search_path(port)
-        relative_paths = [self._filesystem.relpath(path, self._parent_of_tests) for path in baseline_search_path]
+        relative_paths = [
+            self._filesystem.relpath(path, self._parent_of_tests)
+            for path in baseline_search_path
+        ]
         relative_baseline_root = self._baseline_root()
         return relative_paths + [relative_baseline_root]
 
@@ -322,7 +365,8 @@
 
     def _join_directory(self, directory, baseline_name):
         """Returns the absolute path to the baseline in the given directory."""
-        return self._filesystem.join(self._parent_of_tests, directory, baseline_name)
+        return self._filesystem.join(self._parent_of_tests, directory,
+                                     baseline_name)
 
     def _results_by_port_name(self, results_by_directory):
         """Transforms a by-directory result dict to by-port-name.
@@ -342,7 +386,8 @@
         for port_name, port in self._ports.items():
             for directory in self._relative_baseline_search_path(port):
                 if directory in results_by_directory:
-                    results_by_port_name[port_name] = results_by_directory[directory]
+                    results_by_port_name[port_name] = results_by_directory[
+                        directory]
                     break
             if port_name not in results_by_port_name:
                 # Implicit extra result.
@@ -355,7 +400,8 @@
         search paths."""
         directories = set()
         for port in self._ports.values():
-            directory = self._filesystem.relpath(self._baseline_search_path(port)[-1], self._parent_of_tests)
+            directory = self._filesystem.relpath(
+                self._baseline_search_path(port)[-1], self._parent_of_tests)
             directories.add(directory)
         return frozenset(directories)
 
@@ -368,7 +414,8 @@
         # promoted up to be the root baseline.
         # All other baselines can only be removed if they're redundant with a
         # baseline later on the search path. They can never be promoted up.
-        immediately_preceding_root = self._directories_immediately_preceding_root()
+        immediately_preceding_root = self._directories_immediately_preceding_root(
+        )
 
         shared_result = None
         root_baseline_unused = False
@@ -398,7 +445,8 @@
             del new_results_by_directory[directory]
 
     def _find_optimal_result_placement(self, test_name, baseline_name):
-        results_by_directory = self.read_results_by_directory(test_name, baseline_name)
+        results_by_directory = self.read_results_by_directory(
+            test_name, baseline_name)
         results_by_port_name = self._results_by_port_name(results_by_directory)
 
         new_results_by_directory = self._remove_redundant_results(
@@ -407,7 +455,8 @@
 
         return results_by_directory, new_results_by_directory
 
-    def _remove_redundant_results(self, results_by_directory, results_by_port_name):
+    def _remove_redundant_results(self, results_by_directory,
+                                  results_by_port_name):
         # For every port, traverse its search path in the fallback order (from
         # specific to generic). Remove duplicate baselines until a different
         # baseline is found (or the root is reached), i.e., keep the most
@@ -421,7 +470,8 @@
                 continue
 
             search_path = self._relative_baseline_search_path(port)
-            current_index, current_directory = self._find_in_search_path(search_path, current_result, new_results_by_directory)
+            current_index, current_directory = self._find_in_search_path(
+                search_path, current_result, new_results_by_directory)
             found_different_result = False
             for index in range(current_index + 1, len(search_path)):
                 new_directory = search_path[index]
@@ -444,31 +494,37 @@
             # an extra result, we can safely remove it.
             # Note that we do not remove the generic extra result here.
             # Roots (virtual and non-virtual) are treated specially later.
-            if (not found_different_result
-                    and current_result.is_extra_result
+            if (not found_different_result and current_result.is_extra_result
                     and current_directory != self._baseline_root()
                     and current_directory in new_results_by_directory):
                 del new_results_by_directory[current_directory]
 
         return new_results_by_directory
 
-    def _find_in_search_path(self, search_path, current_result, results_by_directory):
+    def _find_in_search_path(self, search_path, current_result,
+                             results_by_directory):
         """Finds the index and the directory of a result on a search path."""
         for index, directory in enumerate(search_path):
-            if directory in results_by_directory and (results_by_directory[directory] == current_result):
+            if (directory in results_by_directory
+                    and (results_by_directory[directory] == current_result)):
                 return index, directory
         assert current_result.is_extra_result, (
-            'result %s not found in search path %s, %s' % (current_result, search_path, results_by_directory))
+            'result %s not found in search path %s, %s' %
+            (current_result, search_path, results_by_directory))
         # Implicit extra result at the root.
         return len(search_path) - 1, search_path[-1]
 
     def _remove_extra_result_at_root(self, test_name, baseline_name):
         """Removes extra result at the non-virtual root."""
-        assert not self._virtual_base(baseline_name), 'A virtual baseline is passed in.'
+        assert not self._virtual_base(baseline_name), \
+            'A virtual baseline is passed in.'
         path = self._join_directory(self._baseline_root(), baseline_name)
         if (self._filesystem.exists(path)
-                and ResultDigest(self._filesystem, path, self._is_reftest(test_name)).is_extra_result):
-            _log.debug('Deleting extra baseline (empty, -expected.png for reftest, or all-PASS testharness JS result)')
+                and ResultDigest(self._filesystem, path,
+                                 self._is_reftest(test_name)).is_extra_result):
+            _log.debug(
+                'Deleting extra baseline (empty, -expected.png for reftest, or all-PASS testharness JS result)'
+            )
             _log.debug('    Deleting (file system): ' + path)
             self._filesystem.remove(path)
 
@@ -512,7 +568,8 @@
         assert fs.exists(path)
         if path.endswith('.txt'):
             content = fs.read_text_file(path)
-            self.is_extra_result = not content or is_all_pass_testharness_result(content)
+            self.is_extra_result = not content or is_all_pass_testharness_result(
+                content)
             # Unfortunately, we may read the file twice, once in text mode
             # and once in binary mode.
             self.sha = fs.sha1(path)
@@ -543,4 +600,5 @@
 
     def __repr__(self):
         is_extra_result = ' EXTRA' if self.is_extra_result else ''
-        return '<ResultDigest %s%s %s>' % (self.sha, is_extra_result, self.path)
+        return '<ResultDigest %s%s %s>' % (self.sha, is_extra_result,
+                                           self.path)
diff --git a/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer_unittest.py b/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer_unittest.py
index e32cea0..bf0a5e1e 100644
--- a/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/checkout/baseline_optimizer_unittest.py
@@ -50,7 +50,6 @@
 
 
 class BaselineOptimizerTest(unittest.TestCase):
-
     def setUp(self):
         self.host = MockHost()
         self.fs = MockFileSystem()
@@ -92,10 +91,17 @@
         # Note: this is a pre-assumption of the tests in this file. If this
         # assertion fails, port configurations are likely changed, and the
         # tests need to be adjusted accordingly.
-        self.assertEqual(sorted(self.host.port_factory.all_port_names()),
-                         ['linux-trusty', 'mac-mac10.10', 'mac-mac10.11', 'mac-mac10.12', 'mac-mac10.13', 'mac-mac10.14', 'win-win10'])
+        self.assertEqual(
+            sorted(self.host.port_factory.all_port_names()), [
+                'linux-trusty', 'mac-mac10.10', 'mac-mac10.11', 'mac-mac10.12',
+                'mac-mac10.13', 'mac-mac10.14', 'win-win10'
+            ])
 
-    def _assert_optimization(self, results_by_directory, directory_to_new_results, baseline_dirname='', suffix='txt'):
+    def _assert_optimization(self,
+                             results_by_directory,
+                             directory_to_new_results,
+                             baseline_dirname='',
+                             suffix='txt'):
         web_tests_dir = PathFinder(self.fs).web_tests_dir()
         test_name = 'mock-test.html'
         baseline_name = 'mock-test-expected.' + suffix
@@ -104,146 +110,147 @@
             '[{"prefix": "gpu", "bases": ["fast/canvas"], "args": ["--foo"]}]')
 
         for dirname, contents in results_by_directory.items():
-            self.fs.write_binary_file(self.fs.join(web_tests_dir, dirname, baseline_name), contents)
+            self.fs.write_binary_file(
+                self.fs.join(web_tests_dir, dirname, baseline_name), contents)
 
-        baseline_optimizer = BaselineOptimizer(self.host, self.host.port_factory.get(), self.host.port_factory.all_port_names())
-        self.assertTrue(baseline_optimizer.optimize(
-            self.fs.join(baseline_dirname, test_name), suffix))
+        baseline_optimizer = BaselineOptimizer(
+            self.host, self.host.port_factory.get(),
+            self.host.port_factory.all_port_names())
+        self.assertTrue(
+            baseline_optimizer.optimize(
+                self.fs.join(baseline_dirname, test_name), suffix))
 
         for dirname, contents in directory_to_new_results.items():
             path = self.fs.join(web_tests_dir, dirname, baseline_name)
             if contents is None:
                 # Check files that are explicitly marked as absent.
-                self.assertFalse(self.fs.exists(path), '%s should not exist after optimization' % path)
+                self.assertFalse(
+                    self.fs.exists(path),
+                    '%s should not exist after optimization' % path)
             else:
-                self.assertEqual(self.fs.read_binary_file(path), contents, 'Content of %s != "%s"' % (path, contents))
+                self.assertEqual(
+                    self.fs.read_binary_file(path), contents,
+                    'Content of %s != "%s"' % (path, contents))
 
         for dirname in results_by_directory:
             path = self.fs.join(web_tests_dir, dirname, baseline_name)
-            if dirname not in directory_to_new_results or directory_to_new_results[dirname] is None:
-                self.assertFalse(self.fs.exists(path), '%s should not exist after optimization' % path)
+            if (dirname not in directory_to_new_results
+                    or directory_to_new_results[dirname] is None):
+                self.assertFalse(
+                    self.fs.exists(path),
+                    '%s should not exist after optimization' % path)
 
-    def _assert_reftest_optimization(self, results_by_directory, directory_to_new_results, test_path='', baseline_dirname=''):
+    def _assert_reftest_optimization(self,
+                                     results_by_directory,
+                                     directory_to_new_results,
+                                     test_path='',
+                                     baseline_dirname=''):
         web_tests_dir = PathFinder(self.fs).web_tests_dir()
-        self.fs.write_text_file(self.fs.join(web_tests_dir, test_path, 'mock-test-expected.html'), 'ref')
-        self._assert_optimization(results_by_directory, directory_to_new_results, baseline_dirname, suffix='png')
+        self.fs.write_text_file(
+            self.fs.join(web_tests_dir, test_path, 'mock-test-expected.html'),
+            'ref')
+        self._assert_optimization(
+            results_by_directory,
+            directory_to_new_results,
+            baseline_dirname,
+            suffix='png')
 
     def test_linux_redundant_with_win(self):
-        self._assert_optimization(
-            {
-                'platform/win': '1',
-                'platform/linux': '1',
-            },
-            {
-                'platform/win': '1',
-            })
+        self._assert_optimization({
+            'platform/win': '1',
+            'platform/linux': '1',
+        }, {
+            'platform/win': '1',
+        })
 
     def test_covers_mac_win_linux(self):
-        self._assert_optimization(
-            {
-                'platform/mac': '1',
-                'platform/win': '1',
-                'platform/linux': '1',
-            },
-            {
-                '': '1',
-            })
+        self._assert_optimization({
+            'platform/mac': '1',
+            'platform/win': '1',
+            'platform/linux': '1',
+        }, {
+            '': '1',
+        })
 
     def test_overwrites_root(self):
-        self._assert_optimization(
-            {
-                'platform/mac': '1',
-                'platform/win': '1',
-                'platform/linux': '1',
-                '': '2',
-            },
-            {
-                '': '1',
-            })
+        self._assert_optimization({
+            'platform/mac': '1',
+            'platform/win': '1',
+            'platform/linux': '1',
+            '': '2',
+        }, {
+            '': '1',
+        })
 
     def test_no_new_common_directory(self):
-        self._assert_optimization(
-            {
-                'platform/mac': '1',
-                'platform/linux': '1',
-                '': '2',
-            },
-            {
-                'platform/mac': '1',
-                'platform/linux': '1',
-                '': '2',
-            })
+        self._assert_optimization({
+            'platform/mac': '1',
+            'platform/linux': '1',
+            '': '2',
+        }, {
+            'platform/mac': '1',
+            'platform/linux': '1',
+            '': '2',
+        })
 
     def test_local_optimization(self):
-        self._assert_optimization(
-            {
-                'platform/mac': '1',
-                'platform/linux': '1',
-                'platform/mac-mac10.11': '1',
-            },
-            {
-                'platform/mac': '1',
-                'platform/linux': '1',
-            })
+        self._assert_optimization({
+            'platform/mac': '1',
+            'platform/linux': '1',
+            'platform/mac-mac10.11': '1',
+        }, {
+            'platform/mac': '1',
+            'platform/linux': '1',
+        })
 
     def test_local_optimization_skipping_a_port_in_the_middle(self):
         # mac-mac10.10 -> mac-mac10.11 -> mac
-        self._assert_optimization(
-            {
-                'platform/mac': '1',
-                'platform/linux': '1',
-                'platform/mac-mac10.10': '1',
-            },
-            {
-                'platform/mac': '1',
-                'platform/linux': '1',
-            })
+        self._assert_optimization({
+            'platform/mac': '1',
+            'platform/linux': '1',
+            'platform/mac-mac10.10': '1',
+        }, {
+            'platform/mac': '1',
+            'platform/linux': '1',
+        })
 
     def test_baseline_redundant_with_root(self):
-        self._assert_optimization(
-            {
-                'platform/mac': '1',
-                'platform/win': '2',
-                '': '2',
-            },
-            {
-                'platform/mac': '1',
-                '': '2',
-            })
+        self._assert_optimization({
+            'platform/mac': '1',
+            'platform/win': '2',
+            '': '2',
+        }, {
+            'platform/mac': '1',
+            '': '2',
+        })
 
     def test_root_baseline_unused(self):
-        self._assert_optimization(
-            {
-                'platform/mac': '1',
-                'platform/win': '2',
-                '': '3',
-            },
-            {
-                'platform/mac': '1',
-                'platform/win': '2',
-            })
+        self._assert_optimization({
+            'platform/mac': '1',
+            'platform/win': '2',
+            '': '3',
+        }, {
+            'platform/mac': '1',
+            'platform/win': '2',
+        })
 
     def test_root_baseline_unused_and_non_existant(self):
-        self._assert_optimization(
-            {
-                'platform/mac': '1',
-                'platform/win': '2',
-            },
-            {
-                'platform/mac': '1',
-                'platform/win': '2',
-            })
+        self._assert_optimization({
+            'platform/mac': '1',
+            'platform/win': '2',
+        }, {
+            'platform/mac': '1',
+            'platform/win': '2',
+        })
 
     def test_virtual_baseline_redundant_with_non_virtual(self):
-        self._assert_optimization(
-            {
-                'platform/win/virtual/gpu/fast/canvas': '2',
-                'platform/win/fast/canvas': '2',
-            },
-            {
-                'platform/win/fast/canvas': '2',
-            },
-            baseline_dirname='virtual/gpu/fast/canvas')
+        self._assert_optimization({
+            'platform/win/virtual/gpu/fast/canvas': '2',
+            'platform/win/fast/canvas': '2',
+        }, {
+            'platform/win/fast/canvas': '2',
+        },
+                                  baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_virtual_baseline_redundant_with_non_virtual_fallback(self):
         # virtual linux -> virtual win -> virtual root -> linux -> win
@@ -251,58 +258,49 @@
             {
                 'platform/linux/virtual/gpu/fast/canvas': '2',
                 'platform/win/fast/canvas': '2',
-            },
-            {
+            }, {
                 'platform/win/virtual/gpu/fast/canvas': None,
                 'platform/win/fast/canvas': '2',
             },
             baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_virtual_baseline_redundant_with_actual_root(self):
-        self._assert_optimization(
-            {
-                'platform/win/virtual/gpu/fast/canvas': '2',
-                'fast/canvas': '2',
-            },
-            {
-                'fast/canvas': '2',
-            },
-            baseline_dirname='virtual/gpu/fast/canvas')
+        self._assert_optimization({
+            'platform/win/virtual/gpu/fast/canvas': '2',
+            'fast/canvas': '2',
+        }, {
+            'fast/canvas': '2',
+        },
+                                  baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_virtual_root_redundant_with_actual_root(self):
-        self._assert_optimization(
-            {
-                'virtual/gpu/fast/canvas': '2',
-                'fast/canvas': '2',
-            },
-            {
-                'fast/canvas': '2',
-            },
-            baseline_dirname='virtual/gpu/fast/canvas')
+        self._assert_optimization({
+            'virtual/gpu/fast/canvas': '2',
+            'fast/canvas': '2',
+        }, {
+            'fast/canvas': '2',
+        },
+                                  baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_virtual_root_redundant_with_ancestors(self):
-        self._assert_optimization(
-            {
-                'virtual/gpu/fast/canvas': '2',
-                'platform/mac/fast/canvas': '2',
-                'platform/win/fast/canvas': '2',
-            },
-            {
-                'fast/canvas': '2',
-            },
-            baseline_dirname='virtual/gpu/fast/canvas')
+        self._assert_optimization({
+            'virtual/gpu/fast/canvas': '2',
+            'platform/mac/fast/canvas': '2',
+            'platform/win/fast/canvas': '2',
+        }, {
+            'fast/canvas': '2',
+        },
+                                  baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_virtual_root_not_redundant_with_ancestors(self):
-        self._assert_optimization(
-            {
-                'virtual/gpu/fast/canvas': '2',
-                'platform/mac/fast/canvas': '1',
-            },
-            {
-                'virtual/gpu/fast/canvas': '2',
-                'platform/mac/fast/canvas': '1',
-            },
-            baseline_dirname='virtual/gpu/fast/canvas')
+        self._assert_optimization({
+            'virtual/gpu/fast/canvas': '2',
+            'platform/mac/fast/canvas': '1',
+        }, {
+            'virtual/gpu/fast/canvas': '2',
+            'platform/mac/fast/canvas': '1',
+        },
+                                  baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_virtual_covers_mac_win_linux(self):
         self._assert_optimization(
@@ -310,52 +308,60 @@
                 'platform/mac/virtual/gpu/fast/canvas': '1',
                 'platform/win/virtual/gpu/fast/canvas': '1',
                 'platform/linux/virtual/gpu/fast/canvas': '1',
-            },
-            {
+            }, {
                 'virtual/gpu/fast/canvas': '1',
             },
             baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_all_pass_testharness_at_root(self):
-        self._assert_optimization(
-            {'': ALL_PASS_TESTHARNESS_RESULT},
-            {'': None})
+        self._assert_optimization({
+            '': ALL_PASS_TESTHARNESS_RESULT
+        }, {'': None})
 
     def test_all_pass_testharness_at_linux(self):
-        self._assert_optimization(
-            {'platform/linux': ALL_PASS_TESTHARNESS_RESULT},
-            {'platform/linux': None})
+        self._assert_optimization({
+            'platform/linux': ALL_PASS_TESTHARNESS_RESULT
+        }, {'platform/linux': None})
 
     def test_all_pass_testharness_at_linux_and_win(self):
         # https://crbug.com/805008
         self._assert_optimization(
-            {'platform/linux': ALL_PASS_TESTHARNESS_RESULT,
-             'platform/win': ALL_PASS_TESTHARNESS_RESULT},
-            {'platform/linux': None,
-             'platform/win': None})
+            {
+                'platform/linux': ALL_PASS_TESTHARNESS_RESULT,
+                'platform/win': ALL_PASS_TESTHARNESS_RESULT
+            }, {
+                'platform/linux': None,
+                'platform/win': None
+            })
 
     def test_all_pass_testharness_at_virtual_root(self):
         self._assert_optimization(
-            {'virtual/gpu/fast/canvas': ALL_PASS_TESTHARNESS_RESULT},
-            {'virtual/gpu/fast/canvas': None},
+            {
+                'virtual/gpu/fast/canvas': ALL_PASS_TESTHARNESS_RESULT
+            }, {'virtual/gpu/fast/canvas': None},
             baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_all_pass_testharness_at_virtual_linux(self):
         self._assert_optimization(
-            {'platform/linux/virtual/gpu/fast/canvas': ALL_PASS_TESTHARNESS_RESULT},
-            {'platform/linux/virtual/gpu/fast/canvas': None},
+            {
+                'platform/linux/virtual/gpu/fast/canvas':
+                ALL_PASS_TESTHARNESS_RESULT
+            }, {'platform/linux/virtual/gpu/fast/canvas': None},
             baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_all_pass_testharness_can_be_updated(self):
         # https://crbug.com/866802
         self._assert_optimization(
             {
-                'fast/canvas': 'failure',
-                'virtual/gpu/fast/canvas': ALL_PASS_TESTHARNESS_RESULT,
-                'platform/win/virtual/gpu/fast/canvas': ALL_PASS_TESTHARNESS_RESULT2,
-                'platform/mac/virtual/gpu/fast/canvas': ALL_PASS_TESTHARNESS_RESULT2,
-            },
-            {
+                'fast/canvas':
+                'failure',
+                'virtual/gpu/fast/canvas':
+                ALL_PASS_TESTHARNESS_RESULT,
+                'platform/win/virtual/gpu/fast/canvas':
+                ALL_PASS_TESTHARNESS_RESULT2,
+                'platform/mac/virtual/gpu/fast/canvas':
+                ALL_PASS_TESTHARNESS_RESULT2,
+            }, {
                 'fast/canvas': 'failure',
                 'virtual/gpu/fast/canvas': ALL_PASS_TESTHARNESS_RESULT2,
                 'platform/win/virtual/gpu/fast/canvas': None,
@@ -369,8 +375,7 @@
             {
                 'platform/linux': ALL_PASS_TESTHARNESS_RESULT,
                 '': '1'
-            },
-            {
+            }, {
                 'platform/linux': ALL_PASS_TESTHARNESS_RESULT,
                 '': '1'
             })
@@ -381,118 +386,108 @@
             {
                 'virtual/gpu/fast/canvas': ALL_PASS_TESTHARNESS_RESULT,
                 'platform/linux/fast/canvas': '1',
-            },
-            {
+            }, {
                 'virtual/gpu/fast/canvas': ALL_PASS_TESTHARNESS_RESULT,
                 'platform/linux/fast/canvas': '1',
             },
             baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_empty_at_root(self):
-        self._assert_optimization(
-            {'': ''},
-            {'': None})
+        self._assert_optimization({'': ''}, {'': None})
 
     def test_empty_at_linux(self):
-        self._assert_optimization(
-            {'platform/linux': ''},
-            {'platform/linux': None})
+        self._assert_optimization({
+            'platform/linux': ''
+        }, {'platform/linux': None})
 
     def test_empty_at_linux_and_win(self):
         # https://crbug.com/805008
-        self._assert_optimization(
-            {
-                'platform/linux': '',
-                'platform/win': '',
-            },
-            {
-                'platform/linux': None,
-                'platform/win': None,
-            })
+        self._assert_optimization({
+            'platform/linux': '',
+            'platform/win': '',
+        }, {
+            'platform/linux': None,
+            'platform/win': None,
+        })
 
     def test_empty_at_virtual_root(self):
-        self._assert_optimization(
-            {'virtual/gpu/fast/canvas': ''},
-            {'virtual/gpu/fast/canvas': None},
-            baseline_dirname='virtual/gpu/fast/canvas')
+        self._assert_optimization({
+            'virtual/gpu/fast/canvas': ''
+        }, {'virtual/gpu/fast/canvas': None},
+                                  baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_empty_at_virtual_linux(self):
         self._assert_optimization(
-            {'platform/linux/virtual/gpu/fast/canvas': ''},
-            {'platform/linux/virtual/gpu/fast/canvas': None},
+            {
+                'platform/linux/virtual/gpu/fast/canvas': ''
+            }, {'platform/linux/virtual/gpu/fast/canvas': None},
             baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_empty_falls_back_to_non_empty(self):
         # The empty baseline needs to be preserved in this case.
-        self._assert_optimization(
-            {
-                'platform/linux': '',
-                '': '1',
-            },
-            {
-                'platform/linux': '',
-                '': '1',
-            })
+        self._assert_optimization({
+            'platform/linux': '',
+            '': '1',
+        }, {
+            'platform/linux': '',
+            '': '1',
+        })
 
     def test_virtual_empty_falls_back_to_non_empty(self):
         # The empty baseline needs to be preserved in this case.
-        self._assert_optimization(
-            {
-                'virtual/gpu/fast/canvas': '',
-                'platform/linux/fast/canvas': '1',
-            },
-            {
-                'virtual/gpu/fast/canvas': '',
-                'platform/linux/fast/canvas': '1',
-            },
-            baseline_dirname='virtual/gpu/fast/canvas')
+        self._assert_optimization({
+            'virtual/gpu/fast/canvas': '',
+            'platform/linux/fast/canvas': '1',
+        }, {
+            'virtual/gpu/fast/canvas': '',
+            'platform/linux/fast/canvas': '1',
+        },
+                                  baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_extra_png_for_reftest_at_root(self):
-        self._assert_reftest_optimization(
-            {'': 'extra'},
-            {'': None})
+        self._assert_reftest_optimization({'': 'extra'}, {'': None})
 
     def test_extra_png_for_reftest_at_linux(self):
-        self._assert_reftest_optimization(
-            {'platform/linux': 'extra'},
-            {'platform/linux': None})
+        self._assert_reftest_optimization({
+            'platform/linux': 'extra'
+        }, {'platform/linux': None})
 
     def test_extra_png_for_reftest_at_linux_and_win(self):
         # https://crbug.com/805008
-        self._assert_reftest_optimization(
-            {
-                'platform/linux': 'extra1',
-                'platform/win': 'extra2',
-            },
-            {
-                'platform/linux': None,
-                'platform/win': None,
-            })
+        self._assert_reftest_optimization({
+            'platform/linux': 'extra1',
+            'platform/win': 'extra2',
+        }, {
+            'platform/linux': None,
+            'platform/win': None,
+        })
 
     def test_extra_png_for_reftest_at_virtual_root(self):
         self._assert_reftest_optimization(
-            {'virtual/gpu/fast/canvas': 'extra'},
-            {'virtual/gpu/fast/canvas': None},
-            test_path='fast/canvas', baseline_dirname='virtual/gpu/fast/canvas')
+            {
+                'virtual/gpu/fast/canvas': 'extra'
+            }, {'virtual/gpu/fast/canvas': None},
+            test_path='fast/canvas',
+            baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_extra_png_for_reftest_at_virtual_linux(self):
         self._assert_reftest_optimization(
-            {'platform/linux/virtual/gpu/fast/canvas': 'extra'},
-            {'platform/linux/virtual/gpu/fast/canvas': None},
-            test_path='fast/canvas', baseline_dirname='virtual/gpu/fast/canvas')
+            {
+                'platform/linux/virtual/gpu/fast/canvas': 'extra'
+            }, {'platform/linux/virtual/gpu/fast/canvas': None},
+            test_path='fast/canvas',
+            baseline_dirname='virtual/gpu/fast/canvas')
 
     def test_extra_png_for_reftest_falls_back_to_base(self):
         # The extra png for reftest should be removed even if it's different
         # from the fallback.
-        self._assert_reftest_optimization(
-            {
-                'platform/linux': 'extra1',
-                '': 'extra2',
-            },
-            {
-                'platform/linux': None,
-                '': None,
-            })
+        self._assert_reftest_optimization({
+            'platform/linux': 'extra1',
+            '': 'extra2',
+        }, {
+            'platform/linux': None,
+            '': None,
+        })
 
     def test_virtual_extra_png_for_reftest_falls_back_to_base(self):
         # The extra png for reftest should be removed even if it's different
@@ -501,104 +496,131 @@
             {
                 'virtual/gpu/fast/canvas': 'extra',
                 'platform/linux/fast/canvas': 'extra2',
-            },
-            {
+            }, {
                 'virtual/gpu/fast/canvas': None,
                 'platform/linux/fast/canvas': None,
             },
-            test_path='fast/canvas', baseline_dirname='virtual/gpu/fast/canvas')
+            test_path='fast/canvas',
+            baseline_dirname='virtual/gpu/fast/canvas')
 
     # Tests for protected methods - pylint: disable=protected-access
 
     def test_move_baselines(self):
         self.fs.write_text_file(MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
         self.fs.write_binary_file(
-            MOCK_WEB_TESTS + 'platform/win/another/test-expected.txt', 'result A')
+            MOCK_WEB_TESTS + 'platform/win/another/test-expected.txt',
+            'result A')
         self.fs.write_binary_file(
-            MOCK_WEB_TESTS + 'platform/mac/another/test-expected.txt', 'result A')
-        self.fs.write_binary_file(MOCK_WEB_TESTS + 'another/test-expected.txt', 'result B')
+            MOCK_WEB_TESTS + 'platform/mac/another/test-expected.txt',
+            'result A')
+        self.fs.write_binary_file(MOCK_WEB_TESTS + 'another/test-expected.txt',
+                                  'result B')
         baseline_optimizer = BaselineOptimizer(
-            self.host, self.host.port_factory.get(), self.host.port_factory.all_port_names())
+            self.host, self.host.port_factory.get(),
+            self.host.port_factory.all_port_names())
         baseline_optimizer._move_baselines(
-            'another/test-expected.txt',
-            {
+            'another/test-expected.txt', {
                 MOCK_WEB_TESTS + 'platform/win': 'aaa',
                 MOCK_WEB_TESTS + 'platform/mac': 'aaa',
                 MOCK_WEB_TESTS[:-1]: 'bbb',
-            },
-            {
+            }, {
                 MOCK_WEB_TESTS[:-1]: 'aaa',
             })
         self.assertEqual(
-            self.fs.read_binary_file(
-                MOCK_WEB_TESTS + 'another/test-expected.txt'),
-            'result A')
+            self.fs.read_binary_file(MOCK_WEB_TESTS +
+                                     'another/test-expected.txt'), 'result A')
 
     def test_move_baselines_skip_git_commands(self):
         self.fs.write_text_file(MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
         self.fs.write_binary_file(
-            MOCK_WEB_TESTS + 'platform/win/another/test-expected.txt', 'result A')
+            MOCK_WEB_TESTS + 'platform/win/another/test-expected.txt',
+            'result A')
         self.fs.write_binary_file(
-            MOCK_WEB_TESTS + 'platform/mac/another/test-expected.txt', 'result A')
-        self.fs.write_binary_file(MOCK_WEB_TESTS + 'another/test-expected.txt', 'result B')
+            MOCK_WEB_TESTS + 'platform/mac/another/test-expected.txt',
+            'result A')
+        self.fs.write_binary_file(MOCK_WEB_TESTS + 'another/test-expected.txt',
+                                  'result B')
         baseline_optimizer = BaselineOptimizer(
-            self.host, self.host.port_factory.get(), self.host.port_factory.all_port_names())
+            self.host, self.host.port_factory.get(),
+            self.host.port_factory.all_port_names())
         baseline_optimizer._move_baselines(
-            'another/test-expected.txt',
-            {
+            'another/test-expected.txt', {
                 MOCK_WEB_TESTS + 'platform/win': 'aaa',
                 MOCK_WEB_TESTS + 'platform/mac': 'aaa',
                 MOCK_WEB_TESTS[:-1]: 'bbb',
-            },
-            {
+            }, {
                 MOCK_WEB_TESTS + 'platform/linux': 'bbb',
                 MOCK_WEB_TESTS[:-1]: 'aaa',
             })
         self.assertEqual(
-            self.fs.read_binary_file(
-                MOCK_WEB_TESTS + 'another/test-expected.txt'),
-            'result A')
+            self.fs.read_binary_file(MOCK_WEB_TESTS +
+                                     'another/test-expected.txt'), 'result A')
 
 
 class ResultDigestTest(unittest.TestCase):
-
     def setUp(self):
         self.host = MockHost()
         self.fs = MockFileSystem()
         self.host.filesystem = self.fs
-        self.fs.write_text_file('/all-pass/foo-expected.txt', ALL_PASS_TESTHARNESS_RESULT)
-        self.fs.write_text_file('/all-pass/bar-expected.txt', ALL_PASS_TESTHARNESS_RESULT2)
+        self.fs.write_text_file('/all-pass/foo-expected.txt',
+                                ALL_PASS_TESTHARNESS_RESULT)
+        self.fs.write_text_file('/all-pass/bar-expected.txt',
+                                ALL_PASS_TESTHARNESS_RESULT2)
         self.fs.write_text_file('/failures/baz-expected.txt', 'failure')
         self.fs.write_binary_file('/others/reftest-expected.png', 'extra')
         self.fs.write_binary_file('/others/reftest2-expected.png', 'extra2')
         self.fs.write_text_file('/others/empty-expected.txt', '')
-        self.fs.write_binary_file('/others/something-expected.png', 'Something')
+        self.fs.write_binary_file('/others/something-expected.png',
+                                  'Something')
         self.fs.write_binary_file('/others/empty-expected.png', '')
 
     def test_all_pass_testharness_result(self):
-        self.assertTrue(ResultDigest(self.fs, '/all-pass/foo-expected.txt').is_extra_result)
-        self.assertTrue(ResultDigest(self.fs, '/all-pass/bar-expected.txt').is_extra_result)
-        self.assertFalse(ResultDigest(self.fs, '/failures/baz-expected.txt').is_extra_result)
+        self.assertTrue(
+            ResultDigest(self.fs,
+                         '/all-pass/foo-expected.txt').is_extra_result)
+        self.assertTrue(
+            ResultDigest(self.fs,
+                         '/all-pass/bar-expected.txt').is_extra_result)
+        self.assertFalse(
+            ResultDigest(self.fs,
+                         '/failures/baz-expected.txt').is_extra_result)
 
     def test_empty_result(self):
-        self.assertFalse(ResultDigest(self.fs, '/others/something-expected.png').is_extra_result)
-        self.assertTrue(ResultDigest(self.fs, '/others/empty-expected.txt').is_extra_result)
-        self.assertTrue(ResultDigest(self.fs, '/others/empty-expected.png').is_extra_result)
+        self.assertFalse(
+            ResultDigest(self.fs,
+                         '/others/something-expected.png').is_extra_result)
+        self.assertTrue(
+            ResultDigest(self.fs,
+                         '/others/empty-expected.txt').is_extra_result)
+        self.assertTrue(
+            ResultDigest(self.fs,
+                         '/others/empty-expected.png').is_extra_result)
 
     def test_extra_png_for_reftest_result(self):
-        self.assertFalse(ResultDigest(self.fs, '/others/something-expected.png').is_extra_result)
-        self.assertTrue(ResultDigest(self.fs, '/others/reftest-expected.png', is_reftest=True).is_extra_result)
+        self.assertFalse(
+            ResultDigest(self.fs,
+                         '/others/something-expected.png').is_extra_result)
+        self.assertTrue(
+            ResultDigest(
+                self.fs, '/others/reftest-expected.png',
+                is_reftest=True).is_extra_result)
 
     def test_non_extra_result(self):
-        self.assertFalse(ResultDigest(self.fs, '/others/something-expected.png').is_extra_result)
+        self.assertFalse(
+            ResultDigest(self.fs,
+                         '/others/something-expected.png').is_extra_result)
 
     def test_implicit_extra_result(self):
         # Implicit empty equal to any extra result but not failures.
         implicit = ResultDigest(None, None)
-        self.assertTrue(implicit == ResultDigest(self.fs, '/all-pass/foo-expected.txt'))
-        self.assertTrue(implicit == ResultDigest(self.fs, '/all-pass/bar-expected.txt'))
-        self.assertFalse(implicit == ResultDigest(self.fs, '/failures/baz-expected.txt'))
-        self.assertTrue(implicit == ResultDigest(self.fs, '/others/reftest-expected.png', is_reftest=True))
+        self.assertTrue(
+            implicit == ResultDigest(self.fs, '/all-pass/foo-expected.txt'))
+        self.assertTrue(
+            implicit == ResultDigest(self.fs, '/all-pass/bar-expected.txt'))
+        self.assertFalse(
+            implicit == ResultDigest(self.fs, '/failures/baz-expected.txt'))
+        self.assertTrue(implicit == ResultDigest(
+            self.fs, '/others/reftest-expected.png', is_reftest=True))
 
     def test_different_all_pass_results(self):
         x = ResultDigest(self.fs, '/all-pass/foo-expected.txt')
@@ -607,7 +629,9 @@
         self.assertFalse(x == y)
 
     def test_same_extra_png_for_reftest(self):
-        x = ResultDigest(self.fs, '/others/reftest-expected.png', is_reftest=True)
-        y = ResultDigest(self.fs, '/others/reftest2-expected.png', is_reftest=True)
+        x = ResultDigest(
+            self.fs, '/others/reftest-expected.png', is_reftest=True)
+        y = ResultDigest(
+            self.fs, '/others/reftest2-expected.png', is_reftest=True)
         self.assertTrue(x == y)
         self.assertFalse(x != y)
diff --git a/third_party/blink/tools/blinkpy/common/checkout/diff_parser.py b/third_party/blink/tools/blinkpy/common/checkout/diff_parser.py
index 739131fc..777a37f 100644
--- a/third_party/blink/tools/blinkpy/common/checkout/diff_parser.py
+++ b/third_party/blink/tools/blinkpy/common/checkout/diff_parser.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """WebKit's Python module for interacting with patches."""
 
 import logging
@@ -34,8 +33,8 @@
 _log = logging.getLogger(__name__)
 
 INDEX_PATTERN = re.compile(r'^diff --git \w/(.+) \w/(?P<FilePath>.+)')
-LINES_CHANGED_PATTERN = re.compile(r"^@@ -(?P<OldStartLine>\d+)(,\d+)? \+(?P<NewStartLine>\d+)(,\d+)? @@")
-
+LINES_CHANGED_PATTERN = re.compile(
+    r"^@@ -(?P<OldStartLine>\d+)(,\d+)? \+(?P<NewStartLine>\d+)(,\d+)? @@")
 
 _INITIAL_STATE = 1
 _DECLARED_FILE_PATH = 2
@@ -50,6 +49,7 @@
     If deleted_line_number is zero, it means this line is newly added.
     If new_line_number is zero, it means this line is deleted.
     """
+
     # FIXME: Tuples generally grow into classes.  We should consider
     # adding a DiffLine object.
 
@@ -110,7 +110,9 @@
             lines_changed = LINES_CHANGED_PATTERN.match(line)
             if lines_changed:
                 if state != _DECLARED_FILE_PATH and state != _PROCESSING_CHUNK:
-                    _log.error('Unexpected line change without file path declaration: %r', line)
+                    _log.error(
+                        'Unexpected line change without file path declaration: %r',
+                        line)
                 old_diff_line = int(lines_changed.group('OldStartLine'))
                 new_diff_line = int(lines_changed.group('NewStartLine'))
                 state = _PROCESSING_CHUNK
@@ -124,12 +126,15 @@
                     current_file.add_deleted_line(old_diff_line, line[1:])
                     old_diff_line += 1
                 elif line.startswith(' '):
-                    current_file.add_unchanged_line(old_diff_line, new_diff_line, line[1:])
+                    current_file.add_unchanged_line(old_diff_line,
+                                                    new_diff_line, line[1:])
                     old_diff_line += 1
                     new_diff_line += 1
                 elif line == '\\ No newline at end of file':
                     # Nothing to do.  We may still have some added lines.
                     pass
                 else:
-                    _log.error('Unexpected diff format when parsing a chunk: %r', line)
+                    _log.error(
+                        'Unexpected diff format when parsing a chunk: %r',
+                        line)
         return files
diff --git a/third_party/blink/tools/blinkpy/common/checkout/diff_parser_unittest.py b/third_party/blink/tools/blinkpy/common/checkout/diff_parser_unittest.py
index be84891b..edcce6c 100644
--- a/third_party/blink/tools/blinkpy/common/checkout/diff_parser_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/checkout/diff_parser_unittest.py
@@ -34,7 +34,6 @@
 
 
 class DiffParserTest(unittest.TestCase):
-
     def test_diff_parser(self, parser=None):
         if not parser:
             parser = DiffParser(DIFF_TEST_DATA.splitlines())
@@ -48,11 +47,13 @@
         self.assertEqual((47, 47), diff.lines[0][0:2])
         self.assertEqual('', diff.lines[0][2])
         self.assertEqual((48, 48), diff.lines[1][0:2])
-        self.assertEqual('    unsigned align : 3; // EBoxAlignment', diff.lines[1][2])
+        self.assertEqual('    unsigned align : 3; // EBoxAlignment',
+                         diff.lines[1][2])
 
         # The deleted line.
         self.assertEqual((50, 0), diff.lines[3][0:2])
-        self.assertEqual('    unsigned orient: 1; // EBoxOrient', diff.lines[3][2])
+        self.assertEqual('    unsigned orient: 1; // EBoxOrient',
+                         diff.lines[3][2])
 
         # The first file looks OK. Let's check the next, more complicated file.
         self.assertIn('WebCore/style/StyleRareInheritedData.cpp', parser.files)
@@ -78,7 +79,8 @@
         self.assertEqual((87, 90), diff.lines[22][0:2])
 
         # Check if a newly added file is correctly handled.
-        diff = parser.files['web_tests/platform/mac/fast/flexbox/box-orient-button-expected.checksum']
+        diff = parser.files[
+            'web_tests/platform/mac/fast/flexbox/box-orient-button-expected.checksum']
         self.assertEqual(1, len(diff.lines))
         self.assertEqual((0, 1), diff.lines[0][0:2])
 
@@ -86,11 +88,16 @@
         # This repeats test_diff_parser but with different versions
         # of DIFF_TEST_DATA that use other prefixes instead of a/b.
         prefixes = (
-            ('i', 'w'),  # git-diff (compares the (i)ndex and the (w)ork tree)
-            ('c', 'w'),  # git-diff HEAD (compares a (c)ommit and the (w)ork tree)
-            ('c', 'i'),  # git diff --cached (compares a (c)ommit and the (i)ndex)
-            ('o', 'w'),  # git-diff HEAD:file1 file2 (compares an (o)bject and a (w)ork tree entity)
-            ('1', '2'),  # git diff --no-index a b (compares two non-git things (1) and (2))
+            # git-diff (compares the (i)ndex and the (w)ork tree)
+            ('i', 'w'),
+            # git-diff HEAD (compares a (c)ommit and the (w)ork tree)
+            ('c', 'w'),
+            # git diff --cached (compares a (c)ommit and the (i)ndex)
+            ('c', 'i'),
+            # git-diff HEAD:file1 file2 (compares an (o)bject and a (w)ork tree entity)
+            ('o', 'w'),
+            # git diff --no-index a b (compares two non-git things (1) and (2))
+            ('1', '2'),
         )
         for a_replacement, b_replacement in prefixes:
             patch = self._patch(a_replacement, b_replacement)
diff --git a/third_party/blink/tools/blinkpy/common/checkout/git.py b/third_party/blink/tools/blinkpy/common/checkout/git.py
index 3b2bb7a..3ab40d5b 100644
--- a/third_party/blink/tools/blinkpy/common/checkout/git.py
+++ b/third_party/blink/tools/blinkpy/common/checkout/git.py
@@ -45,20 +45,28 @@
     # 1 or 128, mostly.
     ERROR_FILE_IS_MISSING = 128
 
-    def __init__(self, cwd=None, executive=None, filesystem=None, platform=None):
+    def __init__(self,
+                 cwd=None,
+                 executive=None,
+                 filesystem=None,
+                 platform=None):
         self._executive = executive or Executive()
         self._filesystem = filesystem or FileSystem()
-        self._executable_name = self.find_executable_name(self._executive, platform)
+        self._executable_name = self.find_executable_name(
+            self._executive, platform)
 
         self.cwd = cwd or self._filesystem.abspath(self._filesystem.getcwd())
         if not self.in_working_directory(self.cwd):
             module_directory = self._filesystem.abspath(
-                self._filesystem.dirname(self._filesystem.path_to_module(self.__module__)))
-            _log.info('The current directory (%s) is not in a git repo, trying directory %s.',
-                      cwd, module_directory)
+                self._filesystem.dirname(
+                    self._filesystem.path_to_module(self.__module__)))
+            _log.info(
+                'The current directory (%s) is not in a git repo, trying directory %s.',
+                cwd, module_directory)
             if self.in_working_directory(module_directory):
                 self.cwd = module_directory
-            _log.error('Failed to find Git repo for %s or %s', cwd, module_directory)
+            _log.error('Failed to find Git repo for %s or %s', cwd,
+                       module_directory)
 
         self.checkout_root = self.find_checkout_root(self.cwd)
 
@@ -85,7 +93,12 @@
             _log.debug('Using "git.bat" as git executable.')
             return 'git.bat'
 
-    def run(self, command_args, cwd=None, stdin=None, decode_output=True, return_exit_code=False):
+    def run(self,
+            command_args,
+            cwd=None,
+            stdin=None,
+            decode_output=True,
+            return_exit_code=False):
         """Invokes git with the given args."""
         full_command_args = [self._executable_name] + command_args
         cwd = cwd or self.checkout_root
@@ -98,12 +111,14 @@
 
     def absolute_path(self, repository_relative_path):
         """Converts repository-relative paths to absolute paths."""
-        return self._filesystem.join(self.checkout_root, repository_relative_path)
+        return self._filesystem.join(self.checkout_root,
+                                     repository_relative_path)
 
     def in_working_directory(self, path):
         return self._executive.run_command(
             [self._executable_name, 'rev-parse', '--is-inside-work-tree'],
-            cwd=path, error_handler=Executive.ignore_error).rstrip() == 'true'
+            cwd=path,
+            error_handler=Executive.ignore_error).rstrip() == 'true'
 
     def find_checkout_root(self, path):
         """Returns the absolute path to the root of the repository."""
@@ -118,7 +133,9 @@
         # FIXME: This should use an Executive.
         executive = executive or Executive()
         return executive.run_command(
-            [cls.executable_name, 'config', '--get-all', key], error_handler=Executive.ignore_error, cwd=cwd).rstrip('\n')
+            [cls.executable_name, 'config', '--get-all', key],
+            error_handler=Executive.ignore_error,
+            cwd=cwd).rstrip('\n')
 
     def has_working_directory_changes(self, pathspec=None):
         """Checks whether there are uncommitted changes."""
@@ -136,7 +153,8 @@
         """
         # `git status -z` is a version of `git status -s`, that's recommended
         # for machine parsing. Lines are terminated with NUL rather than LF.
-        change_lines = self.run(['status', '-z', '--untracked-files=all']).rstrip('\x00')
+        change_lines = self.run(['status', '-z',
+                                 '--untracked-files=all']).rstrip('\x00')
         if not change_lines:
             return {}  # No changes.
         unstaged_changes = {}
@@ -158,7 +176,9 @@
         return self.run(['mv', '-f', origin, destination])
 
     def exists(self, path):
-        return_code = self.run(['show', 'HEAD:%s' % path], return_exit_code=True, decode_output=False)
+        return_code = self.run(['show', 'HEAD:%s' % path],
+                               return_exit_code=True,
+                               decode_output=False)
         return return_code != self.ERROR_FILE_IS_MISSING
 
     def _branch_from_ref(self, ref):
@@ -174,8 +194,11 @@
 
     def _upstream_branch(self):
         current_branch = self.current_branch()
-        return self._branch_from_ref(self.read_git_config(
-            'branch.%s.merge' % current_branch, cwd=self.checkout_root, executive=self._executive).strip())
+        return self._branch_from_ref(
+            self.read_git_config(
+                'branch.%s.merge' % current_branch,
+                cwd=self.checkout_root,
+                executive=self._executive).strip())
 
     def _merge_base(self, git_commit=None):
         if git_commit:
@@ -183,7 +206,8 @@
             if 'UPSTREAM' in git_commit:
                 upstream = self._upstream_branch()
                 if not upstream:
-                    raise ScriptError(message='No upstream/tracking branch set.')
+                    raise ScriptError(
+                        message='No upstream/tracking branch set.')
                 git_commit = git_commit.replace('UPSTREAM', upstream)
 
             # Special-case <refname>.. to include working copy changes, e.g., 'HEAD....' shows only the diffs from HEAD.
@@ -198,18 +222,24 @@
 
     def changed_files(self, git_commit=None, diff_filter='ADM'):
         # FIXME: --diff-filter could be used to avoid the "extract_filenames" step.
-        status_command = ['diff', '-r', '--name-status',
-                          '--no-renames', '--no-ext-diff', '--full-index', self._merge_base(git_commit)]
+        status_command = [
+            'diff', '-r', '--name-status', '--no-renames', '--no-ext-diff',
+            '--full-index',
+            self._merge_base(git_commit)
+        ]
         # Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R)
-        return self._run_status_and_extract_filenames(status_command, self._status_regexp(diff_filter))
+        return self._run_status_and_extract_filenames(
+            status_command, self._status_regexp(diff_filter))
 
     def added_files(self):
-        return self._run_status_and_extract_filenames(self.status_command(), self._status_regexp('A'))
+        return self._run_status_and_extract_filenames(self.status_command(),
+                                                      self._status_regexp('A'))
 
     def _run_status_and_extract_filenames(self, status_command, status_regexp):
         filenames = []
         # We run with cwd=self.checkout_root so that returned-paths are root-relative.
-        for line in self.run(status_command, cwd=self.checkout_root).splitlines():
+        for line in self.run(
+                status_command, cwd=self.checkout_root).splitlines():
             match = re.search(status_regexp, line)
             if not match:
                 continue
@@ -231,10 +261,15 @@
     def most_recent_log_matching(self, grep_str, path):
         # We use '--grep=' + foo rather than '--grep', foo because
         # git 1.7.0.4 (and earlier) didn't support the separate arg.
-        return self.run(['log', '-1', '--grep=' + grep_str, '--date=iso', self.find_checkout_root(path)])
+        return self.run([
+            'log', '-1', '--grep=' + grep_str, '--date=iso',
+            self.find_checkout_root(path)
+        ])
 
     def _commit_position_from_git_log(self, git_log):
-        match = re.search(r"^\s*Cr-Commit-Position:.*@\{#(?P<commit_position>\d+)\}", git_log, re.MULTILINE)
+        match = re.search(
+            r"^\s*Cr-Commit-Position:.*@\{#(?P<commit_position>\d+)\}",
+            git_log, re.MULTILINE)
         if not match:
             return ''
         return int(match.group('commit_position'))
@@ -271,16 +306,20 @@
         return self._commit_position_from_git_log(git_log)
 
     def _branch_ref_exists(self, branch_ref):
-        return self.run(['show-ref', '--quiet', '--verify', branch_ref], return_exit_code=True) == 0
+        return self.run(['show-ref', '--quiet', '--verify', branch_ref],
+                        return_exit_code=True) == 0
 
     def _remote_merge_base(self):
-        return self.run(['merge-base', self._remote_branch_ref(), 'HEAD']).strip()
+        return self.run(['merge-base',
+                         self._remote_branch_ref(), 'HEAD']).strip()
 
     def _remote_branch_ref(self):
         # Use references so that we can avoid collisions, e.g. we don't want to operate on refs/heads/trunk if it exists.
         remote_master_ref = 'refs/remotes/origin/master'
         if not self._branch_ref_exists(remote_master_ref):
-            raise ScriptError(message="Can't find a branch to diff against. %s does not exist" % remote_master_ref)
+            raise ScriptError(
+                message="Can't find a branch to diff against. %s does not exist"
+                % remote_master_ref)
         return remote_master_ref
 
     def commit_locally_with_message(self, message):
@@ -291,7 +330,8 @@
         return self.run(['log', '-1', '--format=%H']).strip()
 
     def git_commits_since(self, commit):
-        return self.run(['log', commit + '..master', '--format=%H', '--reverse']).split()
+        return self.run(
+            ['log', commit + '..master', '--format=%H', '--reverse']).split()
 
     def git_commit_detail(self, commit, format=None):  # pylint: disable=redefined-builtin
         args = ['log', '-1', commit]
diff --git a/third_party/blink/tools/blinkpy/common/checkout/git_mock.py b/third_party/blink/tools/blinkpy/common/checkout/git_mock.py
index 7f48fd9b..f5494d29 100644
--- a/third_party/blink/tools/blinkpy/common/checkout/git_mock.py
+++ b/third_party/blink/tools/blinkpy/common/checkout/git_mock.py
@@ -11,7 +11,11 @@
     # Arguments are listed below, even if they're unused, in order to match
     # the Git class. pylint: disable=unused-argument
 
-    def __init__(self, cwd=None, filesystem=None, executive=None, platform=None):
+    def __init__(self,
+                 cwd=None,
+                 filesystem=None,
+                 executive=None,
+                 platform=None):
         self.checkout_root = '/mock-checkout'
         self.cwd = cwd or self.checkout_root
         self.added_paths = set()
@@ -20,7 +24,12 @@
         self._executable_name = 'git'
         self._local_commits = []
 
-    def run(self, command_args, cwd=None, stdin=None, decode_output=True, return_exit_code=False):
+    def run(self,
+            command_args,
+            cwd=None,
+            stdin=None,
+            decode_output=True,
+            return_exit_code=False):
         full_command_args = [self._executable_name] + command_args
         cwd = cwd or self.checkout_root
         return self._executive.run_command(
@@ -87,7 +96,8 @@
 
     def move(self, origin, destination):
         if self._filesystem:
-            self._filesystem.move(self.absolute_path(origin), self.absolute_path(destination))
+            self._filesystem.move(
+                self.absolute_path(origin), self.absolute_path(destination))
 
     def changed_files(self, diff_filter='ADM'):
         return []
diff --git a/third_party/blink/tools/blinkpy/common/checkout/git_unittest.py b/third_party/blink/tools/blinkpy/common/checkout/git_unittest.py
index 4112d3b0..da3be9a 100644
--- a/third_party/blink/tools/blinkpy/common/checkout/git_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/checkout/git_unittest.py
@@ -15,7 +15,6 @@
 # These tests could likely be run on Windows if we first used Git.find_executable_name.
 @unittest.skipIf(sys.platform == 'win32', 'fails on Windows')
 class GitTestWithRealFilesystemAndExecutive(unittest.TestCase):
-
     def setUp(self):
         self.executive = Executive()
         self.filesystem = FileSystem()
@@ -23,7 +22,8 @@
         self.original_cwd = self.filesystem.getcwd()
 
         # Set up fresh git repository with one commit.
-        self.untracking_checkout_path = self._mkdtemp(suffix='-git_unittest_untracking')
+        self.untracking_checkout_path = self._mkdtemp(
+            suffix='-git_unittest_untracking')
         self._run(['git', 'init', self.untracking_checkout_path])
 
         self._chdir(self.untracking_checkout_path)
@@ -31,14 +31,24 @@
         self._write_text_file('foo_file', 'foo')
         self._run(['git', 'add', 'foo_file'])
         self._run(['git', 'commit', '-am', 'dummy commit'])
-        self.untracking_git = Git(cwd=self.untracking_checkout_path, filesystem=self.filesystem, executive=self.executive)
+        self.untracking_git = Git(
+            cwd=self.untracking_checkout_path,
+            filesystem=self.filesystem,
+            executive=self.executive)
 
         # Then set up a second git repo that tracks the first one.
-        self.tracking_git_checkout_path = self._mkdtemp(suffix='-git_unittest_tracking')
-        self._run(['git', 'clone', '--quiet', self.untracking_checkout_path, self.tracking_git_checkout_path])
+        self.tracking_git_checkout_path = self._mkdtemp(
+            suffix='-git_unittest_tracking')
+        self._run([
+            'git', 'clone', '--quiet', self.untracking_checkout_path,
+            self.tracking_git_checkout_path
+        ])
         self._chdir(self.tracking_git_checkout_path)
         self._set_user_config()
-        self.tracking_git = Git(cwd=self.tracking_git_checkout_path, filesystem=self.filesystem, executive=self.executive)
+        self.tracking_git = Git(
+            cwd=self.tracking_git_checkout_path,
+            filesystem=self.filesystem,
+            executive=self.executive)
 
     def tearDown(self):
         self._chdir(self.original_cwd)
@@ -47,7 +57,8 @@
 
     def _set_user_config(self):
         self._run(['git', 'config', '--local', 'user.name', 'Fake'])
-        self._run(['git', 'config', '--local', 'user.email', 'fake@example.com'])
+        self._run(
+            ['git', 'config', '--local', 'user.email', 'fake@example.com'])
 
     def _chdir(self, path):
         self.filesystem.chdir(path)
@@ -133,7 +144,8 @@
 
     def test_remote_branch_ref(self):
         # This tests a protected method. pylint: disable=protected-access
-        self.assertEqual(self.tracking_git._remote_branch_ref(), 'refs/remotes/origin/master')
+        self.assertEqual(self.tracking_git._remote_branch_ref(),
+                         'refs/remotes/origin/master')
         self._chdir(self.untracking_checkout_path)
         self.assertRaises(ScriptError, self.untracking_git._remote_branch_ref)
 
@@ -156,7 +168,8 @@
         # Even if diff.noprefix is enabled, create_patch() produces diffs with prefixes.
         self._run(['git', 'config', 'diff.noprefix', 'true'])
         patch = git.create_patch()
-        self.assertRegexpMatches(patch, r'^diff --git a/test_file_commit1 b/test_file_commit1')
+        self.assertRegexpMatches(
+            patch, r'^diff --git a/test_file_commit1 b/test_file_commit1')
 
     def test_rename_files(self):
         self._chdir(self.tracking_git_checkout_path)
@@ -188,9 +201,9 @@
 
 
 class GitTestWithMock(unittest.TestCase):
-
     def make_git(self):
-        git = Git(cwd='.', executive=MockExecutive(), filesystem=MockFileSystem())
+        git = Git(
+            cwd='.', executive=MockExecutive(), filesystem=MockFileSystem())
         return git
 
     def test_unstaged_files(self):
@@ -206,8 +219,7 @@
         ]
         git.run = lambda args: '\x00'.join(status_lines) + '\x00'
         self.assertEqual(
-            git.unstaged_changes(),
-            {
+            git.unstaged_changes(), {
                 'd/modified.txt': 'M',
                 'd/deleted.txt': 'D',
                 'd/untracked.txt': '?',
diff --git a/third_party/blink/tools/blinkpy/common/find_files.py b/third_party/blink/tools/blinkpy/common/find_files.py
index 7b59f67e..e0e2ce1b 100644
--- a/third_party/blink/tools/blinkpy/common/find_files.py
+++ b/third_party/blink/tools/blinkpy/common/find_files.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """A utility module used to find files. It exposes one public function: find().
 
 If a list is passed in, the returned list of files is constrained to those
@@ -45,7 +44,12 @@
 import itertools
 
 
-def find(filesystem, base_dir, paths=None, skipped_directories=None, file_filter=None, directory_sort_key=None):
+def find(filesystem,
+         base_dir,
+         paths=None,
+         skipped_directories=None,
+         file_filter=None,
+         directory_sort_key=None):
     """Finds the set of tests under a given list of sub-paths.
 
     Args:
@@ -64,14 +68,18 @@
     paths = paths or ['*']
     skipped_directories = skipped_directories or set()
     absolute_paths = _normalize(filesystem, base_dir, paths)
-    return _normalized_find(filesystem, absolute_paths, skipped_directories, file_filter, directory_sort_key)
+    return _normalized_find(filesystem, absolute_paths, skipped_directories,
+                            file_filter, directory_sort_key)
 
 
 def _normalize(filesystem, base_dir, paths):
-    return [filesystem.normpath(filesystem.join(base_dir, path)) for path in paths]
+    return [
+        filesystem.normpath(filesystem.join(base_dir, path)) for path in paths
+    ]
 
 
-def _normalized_find(filesystem, paths, skipped_directories, file_filter, directory_sort_key):
+def _normalized_find(filesystem, paths, skipped_directories, file_filter,
+                     directory_sort_key):
     """Finds the set of tests under the given list of paths."""
     paths_to_walk = itertools.chain(*(filesystem.glob(path) for path in paths))
 
@@ -81,4 +89,5 @@
         return files_list
 
     return itertools.chain(*(sort_by_directory_key(
-        filesystem.files_under(path, skipped_directories, file_filter)) for path in paths_to_walk))
+        filesystem.files_under(path, skipped_directories, file_filter))
+                             for path in paths_to_walk))
diff --git a/third_party/blink/tools/blinkpy/common/find_files_unittest.py b/third_party/blink/tools/blinkpy/common/find_files_unittest.py
index 596c507..aaf4795 100644
--- a/third_party/blink/tools/blinkpy/common/find_files_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/find_files_unittest.py
@@ -35,7 +35,6 @@
 
 
 class MockWinFileSystem(object):
-
     def join(self, *paths):
         return '\\'.join(paths)
 
@@ -44,12 +43,15 @@
 
 
 class TestWinNormalize(unittest.TestCase):
-
     def assert_filesystem_normalizes(self, filesystem):
         # pylint: disable=protected-access
         self.assertEqual(
-            find_files._normalize(filesystem, 'c:\\foo', ['fast/html', 'fast/canvas/*', 'compositing/foo.html']),
-            ['c:\\foo\\fast\\html', 'c:\\foo\\fast\\canvas\\*', 'c:\\foo\\compositing\\foo.html'])
+            find_files._normalize(
+                filesystem, 'c:\\foo',
+                ['fast/html', 'fast/canvas/*', 'compositing/foo.html']), [
+                    'c:\\foo\\fast\\html', 'c:\\foo\\fast\\canvas\\*',
+                    'c:\\foo\\compositing\\foo.html'
+                ])
 
     def test_mocked_win(self):
         # This tests test_files.normalize, using portable behavior emulating
@@ -66,7 +68,6 @@
 
 
 class TestFind(unittest.TestCase):
-
     def test_basic(self):
         filesystem = MockFileSystem({
             '/base/a/1': '',
@@ -74,6 +75,12 @@
             '/base/b/1': '',
             '/base/c/2': '',
         })
-        self.assertEqual(list(find_files.find(filesystem, '/base/', ['a'])), ['/base/a/1', '/base/a/2'])
-        self.assertEqual(list(find_files.find(filesystem, '/base/', ['b', 'c'])), ['/base/b/1', '/base/c/2'])
-        self.assertEqual(list(find_files.find(filesystem, '/base/', ['*/1'])), ['/base/a/1', '/base/b/1'])
+        self.assertEqual(
+            list(find_files.find(filesystem, '/base/', ['a'])),
+            ['/base/a/1', '/base/a/2'])
+        self.assertEqual(
+            list(find_files.find(filesystem, '/base/', ['b', 'c'])),
+            ['/base/b/1', '/base/c/2'])
+        self.assertEqual(
+            list(find_files.find(filesystem, '/base/', ['*/1'])),
+            ['/base/a/1', '/base/b/1'])
diff --git a/third_party/blink/tools/blinkpy/common/host.py b/third_party/blink/tools/blinkpy/common/host.py
index 604ee03..a2c602c 100644
--- a/third_party/blink/tools/blinkpy/common/host.py
+++ b/third_party/blink/tools/blinkpy/common/host.py
@@ -36,12 +36,10 @@
 from blinkpy.web_tests.builder_list import BuilderList
 from blinkpy.web_tests.port.factory import PortFactory
 
-
 _log = logging.getLogger(__name__)
 
 
 class Host(SystemHost):
-
     def __init__(self):
         SystemHost.__init__(self)
         self.web = web.Web()
@@ -61,7 +59,14 @@
 
     def git(self, path=None):
         if path:
-            return Git(cwd=path, executive=self.executive, filesystem=self.filesystem, platform=self.platform)
+            return Git(
+                cwd=path,
+                executive=self.executive,
+                filesystem=self.filesystem,
+                platform=self.platform)
         if not self._git:
-            self._git = Git(filesystem=self.filesystem, executive=self.executive, platform=self.platform)
+            self._git = Git(
+                filesystem=self.filesystem,
+                executive=self.executive,
+                platform=self.platform)
         return self._git
diff --git a/third_party/blink/tools/blinkpy/common/host_mock.py b/third_party/blink/tools/blinkpy/common/host_mock.py
index 05b23c4..13150a2 100644
--- a/third_party/blink/tools/blinkpy/common/host_mock.py
+++ b/third_party/blink/tools/blinkpy/common/host_mock.py
@@ -40,7 +40,6 @@
 
 
 class MockHost(MockSystemHost):
-
     def __init__(self,
                  log_executive=False,
                  web=None,
@@ -103,9 +102,16 @@
 
     def git(self, path=None):
         if path:
-            return MockGit(cwd=path, filesystem=self.filesystem, executive=self.executive, platform=self.platform)
+            return MockGit(
+                cwd=path,
+                filesystem=self.filesystem,
+                executive=self.executive,
+                platform=self.platform)
         if not self._git:
-            self._git = MockGit(filesystem=self.filesystem, executive=self.executive, platform=self.platform)
+            self._git = MockGit(
+                filesystem=self.filesystem,
+                executive=self.executive,
+                platform=self.platform)
         # Various pieces of code (wrongly) call filesystem.chdir(checkout_root).
         # Making the checkout_root exist in the mock filesystem makes that chdir not raise.
         self.filesystem.maybe_make_directory(self._git.checkout_root)
diff --git a/third_party/blink/tools/blinkpy/common/html_diff.py b/third_party/blink/tools/blinkpy/common/html_diff.py
index 44ab18b..2b11e260 100644
--- a/third_party/blink/tools/blinkpy/common/html_diff.py
+++ b/third_party/blink/tools/blinkpy/common/html_diff.py
@@ -1,7 +1,6 @@
 # Copyright 2016 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.
-
 """Utility for outputting a HTML diff of two multi-line strings.
 
 The main purpose of this utility is to show the difference between
@@ -40,7 +39,6 @@
 
 
 class HtmlDiffGenerator(object):
-
     def __init__(self):
         self.a_line_no = None
         self.b_line_no = None
@@ -54,7 +52,9 @@
         matcher = difflib.SequenceMatcher(None, a_lines, b_lines)
         output = []
         for tag, a_start, a_end, b_start, b_end in matcher.get_opcodes():
-            output.append(self._format_chunk(tag, a_lines[a_start:a_end], b_lines[b_start:b_end]))
+            output.append(
+                self._format_chunk(tag, a_lines[a_start:a_end],
+                                   b_lines[b_start:b_end]))
         return ''.join(output)
 
     def _format_chunk(self, tag, a_chunk, b_chunk):
@@ -85,25 +85,29 @@
             output += '<tr><td colspan=3>\n\n</tr>'
             # Do not show context lines at the end of the file.
             if self.a_line_no + 3 != self.a_lines_len or self.b_line_no + 3 != self.b_lines_len:
-                for line in common_chunk[len(common_chunk) - 3:len(common_chunk)]:
+                for line in common_chunk[len(common_chunk) -
+                                         3:len(common_chunk)]:
                     output += self._format_equal_line(line)
         return output
 
     def _format_equal_line(self, line):
         self.a_line_no += 1
         self.b_line_no += 1
-        return '<tr><th>%d<th>%d<td>%s</tr>' % (self.a_line_no, self.b_line_no, cgi.escape(line))
+        return '<tr><th>%d<th>%d<td>%s</tr>' % (self.a_line_no, self.b_line_no,
+                                                cgi.escape(line))
 
     def _format_insert(self, chunk):
         output = ''
         for line in chunk:
             self.b_line_no += 1
-            output += '<tr><th><th>%d<td class="add">%s</tr>' % (self.b_line_no, cgi.escape(line))
+            output += '<tr><th><th>%d<td class="add">%s</tr>' % (
+                self.b_line_no, cgi.escape(line))
         return output
 
     def _format_delete(self, chunk):
         output = ''
         for line in chunk:
             self.a_line_no += 1
-            output += '<tr><th>%d<th><td class="del">%s</tr>' % (self.a_line_no, cgi.escape(line))
+            output += '<tr><th>%d<th><td class="del">%s</tr>' % (
+                self.a_line_no, cgi.escape(line))
         return output
diff --git a/third_party/blink/tools/blinkpy/common/html_diff_unittest.py b/third_party/blink/tools/blinkpy/common/html_diff_unittest.py
index c192c8e..511a353 100644
--- a/third_party/blink/tools/blinkpy/common/html_diff_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/html_diff_unittest.py
@@ -8,7 +8,6 @@
 
 
 class TestHtmlDiff(unittest.TestCase):
-
     def test_html_diff(self):
         self.assertEqual(
             html_diff('one\ntoo\nthree\n', 'one\ntwo\nthree\n'),
@@ -41,22 +40,21 @@
         self.assertEqual(
             HtmlDiffGenerator().generate_tbody(['one line\n'], []),
             '<tr><th>1<th><td class="del">one line\n</tr>')
-        self.assertEqual(
-            HtmlDiffGenerator().generate_tbody(['</pre>\n'], []),
-            '<tr><th>1<th><td class="del">&lt;/pre&gt;\n</tr>')
+        self.assertEqual(HtmlDiffGenerator().generate_tbody(['</pre>\n'], []),
+                         '<tr><th>1<th><td class="del">&lt;/pre&gt;\n</tr>')
 
     def test_html_diff_insert(self):
         self.assertEqual(
             HtmlDiffGenerator().generate_tbody([], ['one line\n']),
             '<tr><th><th>1<td class="add">one line\n</tr>')
-        self.assertEqual(
-            HtmlDiffGenerator().generate_tbody([], ['<!--\n']),
-            '<tr><th><th>1<td class="add">&lt;!--\n</tr>')
+        self.assertEqual(HtmlDiffGenerator().generate_tbody([], ['<!--\n']),
+                         '<tr><th><th>1<td class="add">&lt;!--\n</tr>')
 
     def test_html_diff_ending_newline(self):
         self.assertEqual(
             HtmlDiffGenerator().generate_tbody(['one line'], ['one line\n']),
-            '<tr><th>1<th><td class="del">one line</tr><tr><th><th>1<td class="add">one line\n</tr>')
+            '<tr><th>1<th><td class="del">one line</tr><tr><th><th>1<td class="add">one line\n</tr>'
+        )
 
     def test_html_diff_replace_multiple_lines(self):
         a_lines = [
@@ -71,14 +69,16 @@
             '4. Complicated is better than complex.\n',
             '5. Flat is better than nested.\n',
         ]
-        self.assertEqual(HtmlDiffGenerator().generate_tbody(a_lines, b_lines), (
-            '<tr><th>1<th>1<td>1. Beautiful is better than ugly.\n</tr>'
+        self.assertEqual(HtmlDiffGenerator().generate_tbody(
+            a_lines, b_lines
+        ), ('<tr><th>1<th>1<td>1. Beautiful is better than ugly.\n</tr>'
             '<tr><th>2<th><td class="del">2. Explicit is better than implicit.\n</tr>'
             '<tr><th>3<th><td class="del">3. Simple is better than complex.\n</tr>'
             '<tr><th>4<th><td class="del">4. Complex is better than complicated.\n</tr>'
             '<tr><th><th>2<td class="add">3.   Simple is better than complex.\n</tr>'
             '<tr><th><th>3<td class="add">4. Complicated is better than complex.\n</tr>'
-            '<tr><th><th>4<td class="add">5. Flat is better than nested.\n</tr>'))
+            '<tr><th><th>4<td class="add">5. Flat is better than nested.\n</tr>'
+            ))
 
     def test_html_diff_context(self):
         a_lines = [
@@ -131,24 +131,24 @@
             'line22\n',
             'line23\n',
         ]
-        self.assertEqual(HtmlDiffGenerator().generate_tbody(a_lines, b_lines), (
-            '<tr><td colspan=3>\n\n</tr>'
-            '<tr><th>6<th>6<td>line6\n</tr>'
-            '<tr><th>7<th>7<td>line7\n</tr>'
-            '<tr><th>8<th>8<td>line8\n</tr>'
-            '<tr><th>9<th><td class="del">line9a\n</tr>'
-            '<tr><th><th>9<td class="add">line9b\n</tr>'
-            '<tr><th>10<th>10<td>line10\n</tr>'
-            '<tr><th>11<th>11<td>line11\n</tr>'
-            '<tr><th>12<th>12<td>line12\n</tr>'
-            '<tr><th>13<th>13<td>line13\n</tr>'
-            '<tr><th>14<th>14<td>line14\n</tr>'
-            '<tr><th>15<th><td class="del">line15a\n</tr>'
-            '<tr><th><th>15<td class="add">line15b\n</tr>'
-            '<tr><th>16<th>16<td>line16\n</tr>'
-            '<tr><th>17<th>17<td>line17\n</tr>'
-            '<tr><th>18<th>18<td>line18\n</tr>'
-            '<tr><td colspan=3>\n\n</tr>'))
+        self.assertEqual(HtmlDiffGenerator().generate_tbody(a_lines, b_lines),
+                         ('<tr><td colspan=3>\n\n</tr>'
+                          '<tr><th>6<th>6<td>line6\n</tr>'
+                          '<tr><th>7<th>7<td>line7\n</tr>'
+                          '<tr><th>8<th>8<td>line8\n</tr>'
+                          '<tr><th>9<th><td class="del">line9a\n</tr>'
+                          '<tr><th><th>9<td class="add">line9b\n</tr>'
+                          '<tr><th>10<th>10<td>line10\n</tr>'
+                          '<tr><th>11<th>11<td>line11\n</tr>'
+                          '<tr><th>12<th>12<td>line12\n</tr>'
+                          '<tr><th>13<th>13<td>line13\n</tr>'
+                          '<tr><th>14<th>14<td>line14\n</tr>'
+                          '<tr><th>15<th><td class="del">line15a\n</tr>'
+                          '<tr><th><th>15<td class="add">line15b\n</tr>'
+                          '<tr><th>16<th>16<td>line16\n</tr>'
+                          '<tr><th>17<th>17<td>line17\n</tr>'
+                          '<tr><th>18<th>18<td>line18\n</tr>'
+                          '<tr><td colspan=3>\n\n</tr>'))
 
     def test_html_diff_context_at_edge(self):
         a_lines = [
@@ -173,13 +173,13 @@
             'line8\n',
             'line9\n',
         ]
-        self.assertEqual(HtmlDiffGenerator().generate_tbody(a_lines, b_lines), (
-            '<tr><th><th>1<td class="add">line0\n</tr>'
-            '<tr><th>1<th>2<td>line1\n</tr>'
-            '<tr><th>2<th>3<td>line2\n</tr>'
-            '<tr><th>3<th>4<td>line3\n</tr>'
-            '<tr><td colspan=3>\n\n</tr>'
-            '<tr><th>6<th>7<td>line6\n</tr>'
-            '<tr><th>7<th>8<td>line7\n</tr>'
-            '<tr><th>8<th>9<td>line8\n</tr>'
-            '<tr><th><th>10<td class="add">line9\n</tr>'))
+        self.assertEqual(HtmlDiffGenerator().generate_tbody(a_lines, b_lines),
+                         ('<tr><th><th>1<td class="add">line0\n</tr>'
+                          '<tr><th>1<th>2<td>line1\n</tr>'
+                          '<tr><th>2<th>3<td>line2\n</tr>'
+                          '<tr><th>3<th>4<td>line3\n</tr>'
+                          '<tr><td colspan=3>\n\n</tr>'
+                          '<tr><th>6<th>7<td>line6\n</tr>'
+                          '<tr><th>7<th>8<td>line7\n</tr>'
+                          '<tr><th>8<th>9<td>line8\n</tr>'
+                          '<tr><th><th>10<td class="add">line9\n</tr>'))
diff --git a/third_party/blink/tools/blinkpy/common/memoized.py b/third_party/blink/tools/blinkpy/common/memoized.py
index b9566dd7..409b3a4 100644
--- a/third_party/blink/tools/blinkpy/common/memoized.py
+++ b/third_party/blink/tools/blinkpy/common/memoized.py
@@ -33,7 +33,6 @@
 
 
 class memoized(object):
-
     def __init__(self, function):
         self._function = function
         self._results_cache = {}
diff --git a/third_party/blink/tools/blinkpy/common/memoized_unittest.py b/third_party/blink/tools/blinkpy/common/memoized_unittest.py
index 3a9041f4..58273fd0 100644
--- a/third_party/blink/tools/blinkpy/common/memoized_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/memoized_unittest.py
@@ -32,7 +32,6 @@
 
 
 class _TestObject(object):
-
     def __init__(self):
         self.call_count = 0
 
@@ -43,7 +42,6 @@
 
 
 class MemoizedTest(unittest.TestCase):
-
     def test_multiple_identical_calls(self):
         # When a function is called multiple times with identical arguments,
         # the call count doesn't increase past 1.
diff --git a/third_party/blink/tools/blinkpy/common/message_pool.py b/third_party/blink/tools/blinkpy/common/message_pool.py
index 15ba177..859fa21 100644
--- a/third_party/blink/tools/blinkpy/common/message_pool.py
+++ b/third_party/blink/tools/blinkpy/common/message_pool.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Module for handling messages and concurrency for run_we_tests.py
 and run_blinkpy_tests.py. This module follows the design for
 multiprocessing.Pool and concurrency.futures.ProcessPoolExecutor, with the
@@ -47,11 +46,9 @@
 import sys
 import traceback
 
-
 from blinkpy.common.host import Host
 from blinkpy.common.system import stack_utils
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -61,7 +58,6 @@
 
 
 class _MessagePool(object):
-
     def __init__(self, caller, worker_factory, num_workers, host=None):
         self._caller = caller
         self._worker_factory = worker_factory
@@ -88,10 +84,22 @@
     def run(self, shards):
         """Posts a list of messages to the pool and waits for them to complete."""
         for message in shards:
-            self._messages_to_worker.put(_Message(self._name, message[0], message[1:], from_user=True, logs=()))
+            self._messages_to_worker.put(
+                _Message(
+                    self._name,
+                    message[0],
+                    message[1:],
+                    from_user=True,
+                    logs=()))
 
         for _ in xrange(self._num_workers):
-            self._messages_to_worker.put(_Message(self._name, 'stop', message_args=(), from_user=False, logs=()))
+            self._messages_to_worker.put(
+                _Message(
+                    self._name,
+                    'stop',
+                    message_args=(),
+                    from_user=False,
+                    logs=()))
 
         self.wait()
 
@@ -103,8 +111,11 @@
             host = self._host
 
         for worker_number in xrange(self._num_workers):
-            worker = _Worker(host, self._messages_to_manager, self._messages_to_worker, self._worker_factory,
-                             worker_number, self._running_inline, self if self._running_inline else None, self._worker_log_level())
+            worker = _Worker(host, self._messages_to_manager,
+                             self._messages_to_worker, self._worker_factory,
+                             worker_number, self._running_inline,
+                             self if self._running_inline else None,
+                             self._worker_log_level())
             self._workers.append(worker)
             worker.start()
 
@@ -173,7 +184,8 @@
                 message = self._messages_to_manager.get(block)
                 self._log_messages(message.logs)
                 if message.from_user:
-                    self._caller.handle(message.name, message.src, *message.args)
+                    self._caller.handle(message.name, message.src,
+                                        *message.args)
                     continue
                 method = getattr(self, '_handle_' + message.name)
                 assert method, 'bad message %s' % repr(message)
@@ -187,7 +199,6 @@
 
 
 class _Message(object):
-
     def __init__(self, src, message_name, message_args, from_user, logs):
         self.src = src
         self.name = message_name
@@ -201,9 +212,9 @@
 
 
 class _Worker(multiprocessing.Process):
-
     def __init__(self, host, messages_to_manager, messages_to_worker,
-                 worker_factory, worker_number, running_inline, manager, log_level):
+                 worker_factory, worker_number, running_inline, manager,
+                 log_level):
         super(_Worker, self).__init__()
         self.host = host
         self.worker_number = worker_number
@@ -257,7 +268,8 @@
                     worker.handle(message.name, message.src, *message.args)
                     self._yield_to_manager()
                 else:
-                    assert message.name == 'stop', 'bad message %s' % repr(message)
+                    assert message.name == 'stop', 'bad message %s' % repr(
+                        message)
                     break
 
             _log.debug('%s exiting', self.name)
@@ -289,7 +301,8 @@
     def _post(self, name, args, from_user):
         log_messages = self.log_messages
         self.log_messages = []
-        self._messages_to_manager.put(_Message(self.name, name, args, from_user, log_messages))
+        self._messages_to_manager.put(
+            _Message(self.name, name, args, from_user, log_messages))
 
     def _raise(self, exc_info):
         exception_type, exception_value, exception_traceback = exc_info
@@ -300,11 +313,16 @@
             _log.debug('%s: interrupted, exiting', self.name)
             stack_utils.log_traceback(_log.debug, exception_traceback)
         else:
-            _log.error("%s: %s('%s') raised:", self.name, exception_value.__class__.__name__, str(exception_value))
+            _log.error("%s: %s('%s') raised:",
+                       self.name, exception_value.__class__.__name__,
+                       str(exception_value))
             stack_utils.log_traceback(_log.error, exception_traceback)
         # Since tracebacks aren't picklable, send the extracted stack instead.
         stack = traceback.extract_tb(exception_traceback)
-        self._post(name='worker_exception', args=(exception_type, exception_value, stack), from_user=False)
+        self._post(
+            name='worker_exception',
+            args=(exception_type, exception_value, stack),
+            from_user=False)
 
     def _set_up_logging(self):
         self._logger = logging.getLogger()
@@ -320,7 +338,6 @@
 
 
 class _WorkerLogHandler(logging.Handler):
-
     def __init__(self, worker):
         logging.Handler.__init__(self)
         self._worker = worker
diff --git a/third_party/blink/tools/blinkpy/common/multiprocessing_bootstrap.py b/third_party/blink/tools/blinkpy/common/multiprocessing_bootstrap.py
index c8ad2f3..1222307 100644
--- a/third_party/blink/tools/blinkpy/common/multiprocessing_bootstrap.py
+++ b/third_party/blink/tools/blinkpy/common/multiprocessing_bootstrap.py
@@ -26,7 +26,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """In order for the multiprocessing module to spawn children correctly on
 Windows, we need to be running a Python module that can be imported
 (which means a file in sys.path that ends in .py). In addition, we need to
diff --git a/third_party/blink/tools/blinkpy/common/net/file_uploader.py b/third_party/blink/tools/blinkpy/common/net/file_uploader.py
index 664db11..3cc222c 100644
--- a/third_party/blink/tools/blinkpy/common/net/file_uploader.py
+++ b/third_party/blink/tools/blinkpy/common/net/file_uploader.py
@@ -64,7 +64,8 @@
 
     for key, filename, value in files:
         lines.append('--' + BOUNDARY)
-        lines.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename))
+        lines.append('Content-Disposition: form-data; name="%s"; filename="%s"'
+                     % (key, filename))
         lines.append('Content-Type: %s' % get_mime_type(filename))
         lines.append('')
         if isinstance(value, unicode):
@@ -79,18 +80,19 @@
 
 
 class FileUploader(object):
-
     def __init__(self, url, timeout_seconds):
         self._url = url
         self._timeout_seconds = timeout_seconds
 
     def upload_single_text_file(self, filesystem, content_type, filename):
-        return self._upload_data(content_type, filesystem.read_text_file(filename))
+        return self._upload_data(content_type,
+                                 filesystem.read_text_file(filename))
 
     def upload_as_multipart_form_data(self, filesystem, files, attrs):
         file_objs = []
         for filename, path in files:
-            file_objs.append(('file', filename, filesystem.read_binary_file(path)))
+            file_objs.append(('file', filename,
+                              filesystem.read_binary_file(path)))
 
         # FIXME: We should use the same variable names for the formal and actual parameters.
         content_type, data = _encode_multipart_form_data(attrs, file_objs)
@@ -101,7 +103,9 @@
             # FIXME: Setting a timeout, either globally using socket.setdefaulttimeout()
             # or in urlopen(), doesn't appear to work on Mac 10.5 with Python 2.7.
             # For now we will ignore the timeout value and hope for the best.
-            request = urllib2.Request(self._url, data, {'Content-Type': content_type})
+            request = urllib2.Request(self._url, data,
+                                      {'Content-Type': content_type})
             return urllib2.urlopen(request)
 
-        return NetworkTransaction(timeout_seconds=self._timeout_seconds).run(callback)
+        return NetworkTransaction(
+            timeout_seconds=self._timeout_seconds).run(callback)
diff --git a/third_party/blink/tools/blinkpy/common/net/git_cl.py b/third_party/blink/tools/blinkpy/common/net/git_cl.py
index 23d868e..516231a 100644
--- a/third_party/blink/tools/blinkpy/common/net/git_cl.py
+++ b/third_party/blink/tools/blinkpy/common/net/git_cl.py
@@ -1,7 +1,6 @@
 # Copyright 2016 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.
-
 """An interface to git-cl.
 
 The git-cl tool is responsible for communicating with Gerrit and Buildbucket to
@@ -17,19 +16,19 @@
 from blinkpy.common.net.results_fetcher import Build, filter_latest_builds
 from blinkpy.common.net.luci_auth import LuciAuth
 
-
 _log = logging.getLogger(__name__)
 
 # A refresh token may be needed for some commands, such as git cl try,
 # in order to authenticate with buildbucket.
-_COMMANDS_THAT_TAKE_REFRESH_TOKEN = ('try',)
+_COMMANDS_THAT_TAKE_REFRESH_TOKEN = ('try', )
 
 # These characters always appear at the beginning of the SearchBuilds response
 # from BuildBucket.
 SEARCHBUILDS_RESPONSE_PREFIX = ")]}'"
 
 
-class CLStatus(collections.namedtuple('CLStatus', ('status', 'try_job_results'))):
+class CLStatus(
+        collections.namedtuple('CLStatus', ('status', 'try_job_results'))):
     """Represents the current status of a particular CL.
 
     It contains both the CL's status as reported by `git-cl status' as well as
@@ -38,12 +37,14 @@
     pass
 
 
-class TryJobStatus(collections.namedtuple('TryJobStatus', ('status', 'result'))):
+class TryJobStatus(
+        collections.namedtuple('TryJobStatus', ('status', 'result'))):
     """Represents a current status of a particular job.
 
     Specifically, whether it is scheduled or started or finished, and if
     it is finished, whether it failed or succeeded. If it failed,
     """
+
     def __new__(cls, status, result=None):
         assert status in ('SCHEDULED', 'STARTED', 'COMPLETED')
         assert result in (None, 'FAILURE', 'SUCCESS', 'CANCELED')
@@ -52,23 +53,25 @@
     @staticmethod
     def from_bb_status(bb_status):
         """Converts a buildbucket status into a TryJobStatus object."""
-        assert bb_status in ('SCHEDULED', 'STARTED', 'SUCCESS', 'FAILURE', 'INFRA_FAILURE', 'CANCELLED')
+        assert bb_status in ('SCHEDULED', 'STARTED', 'SUCCESS', 'FAILURE',
+                             'INFRA_FAILURE', 'CANCELLED')
         if bb_status in ('SCHEDULED', 'STARTED'):
             return TryJobStatus(bb_status, None)
         else:
             # Map result INFRA_FAILURE to FAILURE to avoid introducing a new
             # result, and it amounts to the same thing anyway.
-            return TryJobStatus('COMPLETED',
-                                'FAILURE' if bb_status == 'INFRA_FAILURE' else bb_status)
+            return TryJobStatus(
+                'COMPLETED',
+                'FAILURE' if bb_status == 'INFRA_FAILURE' else bb_status)
 
 
 class GitCL(object):
-
     def __init__(self, host, auth_refresh_token_json=None, cwd=None):
         self._host = host
         self._auth_refresh_token_json = auth_refresh_token_json
         self._cwd = cwd
-        self._git_executable_name = Git.find_executable_name(host.executive, host.platform)
+        self._git_executable_name = Git.find_executable_name(
+            host.executive, host.platform)
 
     def run(self, args):
         """Runs git-cl with the given arguments and returns the output.
@@ -80,8 +83,11 @@
             A string (the output from git-cl).
         """
         command = [self._git_executable_name, 'cl'] + args
-        if self._auth_refresh_token_json and args[0] in _COMMANDS_THAT_TAKE_REFRESH_TOKEN:
-            command += ['--auth-refresh-token-json', self._auth_refresh_token_json]
+        if (self._auth_refresh_token_json
+                and args[0] in _COMMANDS_THAT_TAKE_REFRESH_TOKEN):
+            command += [
+                '--auth-refresh-token-json', self._auth_refresh_token_json
+            ]
         # Suppress the stderr of git-cl because git-cl will show a warning when
         # running on Swarming bots with local git cache.
         return self._host.executive.run_command(
@@ -133,9 +139,10 @@
     def _get_latest_patchset(self):
         return self.run(['status', '--field=patch']).strip()
 
-    def wait_for_try_jobs(
-            self, poll_delay_seconds=10 * 60, timeout_seconds=120 * 60,
-            cq_only=False):
+    def wait_for_try_jobs(self,
+                          poll_delay_seconds=10 * 60,
+                          timeout_seconds=120 * 60,
+                          cq_only=False):
         """Waits until all try jobs are finished and returns results, or None.
 
         This function can also be interrupted if the corresponding CL is
@@ -149,20 +156,24 @@
             cl_status = self._get_cl_status()
             _log.debug('Fetched CL status: %s', cl_status)
             issue_number = self.get_issue_number()
-            try_job_results = self.latest_try_jobs(issue_number, cq_only=cq_only)
+            try_job_results = self.latest_try_jobs(
+                issue_number, cq_only=cq_only)
             _log.debug('Fetched try results: %s', try_job_results)
             if (cl_status == 'closed' or
-                    (try_job_results and self.all_finished(try_job_results))):
-                return CLStatus(status=cl_status,
-                                try_job_results=try_job_results)
+                (try_job_results and self.all_finished(try_job_results))):
+                return CLStatus(
+                    status=cl_status, try_job_results=try_job_results)
             return None
 
         return self._wait_for(
             finished_try_job_results_or_none,
-            poll_delay_seconds, timeout_seconds,
+            poll_delay_seconds,
+            timeout_seconds,
             message=' for try jobs')
 
-    def wait_for_closed_status(self, poll_delay_seconds=2 * 60, timeout_seconds=30 * 60):
+    def wait_for_closed_status(self,
+                               poll_delay_seconds=2 * 60,
+                               timeout_seconds=30 * 60):
         """Waits until git cl reports that the current CL is closed."""
 
         def closed_status_or_none():
@@ -175,10 +186,15 @@
 
         return self._wait_for(
             closed_status_or_none,
-            poll_delay_seconds, timeout_seconds,
+            poll_delay_seconds,
+            timeout_seconds,
             message=' for closed status')
 
-    def _wait_for(self, poll_function, poll_delay_seconds, timeout_seconds, message=''):
+    def _wait_for(self,
+                  poll_function,
+                  poll_delay_seconds,
+                  timeout_seconds,
+                  message=''):
         """Waits for the given poll_function to return something other than None.
 
         Args:
@@ -199,15 +215,17 @@
             value = poll_function()
             if value is not None:
                 return value
-            self._host.print_(
-                'Waiting%s. %d seconds passed.' %
-                (message, self._host.time() - start))
+            self._host.print_('Waiting%s. %d seconds passed.' %
+                              (message, self._host.time() - start))
             self._host.sleep(poll_delay_seconds)
         self._host.print_('Timed out waiting%s.' % message)
         return None
 
-    def latest_try_jobs(
-            self, issue_number=None, builder_names=None, cq_only=False, patchset=None):
+    def latest_try_jobs(self,
+                        issue_number=None,
+                        builder_names=None,
+                        cq_only=False,
+                        patchset=None):
         """Fetches a dict of Build to TryJobStatus for the latest try jobs.
 
         This variant fetches try job data from buildbucket directly.
@@ -230,7 +248,10 @@
             issue_number = self.get_issue_number()
         return self.filter_latest(
             self.try_job_results(
-                issue_number, builder_names, cq_only=cq_only, patchset=patchset))
+                issue_number,
+                builder_names,
+                cq_only=cq_only,
+                patchset=patchset))
 
     @staticmethod
     def filter_latest(try_results):
@@ -240,12 +261,16 @@
         latest_builds = filter_latest_builds(try_results.keys())
         return {b: s for b, s in try_results.items() if b in latest_builds}
 
-    def try_job_results(
-            self, issue_number=None, builder_names=None, cq_only=False, patchset=None):
+    def try_job_results(self,
+                        issue_number=None,
+                        builder_names=None,
+                        cq_only=False,
+                        patchset=None):
         """Returns a dict mapping Build objects to TryJobStatus objects."""
         if not issue_number:
             issue_number = self.get_issue_number()
-        raw_results_json = self.fetch_raw_try_job_results(issue_number, patchset)
+        raw_results_json = self.fetch_raw_try_job_results(
+            issue_number, patchset)
         build_to_status = {}
         if 'builds' not in raw_results_json:
             return build_to_status
@@ -253,13 +278,21 @@
             builder_name = build['builder']['builder']
             if builder_names and builder_name not in builder_names:
                 continue
-            is_cq = 'tags' in build and {'key': 'user_agent', 'value': 'cq'} in build['tags']
-            is_experimental = 'tags' in build and {'key': 'cq_experimental', 'value': 'true'} in build['tags']
+            is_cq = 'tags' in build and {
+                'key': 'user_agent',
+                'value': 'cq'
+            } in build['tags']
+            is_experimental = 'tags' in build and {
+                'key': 'cq_experimental',
+                'value': 'true'
+            } in build['tags']
             if cq_only and not (is_cq and not is_experimental):
                 continue
             build_number = build.get('number')
             status = build['status']
-            build_to_status[Build(builder_name, build_number)] = TryJobStatus.from_bb_status(status)
+            build_to_status[Build(
+                builder_name,
+                build_number)] = TryJobStatus.from_bb_status(status)
         return build_to_status
 
     def fetch_raw_try_job_results(self, issue_number, patchset=None):
@@ -301,32 +334,35 @@
         }
         data = {
             'predicate': {
-                'gerritChanges': [
-                    {
-                        'host': 'chromium-review.googlesource.com',
-                        'project': 'chromium/src',
-                        'change': issue_number,
-                        'patchset': patchset
-                    }
-                ]
+                'gerritChanges': [{
+                    'host': 'chromium-review.googlesource.com',
+                    'project': 'chromium/src',
+                    'change': issue_number,
+                    'patchset': patchset
+                }]
             },
-            'fields': 'builds.*.builder.builder,builds.*.status,builds.*.tags,builds.*.number'
+            'fields':
+            'builds.*.builder.builder,builds.*.status,builds.*.tags,builds.*.number'
         }
         url = 'https://cr-buildbucket.appspot.com/prpc/buildbucket.v2.Builds/SearchBuilds'
         req_body = json.dumps(data)
-        _log.debug("Sending SearchBuilds request. Url: %s with Body: %s" % (url, req_body))
-        response = self._host.web.request('POST', url, data=req_body, headers=hed)
+        _log.debug("Sending SearchBuilds request. Url: %s with Body: %s" %
+                   (url, req_body))
+        response = self._host.web.request(
+            'POST', url, data=req_body, headers=hed)
         if response.getcode() == 200:
             response_body = response.read()
             if response_body.startswith(SEARCHBUILDS_RESPONSE_PREFIX):
-                response_body = response_body[len(SEARCHBUILDS_RESPONSE_PREFIX):]
+                response_body = response_body[len(SEARCHBUILDS_RESPONSE_PREFIX
+                                                  ):]
             return json.loads(response_body)
 
-        _log.error("Failed to fetch tryjob results from buildbucket (status=%s)" % response.status)
+        _log.error(
+            "Failed to fetch tryjob results from buildbucket (status=%s)" %
+            response.status)
         _log.debug("Full SearchBuilds response: %s" % str(response))
         return None
 
-
     @staticmethod
     def _build(result_dict):
         """Converts a parsed try result dict to a Build object."""
diff --git a/third_party/blink/tools/blinkpy/common/net/git_cl_mock.py b/third_party/blink/tools/blinkpy/common/net/git_cl_mock.py
index 4567df1..4c1875f 100644
--- a/third_party/blink/tools/blinkpy/common/net/git_cl_mock.py
+++ b/third_party/blink/tools/blinkpy/common/net/git_cl_mock.py
@@ -7,11 +7,15 @@
 
 # pylint: disable=unused-argument
 
-class MockGitCL(object):
 
-    def __init__(
-            self, host, try_job_results=None, status='closed',
-            issue_number='1234', time_out=False, git_error_output=None):
+class MockGitCL(object):
+    def __init__(self,
+                 host,
+                 try_job_results=None,
+                 status='closed',
+                 issue_number='1234',
+                 time_out=False,
+                 git_error_output=None):
         """Constructs a fake GitCL with canned return values.
 
         Args:
@@ -53,9 +57,8 @@
     def wait_for_try_jobs(self, **_):
         if self._time_out:
             return None
-        return CLStatus(
-            self._status,
-            self.filter_latest(self._try_job_results))
+        return CLStatus(self._status,
+                        self.filter_latest(self._try_job_results))
 
     def wait_for_closed_status(self, **_):
         if self._time_out:
diff --git a/third_party/blink/tools/blinkpy/common/net/git_cl_unittest.py b/third_party/blink/tools/blinkpy/common/net/git_cl_unittest.py
index bd2a171..fc343bf6 100644
--- a/third_party/blink/tools/blinkpy/common/net/git_cl_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/net/git_cl_unittest.py
@@ -15,7 +15,6 @@
 
 
 class GitCLTest(unittest.TestCase):
-
     def test_run(self):
         host = MockHost()
         host.executive = MockExecutive(output='mock-output')
@@ -29,9 +28,10 @@
         host.executive = MockExecutive(output='mock-output')
         git_cl = GitCL(host, auth_refresh_token_json='token.json')
         git_cl.run(['try', '-b', 'win10_blink_rel'])
-        self.assertEqual(
-            host.executive.calls,
-            [['git', 'cl', 'try', '-b', 'win10_blink_rel', '--auth-refresh-token-json', 'token.json']])
+        self.assertEqual(host.executive.calls, [[
+            'git', 'cl', 'try', '-b', 'win10_blink_rel',
+            '--auth-refresh-token-json', 'token.json'
+        ]])
 
     def test_some_commands_not_run_with_auth(self):
         host = MockHost()
@@ -45,19 +45,18 @@
         # default. Besides, `git cl try` invocations are grouped by buckets.
         host = MockHost()
         git_cl = GitCL(host, auth_refresh_token_json='token.json')
-        git_cl.trigger_try_jobs(['android_blink_rel', 'fake_blink_try_linux', 'fake_blink_try_win'])
+        git_cl.trigger_try_jobs([
+            'android_blink_rel', 'fake_blink_try_linux', 'fake_blink_try_win'
+        ])
         self.assertEqual(host.executive.calls, [
             [
-                'git', 'cl', 'try',
-                '-B', 'luci.chromium.try',
-                '-b', 'fake_blink_try_linux', '-b', 'fake_blink_try_win',
+                'git', 'cl', 'try', '-B', 'luci.chromium.try', '-b',
+                'fake_blink_try_linux', '-b', 'fake_blink_try_win',
                 '--auth-refresh-token-json', 'token.json'
             ],
             [
-                'git', 'cl', 'try',
-                '-B', 'luci.chromium.android',
-                '-b', 'android_blink_rel',
-                '--auth-refresh-token-json', 'token.json'
+                'git', 'cl', 'try', '-B', 'luci.chromium.android', '-b',
+                'android_blink_rel', '--auth-refresh-token-json', 'token.json'
             ],
         ])
 
@@ -65,12 +64,12 @@
         # The trigger_try_jobs method may be called with an immutable set.
         host = MockHost()
         git_cl = GitCL(host, auth_refresh_token_json='token.json')
-        git_cl.trigger_try_jobs(frozenset(['fake_blink_try_linux', 'fake_blink_try_win']))
+        git_cl.trigger_try_jobs(
+            frozenset(['fake_blink_try_linux', 'fake_blink_try_win']))
         self.assertEqual(host.executive.calls, [
             [
-                'git', 'cl', 'try',
-                '-B', 'luci.chromium.try',
-                '-b', 'fake_blink_try_linux', '-b', 'fake_blink_try_win',
+                'git', 'cl', 'try', '-B', 'luci.chromium.try', '-b',
+                'fake_blink_try_linux', '-b', 'fake_blink_try_win',
                 '--auth-refresh-token-json', 'token.json'
             ],
         ])
@@ -83,16 +82,16 @@
                                 bucket='luci.dummy')
         self.assertEqual(host.executive.calls, [
             [
-                'git', 'cl', 'try',
-                '-B', 'luci.dummy',
-                '-b', 'android_blink_rel', '-b', 'fake_blink_try_linux',
+                'git', 'cl', 'try', '-B', 'luci.dummy', '-b',
+                'android_blink_rel', '-b', 'fake_blink_try_linux',
                 '--auth-refresh-token-json', 'token.json'
             ],
         ])
 
     def test_get_issue_number(self):
         host = MockHost()
-        host.executive = MockExecutive(output='Foo\nIssue number: 12345 (http://crrev.com/12345)')
+        host.executive = MockExecutive(
+            output='Foo\nIssue number: 12345 (http://crrev.com/12345)')
         git_cl = GitCL(host)
         self.assertEqual(git_cl.get_issue_number(), '12345')
 
@@ -112,9 +111,10 @@
         host = MockHost()
         git_cl = GitCL(host)
         response = {
-            'status_code': 200,
-            'body': SEARCHBUILDS_RESPONSE_PREFIX +
-            """{
+            'status_code':
+            200,
+            'body':
+            SEARCHBUILDS_RESPONSE_PREFIX + """{
                 "builds": [
                     {
                         "status": "STARTED",
@@ -166,11 +166,11 @@
         host = MockHost()
         host.executive = MockExecutive(output='closed')
         git_cl = GitCL(host)
-        git_cl._host.web = MockWeb(responses=[
-            {
-                'status_code': 200,
-                'body': SEARCHBUILDS_RESPONSE_PREFIX +
-                """{
+        git_cl._host.web = MockWeb(responses=[{
+            'status_code':
+            200,
+            'body':
+            SEARCHBUILDS_RESPONSE_PREFIX + """{
                     "builds": [
                         {
                             "status": "STARTED",
@@ -180,8 +180,7 @@
                         }
                     ]
                 }"""
-            }
-        ])
+        }])
         self.assertEqual(
             git_cl.wait_for_try_jobs(),
             CLStatus(
@@ -189,21 +188,19 @@
                 try_job_results={
                     Build('some-builder', None): TryJobStatus('STARTED', None),
                 },
-            )
-        )
-        self.assertEqual(
-            host.stdout.getvalue(),
-            'Waiting for try jobs, timeout: 7200 seconds.\n')
+            ))
+        self.assertEqual(host.stdout.getvalue(),
+                         'Waiting for try jobs, timeout: 7200 seconds.\n')
 
     def test_wait_for_try_jobs_done(self):
         host = MockHost()
         host.executive = MockExecutive(output='lgtm')
         git_cl = GitCL(host)
-        git_cl._host.web = MockWeb(responses=[
-            {
-                'status_code': 200,
-                'body': SEARCHBUILDS_RESPONSE_PREFIX +
-                """{
+        git_cl._host.web = MockWeb(responses=[{
+            'status_code':
+            200,
+            'body':
+            SEARCHBUILDS_RESPONSE_PREFIX + """{
                     "builds": [
                         {
                             "status": "FAILURE",
@@ -214,20 +211,17 @@
                         }
                     ]
                 }"""
-            }
-        ])
+        }])
         self.assertEqual(
             git_cl.wait_for_try_jobs(),
             CLStatus(
                 status='lgtm',
                 try_job_results={
-                    Build('some-builder', 100): TryJobStatus('COMPLETED', 'FAILURE'),
-                }
-            )
-        )
-        self.assertEqual(
-            host.stdout.getvalue(),
-            'Waiting for try jobs, timeout: 7200 seconds.\n')
+                    Build('some-builder', 100):
+                    TryJobStatus('COMPLETED', 'FAILURE'),
+                }))
+        self.assertEqual(host.stdout.getvalue(),
+                         'Waiting for try jobs, timeout: 7200 seconds.\n')
 
     def test_wait_for_closed_status_timeout(self):
         host = MockHost()
@@ -261,37 +255,47 @@
         self.assertFalse(GitCL.some_failed({}))
 
     def test_has_failing_try_results_only_success_and_started(self):
-        self.assertFalse(GitCL.some_failed({
-            Build('some-builder', 90): TryJobStatus('COMPLETED', 'SUCCESS'),
-            Build('some-builder', 100): TryJobStatus('STARTED'),
-        }))
+        self.assertFalse(
+            GitCL.some_failed({
+                Build('some-builder', 90):
+                TryJobStatus('COMPLETED', 'SUCCESS'),
+                Build('some-builder', 100):
+                TryJobStatus('STARTED'),
+            }))
 
     def test_has_failing_try_results_with_failing_results(self):
-        self.assertTrue(GitCL.some_failed({
-            Build('some-builder', 1): TryJobStatus('COMPLETED', 'FAILURE'),
-        }))
+        self.assertTrue(
+            GitCL.some_failed({
+                Build('some-builder', 1):
+                TryJobStatus('COMPLETED', 'FAILURE'),
+            }))
 
     def test_all_success_empty(self):
         self.assertTrue(GitCL.all_success({}))
 
     def test_all_success_true(self):
-        self.assertTrue(GitCL.all_success({
-            Build('some-builder', 1): TryJobStatus('COMPLETED', 'SUCCESS'),
-        }))
+        self.assertTrue(
+            GitCL.all_success({
+                Build('some-builder', 1):
+                TryJobStatus('COMPLETED', 'SUCCESS'),
+            }))
 
     def test_all_success_with_started_build(self):
-        self.assertFalse(GitCL.all_success({
-            Build('some-builder', 1): TryJobStatus('COMPLETED', 'SUCCESS'),
-            Build('some-builder', 2): TryJobStatus('STARTED'),
-        }))
+        self.assertFalse(
+            GitCL.all_success({
+                Build('some-builder', 1):
+                TryJobStatus('COMPLETED', 'SUCCESS'),
+                Build('some-builder', 2):
+                TryJobStatus('STARTED'),
+            }))
 
     def test_latest_try_jobs_cq_only(self):
         git_cl = GitCL(MockHost())
-        git_cl._host.web = MockWeb(responses=[
-            {
-                'status_code': 200,
-                'body': SEARCHBUILDS_RESPONSE_PREFIX +
-                """{
+        git_cl._host.web = MockWeb(responses=[{
+            'status_code':
+            200,
+            'body':
+            SEARCHBUILDS_RESPONSE_PREFIX + """{
                     "builds": [
                         {
                             "status": "SCHEDULED",
@@ -363,11 +367,9 @@
                         }
                     ]
                 }"""
-            }
-        ])
+        }])
         self.assertEqual(
-            git_cl.latest_try_jobs(cq_only=True),
-            {
+            git_cl.latest_try_jobs(cq_only=True), {
                 Build('cq-a'): TryJobStatus('SCHEDULED'),
                 Build('cq-b'): TryJobStatus('SCHEDULED'),
                 Build('cq-c'): TryJobStatus('SCHEDULED'),
@@ -377,11 +379,11 @@
         # Here we have multiple builds with the same name, but we only take the
         # latest one (based on build number).
         git_cl = GitCL(MockHost())
-        git_cl._host.web = MockWeb(responses=[
-            {
-                'status_code': 200,
-                'body': SEARCHBUILDS_RESPONSE_PREFIX +
-                """{
+        git_cl._host.web = MockWeb(responses=[{
+            'status_code':
+            200,
+            'body':
+            SEARCHBUILDS_RESPONSE_PREFIX + """{
                     "builds": [
                         {
                             "status": "SUCCESS",
@@ -412,22 +414,20 @@
                         }
                     ]
                 }"""
-            }
-        ])
+        }])
         self.assertEqual(
-            git_cl.latest_try_jobs(builder_names=['builder-a', 'builder-b']),
-            {
+            git_cl.latest_try_jobs(builder_names=['builder-a', 'builder-b']), {
                 Build('builder-a'): TryJobStatus('SCHEDULED'),
                 Build('builder-b', 100): TryJobStatus('COMPLETED', 'SUCCESS'),
             })
 
     def test_latest_try_jobs_started(self):
         git_cl = GitCL(MockHost())
-        git_cl._host.web = MockWeb(responses=[
-            {
-                'status_code': 200,
-                'body': SEARCHBUILDS_RESPONSE_PREFIX +
-                """{
+        git_cl._host.web = MockWeb(responses=[{
+            'status_code':
+            200,
+            'body':
+            SEARCHBUILDS_RESPONSE_PREFIX + """{
                     "builds": [
                         {
                             "status": "STARTED",
@@ -438,19 +438,18 @@
                         }
                     ]
                 }"""
-            }
-        ])
+        }])
         self.assertEqual(
             git_cl.latest_try_jobs(builder_names=['builder-a']),
             {Build('builder-a', 100): TryJobStatus('STARTED')})
 
     def test_latest_try_jobs_failures(self):
         git_cl = GitCL(MockHost())
-        git_cl._host.web = MockWeb(responses=[
-            {
-                'status_code': 200,
-                'body': SEARCHBUILDS_RESPONSE_PREFIX +
-                """{
+        git_cl._host.web = MockWeb(responses=[{
+            'status_code':
+            200,
+            'body':
+            SEARCHBUILDS_RESPONSE_PREFIX + """{
                     "builds": [
                         {
                             "status": "FAILURE",
@@ -468,11 +467,9 @@
                         }
                     ]
                 }"""
-            }
-        ])
+        }])
         self.assertEqual(
-            git_cl.latest_try_jobs(builder_names=['builder-a', 'builder-b']),
-            {
+            git_cl.latest_try_jobs(builder_names=['builder-a', 'builder-b']), {
                 Build('builder-a', 100): TryJobStatus('COMPLETED', 'FAILURE'),
                 Build('builder-b', 200): TryJobStatus('COMPLETED', 'FAILURE'),
             })
@@ -484,8 +481,7 @@
             Build('builder-b', 50): TryJobStatus('SCHEDULED'),
         }
         self.assertEqual(
-            GitCL.filter_latest(try_job_results),
-            {
+            GitCL.filter_latest(try_job_results), {
                 Build('builder-a', 200): TryJobStatus('COMPLETED', 'SUCCESS'),
                 Build('builder-b', 50): TryJobStatus('SCHEDULED'),
             })
@@ -495,11 +491,11 @@
 
     def test_try_job_results_with_other_builder(self):
         git_cl = GitCL(MockHost())
-        git_cl._host.web = MockWeb(responses=[
-            {
-                'status_code': 200,
-                'body': SEARCHBUILDS_RESPONSE_PREFIX +
-                """{
+        git_cl._host.web = MockWeb(responses=[{
+            'status_code':
+            200,
+            'body':
+            SEARCHBUILDS_RESPONSE_PREFIX + """{
                     "builds": [
                         {
                             "status": "FAILURE",
@@ -513,20 +509,20 @@
                         }
                     ]
                 }"""
-            }
-        ])
+        }])
         # We ignore builders that we explicitly don't care about;
         # so if we only care about other-builder, not builder-a,
         # then no exception is raised.
-        self.assertEqual(git_cl.try_job_results(builder_names=['other-builder']), {})
+        self.assertEqual(
+            git_cl.try_job_results(builder_names=['other-builder']), {})
 
     def test_try_job_results(self):
         git_cl = GitCL(MockHost())
-        git_cl._host.web = MockWeb(responses=[
-            {
-                'status_code': 200,
-                'body': SEARCHBUILDS_RESPONSE_PREFIX +
-                """{
+        git_cl._host.web = MockWeb(responses=[{
+            'status_code':
+            200,
+            'body':
+            SEARCHBUILDS_RESPONSE_PREFIX + """{
                     "builds": [
                         {
                             "status": "SUCCESS",
@@ -554,24 +550,26 @@
                         }
                     ]
                 }"""
-            }
-        ])
+        }])
         self.assertEqual(
             git_cl.try_job_results(issue_number=None),
             {
-                Build('builder-a', 111): TryJobStatus('COMPLETED', 'SUCCESS'),
-                Build('builder-b', 222): TryJobStatus('SCHEDULED', None),
+                Build('builder-a', 111):
+                TryJobStatus('COMPLETED', 'SUCCESS'),
+                Build('builder-b', 222):
+                TryJobStatus('SCHEDULED', None),
                 # INFRA_FAILURE is mapped to FAILURE for this build.
-                Build('builder-c', 333): TryJobStatus('COMPLETED', 'FAILURE'),
+                Build('builder-c', 333):
+                TryJobStatus('COMPLETED', 'FAILURE'),
             })
 
     def test_try_job_results_skip_experimental_cq(self):
         git_cl = GitCL(MockHost())
-        git_cl._host.web = MockWeb(responses=[
-            {
-                'status_code': 200,
-                'body': SEARCHBUILDS_RESPONSE_PREFIX +
-                """{
+        git_cl._host.web = MockWeb(responses=[{
+            'status_code':
+            200,
+            'body':
+            SEARCHBUILDS_RESPONSE_PREFIX + """{
                     "builds": [
                         {
                             "status": "SUCCESS",
@@ -596,8 +594,7 @@
                         }
                     ]
                 }"""
-            }
-        ])
+        }])
         self.assertEqual(
             # Only one build appears - builder-b is ignored because it is
             # experimental.
diff --git a/third_party/blink/tools/blinkpy/common/net/luci_auth.py b/third_party/blink/tools/blinkpy/common/net/luci_auth.py
index c1341bf4..89374dc1 100644
--- a/third_party/blink/tools/blinkpy/common/net/luci_auth.py
+++ b/third_party/blink/tools/blinkpy/common/net/luci_auth.py
@@ -1,7 +1,6 @@
 # Copyright 2018 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.
-
 """An interface to luci-auth.
 
 The main usage is to get the OAuth access token for the service account on LUCI.
@@ -9,16 +8,18 @@
 
 from blinkpy.common.path_finder import PathFinder
 
-class LuciAuth(object):
 
+class LuciAuth(object):
     def __init__(self, host):
         self._host = host
         finder = PathFinder(host.filesystem)
-        luci_auth_bin = 'luci-auth.bat' if host.platform.is_win() else 'luci-auth'
-        self._luci_auth_path = host.filesystem.join(
-            finder.depot_tools_base(), luci_auth_bin)
+        luci_auth_bin = ('luci-auth.bat'
+                         if host.platform.is_win() else 'luci-auth')
+        self._luci_auth_path = host.filesystem.join(finder.depot_tools_base(),
+                                                    luci_auth_bin)
 
     def get_access_token(self):
         # ScriptError will be raised if luci-auth fails.
-        output = self._host.executive.run_command([self._luci_auth_path, 'token'])
+        output = self._host.executive.run_command(
+            [self._luci_auth_path, 'token'])
         return output.strip()
diff --git a/third_party/blink/tools/blinkpy/common/net/luci_auth_unittest.py b/third_party/blink/tools/blinkpy/common/net/luci_auth_unittest.py
index 5802253..1a5db4a 100644
--- a/third_party/blink/tools/blinkpy/common/net/luci_auth_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/net/luci_auth_unittest.py
@@ -29,4 +29,5 @@
         luci_auth.get_access_token()
         self.assertEqual(
             host.executive.calls,
-            [['/mock-checkout/third_party/depot_tools/luci-auth.bat', 'token']])
+            [['/mock-checkout/third_party/depot_tools/luci-auth.bat', 'token']
+             ])
diff --git a/third_party/blink/tools/blinkpy/common/net/network_transaction.py b/third_party/blink/tools/blinkpy/common/net/network_transaction.py
index c5f5abb..5236119 100644
--- a/third_party/blink/tools/blinkpy/common/net/network_transaction.py
+++ b/third_party/blink/tools/blinkpy/common/net/network_transaction.py
@@ -34,14 +34,16 @@
 
 
 class NetworkTimeout(Exception):
-
     def __str__(self):
         return 'NetworkTimeout'
 
 
 class NetworkTransaction(object):
-
-    def __init__(self, initial_backoff_seconds=10, grown_factor=1.5, timeout_seconds=(10 * 60), return_none_on_404=False):
+    def __init__(self,
+                 initial_backoff_seconds=10,
+                 grown_factor=1.5,
+                 timeout_seconds=(10 * 60),
+                 return_none_on_404=False):
         self._initial_backoff_seconds = initial_backoff_seconds
         self._grown_factor = grown_factor
         self._timeout_seconds = timeout_seconds
@@ -59,8 +61,9 @@
                 if self._return_none_on_404 and error.code == 404:
                     return None
                 self._check_for_timeout()
-                _log.warning('Received HTTP status %s loading "%s".  Retrying in %s seconds...',
-                             error.code, error.filename, self._backoff_seconds)
+                _log.warning(
+                    'Received HTTP status %s loading "%s".  Retrying in %s seconds...',
+                    error.code, error.filename, self._backoff_seconds)
                 self._sleep()
 
     def _check_for_timeout(self):
diff --git a/third_party/blink/tools/blinkpy/common/net/network_transaction_unittest.py b/third_party/blink/tools/blinkpy/common/net/network_transaction_unittest.py
index a465865..b827caf 100644
--- a/third_party/blink/tools/blinkpy/common/net/network_transaction_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/net/network_transaction_unittest.py
@@ -26,7 +26,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-
 from urllib2 import HTTPError
 from blinkpy.common.net.network_transaction import NetworkTransaction, NetworkTimeout
 from blinkpy.common.system.log_testing import LoggingTestCase
@@ -62,7 +61,8 @@
     def _raise_500_error(self):
         self._run_count += 1
         if self._run_count < 3:
-            raise HTTPError('http://example.com/', 500, 'internal server error', None, None)
+            raise HTTPError('http://example.com/', 500,
+                            'internal server error', None, None)
         return 42
 
     def _raise_404_error(self):
@@ -72,17 +72,20 @@
         transaction = NetworkTransaction(initial_backoff_seconds=0)
         self.assertEqual(transaction.run(self._raise_500_error), 42)
         self.assertEqual(self._run_count, 3)
-        self.assertLog(['WARNING: Received HTTP status 500 loading "http://example.com/".  '
-                        'Retrying in 0 seconds...\n',
-                        'WARNING: Received HTTP status 500 loading "http://example.com/".  '
-                        'Retrying in 0.0 seconds...\n'])
+        self.assertLog([
+            'WARNING: Received HTTP status 500 loading "http://example.com/".  '
+            'Retrying in 0 seconds...\n',
+            'WARNING: Received HTTP status 500 loading "http://example.com/".  '
+            'Retrying in 0.0 seconds...\n'
+        ])
 
     def test_convert_404_to_none(self):
         transaction = NetworkTransaction(return_none_on_404=True)
         self.assertIsNone(transaction.run(self._raise_404_error))
 
     def test_timeout(self):
-        transaction = NetworkTransaction(initial_backoff_seconds=60 * 60, timeout_seconds=60)
+        transaction = NetworkTransaction(
+            initial_backoff_seconds=60 * 60, timeout_seconds=60)
         did_process_exception = False
         did_throw_exception = True
         try:
diff --git a/third_party/blink/tools/blinkpy/common/net/results_fetcher.py b/third_party/blink/tools/blinkpy/common/net/results_fetcher.py
index c3559d1..4670cc1f 100644
--- a/third_party/blink/tools/blinkpy/common/net/results_fetcher.py
+++ b/third_party/blink/tools/blinkpy/common/net/results_fetcher.py
@@ -49,6 +49,7 @@
     If build number is None, this represents the latest build
     for a given builder.
     """
+
     def __new__(cls, builder_name, build_number=None):
         return super(Build, cls).__new__(cls, builder_name, build_number)
 
@@ -72,10 +73,12 @@
         the latest results.
         """
         if build_number:
-            assert str(build_number).isdigit(), 'expected numeric build number, got %s' % build_number
+            assert str(build_number).isdigit(), \
+                'expected numeric build number, got %s' % build_number
             url_base = self.builder_results_url_base(builder_name)
             if step_name is None:
-                step_name = self.get_layout_test_step_name(Build(builder_name, build_number))
+                step_name = self.get_layout_test_step_name(
+                    Build(builder_name, build_number))
             if step_name:
                 return '%s/%s/%s/layout-test-results' % (
                     url_base, build_number, urllib.quote(step_name))
@@ -89,7 +92,8 @@
         name is the builder name transformed to be more URL-friendly by
         replacing all spaces, periods and parentheses with underscores.
         """
-        return '%s/%s' % (RESULTS_URL_BASE, re.sub('[ .()]', '_', builder_name))
+        return '%s/%s' % (RESULTS_URL_BASE, re.sub('[ .()]', '_',
+                                                   builder_name))
 
     @memoized
     def fetch_retry_summary_json(self, build):
@@ -100,15 +104,18 @@
         that failed only with the patch ("failures"), and tests that failed
         both with and without ("ignored").
         """
-        url_base = '%s/%s' % (self.builder_results_url_base(build.builder_name), build.build_number)
+        url_base = '%s/%s' % (self.builder_results_url_base(
+            build.builder_name), build.build_number)
         # Originally we used retry_summary.json, which is the summary of retry
         # without patch; now we retry again with patch and ignore the flakes.
         # See https://crbug.com/882969.
-        return self.web.get_binary('%s/%s' % (url_base, 'retry_with_patch_summary.json'),
-                                   return_none_on_404=True)
+        return self.web.get_binary(
+            '%s/%s' % (url_base, 'retry_with_patch_summary.json'),
+            return_none_on_404=True)
 
     def accumulated_results_url_base(self, builder_name):
-        return self.builder_results_url_base(builder_name) + '/results/layout-test-results'
+        return self.builder_results_url_base(
+            builder_name) + '/results/layout-test-results'
 
     @memoized
     def fetch_results(self, build, full=False):
@@ -119,9 +126,10 @@
             _log.debug('Builder name or build number is None')
             return None
         return self.fetch_web_test_results(
-            self.results_url(build.builder_name, build.build_number,
-                             step_name=self.get_layout_test_step_name(build)),
-            full)
+            self.results_url(
+                build.builder_name,
+                build.build_number,
+                step_name=self.get_layout_test_step_name(build)), full)
 
     @memoized
     def get_layout_test_step_name(self, build):
@@ -129,13 +137,15 @@
             _log.debug('Builder name or build number is None')
             return None
 
-        url = '%s/testfile?%s' % (TEST_RESULTS_SERVER, urllib.urlencode({
-            'builder': build.builder_name,
-            'buildnumber': build.build_number,
-            'name': 'full_results.json',
-            # This forces the server to gives us JSON rather than an HTML page.
-            'callback': json_results_generator.JSON_CALLBACK,
-        }))
+        url = '%s/testfile?%s' % (
+            TEST_RESULTS_SERVER,
+            urllib.urlencode({
+                'builder': build.builder_name,
+                'buildnumber': build.build_number,
+                'name': 'full_results.json',
+                # This forces the server to gives us JSON rather than an HTML page.
+                'callback': json_results_generator.JSON_CALLBACK,
+            }))
         data = self.web.get_binary(url, return_none_on_404=True)
         if not data:
             _log.debug('Got 404 response from:\n%s', url)
@@ -149,8 +159,8 @@
             # patch)'. Only make sure it starts with blink_web_tests and
             # runs with a patch. This should be changed eventually to use actual
             # structured data from the test results server.
-            if (entry['TestType'].startswith('blink_web_tests') and
-                entry['TestType'].endswith('(with patch)'))
+            if (entry['TestType'].startswith('blink_web_tests')
+                and entry['TestType'].endswith('(with patch)'))
         ]
         # In manual testing, I sometimes saw results where the same suite was
         # repeated twice. De-duplicate here to try to catch this.
@@ -158,8 +168,8 @@
         if len(suites) != 1:
             raise Exception(
                 'build %s on builder %s expected to only have one web test '
-                'step, instead has %s' % (
-                    build.build_number, build.builder_name, suites))
+                'step, instead has %s' % (build.build_number,
+                                          build.builder_name, suites))
 
         return suites[0]
 
@@ -169,10 +179,11 @@
         Uses full_results.json if full is True, otherwise failing_results.json.
         """
         base_filename = 'full_results.json' if full else 'failing_results.json'
-        results_file = self.web.get_binary('%s/%s' % (results_url, base_filename),
-                                           return_none_on_404=True)
+        results_file = self.web.get_binary(
+            '%s/%s' % (results_url, base_filename), return_none_on_404=True)
         if results_file is None:
-            _log.debug('Got 404 response from:\n%s/%s', results_url, base_filename)
+            _log.debug('Got 404 response from:\n%s/%s', results_url,
+                       base_filename)
             return None
         return WebTestResults.results_from_string(results_file)
 
@@ -181,13 +192,15 @@
             _log.debug('Builder name or build number or master is None')
             return None
 
-        url = '%s/testfile?%s' % (TEST_RESULTS_SERVER, urllib.urlencode({
-            'builder': build.builder_name,
-            'buildnumber': build.build_number,
-            'name': 'full_results.json',
-            'testtype': 'webdriver_tests_suite (with patch)',
-            'master': master
-        }))
+        url = '%s/testfile?%s' % (
+            TEST_RESULTS_SERVER,
+            urllib.urlencode({
+                'builder': build.builder_name,
+                'buildnumber': build.build_number,
+                'name': 'full_results.json',
+                'testtype': 'webdriver_tests_suite (with patch)',
+                'master': master
+            }))
 
         data = self.web.get_binary(url, return_none_on_404=True)
         if not data:
@@ -211,6 +224,7 @@
     latest_builds = {}
     for build in builds:
         builder = build.builder_name
-        if builder not in latest_builds or build.build_number > latest_builds[builder].build_number:
+        if builder not in latest_builds or build.build_number > latest_builds[
+                builder].build_number:
             latest_builds[builder] = build
     return sorted(latest_builds.values())
diff --git a/third_party/blink/tools/blinkpy/common/net/results_fetcher_mock.py b/third_party/blink/tools/blinkpy/common/net/results_fetcher_mock.py
index 20ecf62..c3b6f520 100644
--- a/third_party/blink/tools/blinkpy/common/net/results_fetcher_mock.py
+++ b/third_party/blink/tools/blinkpy/common/net/results_fetcher_mock.py
@@ -32,7 +32,6 @@
 # TODO(qyearsley): To be consistent with other fake ("mock") classes, this
 # could be changed so it's not a subclass of TestResultsFetcher.
 class MockTestResultsFetcher(TestResultsFetcher):
-
     def __init__(self):
         super(MockTestResultsFetcher, self).__init__()
         self._canned_results = {}
diff --git a/third_party/blink/tools/blinkpy/common/net/results_fetcher_test.py b/third_party/blink/tools/blinkpy/common/net/results_fetcher_test.py
index 20f3870..3640e28 100644
--- a/third_party/blink/tools/blinkpy/common/net/results_fetcher_test.py
+++ b/third_party/blink/tools/blinkpy/common/net/results_fetcher_test.py
@@ -36,19 +36,20 @@
 
 
 class BuilderTest(LoggingTestCase):
-
     def setUp(self):
         self.set_logging_level(logging.DEBUG)
 
     def test_results_url_no_build_number(self):
         self.assertEqual(
             TestResultsFetcher().results_url('Test Builder'),
-            'https://test-results.appspot.com/data/layout_results/Test_Builder/results/layout-test-results')
+            'https://test-results.appspot.com/data/layout_results/Test_Builder/results/layout-test-results'
+        )
 
     def test_results_url_with_build_number(self):
         self.assertEqual(
             TestResultsFetcher().results_url('Test Builder', 10),
-            'https://test-results.appspot.com/data/layout_results/Test_Builder/10/layout-test-results')
+            'https://test-results.appspot.com/data/layout_results/Test_Builder/10/layout-test-results'
+        )
 
     def test_results_url_with_build_number_step_name(self):
         self.assertEqual(
@@ -58,18 +59,23 @@
             '/10/blink_web_tests%20%28with%20patch%29/layout-test-results')
 
     def test_results_url_with_non_numeric_build_number(self):
-        with self.assertRaisesRegexp(AssertionError, 'expected numeric build number'):
+        with self.assertRaisesRegexp(AssertionError,
+                                     'expected numeric build number'):
             TestResultsFetcher().results_url('Test Builder', 'ba5eba11')
 
     def test_builder_results_url_base(self):
         self.assertEqual(
-            TestResultsFetcher().builder_results_url_base('WebKit Mac10.8 (dbg)'),
-            'https://test-results.appspot.com/data/layout_results/WebKit_Mac10_8__dbg_')
+            TestResultsFetcher().builder_results_url_base(
+                'WebKit Mac10.8 (dbg)'),
+            'https://test-results.appspot.com/data/layout_results/WebKit_Mac10_8__dbg_'
+        )
 
     def test_accumulated_results_url(self):
         self.assertEqual(
-            TestResultsFetcher().accumulated_results_url_base('WebKit Mac10.8 (dbg)'),
-            'https://test-results.appspot.com/data/layout_results/WebKit_Mac10_8__dbg_/results/layout-test-results')
+            TestResultsFetcher().accumulated_results_url_base(
+                'WebKit Mac10.8 (dbg)'),
+            'https://test-results.appspot.com/data/layout_results/WebKit_Mac10_8__dbg_/results/layout-test-results'
+        )
 
     def test_fetch_web_test_results_with_no_results_fetched(self):
         fetcher = TestResultsFetcher()
@@ -83,21 +89,27 @@
 
     def test_fetch_results_with_weird_step_name(self):
         fetcher = TestResultsFetcher()
-        fetcher.web = MockWeb(urls={
-            'https://test-results.appspot.com/testfile?buildnumber=123&'
-            'callback=ADD_RESULTS&builder=builder&name=full_results.json':
+        fetcher.web = MockWeb(
+            urls={
+                'https://test-results.appspot.com/testfile?buildnumber=123&'
+                'callback=ADD_RESULTS&builder=builder&name=full_results.json':
                 'ADD_RESULTS(%s);' % (json.dumps(
-                    [{"TestType": "blink_web_tests on Intel GPU (with patch)"},
-                     {"TestType": "base_unittests (with patch)"}])),
-            'https://test-results.appspot.com/data/layout_results/builder/123/'
-            'blink_web_tests%20on%20Intel%20GPU%20%28with%20patch%29/'
-            'layout-test-results/failing_results.json':
-                json.dumps({'passed': True}),
-        })
+                    [{
+                        "TestType": "blink_web_tests on Intel GPU (with patch)"
+                    }, {
+                        "TestType": "base_unittests (with patch)"
+                    }])),
+                'https://test-results.appspot.com/data/layout_results/builder/123/'
+                'blink_web_tests%20on%20Intel%20GPU%20%28with%20patch%29/'
+                'layout-test-results/failing_results.json':
+                json.dumps({
+                    'passed': True
+                }),
+            })
         results = fetcher.fetch_results(Build('builder', 123))
-        self.assertEqual(results._results, {  # pylint: disable=protected-access
-            'passed': True
-        })
+        self.assertEqual(
+            results._results,  # pylint: disable=protected-access
+            {'passed': True})
         self.assertLog([])
 
     def test_fetch_results_without_build_number(self):
@@ -106,15 +118,23 @@
 
     def test_get_step_name(self):
         fetcher = TestResultsFetcher()
-        fetcher.web = MockWeb(urls={
-            'https://test-results.appspot.com/testfile?buildnumber=5&'
-            'callback=ADD_RESULTS&builder=foo&name=full_results.json':
+        fetcher.web = MockWeb(
+            urls={
+                'https://test-results.appspot.com/testfile?buildnumber=5&'
+                'callback=ADD_RESULTS&builder=foo&name=full_results.json':
                 'ADD_RESULTS(%s);' % (json.dumps(
-                    [{"TestType": "blink_web_tests (with patch)"},
-                     {"TestType": "not_site_per_process_blink_web_tests (with patch)"},
-                     {"TestType": "blink_web_tests (retry with patch)"},
-                     {"TestType": "base_unittests (with patch)"}]))
-        })
+                    [{
+                        "TestType": "blink_web_tests (with patch)"
+                    },
+                     {
+                         "TestType":
+                         "not_site_per_process_blink_web_tests (with patch)"
+                     }, {
+                         "TestType": "blink_web_tests (retry with patch)"
+                     }, {
+                         "TestType": "base_unittests (with patch)"
+                     }]))
+            })
         step_name = fetcher.get_layout_test_step_name(Build('foo', 5))
         self.assertEqual(step_name, 'blink_web_tests (with patch)')
         self.assertLog([])
@@ -126,15 +146,16 @@
 
     def test_fetch_webdriver_results_without_build_number(self):
         fetcher = TestResultsFetcher()
-        self.assertIsNone(fetcher.fetch_webdriver_test_results(
-            Build('builder', None), 'bar'))
+        self.assertIsNone(
+            fetcher.fetch_webdriver_test_results(
+                Build('builder', None), 'bar'))
         self.assertLog(
             ['DEBUG: Builder name or build number or master is None\n'])
 
     def test_fetch_webdriver_results_without_master(self):
         fetcher = TestResultsFetcher()
-        self.assertIsNone(fetcher.fetch_webdriver_test_results(
-            Build('builder', 1), ''))
+        self.assertIsNone(
+            fetcher.fetch_webdriver_test_results(Build('builder', 1), ''))
         self.assertLog(
             ['DEBUG: Builder name or build number or master is None\n'])
 
@@ -153,40 +174,47 @@
 
     def test_fetch_webdriver_results_success(self):
         fetcher = TestResultsFetcher()
-        fetcher.web = MockWeb(urls={
-            'https://test-results.appspot.com/testfile?buildnumber=123&'
-            'master=foo.chrome&builder=bar-rel&'
-            'testtype=webdriver_tests_suite+%28with+patch%29&'
-            'name=full_results.json':
-                json.dumps({'passed': True}),
-        })
+        fetcher.web = MockWeb(
+            urls={
+                'https://test-results.appspot.com/testfile?buildnumber=123&'
+                'master=foo.chrome&builder=bar-rel&'
+                'testtype=webdriver_tests_suite+%28with+patch%29&'
+                'name=full_results.json':
+                json.dumps({
+                    'passed': True
+                }),
+            })
         results = fetcher.fetch_webdriver_test_results(
             Build('bar-rel', 123), 'foo.chrome')
-        self.assertEqual(results._results, {  # pylint: disable=protected-access
-            'passed': True
-        })
+        self.assertEqual(
+            results._results,  # pylint: disable=protected-access
+            {'passed': True})
         self.assertLog([])
 
 
 class TestResultsFetcherHelperFunctionTest(unittest.TestCase):
-
     def test_filter_latest_jobs_empty(self):
         self.assertEqual(filter_latest_builds([]), [])
 
     def test_filter_latest_jobs_higher_build_first(self):
         self.assertEqual(
             filter_latest_builds(
-                [Build('foo', 5), Build('foo', 3), Build('bar', 5)]),
+                [Build('foo', 5),
+                 Build('foo', 3),
+                 Build('bar', 5)]),
             [Build('bar', 5), Build('foo', 5)])
 
     def test_filter_latest_jobs_higher_build_last(self):
         self.assertEqual(
             filter_latest_builds(
-                [Build('foo', 3), Build('bar', 5), Build('foo', 5)]),
+                [Build('foo', 3),
+                 Build('bar', 5),
+                 Build('foo', 5)]),
             [Build('bar', 5), Build('foo', 5)])
 
     def test_filter_latest_jobs_no_build_number(self):
         self.assertEqual(
-            filter_latest_builds(
-                [Build('foo', 3), Build('bar'), Build('bar')]),
+            filter_latest_builds([Build('foo', 3),
+                                  Build('bar'),
+                                  Build('bar')]),
             [Build('bar'), Build('foo', 3)])
diff --git a/third_party/blink/tools/blinkpy/common/net/web.py b/third_party/blink/tools/blinkpy/common/net/web.py
index c357305..ff76cf6 100644
--- a/third_party/blink/tools/blinkpy/common/net/web.py
+++ b/third_party/blink/tools/blinkpy/common/net/web.py
@@ -32,8 +32,7 @@
 
 
 class Web(object):
-
-    class _HTTPRedirectHandler2(urllib2.HTTPRedirectHandler):   # pylint:disable=no-init
+    class _HTTPRedirectHandler2(urllib2.HTTPRedirectHandler):  # pylint:disable=no-init
         """A subclass of HTTPRedirectHandler to support 308 Permanent Redirect."""
 
         def http_error_308(self, req, fp, code, msg, headers):  # pylint:disable=unused-argument
diff --git a/third_party/blink/tools/blinkpy/common/net/web_mock.py b/third_party/blink/tools/blinkpy/common/net/web_mock.py
index f044ea3..bb0671c 100644
--- a/third_party/blink/tools/blinkpy/common/net/web_mock.py
+++ b/third_party/blink/tools/blinkpy/common/net/web_mock.py
@@ -30,7 +30,6 @@
 
 
 class MockWeb(object):
-
     def __init__(self, urls=None, responses=None):
         self.urls = urls or {}
         self.urls_fetched = []
@@ -49,7 +48,6 @@
 
 
 class MockResponse(object):
-
     def __init__(self, values):
         self.status_code = values['status_code']
         self.url = ''
@@ -75,10 +73,12 @@
 
 
 class MockInfo(object):
-
     def __init__(self, headers):
         # The name of the headers (keys) are case-insensitive, and values are stripped.
-        self._headers = {key.lower(): value.strip() for key, value in headers.iteritems()}
+        self._headers = {
+            key.lower(): value.strip()
+            for key, value in headers.iteritems()
+        }
 
     def getheader(self, header):
         return self._headers.get(header.lower(), None)
diff --git a/third_party/blink/tools/blinkpy/common/net/web_test_results.py b/third_party/blink/tools/blinkpy/common/net/web_test_results.py
index c454174..deb8d985 100644
--- a/third_party/blink/tools/blinkpy/common/net/web_test_results.py
+++ b/third_party/blink/tools/blinkpy/common/net/web_test_results.py
@@ -33,7 +33,6 @@
 
 
 class WebTestResult(object):
-
     def __init__(self, test_name, result_dict):
         self._test_name = test_name
         self._result_dict = result_dict
@@ -98,21 +97,21 @@
         previously all-PASS testharness test starts to fail)."""
         actual_results = self.actual_results().split(' ')
         artifact_names = self._result_dict.get('artifacts', {}).keys()
-        return ('FAIL' in actual_results and
-                any(artifact_name.startswith('actual')
-                    for artifact_name in artifact_names) and
-                'reference_file_mismatch' not in artifact_names and
-                'reference_file_match' not in artifact_names)
+        return ('FAIL' in actual_results and any(
+            artifact_name.startswith('actual')
+            for artifact_name in artifact_names)
+                and 'reference_file_mismatch' not in artifact_names
+                and 'reference_file_match' not in artifact_names)
 
     def is_missing_baseline(self):
-        return self.is_missing_image() or self.is_missing_text() or self.is_missing_audio()
+        return (self.is_missing_image() or self.is_missing_text()
+                or self.is_missing_audio())
 
 
 # FIXME: This should be unified with ResultsSummary or other NRWT web tests code
 # in the web_tests package.
 # This doesn't belong in common.net, but we don't have a better place for it yet.
 class WebTestResults(object):
-
     @classmethod
     def results_from_string(cls, string):
         """Creates a WebTestResults object from a test result JSON string.
diff --git a/third_party/blink/tools/blinkpy/common/net/web_test_results_unittest.py b/third_party/blink/tools/blinkpy/common/net/web_test_results_unittest.py
index 6020153..980ed6a1 100644
--- a/third_party/blink/tools/blinkpy/common/net/web_test_results_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/net/web_test_results_unittest.py
@@ -126,57 +126,92 @@
         self.assertIsNone(WebTestResults.results_from_string(''))
 
     def test_was_interrupted(self):
-        self.assertTrue(WebTestResults.results_from_string(
-            'ADD_RESULTS({"tests":{},"interrupted":true});').run_was_interrupted())
-        self.assertFalse(WebTestResults.results_from_string(
-            'ADD_RESULTS({"tests":{},"interrupted":false});').run_was_interrupted())
+        self.assertTrue(
+            WebTestResults.results_from_string(
+                'ADD_RESULTS({"tests":{},"interrupted":true});').
+            run_was_interrupted())
+        self.assertFalse(
+            WebTestResults.results_from_string(
+                'ADD_RESULTS({"tests":{},"interrupted":false});').
+            run_was_interrupted())
 
     def test_chromium_revision(self):
-        self.assertEqual(WebTestResults.results_from_string(self.example_full_results_json).chromium_revision(), 1234)
+        self.assertEqual(
+            WebTestResults.results_from_string(
+                self.example_full_results_json).chromium_revision(), 1234)
 
     def test_didnt_run_as_expected_results(self):
-        results = WebTestResults.results_from_string(self.example_full_results_json)
-        self.assertEqual(
-            [r.test_name() for r in results.didnt_run_as_expected_results()],
-            [
-                'fast/dom/many-mismatches.html',
-                'fast/dom/mismatch-implicit-baseline.html',
-                'fast/dom/missing-text.html',
-                'fast/dom/prototype-slow.html',
-                'fast/dom/reference-mismatch.html',
-                'fast/dom/unexpected-flaky.html',
-                'fast/dom/unexpected-pass.html',
-                'svg/dynamic-updates/SVGFEDropShadowElement-dom-stdDeviation-attr.html',
-            ])
+        results = WebTestResults.results_from_string(
+            self.example_full_results_json)
+        self.assertEqual([
+            r.test_name() for r in results.didnt_run_as_expected_results()
+        ], [
+            'fast/dom/many-mismatches.html',
+            'fast/dom/mismatch-implicit-baseline.html',
+            'fast/dom/missing-text.html',
+            'fast/dom/prototype-slow.html',
+            'fast/dom/reference-mismatch.html',
+            'fast/dom/unexpected-flaky.html',
+            'fast/dom/unexpected-pass.html',
+            'svg/dynamic-updates/SVGFEDropShadowElement-dom-stdDeviation-attr.html',
+        ])
 
     def test_result_for_test_non_existent(self):
-        results = WebTestResults.results_from_string(self.example_full_results_json)
+        results = WebTestResults.results_from_string(
+            self.example_full_results_json)
         self.assertFalse(results.result_for_test('nonexistent.html'))
 
     # The following are tests for a single WebTestResult.
 
     def test_actual_results(self):
-        results = WebTestResults.results_from_string(self.example_full_results_json)
-        self.assertEqual(results.result_for_test('fast/dom/unexpected-pass.html').actual_results(), 'PASS')
-        self.assertEqual(results.result_for_test('fast/dom/unexpected-flaky.html').actual_results(), 'PASS FAIL')
+        results = WebTestResults.results_from_string(
+            self.example_full_results_json)
+        self.assertEqual(
+            results.result_for_test('fast/dom/unexpected-pass.html').
+            actual_results(), 'PASS')
+        self.assertEqual(
+            results.result_for_test('fast/dom/unexpected-flaky.html').
+            actual_results(), 'PASS FAIL')
 
     def test_expected_results(self):
-        results = WebTestResults.results_from_string(self.example_full_results_json)
-        self.assertEqual(results.result_for_test('fast/dom/many-mismatches.html').expected_results(), 'PASS')
-        self.assertEqual(results.result_for_test('fast/dom/expected-flaky.html').expected_results(), 'PASS FAIL')
+        results = WebTestResults.results_from_string(
+            self.example_full_results_json)
+        self.assertEqual(
+            results.result_for_test('fast/dom/many-mismatches.html').
+            expected_results(), 'PASS')
+        self.assertEqual(
+            results.result_for_test('fast/dom/expected-flaky.html').
+            expected_results(), 'PASS FAIL')
 
     def test_has_non_reftest_mismatch(self):
-        results = WebTestResults.results_from_string(self.example_full_results_json)
-        self.assertTrue(results.result_for_test('fast/dom/many-mismatches.html').has_non_reftest_mismatch())
-        self.assertTrue(results.result_for_test('fast/dom/mismatch-implicit-baseline.html').has_non_reftest_mismatch())
-        self.assertFalse(results.result_for_test('fast/dom/reference-mismatch.html').has_non_reftest_mismatch())
+        results = WebTestResults.results_from_string(
+            self.example_full_results_json)
+        self.assertTrue(
+            results.result_for_test('fast/dom/many-mismatches.html').
+            has_non_reftest_mismatch())
+        self.assertTrue(
+            results.result_for_test('fast/dom/mismatch-implicit-baseline.html'
+                                    ).has_non_reftest_mismatch())
+        self.assertFalse(
+            results.result_for_test('fast/dom/reference-mismatch.html').
+            has_non_reftest_mismatch())
 
     def test_is_missing_baseline(self):
-        results = WebTestResults.results_from_string(self.example_full_results_json)
-        self.assertTrue(results.result_for_test('fast/dom/missing-text.html').is_missing_baseline())
-        self.assertFalse(results.result_for_test('fast/dom/many-mismatches.html').is_missing_baseline())
+        results = WebTestResults.results_from_string(
+            self.example_full_results_json)
+        self.assertTrue(
+            results.result_for_test('fast/dom/missing-text.html').
+            is_missing_baseline())
+        self.assertFalse(
+            results.result_for_test('fast/dom/many-mismatches.html').
+            is_missing_baseline())
 
     def test_suffixes_for_test_result(self):
-        results = WebTestResults.results_from_string(self.example_full_results_json)
-        self.assertSetEqual(results.result_for_test('fast/dom/many-mismatches.html').suffixes_for_test_result(), {'txt', 'png'})
-        self.assertSetEqual(results.result_for_test('fast/dom/missing-text.html').suffixes_for_test_result(), {'txt'})
+        results = WebTestResults.results_from_string(
+            self.example_full_results_json)
+        self.assertSetEqual(
+            results.result_for_test('fast/dom/many-mismatches.html').
+            suffixes_for_test_result(), {'txt', 'png'})
+        self.assertSetEqual(
+            results.result_for_test('fast/dom/missing-text.html').
+            suffixes_for_test_result(), {'txt'})
diff --git a/third_party/blink/tools/blinkpy/common/path_finder.py b/third_party/blink/tools/blinkpy/common/path_finder.py
index 04feb3af..92777ee0 100644
--- a/third_party/blink/tools/blinkpy/common/path_finder.py
+++ b/third_party/blink/tools/blinkpy/common/path_finder.py
@@ -67,7 +67,9 @@
 
 
 def get_blink_dir():
-    return os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))
+    return os.path.dirname(
+        os.path.dirname(
+            os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))
 
 
 def get_chromium_src_dir():
@@ -79,7 +81,8 @@
 
 
 def get_source_dir():
-    return os.path.join(get_chromium_src_dir(), 'third_party', 'blink', 'renderer')
+    return os.path.join(get_chromium_src_dir(), 'third_party', 'blink',
+                        'renderer')
 
 
 def get_typ_dir():
@@ -92,7 +95,8 @@
 
 
 def get_blink_tools_dir():
-    return os.path.join(get_chromium_src_dir(), 'third_party', 'blink', 'tools')
+    return os.path.join(get_chromium_src_dir(), 'third_party', 'blink',
+                        'tools')
 
 
 def get_build_scripts_dir():
@@ -106,8 +110,9 @@
 
 
 def _does_blink_web_tests_exist():
-    return os.path.exists(os.path.join(get_chromium_src_dir(), 'third_party',
-                                       'blink', 'web_tests'))
+    return os.path.exists(
+        os.path.join(get_chromium_src_dir(), 'third_party', 'blink',
+                     'web_tests'))
 
 
 TESTS_IN_BLINK = _does_blink_web_tests_exist()
@@ -116,8 +121,8 @@
 RELATIVE_WEB_TESTS = 'third_party/blink/web_tests/'
 WEB_TESTS_LAST_COMPONENT = 'web_tests'
 
-class PathFinder(object):
 
+class PathFinder(object):
     def __init__(self, filesystem, sys_path=None, env_path=None):
         self._filesystem = filesystem
         self._dirsep = filesystem.sep
@@ -126,13 +131,16 @@
 
     @memoized
     def chromium_base(self):
-        return self._filesystem.dirname(self._filesystem.dirname(self._blink_base()))
+        return self._filesystem.dirname(
+            self._filesystem.dirname(self._blink_base()))
 
     def web_tests_dir(self):
-        return self.path_from_chromium_base('third_party', 'blink', 'web_tests')
+        return self.path_from_chromium_base('third_party', 'blink',
+                                            'web_tests')
 
     def perf_tests_dir(self):
-        return self.path_from_chromium_base('third_party', 'blink', 'perf_tests')
+        return self.path_from_chromium_base('third_party', 'blink',
+                                            'perf_tests')
 
     def webdriver_prefix(self):
         return self._filesystem.join('external', 'wpt', 'webdriver', '')
@@ -149,14 +157,16 @@
         return self._filesystem.join(self.chromium_base(), *comps)
 
     def _blink_source_dir(self):
-        return self._filesystem.join(
-            self.chromium_base(), 'third_party', 'blink', 'renderer')
+        return self._filesystem.join(self.chromium_base(), 'third_party',
+                                     'blink', 'renderer')
 
     def path_from_blink_source(self, *comps):
         return self._filesystem.join(self._blink_source_dir(), *comps)
 
     def path_from_blink_tools(self, *comps):
-        return self._filesystem.join(self._filesystem.join(self.chromium_base(), 'third_party', 'blink', 'tools'), *comps)
+        return self._filesystem.join(
+            self._filesystem.join(self.chromium_base(), 'third_party', 'blink',
+                                  'tools'), *comps)
 
     def path_from_web_tests(self, *comps):
         return self._filesystem.join(self.web_tests_dir(), *comps)
@@ -182,7 +192,8 @@
         Expects depot_tools to be //third_party/depot_tools.
         src.git's DEPS defines depot_tools to be there.
         """
-        depot_tools = self.path_from_chromium_base('third_party', 'depot_tools')
+        depot_tools = self.path_from_chromium_base('third_party',
+                                                   'depot_tools')
         return depot_tools if self._filesystem.isdir(depot_tools) else None
 
     def path_from_depot_tools_base(self, *comps):
diff --git a/third_party/blink/tools/blinkpy/common/path_finder_unittest.py b/third_party/blink/tools/blinkpy/common/path_finder_unittest.py
index 5284c1a..83bcd1de 100644
--- a/third_party/blink/tools/blinkpy/common/path_finder_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/path_finder_unittest.py
@@ -10,7 +10,6 @@
 
 
 class TestPathFinder(unittest.TestCase):
-
     def test_chromium_base(self):
         finder = PathFinder(MockFileSystem())
         self.assertEqual(finder.chromium_base(), '/mock-checkout')
@@ -23,25 +22,22 @@
 
     def test_web_tests_dir(self):
         finder = PathFinder(MockFileSystem())
-        self.assertEqual(
-            finder.web_tests_dir(),
-            '/mock-checkout/' + RELATIVE_WEB_TESTS[:-1])
+        self.assertEqual(finder.web_tests_dir(),
+                         '/mock-checkout/' + RELATIVE_WEB_TESTS[:-1])
 
     def test_web_tests_dir_with_backslash_sep(self):
         filesystem = MockFileSystem()
         filesystem.sep = '\\'
-        filesystem.path_to_module = lambda _: (
-            'C:\\mock-checkout\\third_party\\blink\\tools\\blinkpy\\foo.py')
+        filesystem.path_to_module = \
+            lambda _: ('C:\\mock-checkout\\third_party\\blink\\tools\\blinkpy\\foo.py')
         finder = PathFinder(filesystem)
-        self.assertEqual(
-            finder.web_tests_dir(),
-            'C:\\mock-checkout\\third_party\\blink\\web_tests')
+        self.assertEqual(finder.web_tests_dir(),
+                         'C:\\mock-checkout\\third_party\\blink\\web_tests')
 
     def test_perf_tests_dir(self):
         finder = PathFinder(MockFileSystem())
-        self.assertEqual(
-            finder.perf_tests_dir(),
-            '/mock-checkout/third_party/blink/perf_tests')
+        self.assertEqual(finder.perf_tests_dir(),
+                         '/mock-checkout/third_party/blink/perf_tests')
 
     def test_path_from_web_tests(self):
         finder = PathFinder(MockFileSystem())
@@ -51,29 +47,27 @@
 
     def test_depot_tools_base_not_found(self):
         filesystem = MockFileSystem()
-        filesystem.path_to_module = lambda _: (
-            '/mock-checkout/third_party/blink/tools/blinkpy/common/'
-            'path_finder.py')
+        filesystem.path_to_module = \
+            lambda _: ('/mock-checkout/third_party/blink/tools/blinkpy/common/'
+                       'path_finder.py')
         finder = PathFinder(filesystem)
         self.assertIsNone(finder.depot_tools_base())
 
     def test_depot_tools_base_exists(self):
         filesystem = MockFileSystem()
-        filesystem.path_to_module = lambda _: (
-            '/checkout/third_party/blink/tools/blinkpy/common/'
-            'path_finder.py')
-        filesystem.maybe_make_directory(
-            '/checkout/third_party/depot_tools')
+        filesystem.path_to_module = \
+            lambda _: ('/checkout/third_party/blink/tools/blinkpy/common/'
+                       'path_finder.py')
+        filesystem.maybe_make_directory('/checkout/third_party/depot_tools')
         finder = PathFinder(filesystem)
-        self.assertEqual(
-            finder.depot_tools_base(), '/checkout/third_party/depot_tools')
+        self.assertEqual(finder.depot_tools_base(),
+                         '/checkout/third_party/depot_tools')
 
     def test_strip_web_tests_path(self):
         finder = PathFinder(MockFileSystem())
         path_with_web_tests = '/mock-checkout/' + RELATIVE_WEB_TESTS + 'external/wpt'
         self.assertEqual(
-            finder.strip_web_tests_path(path_with_web_tests),
-            'external/wpt')
+            finder.strip_web_tests_path(path_with_web_tests), 'external/wpt')
         path_without_web_tests = '/checkout/' + RELATIVE_WEB_TESTS + 'external/wpt'
         self.assertEqual(
             finder.strip_web_tests_path(path_without_web_tests),
@@ -94,4 +88,5 @@
         finder = PathFinder(MockFileSystem())
         path_with_webdriver_prefix = 'external/wpt/webdriver/' + 'foo/bar.py>>test'
 
-        self.assertTrue(finder.is_webdriver_test_path(path_with_webdriver_prefix))
+        self.assertTrue(
+            finder.is_webdriver_test_path(path_with_webdriver_prefix))
diff --git a/third_party/blink/tools/blinkpy/common/pretty_diff.py b/third_party/blink/tools/blinkpy/common/pretty_diff.py
index d6ce2ad..10f4093 100644
--- a/third_party/blink/tools/blinkpy/common/pretty_diff.py
+++ b/third_party/blink/tools/blinkpy/common/pretty_diff.py
@@ -1,7 +1,6 @@
 # Copyright 2018 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.
-
 """Prettifies 'git diff' output.
 
 prettify_diff() takes a diff string, and returns an HTML string decorating the
@@ -10,7 +9,6 @@
 This code doesn't support other diff commands such as "diff" and "svn diff".
 """
 
-
 import base64
 import cgi
 import difflib
@@ -20,7 +18,6 @@
 
 from blinkpy.common.base85 import decode_base85
 
-
 # The style below is meant to be similar to PolyGerrit.
 _LEADING_HTML = """<!DOCTYPE html>
 <meta charset="UTF-8">
@@ -125,7 +122,12 @@
     """
     LINK_BASE_URL = 'https://chromium.googlesource.com/chromium/src/+/master/'
 
-    def __init__(self, old_name, new_name, hunks=None, binaries=None, info=None):
+    def __init__(self,
+                 old_name,
+                 new_name,
+                 hunks=None,
+                 binaries=None,
+                 info=None):
         assert old_name or new_name
         assert bool(hunks) + bool(binaries) + bool(info) == 1
         self._old_name = old_name
@@ -147,13 +149,15 @@
         elif self._old_name != self._new_name:
             status = 'R'
             pretty_name = cgi.escape(self._new_name)
-            additional_info = ('\n<span class=rename>Renamed from {}</span>'
-                               .format(self._linkify(self._old_name)))
+            additional_info = (
+                '\n<span class=rename>Renamed from {}</span>'.format(
+                    self._linkify(self._old_name)))
 
         result_html = (
             '\n<table>\n<tr><td colspan=3 class=fileheader>'
             '<div class=fileheader-container>'
-            '<div class=filename>' + status + ' ' + pretty_name + additional_info + '</div>'
+            '<div class=filename>' + status + ' ' + pretty_name +
+            additional_info + '</div>'
             '<button type=button onclick="toggleFollowingRows(this);">&#x25B2;</button>'
             '</div></tr>')
 
@@ -166,14 +170,17 @@
         else:
             old_binary, new_binary = self._binaries  # pylint: disable=unpacking-non-sequence
             if self._old_name and old_binary:
-                result_html += old_binary.prettify(self._mime_from_name(self._old_name), 'del')
+                result_html += old_binary.prettify(
+                    self._mime_from_name(self._old_name), 'del')
             if self._new_name and new_binary:
-                result_html += new_binary.prettify(self._mime_from_name(self._new_name), 'add')
+                result_html += new_binary.prettify(
+                    self._mime_from_name(self._new_name), 'add')
         return result_html + '<tr><td colspan=3 class=filehooter><div></div></table>\n'
 
     def _linkify(self, name):
         return '<a href="{url}" target="_new">{anchor}</a>'.format(
-            url=DiffFile.LINK_BASE_URL + cgi.escape(name), anchor=cgi.escape(name))
+            url=DiffFile.LINK_BASE_URL + cgi.escape(name),
+            anchor=cgi.escape(name))
 
     def _mime_from_name(self, name):
         mime_type, _ = mimetypes.guess_type(name)
@@ -206,20 +213,25 @@
             match = re.match(r'(GIT binary patch|--- ([^ ]+).*)', line)
             if match:
                 if match.group(0) == 'GIT binary patch':
-                    return DiffFile._parse_binaries(lines[i + 1:], old_name, new_name)
-                return DiffFile._parse_text_hunks(lines[i:], old_name, new_name)
+                    return DiffFile._parse_binaries(lines[i + 1:], old_name,
+                                                    new_name)
+                return DiffFile._parse_text_hunks(lines[i:], old_name,
+                                                  new_name)
 
-            index_match = re.match(r'^index ([0-9a-f]+)\.\.([0-9a-f]+).*', line)
+            index_match = re.match(r'^index ([0-9a-f]+)\.\.([0-9a-f]+).*',
+                                   line)
             if index_match:
                 # Adjusts old_name and new_name for file addition/removal.
-                old_name, new_name = DiffFile._adjust_names(index_match, old_name, new_name)
+                old_name, new_name = DiffFile._adjust_names(
+                    index_match, old_name, new_name)
                 continue
 
             diff_match = re.match(diff_command_re, line)
             if diff_match:
                 # There are no hunks. Renaming without any modification,
                 # or adding/removing an empty file.
-                return (DiffFile(old_name, new_name, info=info_lines), lines[i:])
+                return (DiffFile(old_name, new_name, info=info_lines),
+                        lines[i:])
 
             # File mode, rename summary, etc.
             info_lines.append(line)
@@ -232,7 +244,8 @@
     def _parse_binaries(lines, old_name, new_name):
         new_binary, remaining_lines = BinaryHunk.parse(lines)
         old_binary, remaining_lines = BinaryHunk.parse(remaining_lines)
-        return (DiffFile(old_name, new_name, binaries=(old_binary, new_binary)),
+        return (DiffFile(
+            old_name, new_name, binaries=(old_binary, new_binary)),
                 remaining_lines)
 
     @staticmethod
@@ -277,9 +290,10 @@
         # modified part of a line, which should be highlighted in the pretty
         # diff.
         self._annotations = [None for _ in self._lines]
-        for deleted_index, inserted_index in self._find_operations(self._lines):
-            DiffHunk._annotate_character_diff(self._lines, deleted_index,
-                                              inserted_index, self._annotations)
+        for deleted_index, inserted_index in self._find_operations(
+                self._lines):
+            DiffHunk._annotate_character_diff(
+                self._lines, deleted_index, inserted_index, self._annotations)
 
     @staticmethod
     def _find_operations(lines):
@@ -315,7 +329,8 @@
         return operations
 
     @staticmethod
-    def _annotate_character_diff(lines, deleted_index, inserted_index, annotations):
+    def _annotate_character_diff(lines, deleted_index, inserted_index,
+                                 annotations):
         assert len(lines) == len(annotations)
         if not deleted_index:
             for i in inserted_index:
@@ -332,16 +347,16 @@
         matcher = difflib.SequenceMatcher(None, deleted_str, inserted_str)
         for tag, d_start, d_end, i_start, i_end in matcher.get_opcodes():
             if tag == 'delete':
-                DiffHunk._annotate(lines, deleted_index[0],
-                                   d_start, d_end, annotations)
+                DiffHunk._annotate(lines, deleted_index[0], d_start, d_end,
+                                   annotations)
             elif tag == 'insert':
-                DiffHunk._annotate(lines, inserted_index[0],
-                                   i_start, i_end, annotations)
+                DiffHunk._annotate(lines, inserted_index[0], i_start, i_end,
+                                   annotations)
             elif tag == 'replace':
-                DiffHunk._annotate(lines, deleted_index[0],
-                                   d_start, d_end, annotations)
-                DiffHunk._annotate(lines, inserted_index[0],
-                                   i_start, i_end, annotations)
+                DiffHunk._annotate(lines, deleted_index[0], d_start, d_end,
+                                   annotations)
+                DiffHunk._annotate(lines, inserted_index[0], i_start, i_end,
+                                   annotations)
 
     @staticmethod
     def _annotate(lines, index, start, end, annotations):
@@ -359,7 +374,8 @@
             annotations[index] = []
         annotations[index].append((start, min(line_len, end)))
         if end > line_len:
-            DiffHunk._annotate(lines, index + 1, 0, end - line_len, annotations)
+            DiffHunk._annotate(lines, index + 1, 0, end - line_len,
+                               annotations)
 
     def prettify_code(self, index, klass):
         line = self._lines[index][1:]
@@ -385,16 +401,19 @@
 
     def prettify(self):
         result_html = ('<tr><td class=hunkheader>@@<td class=hunkheader>@@'
-                       '<td class=hunkheader>{}</tr>\n').format(cgi.escape(self._context))
+                       '<td class=hunkheader>{}</tr>\n').format(
+                           cgi.escape(self._context))
         old_lineno = self._old_start
         new_lineno = self._new_start
         for i, line in enumerate(self._lines):
             if line[0] == ' ':
-                result_html += ('<tr><td class=lineno>{old_lineno}<td '
-                                'class=lineno>{new_lineno}<td class=code>{code}'
-                                '</tr>\n').format(old_lineno=old_lineno,
-                                                  new_lineno=new_lineno,
-                                                  code=cgi.escape(line[1:]))
+                result_html += (
+                    '<tr><td class=lineno>{old_lineno}<td '
+                    'class=lineno>{new_lineno}<td class=code>{code}'
+                    '</tr>\n').format(
+                        old_lineno=old_lineno,
+                        new_lineno=new_lineno,
+                        code=cgi.escape(line[1:]))
                 old_lineno += 1
                 new_lineno += 1
             elif line[0] == '-':
@@ -465,10 +484,11 @@
         self._compressed_data = bin_data
 
     def prettify(self, mime_type, klass):
-        result_html = ('<tr><td class=emptylineno><td class=emptylineno>'
-                       '<td class="{klass} strong binary">Binary {type}; {size}'
-                       ' Bytes<br>\n').format(klass=klass, type=self._type,
-                                              size=self._size)
+        result_html = (
+            '<tr><td class=emptylineno><td class=emptylineno>'
+            '<td class="{klass} strong binary">Binary {type}; {size}'
+            ' Bytes<br>\n').format(
+                klass=klass, type=self._type, size=self._size)
         if self._type == 'delta':
             # Because we can assume the input diff is always produced by git, we
             # can obtain the original blob, apply the delta, and render both of
@@ -480,8 +500,10 @@
             return result_html + 'We don\'t support rendering a delta binary hunk.'
         if mime_type.startswith('image/'):
             return result_html + '<img src="data:{type};base64,{data}">'.format(
-                type=mime_type, data=base64.b64encode(zlib.decompress(self._compressed_data)))
-        return result_html + 'We don\'t support rendering {} binary.'.format(mime_type)
+                type=mime_type,
+                data=base64.b64encode(zlib.decompress(self._compressed_data)))
+        return result_html + 'We don\'t support rendering {} binary.'.format(
+            mime_type)
 
     @staticmethod
     def parse(lines):
@@ -510,6 +532,7 @@
             if line_length * 5 > (len(line) - 1) * 4:
                 raise ValueError('Base85 length mismatch: length by the first '
                                  'letter:{}, actual:{}, line:"{}"'.format(
-                                     line_length * 5, (len(line) - 1) * 4, line))
+                                     line_length * 5, (len(line) - 1) * 4,
+                                     line))
             bin_data += decode_base85(line[1:])[0:line_length]
         raise ValueError('No blank line terminating a binary hunk.')
diff --git a/third_party/blink/tools/blinkpy/common/pretty_diff_unittest.py b/third_party/blink/tools/blinkpy/common/pretty_diff_unittest.py
index 232bd65..448aae6 100644
--- a/third_party/blink/tools/blinkpy/common/pretty_diff_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/pretty_diff_unittest.py
@@ -7,12 +7,11 @@
 
 from blinkpy.common.pretty_diff import BinaryHunk, DiffFile, DiffHunk
 
-
 # This test contains tests for protected methods.
 # pylint: disable=protected-access
 
-class TestFileDiff(unittest.TestCase):
 
+class TestFileDiff(unittest.TestCase):
     def _assert_file_status(self, diff, status):
         html = diff.prettify()
         match = re.search(r'\b([A-Z]) ', html)
@@ -26,101 +25,96 @@
 
     def test_100percent_similarity(self):
         # crrev.com/c576df77d72abe47154ff2489bb035aa20892f7f
-        lines = ['diff --git a/platform/modules/offscreencanvas/OWNERS b/platform/modules/frame_sinks/OWNERS',
-                 'similarity index 100%',
-                 'rename from platform/modules/offscreencanvas/OWNERS',
-                 'rename to platform/modules/frame_sinks/OWNERS',
-                 'diff --git a/mojom/frame_sinks/embedded_frame_sink.mojom ' +
-                 'b/mojom/frame_sinks/embedded_frame_sink.mojom']
+        lines = [
+            'diff --git a/platform/modules/offscreencanvas/OWNERS b/platform/modules/frame_sinks/OWNERS',
+            'similarity index 100%',
+            'rename from platform/modules/offscreencanvas/OWNERS',
+            'rename to platform/modules/frame_sinks/OWNERS',
+            'diff --git a/mojom/frame_sinks/embedded_frame_sink.mojom ' +
+            'b/mojom/frame_sinks/embedded_frame_sink.mojom'
+        ]
         diff, remaining_lines = DiffFile.parse(lines)
         self.assertIsNotNone(diff)
         self.assertEquals(remaining_lines[0], lines[4])
 
     def test_emptify_text(self):
-        lines = ['diff --git a/third_party/blink/text-to-zero.txt b/third_party/blink/text-to-zero.txt',
-                 'index 2262de0..e69de29 100644',
-                 '--- a/third_party/blink/text-to-zero.txt',
-                 '+++ b/third_party/blink/text-to-zero.txt',
-                 '@@ -1 +0,0 @@',
-                 '-hoge']
+        lines = [
+            'diff --git a/third_party/blink/text-to-zero.txt b/third_party/blink/text-to-zero.txt',
+            'index 2262de0..e69de29 100644',
+            '--- a/third_party/blink/text-to-zero.txt',
+            '+++ b/third_party/blink/text-to-zero.txt', '@@ -1 +0,0 @@',
+            '-hoge'
+        ]
         diff, remaining_lines = DiffFile.parse(lines)
         self.assertIsNotNone(diff)
         self.assertEquals(remaining_lines, [])
         self._assert_file_status(diff, 'M')
 
     def test_remove_text(self):
-        lines = ['diff --git a/text-to-be-removed.txt b/text-to-be-removed.txt',
-                 'deleted file mode 100644',
-                 'index 2262de0..0000000',
-                 '--- a/text-to-be-removed.txt',
-                 '+++ /dev/null',
-                 '@@ -1 +0,0 @@',
-                 '-hoge']
+        lines = [
+            'diff --git a/text-to-be-removed.txt b/text-to-be-removed.txt',
+            'deleted file mode 100644', 'index 2262de0..0000000',
+            '--- a/text-to-be-removed.txt', '+++ /dev/null', '@@ -1 +0,0 @@',
+            '-hoge'
+        ]
         diff, remaining_lines = DiffFile.parse(lines)
         self.assertIsNotNone(diff)
         self.assertEquals(remaining_lines, [])
         self._assert_file_status(diff, 'D')
 
     def test_remove_zero_byte_text(self):
-        lines = ['diff --git a/text-zero.txt b/text-zero.txt',
-                 'deleted file mode 100644',
-                 'index e69de29..0000000']
+        lines = [
+            'diff --git a/text-zero.txt b/text-zero.txt',
+            'deleted file mode 100644', 'index e69de29..0000000'
+        ]
         diff, remaining_lines = DiffFile.parse(lines)
         self.assertIsNotNone(diff)
         self.assertEquals(remaining_lines, [])
         self._assert_file_status(diff, 'D')
 
     def test_add_empty_text(self):
-        lines = ['diff --git a/text-zero.txt b/text-zero.txt',
-                 'new file mode 100644',
-                 'index 0000000..e69de29']
+        lines = [
+            'diff --git a/text-zero.txt b/text-zero.txt',
+            'new file mode 100644', 'index 0000000..e69de29'
+        ]
         diff, remaining_lines = DiffFile.parse(lines)
         self.assertIsNotNone(diff)
         self.assertEquals(remaining_lines, [])
         self._assert_file_status(diff, 'A')
 
     def test_emptify_binary(self):
-        lines = ['diff --git a/binary-to-zero.png b/binary-to-zero.png',
-                 'index 9b56f1c6942441578b0585d8b9688fdfcb2aa3fd..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644',
-                 'GIT binary patch',
-                 'literal 0',
-                 'HcmV?d00001',
-                 '',
-                 'literal 6',
-                 'NcmZSh&&2%iKL7{~0|Ed5',
-                 '']
+        lines = [
+            'diff --git a/binary-to-zero.png b/binary-to-zero.png',
+            'index 9b56f1c6942441578b0585d8b9688fdfcb2aa3fd..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644',
+            'GIT binary patch', 'literal 0', 'HcmV?d00001', '', 'literal 6',
+            'NcmZSh&&2%iKL7{~0|Ed5', ''
+        ]
         diff, remaining_lines = DiffFile.parse(lines)
         self.assertIsNotNone(diff)
         self.assertEquals(remaining_lines, [])
         self._assert_file_status(diff, 'M')
 
     def test_remove_binary(self):
-        lines = ['diff --git a/binary-to-be-removed.png b/binary-to-be-removed.png',
-                 'deleted file mode 100644',
-                 'index 9b56f1c6942441578b0585d8b9688fdfcb2aa3fd..0000000000000000000000000000000000000000',
-                 'GIT binary patch',
-                 'literal 0',
-                 'HcmV?d00001',
-                 '',
-                 'literal 6',
-                 'NcmZSh&&2%iKL7{~0|Ed5',
-                 '']
+        lines = [
+            'diff --git a/binary-to-be-removed.png b/binary-to-be-removed.png',
+            'deleted file mode 100644',
+            'index 9b56f1c6942441578b0585d8b9688fdfcb2aa3fd..0000000000000000000000000000000000000000',
+            'GIT binary patch', 'literal 0', 'HcmV?d00001', '', 'literal 6',
+            'NcmZSh&&2%iKL7{~0|Ed5', ''
+        ]
         diff, remaining_lines = DiffFile.parse(lines)
         self.assertIsNotNone(diff)
         self.assertEquals(remaining_lines, [])
         self._assert_file_status(diff, 'D')
 
     def test_add_binary(self):
-        lines = ['diff --git a/binary-to-zero.png b/binary-to-zero.png',
-                 'new file mode 100644',
-                 'index 0000000000000000000000000000000000000000..9b56f1c6942441578b0585d8b9688fdfcb2aa3fd',
-                 'GIT binary patch',
-                 'literal 6',
-                 'NcmZSh&&2%iKL7{~0|Ed5',
-                 '',
-                 'literal 0',
-                 'HcmV?d00001',
-                 '']
+        lines = [
+            'diff --git a/binary-to-zero.png b/binary-to-zero.png',
+            'new file mode 100644',
+            'index 0000000000000000000000000000000000000000..9b56f1c6942441578b0585d8b9688fdfcb2aa3fd',
+            'GIT binary patch', 'literal 6', 'NcmZSh&&2%iKL7{~0|Ed5', '',
+            'literal 0', 'HcmV?d00001', ''
+        ]
         diff, remaining_lines = DiffFile.parse(lines)
         self.assertIsNotNone(diff)
         self.assertEquals(remaining_lines, [])
@@ -128,36 +122,41 @@
 
 
 class TestDiffHunk(unittest.TestCase):
-
     def test_find_operations(self):
         self.assertEquals(DiffHunk._find_operations([]), [])
         self.assertEquals(DiffHunk._find_operations([' ']), [])
 
         self.assertEquals(DiffHunk._find_operations(['-']), [([0], [])])
-        self.assertEquals(DiffHunk._find_operations(['-', '-']), [([0, 1], [])])
-        self.assertEquals(DiffHunk._find_operations([' ', '-', '-']),
-                          [([1, 2], [])])
-        self.assertEquals(DiffHunk._find_operations(['-', '-', ' ']),
-                          [([0, 1], [])])
+        self.assertEquals(
+            DiffHunk._find_operations(['-', '-']), [([0, 1], [])])
+        self.assertEquals(
+            DiffHunk._find_operations([' ', '-', '-']), [([1, 2], [])])
+        self.assertEquals(
+            DiffHunk._find_operations(['-', '-', ' ']), [([0, 1], [])])
 
         self.assertEquals(DiffHunk._find_operations(['+']), [([], [0])])
-        self.assertEquals(DiffHunk._find_operations(['+', '+']), [([], [0, 1])])
-        self.assertEquals(DiffHunk._find_operations([' ', '+', '+']),
-                          [([], [1, 2])])
-        self.assertEquals(DiffHunk._find_operations(['+', '+', ' ']),
-                          [([], [0, 1])])
+        self.assertEquals(
+            DiffHunk._find_operations(['+', '+']), [([], [0, 1])])
+        self.assertEquals(
+            DiffHunk._find_operations([' ', '+', '+']), [([], [1, 2])])
+        self.assertEquals(
+            DiffHunk._find_operations(['+', '+', ' ']), [([], [0, 1])])
 
         self.assertEquals(DiffHunk._find_operations(['-', '+']), [([0], [1])])
-        self.assertEquals(DiffHunk._find_operations(['-', '-', '+', '+']),
-                          [([0, 1], [2, 3])])
-        self.assertEquals(DiffHunk._find_operations([' ', '-', '-', '+']),
-                          [([1, 2], [3])])
-        self.assertEquals(DiffHunk._find_operations(['-', '-', '+', '+', ' ']),
-                          [([0, 1], [2, 3])])
-        self.assertEquals(DiffHunk._find_operations(['-', '-', '+', '+', '-']),
-                          [([0, 1], [2, 3]), ([4], [])])
-        self.assertEquals(DiffHunk._find_operations(['-', '+', '-', '+']),
-                          [([0], [1]), ([2], [3])])
+        self.assertEquals(
+            DiffHunk._find_operations(['-', '-', '+', '+']),
+            [([0, 1], [2, 3])])
+        self.assertEquals(
+            DiffHunk._find_operations([' ', '-', '-', '+']), [([1, 2], [3])])
+        self.assertEquals(
+            DiffHunk._find_operations(['-', '-', '+', '+', ' ']),
+            [([0, 1], [2, 3])])
+        self.assertEquals(
+            DiffHunk._find_operations(['-', '-', '+', '+', '-']),
+            [([0, 1], [2, 3]), ([4], [])])
+        self.assertEquals(
+            DiffHunk._find_operations(['-', '+', '-', '+']), [([0], [1]),
+                                                              ([2], [3])])
 
     def _annotate(self, lines, index, start, end):
         annotations = [None for _ in lines]
@@ -165,16 +164,17 @@
         return annotations
 
     def test_annotate(self):
-        self.assertEquals(self._annotate(['-abcdef'], 0, 2, 4),
-                          [[(2, 4)]])
-        self.assertEquals(self._annotate(['-abcdef', '-ghi'], 0, 2, 6),
-                          [[(2, 6)], None])
-        self.assertEquals(self._annotate(['-abcdef', '-ghi'], 0, 2, 7),
-                          [[(2, 6)], [(0, 1)]])
-        self.assertEquals(self._annotate(['-abcdef', '-ghi', '-jkl'], 0, 2, 11),
-                          [[(2, 6)], [(0, 3)], [(0, 2)]])
-        self.assertEquals(self._annotate(['+', '+abc', ' de'], 0, 0, 2),
-                          [[(0, 0)], [(0, 2)], None])
+        self.assertEquals(self._annotate(['-abcdef'], 0, 2, 4), [[(2, 4)]])
+        self.assertEquals(
+            self._annotate(['-abcdef', '-ghi'], 0, 2, 6), [[(2, 6)], None])
+        self.assertEquals(
+            self._annotate(['-abcdef', '-ghi'], 0, 2, 7), [[(2, 6)], [(0, 1)]])
+        self.assertEquals(
+            self._annotate(['-abcdef', '-ghi', '-jkl'], 0, 2, 11),
+            [[(2, 6)], [(0, 3)], [(0, 2)]])
+        self.assertEquals(
+            self._annotate(['+', '+abc', ' de'], 0, 0, 2),
+            [[(0, 0)], [(0, 2)], None])
 
     def test_prettify_header_context_escape(self):
         hunk = DiffHunk(2, 2, '<h3>Constructing form data set</h3>', [])
@@ -183,17 +183,18 @@
 
 
 class TestBinaryHunk(unittest.TestCase):
-
     def test_literal_image(self):
         lines = ['literal 6', 'NcmZSh&&2%iKL7{~0|Ed5', '', 'literal 0...']
         binary, remaining_lines = BinaryHunk.parse(lines)
         self.assertIsNotNone(binary)
         self.assertEquals(remaining_lines[0], lines[3])
-        self.assertTrue('data:image/png;base64,' in binary.prettify('image/png', 'add'))
+        self.assertTrue(
+            'data:image/png;base64,' in binary.prettify('image/png', 'add'))
 
     def test_literal_non_image(self):
         lines = ['literal 6', 'NcmZSh&&2%iKL7{~0|Ed5', '']
         binary, remaining_lines = BinaryHunk.parse(lines)
         self.assertIsNotNone(binary)
         self.assertEquals(remaining_lines, [])
-        self.assertTrue('<img ' not in binary.prettify('application/octet-stream', 'del'))
+        self.assertTrue(
+            '<img ' not in binary.prettify('application/octet-stream', 'del'))
diff --git a/third_party/blink/tools/blinkpy/common/read_checksum_from_png_unittest.py b/third_party/blink/tools/blinkpy/common/read_checksum_from_png_unittest.py
index 1eb4f76..091426d 100644
--- a/third_party/blink/tools/blinkpy/common/read_checksum_from_png_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/read_checksum_from_png_unittest.py
@@ -28,17 +28,18 @@
 
 
 class ReadChecksumFromPngTest(unittest.TestCase):
-
     def test_read_checksum(self):
         # pylint: disable=line-too-long
         # Test a file with the comment.
         filehandle = StringIO.StringIO(
-            '''\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03 \x00\x00\x02X\x08\x02\x00\x00\x00\x15\x14\x15'\x00\x00\x00)tEXtchecksum\x003c4134fe2739880353f91c5b84cadbaaC\xb8?\xec\x00\x00\x16\xfeIDATx\x9c\xed\xdd[\x8cU\xe5\xc1\xff\xf15T\x18\x0ea,)\xa6\x80XZ<\x10\n\xd6H\xc4V\x88}\xb5\xa9\xd6r\xd5\x0bki0\xa6\xb5ih\xd2\xde\x98PHz\xd1\x02=\\q#\x01\x8b\xa5rJ\x8b\x88i\xacM\xc5h\x8cbMk(\x1ez@!\x0c\xd5\xd2\xc2\xb44\x1c\x848\x1dF(\xeb\x7f\xb1\xff\xd9\xef~g\xd6\xde3\xe0o\x10\xec\xe7sa6{\xd6z\xd6\xb3\xd7\xf3\xa8_7\xdbM[Y\x96\x05\x00\x009\xc3\xde\xeb\t\x00\x00\xbc\xdf\x08,\x00\x800\x81\x05\x00\x10&\xb0\x00\x00\xc2\x04\x16\x00@\x98\xc0\x02\x00\x08\x13X\x00\x00a\x02\x0b\x00 Lx01\x00\x84\t,\x00\x800\x81\x05\x00\x10\xd64\xb0\xda\x9a\xdb\xb6m\xdb\xb4i\xd3\xfa\x9fr\xf3\xcd7\x0f\xe5T\x07\xe5\xd4\xa9''')
+            '''\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03 \x00\x00\x02X\x08\x02\x00\x00\x00\x15\x14\x15'\x00\x00\x00)tEXtchecksum\x003c4134fe2739880353f91c5b84cadbaaC\xb8?\xec\x00\x00\x16\xfeIDATx\x9c\xed\xdd[\x8cU\xe5\xc1\xff\xf15T\x18\x0ea,)\xa6\x80XZ<\x10\n\xd6H\xc4V\x88}\xb5\xa9\xd6r\xd5\x0bki0\xa6\xb5ih\xd2\xde\x98PHz\xd1\x02=\\q#\x01\x8b\xa5rJ\x8b\x88i\xacM\xc5h\x8cbMk(\x1ez@!\x0c\xd5\xd2\xc2\xb44\x1c\x848\x1dF(\xeb\x7f\xb1\xff\xd9\xef~g\xd6\xde3\xe0o\x10\xec\xe7sa6{\xd6z\xd6\xb3\xd7\xf3\xa8_7\xdbM[Y\x96\x05\x00\x009\xc3\xde\xeb\t\x00\x00\xbc\xdf\x08,\x00\x800\x81\x05\x00\x10&\xb0\x00\x00\xc2\x04\x16\x00@\x98\xc0\x02\x00\x08\x13X\x00\x00a\x02\x0b\x00 Lx01\x00\x84\t,\x00\x800\x81\x05\x00\x10\xd64\xb0\xda\x9a\xdb\xb6m\xdb\xb4i\xd3\xfa\x9fr\xf3\xcd7\x0f\xe5T\x07\xe5\xd4\xa9'''
+        )
         checksum = read_checksum_from_png.read_checksum(filehandle)
         self.assertEqual('3c4134fe2739880353f91c5b84cadbaa', checksum)
 
         # Test a file without the comment.
         filehandle = StringIO.StringIO(
-            '''\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03 \x00\x00\x02X\x08\x02\x00\x00\x00\x15\x14\x15'\x00\x00\x16\xfeIDATx\x9c\xed\xdd[\x8cU\xe5\xc1\xff\xf15T\x18\x0ea,)\xa6\x80XZ<\x10\n\xd6H\xc4V\x88}\xb5\xa9\xd6r\xd5\x0bki0\xa6\xb5ih\xd2\xde\x98PHz\xd1\x02=\\q#\x01\x8b\xa5rJ\x8b\x88i\xacM\xc5h\x8cbMk(\x1ez@!\x0c\xd5\xd2\xc2\xb44\x1c\x848\x1dF(\xeb\x7f\xb1\xff\xd9\xef~g\xd6\xde3\xe0o\x10\xec\xe7sa6{\xd6z\xd6\xb3\xd7\xf3\xa8_7\xdbM[Y\x96\x05\x00\x009\xc3\xde\xeb\t\x00\x00\xbc\xdf\x08,\x00\x800\x81\x05\x00\x10&\xb0\x00\x00\xc2\x04\x16\x00@\x98\xc0\x02\x00\x08\x13X\x00\x00a\x02\x0b\x00 Lx01\x00\x84\t,\x00\x800\x81\x05\x00\x10\xd64\xb0\xda\x9a\xdb\xb6m\xdb\xb4i\xd3\xfa\x9fr\xf3\xcd7\x0f\xe5T\x07\xe5\xd4\xa9S\x8b\x17/\x1e?~\xfc\xf8\xf1\xe3\xef\xbf\xff\xfe\xf7z:M5\xbb\x87\x17\xcbUZ\x8f|V\xd7\xbd\x10\xb6\xcd{b\x88\xf6j\xb3\x9b?\x14\x9b\xa1>\xe6\xf9\xd9\xcf\x00\x17\x93''')
+            '''\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03 \x00\x00\x02X\x08\x02\x00\x00\x00\x15\x14\x15'\x00\x00\x16\xfeIDATx\x9c\xed\xdd[\x8cU\xe5\xc1\xff\xf15T\x18\x0ea,)\xa6\x80XZ<\x10\n\xd6H\xc4V\x88}\xb5\xa9\xd6r\xd5\x0bki0\xa6\xb5ih\xd2\xde\x98PHz\xd1\x02=\\q#\x01\x8b\xa5rJ\x8b\x88i\xacM\xc5h\x8cbMk(\x1ez@!\x0c\xd5\xd2\xc2\xb44\x1c\x848\x1dF(\xeb\x7f\xb1\xff\xd9\xef~g\xd6\xde3\xe0o\x10\xec\xe7sa6{\xd6z\xd6\xb3\xd7\xf3\xa8_7\xdbM[Y\x96\x05\x00\x009\xc3\xde\xeb\t\x00\x00\xbc\xdf\x08,\x00\x800\x81\x05\x00\x10&\xb0\x00\x00\xc2\x04\x16\x00@\x98\xc0\x02\x00\x08\x13X\x00\x00a\x02\x0b\x00 Lx01\x00\x84\t,\x00\x800\x81\x05\x00\x10\xd64\xb0\xda\x9a\xdb\xb6m\xdb\xb4i\xd3\xfa\x9fr\xf3\xcd7\x0f\xe5T\x07\xe5\xd4\xa9S\x8b\x17/\x1e?~\xfc\xf8\xf1\xe3\xef\xbf\xff\xfe\xf7z:M5\xbb\x87\x17\xcbUZ\x8f|V\xd7\xbd\x10\xb6\xcd{b\x88\xf6j\xb3\x9b?\x14\x9b\xa1>\xe6\xf9\xd9\xcf\x00\x17\x93'''
+        )
         checksum = read_checksum_from_png.read_checksum(filehandle)
         self.assertIsNone(checksum)
diff --git a/third_party/blink/tools/blinkpy/common/system/crash_logs.py b/third_party/blink/tools/blinkpy/common/system/crash_logs.py
index 4a56902..e4b33afa 100644
--- a/third_party/blink/tools/blinkpy/common/system/crash_logs.py
+++ b/third_party/blink/tools/blinkpy/common/system/crash_logs.py
@@ -30,47 +30,65 @@
 
 
 class CrashLogs(object):
-
     def __init__(self, host):
         self._host = host
 
-    def find_newest_log(self, process_name, pid=None, include_errors=False, newer_than=None):
+    def find_newest_log(self,
+                        process_name,
+                        pid=None,
+                        include_errors=False,
+                        newer_than=None):
         if self._host.platform.is_mac():
-            return self._find_newest_log_darwin(process_name, pid, include_errors, newer_than)
+            return self._find_newest_log_darwin(process_name, pid,
+                                                include_errors, newer_than)
         return None
 
     def _log_directory_darwin(self):
         log_directory = self._host.filesystem.expanduser('~')
-        log_directory = self._host.filesystem.join(log_directory, 'Library', 'Logs')
-        if self._host.filesystem.exists(self._host.filesystem.join(log_directory, 'DiagnosticReports')):
-            log_directory = self._host.filesystem.join(log_directory, 'DiagnosticReports')
+        log_directory = self._host.filesystem.join(log_directory, 'Library',
+                                                   'Logs')
+        if self._host.filesystem.exists(
+                self._host.filesystem.join(log_directory,
+                                           'DiagnosticReports')):
+            log_directory = self._host.filesystem.join(log_directory,
+                                                       'DiagnosticReports')
         else:
-            log_directory = self._host.filesystem.join(log_directory, 'CrashReporter')
+            log_directory = self._host.filesystem.join(log_directory,
+                                                       'CrashReporter')
         return log_directory
 
-    def _find_newest_log_darwin(self, process_name, pid, include_errors, newer_than):
+    def _find_newest_log_darwin(self, process_name, pid, include_errors,
+                                newer_than):
         def is_crash_log(basename):
-            return basename.startswith(process_name + '_') and basename.endswith('.crash')
+            return basename.startswith(process_name +
+                                       '_') and basename.endswith('.crash')
 
         log_directory = self._log_directory_darwin()
         logs = self._host.filesystem.files_under(
             log_directory,
             file_filter=lambda fs, dirname, basename: is_crash_log(basename))
-        first_line_regex = re.compile(r'^Process:\s+(?P<process_name>.*) \[(?P<pid>\d+)\]$')
+        first_line_regex = re.compile(
+            r'^Process:\s+(?P<process_name>.*) \[(?P<pid>\d+)\]$')
         errors = ''
         for path in reversed(sorted(logs)):
             try:
-                if not newer_than or self._host.filesystem.mtime(path) > newer_than:
+                if (not newer_than
+                        or self._host.filesystem.mtime(path) > newer_than):
                     contents = self._host.filesystem.read_text_file(path)
-                    match = first_line_regex.match(contents[0:contents.find('\n')])
-                    if match and match.group('process_name') == process_name and (pid is None or int(match.group('pid')) == pid):
+                    match = first_line_regex.match(
+                        contents[0:contents.find('\n')])
+                    if (match and match.group('process_name') == process_name
+                            and
+                        (pid is None or int(match.group('pid')) == pid)):
                         return errors + contents
             except IOError as error:
                 if include_errors:
-                    errors += "ERROR: Failed to read '%s': %s\n" % (path, error)
+                    errors += "ERROR: Failed to read '%s': %s\n" % (path,
+                                                                    error)
             except OSError as error:
                 if include_errors:
-                    errors += "ERROR: Failed to read '%s': %s\n" % (path, error)
+                    errors += "ERROR: Failed to read '%s': %s\n" % (path,
+                                                                    error)
 
         if include_errors and errors:
             return errors
diff --git a/third_party/blink/tools/blinkpy/common/system/crash_logs_unittest.py b/third_party/blink/tools/blinkpy/common/system/crash_logs_unittest.py
index 535dfae..c84fbea 100644
--- a/third_party/blink/tools/blinkpy/common/system/crash_logs_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/crash_logs_unittest.py
@@ -65,30 +65,38 @@
 Network Service: Ethernet 2, Ethernet, en1
 PCI Card: NVIDIA GeForce GT 120, sppci_displaycontroller, MXM-Slot
 Serial ATA Device: OPTIARC DVD RW AD-5670S
-""".format(process_name=process_name, pid=pid)
+""".format(
+        process_name=process_name, pid=pid)
 
 
 class CrashLogsTest(unittest.TestCase):
-
     def test_find_log_darwin(self):
         if not SystemHost().platform.is_mac():
             return
 
-        older_mock_crash_report = make_mock_crash_report_darwin('DumpRenderTree', 28528)
-        mock_crash_report = make_mock_crash_report_darwin('DumpRenderTree', 28530)
-        newer_mock_crash_report = make_mock_crash_report_darwin('DumpRenderTree', 28529)
-        other_process_mock_crash_report = make_mock_crash_report_darwin('FooProcess', 28527)
+        older_mock_crash_report = make_mock_crash_report_darwin(
+            'DumpRenderTree', 28528)
+        mock_crash_report = make_mock_crash_report_darwin(
+            'DumpRenderTree', 28530)
+        newer_mock_crash_report = make_mock_crash_report_darwin(
+            'DumpRenderTree', 28529)
+        other_process_mock_crash_report = make_mock_crash_report_darwin(
+            'FooProcess', 28527)
         misformatted_mock_crash_report = 'Junk that should not appear in a crash report' + \
             make_mock_crash_report_darwin('DumpRenderTree', 28526)[200:]
         files = {
-            '/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150718_quadzen.crash': older_mock_crash_report,
-            '/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150719_quadzen.crash': mock_crash_report,
-            '/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150720_quadzen.crash': newer_mock_crash_report,
-            '/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150721_quadzen.crash': None,
+            '/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150718_quadzen.crash':
+            older_mock_crash_report,
+            '/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150719_quadzen.crash':
+            mock_crash_report,
+            '/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150720_quadzen.crash':
+            newer_mock_crash_report,
+            '/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150721_quadzen.crash':
+            None,
             '/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150722_quadzen.crash':
-                other_process_mock_crash_report,
+            other_process_mock_crash_report,
             '/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150723_quadzen.crash':
-                misformatted_mock_crash_report,
+            misformatted_mock_crash_report,
         }
         filesystem = MockFileSystem(files)
         crash_logs = CrashLogs(MockSystemHost(filesystem=filesystem))
@@ -110,11 +118,13 @@
             raise OSError('OSError: No such file or directory')
 
         filesystem.read_text_file = bad_read
-        log = crash_logs.find_newest_log('DumpRenderTree', 28531, include_errors=True)
+        log = crash_logs.find_newest_log(
+            'DumpRenderTree', 28531, include_errors=True)
         self.assertIn('IOError: No such file or directory', log)
 
         filesystem = MockFileSystem(files)
         crash_logs = CrashLogs(MockSystemHost(filesystem=filesystem))
         filesystem.mtime = bad_mtime
-        log = crash_logs.find_newest_log('DumpRenderTree', newer_than=1.0, include_errors=True)
+        log = crash_logs.find_newest_log(
+            'DumpRenderTree', newer_than=1.0, include_errors=True)
         self.assertIn('OSError: No such file or directory', log)
diff --git a/third_party/blink/tools/blinkpy/common/system/executive.py b/third_party/blink/tools/blinkpy/common/system/executive.py
index 88b5458..c713264 100644
--- a/third_party/blink/tools/blinkpy/common/system/executive.py
+++ b/third_party/blink/tools/blinkpy/common/system/executive.py
@@ -39,12 +39,10 @@
 import threading
 import time
 
-
 _log = logging.getLogger(__name__)
 
 
 class ScriptError(Exception):
-
     def __init__(self,
                  message=None,
                  script_args=None,
@@ -54,7 +52,8 @@
                  output_limit=500):
         shortened_output = output
         if output and output_limit and len(output) > output_limit:
-            shortened_output = 'Last %s characters of output:\n%s' % (output_limit, output[-output_limit:])
+            shortened_output = 'Last %s characters of output:\n%s' % (
+                output_limit, output[-output_limit:])
 
         if not message:
             message = 'Failed to run "%s"' % repr(script_args)
@@ -148,10 +147,9 @@
             raise
 
     def _win32_check_running_pid(self, pid):
-
         class PROCESSENTRY32(ctypes.Structure):
-            _fields_ = [('dwSize', ctypes.c_ulong),
-                        ('cntUsage', ctypes.c_ulong),
+            _fields_ = [('dwSize', ctypes.c_ulong), ('cntUsage',
+                                                     ctypes.c_ulong),
                         ('th32ProcessID', ctypes.c_ulong),
                         ('th32DefaultHeapID', ctypes.POINTER(ctypes.c_ulong)),
                         ('th32ModuleID', ctypes.c_ulong),
@@ -201,14 +199,16 @@
         processes = []
         if sys.platform == 'win32':
             tasklist_process = self.popen(['tasklist', '/fo', 'csv'],
-                                          stdout=self.PIPE, stderr=self.PIPE)
+                                          stdout=self.PIPE,
+                                          stderr=self.PIPE)
             stdout, _ = tasklist_process.communicate()
             stdout_reader = csv.reader(stdout.splitlines())
             for line in stdout_reader:
                 processes.append([column for column in line])
         else:
             ps_process = self.popen(['ps', '-eo', 'pid,comm'],
-                                    stdout=self.PIPE, stderr=self.PIPE)
+                                    stdout=self.PIPE,
+                                    stderr=self.PIPE)
             stdout, _ = ps_process.communicate()
             for line in stdout.splitlines():
                 # In some cases the line can contain one or more
@@ -233,7 +233,10 @@
 
         return sorted(running_pids)
 
-    def wait_limited(self, pid, limit_in_seconds=None, check_frequency_in_seconds=None):
+    def wait_limited(self,
+                     pid,
+                     limit_in_seconds=None,
+                     check_frequency_in_seconds=None):
         seconds_left = limit_in_seconds or 10
         sleep_length = check_frequency_in_seconds or 1
         while seconds_left > 0 and self.check_running_pid(pid):
@@ -275,7 +278,8 @@
         if not user_input:
             return (None, None)
         if hasattr(user_input, 'read'):  # Check if the user_input is a file.
-            return (user_input, None)  # Assume the file is in the right encoding.
+            # Assume the file is in the right encoding.
+            return (user_input, None)
 
         # Popen in Python 2.5 and before does not automatically encode unicode objects.
         # http://bugs.python.org/issue5290
@@ -300,18 +304,19 @@
             escaped_args.append(arg)
         return ' '.join(escaped_args)
 
-    def run_command(self,
-                    args,
-                    cwd=None,
-                    env=None,
-                    input=None,  # pylint: disable=redefined-builtin
-                    timeout_seconds=None,
-                    error_handler=None,
-                    return_exit_code=False,
-                    return_stderr=True,
-                    ignore_stderr=False,
-                    decode_output=True,
-                    debug_logging=True):
+    def run_command(
+            self,
+            args,
+            cwd=None,
+            env=None,
+            input=None,  # pylint: disable=redefined-builtin
+            timeout_seconds=None,
+            error_handler=None,
+            return_exit_code=False,
+            return_stderr=True,
+            ignore_stderr=False,
+            decode_output=True,
+            debug_logging=True):
         """Popen wrapper for convenience and to work around python bugs."""
         assert isinstance(args, list) or isinstance(args, tuple)
         start_time = time.time()
@@ -321,13 +326,14 @@
         stderr = self.STDOUT if return_stderr else (
             self.DEVNULL if ignore_stderr else None)
 
-        process = self.popen(args,
-                             stdin=stdin,
-                             stdout=self.PIPE,
-                             stderr=stderr,
-                             cwd=cwd,
-                             env=env,
-                             close_fds=self._should_close_fds())
+        process = self.popen(
+            args,
+            stdin=stdin,
+            stdout=self.PIPE,
+            stderr=stderr,
+            cwd=cwd,
+            env=env,
+            close_fds=self._should_close_fds())
 
         if timeout_seconds:
             timer = threading.Timer(timeout_seconds, process.kill)
@@ -337,7 +343,8 @@
 
         # run_command automatically decodes to unicode() unless explicitly told not to.
         if decode_output:
-            output = output.decode(self._child_process_encoding(), errors='replace')
+            output = output.decode(
+                self._child_process_encoding(), errors='replace')
 
         # wait() is not threadsafe and can throw OSError due to:
         # http://bugs.python.org/issue1731717
@@ -347,17 +354,19 @@
             timer.cancel()
 
         if debug_logging:
-            _log.debug('"%s" took %.2fs', self.command_for_printing(args), time.time() - start_time)
+            _log.debug('"%s" took %.2fs', self.command_for_printing(args),
+                       time.time() - start_time)
 
         if return_exit_code:
             return exit_code
 
         if exit_code:
-            script_error = ScriptError(script_args=args,
-                                       exit_code=exit_code,
-                                       output=output,
-                                       cwd=cwd,
-                                       output_limit=self.error_output_limit)
+            script_error = ScriptError(
+                script_args=args,
+                exit_code=exit_code,
+                output=output,
+                cwd=cwd,
+                output_limit=self.error_output_limit)
             (error_handler or self.default_error_handler)(script_error)
         return output
 
@@ -419,7 +428,8 @@
     def map(self, thunk, arglist, processes=None):
         if sys.platform == 'win32' or len(arglist) == 1:
             return map(thunk, arglist)
-        pool = multiprocessing.Pool(processes=(processes or multiprocessing.cpu_count()))
+        pool = multiprocessing.Pool(
+            processes=(processes or multiprocessing.cpu_count()))
         try:
             return pool.map(thunk, arglist)
         finally:
@@ -430,6 +440,7 @@
 def _run_command_thunk(cmd_line_and_cwd):
     # Note that this needs to be a bare module (and hence Picklable) method to work with multiprocessing.Pool.
     (cmd_line, cwd) = cmd_line_and_cwd
-    proc = subprocess.Popen(cmd_line, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    proc = subprocess.Popen(
+        cmd_line, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     stdout, stderr = proc.communicate()
     return (proc.returncode, stdout, stderr)
diff --git a/third_party/blink/tools/blinkpy/common/system/executive_mock.py b/third_party/blink/tools/blinkpy/common/system/executive_mock.py
index bfe2d31..e9820aa0 100644
--- a/third_party/blink/tools/blinkpy/common/system/executive_mock.py
+++ b/third_party/blink/tools/blinkpy/common/system/executive_mock.py
@@ -37,7 +37,6 @@
 
 
 class MockProcess(object):
-
     def __init__(self, stdout='MOCK STDOUT\n', stderr='', returncode=0):
         self.pid = 42
         self.stdout = StringIO.StringIO(stdout)
@@ -50,7 +49,8 @@
 
     def poll(self):
         # Consider the process completed when all the stdout and stderr has been read.
-        if self.stdout.len != self.stdout.tell() or self.stderr.len != self.stderr.tell():
+        if (self.stdout.len != self.stdout.tell()
+                or self.stderr.len != self.stderr.tell()):
             return None
         return self.returncode
 
@@ -64,8 +64,7 @@
         return
 
 
-MockCall = collections.namedtuple(
-    'MockCall', ('args', 'kwargs'))
+MockCall = collections.namedtuple('MockCall', ('args', 'kwargs'))
 
 
 class MockExecutive(object):
@@ -77,9 +76,14 @@
     def ignore_error(error):
         pass
 
-    def __init__(self, should_log=False, should_throw=False,
-                 output='MOCK output of child process', stderr='',
-                 exit_code=0, exception=None, run_command_fn=None,
+    def __init__(self,
+                 should_log=False,
+                 should_throw=False,
+                 output='MOCK output of child process',
+                 stderr='',
+                 exit_code=0,
+                 exception=None,
+                 run_command_fn=None,
                  proc=None):
         self._should_log = should_log
         self._should_throw = should_throw
@@ -114,18 +118,19 @@
 
     # The argument list should match Executive.run_command, even if
     # some arguments are not used. pylint: disable=unused-argument
-    def run_command(self,
-                    args,
-                    cwd=None,
-                    env=None,
-                    input=None,  # pylint: disable=redefined-builtin
-                    timeout_seconds=None,
-                    error_handler=None,
-                    return_exit_code=False,
-                    return_stderr=True,
-                    ignore_stderr=False,
-                    decode_output=True,
-                    debug_logging=True):
+    def run_command(
+            self,
+            args,
+            cwd=None,
+            env=None,
+            input=None,  # pylint: disable=redefined-builtin
+            timeout_seconds=None,
+            error_handler=None,
+            return_exit_code=False,
+            return_stderr=True,
+            ignore_stderr=False,
+            decode_output=True,
+            debug_logging=True):
         self._append_call(args, cwd=cwd, input=input, env=env)
 
         assert isinstance(args, list) or isinstance(args, tuple)
@@ -137,7 +142,8 @@
             input_string = ''
             if input:
                 input_string = ', input=%s' % input
-            _log.info('MOCK run_command: %s, cwd=%s%s%s', args, cwd, env_string, input_string)
+            _log.info('MOCK run_command: %s, cwd=%s%s%s', args, cwd,
+                      env_string, input_string)
 
         if self._exception:
             raise self._exception  # pylint: disable=raising-bad-type
@@ -151,7 +157,10 @@
             return self._exit_code
 
         if self._exit_code and error_handler:
-            script_error = ScriptError(script_args=args, exit_code=self._exit_code, output=self._output)
+            script_error = ScriptError(
+                script_args=args,
+                exit_code=self._exit_code,
+                output=self._output)
             error_handler(script_error)
 
         output = self._output
@@ -183,7 +192,10 @@
                 env_string = ', env=%s' % env
             _log.info('MOCK popen: %s%s%s', args, cwd_string, env_string)
         if not self._proc:
-            self._proc = MockProcess(stdout=self._output, stderr=self._stderr, returncode=self._exit_code)
+            self._proc = MockProcess(
+                stdout=self._output,
+                stderr=self._stderr,
+                returncode=self._exit_code)
         return self._proc
 
     def call(self, args, **_):
@@ -198,7 +210,8 @@
         command_outputs = []
         for cmd_line, cwd in commands:
             assert all(isinstance(arg, basestring) for arg in cmd_line)
-            command_outputs.append([0, self.run_command(cmd_line, cwd=cwd), ''])
+            command_outputs.append(
+                [0, self.run_command(cmd_line, cwd=cwd), ''])
 
         new_calls = self.full_calls[num_previous_calls:]
         self.full_calls = self.full_calls[:num_previous_calls]
@@ -219,7 +232,9 @@
             elif isinstance(v, MockCall):
                 return v.args
             else:
-                return TypeError('Unknown full_calls type: %s' % (type(v).__name__,))
+                return TypeError(
+                    'Unknown full_calls type: %s' % (type(v).__name__, ))
+
         return get_args(self.full_calls)
 
 
@@ -231,4 +246,5 @@
             raise AssertionError('{} not found in sub-command list {}'.format(
                 sub_command, vals))
         return vals.get(sub_command, '')
+
     return MockExecutive(run_command_fn=run_fn)
diff --git a/third_party/blink/tools/blinkpy/common/system/executive_unittest.py b/third_party/blink/tools/blinkpy/common/system/executive_unittest.py
index 3ad97776..ef631b75 100644
--- a/third_party/blink/tools/blinkpy/common/system/executive_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/executive_unittest.py
@@ -34,7 +34,9 @@
 
 # Since we execute this script directly as part of the unit tests, we need to
 # ensure that blink/tools is in sys.path for the next imports to work correctly.
-script_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
+script_dir = os.path.dirname(
+    os.path.dirname(
+        os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
 if script_dir not in sys.path:
     sys.path.insert(0, script_dir)
 
@@ -42,23 +44,31 @@
 
 
 class ScriptErrorTest(unittest.TestCase):
-
     def test_message_with_output(self):
         error = ScriptError('My custom message!', '', -1)
         self.assertEqual(error.message_with_output(), 'My custom message!')
         error = ScriptError('My custom message!', '', -1, 'My output.')
-        self.assertEqual(error.message_with_output(), 'My custom message!\n\noutput: My output.')
-        error = ScriptError('', 'my_command!', -1, 'My output.', '/Users/username/blah')
         self.assertEqual(error.message_with_output(),
-                         'Failed to run "\'my_command!\'" exit_code: -1 cwd: /Users/username/blah\n\noutput: My output.')
+                         'My custom message!\n\noutput: My output.')
+        error = ScriptError('', 'my_command!', -1, 'My output.',
+                            '/Users/username/blah')
+        self.assertEqual(
+            error.message_with_output(),
+            'Failed to run "\'my_command!\'" exit_code: -1 cwd: /Users/username/blah\n\noutput: My output.'
+        )
         error = ScriptError('', 'my_command!', -1, 'ab' + '1' * 499)
-        self.assertEqual(error.message_with_output(),
-                         'Failed to run "\'my_command!\'" exit_code: -1\n\noutput: Last 500 characters of output:\nb' + '1' * 499)
+        self.assertEqual(
+            error.message_with_output(),
+            'Failed to run "\'my_command!\'" exit_code: -1\n\noutput: Last 500 characters of output:\nb'
+            + '1' * 499)
 
     def test_message_with_tuple(self):
-        error = ScriptError('', ('my', 'command'), -1, 'My output.', '/Users/username/blah')
-        self.assertEqual(error.message_with_output(),
-                         'Failed to run "(\'my\', \'command\')" exit_code: -1 cwd: /Users/username/blah\n\noutput: My output.')
+        error = ScriptError('', ('my', 'command'), -1, 'My output.',
+                            '/Users/username/blah')
+        self.assertEqual(
+            error.message_with_output(),
+            'Failed to run "(\'my\', \'command\')" exit_code: -1 cwd: /Users/username/blah\n\noutput: My output.'
+        )
 
 
 def never_ending_command():
@@ -76,10 +86,12 @@
 
 
 class ExecutiveTest(unittest.TestCase):
-
     def test_run_command_with_bad_command(self):
         def run_bad_command():
-            Executive().run_command(['foo_bar_command_blah'], error_handler=Executive.ignore_error, return_exit_code=True)
+            Executive().run_command(['foo_bar_command_blah'],
+                                    error_handler=Executive.ignore_error,
+                                    return_exit_code=True)
+
         with self.assertRaises(OSError):
             run_bad_command()
 
@@ -101,7 +113,8 @@
     def test_popen_args(self):
         executive = Executive()
         # Explicitly naming the 'args' argument should not throw an exception.
-        executive.popen(args=command_line('echo', 1), stdout=executive.PIPE).wait()
+        executive.popen(
+            args=command_line('echo', 1), stdout=executive.PIPE).wait()
 
     def test_run_command_with_unicode(self):
         """Validate that it is safe to pass unicode() objects
@@ -123,25 +136,32 @@
 
         executive = Executive()
 
-        output = executive.run_command(command_line('cat'), input=unicode_tor_input)
+        output = executive.run_command(
+            command_line('cat'), input=unicode_tor_input)
         self.assertEqual(output, unicode_tor_output)
 
         output = executive.run_command(command_line('echo', unicode_tor_input))
         self.assertEqual(output, unicode_tor_output)
 
-        output = executive.run_command(command_line('echo', unicode_tor_input), decode_output=False)
+        output = executive.run_command(
+            command_line('echo', unicode_tor_input), decode_output=False)
         self.assertEqual(output, encoded_tor)
 
         # Make sure that str() input also works.
-        output = executive.run_command(command_line('cat'), input=encoded_tor, decode_output=False)
+        output = executive.run_command(
+            command_line('cat'), input=encoded_tor, decode_output=False)
         self.assertEqual(output, encoded_tor)
 
     def test_kill_process(self):
         executive = Executive()
         if sys.platform == 'win32':
-            process = subprocess.Popen(never_ending_command(), stdout=subprocess.PIPE)
+            process = subprocess.Popen(
+                never_ending_command(), stdout=subprocess.PIPE)
         else:
-            process = subprocess.Popen(never_ending_command(), stdout=subprocess.PIPE, preexec_fn=lambda: os.setpgid(0, 0))
+            process = subprocess.Popen(
+                never_ending_command(),
+                stdout=subprocess.PIPE,
+                preexec_fn=lambda: os.setpgid(0, 0))
 
         self.assertEqual(process.poll(), None)  # Process is running
         executive.kill_process(process.pid)
@@ -153,13 +173,18 @@
         executive = Executive()
 
         def timeout():
-            executive.run_command(command_line('sleep', 'infinity'), timeout_seconds=0.01)
+            executive.run_command(
+                command_line('sleep', 'infinity'), timeout_seconds=0.01)
+
         with self.assertRaises(ScriptError):
             timeout()
 
     def test_timeout_exceeded_exit_code(self):
         executive = Executive()
-        exit_code = executive.run_command(command_line('sleep', 'infinity'), timeout_seconds=0.01, return_exit_code=True)
+        exit_code = executive.run_command(
+            command_line('sleep', 'infinity'),
+            timeout_seconds=0.01,
+            return_exit_code=True)
         self.assertNotEqual(exit_code, 0)
 
     def test_timeout_satisfied(self):
@@ -193,5 +218,8 @@
         stdout.write(' '.join(args))
     return 0
 
-if __name__ == '__main__' and len(sys.argv) > 1 and sys.argv[1] in ('--cat', '--echo'):
-    sys.exit(main(sys.platform, sys.stdin, sys.stdout, sys.argv[1], sys.argv[2:]))
+
+if __name__ == '__main__' and len(sys.argv) > 1 and sys.argv[1] in ('--cat',
+                                                                    '--echo'):
+    sys.exit(
+        main(sys.platform, sys.stdin, sys.stdout, sys.argv[1], sys.argv[2:]))
diff --git a/third_party/blink/tools/blinkpy/common/system/filesystem.py b/third_party/blink/tools/blinkpy/common/system/filesystem.py
index 9ceba39..d4642cc8 100644
--- a/third_party/blink/tools/blinkpy/common/system/filesystem.py
+++ b/third_party/blink/tools/blinkpy/common/system/filesystem.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Wrapper object for functions that access the filesystem.
 
 A FileSystem object can be used to represent dependency on the
@@ -76,7 +75,7 @@
         """
         if sys.platform == 'win32' and len(path) >= self.WINDOWS_MAX_PATH:
             assert not path.startswith(r'\\'), "must not already be UNC"
-            return ur'\\?\%s' % (self.abspath(path),)
+            return ur'\\?\%s' % (self.abspath(path), )
         return path
 
     def abspath(self, path):
@@ -104,7 +103,8 @@
 
     def copyfile(self, source, destination):
         # shutil.copyfile() uses open() underneath, which supports UNC paths.
-        shutil.copyfile(self._path_for_access(source), self._path_for_access(destination))
+        shutil.copyfile(
+            self._path_for_access(source), self._path_for_access(destination))
 
     def dirname(self, path):
         return os.path.dirname(path)
@@ -175,7 +175,8 @@
         return os.listdir(path)
 
     def walk(self, top, topdown=True, onerror=None, followlinks=False):
-        return os.walk(top, topdown=topdown, onerror=onerror, followlinks=followlinks)
+        return os.walk(
+            top, topdown=topdown, onerror=onerror, followlinks=followlinks)
 
     def mkdtemp(self, **kwargs):
         """Creates and returns a uniquely-named directory.
@@ -190,8 +191,8 @@
         of the string methods. If you need a string, coerce the object to a
         string and go from there.
         """
-        class TemporaryDirectory(object):
 
+        class TemporaryDirectory(object):
             def __init__(self, **kwargs):
                 self._kwargs = kwargs
                 self._directory_path = tempfile.mkdtemp(**self._kwargs)
@@ -336,7 +337,8 @@
             # Ensure the root of the tree being rmtree'd is not a long path.
             # We can't convert it to a long path (using _path_for_access),
             # because long paths are not supported in 'rmdir' on Windows 7.
-            assert len(path_abs) < self.WINDOWS_MAX_PATH, 'root path is too long'
+            assert len(path_abs) < self.WINDOWS_MAX_PATH, \
+                'root path is too long'
 
             # Ensure (hopefully) that the quoting done on the next line is safe.
             assert '"' not in path_abs, 'path contains a quotation mark (")'
@@ -382,7 +384,9 @@
         return os.path.splitext(path)
 
     def make_executable(self, file_path):
-        os.chmod(file_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IXGRP)
+        os.chmod(
+            file_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
+            | stat.S_IRGRP | stat.S_IXGRP)
 
     def symlink(self, source, link_name):
         """Create a symbolic link. Unix only."""
@@ -459,11 +463,14 @@
         return True
 
     _log.warning('Unable to remove %s', dirname)
-    for dirpath, dirnames, filenames in fs.walk(dirname, onerror=onerror, topdown=False):
+    for dirpath, dirnames, filenames in fs.walk(
+            dirname, onerror=onerror, topdown=False):
         for fname in filenames:
-            _log.warning('File %s still in output dir.', fs.join(dirpath, fname))
+            _log.warning('File %s still in output dir.', fs.join(
+                dirpath, fname))
         for dname in dirnames:
-            _log.warning('Dir %s still in output dir.', fs.join(dirpath, dname))
+            _log.warning('Dir %s still in output dir.', fs.join(
+                dirpath, dname))
 
     return False
 
diff --git a/third_party/blink/tools/blinkpy/common/system/filesystem_mock.py b/third_party/blink/tools/blinkpy/common/system/filesystem_mock.py
index b96f310..9e9dc7bc 100644
--- a/third_party/blink/tools/blinkpy/common/system/filesystem_mock.py
+++ b/third_party/blink/tools/blinkpy/common/system/filesystem_mock.py
@@ -102,7 +102,8 @@
         return home_directory + self.sep + parts[1]
 
     def path_to_module(self, module_name):
-        return '/mock-checkout/third_party/blink/tools/' + module_name.replace('.', '/') + '.py'
+        return ('/mock-checkout/third_party/blink/tools/' +
+                module_name.replace('.', '/') + '.py')
 
     def chdir(self, path):
         path = self.normpath(path)
@@ -137,7 +138,8 @@
         file_filter = file_filter or filter_all
         files = []
         if self.isfile(path):
-            if file_filter(self, self.dirname(path), self.basename(path)) and self.files[path] is not None:
+            if (file_filter(self, self.dirname(path), self.basename(path))
+                    and self.files[path] is not None):
                 files.append(path)
             return files
 
@@ -153,11 +155,13 @@
                 continue
 
             suffix = filename[len(path) - 1:]
-            if any(dir_substring in suffix for dir_substring in dir_substrings):
+            if any(dir_substring in suffix
+                   for dir_substring in dir_substrings):
                 continue
 
             dirpath, basename = self._split(filename)
-            if file_filter(self, dirpath, basename) and self.files[filename] is not None:
+            if (file_filter(self, dirpath, basename)
+                    and self.files[filename] is not None):
                 files.append(filename)
 
         return files
@@ -173,8 +177,12 @@
         path_filter = lambda path: re.match(glob_string, path)
 
         # We could use fnmatch.fnmatch, but that might not do the right thing on Windows.
-        existing_files = [path for path, contents in self.files.items() if contents is not None]
-        return filter(path_filter, existing_files) + filter(path_filter, self.dirs)
+        existing_files = [
+            path for path, contents in self.files.items()
+            if contents is not None
+        ]
+        return filter(path_filter, existing_files) + filter(
+            path_filter, self.dirs)
 
     def isabs(self, path):
         return path.startswith(self.sep)
@@ -252,7 +260,6 @@
 
     def mkdtemp(self, **kwargs):
         class TemporaryDirectory(object):
-
             def __init__(self, fs, **kwargs):
                 self._kwargs = kwargs
                 self._filesystem = fs
@@ -406,11 +413,13 @@
         for file_path in self.files:
             # We need to add a trailing separator to path_to_remove to avoid matching
             # cases like path_to_remove='/foo/b' and file_path='/foo/bar/baz'.
-            if file_path == path_to_remove or file_path.startswith(path_to_remove + self.sep):
+            if file_path == path_to_remove or file_path.startswith(
+                    path_to_remove + self.sep):
                 self.files[file_path] = None
 
         def should_remove(directory):
-            return directory == path_to_remove or directory.startswith(path_to_remove + self.sep)
+            return directory == path_to_remove or directory.startswith(
+                path_to_remove + self.sep)
 
         self.dirs = {d for d in self.dirs if not should_remove(d)}
 
@@ -423,7 +432,8 @@
 
         for source_file in list(self.files):
             if source_file.startswith(source):
-                destination_path = self.join(destination, self.relpath(source_file, source))
+                destination_path = self.join(destination,
+                                             self.relpath(source_file, source))
                 self.maybe_make_directory(self.dirname(destination_path))
                 self.files[destination_path] = self.files[source_file]
 
@@ -447,7 +457,6 @@
 
 
 class WritableBinaryFileObject(object):
-
     def __init__(self, fs, path):
         self.fs = fs
         self.path = path
@@ -469,7 +478,6 @@
 
 
 class WritableTextFileObject(WritableBinaryFileObject):
-
     def write(self, string):
         WritableBinaryFileObject.write(self, string.encode('utf-8'))
 
@@ -479,7 +487,6 @@
 
 
 class ReadableBinaryFileObject(object):
-
     def __init__(self, fs, path, data):
         self.fs = fs
         self.path = path
@@ -515,9 +522,9 @@
 
 
 class ReadableTextFileObject(ReadableBinaryFileObject):
-
     def __init__(self, fs, path, data):
-        super(ReadableTextFileObject, self).__init__(fs, path, StringIO.StringIO(data.decode('utf-8')))
+        super(ReadableTextFileObject, self).__init__(
+            fs, path, StringIO.StringIO(data.decode('utf-8')))
 
     def close(self):
         self.data.close()
@@ -569,7 +576,9 @@
 
             for filepath in sorted(self.expected_files):
                 self.test_case.assertIn(filepath, self.mock_filesystem.files)
-                self.test_case.assertEqual(self.expected_files[filepath], self.mock_filesystem.files[filepath])
+                self.test_case.assertEqual(
+                    self.expected_files[filepath],
+                    self.mock_filesystem.files[filepath])
 
     def assertFilesAdded(self, mock_filesystem, files):
         """Assert that the given files where added to the mock_filesystem.
diff --git a/third_party/blink/tools/blinkpy/common/system/filesystem_mock_unittest.py b/third_party/blink/tools/blinkpy/common/system/filesystem_mock_unittest.py
index 0b70c61..20fb363 100644
--- a/third_party/blink/tools/blinkpy/common/system/filesystem_mock_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/filesystem_mock_unittest.py
@@ -34,8 +34,8 @@
 from blinkpy.common.system.filesystem_mock import MockFileSystem
 
 
-class MockFileSystemTest(unittest.TestCase, filesystem_unittest.GenericFileSystemTests):
-
+class MockFileSystemTest(unittest.TestCase,
+                         filesystem_unittest.GenericFileSystemTests):
     def setUp(self):
         self.fs = filesystem_mock.MockFileSystem()
         self.setup_generic_test_dir()
@@ -44,7 +44,8 @@
         self.teardown_generic_test_dir()
         self.fs = None
 
-    def check_with_reference_function(self, test_function, good_function, tests):
+    def check_with_reference_function(self, test_function, good_function,
+                                      tests):
         for test in tests:
             if hasattr(test, '__iter__'):
                 expected = good_function(*test)
@@ -52,28 +53,27 @@
             else:
                 expected = good_function(test)
                 actual = test_function(test)
-            self.assertEqual(expected, actual, 'given %s, expected %s, got %s' % (repr(test), repr(expected), repr(actual)))
+            self.assertEqual(
+                expected, actual,
+                'given %s, expected %s, got %s' % (repr(test), repr(expected),
+                                                   repr(actual)))
 
     def test_join(self):
-        self.check_with_reference_function(
-            self.fs.join,
-            self.fs._slow_but_correct_join,
-            [
-                ('',),
-                ('', 'bar'),
-                ('foo',),
-                ('foo/',),
-                ('foo', ''),
-                ('foo/', ''),
-                ('foo', 'bar'),
-                ('foo', '/bar'),
-            ])
+        self.check_with_reference_function(self.fs.join,
+                                           self.fs._slow_but_correct_join, [
+                                               ('', ),
+                                               ('', 'bar'),
+                                               ('foo', ),
+                                               ('foo/', ),
+                                               ('foo', ''),
+                                               ('foo/', ''),
+                                               ('foo', 'bar'),
+                                               ('foo', '/bar'),
+                                           ])
 
     def test_normpath(self):
         self.check_with_reference_function(
-            self.fs.normpath,
-            self.fs._slow_but_correct_normpath,
-            [
+            self.fs.normpath, self.fs._slow_but_correct_normpath, [
                 '',
                 '/',
                 '.',
@@ -108,29 +108,31 @@
 
     def test_filesystem_walk(self):
         mock_dir = 'foo'
-        mock_files = {'foo/bar/baz': '',
-                      'foo/a': '',
-                      'foo/b': '',
-                      'foo/c': ''}
+        mock_files = {'foo/bar/baz': '', 'foo/a': '', 'foo/b': '', 'foo/c': ''}
         host = MockHost()
         host.filesystem = MockFileSystem(files=mock_files)
-        self.assertEquals(host.filesystem.walk(mock_dir), [('foo', ['bar'], ['a', 'b', 'c']), ('foo/bar', [], ['baz'])])
+        self.assertEquals(
+            host.filesystem.walk(mock_dir), [('foo', ['bar'], ['a', 'b', 'c']),
+                                             ('foo/bar', [], ['baz'])])
 
     def test_filesystem_walk_deeply_nested(self):
         mock_dir = 'foo'
-        mock_files = {'foo/bar/baz': '',
-                      'foo/bar/quux': '',
-                      'foo/a/x': '',
-                      'foo/a/y': '',
-                      'foo/a/z/lyrics': '',
-                      'foo/b': '',
-                      'foo/c': ''}
+        mock_files = {
+            'foo/bar/baz': '',
+            'foo/bar/quux': '',
+            'foo/a/x': '',
+            'foo/a/y': '',
+            'foo/a/z/lyrics': '',
+            'foo/b': '',
+            'foo/c': ''
+        }
         host = MockHost()
         host.filesystem = MockFileSystem(files=mock_files)
-        self.assertEquals(host.filesystem.walk(mock_dir), [('foo', ['a', 'bar'], ['c', 'b']),
-                                                           ('foo/a', ['z'], ['x', 'y']),
-                                                           ('foo/a/z', [], ['lyrics']),
-                                                           ('foo/bar', [], ['quux', 'baz'])])
+        self.assertEquals(
+            host.filesystem.walk(mock_dir), [('foo', ['a', 'bar'], ['c', 'b']),
+                                             ('foo/a', ['z'], ['x', 'y']),
+                                             ('foo/a/z', [], ['lyrics']),
+                                             ('foo/bar', [], ['quux', 'baz'])])
 
     def test_relpath_win32(self):
         # This unit test inherits tests from GenericFileSystemTests, but
diff --git a/third_party/blink/tools/blinkpy/common/system/filesystem_unittest.py b/third_party/blink/tools/blinkpy/common/system/filesystem_unittest.py
index 9415b94..51987ed6 100644
--- a/third_party/blink/tools/blinkpy/common/system/filesystem_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/filesystem_unittest.py
@@ -42,6 +42,7 @@
 
 class GenericFileSystemTests(object):
     """Tests that should pass on either a real or mock filesystem."""
+
     # Pylint gets confused about this being a mixin: pylint: disable=no-member
 
     def setup_generic_test_dir(self):
@@ -63,7 +64,8 @@
 
     def test_glob__trailing_asterisk(self):
         self.fs.chdir(self.generic_test_dir)
-        self.assertEqual(set(self.fs.glob('fo*')), set(['foo.txt', 'foobar', 'foodir']))
+        self.assertEqual(
+            set(self.fs.glob('fo*')), set(['foo.txt', 'foobar', 'foodir']))
 
     def test_glob__leading_asterisk(self):
         self.fs.chdir(self.generic_test_dir)
@@ -90,7 +92,8 @@
         self.assertEqual(self.fs.relpath('aaa/./ccc', 'aaa/bbb'), '../ccc')
         self.assertEqual(self.fs.relpath('aaa/../ccc', 'aaa/bbb'), '../../ccc')
         self.assertEqual(self.fs.relpath('aaa/bbb', 'aaa/ccc'), '../bbb')
-        self.assertEqual(self.fs.relpath('aaa/bbb', 'ccc/ddd'), '../../aaa/bbb')
+        self.assertEqual(
+            self.fs.relpath('aaa/bbb', 'ccc/ddd'), '../../aaa/bbb')
         self.assertEqual(self.fs.relpath('aaa/bbb', 'aaa/b'), '../bbb')
         self.assertEqual(self.fs.relpath('aaa/bbb', 'a/bbb'), '../../aaa/bbb')
 
@@ -105,11 +108,14 @@
         self.assertEqual(self.fs.relpath('aaa\\bbb', 'aaa\\bbb'), '.')
         self.assertEqual(self.fs.relpath('aaa\\bbb\\ccc', 'aaa\\bbb'), 'ccc')
         self.assertEqual(self.fs.relpath('aaa\\.\\ccc', 'aaa\\bbb'), '..\\ccc')
-        self.assertEqual(self.fs.relpath('aaa\\..\\ccc', 'aaa\\bbb'), '..\\..\\ccc')
+        self.assertEqual(
+            self.fs.relpath('aaa\\..\\ccc', 'aaa\\bbb'), '..\\..\\ccc')
         self.assertEqual(self.fs.relpath('aaa\\bbb', 'aaa\\ccc'), '..\\bbb')
-        self.assertEqual(self.fs.relpath('aaa\\bbb', 'ccc\\ddd'), '..\\..\\aaa\\bbb')
+        self.assertEqual(
+            self.fs.relpath('aaa\\bbb', 'ccc\\ddd'), '..\\..\\aaa\\bbb')
         self.assertEqual(self.fs.relpath('aaa\\bbb', 'aaa\\b'), '..\\bbb')
-        self.assertEqual(self.fs.relpath('aaa\\bbb', 'a\\bbb'), '..\\..\\aaa\\bbb')
+        self.assertEqual(
+            self.fs.relpath('aaa\\bbb', 'a\\bbb'), '..\\..\\aaa\\bbb')
 
     def test_rmtree(self):
         self.fs.chdir(self.generic_test_dir)
@@ -147,23 +153,24 @@
         self.assertTrue(self.fs.exists(self.fs.join('bardir', 'baz')))
 
     def test_sanitize_filename(self):
-        self.assertEqual(self.fs.sanitize_filename('test.html'),
-                         'test.html')
-        self.assertEqual(self.fs.sanitize_filename('test.html?wss&run'),
-                         'test.html_wss_run')
-        self.assertEqual(self.fs.sanitize_filename('test.html?wss&run', replacement='-'),
-                         'test.html-wss-run')
+        self.assertEqual(self.fs.sanitize_filename('test.html'), 'test.html')
+        self.assertEqual(
+            self.fs.sanitize_filename('test.html?wss&run'),
+            'test.html_wss_run')
+        self.assertEqual(
+            self.fs.sanitize_filename('test.html?wss&run', replacement='-'),
+            'test.html-wss-run')
 
 
 class RealFileSystemTest(unittest.TestCase, GenericFileSystemTests):
-
     def setUp(self):
         self.fs = FileSystem()
         self.setup_generic_test_dir()
 
         self._this_dir = os.path.dirname(os.path.abspath(__file__))
         self._missing_file = os.path.join(self._this_dir, 'missing_file.py')
-        self._this_file = os.path.join(self._this_dir, 'filesystem_unittest.py')
+        self._this_file = os.path.join(self._this_dir,
+                                       'filesystem_unittest.py')
 
     def tearDown(self):
         self.teardown_generic_test_dir()
@@ -209,8 +216,7 @@
 
     def test_join(self):
         fs = FileSystem()
-        self.assertEqual(fs.join('foo', 'bar'),
-                         os.path.join('foo', 'bar'))
+        self.assertEqual(fs.join('foo', 'bar'), os.path.join('foo', 'bar'))
 
     def test_listdir(self):
         fs = FileSystem()
@@ -346,14 +352,14 @@
         fs = FileSystem()
 
         self.assertEqual(fs.sep, os.sep)
-        self.assertEqual(fs.join('foo', 'bar'),
-                         os.path.join('foo', 'bar'))
+        self.assertEqual(fs.join('foo', 'bar'), os.path.join('foo', 'bar'))
 
     def test_long_paths(self):
         # This mostly tests UNC paths on Windows for path names > 260 chars.
         # Currently, only makedirs, copyfile, and various open methods are
         # verified to support UNC paths.
-        long_path = self.fs.join(self.generic_test_dir, 'x' * 100, 'y' * 100, 'z' * 100)
+        long_path = self.fs.join(self.generic_test_dir, 'x' * 100, 'y' * 100,
+                                 'z' * 100)
         self.fs.maybe_make_directory(long_path)
         file1 = self.fs.join(long_path, 'foo')
         file2 = self.fs.join(long_path, 'bar')
@@ -366,7 +372,8 @@
 
         # On Windows, rmtree can handle trees containing long paths as long as
         # the root is not a long path.
-        long_path1 = self.fs.join(self.generic_test_dir, 'a' * 100, 'b' * 100 + " 'b")
+        long_path1 = self.fs.join(self.generic_test_dir, 'a' * 100,
+                                  'b' * 100 + " 'b")
         long_path2 = self.fs.join(long_path1, 'c' * 100)
         self.fs.maybe_make_directory(long_path2)
         file1 = self.fs.join(long_path2, 'foo')
diff --git a/third_party/blink/tools/blinkpy/common/system/log_testing.py b/third_party/blink/tools/blinkpy/common/system/log_testing.py
index dcb71ba2..78ada78 100644
--- a/third_party/blink/tools/blinkpy/common/system/log_testing.py
+++ b/third_party/blink/tools/blinkpy/common/system/log_testing.py
@@ -19,7 +19,6 @@
 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Supports the unit-testing of logging code.
 
 Provides support for unit-testing messages logged using the built-in
diff --git a/third_party/blink/tools/blinkpy/common/system/log_testing_unittest.py b/third_party/blink/tools/blinkpy/common/system/log_testing_unittest.py
index 6ea0215..ca895a9 100644
--- a/third_party/blink/tools/blinkpy/common/system/log_testing_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/log_testing_unittest.py
@@ -9,7 +9,6 @@
 
 
 class TestLogStreamTest(unittest.TestCase):
-
     def test_passed_to_stream_handler(self):
         stream = TestLogStream(self)
         handler = logging.StreamHandler(stream)
@@ -27,7 +26,6 @@
 
 
 class LogTestingTest(unittest.TestCase):
-
     def test_basic(self):
         log_testing_instance = LogTesting.setUp(self)
         logger = logging.getLogger('test.logger')
@@ -37,14 +35,14 @@
         log_testing_instance.assertMessages([])
 
     def test_log_level_warning(self):
-        log_testing_instance = LogTesting.setUp(self, logging_level=logging.WARNING)
+        log_testing_instance = LogTesting.setUp(
+            self, logging_level=logging.WARNING)
         logger = logging.getLogger('test.logger')
         logger.info('my message')
         log_testing_instance.assertMessages([])
 
 
 class LoggingTestCaseTest(LoggingTestCase):
-
     def test_basic(self):
         self.example_logging_code()
         self.assertLog([
diff --git a/third_party/blink/tools/blinkpy/common/system/log_utils.py b/third_party/blink/tools/blinkpy/common/system/log_utils.py
index 227d89cd..6d38961 100644
--- a/third_party/blink/tools/blinkpy/common/system/log_utils.py
+++ b/third_party/blink/tools/blinkpy/common/system/log_utils.py
@@ -19,7 +19,6 @@
 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Supports blinkpy logging."""
 
 import logging
@@ -35,6 +34,7 @@
       stream: See the configure_logging() docstring.
       include_time: See the configure_logging() docstring.
     """
+
     # Create the filter.
     def should_log(record):
         """Return whether a logging.LogRecord should be logged."""
@@ -53,7 +53,8 @@
         prefix = ''
 
     if logging_level == logging.DEBUG:
-        formatter = logging.Formatter(prefix + '%(name)s: [%(levelname)s] %(message)s')
+        formatter = logging.Formatter(prefix +
+                                      '%(name)s: [%(levelname)s] %(message)s')
     else:
         formatter = logging.Formatter(prefix + '%(message)s')
 
@@ -63,8 +64,11 @@
     return [handler]
 
 
-def configure_logging(logging_level=None, logger=None, stream=None,
-                      handlers=None, include_time=True):
+def configure_logging(logging_level=None,
+                      logger=None,
+                      stream=None,
+                      handlers=None,
+                      include_time=True):
     """Configure logging for standard purposes.
 
     Returns:
diff --git a/third_party/blink/tools/blinkpy/common/system/log_utils_unittest.py b/third_party/blink/tools/blinkpy/common/system/log_utils_unittest.py
index 88e2d92..3860efa 100644
--- a/third_party/blink/tools/blinkpy/common/system/log_utils_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/log_utils_unittest.py
@@ -47,7 +47,11 @@
         logger.propagate = False
 
         logging_level = self._logging_level()
-        self._handlers = configure_logging(logging_level=logging_level, logger=logger, stream=log_stream, include_time=False)
+        self._handlers = configure_logging(
+            logging_level=logging_level,
+            logger=logger,
+            stream=log_stream,
+            include_time=False)
         self._log = logger
         self._log_stream = log_stream
 
@@ -67,7 +71,6 @@
 
 
 class ConfigureLoggingTest(ConfigureLoggingTestBase):
-
     """Tests configure_logging() with the default logging level."""
 
     def _logging_level(self):
@@ -92,12 +95,10 @@
     def test_two_messages(self):
         self._log.info('message1')
         self._log.info('message2')
-        self._assert_log_messages(['message1\n',
-                                   'message2\n'])
+        self._assert_log_messages(['message1\n', 'message2\n'])
 
 
 class ConfigureLoggingVerboseTest(ConfigureLoggingTestBase):
-
     def _logging_level(self):
         return logging.DEBUG
 
@@ -111,7 +112,6 @@
 
 
 class ConfigureLoggingCustomLevelTest(ConfigureLoggingTestBase):
-
     """Tests configure_logging() with a custom logging level."""
 
     _level = 36
diff --git a/third_party/blink/tools/blinkpy/common/system/output_capture.py b/third_party/blink/tools/blinkpy/common/system/output_capture.py
index 61f18a6..4dfbf01 100644
--- a/third_party/blink/tools/blinkpy/common/system/output_capture.py
+++ b/third_party/blink/tools/blinkpy/common/system/output_capture.py
@@ -35,7 +35,6 @@
 
 
 class OutputCapture(object):
-
     def __init__(self):
         self.saved_outputs = dict()
         self._log_level = logging.INFO
@@ -70,7 +69,8 @@
         self._orig_log_level = self._logger.level
         self._logger.addHandler(self._logs_handler)
         self._logger.setLevel(min(self._log_level, self._orig_log_level))
-        return (self._capture_output_with_name('stdout'), self._capture_output_with_name('stderr'))
+        return (self._capture_output_with_name('stdout'),
+                self._capture_output_with_name('stderr'))
 
     def restore_output(self):
         self._logger.removeHandler(self._logs_handler)
@@ -80,16 +80,25 @@
         logs_string = self._logs.getvalue()
         delattr(self, '_logs_handler')
         delattr(self, '_logs')
-        return (self._restore_output_with_name('stdout'), self._restore_output_with_name('stderr'), logs_string)
+        return (self._restore_output_with_name('stdout'),
+                self._restore_output_with_name('stderr'), logs_string)
 
-    def assert_outputs(self, testcase, function, args=None, kwargs=None, expected_stdout='',
-                       expected_stderr='', expected_exception=None, expected_logs=None):
+    def assert_outputs(self,
+                       testcase,
+                       function,
+                       args=None,
+                       kwargs=None,
+                       expected_stdout='',
+                       expected_stderr='',
+                       expected_exception=None,
+                       expected_logs=None):
         args = args or []
         kwargs = kwargs or {}
         self.capture_output()
         try:
             if expected_exception:
-                return_value = testcase.assertRaises(expected_exception, function, *args, **kwargs)
+                return_value = testcase.assertRaises(expected_exception,
+                                                     function, *args, **kwargs)
             else:
                 return_value = function(*args, **kwargs)
         finally:
diff --git a/third_party/blink/tools/blinkpy/common/system/output_capture_unittest.py b/third_party/blink/tools/blinkpy/common/system/output_capture_unittest.py
index 855b0aa1..b086522 100644
--- a/third_party/blink/tools/blinkpy/common/system/output_capture_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/output_capture_unittest.py
@@ -25,12 +25,10 @@
 
 from blinkpy.common.system.output_capture import OutputCapture
 
-
 _log = logging.getLogger(__name__)
 
 
 class OutputCaptureTest(unittest.TestCase):
-
     def setUp(self):
         self.output = OutputCapture()
 
@@ -41,7 +39,8 @@
         _log.critical('CRITICAL')
 
     def assert_logged(self, expected_logs):
-        actual_stdout, actual_stderr, actual_logs = self.output.restore_output()
+        actual_stdout, actual_stderr, actual_logs = self.output.restore_output(
+        )
         self.assertEqual('', actual_stdout)
         self.assertEqual('', actual_stderr)
         self.assertMultiLineEqual(expected_logs, actual_logs)
diff --git a/third_party/blink/tools/blinkpy/common/system/path.py b/third_party/blink/tools/blinkpy/common/system/path.py
index 083773c..560807c 100644
--- a/third_party/blink/tools/blinkpy/common/system/path.py
+++ b/third_party/blink/tools/blinkpy/common/system/path.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Generic routines to convert platform-specific paths to URIs."""
 
 import urllib
diff --git a/third_party/blink/tools/blinkpy/common/system/path_unittest.py b/third_party/blink/tools/blinkpy/common/system/path_unittest.py
index 87a20232..fcfb651 100644
--- a/third_party/blink/tools/blinkpy/common/system/path_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/path_unittest.py
@@ -35,20 +35,22 @@
 
 
 class AbspathTest(unittest.TestCase):
-
     def platform_info(self):
         return SystemHost().platform
 
     def test_abspath_to_uri_unixy(self):
-        self.assertEqual(path.abspath_to_uri(MockPlatformInfo(), '/foo/bar.html'),
-                         'file:///foo/bar.html')
+        self.assertEqual(
+            path.abspath_to_uri(MockPlatformInfo(), '/foo/bar.html'),
+            'file:///foo/bar.html')
 
     def test_abspath_to_uri_win(self):
         if sys.platform != 'win32':
             return
-        self.assertEqual(path.abspath_to_uri(self.platform_info(), 'c:\\foo\\bar.html'),
-                         'file:///c:/foo/bar.html')
+        self.assertEqual(
+            path.abspath_to_uri(self.platform_info(), 'c:\\foo\\bar.html'),
+            'file:///c:/foo/bar.html')
 
     def test_abspath_to_uri_escaping_unixy(self):
-        self.assertEqual(path.abspath_to_uri(MockPlatformInfo(), '/foo/bar + baz%?.html'),
-                         'file:///foo/bar%20+%20baz%25%3F.html')
+        self.assertEqual(
+            path.abspath_to_uri(MockPlatformInfo(), '/foo/bar + baz%?.html'),
+            'file:///foo/bar%20+%20baz%25%3F.html')
diff --git a/third_party/blink/tools/blinkpy/common/system/platform_info.py b/third_party/blink/tools/blinkpy/common/system/platform_info.py
index a1f5794..4882278 100644
--- a/third_party/blink/tools/blinkpy/common/system/platform_info.py
+++ b/third_party/blink/tools/blinkpy/common/system/platform_info.py
@@ -43,7 +43,8 @@
     newer than one known to the code.
     """
 
-    def __init__(self, sys_module, platform_module, filesystem_module, executive):
+    def __init__(self, sys_module, platform_module, filesystem_module,
+                 executive):
         self._executive = executive
         self._filesystem = filesystem_module
         self._platform_module = platform_module
@@ -53,9 +54,11 @@
         if self.os_name == 'freebsd':
             self.os_version = platform_module.release()
         if self.os_name.startswith('mac'):
-            self.os_version = self._determine_mac_version(platform_module.mac_ver()[0])
+            self.os_version = self._determine_mac_version(
+                platform_module.mac_ver()[0])
         if self.os_name.startswith('win'):
-            self.os_version = self._determine_win_version(self._win_version_tuple(sys_module))
+            self.os_version = self._determine_win_version(
+                self._win_version_tuple(sys_module))
         assert sys.platform != 'cygwin', 'Cygwin is not supported.'
 
     def is_mac(self):
@@ -72,9 +75,11 @@
 
     def is_highdpi(self):
         if self.is_mac():
-            output = self._executive.run_command(['system_profiler', 'SPDisplaysDataType'],
-                                                 error_handler=self._executive.ignore_error)
-            if output and re.search(r'Resolution:.*Retina$', output, re.MULTILINE):
+            output = self._executive.run_command(
+                ['system_profiler', 'SPDisplaysDataType'],
+                error_handler=self._executive.ignore_error)
+            if output and re.search(r'Resolution:.*Retina$', output,
+                                    re.MULTILINE):
                 return True
         return False
 
@@ -90,7 +95,8 @@
 
     def total_bytes_memory(self):
         if self.is_mac():
-            return long(self._executive.run_command(['sysctl', '-n', 'hw.memsize']))
+            return long(
+                self._executive.run_command(['sysctl', '-n', 'hw.memsize']))
         return None
 
     def terminal_width(self):
@@ -100,10 +106,13 @@
                 # From http://code.activestate.com/recipes/440694-determine-size-of-console-window-on-windows/
                 from ctypes import windll, create_string_buffer
                 handle = windll.kernel32.GetStdHandle(-12)  # -12 == stderr
-                console_screen_buffer_info = create_string_buffer(22)  # 22 == sizeof(console_screen_buffer_info)
-                if windll.kernel32.GetConsoleScreenBufferInfo(handle, console_screen_buffer_info):
+                # 22 == sizeof(console_screen_buffer_info)
+                console_screen_buffer_info = create_string_buffer(22)
+                if windll.kernel32.GetConsoleScreenBufferInfo(
+                        handle, console_screen_buffer_info):
                     import struct
-                    _, _, _, _, _, left, _, right, _, _, _ = struct.unpack('hhhhHhhhhhh', console_screen_buffer_info.raw)
+                    _, _, _, _, _, left, _, right, _, _, _ = struct.unpack(
+                        'hhhhHhhhhhh', console_screen_buffer_info.raw)
                     # Note that we return 1 less than the width since writing into the rightmost column
                     # automatically performs a line feed.
                     return right - left
@@ -112,7 +121,8 @@
                 import fcntl
                 import struct
                 import termios
-                packed = fcntl.ioctl(sys.stderr.fileno(), termios.TIOCGWINSZ, '\0' * 8)
+                packed = fcntl.ioctl(sys.stderr.fileno(), termios.TIOCGWINSZ,
+                                     '\0' * 8)
                 _, columns, _, _ = struct.unpack('HHHH', packed)
                 return columns
         except Exception:  # pylint: disable=broad-except
@@ -143,7 +153,8 @@
             return 'win'
         if sys_platform.startswith('freebsd'):
             return 'freebsd'
-        raise AssertionError('unrecognized platform string "%s"' % sys_platform)
+        raise AssertionError(
+            'unrecognized platform string "%s"' % sys_platform)
 
     def _determine_mac_version(self, mac_version_string):
         minor_release = int(mac_version_string.split('.')[1])
@@ -168,10 +179,10 @@
             return 'vista'
         if win_version_tuple[:2] == (5, 1):
             return 'xp'
-        assert (
-            win_version_tuple[0] > 10 or
-            win_version_tuple[0] == 10 and win_version_tuple[1] > 0), (
-                'Unrecognized Windows version tuple: "%s"' % (win_version_tuple,))
+        assert (win_version_tuple[0] > 10
+                or win_version_tuple[0] == 10 and win_version_tuple[1] > 0), (
+                    'Unrecognized Windows version tuple: "%s"' %
+                    (win_version_tuple, ))
         return 'future'
 
     def _win_version_tuple(self, sys_module):
@@ -181,7 +192,9 @@
 
     def _win_version_tuple_from_cmd(self):
         # Note that this should only ever be called on windows, so this should always work.
-        ver_output = self._executive.run_command(['cmd', '/c', 'ver'], decode_output=False)
-        match_object = re.search(r'(?P<major>\d+)\.(?P<minor>\d)\.(?P<build>\d+)', ver_output)
+        ver_output = self._executive.run_command(['cmd', '/c', 'ver'],
+                                                 decode_output=False)
+        match_object = re.search(
+            r'(?P<major>\d+)\.(?P<minor>\d)\.(?P<build>\d+)', ver_output)
         assert match_object, 'cmd returned an unexpected version string: ' + ver_output
         return tuple(map(int, match_object.groups()))
diff --git a/third_party/blink/tools/blinkpy/common/system/platform_info_mock.py b/third_party/blink/tools/blinkpy/common/system/platform_info_mock.py
index ee307cd..f94ca2b 100644
--- a/third_party/blink/tools/blinkpy/common/system/platform_info_mock.py
+++ b/third_party/blink/tools/blinkpy/common/system/platform_info_mock.py
@@ -28,8 +28,11 @@
 
 
 class MockPlatformInfo(object):
-
-    def __init__(self, os_name='mac', os_version='mac10.10', linux_distribution=None, is_highdpi=False):
+    def __init__(self,
+                 os_name='mac',
+                 os_version='mac10.10',
+                 linux_distribution=None,
+                 is_highdpi=False):
         self.os_name = os_name
         self.os_version = os_version
         self._linux_distribution = linux_distribution
diff --git a/third_party/blink/tools/blinkpy/common/system/platform_info_unittest.py b/third_party/blink/tools/blinkpy/common/system/platform_info_unittest.py
index 50f6b25..92cc203 100644
--- a/third_party/blink/tools/blinkpy/common/system/platform_info_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/platform_info_unittest.py
@@ -38,7 +38,6 @@
 
 
 def fake_sys(platform_str='darwin', windows_version_tuple=None):
-
     class FakeSysModule(object):
         platform = platform_str
         if windows_version_tuple:
@@ -47,10 +46,10 @@
     return FakeSysModule()
 
 
-def fake_platform(mac_version_string='10.12.3', release_string='bar', linux_version='trusty'):
-
+def fake_platform(mac_version_string='10.12.3',
+                  release_string='bar',
+                  linux_version='trusty'):
     class FakePlatformModule(object):
-
         def mac_ver(self):
             return tuple([mac_version_string, tuple(['', '', '']), 'i386'])
 
@@ -73,10 +72,14 @@
 
 
 class TestPlatformInfo(unittest.TestCase):
-
-    def make_info(self, sys_module=None, platform_module=None, filesystem_module=None, executive=None):
-        return PlatformInfo(sys_module or fake_sys(), platform_module or fake_platform(),
-                            filesystem_module or MockFileSystem(), executive or fake_executive())
+    def make_info(self,
+                  sys_module=None,
+                  platform_module=None,
+                  filesystem_module=None,
+                  executive=None):
+        return PlatformInfo(sys_module or fake_sys(), platform_module
+                            or fake_platform(), filesystem_module
+                            or MockFileSystem(), executive or fake_executive())
 
     def test_real_code(self):
         # This test makes sure the real (unmocked) code actually works.
@@ -84,7 +87,8 @@
         self.assertNotEquals(info.os_name, '')
         self.assertNotEquals(info.os_version, '')
         self.assertNotEquals(info.display_name(), '')
-        self.assertTrue(info.is_mac() or info.is_win() or info.is_linux() or info.is_freebsd())
+        self.assertTrue(info.is_mac() or info.is_win() or info.is_linux()
+                        or info.is_freebsd())
         self.assertIsNotNone(info.terminal_width())
 
         if info.is_linux():
@@ -135,52 +139,97 @@
     def test_os_version(self):
         with self.assertRaises(AssertionError):
             self.make_info(fake_sys('darwin'), fake_platform('10.6.3'))
-        self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.10.0')).os_version, 'mac10.10')
-        self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.11.0')).os_version, 'mac10.11')
-        self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.12.0')).os_version, 'mac10.12')
-        self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.13.0')).os_version, 'mac10.13')
-        self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.14.0')).os_version, 'mac10.14')
-        self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.15.0')).os_version, 'mac10.15')
+        self.assertEqual(
+            self.make_info(fake_sys('darwin'),
+                           fake_platform('10.10.0')).os_version, 'mac10.10')
+        self.assertEqual(
+            self.make_info(fake_sys('darwin'),
+                           fake_platform('10.11.0')).os_version, 'mac10.11')
+        self.assertEqual(
+            self.make_info(fake_sys('darwin'),
+                           fake_platform('10.12.0')).os_version, 'mac10.12')
+        self.assertEqual(
+            self.make_info(fake_sys('darwin'),
+                           fake_platform('10.13.0')).os_version, 'mac10.13')
+        self.assertEqual(
+            self.make_info(fake_sys('darwin'),
+                           fake_platform('10.14.0')).os_version, 'mac10.14')
+        self.assertEqual(
+            self.make_info(fake_sys('darwin'),
+                           fake_platform('10.15.0')).os_version, 'mac10.15')
         with self.assertRaises(AssertionError):
             self.make_info(fake_sys('darwin'), fake_platform('10.20.0'))
 
-        self.assertEqual(self.make_info(fake_sys('linux2')).os_version, 'trusty')
-        info = self.make_info(fake_sys('linux2'), fake_platform(linux_version='utopic'))
+        self.assertEqual(
+            self.make_info(fake_sys('linux2')).os_version, 'trusty')
+        info = self.make_info(
+            fake_sys('linux2'), fake_platform(linux_version='utopic'))
         self.assertEqual(info.os_version, 'trusty')
 
-        self.assertEqual(self.make_info(fake_sys('freebsd8'), fake_platform('', '8.3-PRERELEASE')).os_version, '8.3-PRERELEASE')
-        self.assertEqual(self.make_info(fake_sys('freebsd9'), fake_platform('', '9.0-RELEASE')).os_version, '9.0-RELEASE')
+        self.assertEqual(
+            self.make_info(
+                fake_sys('freebsd8'), fake_platform(
+                    '', '8.3-PRERELEASE')).os_version, '8.3-PRERELEASE')
+        self.assertEqual(
+            self.make_info(
+                fake_sys('freebsd9'),
+                fake_platform('', '9.0-RELEASE')).os_version, '9.0-RELEASE')
 
         with self.assertRaises(AssertionError):
             self.make_info(fake_sys('win32', tuple([5, 0, 1234])))
         with self.assertRaises(AssertionError):
             self.make_info(fake_sys('win32', tuple([6, 1, 1234])))
-        self.assertEqual(self.make_info(fake_sys('win32', tuple([10, 1, 1234]))).os_version, 'future')
-        self.assertEqual(self.make_info(fake_sys('win32', tuple([10, 0, 1234]))).os_version, '10')
-        self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 3, 1234]))).os_version, '8.1')
-        self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 2, 1234]))).os_version, '8')
-        self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 1, 7601]))).os_version, '7sp1')
-        self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 1, 7600]))).os_version, '7sp0')
-        self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 0, 1234]))).os_version, 'vista')
-        self.assertEqual(self.make_info(fake_sys('win32', tuple([5, 1, 1234]))).os_version, 'xp')
+        self.assertEqual(
+            self.make_info(fake_sys('win32', tuple([10, 1, 1234]))).os_version,
+            'future')
+        self.assertEqual(
+            self.make_info(fake_sys('win32', tuple([10, 0, 1234]))).os_version,
+            '10')
+        self.assertEqual(
+            self.make_info(fake_sys('win32', tuple([6, 3, 1234]))).os_version,
+            '8.1')
+        self.assertEqual(
+            self.make_info(fake_sys('win32', tuple([6, 2, 1234]))).os_version,
+            '8')
+        self.assertEqual(
+            self.make_info(fake_sys('win32', tuple([6, 1, 7601]))).os_version,
+            '7sp1')
+        self.assertEqual(
+            self.make_info(fake_sys('win32', tuple([6, 1, 7600]))).os_version,
+            '7sp0')
+        self.assertEqual(
+            self.make_info(fake_sys('win32', tuple([6, 0, 1234]))).os_version,
+            'vista')
+        self.assertEqual(
+            self.make_info(fake_sys('win32', tuple([5, 1, 1234]))).os_version,
+            'xp')
 
         with self.assertRaises(AssertionError):
-            self.make_info(fake_sys('win32'), executive=fake_executive('5.0.1234'))
+            self.make_info(
+                fake_sys('win32'), executive=fake_executive('5.0.1234'))
         with self.assertRaises(AssertionError):
-            self.make_info(fake_sys('win32'), executive=fake_executive('6.1.1234'))
+            self.make_info(
+                fake_sys('win32'), executive=fake_executive('6.1.1234'))
 
     def _assert_files_imply_linux_distribution(self, file_paths, distribution):
         fs_module = MockFileSystem({file_path: '' for file_path in file_paths})
-        info = self.make_info(sys_module=fake_sys('linux2'), filesystem_module=fs_module)
+        info = self.make_info(
+            sys_module=fake_sys('linux2'), filesystem_module=fs_module)
         self.assertEqual(info.linux_distribution(), distribution)
 
     def test_linux_distro_detection(self):
-        self._assert_files_imply_linux_distribution(['/etc/arch-release'], 'arch')
-        self._assert_files_imply_linux_distribution(['/etc/debian_version'], 'debian')
-        self._assert_files_imply_linux_distribution(['/etc/fedora-release'], 'fedora')
-        self._assert_files_imply_linux_distribution(['/etc/fedora-release', '/etc/redhat-release'], 'fedora')
-        self._assert_files_imply_linux_distribution(['/etc/redhat-release'], 'redhat')
-        self._assert_files_imply_linux_distribution(['/etc/mock-release'], 'unknown')
+        self._assert_files_imply_linux_distribution(['/etc/arch-release'],
+                                                    'arch')
+        self._assert_files_imply_linux_distribution(['/etc/debian_version'],
+                                                    'debian')
+        self._assert_files_imply_linux_distribution(['/etc/fedora-release'],
+                                                    'fedora')
+        self._assert_files_imply_linux_distribution(
+            ['/etc/fedora-release', '/etc/redhat-release'], 'fedora')
+        self._assert_files_imply_linux_distribution(['/etc/redhat-release'],
+                                                    'redhat')
+        self._assert_files_imply_linux_distribution(['/etc/mock-release'],
+                                                    'unknown')
 
     def test_display_name(self):
         info = self.make_info(fake_sys('darwin'))
@@ -196,7 +245,10 @@
         self.assertNotEquals(info.display_name(), '')
 
     def test_total_bytes_memory(self):
-        info = self.make_info(fake_sys('darwin'), fake_platform('10.12.3'), executive=fake_executive('1234'))
+        info = self.make_info(
+            fake_sys('darwin'),
+            fake_platform('10.12.3'),
+            executive=fake_executive('1234'))
         self.assertEqual(info.total_bytes_memory(), 1234)
 
         info = self.make_info(fake_sys('win32', tuple([6, 1, 7600])))
diff --git a/third_party/blink/tools/blinkpy/common/system/profiler.py b/third_party/blink/tools/blinkpy/common/system/profiler.py
index d5d3339b..fa1580b 100644
--- a/third_party/blink/tools/blinkpy/common/system/profiler.py
+++ b/third_party/blink/tools/blinkpy/common/system/profiler.py
@@ -31,14 +31,21 @@
 
 
 class ProfilerFactory(object):
-
     @classmethod
-    def create_profiler(cls, host, executable_path, output_dir, profiler_name=None, identifier=None):
+    def create_profiler(cls,
+                        host,
+                        executable_path,
+                        output_dir,
+                        profiler_name=None,
+                        identifier=None):
         profilers = cls.profilers_for_platform(host.platform)
         if not profilers:
             return None
-        profiler_name = profiler_name or cls.default_profiler_name(host.platform)
-        profiler_class = next(itertools.ifilter(lambda profiler: profiler.name == profiler_name, profilers), None)
+        profiler_name = profiler_name or cls.default_profiler_name(
+            host.platform)
+        profiler_class = next(
+            itertools.ifilter(lambda profiler: profiler.name == profiler_name,
+                              profilers), None)
         if not profiler_class:
             return None
         return profilers[0](host, executable_path, output_dir, identifier)
@@ -82,14 +89,24 @@
 
 
 class SingleFileOutputProfiler(Profiler):
-
-    def __init__(self, host, executable_path, output_dir, output_suffix, identifier=None):
-        super(SingleFileOutputProfiler, self).__init__(host, executable_path, output_dir, identifier)
+    def __init__(self,
+                 host,
+                 executable_path,
+                 output_dir,
+                 output_suffix,
+                 identifier=None):
+        super(SingleFileOutputProfiler, self).__init__(host, executable_path,
+                                                       output_dir, identifier)
         # FIXME: Currently all reports are kept as test.*, until we fix that, search up to 1000 names before giving up.
-        self._output_path = self._find_unused_filename(self._output_dir, self._identifier, output_suffix)
+        self._output_path = self._find_unused_filename(
+            self._output_dir, self._identifier, output_suffix)
         assert self._output_path
 
-    def _find_unused_filename(self, directory, name, extension, search_limit=1000):
+    def _find_unused_filename(self,
+                              directory,
+                              name,
+                              extension,
+                              search_limit=1000):
         for count in range(search_limit):
             if count:
                 target_name = '%s-%s.%s' % (name, count, extension)
@@ -106,14 +123,16 @@
     name = 'pprof'
 
     def __init__(self, host, executable_path, output_dir, identifier=None):
-        super(GooglePProf, self).__init__(host, executable_path, output_dir, 'pprof', identifier)
+        super(GooglePProf, self).__init__(host, executable_path, output_dir,
+                                          'pprof', identifier)
 
     def adjusted_environment(self, env):
         env['CPUPROFILE'] = self._output_path
         return env
 
     def _first_ten_lines_of_profile(self, pprof_output):
-        match = re.search('^Total:[^\n]*\n((?:[^\n]*\n){0,10})', pprof_output, re.MULTILINE)
+        match = re.search('^Total:[^\n]*\n((?:[^\n]*\n){0,10})', pprof_output,
+                          re.MULTILINE)
         return match.group(1) if match else None
 
     def _pprof_path(self):
@@ -127,21 +146,26 @@
             print 'Failed to gather profile, %s does not exist.' % self._output_path
             return
 
-        pprof_args = [self._pprof_path(), '--text', self._executable_path, self._output_path]
+        pprof_args = [
+            self._pprof_path(), '--text', self._executable_path,
+            self._output_path
+        ]
         profile_text = self._host.executive.run_command(pprof_args)
         print 'First 10 lines of pprof --text:'
         print self._first_ten_lines_of_profile(profile_text)
         print 'http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html documents output.'
         print
         print 'To interact with the the full profile, including produce graphs:'
-        print ' '.join([self._pprof_path(), self._executable_path, self._output_path])
+        print ' '.join(
+            [self._pprof_path(), self._executable_path, self._output_path])
 
 
 class Perf(SingleFileOutputProfiler):
     name = 'perf'
 
     def __init__(self, host, executable_path, output_dir, identifier=None):
-        super(Perf, self).__init__(host, executable_path, output_dir, 'data', identifier)
+        super(Perf, self).__init__(host, executable_path, output_dir, 'data',
+                                   identifier)
         self._perf_process = None
         self._pid_being_profiled = None
 
@@ -152,27 +176,36 @@
     def attach_to_pid(self, pid):
         assert not self._perf_process and not self._pid_being_profiled
         self._pid_being_profiled = pid
-        cmd = [self._perf_path(), 'record', '--call-graph', '--pid', pid, '--output', self._output_path]
+        cmd = [
+            self._perf_path(), 'record', '--call-graph', '--pid', pid,
+            '--output', self._output_path
+        ]
         self._perf_process = self._host.executive.popen(cmd)
 
     def _first_ten_lines_of_profile(self, perf_output):
-        match = re.search('^#[^\n]*\n((?: [^\n]*\n){1,10})', perf_output, re.MULTILINE)
+        match = re.search('^#[^\n]*\n((?: [^\n]*\n){1,10})', perf_output,
+                          re.MULTILINE)
         return match.group(1) if match else None
 
     def profile_after_exit(self):
         # Perf doesn't automatically watch the attached pid for death notifications,
         # so we have to do it for it, and then tell it its time to stop sampling. :(
-        self._host.executive.wait_limited(self._pid_being_profiled, limit_in_seconds=10)
+        self._host.executive.wait_limited(
+            self._pid_being_profiled, limit_in_seconds=10)
         perf_exitcode = self._perf_process.poll()
         if perf_exitcode is None:  # This should always be the case, unless perf error'd out early.
             self._host.executive.interrupt(self._perf_process.pid)
 
         perf_exitcode = self._perf_process.wait()
-        if perf_exitcode not in (0, -2):  # The exit code should always be -2, as we're always interrupting perf.
+        # The exit code should always be -2, as we're always interrupting perf.
+        if perf_exitcode not in (0, -2):
             print "'perf record' failed (exit code: %i), can't process results:" % perf_exitcode
             return
 
-        perf_args = [self._perf_path(), 'report', '--call-graph', 'none', '--input', self._output_path]
+        perf_args = [
+            self._perf_path(), 'report', '--call-graph', 'none', '--input',
+            self._output_path
+        ]
         print "First 10 lines of 'perf report --call-graph=none':"
 
         print ' '.join(perf_args)
@@ -188,7 +221,8 @@
     name = 'sample'
 
     def __init__(self, host, executable_path, output_dir, identifier=None):
-        super(Sample, self).__init__(host, executable_path, output_dir, 'txt', identifier)
+        super(Sample, self).__init__(host, executable_path, output_dir, 'txt',
+                                     identifier)
         self._profiler_process = None
 
     def attach_to_pid(self, pid):
@@ -203,15 +237,19 @@
     name = 'iprofiler'
 
     def __init__(self, host, executable_path, output_dir, identifier=None):
-        super(IProfiler, self).__init__(host, executable_path, output_dir, 'dtps', identifier)
+        super(IProfiler, self).__init__(host, executable_path, output_dir,
+                                        'dtps', identifier)
         self._profiler_process = None
 
     def attach_to_pid(self, pid):
         # FIXME: iprofiler requires us to pass the directory separately
         # from the basename of the file, with no control over the extension.
         fs = self._host.filesystem
-        cmd = ['iprofiler', '-timeprofiler', '-a', pid,
-               '-d', fs.dirname(self._output_path), '-o', fs.splitext(fs.basename(self._output_path))[0]]
+        cmd = [
+            'iprofiler', '-timeprofiler', '-a', pid, '-d',
+            fs.dirname(self._output_path), '-o',
+            fs.splitext(fs.basename(self._output_path))[0]
+        ]
         # FIXME: Consider capturing instead of letting instruments spam to stderr directly.
         self._profiler_process = self._host.executive.popen(cmd)
 
diff --git a/third_party/blink/tools/blinkpy/common/system/profiler_unittest.py b/third_party/blink/tools/blinkpy/common/system/profiler_unittest.py
index 74e6897..2535718 100644
--- a/third_party/blink/tools/blinkpy/common/system/profiler_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/profiler_unittest.py
@@ -35,9 +35,9 @@
 
 
 class ProfilerFactoryTest(unittest.TestCase):
-
     def _assert_default_profiler_name(self, os_name, expected_profiler_name):
-        profiler_name = ProfilerFactory.default_profiler_name(MockPlatformInfo(os_name))
+        profiler_name = ProfilerFactory.default_profiler_name(
+            MockPlatformInfo(os_name))
         self.assertEqual(profiler_name, expected_profiler_name)
 
     def test_default_profilers(self):
@@ -51,18 +51,19 @@
         self.assertFalse(host.filesystem.exists("/tmp/output"))
 
         # Default mocks are Mac, so iprofile should be default.
-        profiler = ProfilerFactory.create_profiler(host, '/bin/executable', '/tmp/output')
+        profiler = ProfilerFactory.create_profiler(host, '/bin/executable',
+                                                   '/tmp/output')
         self.assertTrue(host.filesystem.exists("/tmp/output"))
         self.assertEqual(profiler._output_path, "/tmp/output/test.dtps")
 
         # Linux defaults to perf.
         host.platform.os_name = 'linux'
-        profiler = ProfilerFactory.create_profiler(host, '/bin/executable', '/tmp/output')
+        profiler = ProfilerFactory.create_profiler(host, '/bin/executable',
+                                                   '/tmp/output')
         self.assertEqual(profiler._output_path, "/tmp/output/test.data")
 
 
 class GooglePProfTest(unittest.TestCase):
-
     def test_pprof_output_regexp(self):
         pprof_output = """
 sometimes
@@ -102,4 +103,6 @@
 """
         host = MockSystemHost()
         profiler = GooglePProf(host, '/bin/executable', '/tmp/output')
-        self.assertEqual(profiler._first_ten_lines_of_profile(pprof_output), expected_first_ten_lines)
+        self.assertEqual(
+            profiler._first_ten_lines_of_profile(pprof_output),
+            expected_first_ten_lines)
diff --git a/third_party/blink/tools/blinkpy/common/system/stack_utils.py b/third_party/blink/tools/blinkpy/common/system/stack_utils.py
index 45108f5..3ad89f15 100644
--- a/third_party/blink/tools/blinkpy/common/system/stack_utils.py
+++ b/third_party/blink/tools/blinkpy/common/system/stack_utils.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Simple routines for logging, obtaining thread stack information."""
 
 import sys
diff --git a/third_party/blink/tools/blinkpy/common/system/stack_utils_unittest.py b/third_party/blink/tools/blinkpy/common/system/stack_utils_unittest.py
index d1adacc9..6d8474f 100644
--- a/third_party/blink/tools/blinkpy/common/system/stack_utils_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/stack_utils_unittest.py
@@ -38,7 +38,6 @@
 
 
 class StackUtilsTest(unittest.TestCase):
-
     def test_find_thread_stack_found(self):
         thread_id = current_thread_id()
         found_stack = stack_utils._find_thread_stack(thread_id)
diff --git a/third_party/blink/tools/blinkpy/common/system/system_host.py b/third_party/blink/tools/blinkpy/common/system/system_host.py
index 0fc976e..e03deb0 100644
--- a/third_party/blink/tools/blinkpy/common/system/system_host.py
+++ b/third_party/blink/tools/blinkpy/common/system/system_host.py
@@ -38,13 +38,13 @@
 
 
 class SystemHost(object):
-
     def __init__(self):
         self.executable = sys.executable
         self.executive = Executive()
         self.filesystem = FileSystem()
         self.user = User()
-        self.platform = PlatformInfo(sys, platform, self.filesystem, self.executive)
+        self.platform = PlatformInfo(sys, platform, self.filesystem,
+                                     self.executive)
         self.stdin = sys.stdin
         self.stdout = sys.stdout
         self.stderr = sys.stderr
diff --git a/third_party/blink/tools/blinkpy/common/system/system_host_mock.py b/third_party/blink/tools/blinkpy/common/system/system_host_mock.py
index e8f8d38a..b28baf5 100644
--- a/third_party/blink/tools/blinkpy/common/system/system_host_mock.py
+++ b/third_party/blink/tools/blinkpy/common/system/system_host_mock.py
@@ -35,7 +35,6 @@
 
 
 class MockSystemHost(object):
-
     def __init__(self,
                  log_executive=False,
                  os_name=None,
@@ -56,10 +55,7 @@
         self.stdin = StringIO()
         self.stdout = StringIO()
         self.stderr = StringIO()
-        self.environ = {
-            'MOCK_ENVIRON_COPY': '1',
-            'PATH': '/bin:/mock/bin'
-        }
+        self.environ = {'MOCK_ENVIRON_COPY': '1', 'PATH': '/bin:/mock/bin'}
         self.time_return_val = time_return_val
 
     def time(self):
diff --git a/third_party/blink/tools/blinkpy/common/system/user.py b/third_party/blink/tools/blinkpy/common/system/user.py
index fa1a0cb..e6cd7f9 100644
--- a/third_party/blink/tools/blinkpy/common/system/user.py
+++ b/third_party/blink/tools/blinkpy/common/system/user.py
@@ -47,7 +47,8 @@
     def __init__(self, platform_info=None):
         # We cannot get the PlatformInfo object from a SystemHost because
         # User is part of SystemHost itself.
-        self._platform_info = platform_info or PlatformInfo(sys, platform, FileSystem(), Executive())
+        self._platform_info = platform_info or PlatformInfo(
+            sys, platform, FileSystem(), Executive())
 
     # FIXME: These are @classmethods because bugzilla.py doesn't have a Tool object (thus no User instance).
     @classmethod
@@ -59,11 +60,13 @@
         return response
 
     @classmethod
-    def _wait_on_list_response(cls, list_items, can_choose_multiple, input_func):
+    def _wait_on_list_response(cls, list_items, can_choose_multiple,
+                               input_func):
         while True:
             if can_choose_multiple:
                 response = cls.prompt(
-                    'Enter one or more numbers (comma-separated) or ranges (e.g. 3-7), or \'all\': ', input_func=input_func)
+                    'Enter one or more numbers (comma-separated) or ranges (e.g. 3-7), or \'all\': ',
+                    input_func=input_func)
                 if not response.strip() or response == 'all':
                     return list_items
 
@@ -81,19 +84,26 @@
                 return [list_items[i] for i in indices]
             else:
                 try:
-                    result = int(cls.prompt('Enter a number: ', input_func=input_func)) - 1
+                    result = int(
+                        cls.prompt('Enter a number: ',
+                                   input_func=input_func)) - 1
                 except ValueError:
                     continue
                 return list_items[result]
 
     @classmethod
-    def prompt_with_list(cls, list_title, list_items, can_choose_multiple=False, input_func=raw_input):
+    def prompt_with_list(cls,
+                         list_title,
+                         list_items,
+                         can_choose_multiple=False,
+                         input_func=raw_input):
         print list_title
         i = 0
         for item in list_items:
             i += 1
             print '%2d. %s' % (i, item)
-        return cls._wait_on_list_response(list_items, can_choose_multiple, input_func)
+        return cls._wait_on_list_response(list_items, can_choose_multiple,
+                                          input_func)
 
     def confirm(self, message=None, default=DEFAULT_YES, input_func=raw_input):
         if not message:
@@ -111,7 +121,8 @@
         # tends to autolaunch dbus: if this happens inside testing/xvfb.py, that
         # often causes problems when the autolaunched dbus exits, as dbus sends
         # a kill signal to all killable processes on exit (!!!).
-        if self._platform_info.is_linux() and 'DBUS_SESSION_BUS_ADDRESS' not in os.environ:
+        if (self._platform_info.is_linux()
+                and 'DBUS_SESSION_BUS_ADDRESS' not in os.environ):
             _log.warning('dbus is not running, not showing results...')
             return False
         try:
diff --git a/third_party/blink/tools/blinkpy/common/system/user_mock.py b/third_party/blink/tools/blinkpy/common/system/user_mock.py
index 1523d58f..53715f5 100644
--- a/third_party/blink/tools/blinkpy/common/system/user_mock.py
+++ b/third_party/blink/tools/blinkpy/common/system/user_mock.py
@@ -37,7 +37,11 @@
     DEFAULT_NO = 'n'
 
     @classmethod
-    def prompt_with_list(cls, list_title, list_items, can_choose_multiple=False, raw_input=raw_input):
+    def prompt_with_list(cls,
+                         list_title,
+                         list_items,
+                         can_choose_multiple=False,
+                         raw_input=raw_input):
         pass
 
     def __init__(self):
diff --git a/third_party/blink/tools/blinkpy/common/system/user_unittest.py b/third_party/blink/tools/blinkpy/common/system/user_unittest.py
index 6c1f238..49b1f8c 100644
--- a/third_party/blink/tools/blinkpy/common/system/user_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/system/user_unittest.py
@@ -33,7 +33,6 @@
 
 
 class UserTest(unittest.TestCase):
-
     def setUp(self):
         self.repeats_remaining = None
 
@@ -46,8 +45,11 @@
                 return 'example user response'
             return None
 
-        self.assertEqual(User.prompt('input', repeat=self.repeats_remaining,
-                                     input_func=mock_raw_input), 'example user response')
+        self.assertEqual(
+            User.prompt(
+                'input',
+                repeat=self.repeats_remaining,
+                input_func=mock_raw_input), 'example user response')
 
     def test_prompt_when_exceeded_repeats(self):
         self.repeats_remaining = 2
@@ -55,18 +57,28 @@
         def mock_raw_input(_):
             self.repeats_remaining -= 1
             return None
-        self.assertIsNone(User.prompt('input', repeat=self.repeats_remaining, input_func=mock_raw_input))
+
+        self.assertIsNone(
+            User.prompt(
+                'input',
+                repeat=self.repeats_remaining,
+                input_func=mock_raw_input))
 
     def test_prompt_with_list(self):
-        def run_prompt_test(inputs, expected_result, can_choose_multiple=False):
+        def run_prompt_test(inputs, expected_result,
+                            can_choose_multiple=False):
             def mock_raw_input(_):
                 return inputs.pop(0)
+
             output_capture = OutputCapture()
             actual_result = output_capture.assert_outputs(
                 self,
                 User.prompt_with_list,
                 args=['title', ['foo', 'bar']],
-                kwargs={'can_choose_multiple': can_choose_multiple, 'input_func': mock_raw_input},
+                kwargs={
+                    'can_choose_multiple': can_choose_multiple,
+                    'input_func': mock_raw_input
+                },
                 expected_stdout='title\n 1. foo\n 2. bar\n')
             self.assertEqual(actual_result, expected_result)
             self.assertEqual(len(inputs), 0)
@@ -75,14 +87,16 @@
         run_prompt_test(['badinput', '2'], 'bar')
 
         run_prompt_test(['1,2'], ['foo', 'bar'], can_choose_multiple=True)
-        run_prompt_test(['  1,  2   '], ['foo', 'bar'], can_choose_multiple=True)
+        run_prompt_test(['  1,  2   '], ['foo', 'bar'],
+                        can_choose_multiple=True)
         run_prompt_test(['all'], ['foo', 'bar'], can_choose_multiple=True)
         run_prompt_test([''], ['foo', 'bar'], can_choose_multiple=True)
         run_prompt_test(['  '], ['foo', 'bar'], can_choose_multiple=True)
-        run_prompt_test(['badinput', 'all'], ['foo', 'bar'], can_choose_multiple=True)
+        run_prompt_test(['badinput', 'all'], ['foo', 'bar'],
+                        can_choose_multiple=True)
 
-    def check_confirm(self, expected_message, expected_out, default, user_input):
-
+    def check_confirm(self, expected_message, expected_out, default,
+                      user_input):
         def mock_raw_input(message):
             self.assertEqual(expected_message, message)
             return user_input
@@ -92,41 +106,63 @@
 
     def test_confirm_input_yes(self):
         self.check_confirm(
-            expected_message='Continue? [Y/n]: ', expected_out=True,
-            default=User.DEFAULT_YES, user_input='y')
+            expected_message='Continue? [Y/n]: ',
+            expected_out=True,
+            default=User.DEFAULT_YES,
+            user_input='y')
         self.check_confirm(
-            expected_message='Continue? [y/N]: ', expected_out=True,
-            default=User.DEFAULT_NO, user_input=' y ')
+            expected_message='Continue? [y/N]: ',
+            expected_out=True,
+            default=User.DEFAULT_NO,
+            user_input=' y ')
         self.check_confirm(
-            expected_message='Continue? [y/N]: ', expected_out=True,
-            default=User.DEFAULT_NO, user_input='yes')
+            expected_message='Continue? [y/N]: ',
+            expected_out=True,
+            default=User.DEFAULT_NO,
+            user_input='yes')
         self.check_confirm(
-            expected_message='Continue? [y/N]: ', expected_out=True,
-            default=User.DEFAULT_NO, user_input='y')
+            expected_message='Continue? [y/N]: ',
+            expected_out=True,
+            default=User.DEFAULT_NO,
+            user_input='y')
 
     def test_confirm_expect_input_no(self):
         self.check_confirm(
-            expected_message='Continue? [Y/n]: ', expected_out=False,
-            default=User.DEFAULT_YES, user_input='n')
+            expected_message='Continue? [Y/n]: ',
+            expected_out=False,
+            default=User.DEFAULT_YES,
+            user_input='n')
         self.check_confirm(
-            expected_message='Continue? [y/N]: ', expected_out=False,
-            default=User.DEFAULT_NO, user_input='n')
+            expected_message='Continue? [y/N]: ',
+            expected_out=False,
+            default=User.DEFAULT_NO,
+            user_input='n')
         self.check_confirm(
-            expected_message='Continue? [y/N]: ', expected_out=False,
-            default=User.DEFAULT_NO, user_input=' no ')
+            expected_message='Continue? [y/N]: ',
+            expected_out=False,
+            default=User.DEFAULT_NO,
+            user_input=' no ')
 
     def test_confirm_use_default(self):
         self.check_confirm(
-            expected_message='Continue? [Y/n]: ', expected_out=True,
-            default=User.DEFAULT_YES, user_input='')
+            expected_message='Continue? [Y/n]: ',
+            expected_out=True,
+            default=User.DEFAULT_YES,
+            user_input='')
         self.check_confirm(
-            expected_message='Continue? [y/N]: ', expected_out=False,
-            default=User.DEFAULT_NO, user_input='')
+            expected_message='Continue? [y/N]: ',
+            expected_out=False,
+            default=User.DEFAULT_NO,
+            user_input='')
 
     def test_confirm_not_y_means_no(self):
         self.check_confirm(
-            expected_message='Continue? [Y/n]: ', expected_out=False,
-            default=User.DEFAULT_YES, user_input='q')
+            expected_message='Continue? [Y/n]: ',
+            expected_out=False,
+            default=User.DEFAULT_YES,
+            user_input='q')
         self.check_confirm(
-            expected_message='Continue? [y/N]: ', expected_out=False,
-            default=User.DEFAULT_NO, user_input='q')
+            expected_message='Continue? [y/N]: ',
+            expected_out=False,
+            default=User.DEFAULT_NO,
+            user_input='q')
diff --git a/third_party/blink/tools/blinkpy/common/unified_diff.py b/third_party/blink/tools/blinkpy/common/unified_diff.py
index 7f0700a..947748c 100644
--- a/third_party/blink/tools/blinkpy/common/unified_diff.py
+++ b/third_party/blink/tools/blinkpy/common/unified_diff.py
@@ -1,13 +1,13 @@
 # Copyright 2016 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.
-
 """A utility function to do text diffs of expected and actual web test results."""
 
 import difflib
 
 
-def unified_diff(expected_text, actual_text, expected_filename, actual_filename):
+def unified_diff(expected_text, actual_text, expected_filename,
+                 actual_filename):
     """Returns a string containing the diff of the two text strings
     in 'unified diff' format.
     """
@@ -18,10 +18,8 @@
     actual_filename = _to_raw_bytes(actual_filename)
 
     diff = difflib.unified_diff(
-        expected_text.splitlines(True),
-        actual_text.splitlines(True),
-        expected_filename,
-        actual_filename)
+        expected_text.splitlines(True), actual_text.splitlines(True),
+        expected_filename, actual_filename)
 
     return ''.join(_diff_fixup(diff))
 
diff --git a/third_party/blink/tools/blinkpy/common/unified_diff_unittest.py b/third_party/blink/tools/blinkpy/common/unified_diff_unittest.py
index 5f9a2dfb..33392a5 100644
--- a/third_party/blink/tools/blinkpy/common/unified_diff_unittest.py
+++ b/third_party/blink/tools/blinkpy/common/unified_diff_unittest.py
@@ -8,7 +8,6 @@
 
 
 class TestUnifiedDiff(unittest.TestCase):
-
     def test_unified_diff(self):
         self.assertEqual(
             unified_diff('foo\n', 'bar\n', 'exp.txt', 'act.txt'),
@@ -16,8 +15,10 @@
 
     def test_unified_diff_missing_newline(self):
         self.assertEqual(
-            unified_diff('Hello\n\nWorld', 'Hello\n\nWorld\n\n\n', 'exp.txt', 'act.txt'),
-            '--- exp.txt\n+++ act.txt\n@@ -1,3 +1,5 @@\n Hello\n \n-World\n\\ No newline at end of file\n+World\n+\n+\n')
+            unified_diff('Hello\n\nWorld', 'Hello\n\nWorld\n\n\n', 'exp.txt',
+                         'act.txt'),
+            '--- exp.txt\n+++ act.txt\n@@ -1,3 +1,5 @@\n Hello\n \n-World\n\\ No newline at end of file\n+World\n+\n+\n'
+        )
 
     def test_unified_diff_handles_unicode_file_names(self):
         # Make sure that we don't run into decoding exceptions when the
@@ -36,4 +37,5 @@
         # encoding (and be stored as str objects), test unicode inputs just to
         # be safe.
         unified_diff(u'exp', 'act', 'exp.txt', 'act.txt')
-        unified_diff(u'a\xac\u1234\u20ac\U00008000', 'act', 'exp.txt', 'act.txt')
+        unified_diff(u'a\xac\u1234\u20ac\U00008000', 'act', 'exp.txt',
+                     'act.txt')
diff --git a/third_party/blink/tools/blinkpy/common/version_check.py b/third_party/blink/tools/blinkpy/common/version_check.py
index b0fe22d..170ff2e6 100644
--- a/third_party/blink/tools/blinkpy/common/version_check.py
+++ b/third_party/blink/tools/blinkpy/common/version_check.py
@@ -29,5 +29,7 @@
 import sys
 
 if sys.version < '2.7' or sys.version >= '2.8':
-    sys.stderr.write("Unsupported Python version: blinkpy requires 2.7.x, and you're running %s.\n" % sys.version.split()[0])
+    sys.stderr.write(
+        "Unsupported Python version: blinkpy requires 2.7.x, and you're running %s.\n"
+        % sys.version.split()[0])
     sys.exit(1)
diff --git a/third_party/blink/tools/blinkpy/formatter/.style.yapf b/third_party/blink/tools/blinkpy/formatter/.style.yapf
new file mode 100644
index 0000000..557fa7b
--- /dev/null
+++ b/third_party/blink/tools/blinkpy/formatter/.style.yapf
@@ -0,0 +1,2 @@
+[style]
+based_on_style = pep8
diff --git a/third_party/blink/tools/blinkpy/formatter/__main__.py b/third_party/blink/tools/blinkpy/formatter/__main__.py
index 4cd49cdf..5eeb6b37 100644
--- a/third_party/blink/tools/blinkpy/formatter/__main__.py
+++ b/third_party/blink/tools/blinkpy/formatter/__main__.py
@@ -6,6 +6,5 @@
 
 from blinkpy.formatter.main import main
 
-
 if __name__ == '__main__':
     sys.exit(main())
diff --git a/third_party/blink/tools/blinkpy/formatter/fix_docstrings.py b/third_party/blink/tools/blinkpy/formatter/fix_docstrings.py
index a955902..d05da25 100644
--- a/third_party/blink/tools/blinkpy/formatter/fix_docstrings.py
+++ b/third_party/blink/tools/blinkpy/formatter/fix_docstrings.py
@@ -1,7 +1,6 @@
 # Copyright 2016 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.
-
 """A 2to3 fixer that reformats docstrings.
 
 This should transform docstrings to be closer to the conventions in pep-0257;
@@ -33,9 +32,8 @@
         """
         # Pylint incorrectly warns that there's no member simple_stmt on python_symbols
         # because the attribute is set dynamically.  pylint: disable=no-member
-        return (node.value.startswith('"""') and
-                node.prev_sibling is None and
-                node.parent.type == python_symbols.simple_stmt)
+        return (node.value.startswith('"""') and node.prev_sibling is None
+                and node.parent.type == python_symbols.simple_stmt)
 
     def transform(self, node, results):
         # First, strip whitespace at the beginning and end.
diff --git a/third_party/blink/tools/blinkpy/formatter/fix_double_quote_strings.py b/third_party/blink/tools/blinkpy/formatter/fix_double_quote_strings.py
index 3167d9b0..edc2bea 100644
--- a/third_party/blink/tools/blinkpy/formatter/fix_double_quote_strings.py
+++ b/third_party/blink/tools/blinkpy/formatter/fix_double_quote_strings.py
@@ -1,7 +1,6 @@
 # Copyright 2014 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.
-
 """A 2to3 fixer that converts all string literals to use double quotes.
 
 Strings that contain double quotes will not be modified. Prefixed string
diff --git a/third_party/blink/tools/blinkpy/formatter/fix_single_quote_strings.py b/third_party/blink/tools/blinkpy/formatter/fix_single_quote_strings.py
index 3d4aa797..4a70e3e 100644
--- a/third_party/blink/tools/blinkpy/formatter/fix_single_quote_strings.py
+++ b/third_party/blink/tools/blinkpy/formatter/fix_single_quote_strings.py
@@ -1,7 +1,6 @@
 # Copyright 2014 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.
-
 """A 2to3 fixer that converts all string literals to use single quotes.
 
 Strings that contain single quotes will not be modified. Prefixed string
@@ -19,7 +18,8 @@
     _accept_type = token.STRING
 
     def match(self, node):
-        res = node.value.startswith('"') and not node.value.startswith('"""') and "'" not in node.value[1:-1]
+        res = (node.value.startswith('"') and not node.value.startswith('"""')
+               and "'" not in node.value[1:-1])
         return res
 
     def transform(self, node, results):
diff --git a/third_party/blink/tools/blinkpy/formatter/main.py b/third_party/blink/tools/blinkpy/formatter/main.py
index d9ed15f..fe65344 100644
--- a/third_party/blink/tools/blinkpy/formatter/main.py
+++ b/third_party/blink/tools/blinkpy/formatter/main.py
@@ -15,20 +15,51 @@
 
 def parse_args(args=None):
     parser = argparse.ArgumentParser()
-    parser.add_argument('--chromium', action='store_const', dest='style', const='chromium', default='blink',
-                        help="Format according to Chromium's Python coding styles instead of Blink's.")
-    parser.add_argument('--no-backups', action='store_false', default=True, dest='backup',
-                        help='Do not back up files before overwriting them.')
-    parser.add_argument('-j', '--jobs', metavar='n', type=int, default=0,
-                        help='Number of parallel jobs; match CPU count if less than 1.')
-    parser.add_argument('files', nargs='*', default=['-'],
-                        help="files to format or '-' for standard in")
-    parser.add_argument('--double-quote-strings', action='store_const', dest='quoting', const='double', default='single',
-                        help='Rewrite string literals to use double quotes instead of single quotes.')
-    parser.add_argument('--no-autopep8', action='store_true',
-                        help='Skip the autopep8 code-formatting step.')
-    parser.add_argument('--leave-strings-alone', action='store_true',
-                        help='Do not reformat string literals to use a consistent quote style.')
+    parser.add_argument(
+        '--chromium',
+        action='store_const',
+        dest='style',
+        const='chromium',
+        default='blink',
+        help=
+        "Format according to Chromium's Python coding styles instead of Blink's."
+    )
+    parser.add_argument(
+        '--no-backups',
+        action='store_false',
+        default=True,
+        dest='backup',
+        help='Do not back up files before overwriting them.')
+    parser.add_argument(
+        '-j',
+        '--jobs',
+        metavar='n',
+        type=int,
+        default=0,
+        help='Number of parallel jobs; match CPU count if less than 1.')
+    parser.add_argument(
+        'files',
+        nargs='*',
+        default=['-'],
+        help="files to format or '-' for standard in")
+    parser.add_argument(
+        '--double-quote-strings',
+        action='store_const',
+        dest='quoting',
+        const='double',
+        default='single',
+        help=
+        'Rewrite string literals to use double quotes instead of single quotes.'
+    )
+    parser.add_argument(
+        '--no-autopep8',
+        action='store_true',
+        help='Skip the autopep8 code-formatting step.')
+    parser.add_argument(
+        '--leave-strings-alone',
+        action='store_true',
+        help='Do not reformat string literals to use a consistent quote style.'
+    )
     return parser.parse_args(args=args)
 
 
@@ -46,13 +77,17 @@
 
     if options.files == ['-']:
         host = host or SystemHost()
-        host.print_(reformat_source(host.stdin.read(), autopep8_options, fixers, '<stdin>'), end='')
+        host.print_(
+            reformat_source(host.stdin.read(), autopep8_options, fixers,
+                            '<stdin>'),
+            end='')
         return
 
     # We create the arglist before checking if we need to create a Host, because a
     # real host is non-picklable and can't be passed to host.executive.map().
 
-    arglist = [(host, name, autopep8_options, fixers, options.backup) for name in options.files]
+    arglist = [(host, name, autopep8_options, fixers, options.backup)
+               for name in options.files]
     host = host or SystemHost()
 
     host.executive.map(_reformat_thunk, arglist, processes=options.jobs)
@@ -61,18 +96,24 @@
 def _autopep8_options_for_style(style):
     return {
         None: [],
-        'blink': autopep8.parse_args([
+        'blink':
+        autopep8.parse_args([
             '--aggressive',
-            '--max-line-length', '132',
+            '--max-line-length',
+            '132',
             '--ignore=E309',
-            '--indent-size', '4',
+            '--indent-size',
+            '4',
             '',
         ]),
-        'chromium': autopep8.parse_args([
+        'chromium':
+        autopep8.parse_args([
             '--aggressive',
-            '--max-line-length', '80',
+            '--max-line-length',
+            '80',
             '--ignore=E309',
-            '--indent-size', '2',
+            '--indent-size',
+            '2',
             '',
         ]),
     }.get(style)
@@ -107,8 +148,8 @@
         tmp_str = autopep8.fix_code(tmp_str, autopep8_options)
 
     if fixers:
-        tool = lib2to3.refactor.RefactoringTool(fixer_names=fixers,
-                                                explicit=fixers)
+        tool = lib2to3.refactor.RefactoringTool(
+            fixer_names=fixers, explicit=fixers)
         tmp_str = unicode(tool.refactor_string(tmp_str, name=name))
 
     return tmp_str
diff --git a/third_party/blink/tools/blinkpy/formatter/main_unittest.py b/third_party/blink/tools/blinkpy/formatter/main_unittest.py
index b67e061..e31e13f 100644
--- a/third_party/blink/tools/blinkpy/formatter/main_unittest.py
+++ b/third_party/blink/tools/blinkpy/formatter/main_unittest.py
@@ -8,7 +8,6 @@
 from blinkpy.common.system.system_host_mock import MockSystemHost
 from blinkpy.formatter.main import main
 
-
 ACTUAL_INPUT = '''
 def foo():
     """triple-quoted docstring"""
@@ -20,7 +19,6 @@
         pass
 '''
 
-
 EXPECTED_BLINK_OUTPUT = '''
 def foo():
     """triple-quoted docstring"""
@@ -35,7 +33,6 @@
         pass
 '''
 
-
 EXPECTED_CHROMIUM_OUTPUT = '''
 def foo():
   """triple-quoted docstring"""
@@ -69,32 +66,33 @@
 
     def test_files_blink(self):
         host = MockSystemHost()
-        host.filesystem.files = {
-            'test.py': ACTUAL_INPUT}
+        host.filesystem.files = {'test.py': ACTUAL_INPUT}
         main(host, ['test.py'])
         self.assertEqual(host.filesystem.files, {
             'test.py': EXPECTED_BLINK_OUTPUT,
-            'test.py.bak': ACTUAL_INPUT})
+            'test.py.bak': ACTUAL_INPUT
+        })
 
     def test_files_blink_no_backup(self):
         host = MockSystemHost()
-        host.filesystem.files = {
-            'test.py': ACTUAL_INPUT}
+        host.filesystem.files = {'test.py': ACTUAL_INPUT}
         main(host, ['--no-backups', 'test.py'])
-        self.assertEqual(host.filesystem.files, {
-            'test.py': EXPECTED_BLINK_OUTPUT})
+        self.assertEqual(host.filesystem.files,
+                         {'test.py': EXPECTED_BLINK_OUTPUT})
 
     def test_stdin_blink(self):
         host = MockSystemHost()
         host.stdin = StringIO.StringIO(ACTUAL_INPUT)
         main(host, ['-'])
-        self.assertMultiLineEqual(host.stdout.getvalue(), EXPECTED_BLINK_OUTPUT)
+        self.assertMultiLineEqual(host.stdout.getvalue(),
+                                  EXPECTED_BLINK_OUTPUT)
 
     def test_stdin_chromium(self):
         host = MockSystemHost()
         host.stdin = StringIO.StringIO(ACTUAL_INPUT)
         main(host, ['--chromium', '-'])
-        self.assertMultiLineEqual(host.stdout.getvalue(), EXPECTED_CHROMIUM_OUTPUT)
+        self.assertMultiLineEqual(host.stdout.getvalue(),
+                                  EXPECTED_CHROMIUM_OUTPUT)
 
     def test_stdin_no_changes(self):
         host = MockSystemHost()
@@ -106,7 +104,8 @@
         host = MockSystemHost()
         host.stdin = StringIO.StringIO(ACTUAL_INPUT)
         main(host, ['--no-autopep8', '--double-quote-strings', '-'])
-        self.assertMultiLineEqual(host.stdout.getvalue(), EXPECTED_ONLY_DOUBLE_QUOTED_OUTPUT)
+        self.assertMultiLineEqual(host.stdout.getvalue(),
+                                  EXPECTED_ONLY_DOUBLE_QUOTED_OUTPUT)
 
     def test_format_docstrings(self):
         host = MockSystemHost()
@@ -123,7 +122,8 @@
     return x
 ''')
         main(host, ['-'])
-        self.assertMultiLineEqual(host.stdout.getvalue(), '''
+        self.assertMultiLineEqual(
+            host.stdout.getvalue(), '''
 def f():
     """triple-quoted docstring
     with multiple lines
@@ -144,7 +144,8 @@
      """
 ''')
         main(host, ['-'])
-        self.assertMultiLineEqual(host.stdout.getvalue(), '''
+        self.assertMultiLineEqual(
+            host.stdout.getvalue(), '''
 def f():
     """This is a docstring
        With extra indentation on this line.
diff --git a/third_party/blink/tools/blinkpy/presubmit/.style.yapf b/third_party/blink/tools/blinkpy/presubmit/.style.yapf
new file mode 100644
index 0000000..557fa7b
--- /dev/null
+++ b/third_party/blink/tools/blinkpy/presubmit/.style.yapf
@@ -0,0 +1,2 @@
+[style]
+based_on_style = pep8
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 86d8c48..4414842 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
@@ -2,7 +2,6 @@
 # Copyright 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-
 """Utilities for checking for disallowed usage of non-Blink declarations.
 
 The scanner assumes that usage of non-Blink code is always namespace qualified.
@@ -449,11 +448,13 @@
             'base::(scoped_nsobject|ScopedCFTypeRef)',
         ],
         'disallowed': [
-            ('base::Bind(|Once|Repeating)', 'Use WTF::Bind or WTF::BindRepeating.'),
+            ('base::Bind(|Once|Repeating)',
+             'Use WTF::Bind or WTF::BindRepeating.'),
             ('std::(deque|map|multimap|set|vector|unordered_set|unordered_map)',
              'Use WTF containers like WTF::Deque, WTF::HashMap, WTF::HashSet or WTF::Vector instead of the banned std containers. '
              'However, it is fine to use std containers at the boundary layer between Blink and Chromium. '
-             'If you are in this case, you can use --bypass-hooks option to avoid the presubmit check when uploading your CL.'),
+             'If you are in this case, you can use --bypass-hooks option to avoid the presubmit check when uploading your CL.'
+             ),
             # network::mojom::Foo is allowed to use as non-blink mojom type.
             ('(|::)(?!network::)(\w+::)?mojom::(?!blink).+',
              'Using non-blink mojom types, consider using "::mojom::blink::Foo" instead of "::mojom::Foo" unless you have clear reasons not to do so',
@@ -465,7 +466,8 @@
         'allowed': ['gin::.+'],
     },
     {
-        'paths': ['third_party/blink/renderer/bindings/core/v8/script_streamer.cc'],
+        'paths':
+        ['third_party/blink/renderer/bindings/core/v8/script_streamer.cc'],
         'allowed': [
             # For the script streaming to be able to block when reading from a
             # mojo datapipe.
@@ -475,20 +477,25 @@
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/bindings/core/v8/v8_gc_for_context_dispose.cc'],
+        'paths': [
+            'third_party/blink/renderer/bindings/core/v8/v8_gc_for_context_dispose.cc'
+        ],
         'allowed': [
             # For memory reduction histogram.
             'base::ProcessMetrics',
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/controller/oom_intervention_impl.cc'],
+        'paths':
+        ['third_party/blink/renderer/controller/oom_intervention_impl.cc'],
         'allowed': [
             'base::BindOnce',
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.cc'],
+        'paths': [
+            'third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.cc'
+        ],
         'allowed': [
             'base::MemoryPressureListener',
         ],
@@ -500,9 +507,11 @@
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/animation_frame',
-                  'third_party/blink/renderer/core/offscreencanvas',
-                  'third_party/blink/renderer/core/html/canvas'],
+        'paths': [
+            'third_party/blink/renderer/core/animation_frame',
+            'third_party/blink/renderer/core/offscreencanvas',
+            'third_party/blink/renderer/core/html/canvas'
+        ],
         'allowed': [
             'viz::BeginFrameArgs',
         ],
@@ -532,27 +541,33 @@
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/fetch/data_consumer_handle_test_util.cc'],
+        'paths': [
+            'third_party/blink/renderer/core/fetch/data_consumer_handle_test_util.cc'
+        ],
         'allowed': [
             # The existing code already contains gin::IsolateHolder.
             'gin::IsolateHolder',
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/frame/web_frame_widget_base.cc'],
+        'paths':
+        ['third_party/blink/renderer/core/frame/web_frame_widget_base.cc'],
         'allowed': [
             'cc::SwapPromise',
             'viz::CompositorFrameMetadata',
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/fileapi/file_reader_loader.cc'],
+        'paths':
+        ['third_party/blink/renderer/core/fileapi/file_reader_loader.cc'],
         'allowed': [
             'net::ERR_FILE_NOT_FOUND',
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/loader/alternate_signed_exchange_resource_info.cc'],
+        'paths': [
+            'third_party/blink/renderer/core/loader/alternate_signed_exchange_resource_info.cc'
+        ],
         'allowed': [
             # Used by WebPackageRequestMatcher in //third_party/blink/common.
             'net::HttpRequestHeaders',
@@ -593,7 +608,9 @@
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/inspector/inspector_memory_agent.cc'],
+        'paths': [
+            'third_party/blink/renderer/core/inspector/inspector_memory_agent.cc'
+        ],
         'allowed': [
             'base::ModuleCache',
             'base::PoissonAllocationSampler',
@@ -601,7 +618,9 @@
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc'],
+        'paths': [
+            'third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc'
+        ],
         'allowed': [
             # cc painting types.
             'cc::ContentLayerClient',
@@ -610,7 +629,8 @@
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/inspector/locale_controller.cc'],
+        'paths':
+        ['third_party/blink/renderer/core/inspector/locale_controller.cc'],
         'allowed': [
             'base::i18n::SetICUDefaultLocale',
         ],
@@ -627,13 +647,16 @@
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/inspector/inspector_performance_agent.cc'],
+        'paths': [
+            'third_party/blink/renderer/core/inspector/inspector_performance_agent.cc'
+        ],
         'allowed': [
             'base::subtle::TimeTicksNowIgnoringOverride',
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/scroll/scrollbar_theme_mac.mm'],
+        'paths':
+        ['third_party/blink/renderer/core/scroll/scrollbar_theme_mac.mm'],
         'allowed': [
             'gfx::CocoaScrollbarPainter',
         ],
@@ -704,7 +727,7 @@
             'third_party/blink/renderer/modules/encryptedmedia/',
             'third_party/blink/renderer/modules/media/',
             'third_party/blink/renderer/modules/media_capabilities/',
-            'third_party/blink/renderer/modules/video_raf/',
+            'third_party/blink/renderer/modules/video_rvfc/',
         ],
         'allowed': [
             'media::.+',
@@ -1009,15 +1032,19 @@
         ],
     },
     {
-        'paths': ['third_party/blink/renderer/core/fetch/fetch_request_data.cc'],
+        'paths':
+        ['third_party/blink/renderer/core/fetch/fetch_request_data.cc'],
         'allowed': ['net::RequestPriority'],
     },
     {
         'paths': ['third_party/blink/renderer/core/frame/local_frame_view.cc'],
-        'allowed': ['cc::frame_viewer_instrumentation::IsTracingLayerTreeSnapshots'],
+        'allowed':
+        ['cc::frame_viewer_instrumentation::IsTracingLayerTreeSnapshots'],
     },
     {
-        'paths': ['third_party/blink/renderer/modules/webaudio/audio_worklet_thread.cc'],
+        'paths': [
+            'third_party/blink/renderer/modules/webaudio/audio_worklet_thread.cc'
+        ],
         'allowed': ['base::ThreadPriority'],
     },
     {
@@ -1058,7 +1085,8 @@
                 else:
                     match, advice, warning = entry
                 match_list.append(match)
-                advice_list.append((compile_regexp(match, False), advice, warning == 'Warning'))
+                advice_list.append((compile_regexp(match, False), advice,
+                                    warning == 'Warning'))
             else:
                 # Just a string
                 match_list.append(entry)
@@ -1068,10 +1096,14 @@
     for raw_entry in _CONFIG:
         disallowed, advice = compile_disallowed(raw_entry.get('disallowed'))
         compiled_config.append({
-            'paths': raw_entry['paths'],
-            'allowed': compile_regexp(raw_entry.get('allowed')),
-            'disallowed': disallowed,
-            'advice': advice,
+            'paths':
+            raw_entry['paths'],
+            'allowed':
+            compile_regexp(raw_entry.get('allowed')),
+            'disallowed':
+            disallowed,
+            'advice':
+            advice,
         })
     return compiled_config
 
@@ -1133,6 +1165,7 @@
 
 class BadIdentifier(object):
     """Represents a single instance of a bad identifier."""
+
     def __init__(self, identifier, line, advice=None, warning=False):
         self.identifier = identifier
         self.line = line
@@ -1155,13 +1188,10 @@
     path = path.replace('\\', '/')
     basename, ext = os.path.splitext(path)
     # Only check code. Ignore tests and fuzzers.
-    if (ext not in ('.cc', '.cpp', '.h', '.mm')
-            or path.find('/testing/') >= 0
-            or path.find('/tests/') >= 0
-            or basename.endswith('_test')
+    if (ext not in ('.cc', '.cpp', '.h', '.mm') or path.find('/testing/') >= 0
+            or path.find('/tests/') >= 0 or basename.endswith('_test')
             or basename.endswith('_test_helpers')
-            or basename.endswith('_unittest')
-            or basename.endswith('_fuzzer')):
+            or basename.endswith('_unittest') or basename.endswith('_fuzzer')):
         return results
     entries = _find_matching_entries(path)
     if not entries:
@@ -1174,7 +1204,8 @@
         if match:
             identifier = match.group(0)
             if not _check_entries_for_identifier(entries, identifier):
-                advice, warning = _find_advice_for_identifier(entries, identifier)
+                advice, warning = _find_advice_for_identifier(
+                    entries, identifier)
                 results.append(
                     BadIdentifier(identifier, line_number, advice, warning))
     return results
@@ -1185,13 +1216,13 @@
         try:
             with open(path, 'r') as f:
                 contents = f.read()
-                disallowed_identifiers = check(path, [
-                    (i + 1, l) for i, l in
-                    enumerate(contents.splitlines())])
+                disallowed_identifiers = check(
+                    path,
+                    [(i + 1, l) for i, l in enumerate(contents.splitlines())])
                 if disallowed_identifiers:
                     print '%s uses disallowed identifiers:' % path
                     for i in disallowed_identifiers:
-                        print (i.line, i.identifier, i.advice)
+                        print(i.line, i.identifier, i.advice)
         except IOError as e:
             print 'could not open %s: %s' % (path, e)
 
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage_test.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage_test.py
index e35bf8c..4f14208 100755
--- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage_test.py
+++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage_test.py
@@ -31,19 +31,42 @@
         for entry in audit_non_blink_usage._COMPILED_CONFIG:
             if entry['paths'] == ['third_party/blink/renderer/']:
                 check_list = [
-                    {'type': 'url::mojom::Origin', 'allowed': False},
-                    {'type': '::media::mojom::InterfaceFactory', 'allowed': False},
-                    {'type': 'Hogenetwork::mojom::URLLoaderFactory', 'allowed': False},
-                    {'type': 'url::mojom::blink::Origin', 'allowed': True},
-                    {'type': '::media::mojom::blink::InterfaceFactory', 'allowed': True},
-                    {'type': 'network::mojom::URLLoaderFactory', 'allowed': True},
-                    {'type': '::network::mojom::URLLoaderFactory', 'allowed': True},
+                    {
+                        'type': 'url::mojom::Origin',
+                        'allowed': False
+                    },
+                    {
+                        'type': '::media::mojom::InterfaceFactory',
+                        'allowed': False
+                    },
+                    {
+                        'type': 'Hogenetwork::mojom::URLLoaderFactory',
+                        'allowed': False
+                    },
+                    {
+                        'type': 'url::mojom::blink::Origin',
+                        'allowed': True
+                    },
+                    {
+                        'type': '::media::mojom::blink::InterfaceFactory',
+                        'allowed': True
+                    },
+                    {
+                        'type': 'network::mojom::URLLoaderFactory',
+                        'allowed': True
+                    },
+                    {
+                        'type': '::network::mojom::URLLoaderFactory',
+                        'allowed': True
+                    },
                 ]
                 for item in check_list:
                     if item['allowed']:
-                        self.assertIsNone(re.match(entry['disallowed'], item['type']))
+                        self.assertIsNone(
+                            re.match(entry['disallowed'], item['type']))
                     elif not item['allowed']:
-                        self.assertIsNotNone(re.match(entry['disallowed'], item['type']))
+                        self.assertIsNotNone(
+                            re.match(entry['disallowed'], item['type']))
 
 
 if __name__ == '__main__':
diff --git a/third_party/blink/tools/blinkpy/style/.style.yapf b/third_party/blink/tools/blinkpy/style/.style.yapf
new file mode 100644
index 0000000..557fa7b
--- /dev/null
+++ b/third_party/blink/tools/blinkpy/style/.style.yapf
@@ -0,0 +1,2 @@
+[style]
+based_on_style = pep8
diff --git a/third_party/blink/tools/blinkpy/style/checker.py b/third_party/blink/tools/blinkpy/style/checker.py
index 6c0bcfc..8d1d82c 100644
--- a/third_party/blink/tools/blinkpy/style/checker.py
+++ b/third_party/blink/tools/blinkpy/style/checker.py
@@ -27,7 +27,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Front end of some style-checker modules."""
 
 import logging
@@ -51,15 +50,12 @@
 from blinkpy.style.optparser import ArgumentParser
 from blinkpy.style.optparser import DefaultCommandOptionValues
 
-
 _log = logging.getLogger(__name__)
 
-
 # These are default option values for the command-line option parser.
 _DEFAULT_MIN_CONFIDENCE = 1
 _DEFAULT_OUTPUT_FORMAT = 'emacs'
 
-
 # FIXME: For style categories we will never want to have, remove them.
 #        For categories for which we want to have similar functionality,
 #        modify the implementation and enable them.
@@ -102,7 +98,6 @@
     # output.
 ]
 
-
 # The path-specific filter rules.
 #
 # This list is order sensitive.  Only the first path substring match
@@ -120,31 +115,34 @@
     #   No trailing white space: since this is easy to correct.
     #   No carriage-return line endings: since this is easy to correct.
     #
-    (['blinkpy/third_party/'],
-     ['-',
-      '+pep8/W191',  # Tabs
-      '+pep8/W291',  # Trailing white space
-      '+whitespace/carriage_return']),
-
-    ([  # IDL compiler reference output
-        # Conforming to style significantly increases the complexity of the code
-        # generator and decreases *its* readability, which is of more concern
-        # than style of the machine-generated code itself.
-        'renderer/bindings/tests/results'],
-     ['-']),
-
-    ([  # Due to historical reasons scheduler uses Chromium style instead of
-        # Blink style.
-        'renderer/platform/scheduler',
-        'public/platform/scheduler'],
-     ['-readability/control_flow']),
+    (
+        ['blinkpy/third_party/'],
+        [
+            '-',
+            '+pep8/W191',  # Tabs
+            '+pep8/W291',  # Trailing white space
+            '+whitespace/carriage_return'
+        ]),
+    (
+        [  # IDL compiler reference output
+            # Conforming to style significantly increases the complexity of the code
+            # generator and decreases *its* readability, which is of more concern
+            # than style of the machine-generated code itself.
+            'renderer/bindings/tests/results'
+        ],
+        ['-']),
+    (
+        [  # Due to historical reasons scheduler uses Chromium style instead of
+            # Blink style.
+            'renderer/platform/scheduler',
+            'public/platform/scheduler'
+        ],
+        ['-readability/control_flow']),
 
     # perf_tests contains a lot of third-party files.
-    (['perf_tests/'],
-     ['-whitespace/tab'])
+    (['perf_tests/'], ['-whitespace/tab'])
 ]
 
-
 _CPP_FILE_EXTENSIONS = [
     'c',
     'cc',
@@ -191,7 +189,8 @@
 # with FileType.NONE are automatically skipped without warning.
 _SKIPPED_FILES_WITHOUT_WARNING = [
     'web_tests' + os.path.sep,
-    'third_party' + os.path.sep + 'blink' + os.path.sep + 'renderer' + os.path.sep + 'devtools' + os.path.sep + 'protocol.json',
+    'third_party' + os.path.sep + 'blink' + os.path.sep + 'renderer' +
+    os.path.sep + 'devtools' + os.path.sep + 'protocol.json',
 ]
 
 # Extensions of files which are allowed to contain carriage returns.
@@ -203,9 +202,7 @@
 
 # The maximum number of errors to report per file, per category.
 # If a category is not a key, then it has no maximum.
-_MAX_REPORTS_PER_CATEGORY = {
-    'whitespace/carriage_return': 1
-}
+_MAX_REPORTS_PER_CATEGORY = {'whitespace/carriage_return': 1}
 
 
 def _all_categories():
@@ -228,17 +225,19 @@
 
 def _check_blink_style_defaults():
     """Return the default command-line options for check_blink_style.py."""
-    return DefaultCommandOptionValues(min_confidence=_DEFAULT_MIN_CONFIDENCE,
-                                      output_format=_DEFAULT_OUTPUT_FORMAT)
+    return DefaultCommandOptionValues(
+        min_confidence=_DEFAULT_MIN_CONFIDENCE,
+        output_format=_DEFAULT_OUTPUT_FORMAT)
 
 
 # This function assists in optparser not having to import from checker.
 def check_blink_style_parser():
     all_categories = _all_categories()
     default_options = _check_blink_style_defaults()
-    return ArgumentParser(all_categories=all_categories,
-                          base_filter_rules=_BASE_FILTER_RULES,
-                          default_options=default_options)
+    return ArgumentParser(
+        all_categories=all_categories,
+        base_filter_rules=_BASE_FILTER_RULES,
+        default_options=default_options)
 
 
 def check_blink_style_configuration(options):
@@ -252,11 +251,12 @@
         path_specific=_PATH_RULES_SPECIFIER,
         user_rules=options.filter_rules)
 
-    return StyleProcessorConfiguration(filter_configuration=filter_configuration,
-                                       max_reports_per_category=_MAX_REPORTS_PER_CATEGORY,
-                                       min_confidence=options.min_confidence,
-                                       output_format=options.output_format,
-                                       stderr_write=sys.stderr.write)
+    return StyleProcessorConfiguration(
+        filter_configuration=filter_configuration,
+        max_reports_per_category=_MAX_REPORTS_PER_CATEGORY,
+        min_confidence=options.min_confidence,
+        output_format=options.output_format,
+        stderr_write=sys.stderr.write)
 
 
 def _create_log_handlers(stream):
@@ -338,8 +338,8 @@
         logging_level = logging.INFO
         handlers = _create_log_handlers(stream)
 
-    handlers = _configure_logging(logging_level=logging_level, logger=logger,
-                                  handlers=handlers)
+    handlers = _configure_logging(
+        logging_level=logging_level, logger=logger, handlers=handlers)
 
     return handlers
 
@@ -361,7 +361,6 @@
 
 
 class CheckerDispatcher(object):
-
     """Supports determining whether and how to check style, based on path."""
 
     def _file_extension(self, file_path):
@@ -397,7 +396,8 @@
         return False
 
     def should_check_and_strip_carriage_returns(self, file_path):
-        return self._file_extension(file_path) not in _CARRIAGE_RETURN_ALLOWED_FILE_EXTENSIONS
+        return (self._file_extension(file_path) not in
+                _CARRIAGE_RETURN_ALLOWED_FILE_EXTENSIONS)
 
     def _file_type(self, file_path):
         """Return the file type corresponding to the given file."""
@@ -421,7 +421,8 @@
             return FileType.XCODEPROJ
         elif file_extension == _PNG_FILE_EXTENSION:
             return FileType.PNG
-        elif file_extension in _TEXT_FILE_EXTENSIONS or os.path.basename(file_path) == 'TestExpectations':
+        elif (file_extension in _TEXT_FILE_EXTENSIONS
+              or os.path.basename(file_path) == 'TestExpectations'):
             return FileType.TEXT
         else:
             return FileType.NONE
@@ -433,8 +434,8 @@
             checker = None
         elif file_type == FileType.CPP:
             file_extension = self._file_extension(file_path)
-            checker = CppChecker(file_path, file_extension,
-                                 handle_style_error, min_confidence)
+            checker = CppChecker(file_path, file_extension, handle_style_error,
+                                 min_confidence)
         elif file_type == FileType.JSON:
             checker = JSONChecker(file_path, handle_style_error)
         elif file_type == FileType.PYTHON:
@@ -448,16 +449,19 @@
         elif file_type == FileType.TEXT:
             basename = os.path.basename(file_path)
             if basename == 'TestExpectations':
-                checker = TestExpectationsChecker(file_path, handle_style_error)
+                checker = TestExpectationsChecker(file_path,
+                                                  handle_style_error)
             else:
                 checker = TextChecker(file_path, handle_style_error)
         else:
-            raise ValueError('Invalid file type "%(file_type)s": the only valid file types '
-                             'are %(NONE)s, %(CPP)s, and %(TEXT)s.'
-                             % {'file_type': file_type,
-                                'NONE': FileType.NONE,
-                                'CPP': FileType.CPP,
-                                'TEXT': FileType.TEXT})
+            raise ValueError(
+                'Invalid file type "%(file_type)s": the only valid file types '
+                'are %(NONE)s, %(CPP)s, and %(TEXT)s.' % {
+                    'file_type': file_type,
+                    'NONE': FileType.NONE,
+                    'CPP': FileType.CPP,
+                    'TEXT': FileType.TEXT
+                })
 
         return checker
 
@@ -465,17 +469,14 @@
         """Instantiate and return a style checker based on file path."""
         file_type = self._file_type(file_path)
 
-        checker = self._create_checker(file_type,
-                                       file_path,
-                                       handle_style_error,
-                                       min_confidence)
+        checker = self._create_checker(file_type, file_path,
+                                       handle_style_error, min_confidence)
         return checker
 
 
 # FIXME: Remove the stderr_write attribute from this class and replace
 #        its use with calls to a logging module logger.
 class StyleProcessorConfiguration(object):
-
     """Stores configuration values for the StyleProcessor class.
 
     Attributes:
@@ -489,12 +490,8 @@
                     serves as stderr.write.
     """
 
-    def __init__(self,
-                 filter_configuration,
-                 max_reports_per_category,
-                 min_confidence,
-                 output_format,
-                 stderr_write):
+    def __init__(self, filter_configuration, max_reports_per_category,
+                 min_confidence, output_format, stderr_write):
         """Create a StyleProcessorConfiguration instance.
 
         Args:
@@ -542,27 +539,19 @@
 
         return self._filter_configuration.should_check(category, file_path)
 
-    def write_style_error(self,
-                          category,
-                          confidence_in_error,
-                          file_path,
-                          line_number,
-                          message):
+    def write_style_error(self, category, confidence_in_error, file_path,
+                          line_number, message):
         """Write a style error to the configured stderr."""
         if self._output_format == 'vs7':
             format_string = '%s(%s):  %s  [%s] [%d]\n'
         else:
             format_string = '%s:%s:  %s  [%s] [%d]\n'
 
-        self.stderr_write(format_string % (file_path,
-                                           line_number,
-                                           message,
-                                           category,
-                                           confidence_in_error))
+        self.stderr_write(format_string % (file_path, line_number, message,
+                                           category, confidence_in_error))
 
 
 class ProcessorBase(object):
-
     """The base class for processors of lists of lines."""
 
     def should_process(self, file_path):
@@ -592,7 +581,6 @@
 
 
 class StyleProcessor(ProcessorBase):
-
     """A ProcessorBase for checking style.
 
     Attributes:
@@ -600,7 +588,9 @@
                    errors for the lifetime of this instance.
     """
 
-    def __init__(self, configuration, mock_dispatcher=None,
+    def __init__(self,
+                 configuration,
+                 mock_dispatcher=None,
                  mock_increment_error_count=None,
                  mock_carriage_checker_class=None):
         """Create an instance.
@@ -679,12 +669,12 @@
             lines = carriage_checker.check(lines)
 
         min_confidence = self._configuration.min_confidence
-        checker = self._dispatcher.dispatch(file_path,
-                                            style_error_handler,
+        checker = self._dispatcher.dispatch(file_path, style_error_handler,
                                             min_confidence)
 
         if checker is None:
-            raise AssertionError("File should not be checked: '%s'" % file_path)
+            raise AssertionError(
+                "File should not be checked: '%s'" % file_path)
 
         _log.debug('Using class: ' + checker.__class__.__name__)
 
diff --git a/third_party/blink/tools/blinkpy/style/checker_unittest.py b/third_party/blink/tools/blinkpy/style/checker_unittest.py
index ba36947..fc987c91 100644
--- a/third_party/blink/tools/blinkpy/style/checker_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/checker_unittest.py
@@ -30,7 +30,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit tests for style.py."""
 
 import logging
@@ -63,7 +62,6 @@
 
 
 class ConfigureLoggingTestBase(unittest.TestCase):
-
     """Base class for testing configure_logging().
 
     Sub-classes should implement:
@@ -88,8 +86,8 @@
         # the root logger).
         logger.propagate = False
 
-        self._handlers = configure_logging(stream=log_stream, logger=logger,
-                                           is_verbose=is_verbose)
+        self._handlers = configure_logging(
+            stream=log_stream, logger=logger, is_verbose=is_verbose)
         self._log = logger
         self._log_stream = log_stream
 
@@ -109,7 +107,6 @@
 
 
 class ConfigureLoggingTest(ConfigureLoggingTestBase):
-
     """Tests the configure_logging() function."""
 
     is_verbose = False
@@ -137,7 +134,6 @@
 
 
 class ConfigureLoggingVerboseTest(ConfigureLoggingTestBase):
-
     """Tests the configure_logging() function with is_verbose True."""
 
     is_verbose = True
@@ -148,7 +144,6 @@
 
 
 class GlobalVariablesTest(unittest.TestCase):
-
     """Tests validity of the global variables."""
 
     def _all_categories(self):
@@ -180,9 +175,10 @@
 
         # FIXME: We should not need to call parse() to determine
         #        whether the default arguments are valid.
-        parser = ArgumentParser(all_categories=self._all_categories(),
-                                base_filter_rules=[],
-                                default_options=default_options)
+        parser = ArgumentParser(
+            all_categories=self._all_categories(),
+            base_filter_rules=[],
+            default_options=default_options)
         # No need to test the return value here since we test parse()
         # on valid arguments elsewhere.
         #
@@ -201,14 +197,12 @@
 
         def assert_no_check(path, category):
             """Assert that the given category should not be checked."""
-            message = ('Should not check category "%s" for path "%s".'
-                       % (category, path))
+            message = ('Should not check category "%s" for path "%s".' %
+                       (category, path))
             self.assertFalse(config.should_check(category, path), message)
 
-        assert_check("random_path.cpp",
-                    "build/include")
-        assert_check("random_path.cpp",
-                    "readability/naming")
+        assert_check("random_path.cpp", "build/include")
+        assert_check("random_path.cpp", "readability/naming")
 
         # Third-party Python code: blinkpy/third_party
         path = "tools/blinkpy/third_party/mock.py"
@@ -227,7 +221,6 @@
 
 
 class CheckBlinkStyleFunctionTest(unittest.TestCase):
-
     """Tests the functions with names of the form check_blink_style_*."""
 
     def test_check_blink_style_configuration(self):
@@ -241,7 +234,6 @@
 
 
 class CheckerDispatcherSkipTest(unittest.TestCase):
-
     """Tests the "should skip" methods of the CheckerDispatcher class."""
 
     def setUp(self):
@@ -250,44 +242,41 @@
     def _assert_should_skip_without_warning(self, path, is_checker_none,
                                             expected):
         # Check the file type before asserting the return value.
-        checker = self._dispatcher.dispatch(file_path=path,
-                                            handle_style_error=None,
-                                            min_confidence=3)
+        checker = self._dispatcher.dispatch(
+            file_path=path, handle_style_error=None, min_confidence=3)
         message = 'while checking: %s' % path
         self.assertEqual(checker is None, is_checker_none, message)
-        self.assertEqual(self._dispatcher.should_skip_without_warning(path),
-                         expected, message)
+        self.assertEqual(
+            self._dispatcher.should_skip_without_warning(path), expected,
+            message)
 
     def test_should_skip_without_warning__true(self):
         """Test should_skip_without_warning() for True return values."""
         # Check a file with NONE file type.
         path = 'foo.asdf'  # Non-sensical file extension.
-        self._assert_should_skip_without_warning(path,
-                                                 is_checker_none=True,
-                                                 expected=True)
+        self._assert_should_skip_without_warning(
+            path, is_checker_none=True, expected=True)
 
         # Check files with non-NONE file type.  These examples must be
         # drawn from the _SKIPPED_FILES_WITHOUT_WARNING configuration
         # variable.
         path = os.path.join('web_tests', 'foo.txt')
-        self._assert_should_skip_without_warning(path,
-                                                 is_checker_none=False,
-                                                 expected=True)
+        self._assert_should_skip_without_warning(
+            path, is_checker_none=False, expected=True)
 
     def test_should_skip_without_warning__false(self):
         """Test should_skip_without_warning() for False return values."""
-        paths = ['foo.txt',
-                 os.path.join('web_tests', 'TestExpectations'),
-                 ]
+        paths = [
+            'foo.txt',
+            os.path.join('web_tests', 'TestExpectations'),
+        ]
 
         for path in paths:
-            self._assert_should_skip_without_warning(path,
-                                                     is_checker_none=False,
-                                                     expected=False)
+            self._assert_should_skip_without_warning(
+                path, is_checker_none=False, expected=False)
 
 
 class CheckerDispatcherCarriageReturnTest(unittest.TestCase):
-
     def test_should_check_and_strip_carriage_returns(self):
         files = {
             'foo.txt': True,
@@ -298,21 +287,21 @@
 
         dispatcher = CheckerDispatcher()
         for file_path, expected_result in files.items():
-            self.assertEqual(dispatcher.should_check_and_strip_carriage_returns(
-                file_path), expected_result, 'Checking: %s' % file_path)
+            self.assertEqual(
+                dispatcher.should_check_and_strip_carriage_returns(file_path),
+                expected_result, 'Checking: %s' % file_path)
 
 
 class CheckerDispatcherDispatchTest(unittest.TestCase):
-
     """Tests dispatch() method of CheckerDispatcher class."""
 
     def dispatch(self, file_path):
         """Call dispatch() with the given file path."""
         dispatcher = CheckerDispatcher()
-        self.mock_handle_style_error = DefaultStyleErrorHandler('', None, None, [])
-        checker = dispatcher.dispatch(file_path,
-                                      self.mock_handle_style_error,
-                                      min_confidence=3)
+        self.mock_handle_style_error = DefaultStyleErrorHandler(
+            '', None, None, [])
+        checker = dispatcher.dispatch(
+            file_path, self.mock_handle_style_error, min_confidence=3)
         return checker
 
     def assert_checker_none(self, file_path):
@@ -324,12 +313,14 @@
         """Assert the type of the dispatched checker."""
         checker = self.dispatch(file_path)
         got_class = checker.__class__
-        self.assertEqual(got_class, expected_class,
-                         'For path "%(file_path)s" got %(got_class)s when '
-                         "expecting %(expected_class)s."
-                         % {"file_path": file_path,
-                             "got_class": got_class,
-                             "expected_class": expected_class})
+        self.assertEqual(
+            got_class, expected_class,
+            'For path "%(file_path)s" got %(got_class)s when '
+            "expecting %(expected_class)s." % {
+                "file_path": file_path,
+                "got_class": got_class,
+                "expected_class": expected_class
+            })
 
     def assert_checker_cpp(self, file_path):
         """Assert that the dispatched checker is a CppChecker."""
@@ -372,7 +363,8 @@
         checker = self.dispatch(file_path)
         self.assertEqual(checker.file_extension, file_extension)
         self.assertEqual(checker.file_path, file_path)
-        self.assertEqual(checker.handle_style_error, self.mock_handle_style_error)
+        self.assertEqual(checker.handle_style_error,
+                         self.mock_handle_style_error)
         self.assertEqual(checker.min_confidence, 3)
         # Check "-" for good measure.
         file_base = "-"
@@ -442,7 +434,8 @@
             "foo.txt",
             "foo.xhtml",
             "foo.y",
-            os.path.join("Source", "WebCore", "inspector", "front-end", "Main.js"),
+            os.path.join("Source", "WebCore", "inspector", "front-end",
+                         "Main.js"),
         ]
 
         for path in paths:
@@ -455,7 +448,8 @@
         self.assert_checker_text(file_path)
         checker = self.dispatch(file_path)
         self.assertEqual(checker.file_path, file_path)
-        self.assertEqual(checker.handle_style_error, self.mock_handle_style_error)
+        self.assertEqual(checker.handle_style_error,
+                         self.mock_handle_style_error)
 
     def test_xml_paths(self):
         """Test paths that should be checked as XML."""
@@ -489,11 +483,11 @@
 
 
 class StyleProcessorConfigurationTest(unittest.TestCase):
-
     """Tests the StyleProcessorConfiguration class."""
 
     def setUp(self):
-        self._error_messages = []  # The messages written to _mock_stderr_write() of this class.
+        # The messages written to _mock_stderr_write() of this class.
+        self._error_messages = []
 
     def _mock_stderr_write(self, message):
         self._error_messages.append(message)
@@ -534,11 +528,12 @@
 
     def _call_write_style_error(self, output_format):
         config = self._style_checker_configuration(output_format=output_format)
-        config.write_style_error(category="whitespace/tab",
-                                 confidence_in_error=5,
-                                 file_path="foo.h",
-                                 line_number=100,
-                                 message="message")
+        config.write_style_error(
+            category="whitespace/tab",
+            confidence_in_error=5,
+            file_path="foo.h",
+            line_number=100,
+            message="message")
 
     def test_write_style_error_emacs(self):
         """Test the write_style_error() method."""
@@ -554,7 +549,6 @@
 
 
 class StyleProcessor_EndToEndTest(LoggingTestCase):
-
     """Test the StyleProcessor class with an emphasis on end-to-end tests."""
 
     def setUp(self):
@@ -587,23 +581,23 @@
             stderr_write=self._mock_stderr_write)
         processor = StyleProcessor(configuration)
 
-        processor.process(lines=['line1', 'Line with tab:\t'],
-                          file_path='foo.txt')
+        processor.process(
+            lines=['line1', 'Line with tab:\t'], file_path='foo.txt')
         self.assertEqual(processor.error_count, 1)
-        expected_messages = ['foo.txt(2):  Line contains tab character.  '
-                             '[whitespace/tab] [5]\n']
+        expected_messages = [
+            'foo.txt(2):  Line contains tab character.  '
+            '[whitespace/tab] [5]\n'
+        ]
         self.assertEqual(self._messages, expected_messages)
 
 
 class StyleProcessor_CodeCoverageTest(LoggingTestCase):
-
     """Test the StyleProcessor class with an emphasis on code coverage.
 
     This class makes heavy use of mock objects.
     """
 
     class MockDispatchedChecker(object):
-
         """A mock checker dispatched by the MockDispatcher."""
 
         def __init__(self, file_path, min_confidence, style_error_handler):
@@ -616,7 +610,6 @@
             self.lines = lines
 
     class MockDispatcher(object):
-
         """A mock CheckerDispatcher class."""
 
         def __init__(self):
@@ -633,9 +626,7 @@
                 return None
 
             checker = StyleProcessor_CodeCoverageTest.MockDispatchedChecker(
-                file_path,
-                min_confidence,
-                style_error_handler)
+                file_path, min_confidence, style_error_handler)
 
             # Save the dispatched checker so the current test case has a
             # way to access and check it.
@@ -660,10 +651,11 @@
         # incrementing is tested instead in the end-to-end test case above.
         mock_increment_error_count = self._do_nothing
 
-        processor = StyleProcessor(configuration=configuration,
-                                   mock_carriage_checker_class=mock_carriage_checker_class,
-                                   mock_dispatcher=mock_dispatcher,
-                                   mock_increment_error_count=mock_increment_error_count)
+        processor = StyleProcessor(
+            configuration=configuration,
+            mock_carriage_checker_class=mock_carriage_checker_class,
+            mock_dispatcher=mock_dispatcher,
+            mock_increment_error_count=mock_increment_error_count)
 
         self._configuration = configuration
         self._mock_dispatcher = mock_dispatcher
@@ -688,7 +680,6 @@
         test_case = self
 
         class MockCarriageChecker(object):
-
             """A mock carriage-return checker."""
 
             def __init__(self, style_error_handler):
@@ -731,9 +722,8 @@
             increment_error_count=self._do_nothing,
             line_numbers=line_numbers)
 
-        self._processor.process(lines=lines,
-                                file_path=file_path,
-                                line_numbers=line_numbers)
+        self._processor.process(
+            lines=lines, file_path=file_path, line_numbers=line_numbers)
 
         # Check that the carriage-return checker was instantiated correctly
         # and was passed lines correctly.
@@ -756,17 +746,15 @@
         path = os.path.join('foo', 'do_not_process.txt')
         with self.assertRaises(AssertionError):
             self._processor.process(
-                lines=['line1', 'line2'], file_path=path,
-                line_numbers=[100])
+                lines=['line1', 'line2'], file_path=path, line_numbers=[100])
 
     def test_process__carriage_returns_not_stripped(self):
         """Test that carriage returns aren't stripped from files that are allowed to contain them."""
         file_path = 'carriage_returns_allowed.txt'
         lines = ['line1\r', 'line2\r']
         line_numbers = [100]
-        self._processor.process(lines=lines,
-                                file_path=file_path,
-                                line_numbers=line_numbers)
+        self._processor.process(
+            lines=lines, file_path=file_path, line_numbers=line_numbers)
         # The carriage return checker should never have been invoked, and so
         # should not have saved off any lines.
         self.assertFalse(hasattr(self.carriage_checker, 'lines'))
diff --git a/third_party/blink/tools/blinkpy/style/checkers/common.py b/third_party/blink/tools/blinkpy/style/checkers/common.py
index c9c5f57..faa7ed7 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/common.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/common.py
@@ -19,22 +19,17 @@
 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Supports style checking not specific to any one file type."""
 
-
 # FIXME: Test this list in the same way that the list of CppChecker
 #        categories is tested, for example by checking that all of its
 #        elements appear in the unit tests. This should probably be done
 #        after moving the relevant cpp_unittest.ErrorCollector code
 #        into a shared location and refactoring appropriately.
-categories = set([
-    'whitespace/carriage_return',
-    'whitespace/tab'])
+categories = set(['whitespace/carriage_return', 'whitespace/tab'])
 
 
 class CarriageReturnChecker(object):
-
     """Supports checking for and handling carriage returns."""
 
     def __init__(self, handle_style_error):
@@ -46,11 +41,12 @@
             if not lines[line_number].endswith('\r'):
                 continue
 
-            self._handle_style_error(line_number + 1,  # Correct for offset.
-                                     'whitespace/carriage_return',
-                                     1,
-                                     'One or more unexpected \\r (^M) found; '
-                                     'better to use only a \\n')
+            self._handle_style_error(
+                line_number + 1,  # Correct for offset.
+                'whitespace/carriage_return',
+                1,
+                'One or more unexpected \\r (^M) found; '
+                'better to use only a \\n')
 
             lines[line_number] = lines[line_number].rstrip('\r')
 
@@ -58,7 +54,6 @@
 
 
 class TabChecker(object):
-
     """Supports checking for and handling tabs."""
 
     def __init__(self, file_path, handle_style_error):
@@ -69,6 +64,5 @@
         # FIXME: share with cpp_style.
         for line_number, line in enumerate(lines):
             if '\t' in line:
-                self.handle_style_error(line_number + 1,
-                                        'whitespace/tab', 5,
+                self.handle_style_error(line_number + 1, 'whitespace/tab', 5,
                                         'Line contains tab character.')
diff --git a/third_party/blink/tools/blinkpy/style/checkers/common_unittest.py b/third_party/blink/tools/blinkpy/style/checkers/common_unittest.py
index c521773..ecb33e1 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/common_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/common_unittest.py
@@ -19,7 +19,6 @@
 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit tests for common.py."""
 
 import unittest
@@ -36,7 +35,6 @@
 
 
 class CarriageReturnCheckerTest(unittest.TestCase):
-
     """Tests check_no_carriage_return()."""
 
     _category = 'whitespace/carriage_return'
@@ -69,35 +67,29 @@
         self.assertEqual(self._style_errors, expected_errors)
 
     def test_ends_with_carriage(self):
-        self.assert_carriage_return(['carriage return\r'],
-                                    ['carriage return'],
+        self.assert_carriage_return(['carriage return\r'], ['carriage return'],
                                     [1])
 
     def test_ends_with_nothing(self):
         self.assert_carriage_return(['no carriage return'],
-                                    ['no carriage return'],
-                                    [])
+                                    ['no carriage return'], [])
 
     def test_ends_with_newline(self):
         self.assert_carriage_return(['no carriage return\n'],
-                                    ['no carriage return\n'],
-                                    [])
+                                    ['no carriage return\n'], [])
 
     def test_carriage_in_middle(self):
         # The CarriageReturnChecker checks only the final character
         # of each line.
         self.assert_carriage_return(['carriage\r in a string'],
-                                    ['carriage\r in a string'],
-                                    [])
+                                    ['carriage\r in a string'], [])
 
     def test_multiple_errors(self):
         self.assert_carriage_return(['line1', 'line2\r', 'line3\r'],
-                                    ['line1', 'line2', 'line3'],
-                                    [2, 3])
+                                    ['line1', 'line2', 'line3'], [2, 3])
 
 
 class TabCheckerTest(unittest.TestCase):
-
     """Tests for TabChecker."""
 
     def assert_tab(self, input_lines, error_lines):
diff --git a/third_party/blink/tools/blinkpy/style/checkers/cpp.py b/third_party/blink/tools/blinkpy/style/checkers/cpp.py
index 48d67a14..0cc3758 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/cpp.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/cpp.py
@@ -33,7 +33,6 @@
 
 # This is the modified version of Google's cpplint. The original code is
 # https://github.com/google/styleguide/tree/gh-pages/cpplint
-
 """Support for check_blink_style.py."""
 
 import math  # for log
@@ -48,49 +47,132 @@
 
 # Headers that we consider STL headers.
 _STL_HEADERS = frozenset([
-    'algobase.h', 'algorithm', 'alloc.h', 'bitset', 'deque', 'exception',
-    'function.h', 'functional', 'hash_map', 'hash_map.h', 'hash_set',
-    'hash_set.h', 'iterator', 'list', 'list.h', 'map', 'memory', 'pair.h',
-    'pthread_alloc', 'queue', 'set', 'set.h', 'sstream', 'stack',
-    'stl_alloc.h', 'stl_relops.h', 'type_traits.h',
-    'utility', 'vector', 'vector.h',
+    'algobase.h',
+    'algorithm',
+    'alloc.h',
+    'bitset',
+    'deque',
+    'exception',
+    'function.h',
+    'functional',
+    'hash_map',
+    'hash_map.h',
+    'hash_set',
+    'hash_set.h',
+    'iterator',
+    'list',
+    'list.h',
+    'map',
+    'memory',
+    'pair.h',
+    'pthread_alloc',
+    'queue',
+    'set',
+    'set.h',
+    'sstream',
+    'stack',
+    'stl_alloc.h',
+    'stl_relops.h',
+    'type_traits.h',
+    'utility',
+    'vector',
+    'vector.h',
 ])
 
-
 # Non-STL C++ system headers.
 _CPP_HEADERS = frozenset([
-    'algo.h', 'builtinbuf.h', 'bvector.h', 'cassert', 'cctype',
-    'cerrno', 'cfloat', 'ciso646', 'climits', 'clocale', 'cmath',
-    'complex', 'complex.h', 'csetjmp', 'csignal', 'cstdarg', 'cstddef',
-    'cstdio', 'cstdlib', 'cstring', 'ctime', 'cwchar', 'cwctype',
-    'defalloc.h', 'deque.h', 'editbuf.h', 'exception', 'fstream',
-    'fstream.h', 'hashtable.h', 'heap.h', 'indstream.h', 'iomanip',
-    'iomanip.h', 'ios', 'iosfwd', 'iostream', 'iostream.h', 'istream.h',
-    'iterator.h', 'limits', 'map.h', 'multimap.h', 'multiset.h',
-    'numeric', 'ostream.h', 'parsestream.h', 'pfstream.h', 'PlotFile.h',
-    'procbuf.h', 'pthread_alloc.h', 'rope', 'rope.h', 'ropeimpl.h',
-    'SFile.h', 'slist', 'slist.h', 'stack.h', 'stdexcept',
-    'stdiostream.h', 'streambuf.h', 'stream.h', 'strfile.h', 'string',
-    'strstream', 'strstream.h', 'tempbuf.h', 'tree.h', 'typeinfo', 'valarray',
+    'algo.h',
+    'builtinbuf.h',
+    'bvector.h',
+    'cassert',
+    'cctype',
+    'cerrno',
+    'cfloat',
+    'ciso646',
+    'climits',
+    'clocale',
+    'cmath',
+    'complex',
+    'complex.h',
+    'csetjmp',
+    'csignal',
+    'cstdarg',
+    'cstddef',
+    'cstdio',
+    'cstdlib',
+    'cstring',
+    'ctime',
+    'cwchar',
+    'cwctype',
+    'defalloc.h',
+    'deque.h',
+    'editbuf.h',
+    'exception',
+    'fstream',
+    'fstream.h',
+    'hashtable.h',
+    'heap.h',
+    'indstream.h',
+    'iomanip',
+    'iomanip.h',
+    'ios',
+    'iosfwd',
+    'iostream',
+    'iostream.h',
+    'istream.h',
+    'iterator.h',
+    'limits',
+    'map.h',
+    'multimap.h',
+    'multiset.h',
+    'numeric',
+    'ostream.h',
+    'parsestream.h',
+    'pfstream.h',
+    'PlotFile.h',
+    'procbuf.h',
+    'pthread_alloc.h',
+    'rope',
+    'rope.h',
+    'ropeimpl.h',
+    'SFile.h',
+    'slist',
+    'slist.h',
+    'stack.h',
+    'stdexcept',
+    'stdiostream.h',
+    'streambuf.h',
+    'stream.h',
+    'strfile.h',
+    'string',
+    'strstream',
+    'strstream.h',
+    'tempbuf.h',
+    'tree.h',
+    'typeinfo',
+    'valarray',
 ])
 
-
 # Assertion macros.  These are defined in base/logging.h and
 # testing/base/gunit.h.  Note that the _M versions need to come first
 # for substring matching to work.
 _CHECK_MACROS = [
-    'DCHECK', 'CHECK',
-    'EXPECT_TRUE_M', 'EXPECT_TRUE',
-    'ASSERT_TRUE_M', 'ASSERT_TRUE',
-    'EXPECT_FALSE_M', 'EXPECT_FALSE',
-    'ASSERT_FALSE_M', 'ASSERT_FALSE',
+    'DCHECK',
+    'CHECK',
+    'EXPECT_TRUE_M',
+    'EXPECT_TRUE',
+    'ASSERT_TRUE_M',
+    'ASSERT_TRUE',
+    'EXPECT_FALSE_M',
+    'EXPECT_FALSE',
+    'ASSERT_FALSE_M',
+    'ASSERT_FALSE',
 ]
 
 # Replacement macros for CHECK/DCHECK/EXPECT_TRUE/EXPECT_FALSE
 _CHECK_REPLACEMENT = dict([(m, {}) for m in _CHECK_MACROS])
 
-for op, replacement in [('==', 'EQ'), ('!=', 'NE'),
-                        ('>=', 'GE'), ('>', 'GT'),
+for op, replacement in [('==', 'EQ'), ('!=', 'NE'), ('>=', 'GE'), ('>', 'GT'),
                         ('<=', 'LE'), ('<', 'LT')]:
     _CHECK_REPLACEMENT['DCHECK'][op] = 'DCHECK_%s' % replacement
     _CHECK_REPLACEMENT['CHECK'][op] = 'CHECK_%s' % replacement
@@ -99,15 +181,13 @@
     _CHECK_REPLACEMENT['EXPECT_TRUE_M'][op] = 'EXPECT_%s_M' % replacement
     _CHECK_REPLACEMENT['ASSERT_TRUE_M'][op] = 'ASSERT_%s_M' % replacement
 
-for op, inv_replacement in [('==', 'NE'), ('!=', 'EQ'),
-                            ('>=', 'LT'), ('>', 'LE'),
-                            ('<=', 'GT'), ('<', 'GE')]:
+for op, inv_replacement in [('==', 'NE'), ('!=', 'EQ'), ('>=', 'LT'),
+                            ('>', 'LE'), ('<=', 'GT'), ('<', 'GE')]:
     _CHECK_REPLACEMENT['EXPECT_FALSE'][op] = 'EXPECT_%s' % inv_replacement
     _CHECK_REPLACEMENT['ASSERT_FALSE'][op] = 'ASSERT_%s' % inv_replacement
     _CHECK_REPLACEMENT['EXPECT_FALSE_M'][op] = 'EXPECT_%s_M' % inv_replacement
     _CHECK_REPLACEMENT['ASSERT_FALSE_M'][op] = 'ASSERT_%s_M' % inv_replacement
 
-
 # The regexp compilation caching is inlined in all regexp functions for
 # performance reasons; factoring it out into a separate function turns out
 # to be noticeably expensive.
@@ -171,7 +251,8 @@
         start_match_index = matched.start(0)
         end_match_index = matched.end(0)
         match_length = end_match_index - start_match_index
-        s = s[:start_match_index] + char_replacement * match_length + s[end_match_index:]
+        s = (s[:start_match_index] + char_replacement * match_length +
+             s[end_match_index:])
 
 
 def _find_in_lines(regex, lines, start_position, not_found_position):
@@ -314,7 +395,8 @@
 
         # Create a single line with all of the parameters.
         self.single_line = ' '.join(trimmed_lines)
-        self.single_line = _RE_PATTERN_CLEANSE_MULTIPLE_STRINGS.sub('""', self.single_line)
+        self.single_line = _RE_PATTERN_CLEANSE_MULTIPLE_STRINGS.sub(
+            '""', self.single_line)
 
         # Keep the row lengths, so we can calculate the original row number
         # given a column in the single line (adding 1 due to the space added
@@ -331,7 +413,7 @@
     """
 
     _NORMAL_TRIGGER = 250  # for --v=0, 500 for --v=1, etc.
-    _TEST_TRIGGER = 400    # about 50% more than _NORMAL_TRIGGER.
+    _TEST_TRIGGER = 400  # about 50% more than _NORMAL_TRIGGER.
 
     def __init__(self, min_confidence):
         self.min_confidence = min_confidence
@@ -343,8 +425,9 @@
         self.body_start_position = Position(-1000, 0)
         self.end_position = Position(-1000, 0)
 
-    def begin(self, function_name, function_name_start_position, body_start_position, end_position,
-              parameter_start_position, parameter_end_position, clean_lines):
+    def begin(self, function_name, function_name_start_position,
+              body_start_position, end_position, parameter_start_position,
+              parameter_end_position, clean_lines):
         """Start analyzing function body.
 
         Args:
@@ -362,14 +445,17 @@
         self.function_name_start_position = function_name_start_position
         self.body_start_position = body_start_position
         self.end_position = end_position
-        self.is_declaration = clean_lines.elided[body_start_position.row][body_start_position.column] == ';'
+        self.is_declaration = clean_lines.elided[body_start_position.row][
+            body_start_position.column] == ';'
         self.parameter_start_position = parameter_start_position
         self.parameter_end_position = parameter_end_position
         self.is_pure = False
         if self.is_declaration:
             characters_after_parameters = SingleLineView(
-                clean_lines.elided, parameter_end_position, body_start_position).single_line
-            self.is_pure = bool(match(r'\s*=\s*0\s*', characters_after_parameters))
+                clean_lines.elided, parameter_end_position,
+                body_start_position).single_line
+            self.is_pure = bool(
+                match(r'\s*=\s*0\s*', characters_after_parameters))
         self._clean_lines = clean_lines
 
     def count(self, line_number):
@@ -388,18 +474,20 @@
             base_trigger = self._TEST_TRIGGER
         else:
             base_trigger = self._NORMAL_TRIGGER
-        trigger = base_trigger * 2 ** self.min_confidence
+        trigger = base_trigger * 2**self.min_confidence
 
         if self.lines_in_function > trigger:
-            error_level = int(math.log(self.lines_in_function / base_trigger, 2))
+            error_level = int(
+                math.log(self.lines_in_function / base_trigger, 2))
             # 50 => 0, 100 => 1, 200 => 2, 400 => 3, 800 => 4, 1600 => 5, ...
             if error_level > 5:
                 error_level = 5
-            error(line_number, 'readability/fn_size', error_level,
-                  'Small and focused functions are preferred:'
-                  ' %s has %d non-comment lines'
-                  ' (error triggered by exceeding %d lines).' % (
-                      self.current_function, self.lines_in_function, trigger))
+            error(
+                line_number, 'readability/fn_size', error_level,
+                'Small and focused functions are preferred:'
+                ' %s has %d non-comment lines'
+                ' (error triggered by exceeding %d lines).' %
+                (self.current_function, self.lines_in_function, trigger))
 
     def end(self):
         """Stop analyzing function body."""
@@ -463,7 +551,7 @@
 
         googlename = self.repository_name()
         project, rest = os.path.split(googlename)
-        return (project,) + os.path.splitext(rest)
+        return (project, ) + os.path.splitext(rest)
 
     def base_name(self):
         """File base name - text after the final slash, before the final period."""
@@ -521,7 +609,8 @@
     """
 
     line = line.replace(r'\\', 'XX')  # after this, \\" does not match to \"
-    return ((line.count('"') - line.count(r'\"') - line.count("'\"'")) & 1) == 1
+    return (
+        (line.count('"') - line.count(r'\"') - line.count("'\"'")) & 1) == 1
 
 
 def cleanse_raw_strings(raw_lines):
@@ -555,7 +644,8 @@
                 # line and resume copying the original lines, and also insert
                 # a "" on the last line.
                 leading_space = match(r'^(\s*)\S', line)
-                line = leading_space.group(1) + '""' + line[end + len(delimiter):]
+                line = (leading_space.group(1) + '""' +
+                        line[end + len(delimiter):])
                 delimiter = None
             else:
                 # Haven't found the end yet, append a blank line.
@@ -575,8 +665,11 @@
             # before removing raw strings.  This is because there are some
             # cpplint checks that requires the comments to be preserved, but
             # we don't want to check comments that are inside raw strings.
-            matched = match(r'^(.*?)\b(?:R|u8R|uR|UR|LR)"([^\s\\()]*)\((.*)$', line)
-            if matched and not match(r'^([^\'"]|\'(\\.|[^\'])*\'|"(\\.|[^"])*")*//', matched.group(1)):
+            matched = match(r'^(.*?)\b(?:R|u8R|uR|UR|LR)"([^\s\\()]*)\((.*)$',
+                            line)
+            if matched and not match(
+                    r'^([^\'"]|\'(\\.|[^\'])*\'|"(\\.|[^"])*")*//',
+                    matched.group(1)):
                 delimiter = ')' + matched.group(2) + '"'
 
                 end = matched.group(3).find(delimiter)
@@ -630,13 +723,16 @@
     """Removes multiline (c-style) comments from lines."""
     line_index = 0
     while line_index < len(lines):
-        line_index_begin = find_next_multi_line_comment_start(lines, line_index)
+        line_index_begin = find_next_multi_line_comment_start(
+            lines, line_index)
         if line_index_begin >= len(lines):
             return
-        line_index_end = find_next_multi_line_comment_end(lines, line_index_begin)
+        line_index_end = find_next_multi_line_comment_end(
+            lines, line_index_begin)
         if line_index_end >= len(lines):
             return
-        remove_multi_line_comments_from_range(lines, line_index_begin, line_index_end + 1)
+        remove_multi_line_comments_from_range(lines, line_index_begin,
+                                              line_index_end + 1)
         line_index = line_index_end + 1
 
 
@@ -674,8 +770,10 @@
         self._num_lines = len(lines)
         self.lines_without_raw_strings = cleanse_raw_strings(lines)
         for line_number in range(len(self.lines_without_raw_strings)):
-            self.lines.append(cleanse_comments(self.lines_without_raw_strings[line_number]))
-            elided = self.collapse_strings(self.lines_without_raw_strings[line_number])
+            self.lines.append(
+                cleanse_comments(self.lines_without_raw_strings[line_number]))
+            elided = self.collapse_strings(
+                self.lines_without_raw_strings[line_number])
             self.elided.append(cleanse_comments(elided))
 
     def num_lines(self):
@@ -767,10 +865,10 @@
     for line in xrange(1, min(len(lines), 11)):
         if re.search(r'Copyright', lines[line], re.I):
             break
-    else:                       # means no copyright line was found
-        error(0, 'legal/copyright', 5,
-              'No copyright message found.  '
-              'You should have a line: "Copyright [year] <Copyright Owner>"')
+    else:  # means no copyright line was found
+        error(
+            0, 'legal/copyright', 5, 'No copyright message found.  '
+            'You should have a line: "Copyright [year] <Copyright Owner>"')
 
 
 def get_header_guard_cpp_variable(filename):
@@ -823,9 +921,10 @@
                 break
 
     if not ifndef or not define or ifndef != define:
-        error(0, 'build/header_guard', 5,
-              'No #ifndef header guard found, suggested CPP variable is: %s' %
-              cpp_var)
+        error(
+            0, 'build/header_guard', 5,
+            'No #ifndef header guard found, suggested CPP variable is: %s' %
+            cpp_var)
         return
 
     # The guard should be File_h or, for Chromium style, BLINK_PATH_TO_FILE_H_.
@@ -848,8 +947,10 @@
     """
     for line_number, line in enumerate(lines):
         if u'\ufffd' in line:
-            error(line_number, 'readability/utf8', 5,
-                  'Line contains invalid UTF-8 (or Unicode replacement character).')
+            error(
+                line_number, 'readability/utf8', 5,
+                'Line contains invalid UTF-8 (or Unicode replacement character).'
+            )
 
 
 def check_for_new_line_at_eof(lines, error):
@@ -865,8 +966,9 @@
     # To verify that the file ends in \n, we just have to make sure the
     # last-but-two element of lines() exists and is empty.
     if len(lines) < 3 or lines[-2]:
-        error(len(lines) - 2, 'whitespace/ending_newline', 5,
-              'Could not find a newline character at the end of the file.')
+        error(
+            len(lines) - 2, 'whitespace/ending_newline', 5,
+            'Could not find a newline character at the end of the file.')
 
 
 _THREADING_LIST = (
@@ -904,18 +1006,18 @@
     for single_thread_function, multithread_safe_function in _THREADING_LIST:
         index = line.find(single_thread_function)
         # Comparisons made explicit for clarity
-        if index >= 0 and (index == 0 or (not line[index - 1].isalnum()
-                                          and line[index - 1] not in ('_', '.', '>'))):
-            error(line_number, 'runtime/threadsafe_fn', 2,
-                  'Consider using ' + multithread_safe_function +
-                  '...) instead of ' + single_thread_function +
-                  '...) for improved thread safety.')
+        if index >= 0 and (index == 0 or
+                           (not line[index - 1].isalnum()
+                            and line[index - 1] not in ('_', '.', '>'))):
+            error(
+                line_number, 'runtime/threadsafe_fn', 2, 'Consider using ' +
+                multithread_safe_function + '...) instead of ' +
+                single_thread_function + '...) for improved thread safety.')
 
 
 # Matches invalid increment: *count++, which moves pointer instead of
 # incrementing a value.
-_RE_PATTERN_INVALID_INCREMENT = re.compile(
-    r'^\s*\*\w+(\+\+|--);')
+_RE_PATTERN_INVALID_INCREMENT = re.compile(r'^\s*\*\w+(\+\+|--);')
 
 
 def check_invalid_increment(clean_lines, line_number, error):
@@ -935,8 +1037,10 @@
     """
     line = clean_lines.elided[line_number]
     if _RE_PATTERN_INVALID_INCREMENT.match(line):
-        error(line_number, 'runtime/invalid_increment', 5,
-              'Changing pointer instead of value (or unused value of operator*).')
+        error(
+            line_number, 'runtime/invalid_increment', 5,
+            'Changing pointer instead of value (or unused value of operator*).'
+        )
 
 
 class _ClassInfo(object):
@@ -968,7 +1072,6 @@
 
 
 class _FileState(object):
-
     def __init__(self, clean_lines, file_extension):
         self._clean_lines = clean_lines
         if file_extension in ['m', 'mm']:
@@ -1016,8 +1119,8 @@
         return self.is_c() or self.is_objective_c()
 
 
-def check_for_non_standard_constructs(clean_lines, line_number,
-                                      class_state, error):
+def check_for_non_standard_constructs(clean_lines, line_number, class_state,
+                                      error):
     """Logs an error if we see certain non-ANSI constructs ignored by gcc-2.
 
     Complain about several constructs which gcc-2 accepts, but which are
@@ -1055,9 +1158,11 @@
     classinfo_stack = class_state.classinfo_stack
     # Look for a class declaration
     class_decl_match = match(
-        r'\s*(template\s*<[\w\s<>,:]*>\s*)?(class|struct)\s+(\w+(::\w+)*)', line)
+        r'\s*(template\s*<[\w\s<>,:]*>\s*)?(class|struct)\s+(\w+(::\w+)*)',
+        line)
     if class_decl_match:
-        classinfo_stack.append(_ClassInfo(class_decl_match.group(3), line_number))
+        classinfo_stack.append(
+            _ClassInfo(class_decl_match.group(3), line_number))
 
     # Everything else in this function uses the top of the stack if it's
     # not empty.
@@ -1087,13 +1192,12 @@
 
     # Look for single-argument constructors that aren't marked explicit.
     # Technically a valid construct, but against style.
-    args = match(r'(?<!explicit)\s+%s\s*\(([^,()]+)\)'
-                 % re.escape(base_classname),
-                 line)
-    if (args
-        and args.group(1) != 'void'
-        and not match(r'(const\s+)?%s\s*&' % re.escape(base_classname),
-                      args.group(1).strip())):
+    args = match(
+        r'(?<!explicit)\s+%s\s*\(([^,()]+)\)' % re.escape(base_classname),
+        line)
+    if (args and args.group(1) != 'void'
+            and not match(r'(const\s+)?%s\s*&' % re.escape(base_classname),
+                          args.group(1).strip())):
         error(line_number, 'runtime/explicit', 5,
               'Single-argument constructors should be marked explicit.')
 
@@ -1119,10 +1223,11 @@
         if ((classinfo.virtual_method_line_number is not None)
                 and (not classinfo.has_virtual_destructor)
                 and (not classinfo.is_derived)):  # Only warn for base classes
-            error(classinfo.line_number, 'runtime/virtual', 4,
-                  'The class %s probably needs a virtual destructor due to '
-                  'having virtual method(s), one declared at line %d.'
-                  % (classinfo.name, classinfo.virtual_method_line_number))
+            error(
+                classinfo.line_number, 'runtime/virtual', 4,
+                'The class %s probably needs a virtual destructor due to '
+                'having virtual method(s), one declared at line %d.' %
+                (classinfo.name, classinfo.virtual_method_line_number))
     else:
         classinfo.brace_depth = brace_depth
 
@@ -1130,25 +1235,28 @@
     # Look for bool <name> : 1 declarations.
     args = search(r'\bbool\s+(\S*)\s*:\s*\d+\s*;', line)
     if args:
-        classinfo.bool_bitfields.append('%d: %s' % (line_number, args.group(1)))
+        classinfo.bool_bitfields.append(
+            '%d: %s' % (line_number, args.group(1)))
         well_typed_bitfield = True
 
     # Look for unsigned <name> : n declarations.
     args = search(r'\bunsigned\s+(?:int\s+)?(\S+)\s*:\s*\d+\s*;', line)
     if args:
-        classinfo.unsigned_bitfields.append('%d: %s' % (line_number, args.group(1)))
+        classinfo.unsigned_bitfields.append(
+            '%d: %s' % (line_number, args.group(1)))
         well_typed_bitfield = True
 
     # Look for other bitfield declarations. We don't care about those in
     # size-matching structs.
-    if not (well_typed_bitfield or classinfo.name.startswith('SameSizeAs') or
-            classinfo.name.startswith('Expected')):
+    if not (well_typed_bitfield or classinfo.name.startswith('SameSizeAs')
+            or classinfo.name.startswith('Expected')):
         args = match(r'\s*(\S+)\s+(\S+)\s*:\s*\d+\s*;', line)
         if args:
-            error(line_number, 'runtime/bitfields', 4,
-                  'Member %s of class %s defined as a bitfield of type %s. '
-                  'Please declare all bitfields as unsigned.'
-                  % (args.group(2), classinfo.name, args.group(1)))
+            error(
+                line_number, 'runtime/bitfields', 4,
+                'Member %s of class %s defined as a bitfield of type %s. '
+                'Please declare all bitfields as unsigned.' %
+                (args.group(2), classinfo.name, args.group(1)))
 
 
 def is_blank_line(line):
@@ -1205,7 +1313,8 @@
     # If the name is all caps and underscores, figure it's a macro and
     # ignore it, unless it's TEST or TEST_F.
     function_name = match_result.group(1).split()[-1]
-    if function_name != 'TEST' and function_name != 'TEST_F' and match(r'[A-Z_]+$', function_name):
+    if (function_name != 'TEST' and function_name != 'TEST_F'
+            and match(r'[A-Z_]+$', function_name)):
         return
 
     joined_line = ''
@@ -1214,44 +1323,55 @@
         joined_line += ' ' + start_line.lstrip()
         body_match = search(r'{|;', start_line)
         if body_match:
-            body_start_position = Position(start_line_number, body_match.start(0))
+            body_start_position = Position(start_line_number,
+                                           body_match.start(0))
 
             # Replace template constructs with _ so that no spaces remain in the function name,
             # while keeping the column numbers of other characters the same as "line".
-            line_with_no_templates = iteratively_replace_matches_with_char(r'<[^<>]*>', '_', line)
-            match_function = search(r'((\w|:|<|>|,|~|(operator\s*(/|-|=|!|\+)+))*)\(', line_with_no_templates)
+            line_with_no_templates = iteratively_replace_matches_with_char(
+                r'<[^<>]*>', '_', line)
+            match_function = search(
+                r'((\w|:|<|>|,|~|(operator\s*(/|-|=|!|\+)+))*)\(',
+                line_with_no_templates)
             if not match_function:
                 return  # The '(' must have been inside of a template.
 
             # Use the column numbers from the modified line to find the
             # function name in the original line.
             function = line[match_function.start(1):match_function.end(1)]
-            function_name_start_position = Position(line_number, match_function.start(1))
+            function_name_start_position = Position(line_number,
+                                                    match_function.start(1))
 
-            if match(r'TEST', function):    # Handle TEST... macros
+            if match(r'TEST', function):  # Handle TEST... macros
                 parameter_regexp = search(r'(\(.*\))', joined_line)
-                if parameter_regexp:             # Ignore bad syntax
+                if parameter_regexp:  # Ignore bad syntax
                     function += parameter_regexp.group(1)
             else:
                 function += '()'
 
-            parameter_start_position = Position(line_number, match_function.end(1))
-            parameter_end_position = close_expression(clean_lines.elided, parameter_start_position)
+            parameter_start_position = Position(line_number,
+                                                match_function.end(1))
+            parameter_end_position = close_expression(
+                clean_lines.elided, parameter_start_position)
             if parameter_end_position.row == len(clean_lines.elided):
                 # No end was found.
                 return
 
             if start_line[body_start_position.column] == ';':
-                end_position = Position(body_start_position.row, body_start_position.column + 1)
+                end_position = Position(body_start_position.row,
+                                        body_start_position.column + 1)
             else:
-                end_position = close_expression(clean_lines.elided, body_start_position)
+                end_position = close_expression(clean_lines.elided,
+                                                body_start_position)
 
             # Check for nonsensical positions. (This happens in test cases which check code snippets.)
             if parameter_end_position > body_start_position:
                 return
 
-            function_state.begin(function, function_name_start_position, body_start_position, end_position,
-                                 parameter_start_position, parameter_end_position, clean_lines)
+            function_state.begin(function, function_name_start_position,
+                                 body_start_position, end_position,
+                                 parameter_start_position,
+                                 parameter_end_position, clean_lines)
             return
 
     # No body for the function (or evidence of a non-function) was found.
@@ -1259,7 +1379,8 @@
           'Lint failed to find start of function body.')
 
 
-def check_for_function_lengths(clean_lines, line_number, function_state, error):
+def check_for_function_lengths(clean_lines, line_number, function_state,
+                               error):
     """Reports for long function bodies.
 
     For an overview why this is done, see:
@@ -1308,9 +1429,10 @@
         matched_pass_ptr = match(r'^\s*Pass([A-Z][A-Za-z]*)Ptr<', line)
         if matched_pass_ptr:
             type_name = 'Pass%sPtr' % matched_pass_ptr.group(1)
-            error(line_number, 'readability/pass_ptr', 5,
-                  'Local variables should never be %s (see '
-                  'http://webkit.org/coding/RefPtr.html).' % type_name)
+            error(
+                line_number, 'readability/pass_ptr', 5,
+                'Local variables should never be %s (see '
+                'http://webkit.org/coding/RefPtr.html).' % type_name)
 
 
 def get_previous_non_blank_line(clean_lines, line_number):
@@ -1330,7 +1452,7 @@
     previous_line_number = line_number - 1
     while previous_line_number >= 0:
         previous_line = clean_lines.elided[previous_line_number]
-        if not is_blank_line(previous_line):     # if not a blank line...
+        if not is_blank_line(previous_line):  # if not a blank line...
             return (previous_line, previous_line_number)
         previous_line_number -= 1
     return ('', -1)
@@ -1350,16 +1472,18 @@
 
     line = clean_lines.elided[line_number]  # Get rid of comments and strings.
 
-    ctype_function_search = search(
-        (r'\b(?P<ctype_function>(isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|'
-         r'islower|isprint|ispunct|isspace|isupper|isxdigit|toascii|tolower|toupper))\s*\('), line)
+    ctype_function_search = search((
+        r'\b(?P<ctype_function>(isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|'
+        r'islower|isprint|ispunct|isspace|isupper|isxdigit|toascii|tolower|toupper))\s*\('
+    ), line)
     if not ctype_function_search:
         return
 
     ctype_function = ctype_function_search.group('ctype_function')
-    error(line_number, 'runtime/ctype_function', 4,
-          'Use equivalent function in <wtf/ASCIICType.h> instead of the %s() function.'
-          % (ctype_function))
+    error(
+        line_number, 'runtime/ctype_function', 4,
+        'Use equivalent function in <wtf/ASCIICType.h> instead of the %s() function.'
+        % (ctype_function))
 
 
 def replaceable_check(operator, macro, line):
@@ -1385,10 +1509,9 @@
     # This means we can't catch all the cases where a more specific
     # CHECK is possible, but it's less annoying than dealing with
     # extraneous warnings.
-    match_this = (r'\s*' + macro + r'\((\s*' +
-                  match_constant + r'\s*' + operator + r'[^<>].*|'
-                  r'.*[^<>]' + operator + r'\s*' + match_constant +
-                  r'\s*\))')
+    match_this = (r'\s*' + macro + r'\((\s*' + match_constant + r'\s*' +
+                  operator + r'[^<>].*|'
+                  r'.*[^<>]' + operator + r'\s*' + match_constant + r'\s*\))')
 
     # Don't complain about CHECK(x == NULL) or similar because
     # CHECK_EQ(x, NULL) won't compile (requires a cast).
@@ -1417,15 +1540,16 @@
         # Don't waste time here if line doesn't contain 'CHECK' or 'EXPECT'
         return
 
-    line = clean_lines.elided[line_number]        # get rid of comments and strings
+    line = clean_lines.elided[line_number]  # get rid of comments and strings
 
     # Encourage replacing plain CHECKs with CHECK_EQ/CHECK_NE/etc.
     for operator in ['==', '!=', '>=', '>', '<=', '<']:
         if replaceable_check(operator, current_macro, line):
-            error(line_number, 'readability/check', 2,
-                  'Consider using %s(a, b) instead of %s(a %s b)' % (
-                      _CHECK_REPLACEMENT[current_macro][operator],
-                      current_macro, operator))
+            error(
+                line_number, 'readability/check', 2,
+                'Consider using %s(a, b) instead of %s(a %s b)' %
+                (_CHECK_REPLACEMENT[current_macro][operator], current_macro,
+                 operator))
             break
 
 
@@ -1435,10 +1559,13 @@
 
     # Must include NULL here, as otherwise users will convert NULL to 0 and
     # then we can't catch it, since it looks like a valid integer comparison.
-    if search(r'[=!]=\s*(NULL|nullptr|true|false)[^\w.]', line) or search(r'[^\w.](NULL|nullptr|true|false)\s*[=!]=', line):
+    if search(r'[=!]=\s*(NULL|nullptr|true|false)[^\w.]', line) or search(
+            r'[^\w.](NULL|nullptr|true|false)\s*[=!]=', line):
         if not search('LIKELY', line) and not search('UNLIKELY', line):
-            error(line_number, 'readability/comparison_to_boolean', 5,
-                  'Tests for true/false and null/non-null should be done without equality comparisons.')
+            error(
+                line_number, 'readability/comparison_to_boolean', 5,
+                'Tests for true/false and null/non-null should be done without equality comparisons.'
+            )
 
 
 def get_line_width(line):
@@ -1462,7 +1589,8 @@
     return len(line)
 
 
-def check_conditional_and_loop_bodies_for_brace_violations(clean_lines, line_number, error):
+def check_conditional_and_loop_bodies_for_brace_violations(
+        clean_lines, line_number, error):
     """Scans the bodies of conditionals and loops, and in particular
     all the arms of conditionals, for violations in the use of braces.
 
@@ -1532,8 +1660,10 @@
             current_arm_uses_brace = True
         if know_whether_using_braces:
             if using_braces != current_arm_uses_brace:
-                error(current_pos.row, 'whitespace/braces', 4,
-                      'If one part of an if-else statement uses curly braces, the other part must too.')
+                error(
+                    current_pos.row, 'whitespace/braces', 4,
+                    'If one part of an if-else statement uses curly braces, the other part must too.'
+                )
                 return
         know_whether_using_braces = True
         using_braces = current_arm_uses_brace
@@ -1554,8 +1684,10 @@
             # fire this error for expressions ending on the same line; that
             # is a different error, handled elsewhere.)
             if current_pos.row > 1 + end_line_of_conditional:
-                error(current_pos.row, 'whitespace/braces', 4,
-                      'A conditional or loop body must use braces if the statement is more than one line long.')
+                error(
+                    current_pos.row, 'whitespace/braces', 4,
+                    'A conditional or loop body must use braces if the statement is more than one line long.'
+                )
                 return
             current_pos = Position(current_pos.row, 1 + current_pos.column)
 
@@ -1602,8 +1734,8 @@
     # Ignore "virtual" keywords that are near access-specifiers.  These
     # are only used in class base-specifier and do not apply to member
     # functions.
-    if (search(r'\b(public|protected|private)\s+$', virtual.group(1)) or
-            match(r'^\s+(public|protected|private)\b', virtual.group(3))):
+    if (search(r'\b(public|protected|private)\s+$', virtual.group(1))
+            or match(r'^\s+(public|protected|private)\b', virtual.group(3))):
         return
 
     # Ignore the "virtual" keyword from virtual base classes.  Usually
@@ -1619,13 +1751,15 @@
     # that this is rare.
     end_position = Position(-1, -1)
     start_col = len(virtual.group(2))
-    for start_line in xrange(linenum, min(linenum + 3, clean_lines.num_lines())):
+    for start_line in xrange(linenum, min(linenum + 3,
+                                          clean_lines.num_lines())):
         line = clean_lines.elided[start_line][start_col:]
         parameter_list = match(r'^([^(]*)\(', line)
         if parameter_list:
             # Match parentheses to find the end of the parameter list
             end_position = close_expression(
-                clean_lines.elided, Position(start_line, start_col + len(parameter_list.group(1))))
+                clean_lines.elided,
+                Position(start_line, start_col + len(parameter_list.group(1))))
             break
         start_col = 0
 
@@ -1634,7 +1768,8 @@
 
     # Look for "override" or "final" after the parameter list
     # (possibly on the next few lines).
-    for i in xrange(end_position.row, min(end_position.row + 3, clean_lines.num_lines())):
+    for i in xrange(end_position.row,
+                    min(end_position.row + 3, clean_lines.num_lines())):
         line = clean_lines.elided[i][end_position.column:]
         override_or_final = search(r'\b(override|final)\b', line)
         if override_or_final:
@@ -1710,7 +1845,8 @@
 _RE_FIRST_COMPONENT = re.compile(r'^[^-_.]+')
 
 
-def check_include_line(filename, file_extension, clean_lines, line_number, include_state, error):
+def check_include_line(filename, file_extension, clean_lines, line_number,
+                       include_state, error):
     """Check rules that are applicable to #include lines.
 
     Strings on #include lines are NOT removed from elided line, to make
@@ -1745,8 +1881,8 @@
         include_state[include] = line_number
 
 
-def check_language(filename, clean_lines, line_number, file_extension, include_state,
-                   file_state, error):
+def check_language(filename, clean_lines, line_number, file_extension,
+                   include_state, file_state, error):
     """Checks rules from the 'C++ language rules' section of cppguide.html.
 
     Some of these rules are hard to test (function overloading, using
@@ -1770,7 +1906,8 @@
 
     matched = _RE_PATTERN_INCLUDE.search(line)
     if matched:
-        check_include_line(filename, file_extension, clean_lines, line_number, include_state, error)
+        check_include_line(filename, file_extension, clean_lines, line_number,
+                           include_state, error)
         return
 
     # FIXME: figure out if they're using default arguments in fn proto.
@@ -1778,30 +1915,31 @@
     # Check if they're using a precise-width integer type.
     matched = search(r'\b((un)?signed\s+)?(short|(long\s+)?long)\b', line)
     if matched:
-        error(line_number, 'runtime/int', 1,
-              'Use a precise-width integer type from <stdint.h> or <cstdint>'
-              ' such as uint16_t instead of %s' % matched.group(0))
+        error(
+            line_number, 'runtime/int', 1,
+            'Use a precise-width integer type from <stdint.h> or <cstdint>'
+            ' such as uint16_t instead of %s' % matched.group(0))
 
     # Check to see if they're using an conversion function cast.
     # I just try to capture the most common basic types, though there are more.
     # Parameterless conversion functions, such as bool(), are allowed as they are
     # probably a member operator declaration or default constructor.
     matched = search(
-        r'\b(int|float|double|bool|char|int32|uint32|int64|uint64)\([^)]', line)
+        r'\b(int|float|double|bool|char|int32|uint32|int64|uint64)\([^)]',
+        line)
     if matched:
         # gMock methods are defined using some variant of MOCK_METHODx(name, type)
         # where type may be float(), int(string), etc.  Without context they are
         # virtually indistinguishable from int(x) casts.
         if not match(r'^\s*MOCK_(CONST_)?METHOD\d+(_T)?\(', line):
-            error(line_number, 'readability/casting', 4,
-                  'Using deprecated casting style.  '
-                  'Use static_cast<%s>(...) instead' %
-                  matched.group(1))
+            error(
+                line_number, 'readability/casting', 4,
+                'Using deprecated casting style.  '
+                'Use static_cast<%s>(...) instead' % matched.group(1))
 
-    check_c_style_cast(line_number, line, clean_lines.raw_lines[line_number],
-                       'static_cast',
-                       r'\((int|float|double|bool|char|u?int(16|32|64))\)',
-                       error)
+    check_c_style_cast(
+        line_number, line, clean_lines.raw_lines[line_number], 'static_cast',
+        r'\((int|float|double|bool|char|u?int(16|32|64))\)', error)
     # This doesn't catch all cases.  Consider (const char * const)"hello".
     check_c_style_cast(line_number, line, clean_lines.raw_lines[line_number],
                        'reinterpret_cast', r'\((\w+\s?\*+\s?)\)', error)
@@ -1815,9 +1953,10 @@
     # When snprintf is used, the second argument shouldn't be a literal.
     matched = search(r'snprintf\s*\(([^,]*),\s*([0-9]*)\s*,', line)
     if matched:
-        error(line_number, 'runtime/printf', 3,
-              'If you can, use sizeof(%s) instead of %s as the 2nd arg '
-              'to snprintf.' % (matched.group(1), matched.group(2)))
+        error(
+            line_number, 'runtime/printf', 3,
+            'If you can, use sizeof(%s) instead of %s as the 2nd arg '
+            'to snprintf.' % (matched.group(1), matched.group(2)))
 
     # Check if some verboten C functions are being used.
     if search(r'\bsprintf\b', line):
@@ -1835,23 +1974,27 @@
     # Check for potential format string bugs like printf(foo).
     # We constrain the pattern not to pick things like DocidForPrintf(foo).
     # Not perfect but it can catch printf(foo.c_str()) and printf(foo->c_str())
-    matched = re.search(r'\b((?:string)?printf)\s*\(([\w.\->()]+)\)', line, re.I)
+    matched = re.search(r'\b((?:string)?printf)\s*\(([\w.\->()]+)\)', line,
+                        re.I)
     if matched:
-        error(line_number, 'runtime/printf', 4,
-              'Potential format string bug. Do %s("%%s", %s) instead.'
-              % (matched.group(1), matched.group(2)))
+        error(
+            line_number, 'runtime/printf', 4,
+            'Potential format string bug. Do %s("%%s", %s) instead.' %
+            (matched.group(1), matched.group(2)))
 
     # Check for potential memset bugs like memset(buf, sizeof(buf), 0).
     matched = search(r'memset\s*\(([^,]*),\s*([^,]*),\s*0\s*\)', line)
     if matched and not match(r"^''|-?[0-9]+|0x[0-9A-Fa-f]$", matched.group(2)):
-        error(line_number, 'runtime/memset', 4,
-              'Did you mean "memset(%s, 0, %s)"?'
-              % (matched.group(1), matched.group(2)))
+        error(
+            line_number, 'runtime/memset', 4,
+            'Did you mean "memset(%s, 0, %s)"?' % (matched.group(1),
+                                                   matched.group(2)))
 
     # Detect variable-length arrays.
     matched = match(r'\s*(.+::)?(\w+) [a-z]\w*\[(.+)];', line)
-    if (matched and matched.group(2) != 'return' and matched.group(2) != 'delete' and
-            matched.group(3).find(']') == -1):
+    if (matched and matched.group(2) != 'return'
+            and matched.group(2) != 'delete'
+            and matched.group(3).find(']') == -1):
         # Split the size using space and arithmetic operators as delimiters.
         # If any of the resulting tokens are not compile time constants then
         # report the error.
@@ -1891,26 +2034,33 @@
             is_const = False
             break
         if not is_const:
-            error(line_number, 'runtime/arrays', 1,
-                  'Do not use variable-length arrays.  Use an appropriately named '
-                  "('k' followed by CamelCase) compile-time constant for the size.")
+            error(
+                line_number, 'runtime/arrays', 1,
+                'Do not use variable-length arrays.  Use an appropriately named '
+                "('k' followed by CamelCase) compile-time constant for the size."
+            )
 
     # Check for plain bitfields declared without either "singed" or "unsigned".
     # Most compilers treat such bitfields as signed, but there are still compilers like
     # RVCT 4.0 that use unsigned by default.
     matched = re.match(
-        r'\s*((const|mutable)\s+)?(char|(short(\s+int)?)|int|long(\s+(long|int))?)\s+[a-zA-Z_][a-zA-Z0-9_]*\s*:\s*\d+\s*;', line)
+        r'\s*((const|mutable)\s+)?(char|(short(\s+int)?)|int|long(\s+(long|int))?)\s+[a-zA-Z_][a-zA-Z0-9_]*\s*:\s*\d+\s*;',
+        line)
     if matched:
-        error(line_number, 'runtime/bitfields', 5,
-              'Please declare integral type bitfields with either signed or unsigned.')
+        error(
+            line_number, 'runtime/bitfields', 5,
+            'Please declare integral type bitfields with either signed or unsigned.'
+        )
 
-    check_identifier_name_in_declaration(filename, line_number, line, file_state, error)
+    check_identifier_name_in_declaration(filename, line_number, line,
+                                         file_state, error)
 
     # Check for usage of static_cast<Classname*>.
     check_for_object_static_cast(filename, line_number, line, error)
 
 
-def check_identifier_name_in_declaration(filename, line_number, line, file_state, error):
+def check_identifier_name_in_declaration(filename, line_number, line,
+                                         file_state, error):
     """Checks if identifier names contain any underscores.
 
     As identifiers in libraries we are using have a bunch of
@@ -1939,7 +2089,9 @@
     line = sub(r'long (long )?(?=long|double|int)', '', line)
     # Convert unsigned/signed types to simple types, too.
     line = sub(r'(unsigned|signed) (?=char|short|int|long)', '', line)
-    line = sub(r'\b(inline|using|static|const|volatile|auto|register|extern|typedef|restrict|struct|class|virtual)(?=\W)', '', line)
+    line = sub(
+        r'\b(inline|using|static|const|volatile|auto|register|extern|typedef|restrict|struct|class|virtual)(?=\W)',
+        '', line)
 
     # Remove "new" and "new (expr)" to simplify, too.
     line = sub(r'new\s*(\([^)]*\))?', '', line)
@@ -1947,7 +2099,8 @@
     # Remove all template parameters by removing matching < and >.
     # Loop until no templates are removed to remove nested templates.
     while True:
-        line, number_of_replacements = subn(r'<([\w\s:]|::)+\s*[*&]*\s*>', '', line)
+        line, number_of_replacements = subn(r'<([\w\s:]|::)+\s*[*&]*\s*>', '',
+                                            line)
         if not number_of_replacements:
             break
 
@@ -1965,7 +2118,8 @@
     #
     # and we will need different treatments for them.
     line = sub(r'^\s*for\s*\(', '', line)
-    line, control_statement = subn(r'^\s*(while|else if|if|switch)\s*\(', '', line)
+    line, control_statement = subn(r'^\s*(while|else if|if|switch)\s*\(', '',
+                                   line)
 
     # Detect variable and functions.
     type_regexp = r'\w([\w]|\s*[*&]\s*|::)+'
@@ -1989,7 +2143,8 @@
         if not matched:
             return
         identifier = matched.group('identifier')
-        character_after_identifier = matched.group('character_after_identifier')
+        character_after_identifier = matched.group(
+            'character_after_identifier')
 
         # If we removed a non-for-control statement, the character after
         # the identifier should be '='. With this rule, we can avoid
@@ -2025,9 +2180,11 @@
       pattern: The conversion function pattern to grep for.
       error: The function to call with any errors found.
     """
+
     def get_abs_filepath(filename):
         fileSystem = FileSystem()
-        base_dir = fileSystem.path_to_module(FileSystem.__module__).split('WebKit', 1)[0]
+        base_dir = fileSystem.path_to_module(FileSystem.__module__).split(
+            'WebKit', 1)[0]
         base_dir = ''.join((base_dir, 'WebKit/Source'))
         for root, _, names in os.walk(base_dir):
             if filename in names:
@@ -2048,7 +2205,10 @@
                     # catch invalid conversions and shouldn't be part of possible alternatives.
                     result = re.search(r'%s(\s+)%s' % ('void', pattern), line)
                     if not result:
-                        matches.append([line, function_state.body_start_position.row, function_state.end_position.row + 1])
+                        matches.append([
+                            line, function_state.body_start_position.row,
+                            function_state.end_position.row + 1
+                        ])
                         function_state = None
             except UnicodeDecodeError:
                 # There would be no non-ascii characters in the codebase ever. The only exception
@@ -2120,7 +2280,8 @@
         class_name = class_name[namespace_pos + 2:]
 
     header_file = ''.join((class_name, '.h'))
-    matches = check_for_toFoo_definition(header_file, ''.join(('to', class_name)), error)
+    matches = check_for_toFoo_definition(header_file, ''.join(
+        ('to', class_name)), error)
     # Ignore (for now) if not able to find the header where toFoo might be defined.
     # TODO: Handle cases where Classname might be defined in some other header or cpp file.
     if matches is None:
@@ -2138,19 +2299,20 @@
         if len(matches):
             # toFoo is defined - enforce using it.
             # TODO: Suggest an appropriate toFoo from the alternatives present in matches.
-            error(line_number, 'runtime/casting', 4,
-                  'static_cast of class objects is not allowed. Use to%s defined in %s.' %
-                  (class_name, header_file))
+            error(
+                line_number, 'runtime/casting', 4,
+                'static_cast of class objects is not allowed. Use to%s defined in %s.'
+                % (class_name, header_file))
         else:
             # No toFoo defined - enforce definition & usage.
             # TODO: Automate the generation of toFoo() to avoid any slippages ever.
-            error(line_number, 'runtime/casting', 4,
-                  'static_cast of class objects is not allowed. Add to%s in %s and use it instead.' %
-                  (class_name, header_file))
+            error(
+                line_number, 'runtime/casting', 4,
+                'static_cast of class objects is not allowed. Add to%s in %s and use it instead.'
+                % (class_name, header_file))
 
 
-def check_c_style_cast(line_number, line, raw_line, cast_type, pattern,
-                       error):
+def check_c_style_cast(line_number, line, raw_line, cast_type, pattern, error):
     """Checks for a C-style cast by looking for the pattern.
 
     This also handles sizeof(type) warnings, due to similarity of content.
@@ -2193,46 +2355,86 @@
         return
 
     # At this point, all that should be left is actual casts.
-    error(line_number, 'readability/casting', 4,
-          'Using C-style cast.  Use %s<%s>(...) instead' %
-          (cast_type, matched.group(1)))
+    error(
+        line_number, 'readability/casting', 4,
+        'Using C-style cast.  Use %s<%s>(...) instead' % (cast_type,
+                                                          matched.group(1)))
 
 
 _HEADERS_CONTAINING_TEMPLATES = (
-    ('<deque>', ('deque',)),
-    ('<functional>', ('unary_function', 'binary_function',
-                      'plus', 'minus', 'multiplies', 'divides', 'modulus',
-                      'negate',
-                      'equal_to', 'not_equal_to', 'greater', 'less',
-                      'greater_equal', 'less_equal',
-                      'logical_and', 'logical_or', 'logical_not',
-                      'unary_negate', 'not1', 'binary_negate', 'not2',
-                      'bind1st', 'bind2nd',
-                      'pointer_to_unary_function',
-                      'pointer_to_binary_function',
-                      'ptr_fun',
-                      'mem_fun_t', 'mem_fun', 'mem_fun1_t', 'mem_fun1_ref_t',
-                      'mem_fun_ref_t',
-                      'const_mem_fun_t', 'const_mem_fun1_t',
-                      'const_mem_fun_ref_t', 'const_mem_fun1_ref_t',
-                      'mem_fun_ref',
-                      )),
-    ('<limits>', ('numeric_limits',)),
-    ('<list>', ('list',)),
-    ('<map>', ('map', 'multimap',)),
-    ('<memory>', ('allocator',)),
-    ('<queue>', ('queue', 'priority_queue',)),
-    ('<set>', ('set', 'multiset',)),
-    ('<stack>', ('stack',)),
-    ('<string>', ('char_traits', 'basic_string',)),
-    ('<utility>', ('pair',)),
-    ('<vector>', ('vector',)),
+    ('<deque>', ('deque', )),
+    ('<functional>', (
+        'unary_function',
+        'binary_function',
+        'plus',
+        'minus',
+        'multiplies',
+        'divides',
+        'modulus',
+        'negate',
+        'equal_to',
+        'not_equal_to',
+        'greater',
+        'less',
+        'greater_equal',
+        'less_equal',
+        'logical_and',
+        'logical_or',
+        'logical_not',
+        'unary_negate',
+        'not1',
+        'binary_negate',
+        'not2',
+        'bind1st',
+        'bind2nd',
+        'pointer_to_unary_function',
+        'pointer_to_binary_function',
+        'ptr_fun',
+        'mem_fun_t',
+        'mem_fun',
+        'mem_fun1_t',
+        'mem_fun1_ref_t',
+        'mem_fun_ref_t',
+        'const_mem_fun_t',
+        'const_mem_fun1_t',
+        'const_mem_fun_ref_t',
+        'const_mem_fun1_ref_t',
+        'mem_fun_ref',
+    )),
+    ('<limits>', ('numeric_limits', )),
+    ('<list>', ('list', )),
+    ('<map>', (
+        'map',
+        'multimap',
+    )),
+    ('<memory>', ('allocator', )),
+    ('<queue>', (
+        'queue',
+        'priority_queue',
+    )),
+    ('<set>', (
+        'set',
+        'multiset',
+    )),
+    ('<stack>', ('stack', )),
+    ('<string>', (
+        'char_traits',
+        'basic_string',
+    )),
+    ('<utility>', ('pair', )),
+    ('<vector>', ('vector', )),
 
     # gcc extensions.
     # Note: std::hash is their hash, ::hash is our hash
-    ('<hash_map>', ('hash_map', 'hash_multimap',)),
-    ('<hash_set>', ('hash_set', 'hash_multiset',)),
-    ('<slist>', ('slist',)),
+    ('<hash_map>', (
+        'hash_map',
+        'hash_multimap',
+    )),
+    ('<hash_set>', (
+        'hash_set',
+        'hash_multiset',
+    )),
+    ('<slist>', ('slist', )),
 )
 
 _HEADERS_ACCEPTED_BUT_NOT_PROMOTED = {
@@ -2248,16 +2450,14 @@
     # Match max<type>(..., ...), max(..., ...), but not foo->max, foo.max or
     # type::max().
     _re_pattern_algorithm_header.append(
-        (re.compile(r'[^>.]\b' + _template + r'(<.*?>)?\([^\)]'),
-         _template,
+        (re.compile(r'[^>.]\b' + _template + r'(<.*?>)?\([^\)]'), _template,
          '<algorithm>'))
 
 _re_pattern_templates = []
 for _header, _templates in _HEADERS_CONTAINING_TEMPLATES:
     for _template in _templates:
         _re_pattern_templates.append(
-            (re.compile(r'(\<|\b)' + _template + r'\s*\<'),
-             _template + '<>',
+            (re.compile(r'(\<|\b)' + _template + r'\s*\<'), _template + '<>',
              _header))
 
 
@@ -2341,11 +2541,13 @@
             include = matched.group(2)
             # The value formatting is cute, but not really used right now.
             # What matters here is that the key is in include_state.
-            include_state.setdefault(include, '%s:%d' % (filename, line_number))
+            include_state.setdefault(include,
+                                     '%s:%d' % (filename, line_number))
     return True
 
 
-def check_for_include_what_you_use(filename, clean_lines, include_state, error):
+def check_for_include_what_you_use(filename, clean_lines, include_state,
+                                   error):
     """Reports for missing stl includes.
 
     This function will output warnings to make sure you are including the headers
@@ -2360,7 +2562,8 @@
       include_state: An _IncludeState instance.
       error: The function to call with any errors found.
     """
-    required = {}  # A map of header name to line_number and the template entity.
+    # A map of header name to line_number and the template entity.
+    required = {}
     # Example of required: { '<functional>': (1219, 'less<>') }
 
     for line_number in xrange(clean_lines.num_lines()):
@@ -2407,7 +2610,8 @@
     # include_state is modified during iteration, so we iterate over a copy of
     # the keys.
     for header in include_state.keys():  # NOLINT
-        (same_module, common_path) = files_belong_to_same_module(abs_filename, header)
+        (same_module, common_path) = files_belong_to_same_module(
+            abs_filename, header)
         fullpath = common_path + header
         if same_module and update_include_state(fullpath, include_state):
             header_found = True
@@ -2428,14 +2632,14 @@
             if [True for header in headers if header in include_state]:
                 continue
         if required_header_unstripped.strip('<>"') not in include_state:
-            error(required[required_header_unstripped][0],
-                  'build/include_what_you_use', 4,
-                  'Add #include ' + required_header_unstripped + ' for ' + template)
+            error(
+                required[required_header_unstripped][0],
+                'build/include_what_you_use', 4, 'Add #include ' +
+                required_header_unstripped + ' for ' + template)
 
 
-def process_line(filename, file_extension,
-                 clean_lines, line, include_state, function_state,
-                 class_state, file_state, error):
+def process_line(filename, file_extension, clean_lines, line, include_state,
+                 function_state, class_state, file_state, error):
     """Processes a single line in the file.
 
     Args:
@@ -2458,7 +2662,8 @@
     check_for_function_lengths(clean_lines, line, function_state, error)
     if search(r'\bNOLINT\b', raw_lines[line]):  # ignore nolint lines
         return
-    if match(r'\s*\b__asm\b', raw_lines[line]):  # Ignore asm lines as they format differently.
+    # Ignore asm lines as they format differently.
+    if match(r'\s*\b__asm\b', raw_lines[line]):
         return
     check_pass_ptr_usage(clean_lines, line, function_state, error)
     check_style(clean_lines, line, file_state, error)
@@ -2467,7 +2672,8 @@
     check_for_non_standard_constructs(clean_lines, line, class_state, error)
     check_posix_threading(clean_lines, line, error)
     check_invalid_increment(clean_lines, line, error)
-    check_conditional_and_loop_bodies_for_brace_violations(clean_lines, line, error)
+    check_conditional_and_loop_bodies_for_brace_violations(
+        clean_lines, line, error)
     check_redundant_virtual(clean_lines, line, error)
     check_redundant_override(clean_lines, line, error)
 
@@ -2482,8 +2688,8 @@
              last element being empty if the file is terminated with a newline.
       error: A callable to which errors are reported, which takes 4 arguments:
     """
-    lines = (['// marker so line numbers and indices both start at 1'] + lines +
-             ['// marker so line numbers end in a known way'])
+    lines = (['// marker so line numbers and indices both start at 1'] + lines
+             + ['// marker so line numbers end in a known way'])
 
     include_state = _IncludeState()
     function_state = _FunctionState(min_confidence)
@@ -2512,7 +2718,6 @@
 
 
 class CppChecker(object):
-
     """Processes C++ lines for checking style."""
 
     # This list is used to--
@@ -2554,8 +2759,12 @@
 
     fs = None
 
-    def __init__(self, file_path, file_extension, handle_style_error,
-                 min_confidence, fs=None):
+    def __init__(self,
+                 file_path,
+                 file_extension,
+                 handle_style_error,
+                 min_confidence,
+                 fs=None):
         """Create a CppChecker instance.
 
         Args:
@@ -2593,6 +2802,11 @@
 
 
 # FIXME: Remove this function (requires refactoring unit tests).
-def process_file_data(filename, file_extension, lines, error, min_confidence, fs=None):
+def process_file_data(filename,
+                      file_extension,
+                      lines,
+                      error,
+                      min_confidence,
+                      fs=None):
     checker = CppChecker(filename, file_extension, error, min_confidence, fs)
     checker.check(lines)
diff --git a/third_party/blink/tools/blinkpy/style/checkers/cpp_unittest.py b/third_party/blink/tools/blinkpy/style/checkers/cpp_unittest.py
index c75ba99..f410f9d 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/cpp_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/cpp_unittest.py
@@ -30,7 +30,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit test for cpp_style.py."""
 
 # FIXME: Add a good test that tests UpdateIncludeState.
@@ -51,7 +50,6 @@
 
 
 class ErrorCollector(object):
-
     def __init__(self, assert_fn, filter=None, lines_to_check=None):
         """assert_fn: a function to call when we notice a problem.
            filter: filters the errors that we are concerned about.
@@ -65,15 +63,17 @@
         self._filter = filter
 
     def __call__(self, line_number, category, confidence, message):
-        self._assert_fn(category in self._all_style_categories,
-                        'Message "%s" has category "%s",'
-                        ' which is not in STYLE_CATEGORIES' % (message, category))
+        self._assert_fn(
+            category in self._all_style_categories,
+            'Message "%s" has category "%s",'
+            ' which is not in STYLE_CATEGORIES' % (message, category))
 
         if self._lines_to_check and not line_number in self._lines_to_check:
             return False
 
         if self._filter.should_check(category, ''):
-            self._errors.append('%s  [%s] [%d]' % (message, category, confidence))
+            self._errors.append(
+                '%s  [%s] [%d]' % (message, category, confidence))
         return True
 
     def results(self):
@@ -87,33 +87,41 @@
 
 
 class CppFunctionsTest(unittest.TestCase):
-
     """Supports testing functions that do not need CppStyleTestBase."""
 
     def test_is_c_or_objective_c(self):
         clean_lines = cpp_style.CleansedLines([''])
         clean_objc_lines = cpp_style.CleansedLines(['#import "header.h"'])
-        self.assertTrue(cpp_style._FileState(clean_lines, 'c').is_c_or_objective_c())
-        self.assertTrue(cpp_style._FileState(clean_lines, 'm').is_c_or_objective_c())
-        self.assertFalse(cpp_style._FileState(clean_lines, 'cpp').is_c_or_objective_c())
-        self.assertFalse(cpp_style._FileState(clean_lines, 'cc').is_c_or_objective_c())
-        self.assertFalse(cpp_style._FileState(clean_lines, 'h').is_c_or_objective_c())
-        self.assertTrue(cpp_style._FileState(clean_objc_lines, 'h').is_c_or_objective_c())
+        self.assertTrue(
+            cpp_style._FileState(clean_lines, 'c').is_c_or_objective_c())
+        self.assertTrue(
+            cpp_style._FileState(clean_lines, 'm').is_c_or_objective_c())
+        self.assertFalse(
+            cpp_style._FileState(clean_lines, 'cpp').is_c_or_objective_c())
+        self.assertFalse(
+            cpp_style._FileState(clean_lines, 'cc').is_c_or_objective_c())
+        self.assertFalse(
+            cpp_style._FileState(clean_lines, 'h').is_c_or_objective_c())
+        self.assertTrue(
+            cpp_style._FileState(clean_objc_lines, 'h').is_c_or_objective_c())
 
     def test_single_line_view(self):
         start_position = cpp_style.Position(row=1, column=1)
         end_position = cpp_style.Position(row=3, column=1)
-        single_line_view = cpp_style.SingleLineView(['0', 'abcde', 'fgh', 'i'], start_position, end_position)
+        single_line_view = cpp_style.SingleLineView(
+            ['0', 'abcde', 'fgh', 'i'], start_position, end_position)
         self.assertEqual(single_line_view.single_line, 'bcde fgh i')
 
         start_position = cpp_style.Position(row=0, column=3)
         end_position = cpp_style.Position(row=0, column=4)
-        single_line_view = cpp_style.SingleLineView(['abcdef'], start_position, end_position)
+        single_line_view = cpp_style.SingleLineView(['abcdef'], start_position,
+                                                    end_position)
         self.assertEqual(single_line_view.single_line, 'd')
 
         start_position = cpp_style.Position(row=0, column=0)
         end_position = cpp_style.Position(row=3, column=2)
-        single_line_view = cpp_style.SingleLineView(['""', '""', '""'], start_position, end_position)
+        single_line_view = cpp_style.SingleLineView(
+            ['""', '""', '""'], start_position, end_position)
         self.assertEqual(single_line_view.single_line, '""')
 
 
@@ -131,13 +139,25 @@
 
     # Helper function to avoid needing to explicitly pass confidence
     # in all the unit test calls to cpp_style.process_file_data().
-    def process_file_data(self, filename, file_extension, lines, error, fs=None):
+    def process_file_data(self,
+                          filename,
+                          file_extension,
+                          lines,
+                          error,
+                          fs=None):
         """Call cpp_style.process_file_data() with the min_confidence."""
         return cpp_style.process_file_data(filename, file_extension, lines,
                                            error, self.min_confidence, fs)
 
-    def perform_lint(self, code, filename, basic_error_rules, fs=None, lines_to_check=None):
-        error_collector = ErrorCollector(self.assertTrue, FilterConfiguration(basic_error_rules), lines_to_check)
+    def perform_lint(self,
+                     code,
+                     filename,
+                     basic_error_rules,
+                     fs=None,
+                     lines_to_check=None):
+        error_collector = ErrorCollector(
+            self.assertTrue, FilterConfiguration(basic_error_rules),
+            lines_to_check)
         lines = code.split('\n')
         extension = filename.split('.')[1]
         self.process_file_data(filename, extension, lines, error_collector, fs)
@@ -145,8 +165,7 @@
 
     # Perform lint on single line of input and return the error message.
     def perform_single_line_lint(self, code, filename):
-        basic_error_rules = ('-build/header_guard',
-                             '-legal/copyright',
+        basic_error_rules = ('-build/header_guard', '-legal/copyright',
                              '-readability/fn_size',
                              '-readability/parameter_name',
                              '-readability/pass_ptr',
@@ -155,53 +174,55 @@
 
     # Perform lint over multiple lines and return the error message.
     def perform_multi_line_lint(self, code, file_extension):
-        basic_error_rules = ('-build/header_guard',
-                             '-legal/copyright',
+        basic_error_rules = ('-build/header_guard', '-legal/copyright',
                              '-readability/parameter_name',
                              '-whitespace/ending_newline')
-        return self.perform_lint(code, 'test.' + file_extension, basic_error_rules)
+        return self.perform_lint(code, 'test.' + file_extension,
+                                 basic_error_rules)
 
     # Only keep some errors related to includes, namespaces and rtti.
-    def perform_language_rules_check(self, filename, code, lines_to_check=None):
-        basic_error_rules = ('-',
-                             '+build/include',
-                             '+build/include_order')
-        return self.perform_lint(code, filename, basic_error_rules, lines_to_check=lines_to_check)
+    def perform_language_rules_check(self, filename, code,
+                                     lines_to_check=None):
+        basic_error_rules = ('-', '+build/include', '+build/include_order')
+        return self.perform_lint(
+            code, filename, basic_error_rules, lines_to_check=lines_to_check)
 
     # Only keep function length errors.
     def perform_function_lengths_check(self, code):
-        basic_error_rules = ('-',
-                             '+readability/fn_size')
+        basic_error_rules = ('-', '+readability/fn_size')
         return self.perform_lint(code, 'test.cpp', basic_error_rules)
 
     # Only keep pass ptr errors.
     def perform_pass_ptr_check(self, code):
-        basic_error_rules = ('-',
-                             '+readability/pass_ptr')
+        basic_error_rules = ('-', '+readability/pass_ptr')
         return self.perform_lint(code, 'test.cpp', basic_error_rules)
 
     # Only keep leaky pattern errors.
     def perform_leaky_pattern_check(self, code):
-        basic_error_rules = ('-',
-                             '+runtime/leaky_pattern')
+        basic_error_rules = ('-', '+runtime/leaky_pattern')
         return self.perform_lint(code, 'test.cpp', basic_error_rules)
 
     # Only include what you use errors.
     def perform_include_what_you_use(self, code, filename='foo.h', fs=None):
-        basic_error_rules = ('-',
-                             '+build/include_what_you_use')
+        basic_error_rules = ('-', '+build/include_what_you_use')
         return self.perform_lint(code, filename, basic_error_rules, fs)
 
-    def perform_avoid_static_cast_of_objects(self, code, filename='foo.cpp', fs=None):
-        basic_error_rules = ('-',
-                             '+runtime/casting')
+    def perform_avoid_static_cast_of_objects(self,
+                                             code,
+                                             filename='foo.cpp',
+                                             fs=None):
+        basic_error_rules = ('-', '+runtime/casting')
         return self.perform_lint(code, filename, basic_error_rules, fs)
 
     # Perform lint and compare the error message with "expected_message".
     def assert_lint(self, code, expected_message, file_name='foo.cpp'):
-        self.assertEqual(expected_message, self.perform_single_line_lint(code, file_name))
+        self.assertEqual(expected_message,
+                         self.perform_single_line_lint(code, file_name))
 
-    def assert_lint_one_of_many_errors_re(self, code, expected_message_re, file_name='foo.cpp'):
+    def assert_lint_one_of_many_errors_re(self,
+                                          code,
+                                          expected_message_re,
+                                          file_name='foo.cpp'):
         messages = self.perform_single_line_lint(code, file_name)
         for message in messages:
             if re.search(expected_message_re, message):
@@ -209,19 +230,30 @@
 
         self.assertEqual(expected_message_re, messages)
 
-    def assert_multi_line_lint(self, code, expected_message, file_name='foo.h'):
+    def assert_multi_line_lint(self, code, expected_message,
+                               file_name='foo.h'):
         file_extension = file_name[file_name.rfind('.') + 1:]
-        self.assertEqual(expected_message, self.perform_multi_line_lint(code, file_extension))
+        self.assertEqual(expected_message,
+                         self.perform_multi_line_lint(code, file_extension))
 
-    def assert_multi_line_lint_re(self, code, expected_message_re, file_name='foo.h'):
+    def assert_multi_line_lint_re(self,
+                                  code,
+                                  expected_message_re,
+                                  file_name='foo.h'):
         file_extension = file_name[file_name.rfind('.') + 1:]
         message = self.perform_multi_line_lint(code, file_extension)
         if not re.search(expected_message_re, message):
-            self.fail('Message was:\n' + message + 'Expected match to "' + expected_message_re + '"')
+            self.fail('Message was:\n' + message + 'Expected match to "' +
+                      expected_message_re + '"')
 
-    def assert_language_rules_check(self, file_name, code, expected_message, lines_to_check=None):
-        self.assertEqual(expected_message,
-                         self.perform_language_rules_check(file_name, code, lines_to_check))
+    def assert_language_rules_check(self,
+                                    file_name,
+                                    code,
+                                    expected_message,
+                                    lines_to_check=None):
+        self.assertEqual(
+            expected_message,
+            self.perform_language_rules_check(file_name, code, lines_to_check))
 
     def assert_include_what_you_use(self, code, expected_message):
         self.assertEqual(expected_message,
@@ -233,30 +265,45 @@
         position: a cpp_style.Position object.
         tuple_position: a tuple (row, column) to compare against.
         """
-        self.assertEqual(position, cpp_style.Position(tuple_position[0], tuple_position[1]),
-                         'position %s, tuple_position %s' % (position, tuple_position))
+        self.assertEqual(
+            position, cpp_style.Position(tuple_position[0], tuple_position[1]),
+            'position %s, tuple_position %s' % (position, tuple_position))
 
 
 class FunctionDetectionTest(CppStyleTestBase):
-
-    def perform_function_detection(self, lines, function_information, detection_line=0):
+    def perform_function_detection(self,
+                                   lines,
+                                   function_information,
+                                   detection_line=0):
         clean_lines = cpp_style.CleansedLines(lines)
         function_state = cpp_style._FunctionState(5)
         error_collector = ErrorCollector(self.assertTrue)
-        cpp_style.detect_functions(clean_lines, detection_line, function_state, error_collector)
+        cpp_style.detect_functions(clean_lines, detection_line, function_state,
+                                   error_collector)
         if not function_information:
             self.assertEqual(function_state.in_a_function, False)
             return
         self.assertEqual(function_state.in_a_function, True)
-        self.assertEqual(function_state.current_function, function_information['name'] + '()')
-        self.assertEqual(function_state.is_pure, function_information['is_pure'])
-        self.assertEqual(function_state.is_declaration, function_information['is_declaration'])
-        self.assert_positions_equal(function_state.function_name_start_position,
-                                    function_information['function_name_start_position'])
-        self.assert_positions_equal(function_state.parameter_start_position, function_information['parameter_start_position'])
-        self.assert_positions_equal(function_state.parameter_end_position, function_information['parameter_end_position'])
-        self.assert_positions_equal(function_state.body_start_position, function_information['body_start_position'])
-        self.assert_positions_equal(function_state.end_position, function_information['end_position'])
+        self.assertEqual(function_state.current_function,
+                         function_information['name'] + '()')
+        self.assertEqual(function_state.is_pure,
+                         function_information['is_pure'])
+        self.assertEqual(function_state.is_declaration,
+                         function_information['is_declaration'])
+        self.assert_positions_equal(
+            function_state.function_name_start_position,
+            function_information['function_name_start_position'])
+        self.assert_positions_equal(
+            function_state.parameter_start_position,
+            function_information['parameter_start_position'])
+        self.assert_positions_equal(
+            function_state.parameter_end_position,
+            function_information['parameter_end_position'])
+        self.assert_positions_equal(
+            function_state.body_start_position,
+            function_information['body_start_position'])
+        self.assert_positions_equal(function_state.end_position,
+                                    function_information['end_position'])
         expected_parameters = function_information.get('parameter_list')
         if expected_parameters:
             actual_parameters = function_state.parameter_list()
@@ -264,115 +311,132 @@
             for index in range(len(expected_parameters)):
                 actual_parameter = actual_parameters[index]
                 expected_parameter = expected_parameters[index]
-                self.assertEqual(actual_parameter.type, expected_parameter['type'])
-                self.assertEqual(actual_parameter.name, expected_parameter['name'])
-                self.assertEqual(actual_parameter.row, expected_parameter['row'])
+                self.assertEqual(actual_parameter.type,
+                                 expected_parameter['type'])
+                self.assertEqual(actual_parameter.name,
+                                 expected_parameter['name'])
+                self.assertEqual(actual_parameter.row,
+                                 expected_parameter['row'])
 
     def test_basic_function_detection(self):
         self.perform_function_detection(
-            ['void theTestFunctionName(int) {',
-             '}'],
-            {'name': 'theTestFunctionName',
-             'function_name_start_position': (0, 5),
-             'parameter_start_position': (0, 24),
-             'parameter_end_position': (0, 29),
-             'body_start_position': (0, 30),
-             'end_position': (1, 1),
-             'is_pure': False,
-             'is_declaration': False})
+            ['void theTestFunctionName(int) {', '}'], {
+                'name': 'theTestFunctionName',
+                'function_name_start_position': (0, 5),
+                'parameter_start_position': (0, 24),
+                'parameter_end_position': (0, 29),
+                'body_start_position': (0, 30),
+                'end_position': (1, 1),
+                'is_pure': False,
+                'is_declaration': False
+            })
 
     def test_function_declaration_detection(self):
         self.perform_function_detection(
-            ['void aFunctionName(int);'],
-            {'name': 'aFunctionName',
-             'function_name_start_position': (0, 5),
-             'parameter_start_position': (0, 18),
-             'parameter_end_position': (0, 23),
-             'body_start_position': (0, 23),
-             'end_position': (0, 24),
-             'is_pure': False,
-             'is_declaration': True})
+            ['void aFunctionName(int);'], {
+                'name': 'aFunctionName',
+                'function_name_start_position': (0, 5),
+                'parameter_start_position': (0, 18),
+                'parameter_end_position': (0, 23),
+                'body_start_position': (0, 23),
+                'end_position': (0, 24),
+                'is_pure': False,
+                'is_declaration': True
+            })
 
         self.perform_function_detection(
-            ['CheckedInt<T> operator /(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'],
-            {'name': 'operator /',
-             'function_name_start_position': (0, 14),
-             'parameter_start_position': (0, 24),
-             'parameter_end_position': (0, 76),
-             'body_start_position': (0, 76),
-             'end_position': (0, 77),
-             'is_pure': False,
-             'is_declaration': True})
+            [
+                'CheckedInt<T> operator /(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'
+            ], {
+                'name': 'operator /',
+                'function_name_start_position': (0, 14),
+                'parameter_start_position': (0, 24),
+                'parameter_end_position': (0, 76),
+                'body_start_position': (0, 76),
+                'end_position': (0, 77),
+                'is_pure': False,
+                'is_declaration': True
+            })
 
         self.perform_function_detection(
-            ['CheckedInt<T> operator -(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'],
-            {'name': 'operator -',
-             'function_name_start_position': (0, 14),
-             'parameter_start_position': (0, 24),
-             'parameter_end_position': (0, 76),
-             'body_start_position': (0, 76),
-             'end_position': (0, 77),
-             'is_pure': False,
-             'is_declaration': True})
+            [
+                'CheckedInt<T> operator -(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'
+            ], {
+                'name': 'operator -',
+                'function_name_start_position': (0, 14),
+                'parameter_start_position': (0, 24),
+                'parameter_end_position': (0, 76),
+                'body_start_position': (0, 76),
+                'end_position': (0, 77),
+                'is_pure': False,
+                'is_declaration': True
+            })
 
         self.perform_function_detection(
-            ['CheckedInt<T> operator !=(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'],
-            {'name': 'operator !=',
-             'function_name_start_position': (0, 14),
-             'parameter_start_position': (0, 25),
-             'parameter_end_position': (0, 77),
-             'body_start_position': (0, 77),
-             'end_position': (0, 78),
-             'is_pure': False,
-             'is_declaration': True})
+            [
+                'CheckedInt<T> operator !=(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'
+            ], {
+                'name': 'operator !=',
+                'function_name_start_position': (0, 14),
+                'parameter_start_position': (0, 25),
+                'parameter_end_position': (0, 77),
+                'body_start_position': (0, 77),
+                'end_position': (0, 78),
+                'is_pure': False,
+                'is_declaration': True
+            })
 
         self.perform_function_detection(
-            ['CheckedInt<T> operator +(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'],
-            {'name': 'operator +',
-             'function_name_start_position': (0, 14),
-             'parameter_start_position': (0, 24),
-             'parameter_end_position': (0, 76),
-             'body_start_position': (0, 76),
-             'end_position': (0, 77),
-             'is_pure': False,
-             'is_declaration': True})
+            [
+                'CheckedInt<T> operator +(const CheckedInt<T> &lhs, const CheckedInt<T> &rhs);'
+            ], {
+                'name': 'operator +',
+                'function_name_start_position': (0, 14),
+                'parameter_start_position': (0, 24),
+                'parameter_end_position': (0, 76),
+                'body_start_position': (0, 76),
+                'end_position': (0, 77),
+                'is_pure': False,
+                'is_declaration': True
+            })
 
     def test_pure_function_detection(self):
         self.perform_function_detection(
-            ['virtual void theTestFunctionName(int = 0);'],
-            {'name': 'theTestFunctionName',
-             'function_name_start_position': (0, 13),
-             'parameter_start_position': (0, 32),
-             'parameter_end_position': (0, 41),
-             'body_start_position': (0, 41),
-             'end_position': (0, 42),
-             'is_pure': False,
-             'is_declaration': True})
+            ['virtual void theTestFunctionName(int = 0);'], {
+                'name': 'theTestFunctionName',
+                'function_name_start_position': (0, 13),
+                'parameter_start_position': (0, 32),
+                'parameter_end_position': (0, 41),
+                'body_start_position': (0, 41),
+                'end_position': (0, 42),
+                'is_pure': False,
+                'is_declaration': True
+            })
 
         self.perform_function_detection(
-            ['virtual void theTestFunctionName(int) = 0;'],
-            {'name': 'theTestFunctionName',
-             'function_name_start_position': (0, 13),
-             'parameter_start_position': (0, 32),
-             'parameter_end_position': (0, 37),
-             'body_start_position': (0, 41),
-             'end_position': (0, 42),
-             'is_pure': True,
-             'is_declaration': True})
+            ['virtual void theTestFunctionName(int) = 0;'], {
+                'name': 'theTestFunctionName',
+                'function_name_start_position': (0, 13),
+                'parameter_start_position': (0, 32),
+                'parameter_end_position': (0, 37),
+                'body_start_position': (0, 41),
+                'end_position': (0, 42),
+                'is_pure': True,
+                'is_declaration': True
+            })
 
         # Hopefully, no one writes code like this but it is a tricky case.
         self.perform_function_detection(
-            ['virtual void theTestFunctionName(int)',
-             ' = ',
-             ' 0 ;'],
-            {'name': 'theTestFunctionName',
-             'function_name_start_position': (0, 13),
-             'parameter_start_position': (0, 32),
-             'parameter_end_position': (0, 37),
-             'body_start_position': (2, 3),
-             'end_position': (2, 4),
-             'is_pure': True,
-             'is_declaration': True})
+            ['virtual void theTestFunctionName(int)', ' = ', ' 0 ;'], {
+                'name': 'theTestFunctionName',
+                'function_name_start_position': (0, 13),
+                'parameter_start_position': (0, 32),
+                'parameter_end_position': (0, 37),
+                'body_start_position': (2, 3),
+                'end_position': (2, 4),
+                'is_pure': True,
+                'is_declaration': True
+            })
 
     def test_ignore_macros(self):
         self.perform_function_detection(['void aFunctionName(int); \\'], None)
@@ -380,30 +444,27 @@
     def test_non_functions(self):
         # This case exposed an error because the open brace was in quotes.
         self.perform_function_detection(
-            ['asm(',
-             '  "stmdb sp!, {r1-r3}" "\n"',
-             ');'],
+            ['asm(', '  "stmdb sp!, {r1-r3}" "\n"', ');'],
             # This isn't a function but it looks like one to our simple
             # algorithm and that is ok.
-            {'name': 'asm',
-             'function_name_start_position': (0, 0),
-             'parameter_start_position': (0, 3),
-             'parameter_end_position': (2, 1),
-             'body_start_position': (2, 1),
-             'end_position': (2, 2),
-             'is_pure': False,
-             'is_declaration': True})
+            {
+                'name': 'asm',
+                'function_name_start_position': (0, 0),
+                'parameter_start_position': (0, 3),
+                'parameter_end_position': (2, 1),
+                'body_start_position': (2, 1),
+                'end_position': (2, 2),
+                'is_pure': False,
+                'is_declaration': True
+            })
 
         # Simple test case with something that is not a function.
         self.perform_function_detection(['class Stuff;'], None)
 
 
 class CppStyleTest(CppStyleTestBase):
-
     def test_asm_lines_ignored(self):
-        self.assert_lint(
-            '__asm mov [registration], eax',
-            '')
+        self.assert_lint('__asm mov [registration], eax', '')
 
     # Test get line width.
     def test_get_line_width(self):
@@ -412,21 +473,28 @@
         self.assertEqual(16, cpp_style.get_line_width(u'都|道|府|県|支庁'))
 
     def test_find_next_multi_line_comment_start(self):
-        self.assertEqual(1, cpp_style.find_next_multi_line_comment_start([''], 0))
+        self.assertEqual(1,
+                         cpp_style.find_next_multi_line_comment_start([''], 0))
 
         lines = ['a', 'b', '/* c']
-        self.assertEqual(2, cpp_style.find_next_multi_line_comment_start(lines, 0))
+        self.assertEqual(
+            2, cpp_style.find_next_multi_line_comment_start(lines, 0))
 
         lines = ['char a[] = "/*";']  # not recognized as comment.
-        self.assertEqual(1, cpp_style.find_next_multi_line_comment_start(lines, 0))
+        self.assertEqual(
+            1, cpp_style.find_next_multi_line_comment_start(lines, 0))
 
     def test_find_next_multi_line_comment_end(self):
-        self.assertEqual(1, cpp_style.find_next_multi_line_comment_end([''], 0))
+        self.assertEqual(1, cpp_style.find_next_multi_line_comment_end([''],
+                                                                       0))
         lines = ['a', 'b', ' c */']
-        self.assertEqual(2, cpp_style.find_next_multi_line_comment_end(lines, 0))
+        self.assertEqual(2, cpp_style.find_next_multi_line_comment_end(
+            lines, 0))
 
     def test_remove_multi_line_comments_from_range(self):
-        lines = ['a', '  /* comment ', ' * still comment', ' comment */   ', 'b']
+        lines = [
+            'a', '  /* comment ', ' * still comment', ' comment */   ', 'b'
+        ]
         cpp_style.remove_multi_line_comments_from_range(lines, 1, 4)
         self.assertEqual(['a', '// dummy', '// dummy', '// dummy', 'b'], lines)
 
@@ -434,44 +502,81 @@
         position = cpp_style.Position(3, 4)
         self.assert_positions_equal(position, (3, 4))
         self.assertEqual(position.row, 3)
-        self.assertTrue(position > cpp_style.Position(position.row - 1, position.column + 1))
-        self.assertTrue(position > cpp_style.Position(position.row, position.column - 1))
-        self.assertTrue(position < cpp_style.Position(position.row, position.column + 1))
-        self.assertTrue(position < cpp_style.Position(position.row + 1, position.column - 1))
+        self.assertTrue(position > cpp_style.Position(position.row -
+                                                      1, position.column + 1))
+        self.assertTrue(
+            position > cpp_style.Position(position.row, position.column - 1))
+        self.assertTrue(
+            position < cpp_style.Position(position.row, position.column + 1))
+        self.assertTrue(position < cpp_style.Position(position.row +
+                                                      1, position.column - 1))
         self.assertEqual(position.__str__(), '(3, 4)')
 
     def test_rfind_in_lines(self):
         not_found_position = cpp_style.Position(10, 11)
         start_position = cpp_style.Position(2, 2)
         lines = ['ab', 'ace', 'test']
-        self.assertEqual(not_found_position, cpp_style._rfind_in_lines('st', lines, start_position, not_found_position))
-        self.assertTrue(cpp_style.Position(1, 1) == cpp_style._rfind_in_lines('a', lines, start_position, not_found_position))
-        self.assertEqual(cpp_style.Position(2, 2), cpp_style._rfind_in_lines('(te|a)', lines, start_position, not_found_position))
+        self.assertEqual(
+            not_found_position,
+            cpp_style._rfind_in_lines('st', lines, start_position,
+                                      not_found_position))
+        self.assertTrue(
+            cpp_style.Position(1, 1) == cpp_style._rfind_in_lines(
+                'a', lines, start_position, not_found_position))
+        self.assertEqual(
+            cpp_style.Position(2, 2),
+            cpp_style._rfind_in_lines('(te|a)', lines, start_position,
+                                      not_found_position))
 
     def test_close_expression(self):
-        self.assertEqual(cpp_style.Position(1, -1), cpp_style.close_expression([')('], cpp_style.Position(0, 1)))
-        self.assertEqual(cpp_style.Position(1, -1), cpp_style.close_expression([') ()'], cpp_style.Position(0, 1)))
-        self.assertEqual(cpp_style.Position(0, 4), cpp_style.close_expression([')[)]'], cpp_style.Position(0, 1)))
-        self.assertEqual(cpp_style.Position(0, 5), cpp_style.close_expression(['}{}{}'], cpp_style.Position(0, 3)))
-        self.assertEqual(cpp_style.Position(1, 1), cpp_style.close_expression(['}{}{', '}'], cpp_style.Position(0, 3)))
-        self.assertEqual(cpp_style.Position(2, -1), cpp_style.close_expression(['][][', ' '], cpp_style.Position(0, 3)))
+        self.assertEqual(
+            cpp_style.Position(1, -1),
+            cpp_style.close_expression([')('], cpp_style.Position(0, 1)))
+        self.assertEqual(
+            cpp_style.Position(1, -1),
+            cpp_style.close_expression([') ()'], cpp_style.Position(0, 1)))
+        self.assertEqual(
+            cpp_style.Position(0, 4),
+            cpp_style.close_expression([')[)]'], cpp_style.Position(0, 1)))
+        self.assertEqual(
+            cpp_style.Position(0, 5),
+            cpp_style.close_expression(['}{}{}'], cpp_style.Position(0, 3)))
+        self.assertEqual(
+            cpp_style.Position(1, 1),
+            cpp_style.close_expression(['}{}{', '}'], cpp_style.Position(0,
+                                                                         3)))
+        self.assertEqual(
+            cpp_style.Position(2, -1),
+            cpp_style.close_expression(['][][', ' '], cpp_style.Position(0,
+                                                                         3)))
 
     # Test the integer type.
     def test_precise_width_integer(self):
-        errmsg = ('Use a precise-width integer type from <stdint.h> or <cstdint> such as uint16_t instead of %s')
-        self.assert_lint('unsigned short a = 1', errmsg % 'unsigned short  [runtime/int] [1]')
+        errmsg = (
+            'Use a precise-width integer type from <stdint.h> or <cstdint> such as uint16_t instead of %s'
+        )
+        self.assert_lint('unsigned short a = 1',
+                         errmsg % 'unsigned short  [runtime/int] [1]')
         self.assert_lint('uint16_t unsignedshort = 1', '')
-        self.assert_lint('signed  short a = 1', errmsg % 'signed  short  [runtime/int] [1]')
+        self.assert_lint('signed  short a = 1',
+                         errmsg % 'signed  short  [runtime/int] [1]')
         self.assert_lint('short a = 1', errmsg % 'short  [runtime/int] [1]')
-        self.assert_lint('unsigned   long long a = 1', errmsg % 'unsigned   long long  [runtime/int] [1]')
-        self.assert_lint('signed long   long a = 1', errmsg % 'signed long   long  [runtime/int] [1]')
-        self.assert_lint('long long a = 1', errmsg % 'long long  [runtime/int] [1]')
+        self.assert_lint('unsigned   long long a = 1',
+                         errmsg % 'unsigned   long long  [runtime/int] [1]')
+        self.assert_lint('signed long   long a = 1',
+                         errmsg % 'signed long   long  [runtime/int] [1]')
+        self.assert_lint('long long a = 1',
+                         errmsg % 'long long  [runtime/int] [1]')
         self.assert_lint('uint64_t longlong = 1', '')
-        self.assert_lint('unsigned long a = 1', errmsg % 'unsigned long  [runtime/int] [1]')
-        self.assert_lint('signed   long a = 1', errmsg % 'signed   long  [runtime/int] [1]')
+        self.assert_lint('unsigned long a = 1',
+                         errmsg % 'unsigned long  [runtime/int] [1]')
+        self.assert_lint('signed   long a = 1',
+                         errmsg % 'signed   long  [runtime/int] [1]')
         self.assert_lint('long a = 1', errmsg % 'long  [runtime/int] [1]')
-        self.assert_lint('signed int   long a = 1', errmsg % 'long  [runtime/int] [1]')
-        self.assert_lint('unsigned   long   int a = 1', errmsg % 'unsigned   long  [runtime/int] [1]')
+        self.assert_lint('signed int   long a = 1',
+                         errmsg % 'long  [runtime/int] [1]')
+        self.assert_lint('unsigned   long   int a = 1',
+                         errmsg % 'unsigned   long  [runtime/int] [1]')
         self.assert_lint('unsigned longlong = 1', '')
         self.assert_lint('signed   int a = 1', '')
         self.assert_lint('int a = 1', '')
@@ -514,8 +619,10 @@
                 'Foo* x = static_cast<Foo*>(bar);',
                 filename='casting.cpp',
                 fs=fs)
-            self.assertEqual(message, 'static_cast of class objects is not allowed. Use toFoo defined in Foo.h.'
-                                      '  [runtime/casting] [4]')
+            self.assertEqual(
+                message,
+                'static_cast of class objects is not allowed. Use toFoo defined in Foo.h.'
+                '  [runtime/casting] [4]')
         finally:
             fs.read_text_file = orig_read_text_file_fn
 
@@ -533,8 +640,10 @@
                 'Foo* x = static_cast<Foo*>(bar);',
                 filename='casting.cpp',
                 fs=fs)
-            self.assertEqual(message, 'static_cast of class objects is not allowed. Add toFoo in Foo.h and use it instead.'
-                                      '  [runtime/casting] [4]')
+            self.assertEqual(
+                message,
+                'static_cast of class objects is not allowed. Add toFoo in Foo.h and use it instead.'
+                '  [runtime/casting] [4]')
         finally:
             fs.read_text_file = orig_read_text_file_fn
 
@@ -571,33 +680,22 @@
     # Test deprecated casts such as int(d)
     def test_deprecated_cast(self):
         self.assert_lint(
-            'int a = int(2.2);',
-            'Using deprecated casting style.  '
+            'int a = int(2.2);', 'Using deprecated casting style.  '
             'Use static_cast<int>(...) instead'
             '  [readability/casting] [4]')
         # Checks for false positives...
-        self.assert_lint(
-            'int a = int(); // Constructor, o.k.',
-            '')
-        self.assert_lint(
-            'X::X() : a(int()) { } // default Constructor, o.k.',
-            '')
-        self.assert_lint(
-            'operator bool(); // Conversion operator, o.k.',
-            '')
+        self.assert_lint('int a = int(); // Constructor, o.k.', '')
+        self.assert_lint('X::X() : a(int()) { } // default Constructor, o.k.',
+                         '')
+        self.assert_lint('operator bool(); // Conversion operator, o.k.', '')
 
     # The second parameter to a gMock method definition is a function signature
     # that often looks like a bad cast but should not picked up by lint.
     def test_mock_method(self):
-        self.assert_lint(
-            'MOCK_METHOD0(method, int());',
-            '')
-        self.assert_lint(
-            'MOCK_CONST_METHOD1(method, float(string));',
-            '')
-        self.assert_lint(
-            'MOCK_CONST_METHOD2_T(method, double(float, float));',
-            '')
+        self.assert_lint('MOCK_METHOD0(method, int());', '')
+        self.assert_lint('MOCK_CONST_METHOD1(method, float(string));', '')
+        self.assert_lint('MOCK_CONST_METHOD2_T(method, double(float, float));',
+                         '')
 
     # Test sizeof(type) cases.
     def test_sizeof_type(self):
@@ -614,134 +712,113 @@
     # typedef for pointer to function as C-style cast and produced
     # false-positive error messages.
     def test_typedef_for_pointer_to_function(self):
-        self.assert_lint(
-            'typedef void (*Func)(int x);',
-            '')
-        self.assert_lint(
-            'typedef void (*Func)(int *x);',
-            '')
-        self.assert_lint(
-            'typedef void Func(int x);',
-            '')
-        self.assert_lint(
-            'typedef void Func(int *x);',
-            '')
+        self.assert_lint('typedef void (*Func)(int x);', '')
+        self.assert_lint('typedef void (*Func)(int *x);', '')
+        self.assert_lint('typedef void Func(int x);', '')
+        self.assert_lint('typedef void Func(int *x);', '')
 
     def test_include_what_you_use_no_implementation_files(self):
         code = 'std::vector<int> foo;'
-        self.assertEqual('Add #include <vector> for vector<>'
-                         '  [build/include_what_you_use] [4]',
-                         self.perform_include_what_you_use(code, 'foo.h'))
-        self.assertEqual('',
-                         self.perform_include_what_you_use(code, 'foo.cpp'))
+        self.assertEqual(
+            'Add #include <vector> for vector<>'
+            '  [build/include_what_you_use] [4]',
+            self.perform_include_what_you_use(code, 'foo.h'))
+        self.assertEqual('', self.perform_include_what_you_use(
+            code, 'foo.cpp'))
 
     def test_include_what_you_use(self):
         self.assert_include_what_you_use(
             '''#include <vector>
                std::vector<int> foo;
-            ''',
-            '')
+            ''', '')
         self.assert_include_what_you_use(
             '''#include <map>
                std::pair<int,int> foo;
-            ''',
-            '')
+            ''', '')
         self.assert_include_what_you_use(
             '''#include <multimap>
                std::pair<int,int> foo;
-            ''',
-            '')
+            ''', '')
         self.assert_include_what_you_use(
             '''#include <hash_map>
                std::pair<int,int> foo;
-            ''',
-            '')
+            ''', '')
         self.assert_include_what_you_use(
             '''#include <utility>
                std::pair<int,int> foo;
-            ''',
-            '')
+            ''', '')
         self.assert_include_what_you_use(
             '''#include <vector>
                DECLARE_string(foobar);
-            ''',
-            '')
+            ''', '')
         self.assert_include_what_you_use(
             '''#include <vector>
                DEFINE_string(foobar, "", "");
-            ''',
-            '')
+            ''', '')
         self.assert_include_what_you_use(
             '''#include <vector>
                std::pair<int,int> foo;
-            ''',
-            'Add #include <utility> for pair<>'
+            ''', 'Add #include <utility> for pair<>'
             '  [build/include_what_you_use] [4]')
         self.assert_include_what_you_use(
             '''#include "base/foobar.h"
                std::vector<int> foo;
-            ''',
-            'Add #include <vector> for vector<>'
+            ''', 'Add #include <vector> for vector<>'
             '  [build/include_what_you_use] [4]')
         self.assert_include_what_you_use(
             '''#include <vector>
                std::set<int> foo;
-            ''',
-            'Add #include <set> for set<>'
+            ''', 'Add #include <set> for set<>'
             '  [build/include_what_you_use] [4]')
         self.assert_include_what_you_use(
             '''#include "base/foobar.h"
               hash_map<int, int> foobar;
-            ''',
-            'Add #include <hash_map> for hash_map<>'
+            ''', 'Add #include <hash_map> for hash_map<>'
             '  [build/include_what_you_use] [4]')
         self.assert_include_what_you_use(
             '''#include "base/foobar.h"
                bool foobar = std::less<int>(0,1);
-            ''',
-            'Add #include <functional> for less<>'
+            ''', 'Add #include <functional> for less<>'
             '  [build/include_what_you_use] [4]')
         self.assert_include_what_you_use(
             '''#include "base/foobar.h"
                bool foobar = min<int>(0,1);
             ''',
-            'Add #include <algorithm> for min  [build/include_what_you_use] [4]')
+            'Add #include <algorithm> for min  [build/include_what_you_use] [4]'
+        )
         self.assert_include_what_you_use(
             'void a(const string &foobar);',
-            'Add #include <string> for string  [build/include_what_you_use] [4]')
+            'Add #include <string> for string  [build/include_what_you_use] [4]'
+        )
         self.assert_include_what_you_use(
             '''#include "base/foobar.h"
                bool foobar = swap(0,1);
             ''',
-            'Add #include <algorithm> for swap  [build/include_what_you_use] [4]')
+            'Add #include <algorithm> for swap  [build/include_what_you_use] [4]'
+        )
         self.assert_include_what_you_use(
             '''#include "base/foobar.h"
                bool foobar = transform(a.begin(), a.end(), b.start(), Foo);
-            ''',
-            'Add #include <algorithm> for transform  '
+            ''', 'Add #include <algorithm> for transform  '
             '[build/include_what_you_use] [4]')
         self.assert_include_what_you_use(
             '''#include "base/foobar.h"
                bool foobar = min_element(a.begin(), a.end());
-            ''',
-            'Add #include <algorithm> for min_element  '
+            ''', 'Add #include <algorithm> for min_element  '
             '[build/include_what_you_use] [4]')
         self.assert_include_what_you_use(
             '''foo->swap(0,1);
                foo.swap(0,1);
-            ''',
-            '')
+            ''', '')
         self.assert_include_what_you_use(
             '''#include <string>
                void a(const std::multimap<int,string> &foobar);
-            ''',
-            'Add #include <map> for multimap<>'
+            ''', 'Add #include <map> for multimap<>'
             '  [build/include_what_you_use] [4]')
         self.assert_include_what_you_use(
             '''#include <queue>
                void a(const std::priority_queue<int> &foobar);
-            ''',
-            '')
+            ''', '')
         self.assert_include_what_you_use(
             '''#include "base/basictypes.h"
                 #include "base/port.h"
@@ -752,17 +829,17 @@
         self.assert_include_what_you_use(
             '''#include <string>
                int i = numeric_limits<int>::max()
-            ''',
-            'Add #include <limits> for numeric_limits<>'
+            ''', 'Add #include <limits> for numeric_limits<>'
             '  [build/include_what_you_use] [4]')
         self.assert_include_what_you_use(
             '''#include <limits>
                int i = numeric_limits<int>::max()
-            ''',
-            '')
+            ''', '')
 
         # Test the UpdateIncludeState code path.
-        mock_header_contents = ['#include "blah/foo.h"', '#include "blah/bar.h"']
+        mock_header_contents = [
+            '#include "blah/foo.h"', '#include "blah/bar.h"'
+        ]
         fs = FileSystem()
         orig_read_text_file_fn = fs.read_text_file
 
@@ -803,11 +880,13 @@
                 '''#include "config.h"
                    #include "%s%sa.h"
 
-                   std::set<int> foo;''' % (os.path.basename(os.getcwd()), os.path.sep),
+                   std::set<int> foo;''' % (os.path.basename(os.getcwd()),
+                                            os.path.sep),
                 filename='a.cpp',
                 fs=fs)
-            self.assertEqual(message, 'Add #include <set> for set<>  '
-                             '[build/include_what_you_use] [4]')
+            self.assertEqual(
+                message, 'Add #include <set> for set<>  '
+                '[build/include_what_you_use] [4]')
         finally:
             fs.read_text_file = orig_read_text_file_fn
 
@@ -815,7 +894,8 @@
         f = cpp_style.files_belong_to_same_module
         self.assertEqual((True, ''), f('a.cpp', 'a.h'))
         self.assertEqual((True, ''), f('base/google.cpp', 'base/google.h'))
-        self.assertEqual((True, ''), f('base/google_test.cpp', 'base/google.h'))
+        self.assertEqual((True, ''), f('base/google_test.cpp',
+                                       'base/google.h'))
         self.assertEqual((True, ''),
                          f('base/google_unittest.cpp', 'base/google.h'))
         self.assertEqual((True, ''),
@@ -830,19 +910,23 @@
         self.assertEqual((True, ''),
                          f('base/google_unittest.cpp', 'base/google-inl.h'))
         self.assertEqual((True, '/home/build/google3/'),
-                         f('/home/build/google3/base/google.cpp', 'base/google.h'))
+                         f('/home/build/google3/base/google.cpp',
+                           'base/google.h'))
 
         self.assertEqual((False, ''),
-                         f('/home/build/google3/base/google.cpp', 'basu/google.h'))
+                         f('/home/build/google3/base/google.cpp',
+                           'basu/google.h'))
         self.assertEqual((False, ''), f('a.cpp', 'b.h'))
 
     def test_cleanse_line(self):
-        self.assertEqual('int foo = 0;  ',
-                         cpp_style.cleanse_comments('int foo = 0;  // danger!'))
+        self.assertEqual(
+            'int foo = 0;  ',
+            cpp_style.cleanse_comments('int foo = 0;  // danger!'))
         self.assertEqual('int o = 0;',
                          cpp_style.cleanse_comments('int /* foo */ o = 0;'))
-        self.assertEqual('foo(int a, int b);',
-                         cpp_style.cleanse_comments('foo(int a /* abc */, int b);'))
+        self.assertEqual(
+            'foo(int a, int b);',
+            cpp_style.cleanse_comments('foo(int a /* abc */, int b);'))
         self.assertEqual('f(a, b);',
                          cpp_style.cleanse_comments('f(a, /* name */ b);'))
         self.assertEqual('f(a, b);',
@@ -858,8 +942,7 @@
                   #endif  <- invalid preprocessor should be ignored
                   */      <- invalid comment should be ignored too
                 )";
-            }''',
-            '')
+            }''', '')
         self.assert_multi_line_lint(
             '''
             void Func() {
@@ -867,14 +950,12 @@
                     )"
                     )FalseDelimiter"
                     )TrueDelimiter";
-            }''',
-            '')
+            }''', '')
         self.assert_multi_line_lint(
             '''
             void Func() {
                 char char kString[] = R"(  ";" )";
-            }''',
-            '')
+            }''', '')
         self.assert_multi_line_lint(
             '''
             static const char kRawString[] = R"(
@@ -892,8 +973,7 @@
 
                 }
 
-            )";''',
-            '')
+            )";''', '')
 
     def test_multi_line_comments(self):
         # missing explicit is bad
@@ -903,8 +983,8 @@
                 class Foo {
                 Foo(int f);  // should cause a lint warning in code
                 }
-            */ ''',
-            '')
+            */ ''', '')
+
     # Test non-explicit single-argument constructors
     def test_explicit_single_argument_constructors(self):
         # missing explicit is bad
@@ -912,99 +992,86 @@
             '''\
             class Foo {
                 Foo(int f);
-            };''',
-            'Single-argument constructors should be marked explicit.'
+            };''', 'Single-argument constructors should be marked explicit.'
             '  [runtime/explicit] [5]')
         # missing explicit is bad, even with whitespace
         self.assert_multi_line_lint(
             '''\
             class Foo {
                 Foo (int f);
-            };''',
-            'Single-argument constructors should be marked explicit.'
+            };''', 'Single-argument constructors should be marked explicit.'
             '  [runtime/explicit] [5]')
         # missing explicit, with distracting comment, is still bad
         self.assert_multi_line_lint(
             '''\
             class Foo {
                 Foo(int f); // simpler than Foo(blargh, blarg)
-            };''',
-            'Single-argument constructors should be marked explicit.'
+            };''', 'Single-argument constructors should be marked explicit.'
             '  [runtime/explicit] [5]')
         # missing explicit, with qualified classname
         self.assert_multi_line_lint(
             '''\
             class Qualifier::AnotherOne::Foo {
                 Foo(int f);
-            };''',
-            'Single-argument constructors should be marked explicit.'
+            };''', 'Single-argument constructors should be marked explicit.'
             '  [runtime/explicit] [5]')
         # structs are caught as well.
         self.assert_multi_line_lint(
             '''\
             struct Foo {
                 Foo(int f);
-            };''',
-            'Single-argument constructors should be marked explicit.'
+            };''', 'Single-argument constructors should be marked explicit.'
             '  [runtime/explicit] [5]')
         # Templatized classes are caught as well.
         self.assert_multi_line_lint(
             '''\
             template<typename T> class Foo {
                 Foo(int f);
-            };''',
-            'Single-argument constructors should be marked explicit.'
+            };''', 'Single-argument constructors should be marked explicit.'
             '  [runtime/explicit] [5]')
         # proper style is okay
         self.assert_multi_line_lint(
             '''\
             class Foo {
                 explicit Foo(int f);
-            };''',
-            '')
+            };''', '')
         # two argument constructor is okay
         self.assert_multi_line_lint(
             '''\
             class Foo {
                 Foo(int f, int b);
-            };''',
-            '')
+            };''', '')
         # two argument constructor, across two lines, is okay
         self.assert_multi_line_lint(
             '''\
             class Foo {
                 Foo(int f,
                     int b);
-            };''',
-            '')
+            };''', '')
         # non-constructor (but similar name), is okay
         self.assert_multi_line_lint(
             '''\
             class Foo {
                 aFoo(int f);
-            };''',
-            '')
+            };''', '')
         # constructor with void argument is okay
         self.assert_multi_line_lint(
             '''\
             class Foo {
                 Foo(void);
-            };''',
-            '')
+            };''', '')
         # single argument method is okay
         self.assert_multi_line_lint(
             '''\
             class Foo {
                 Bar(int b);
-            };''',
-            '')
+            };''', '')
         # comments should be ignored
         self.assert_multi_line_lint(
             '''\
             class Foo {
             // Foo(int f);
-            };''',
-            '')
+            };''', '')
         # single argument function following class definition is okay
         # (okay, it's not actually valid, but we don't want a false positive)
         self.assert_multi_line_lint(
@@ -1012,41 +1079,30 @@
             class Foo {
                 Foo(int f, int b);
             };
-            Foo(int f);''',
-            '')
+            Foo(int f);''', '')
         # single argument function is okay
-        self.assert_multi_line_lint(
-            '''static Foo(int f);''',
-            '')
+        self.assert_multi_line_lint('''static Foo(int f);''', '')
         # single argument copy constructor is okay.
         self.assert_multi_line_lint(
             '''\
             class Foo {
                 Foo(const Foo&);
-            };''',
-            '')
+            };''', '')
         self.assert_multi_line_lint(
             '''\
             class Foo {
                 Foo(Foo&);
-            };''',
-            '')
+            };''', '')
 
     def test_slash_star_comment_on_single_line(self):
-        self.assert_multi_line_lint(
-            '''/* static */ Foo(int f);''',
-            '')
-        self.assert_multi_line_lint(
-            '''/*/ static */  Foo(int f);''',
-            '')
+        self.assert_multi_line_lint('''/* static */ Foo(int f);''', '')
+        self.assert_multi_line_lint('''/*/ static */  Foo(int f);''', '')
 
     # Test suspicious usage of memset. Specifically, a 0
     # as the final argument is almost certainly an error.
     def test_suspicious_usage_of_memset(self):
         # Normal use is okay.
-        self.assert_lint(
-            '  memset(buf, 0, sizeof(buf))',
-            '')
+        self.assert_lint('  memset(buf, 0, sizeof(buf))', '')
 
         # A 0 as the final argument is almost certainly an error.
         self.assert_lint(
@@ -1060,21 +1116,11 @@
 
         # There is legitimate test code that uses this form.
         # This is okay since the second argument is a literal.
-        self.assert_lint(
-            "    memset(buf, 'y', 0)",
-            '')
-        self.assert_lint(
-            '  memset(buf, 4, 0)',
-            '')
-        self.assert_lint(
-            '  memset(buf, -1, 0)',
-            '')
-        self.assert_lint(
-            '  memset(buf, 0xF1, 0)',
-            '')
-        self.assert_lint(
-            '  memset(buf, 0xcd, 0)',
-            '')
+        self.assert_lint("    memset(buf, 'y', 0)", '')
+        self.assert_lint('  memset(buf, 4, 0)', '')
+        self.assert_lint('  memset(buf, -1, 0)', '')
+        self.assert_lint('  memset(buf, 0xF1, 0)', '')
+        self.assert_lint('  memset(buf, 0xcd, 0)', '')
 
     def test_check_posix_threading(self):
         self.assert_lint('sctime_r()', '')
@@ -1084,15 +1130,15 @@
         self.assert_lint('_rand()', '')
         self.assert_lint('.rand()', '')
         self.assert_lint('>rand()', '')
-        self.assert_lint('rand()',
-                         'Consider using rand_r(...) instead of rand(...)'
-                         ' for improved thread safety.'
-                         '  [runtime/threadsafe_fn] [2]')
-        self.assert_lint('strtok()',
-                         'Consider using strtok_r(...) '
-                         'instead of strtok(...)'
-                         ' for improved thread safety.'
-                         '  [runtime/threadsafe_fn] [2]')
+        self.assert_lint(
+            'rand()', 'Consider using rand_r(...) instead of rand(...)'
+            ' for improved thread safety.'
+            '  [runtime/threadsafe_fn] [2]')
+        self.assert_lint(
+            'strtok()', 'Consider using strtok_r(...) '
+            'instead of strtok(...)'
+            ' for improved thread safety.'
+            '  [runtime/threadsafe_fn] [2]')
 
     # Test potential format string bugs like printf(foo).
     def test_format_strings(self):
@@ -1104,13 +1150,11 @@
             'Potential format string bug. Do printf("%s", foo) instead.'
             '  [runtime/printf] [4]')
         self.assert_lint(
-            'printf(foo.c_str())',
-            'Potential format string bug. '
+            'printf(foo.c_str())', 'Potential format string bug. '
             'Do printf("%s", foo.c_str()) instead.'
             '  [runtime/printf] [4]')
         self.assert_lint(
-            'printf(foo->c_str())',
-            'Potential format string bug. '
+            'printf(foo->c_str())', 'Potential format string bug. '
             'Do printf("%s", foo->c_str()) instead.'
             '  [runtime/printf] [4]')
         self.assert_lint(
@@ -1121,9 +1165,10 @@
 
     # Variable-length arrays are not permitted.
     def test_variable_length_array_detection(self):
-        errmsg = ('Do not use variable-length arrays.  Use an appropriately named '
-                  "('k' followed by CamelCase) compile-time constant for the size."
-                  '  [runtime/arrays] [1]')
+        errmsg = (
+            'Do not use variable-length arrays.  Use an appropriately named '
+            "('k' followed by CamelCase) compile-time constant for the size."
+            '  [runtime/arrays] [1]')
 
         self.assert_lint('int a[any_old_variable];', errmsg)
         self.assert_lint('int doublesize[some_var * 2];', errmsg)
@@ -1157,66 +1202,74 @@
         self.assert_lint(
             '''\
             const int foo[] =
-                {1, 2, 3 };''',
-            '')
+                {1, 2, 3 };''', '')
         # For single line, unmatched '}' with a ';' is ignored (not enough context)
         self.assert_multi_line_lint(
             '''\
             int a[3] = { 1,
                 2,
-                3 };''',
-            '')
+                3 };''', '')
         self.assert_multi_line_lint(
             '''\
             int a[2][3] = { { 1, 2 },
-                { 3, 4 } };''',
-            '')
+                { 3, 4 } };''', '')
         self.assert_multi_line_lint(
             '''\
             int a[2][3] =
                 { { 1, 2 },
-                { 3, 4 } };''',
-            '')
+                { 3, 4 } };''', '')
 
     # CHECK/EXPECT_TRUE/EXPECT_FALSE replacements
     def test_check_check(self):
-        self.assert_lint('CHECK(x == 42)',
-                         'Consider using CHECK_EQ(a, b) instead of CHECK(a == b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('CHECK(x != 42)',
-                         'Consider using CHECK_NE(a, b) instead of CHECK(a != b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('CHECK(x >= 42)',
-                         'Consider using CHECK_GE(a, b) instead of CHECK(a >= b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('CHECK(x > 42)',
-                         'Consider using CHECK_GT(a, b) instead of CHECK(a > b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('CHECK(x <= 42)',
-                         'Consider using CHECK_LE(a, b) instead of CHECK(a <= b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('CHECK(x < 42)',
-                         'Consider using CHECK_LT(a, b) instead of CHECK(a < b)'
-                         '  [readability/check] [2]')
+        self.assert_lint(
+            'CHECK(x == 42)',
+            'Consider using CHECK_EQ(a, b) instead of CHECK(a == b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'CHECK(x != 42)',
+            'Consider using CHECK_NE(a, b) instead of CHECK(a != b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'CHECK(x >= 42)',
+            'Consider using CHECK_GE(a, b) instead of CHECK(a >= b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'CHECK(x > 42)',
+            'Consider using CHECK_GT(a, b) instead of CHECK(a > b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'CHECK(x <= 42)',
+            'Consider using CHECK_LE(a, b) instead of CHECK(a <= b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'CHECK(x < 42)',
+            'Consider using CHECK_LT(a, b) instead of CHECK(a < b)'
+            '  [readability/check] [2]')
 
-        self.assert_lint('DCHECK(x == 42)',
-                         'Consider using DCHECK_EQ(a, b) instead of DCHECK(a == b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('DCHECK(x != 42)',
-                         'Consider using DCHECK_NE(a, b) instead of DCHECK(a != b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('DCHECK(x >= 42)',
-                         'Consider using DCHECK_GE(a, b) instead of DCHECK(a >= b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('DCHECK(x > 42)',
-                         'Consider using DCHECK_GT(a, b) instead of DCHECK(a > b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('DCHECK(x <= 42)',
-                         'Consider using DCHECK_LE(a, b) instead of DCHECK(a <= b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('DCHECK(x < 42)',
-                         'Consider using DCHECK_LT(a, b) instead of DCHECK(a < b)'
-                         '  [readability/check] [2]')
+        self.assert_lint(
+            'DCHECK(x == 42)',
+            'Consider using DCHECK_EQ(a, b) instead of DCHECK(a == b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'DCHECK(x != 42)',
+            'Consider using DCHECK_NE(a, b) instead of DCHECK(a != b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'DCHECK(x >= 42)',
+            'Consider using DCHECK_GE(a, b) instead of DCHECK(a >= b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'DCHECK(x > 42)',
+            'Consider using DCHECK_GT(a, b) instead of DCHECK(a > b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'DCHECK(x <= 42)',
+            'Consider using DCHECK_LE(a, b) instead of DCHECK(a <= b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'DCHECK(x < 42)',
+            'Consider using DCHECK_LT(a, b) instead of DCHECK(a < b)'
+            '  [readability/check] [2]')
 
         self.assert_lint(
             'EXPECT_TRUE("42" == x)',
@@ -1275,12 +1328,14 @@
         self.assert_lint('CHECK(CreateTestFile(dir, (1 << 20)));', '')
         self.assert_lint('CHECK(CreateTestFile(dir, (1 >> 20)));', '')
 
-        self.assert_lint('CHECK(x<42)',
-                         'Consider using CHECK_LT(a, b) instead of CHECK(a < b)'
-                         '  [readability/check] [2]')
-        self.assert_lint('CHECK(x>42)',
-                         'Consider using CHECK_GT(a, b) instead of CHECK(a > b)'
-                         '  [readability/check] [2]')
+        self.assert_lint(
+            'CHECK(x<42)',
+            'Consider using CHECK_LT(a, b) instead of CHECK(a < b)'
+            '  [readability/check] [2]')
+        self.assert_lint(
+            'CHECK(x>42)',
+            'Consider using CHECK_GT(a, b) instead of CHECK(a > b)'
+            '  [readability/check] [2]')
 
         self.assert_lint(
             '  EXPECT_TRUE(42 < x) // Random comment.',
@@ -1298,19 +1353,17 @@
         self.assert_lint('CHECK_EQ("foo", "foo")', '')
 
     def test_no_spaces_in_function_calls(self):
-        self.assert_lint('TellStory(1, 3);',
-                         '')
-        self.assert_lint('TellStory(1 /* wolf */, 3 /* pigs */);',
-                         '')
-        self.assert_multi_line_lint('#endif\n    );',
-                                    '')
+        self.assert_lint('TellStory(1, 3);', '')
+        self.assert_lint('TellStory(1 /* wolf */, 3 /* pigs */);', '')
+        self.assert_multi_line_lint('#endif\n    );', '')
 
     def test_invalid_utf8(self):
         def do_test(self, raw_bytes, has_invalid_utf8):
             error_collector = ErrorCollector(self.assertTrue)
-            self.process_file_data('foo.cpp', 'cpp',
-                                   unicode(raw_bytes, 'utf8', 'replace').split('\n'),
-                                   error_collector)
+            self.process_file_data(
+                'foo.cpp', 'cpp',
+                unicode(raw_bytes, 'utf8', 'replace').split('\n'),
+                error_collector)
             # The warning appears only once.
             self.assertEqual(
                 int(has_invalid_utf8),
@@ -1347,7 +1400,8 @@
         self.process_file_data(file_path, 'h', [], error_collector)
         expected_guard = ''
         matcher = re.compile(
-            r'No \#ifndef header guard found\, suggested CPP variable is\: ([A-Za-z_0-9]+) ')
+            r'No \#ifndef header guard found\, suggested CPP variable is\: ([A-Za-z_0-9]+) '
+        )
         for error in error_collector.result_list():
             matches = matcher.match(error)
             if matches:
@@ -1360,7 +1414,8 @@
         # Wrong guard
         error_collector = ErrorCollector(self.assertTrue)
         self.process_file_data(file_path, 'h',
-                               ['#ifndef FOO_H', '#define FOO_H'], error_collector)
+                               ['#ifndef FOO_H', '#define FOO_H'],
+                               error_collector)
         self.assertEqual(
             1,
             error_collector.result_list().count(
@@ -1370,8 +1425,8 @@
 
         # No define
         error_collector = ErrorCollector(self.assertTrue)
-        self.process_file_data(file_path, 'h',
-                               ['#ifndef %s' % expected_guard], error_collector)
+        self.process_file_data(file_path, 'h', ['#ifndef %s' % expected_guard],
+                               error_collector)
         self.assertEqual(
             1,
             error_collector.result_list().count(
@@ -1381,10 +1436,9 @@
 
         # Mismatched define
         error_collector = ErrorCollector(self.assertTrue)
-        self.process_file_data(file_path, 'h',
-                               ['#ifndef %s' % expected_guard,
-                                '#define FOO_H'],
-                               error_collector)
+        self.process_file_data(
+            file_path, 'h', ['#ifndef %s' % expected_guard, '#define FOO_H'],
+            error_collector)
         self.assertEqual(
             1,
             error_collector.result_list().count(
@@ -1394,22 +1448,20 @@
 
         # No header guard errors
         error_collector = ErrorCollector(self.assertTrue)
-        self.process_file_data(file_path, 'h',
-                               ['#ifndef %s' % expected_guard,
-                                '#define %s' % expected_guard,
-                                '#endif // %s' % expected_guard],
-                               error_collector)
+        self.process_file_data(file_path, 'h', [
+            '#ifndef %s' % expected_guard,
+            '#define %s' % expected_guard,
+            '#endif // %s' % expected_guard
+        ], error_collector)
         for line in error_collector.result_list():
             if line.find('build/header_guard') != -1:
                 self.fail('Unexpected error: %s' % line)
 
         # Completely incorrect header guard
         error_collector = ErrorCollector(self.assertTrue)
-        self.process_file_data(file_path, 'h',
-                               ['#ifndef FOO',
-                                '#define FOO',
-                                '#endif  // FOO'],
-                               error_collector)
+        self.process_file_data(
+            file_path, 'h', ['#ifndef FOO', '#define FOO', '#endif  // FOO'],
+            error_collector)
         self.assertEqual(
             1,
             error_collector.result_list().count(
@@ -1419,11 +1471,11 @@
 
         # Special case for flymake
         error_collector = ErrorCollector(self.assertTrue)
-        self.process_file_data('mydir/Foo_flymake.h', 'h',
-                               ['#ifndef %s' % expected_guard,
-                                '#define %s' % expected_guard,
-                                '#endif // %s' % expected_guard],
-                               error_collector)
+        self.process_file_data('mydir/Foo_flymake.h', 'h', [
+            '#ifndef %s' % expected_guard,
+            '#define %s' % expected_guard,
+            '#endif // %s' % expected_guard
+        ], error_collector)
         for line in error_collector.result_list():
             if line.find('build/header_guard') != -1:
                 self.fail('Unexpected error: %s' % line)
@@ -1443,31 +1495,31 @@
         # Verify that the Chromium-style header guard is allowed.
         header_guard_filter = FilterConfiguration(('-', '+build/header_guard'))
         error_collector = ErrorCollector(self.assertTrue, header_guard_filter)
-        self.process_file_data('Source/foo/testname.h', 'h',
-                               ['#ifndef SOURCE_FOO_TESTNAME_H_',
-                                '#define SOURCE_FOO_TESTNAME_H_'],
-                               error_collector)
+        self.process_file_data('Source/foo/testname.h', 'h', [
+            '#ifndef SOURCE_FOO_TESTNAME_H_', '#define SOURCE_FOO_TESTNAME_H_'
+        ], error_collector)
         self.assertEqual(0, len(error_collector.result_list()),
                          error_collector.result_list())
 
         # Verify that we suggest the Chromium-style header guard.
         error_collector = ErrorCollector(self.assertTrue, header_guard_filter)
-        self.process_file_data('renderer/platform/wtf/auto_reset.h', 'h',
-                               ['#ifndef BAD_auto_reset_h', '#define BAD_auto_reset_h'],
-                               error_collector)
+        self.process_file_data(
+            'renderer/platform/wtf/auto_reset.h', 'h',
+            ['#ifndef BAD_auto_reset_h', '#define BAD_auto_reset_h'],
+            error_collector)
         self.assertEqual(
             1,
             error_collector.result_list().count(
                 '#ifndef header guard has wrong style, please use: '
-                'RENDERER_PLATFORM_WTF_AUTO_RESET_H_  [build/header_guard] [5]'),
-            error_collector.result_list())
+                'RENDERER_PLATFORM_WTF_AUTO_RESET_H_  [build/header_guard] [5]'
+            ), error_collector.result_list())
 
     def assert_lintLogCodeOnError(self, code, expected_message):
         # Special assert_lint which logs the input code on error.
         result = self.perform_single_line_lint(code, 'foo.cpp')
         if result != expected_message:
-            self.fail('For code: "%s"\nGot: "%s"\nExpected: "%s"'
-                      % (code, result, expected_message))
+            self.fail('For code: "%s"\nGot: "%s"\nExpected: "%s"' %
+                      (code, result, expected_message))
 
     def test_legal_copyright(self):
         legal_copyright_message = (
@@ -1487,38 +1539,40 @@
             error_collector.result_list().count(legal_copyright_message))
 
         error_collector = ErrorCollector(self.assertTrue)
-        self.process_file_data(
-            file_path, 'cpp',
-            ['' for _ in range(10)] + [copyright_line],
-            error_collector)
+        self.process_file_data(file_path, 'cpp',
+                               ['' for _ in range(10)] + [copyright_line],
+                               error_collector)
         self.assertEqual(
             1,
             error_collector.result_list().count(legal_copyright_message))
 
         # Test that warning isn't issued if Copyright line appears early enough.
         error_collector = ErrorCollector(self.assertTrue)
-        self.process_file_data(file_path, 'cpp', [copyright_line], error_collector)
+        self.process_file_data(file_path, 'cpp', [copyright_line],
+                               error_collector)
         for message in error_collector.result_list():
             if message.find('legal/copyright') != -1:
                 self.fail('Unexpected error: %s' % message)
 
         error_collector = ErrorCollector(self.assertTrue)
-        self.process_file_data(
-            file_path, 'cpp',
-            ['' for _ in range(9)] + [copyright_line],
-            error_collector)
+        self.process_file_data(file_path, 'cpp',
+                               ['' for _ in range(9)] + [copyright_line],
+                               error_collector)
         for message in error_collector.result_list():
             if message.find('legal/copyright') != -1:
                 self.fail('Unexpected error: %s' % message)
 
     def test_invalid_increment(self):
-        self.assert_lint('*count++;',
-                         'Changing pointer instead of value (or unused value of '
-                         'operator*).  [runtime/invalid_increment] [5]')
+        self.assert_lint(
+            '*count++;',
+            'Changing pointer instead of value (or unused value of '
+            'operator*).  [runtime/invalid_increment] [5]')
 
     # Integral bitfields must be declared with either signed or unsigned keyword.
     def test_plain_integral_bitfields(self):
-        errmsg = ('Please declare integral type bitfields with either signed or unsigned.  [runtime/bitfields] [5]')
+        errmsg = (
+            'Please declare integral type bitfields with either signed or unsigned.  [runtime/bitfields] [5]'
+        )
 
         self.assert_lint('int a : 30;', errmsg)
         self.assert_lint('mutable int a : 14;', errmsg)
@@ -1528,19 +1582,20 @@
     # Bitfields which are not declared unsigned or bool will generate a warning.
     def test_unsigned_bool_bitfields(self):
         def errmsg(member, name, bit_type):
-            return ('Member %s of class %s defined as a bitfield of type %s. '
-                    'Please declare all bitfields as unsigned.  [runtime/bitfields] [4]'
-                    % (member, name, bit_type))
+            return (
+                'Member %s of class %s defined as a bitfield of type %s. '
+                'Please declare all bitfields as unsigned.  [runtime/bitfields] [4]'
+                % (member, name, bit_type))
 
         def warning_bitfield_test(member, name, bit_type, bits):
-            self.assert_multi_line_lint('class %s {\n%s %s: %d;\n}\n'
-                                        % (name, bit_type, member, bits),
-                                        errmsg(member, name, bit_type))
+            self.assert_multi_line_lint(
+                'class %s {\n%s %s: %d;\n}\n' % (name, bit_type, member, bits),
+                errmsg(member, name, bit_type))
 
         def safe_bitfield_test(member, name, bit_type, bits):
-            self.assert_multi_line_lint('class %s {\n%s %s: %d;\n}\n'
-                                        % (name, bit_type, member, bits),
-                                        '')
+            self.assert_multi_line_lint(
+                'class %s {\n%s %s: %d;\n}\n' % (name, bit_type, member, bits),
+                '')
 
         warning_bitfield_test('a', 'A', 'int32_t', 25)
         warning_bitfield_test('m_someField', 'SomeClass', 'signed', 4)
@@ -1557,27 +1612,17 @@
 
 
 class CleansedLinesTest(unittest.TestCase):
-
     def test_init(self):
-        lines = ['Line 1',
-                 'Line 2',
-                 'Line 3 // Comment test',
-                 'Line 4 "foo"']
+        lines = ['Line 1', 'Line 2', 'Line 3 // Comment test', 'Line 4 "foo"']
 
         clean_lines = cpp_style.CleansedLines(lines)
         self.assertEqual(lines, clean_lines.raw_lines)
         self.assertEqual(4, clean_lines.num_lines())
 
-        self.assertEqual(['Line 1',
-                          'Line 2',
-                          'Line 3 ',
-                          'Line 4 "foo"'],
+        self.assertEqual(['Line 1', 'Line 2', 'Line 3 ', 'Line 4 "foo"'],
                          clean_lines.lines)
 
-        self.assertEqual(['Line 1',
-                          'Line 2',
-                          'Line 3 ',
-                          'Line 4 ""'],
+        self.assertEqual(['Line 1', 'Line 2', 'Line 3 ', 'Line 4 ""'],
                          clean_lines.elided)
 
     def test_init_empty(self):
@@ -1587,34 +1632,32 @@
 
     def test_collapse_strings(self):
         collapse = cpp_style.CleansedLines.collapse_strings
-        self.assertEqual('""', collapse('""'))             # ""     (empty)
-        self.assertEqual('"""', collapse('"""'))           # """    (bad)
-        self.assertEqual('""', collapse('"xyz"'))          # "xyz"  (string)
-        self.assertEqual('""', collapse('"\\\""'))         # "\""   (string)
-        self.assertEqual('""', collapse('"\'"'))           # "'"    (string)
-        self.assertEqual('"\"', collapse('"\"'))           # "\"    (bad)
-        self.assertEqual('""', collapse('"\\\\"'))         # "\\"   (string)
-        self.assertEqual('"', collapse('"\\\\\\"'))        # "\\\"  (bad)
-        self.assertEqual('""', collapse('"\\\\\\\\"'))     # "\\\\" (string)
+        self.assertEqual('""', collapse('""'))  # ""     (empty)
+        self.assertEqual('"""', collapse('"""'))  # """    (bad)
+        self.assertEqual('""', collapse('"xyz"'))  # "xyz"  (string)
+        self.assertEqual('""', collapse('"\\\""'))  # "\""   (string)
+        self.assertEqual('""', collapse('"\'"'))  # "'"    (string)
+        self.assertEqual('"\"', collapse('"\"'))  # "\"    (bad)
+        self.assertEqual('""', collapse('"\\\\"'))  # "\\"   (string)
+        self.assertEqual('"', collapse('"\\\\\\"'))  # "\\\"  (bad)
+        self.assertEqual('""', collapse('"\\\\\\\\"'))  # "\\\\" (string)
 
-        self.assertEqual('\'\'', collapse('\'\''))         # ''     (empty)
-        self.assertEqual('\'\'', collapse('\'a\''))        # 'a'    (char)
-        self.assertEqual('\'\'', collapse('\'\\\'\''))     # '\''   (char)
-        self.assertEqual('\'', collapse('\'\\\''))         # '\'    (bad)
-        self.assertEqual('', collapse('\\012'))            # '\012' (char)
-        self.assertEqual('', collapse('\\xfF0'))           # '\xfF0' (char)
-        self.assertEqual('', collapse('\\n'))              # '\n' (char)
-        self.assertEqual('\\#', collapse('\\#'))           # '\#' (bad)
+        self.assertEqual('\'\'', collapse('\'\''))  # ''     (empty)
+        self.assertEqual('\'\'', collapse('\'a\''))  # 'a'    (char)
+        self.assertEqual('\'\'', collapse('\'\\\'\''))  # '\''   (char)
+        self.assertEqual('\'', collapse('\'\\\''))  # '\'    (bad)
+        self.assertEqual('', collapse('\\012'))  # '\012' (char)
+        self.assertEqual('', collapse('\\xfF0'))  # '\xfF0' (char)
+        self.assertEqual('', collapse('\\n'))  # '\n' (char)
+        self.assertEqual('\\#', collapse('\\#'))  # '\#' (bad)
 
         self.assertEqual('StringReplace(body, "", "");',
                          collapse('StringReplace(body, "\\\\", "\\\\\\\\");'))
-        self.assertEqual('\'\' ""',
-                         collapse('\'"\' "foo"'))
+        self.assertEqual('\'\' ""', collapse('\'"\' "foo"'))
         self.assertEqual('""', collapse('"a" "b" "c"'))
 
 
 class OrderOfIncludesTest(CppStyleTestBase):
-
     def setUp(self):
         self.include_state = cpp_style._IncludeState()
 
@@ -1626,20 +1669,20 @@
         os.path.abspath = self.os_path_abspath_orig
 
     def test_try_drop_common_suffixes(self):
-        self.assertEqual('foo/foo', cpp_style._drop_common_suffixes('foo/foo-inl.h'))
+        self.assertEqual('foo/foo',
+                         cpp_style._drop_common_suffixes('foo/foo-inl.h'))
         self.assertEqual('foo/bar/foo',
                          cpp_style._drop_common_suffixes('foo/bar/foo_inl.h'))
-        self.assertEqual('foo/foo', cpp_style._drop_common_suffixes('foo/foo.cpp'))
-        self.assertEqual('foo/foo_unusualinternal',
-                         cpp_style._drop_common_suffixes('foo/foo_unusualinternal.h'))
-        self.assertEqual('',
-                         cpp_style._drop_common_suffixes('_test.cpp'))
-        self.assertEqual('test',
-                         cpp_style._drop_common_suffixes('test.cpp'))
+        self.assertEqual('foo/foo',
+                         cpp_style._drop_common_suffixes('foo/foo.cpp'))
+        self.assertEqual(
+            'foo/foo_unusualinternal',
+            cpp_style._drop_common_suffixes('foo/foo_unusualinternal.h'))
+        self.assertEqual('', cpp_style._drop_common_suffixes('_test.cpp'))
+        self.assertEqual('test', cpp_style._drop_common_suffixes('test.cpp'))
 
 
 class OrderOfIncludesTest(CppStyleTestBase):
-
     def setUp(self):
         self.include_state = cpp_style._IncludeState()
 
@@ -1654,7 +1697,6 @@
 
 
 class CheckForFunctionLengthsTest(CppStyleTestBase):
-
     def setUp(self):
         # Reducing these thresholds for the tests speeds up tests significantly.
         self.old_normal_trigger = cpp_style._FunctionState._NORMAL_TRIGGER
@@ -1693,7 +1735,7 @@
         Returns:
           Number of lines needed to trigger a function length warning.
         """
-        return cpp_style._FunctionState._NORMAL_TRIGGER * 2 ** error_level
+        return cpp_style._FunctionState._NORMAL_TRIGGER * 2**error_level
 
     def trigger_test_lines(self, error_level):
         """Return number of lines needed to trigger a test function length warning.
@@ -1704,7 +1746,7 @@
         Returns:
           Number of lines needed to trigger a test function length warning.
         """
-        return cpp_style._FunctionState._TEST_TRIGGER * 2 ** error_level
+        return cpp_style._FunctionState._TEST_TRIGGER * 2**error_level
 
     def assert_function_length_check_definition(self, lines, error_level):
         """Generate long function definition and check warnings are as expected.
@@ -1719,8 +1761,8 @@
             ('Small and focused functions are preferred: '
              'test() has %d non-comment lines '
              '(error triggered by exceeding %d lines).'
-             '  [readability/fn_size] [%d]'
-             % (lines, trigger_level, error_level)))
+             '  [readability/fn_size] [%d]' %
+             (lines, trigger_level, error_level)))
 
     def assert_function_length_check_definition_ok(self, lines):
         """Generate shorter function definition and check no warning is produced.
@@ -1729,8 +1771,7 @@
           lines: Number of lines to generate.
         """
         self.assert_function_lengths_check(
-            'void test(int x)' + self.function_body(lines),
-            '')
+            'void test(int x)' + self.function_body(lines), '')
 
     def assert_function_length_check_at_error_level(self, error_level):
         """Generate and check function at the trigger level for --v setting.
@@ -1738,8 +1779,8 @@
         Args:
           error_level: --v setting for cpp_style.
         """
-        self.assert_function_length_check_definition(self.trigger_lines(error_level),
-                                                     error_level)
+        self.assert_function_length_check_definition(
+            self.trigger_lines(error_level), error_level)
 
     def assert_function_length_check_below_error_level(self, error_level):
         """Generate and check function just below the trigger level for --v setting.
@@ -1747,8 +1788,8 @@
         Args:
           error_level: --v setting for cpp_style.
         """
-        self.assert_function_length_check_definition(self.trigger_lines(error_level) - 1,
-                                                     error_level - 1)
+        self.assert_function_length_check_definition(
+            self.trigger_lines(error_level) - 1, error_level - 1)
 
     def assert_function_length_check_above_error_level(self, error_level):
         """Generate and check function just above the trigger level for --v setting.
@@ -1756,8 +1797,8 @@
         Args:
           error_level: --v setting for cpp_style.
         """
-        self.assert_function_length_check_definition(self.trigger_lines(error_level) + 1,
-                                                     error_level)
+        self.assert_function_length_check_definition(
+            self.trigger_lines(error_level) + 1, error_level)
 
     def function_body(self, number_of_lines):
         return ' {\n' + '  this_is_just_a_test();\n' * number_of_lines + '}'
@@ -1773,14 +1814,13 @@
 
     def test_function_length_check_declaration_with_block_following(self):
         self.assert_function_lengths_check(
-            ('void test();\n'
-             + self.function_body(66)),  # Not a function definition
+            ('void test();\n' +
+             self.function_body(66)),  # Not a function definition
             '')
 
     def test_function_length_check_class_definition(self):
         self.assert_function_lengths_check(  # Not a function definition
-            'class Test' + self.function_body(66) + ';',
-            '')
+            'class Test' + self.function_body(66) + ';', '')
 
     def test_function_length_check_trivial(self):
         self.assert_function_lengths_check(
@@ -1788,13 +1828,12 @@
             '')
 
     def test_function_length_check_empty(self):
-        self.assert_function_lengths_check(
-            'void test() {\n}',
-            '')
+        self.assert_function_lengths_check('void test() {\n}', '')
 
     def test_function_length_check_definition_below_severity0(self):
         old_min_confidence = self.set_min_confidence(0)
-        self.assert_function_length_check_definition_ok(self.trigger_lines(0) - 1)
+        self.assert_function_length_check_definition_ok(
+            self.trigger_lines(0) - 1)
         self.set_min_confidence(old_min_confidence)
 
     def test_function_length_check_definition_at_severity0(self):
@@ -1818,7 +1857,8 @@
         self.set_min_confidence(old_min_confidence)
 
     def test_function_length_check_definition_below_severity1(self):
-        self.assert_function_length_check_definition_ok(self.trigger_lines(1) - 1)
+        self.assert_function_length_check_definition_ok(
+            self.trigger_lines(1) - 1)
 
     def test_function_length_check_definition_at_severity1(self):
         self.assert_function_length_check_definition_ok(self.trigger_lines(1))
@@ -1832,13 +1872,14 @@
         trigger_level = self.trigger_lines(self.min_confidence)
         indent_spaces = '  '
         self.assert_function_lengths_check(
-            re.sub(r'(?m)^(.)', indent_spaces + r'\1',
-                   'void test_indent(int x)\n' + self.function_body(error_lines)),
+            re.sub(
+                r'(?m)^(.)', indent_spaces + r'\1',
+                'void test_indent(int x)\n' + self.function_body(error_lines)),
             ('Small and focused functions are preferred: '
              'test_indent() has %d non-comment lines '
              '(error triggered by exceeding %d lines).'
-             '  [readability/fn_size] [%d]')
-            % (error_lines, trigger_level, error_level))
+             '  [readability/fn_size] [%d]') % (error_lines, trigger_level,
+                                                error_level))
 
     def test_function_length_check_definition_severity1_plus_blanks(self):
         error_level = 1
@@ -1849,23 +1890,23 @@
             ('Small and focused functions are preferred: '
              'test_blanks() has %d non-comment lines '
              '(error triggered by exceeding %d lines).'
-             '  [readability/fn_size] [%d]')
-            % (error_lines, trigger_level, error_level))
+             '  [readability/fn_size] [%d]') % (error_lines, trigger_level,
+                                                error_level))
 
     def test_function_length_check_complex_definition_severity1(self):
         error_level = 1
         error_lines = self.trigger_lines(error_level) + 1
         trigger_level = self.trigger_lines(self.min_confidence)
-        self.assert_function_lengths_check(
-            ('my_namespace::my_other_namespace::MyVeryLongTypeName<Type1, bool func(const Element*)>*\n'
-             'my_namespace::my_other_namespace<Type3, Type4>::~MyFunction<Type5<Type6, Type7> >(int arg1, char* arg2)'
-             + self.function_body(error_lines)),
-            ('Small and focused functions are preferred: '
-             'my_namespace::my_other_namespace<Type3, Type4>::~MyFunction<Type5<Type6, Type7> >()'
-             ' has %d non-comment lines '
-             '(error triggered by exceeding %d lines).'
-             '  [readability/fn_size] [%d]')
-            % (error_lines, trigger_level, error_level))
+        self.assert_function_lengths_check((
+            'my_namespace::my_other_namespace::MyVeryLongTypeName<Type1, bool func(const Element*)>*\n'
+            'my_namespace::my_other_namespace<Type3, Type4>::~MyFunction<Type5<Type6, Type7> >(int arg1, char* arg2)'
+            + self.function_body(error_lines)
+        ), ('Small and focused functions are preferred: '
+            'my_namespace::my_other_namespace<Type3, Type4>::~MyFunction<Type5<Type6, Type7> >()'
+            ' has %d non-comment lines '
+            '(error triggered by exceeding %d lines).'
+            '  [readability/fn_size] [%d]') % (error_lines, trigger_level,
+                                               error_level))
 
     def test_function_length_check_definition_severity1_for_test(self):
         error_level = 1
@@ -1876,35 +1917,38 @@
             ('Small and focused functions are preferred: '
              'TEST_F(Test, Mutator) has %d non-comment lines '
              '(error triggered by exceeding %d lines).'
-             '  [readability/fn_size] [%d]')
-            % (error_lines, trigger_level, error_level))
+             '  [readability/fn_size] [%d]') % (error_lines, trigger_level,
+                                                error_level))
 
-    def test_function_length_check_definition_severity1_for_split_line_test(self):
+    def test_function_length_check_definition_severity1_for_split_line_test(
+            self):
         error_level = 1
         error_lines = self.trigger_test_lines(error_level) + 1
         trigger_level = self.trigger_test_lines(self.min_confidence)
         self.assert_function_lengths_check(
-            ('TEST_F(GoogleUpdateRecoveryRegistryProtectedTest,\n'
-             '    FixGoogleUpdate_AllValues_MachineApp)'  # note: 4 spaces
-             + self.function_body(error_lines)),
-            ('Small and focused functions are preferred: '
-             'TEST_F(GoogleUpdateRecoveryRegistryProtectedTest, '  # 1 space
-             'FixGoogleUpdate_AllValues_MachineApp) has %d non-comment lines '
-             '(error triggered by exceeding %d lines).'
-             '  [readability/fn_size] [%d]')
-            % (error_lines, trigger_level, error_level))
+            (
+                'TEST_F(GoogleUpdateRecoveryRegistryProtectedTest,\n'
+                '    FixGoogleUpdate_AllValues_MachineApp)'  # note: 4 spaces
+                + self.function_body(error_lines)),
+            (
+                'Small and focused functions are preferred: '
+                'TEST_F(GoogleUpdateRecoveryRegistryProtectedTest, '  # 1 space
+                'FixGoogleUpdate_AllValues_MachineApp) has %d non-comment lines '
+                '(error triggered by exceeding %d lines).'
+                '  [readability/fn_size] [%d]') % (error_lines, trigger_level,
+                                                   error_level))
 
-    def test_function_length_check_definition_severity1_for_bad_test_doesnt_break(self):
+    def test_function_length_check_definition_severity1_for_bad_test_doesnt_break(
+            self):
         error_level = 1
         error_lines = self.trigger_test_lines(error_level) + 1
         # Since the function name isn't valid, the function detection algorithm
         # will skip it, so no error is produced.
         self.assert_function_lengths_check(
-            ('TEST_F('
-             + self.function_body(error_lines)),
-            '')
+            ('TEST_F(' + self.function_body(error_lines)), '')
 
-    def test_function_length_check_definition_severity1_with_embedded_no_lints(self):
+    def test_function_length_check_definition_severity1_with_embedded_no_lints(
+            self):
         error_level = 1
         error_lines = self.trigger_lines(error_level) + 1
         trigger_level = self.trigger_lines(self.min_confidence)
@@ -1913,14 +1957,13 @@
             ('Small and focused functions are preferred: '
              'test() has %d non-comment lines '
              '(error triggered by exceeding %d lines).'
-             '  [readability/fn_size] [%d]')
-            % (error_lines, trigger_level, error_level))
+             '  [readability/fn_size] [%d]') % (error_lines, trigger_level,
+                                                error_level))
 
     def test_function_length_check_definition_severity1_with_no_lint(self):
         self.assert_function_lengths_check(
-            ('void test(int x)' + self.function_body(self.trigger_lines(1))
-             + '  // NOLINT -- long function'),
-            '')
+            ('void test(int x)' + self.function_body(self.trigger_lines(1)) +
+             '  // NOLINT -- long function'), '')
 
     def test_function_length_check_definition_below_severity2(self):
         self.assert_function_length_check_below_error_level(2)
@@ -1964,75 +2007,63 @@
 
     def test_function_length_not_determinable(self):
         # Macro invocation without terminating semicolon.
-        self.assert_function_lengths_check(
-            'MACRO(arg)',
-            '')
+        self.assert_function_lengths_check('MACRO(arg)', '')
 
         # Macro with underscores
         self.assert_function_lengths_check(
-            'MACRO_WITH_UNDERSCORES(arg1, arg2, arg3)',
-            '')
+            'MACRO_WITH_UNDERSCORES(arg1, arg2, arg3)', '')
 
         self.assert_function_lengths_check(
-            'NonMacro(arg)',
-            'Lint failed to find start of function body.'
+            'NonMacro(arg)', 'Lint failed to find start of function body.'
             '  [readability/fn_size] [5]')
 
 
 class NoNonVirtualDestructorsTest(CppStyleTestBase):
-
     def test_no_error(self):
         self.assert_multi_line_lint(
             '''\
                 class Foo {
                     virtual ~Foo();
                     virtual void foo();
-                };''',
-            '')
+                };''', '')
 
         self.assert_multi_line_lint(
             '''\
                 class Foo {
                     virtual inline ~Foo();
                     virtual void foo();
-                };''',
-            '')
+                };''', '')
 
         self.assert_multi_line_lint(
             '''\
                 class Foo {
                     inline virtual ~Foo();
                     virtual void foo();
-                };''',
-            '')
+                };''', '')
 
         self.assert_multi_line_lint(
             '''\
                 class Foo::Goo {
                     virtual ~Goo();
                     virtual void goo();
-                };''',
-            '')
+                };''', '')
         self.assert_multi_line_lint(
             'class MyClass {\n'
             '  int getIntValue() { DCHECK(m_ptr); return *m_ptr; }\n'
-            '};\n',
-            '')
+            '};\n', '')
 
         self.assert_multi_line_lint(
             '''\
                 class Qualified::Goo : public Foo {
                     virtual void goo();
-                };''',
-            '')
+                };''', '')
 
     def test_no_destructor_when_virtual_needed(self):
         self.assert_multi_line_lint_re(
             '''\
                 class Foo {
                     virtual void foo();
-                };''',
-            'The class Foo probably needs a virtual destructor')
+                };''', 'The class Foo probably needs a virtual destructor')
 
     def test_destructor_non_virtual_when_virtual_needed(self):
         self.assert_multi_line_lint_re(
@@ -2040,16 +2071,14 @@
                 class Foo {
                     ~Foo();
                     virtual void foo();
-                };''',
-            'The class Foo probably needs a virtual destructor')
+                };''', 'The class Foo probably needs a virtual destructor')
 
     def test_no_warn_when_derived(self):
         self.assert_multi_line_lint(
             '''\
                 class Foo : public Goo {
                     virtual void foo();
-                };''',
-            '')
+                };''', '')
 
     def test_internal_braces(self):
         self.assert_multi_line_lint_re(
@@ -2059,8 +2088,7 @@
                         Goo
                     };
                     virtual void foo();
-                };''',
-            'The class Foo probably needs a virtual destructor')
+                };''', 'The class Foo probably needs a virtual destructor')
 
     def test_inner_class_needs_virtual_destructor(self):
         self.assert_multi_line_lint_re(
@@ -2069,8 +2097,7 @@
                     class Goo {
                         virtual void goo();
                     };
-                };''',
-            'The class Goo probably needs a virtual destructor')
+                };''', 'The class Goo probably needs a virtual destructor')
 
     def test_outer_class_needs_virtual_destructor(self):
         self.assert_multi_line_lint_re(
@@ -2079,8 +2106,7 @@
                     class Goo {
                     };
                     virtual void foo();
-                };''',
-            'The class Foo probably needs a virtual destructor')
+                };''', 'The class Foo probably needs a virtual destructor')
 
     def test_qualified_class_needs_virtual_destructor(self):
         self.assert_multi_line_lint_re(
@@ -2096,8 +2122,7 @@
                 class Foo
                     : public Goo {
                     virtual void foo();
-                };''',
-            '')
+                };''', '')
 
     def test_multi_line_declaration_with_error(self):
         self.assert_multi_line_lint(
@@ -2107,7 +2132,8 @@
                     virtual void foo();
                 };''',
             'The class Foo probably needs a virtual destructor due to having '
-            'virtual method(s), one declared at line 3.  [runtime/virtual] [4]')
+            'virtual method(s), one declared at line 3.  [runtime/virtual] [4]'
+        )
 
 
 class PassPtrTest(CppStyleTestBase):
@@ -2120,83 +2146,67 @@
           code: C++ source code expected to generate a warning message.
           expected_message: Message expected to be generated by the C++ code.
         """
-        self.assertEqual(expected_message,
-                         self.perform_pass_ptr_check(code))
+        self.assertEqual(expected_message, self.perform_pass_ptr_check(code))
 
     def test_pass_ref_ptr_return_value(self):
         self.assert_pass_ptr_check(
             'scoped_refptr<Type1>\n'
             'myFunction(int)\n'
             '{\n'
-            '}',
-            '')
+            '}', '')
         self.assert_pass_ptr_check(
             'scoped_refptr<Type1> myFunction(int)\n'
             '{\n'
-            '}',
-            '')
-        self.assert_pass_ptr_check(
-            'scoped_refptr<Type1> myFunction();\n',
-            '')
-        self.assert_pass_ptr_check(
-            'Ownscoped_refptr<Type1> myFunction();\n',
-            '')
+            '}', '')
+        self.assert_pass_ptr_check('scoped_refptr<Type1> myFunction();\n', '')
+        self.assert_pass_ptr_check('Ownscoped_refptr<Type1> myFunction();\n',
+                                   '')
 
     def test_ref_ptr_parameter_value(self):
         self.assert_pass_ptr_check(
             'int myFunction(scoped_refptr<Type1>)\n'
             '{\n'
-            '}',
-            '')
+            '}', '')
         self.assert_pass_ptr_check(
             'int myFunction(scoped_refptr<Type1>&)\n'
             '{\n'
-            '}',
-            '')
+            '}', '')
         self.assert_pass_ptr_check(
             'int myFunction(scoped_refptr<Type1>*)\n'
             '{\n'
-            '}',
-            '')
+            '}', '')
         self.assert_pass_ptr_check(
             'int myFunction(scoped_refptr<Type1>* = 0)\n'
             '{\n'
-            '}',
-            '')
+            '}', '')
         self.assert_pass_ptr_check(
             'int myFunction(scoped_refptr<Type1>*    =  0)\n'
             '{\n'
-            '}',
-            '')
+            '}', '')
         self.assert_pass_ptr_check(
             'int myFunction(scoped_refptr<Type1>* = nullptr)\n'
             '{\n'
-            '}',
-            '')
+            '}', '')
         self.assert_pass_ptr_check(
             'int myFunction(scoped_refptr<Type1>*    =  nullptr)\n'
             '{\n'
-            '}',
-            '')
+            '}', '')
 
     def test_own_ptr_parameter_value(self):
         self.assert_pass_ptr_check(
             'int myFunction(PassOwnPtr<Type1>)\n'
             '{\n'
-            '}',
-            '')
+            '}', '')
         self.assert_pass_ptr_check(
             'int myFunction(OwnPtr<Type1>& simple)\n'
             '{\n'
-            '}',
-            '')
+            '}', '')
 
     def test_ref_ptr_member_variable(self):
         self.assert_pass_ptr_check(
             'class Foo {'
             '  scoped_refptr<Type1> m_other;\n'
-            '};\n',
-            '')
+            '};\n', '')
 
 
 class WebKitStyleTest(CppStyleTestBase):
@@ -2214,43 +2224,37 @@
             '} else {\n'
             '  doSomethingElse();\n'
             '  doSomethingElseAgain();\n'
-            '}\n',
-            '')
+            '}\n', '')
         self.assert_multi_line_lint(
             'if (condition)\n'
             '  doSomething();\n'
             'else\n'
-            '  doSomethingElse();\n',
-            '')
+            '  doSomethingElse();\n', '')
         self.assert_multi_line_lint(
             'if (condition) {\n'
             '  doSomething();\n'
             '} else {\n'
             '  doSomethingElse();\n'
             '  doSomethingElseAgain();\n'
-            '}\n',
-            '')
+            '}\n', '')
         self.assert_multi_line_lint(
             '#define TEST_ASSERT(expression) do { if (!(expression)) { '
             'TestsController::shared().testFailed(__FILE__, __LINE__, #expression); '
-            'return; } } while (0)\n',
-            '')
+            'return; } } while (0)\n', '')
         # FIXME: currently we only check first conditional, so we cannot detect errors in next ones.
-        self.assert_multi_line_lint(
-            'WTF_MAKE_FAST_ALLOCATED;\n',
-            '')
+        self.assert_multi_line_lint('WTF_MAKE_FAST_ALLOCATED;\n', '')
         self.assert_multi_line_lint(
             'if (condition) doSomething(); else {\n'
             '  doSomethingElse();\n'
             '}\n',
-            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]')
+            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]'
+        )
         self.assert_multi_line_lint(
             'void func()\n'
             '{\n'
             '  while (condition) { }\n'
             '  return 0;\n'
-            '}\n',
-            '')
+            '}\n', '')
 
     def test_braces(self):
         # 3. Curly braces are not required for single-line conditionals and
@@ -2264,15 +2268,13 @@
             'if (condition1)\n'
             '  statement1();\n'
             'else\n'
-            '  statement2();\n',
-            '')
+            '  statement2();\n', '')
 
         self.assert_multi_line_lint(
             'if (condition1)\n'
             '  statement1();\n'
             'else if (condition2)\n'
-            '  statement2();\n',
-            '')
+            '  statement2();\n', '')
 
         self.assert_multi_line_lint(
             'if (condition1)\n'
@@ -2280,57 +2282,41 @@
             'else if (condition2)\n'
             '  statement2();\n'
             'else\n'
-            '  statement3();\n',
-            '')
+            '  statement3();\n', '')
 
-        self.assert_multi_line_lint(
-            'for (; foo; bar)\n'
-            '  int foo;\n',
-            '')
+        self.assert_multi_line_lint('for (; foo; bar)\n' '  int foo;\n', '')
 
         self.assert_multi_line_lint(
             'for (; foo; bar) {\n'
             '  int foo;\n'
-            '}\n',
-            '')
+            '}\n', '')
 
         self.assert_multi_line_lint(
             'foreach (foo, foos) {\n'
             '  int bar;\n'
-            '}\n',
-            '')
+            '}\n', '')
 
-        self.assert_multi_line_lint(
-            'foreach (foo, foos)\n'
-            '  int bar;\n',
-            '')
+        self.assert_multi_line_lint('foreach (foo, foos)\n' '  int bar;\n', '')
 
-        self.assert_multi_line_lint(
-            'while (true) {\n'
-            '  int foo;\n'
-            '}\n',
-            '')
+        self.assert_multi_line_lint('while (true) {\n'
+                                    '  int foo;\n'
+                                    '}\n', '')
 
-        self.assert_multi_line_lint(
-            'while (true)\n'
-            '  int foo;\n',
-            '')
+        self.assert_multi_line_lint('while (true)\n' '  int foo;\n', '')
 
         self.assert_multi_line_lint(
             'if (condition1) {\n'
             '  statement1();\n'
             '} else {\n'
             '  statement2();\n'
-            '}\n',
-            '')
+            '}\n', '')
 
         self.assert_multi_line_lint(
             'if (condition1) {\n'
             '  statement1();\n'
             '} else if (condition2) {\n'
             '  statement2();\n'
-            '}\n',
-            '')
+            '}\n', '')
 
         self.assert_multi_line_lint(
             'if (condition1) {\n'
@@ -2339,8 +2325,7 @@
             '  statement2();\n'
             '} else {\n'
             '  statement3();\n'
-            '}\n',
-            '')
+            '}\n', '')
 
         self.assert_multi_line_lint(
             'if (condition1) {\n'
@@ -2349,8 +2334,7 @@
             '} else if (condition2) {\n'
             '  statement2();\n'
             '  statement2_2();\n'
-            '}\n',
-            '')
+            '}\n', '')
 
         self.assert_multi_line_lint(
             'if (condition1) {\n'
@@ -2362,8 +2346,7 @@
             '} else {\n'
             '  statement3();\n'
             '  statement3_2();\n'
-            '}\n',
-            '')
+            '}\n', '')
 
         #
         # Negative tests
@@ -2373,13 +2356,15 @@
             'if (condition)\n'
             '  doSomething(\n'
             '      spanningMultipleLines);\n',
-            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]')
+            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'if (condition)\n'
             '  // Single-line comment\n'
             '  doSomething();\n',
-            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]')
+            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'if (condition1)\n'
@@ -2387,7 +2372,8 @@
             'else if (condition2)\n'
             '  // Single-line comment\n'
             '  statement2();\n',
-            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]')
+            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'if (condition1)\n'
@@ -2397,26 +2383,30 @@
             'else\n'
             '  // Single-line comment\n'
             '  statement3();\n',
-            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]')
+            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'for (; foo; bar)\n'
             '  // Single-line comment\n'
             '  int foo;\n',
-            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]')
+            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'foreach (foo, foos)\n'
             '  // Single-line comment\n'
             '  int bar;\n',
-            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]')
+            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'while (true)\n'
             '  // Single-line comment\n'
             '  int foo;\n'
             '\n',
-            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]')
+            'A conditional or loop body must use braces if the statement is more than one line long.  [whitespace/braces] [4]'
+        )
 
         # 4. If one part of an if-else statement uses curly braces, the
         #    other part must too.
@@ -2429,7 +2419,8 @@
             '  doSomething2();\n'
             'else\n'
             '  doSomething3();\n',
-            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]')
+            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'if (condition1)\n'
@@ -2439,7 +2430,8 @@
             '  doSomething2_2();\n'
             '} else\n'
             '  doSomething3();\n',
-            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]')
+            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'if (condition1) {\n'
@@ -2449,7 +2441,8 @@
             '  doSomething2_2();\n'
             '} else\n'
             '  doSomething3();\n',
-            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]')
+            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'if (condition1)\n'
@@ -2460,7 +2453,8 @@
             '  doSomething3();\n'
             '  doSomething3_2();\n'
             '}\n',
-            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]')
+            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'if (condition1) {\n'
@@ -2472,7 +2466,8 @@
             '  doSomething3();\n'
             '  doSomething3_2();\n'
             '}\n',
-            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]')
+            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]'
+        )
 
         self.assert_multi_line_lint(
             'if (condition1)\n'
@@ -2484,7 +2479,8 @@
             '  doSomething3();\n'
             '  doSomething3_2();\n'
             '}\n',
-            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]')
+            'If one part of an if-else statement uses curly braces, the other part must too.  [whitespace/braces] [4]'
+        )
 
     def test_null_false_zero(self):
         # Tests for true/false and null/non-null should be done without
@@ -2523,61 +2519,60 @@
             'Tests for true/false and null/non-null should be done without equality comparisons.'
             '  [readability/comparison_to_boolean] [5]')
 
-        self.assert_lint(
-            'if (fontType == trueType)',
-            '')
-        self.assert_lint(
-            'if (othertrue == fontType)',
-            '')
-        self.assert_lint(
-            'if (LIKELY(foo == 0))',
-            '')
-        self.assert_lint(
-            'if (UNLIKELY(foo == 0))',
-            '')
-        self.assert_lint(
-            'if ((a - b) == 0.5)',
-            '')
-        self.assert_lint(
-            'if (0.5 == (a - b))',
-            '')
+        self.assert_lint('if (fontType == trueType)', '')
+        self.assert_lint('if (othertrue == fontType)', '')
+        self.assert_lint('if (LIKELY(foo == 0))', '')
+        self.assert_lint('if (UNLIKELY(foo == 0))', '')
+        self.assert_lint('if ((a - b) == 0.5)', '')
+        self.assert_lint('if (0.5 == (a - b))', '')
 
     def test_using_std_swap_ignored(self):
-        self.assert_lint(
-            'using std::swap;',
-            '',
-            'foo.cpp')
+        self.assert_lint('using std::swap;', '', 'foo.cpp')
 
     def test_ctype_fucntion(self):
         self.assert_lint(
             'int i = isascii(8);',
             'Use equivalent function in <wtf/ASCIICType.h> instead of the '
-            'isascii() function.  [runtime/ctype_function] [4]',
-            'foo.cpp')
+            'isascii() function.  [runtime/ctype_function] [4]', 'foo.cpp')
 
     def test_redundant_virtual(self):
-        self.assert_lint('virtual void fooMethod() override;',
-                         '"virtual" is redundant since function is already declared as "override"  [readability/inheritance] [4]')
-        self.assert_lint('virtual void fooMethod(\n) override {}',
-                         '"virtual" is redundant since function is already declared as "override"  [readability/inheritance] [4]')
-        self.assert_lint('virtual void fooMethod() final;',
-                         '"virtual" is redundant since function is already declared as "final"  [readability/inheritance] [4]')
-        self.assert_lint('virtual void fooMethod(\n) final {}',
-                         '"virtual" is redundant since function is already declared as "final"  [readability/inheritance] [4]')
+        self.assert_lint(
+            'virtual void fooMethod() override;',
+            '"virtual" is redundant since function is already declared as "override"  [readability/inheritance] [4]'
+        )
+        self.assert_lint(
+            'virtual void fooMethod(\n) override {}',
+            '"virtual" is redundant since function is already declared as "override"  [readability/inheritance] [4]'
+        )
+        self.assert_lint(
+            'virtual void fooMethod() final;',
+            '"virtual" is redundant since function is already declared as "final"  [readability/inheritance] [4]'
+        )
+        self.assert_lint(
+            'virtual void fooMethod(\n) final {}',
+            '"virtual" is redundant since function is already declared as "final"  [readability/inheritance] [4]'
+        )
 
     def test_redundant_override(self):
-        self.assert_lint('void fooMethod() override final;',
-                         '"override" is redundant since function is already declared as "final"  [readability/inheritance] [4]')
-        self.assert_lint('void fooMethod(\n) override final {}',
-                         '"override" is redundant since function is already declared as "final"  [readability/inheritance] [4]')
-        self.assert_lint('void fooMethod() final override;',
-                         '"override" is redundant since function is already declared as "final"  [readability/inheritance] [4]')
-        self.assert_lint('void fooMethod(\n) final override {}',
-                         '"override" is redundant since function is already declared as "final"  [readability/inheritance] [4]')
+        self.assert_lint(
+            'void fooMethod() override final;',
+            '"override" is redundant since function is already declared as "final"  [readability/inheritance] [4]'
+        )
+        self.assert_lint(
+            'void fooMethod(\n) override final {}',
+            '"override" is redundant since function is already declared as "final"  [readability/inheritance] [4]'
+        )
+        self.assert_lint(
+            'void fooMethod() final override;',
+            '"override" is redundant since function is already declared as "final"  [readability/inheritance] [4]'
+        )
+        self.assert_lint(
+            'void fooMethod(\n) final override {}',
+            '"override" is redundant since function is already declared as "final"  [readability/inheritance] [4]'
+        )
 
 
 class CppCheckerTest(unittest.TestCase):
-
     """Tests CppChecker class."""
 
     def mock_handle_style_error(self):
@@ -2591,7 +2586,8 @@
         checker = self._checker()
         self.assertEqual(checker.file_extension, 'h')
         self.assertEqual(checker.file_path, 'foo')
-        self.assertEqual(checker.handle_style_error, self.mock_handle_style_error)
+        self.assertEqual(checker.handle_style_error,
+                         self.mock_handle_style_error)
         self.assertEqual(checker.min_confidence, 3)
 
     def test_eq(self):
@@ -2607,10 +2603,14 @@
 
         # Verify that a difference in any argument cause equality to fail.
         checker = CppChecker('foo', 'h', self.mock_handle_style_error, 3)
-        self.assertFalse(checker == CppChecker('bar', 'h', self.mock_handle_style_error, 3))
-        self.assertFalse(checker == CppChecker('foo', 'c', self.mock_handle_style_error, 3))
-        self.assertFalse(checker == CppChecker('foo', 'h', mock_handle_style_error2, 3))
-        self.assertFalse(checker == CppChecker('foo', 'h', self.mock_handle_style_error, 4))
+        self.assertFalse(
+            checker == CppChecker('bar', 'h', self.mock_handle_style_error, 3))
+        self.assertFalse(
+            checker == CppChecker('foo', 'c', self.mock_handle_style_error, 3))
+        self.assertFalse(
+            checker == CppChecker('foo', 'h', mock_handle_style_error2, 3))
+        self.assertFalse(
+            checker == CppChecker('foo', 'h', self.mock_handle_style_error, 4))
 
     def test_ne(self):
         """Test __ne__ inequality function."""
diff --git a/third_party/blink/tools/blinkpy/style/checkers/jsonchecker.py b/third_party/blink/tools/blinkpy/style/checkers/jsonchecker.py
index 1693d70d..056866c 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/jsonchecker.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/jsonchecker.py
@@ -19,7 +19,6 @@
 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Checks WebKit style for JSON files."""
 
 import json
@@ -29,7 +28,7 @@
 class JSONChecker(object):
     """Processes JSON lines for checking style."""
 
-    categories = set(('json/syntax',))
+    categories = set(('json/syntax', ))
 
     def __init__(self, _, handle_style_error):
         self._handle_style_error = handle_style_error
@@ -40,8 +39,8 @@
             json.loads('\n'.join(lines) + '\n')
         except ValueError as error:
             self._handle_style_error(
-                self.line_number_from_json_exception(error),
-                'json/syntax', 5, str(error))
+                self.line_number_from_json_exception(error), 'json/syntax', 5,
+                str(error))
 
     @staticmethod
     def line_number_from_json_exception(error):
diff --git a/third_party/blink/tools/blinkpy/style/checkers/jsonchecker_unittest.py b/third_party/blink/tools/blinkpy/style/checkers/jsonchecker_unittest.py
index f711244..9aa8a56c 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/jsonchecker_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/jsonchecker_unittest.py
@@ -19,7 +19,6 @@
 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit test for jsonchecker.py."""
 
 import unittest
@@ -28,7 +27,6 @@
 
 
 class MockErrorHandler(object):
-
     def __init__(self, handle_style_error):
         self.turned_off_filtering = False
         self._handle_style_error = handle_style_error
@@ -37,7 +35,8 @@
         self.turned_off_filtering = True
 
     def __call__(self, line_number, category, confidence, message):
-        self._handle_style_error(self, line_number, category, confidence, message)
+        self._handle_style_error(self, line_number, category, confidence,
+                                 message)
         return True
 
 
@@ -52,11 +51,16 @@
             (9, 'Expecting property name: line 9 column 21 (char 478)'),
         )
         for expected_line, message in tests:
-            self.assertEqual(expected_line, jsonchecker.JSONChecker.line_number_from_json_exception(ValueError(message)))
+            self.assertEqual(
+                expected_line,
+                jsonchecker.JSONChecker.line_number_from_json_exception(
+                    ValueError(message)))
 
     def assert_no_error(self, json_data):
-        def handle_style_error(mock_error_handler, line_number, category, confidence, message):
-            self.fail('Unexpected error: %d %s %d %s' % (line_number, category, confidence, message))
+        def handle_style_error(mock_error_handler, line_number, category,
+                               confidence, message):
+            self.fail('Unexpected error: %d %s %d %s' % (line_number, category,
+                                                         confidence, message))
 
         error_handler = MockErrorHandler(handle_style_error)
         checker = jsonchecker.JSONChecker('foo.json', error_handler)
@@ -64,7 +68,8 @@
         self.assertTrue(error_handler.turned_off_filtering)
 
     def assert_error(self, expected_line_number, expected_category, json_data):
-        def handle_style_error(mock_error_handler, line_number, category, confidence, message):
+        def handle_style_error(mock_error_handler, line_number, category,
+                               confidence, message):
             mock_error_handler.had_error = True
             self.assertEqual(expected_line_number, line_number)
             self.assertEqual(expected_category, category)
diff --git a/third_party/blink/tools/blinkpy/style/checkers/png.py b/third_party/blink/tools/blinkpy/style/checkers/png.py
index d0c12cab..9725f739 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/png.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/png.py
@@ -20,7 +20,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Supports checking WebKit style in png files."""
 
 from blinkpy.common import read_checksum_from_png
@@ -38,9 +37,12 @@
         self._fs = self._host.filesystem
 
     def check(self, inline=None):
-        if self._fs.exists(self._file_path) and self._file_path.endswith('-expected.png'):
-            with self._fs.open_binary_file_for_reading(self._file_path) as filehandle:
+        if self._fs.exists(
+                self._file_path) and self._file_path.endswith('-expected.png'):
+            with self._fs.open_binary_file_for_reading(
+                    self._file_path) as filehandle:
                 if not read_checksum_from_png.read_checksum(filehandle):
                     self._handle_style_error(
                         0, 'image/png', 5,
-                        'Image lacks a checksum. Generate pngs using run_web_tests.py to ensure they have a checksum.')
+                        'Image lacks a checksum. Generate pngs using run_web_tests.py to ensure they have a checksum.'
+                    )
diff --git a/third_party/blink/tools/blinkpy/style/checkers/png_unittest.py b/third_party/blink/tools/blinkpy/style/checkers/png_unittest.py
index 99b56a4..d4b7797 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/png_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/png_unittest.py
@@ -20,7 +20,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit test for png.py."""
 
 import unittest
@@ -39,14 +38,16 @@
         def mock_handle_style_error(self):
             pass
 
-        checker = PNGChecker("test/config", mock_handle_style_error, MockSystemHost())
+        checker = PNGChecker("test/config", mock_handle_style_error,
+                             MockSystemHost())
         self.assertEqual(checker._file_path, "test/config")
         self.assertEqual(checker._handle_style_error, mock_handle_style_error)
 
     def test_check(self):
         errors = []
 
-        def mock_handle_style_error(line_number, category, confidence, message):
+        def mock_handle_style_error(line_number, category, confidence,
+                                    message):
             error = (line_number, category, confidence, message)
             errors.append(error)
 
@@ -55,16 +56,19 @@
         file_path = "foo.png"
         fs.write_binary_file(file_path, "Dummy binary data")
         errors = []
-        checker = PNGChecker(file_path, mock_handle_style_error, MockSystemHost(os_name='linux', filesystem=fs))
+        checker = PNGChecker(file_path, mock_handle_style_error,
+                             MockSystemHost(os_name='linux', filesystem=fs))
         checker.check()
         self.assertEqual(len(errors), 0)
 
         file_path = "foo-expected.png"
         fs.write_binary_file(file_path, "Dummy binary data")
         errors = []
-        checker = PNGChecker(file_path, mock_handle_style_error, MockSystemHost(os_name='linux', filesystem=fs))
+        checker = PNGChecker(file_path, mock_handle_style_error,
+                             MockSystemHost(os_name='linux', filesystem=fs))
         checker.check()
         self.assertEqual(len(errors), 1)
-        self.assertEqual(
-            errors[0],
-            (0, 'image/png', 5, 'Image lacks a checksum. Generate pngs using run_web_tests.py to ensure they have a checksum.'))
+        self.assertEqual(errors[0], (
+            0, 'image/png', 5,
+            'Image lacks a checksum. Generate pngs using run_web_tests.py to ensure they have a checksum.'
+        ))
diff --git a/third_party/blink/tools/blinkpy/style/checkers/python.py b/third_party/blink/tools/blinkpy/style/checkers/python.py
index b8f3b12a..c85f1435 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/python.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/python.py
@@ -19,14 +19,12 @@
 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Supports checking WebKit style in Python files."""
 
 import os
 import re
 import sys
 
-
 from blinkpy.common.path_finder import PathFinder
 from blinkpy.common.path_finder import get_blink_tools_dir
 from blinkpy.common.path_finder import get_blinkpy_thirdparty_dir
@@ -94,7 +92,9 @@
             '--output-format=parseable',
             '--rcfile=' + finder.path_from_blink_tools('blinkpy', 'pylintrc'),
             path,
-        ], env=env, error_handler=executive.ignore_error)
+        ],
+                                     env=env,
+                                     error_handler=executive.ignore_error)
 
     def _parse_pylint_output(self, output):
         # We filter out these messages because they are bugs in pylint that produce false positives.
@@ -123,7 +123,8 @@
             category_and_method = match_obj.group(3).split(', ')
             category = 'pylint/' + (category_and_method[0])
             if len(category_and_method) > 1:
-                message = '[%s] %s' % (category_and_method[1], match_obj.group(4))
+                message = '[%s] %s' % (category_and_method[1],
+                                       match_obj.group(4))
             else:
                 message = match_obj.group(4)
             errors.append((line_number, category, message))
diff --git a/third_party/blink/tools/blinkpy/style/checkers/python_unittest.py b/third_party/blink/tools/blinkpy/style/checkers/python_unittest.py
index 755f56a..106b8190 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/python_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/python_unittest.py
@@ -19,7 +19,6 @@
 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit tests for python.py."""
 
 import os
@@ -29,7 +28,6 @@
 
 
 class PythonCheckerTest(unittest.TestCase):
-
     """Tests the PythonChecker class."""
 
     def test_init(self):
@@ -40,8 +38,7 @@
 
         checker = PythonChecker("foo.txt", _mock_handle_style_error)
         self.assertEqual(checker._file_path, "foo.txt")
-        self.assertEqual(checker._handle_style_error,
-                         _mock_handle_style_error)
+        self.assertEqual(checker._handle_style_error, _mock_handle_style_error)
 
     # TODO(crbug.com/757067): Figure out why this is failing on LUCI mac/win.
     def disable_test_check(self):
@@ -59,13 +56,13 @@
         checker = PythonChecker(file_path, _mock_handle_style_error)
         checker.check()
 
-        self.assertEqual(
-            [
-                (2, 'pep8/W291', 5, 'trailing whitespace'),
-                (3, 'pep8/E261', 5, 'at least two spaces before inline comment'),
-                (3, 'pep8/E262', 5, "inline comment should start with '# '"),
-                (2, 'pylint/C0303(trailing-whitespace)', 5, '[] Trailing whitespace'),
-                (2, 'pylint/E0602(undefined-variable)', 5, u"[] Undefined variable 'error'"),
-                (3, 'pylint/W0611(unused-import)', 5, '[] Unused import math'),
-            ],
-            errors)
+        self.assertEqual([
+            (2, 'pep8/W291', 5, 'trailing whitespace'),
+            (3, 'pep8/E261', 5, 'at least two spaces before inline comment'),
+            (3, 'pep8/E262', 5, "inline comment should start with '# '"),
+            (2, 'pylint/C0303(trailing-whitespace)', 5,
+             '[] Trailing whitespace'),
+            (2, 'pylint/E0602(undefined-variable)', 5,
+             u"[] Undefined variable 'error'"),
+            (3, 'pylint/W0611(unused-import)', 5, '[] Unused import math'),
+        ], errors)
diff --git a/third_party/blink/tools/blinkpy/style/checkers/test_expectations.py b/third_party/blink/tools/blinkpy/style/checkers/test_expectations.py
index 13087d65..48d4e546 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/test_expectations.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/test_expectations.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Checks WebKit style for test_expectations files."""
 
 import logging
@@ -51,7 +50,8 @@
         self._port_obj = host.port_factory.get()
 
         # Suppress error messages of test_expectations module since they will be reported later.
-        log = logging.getLogger('blinkpy.web_tests.layout_package.test_expectations')
+        log = logging.getLogger(
+            'blinkpy.web_tests.layout_package.test_expectations')
         log.setLevel(logging.CRITICAL)
 
     def check_test_expectations(self, expectations_str, tests=None):
@@ -66,7 +66,8 @@
     def check(self, lines):
         expectations = '\n'.join(lines)
         if self._port_obj:
-            self.check_test_expectations(expectations_str=expectations, tests=None)
+            self.check_test_expectations(
+                expectations_str=expectations, tests=None)
 
         # Warn tabs in lines as well
         self.check_tabs(lines)
diff --git a/third_party/blink/tools/blinkpy/style/checkers/test_expectations_unittest.py b/third_party/blink/tools/blinkpy/style/checkers/test_expectations_unittest.py
index 2c24a42..35a6131 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/test_expectations_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/test_expectations_unittest.py
@@ -42,7 +42,11 @@
     def turn_off_line_filtering(self):
         self.turned_off_filtering = True
 
-    def __call__(self, lineno=0, category='test/expectations', confidence=100, message=''):
+    def __call__(self,
+                 lineno=0,
+                 category='test/expectations',
+                 confidence=100,
+                 message=''):
         self._errors.append('%s\n[%s] [%d]' % (message, category, confidence))
         return True
 
@@ -65,20 +69,21 @@
         self._error_collector.reset_errors()
 
         host = MockHost()
-        checker = TestExpectationsChecker('test/TestExpectations',
-                                          self._error_collector, host=host)
+        checker = TestExpectationsChecker(
+            'test/TestExpectations', self._error_collector, host=host)
 
         # We should have a valid port, but override it with a test port so we
         # can check the lines.
         self.assertIsNotNone(checker._port_obj)
         checker._port_obj = host.port_factory.get('test-mac-mac10.10')
-        checker.check_test_expectations(expectations_str='\n'.join(lines),
-                                        tests=[self._test_file])
+        checker.check_test_expectations(
+            expectations_str='\n'.join(lines), tests=[self._test_file])
         checker.check_tabs(lines)
         if should_pass:
             self.assertEqual('', self._error_collector.get_errors())
         elif expected_output:
-            self.assertEqual(expected_output, self._error_collector.get_errors())
+            self.assertEqual(expected_output,
+                             self._error_collector.get_errors())
         else:
             self.assertNotEquals('', self._error_collector.get_errors())
 
@@ -92,16 +97,25 @@
         self.assert_lines_lint([
             '# tags: [ Mac ]\n'
             '# results: [ Pass Failure ]\n'
-            'crbug.com/1234 [ Mac ] passes/text.html [ Pass Failure ]'], should_pass=True)
+            'crbug.com/1234 [ Mac ] passes/text.html [ Pass Failure ]'
+        ],
+                               should_pass=True)
 
     def test_invalid_expectations(self):
-        self.assert_lines_lint(['Bug(me) passes/text.html [ Give Up]'], should_pass=False)
+        self.assert_lines_lint(['Bug(me) passes/text.html [ Give Up]'],
+                               should_pass=False)
 
     def test_tab(self):
-        self.assert_lines_lint([
-            '# results: [ Pass ]\n'
-            '\tcrbug.com/b/1 passes/text.html [ Pass ]'], should_pass=False,
-            expected_output='Line contains tab character.\n[whitespace/tab] [5]')
+        self.assert_lines_lint(
+            [
+                '# results: [ Pass ]\n'
+                '\tcrbug.com/b/1 passes/text.html [ Pass ]'
+            ],
+            should_pass=False,
+            expected_output='Line contains tab character.\n[whitespace/tab] [5]'
+        )
 
     def test_missing_expectation_not_allowed(self):
-        self.assert_lines_lint(['crbug.com/1234 [ Mac ] passes/text.html [ Missing ]'], should_pass=False)
+        self.assert_lines_lint(
+            ['crbug.com/1234 [ Mac ] passes/text.html [ Missing ]'],
+            should_pass=False)
diff --git a/third_party/blink/tools/blinkpy/style/checkers/text.py b/third_party/blink/tools/blinkpy/style/checkers/text.py
index de6f975f..bc995b90 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/text.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/text.py
@@ -26,7 +26,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Checks WebKit style for text files."""
 
 from blinkpy.style.checkers.common import TabChecker
diff --git a/third_party/blink/tools/blinkpy/style/checkers/text_unittest.py b/third_party/blink/tools/blinkpy/style/checkers/text_unittest.py
index 6aa88aa0..876b8ff2 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/text_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/text_unittest.py
@@ -43,7 +43,8 @@
             self.had_error = True
 
         process_file_data('', lines, error_for_test)
-        self.assertFalse(self.had_error, '%s should not have any errors.' % lines)
+        self.assertFalse(self.had_error,
+                         '%s should not have any errors.' % lines)
 
     def assertError(self, lines, expected_line_number):
         """Asserts that the specified lines has an error."""
@@ -56,7 +57,8 @@
             self.had_error = True
 
         process_file_data('', lines, error_for_test)
-        self.assertTrue(self.had_error, '%s should have an error [whitespace/tab].' % lines)
+        self.assertTrue(self.had_error,
+                        '%s should have an error [whitespace/tab].' % lines)
 
     def test_no_error(self):
         """Tests for no error cases."""
@@ -66,13 +68,13 @@
     def test_error(self):
         """Tests for error cases."""
         self.assertError(['2009-12-16\tKent Tamura\t<tkent@chromium.org>'], 1)
-        self.assertError(['2009-12-16 Kent Tamura <tkent@chromium.org>',
-                          '',
-                          '\tReviewed by NOBODY.'], 3)
+        self.assertError([
+            '2009-12-16 Kent Tamura <tkent@chromium.org>', '',
+            '\tReviewed by NOBODY.'
+        ], 3)
 
 
 class TextCheckerTest(unittest.TestCase):
-
     """Tests TextChecker class."""
 
     def mock_handle_style_error(self):
@@ -82,4 +84,5 @@
         """Test __init__ constructor."""
         checker = TextChecker('foo.txt', self.mock_handle_style_error)
         self.assertEqual(checker.file_path, 'foo.txt')
-        self.assertEqual(checker.handle_style_error, self.mock_handle_style_error)
+        self.assertEqual(checker.handle_style_error,
+                         self.mock_handle_style_error)
diff --git a/third_party/blink/tools/blinkpy/style/checkers/xcodeproj.py b/third_party/blink/tools/blinkpy/style/checkers/xcodeproj.py
index 3de3d19..879c2e73 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/xcodeproj.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/xcodeproj.py
@@ -20,21 +20,20 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Checks Xcode project files."""
 
 import re
 
 
 class XcodeProjectFileChecker(object):
-
     """Processes Xcode project file lines for checking style."""
 
     def __init__(self, file_path, handle_style_error):
         self.file_path = file_path
         self.handle_style_error = handle_style_error
         self.handle_style_error.turn_off_line_filtering()
-        self._development_region_regex = re.compile('developmentRegion = (?P<region>.+);')
+        self._development_region_regex = re.compile(
+            'developmentRegion = (?P<region>.+);')
 
     def _check_development_region(self, line_index, line):
         """Returns True when developmentRegion is detected."""
@@ -42,8 +41,7 @@
         if not matched:
             return False
         if matched.group('region') != 'English':
-            self.handle_style_error(line_index,
-                                    'xcodeproj/settings', 5,
+            self.handle_style_error(line_index, 'xcodeproj/settings', 5,
                                     'developmentRegion is not English.')
         return True
 
@@ -54,6 +52,6 @@
                 development_region_is_detected = True
 
         if not development_region_is_detected:
-            self.handle_style_error(len(lines),
-                                    'xcodeproj/settings', 5,
-                                    'Missing "developmentRegion = English".')
+            self.handle_style_error(
+                len(lines), 'xcodeproj/settings', 5,
+                'Missing "developmentRegion = English".')
diff --git a/third_party/blink/tools/blinkpy/style/checkers/xcodeproj_unittest.py b/third_party/blink/tools/blinkpy/style/checkers/xcodeproj_unittest.py
index 9a0bad61..ec3b9595 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/xcodeproj_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/xcodeproj_unittest.py
@@ -20,7 +20,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit test for xcodeproj.py."""
 
 import unittest
@@ -47,7 +46,8 @@
 
     def assert_no_error(self, lines):
         def handler(error_handler, line_number, category, confidence, message):
-            self.fail('Unexpected error: %d %s %d %s' % (line_number, category, confidence, message))
+            self.fail('Unexpected error: %d %s %d %s' % (line_number, category,
+                                                         confidence, message))
 
         error_handler = TestErrorHandler(handler)
         checker = xcodeproj.XcodeProjectFileChecker('', error_handler)
@@ -59,10 +59,13 @@
         def handler(error_handler, line_number, category, confidence, message):
             self.assertEqual(expected_message, message)
             self.had_error = True
+
         error_handler = TestErrorHandler(handler)
         checker = xcodeproj.XcodeProjectFileChecker('', error_handler)
         checker.check(lines)
-        self.assertTrue(self.had_error, '%s should have error: %s.' % (lines, expected_message))
+        self.assertTrue(
+            self.had_error,
+            '%s should have error: %s.' % (lines, expected_message))
 
     def test_detect_development_region(self):
         self.assert_no_error(['developmentRegion = English;'])
diff --git a/third_party/blink/tools/blinkpy/style/checkers/xml.py b/third_party/blink/tools/blinkpy/style/checkers/xml.py
index 90e8bed8..079c5ca 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/xml.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/xml.py
@@ -19,7 +19,6 @@
 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Checks WebKit style for XML files."""
 
 from __future__ import absolute_import
@@ -42,4 +41,5 @@
                 parser.Parse('\n')
             parser.Parse('', True)
         except expat.ExpatError as error:
-            self._handle_style_error(error.lineno, 'xml/syntax', 5, expat.ErrorString(error.code))
+            self._handle_style_error(error.lineno, 'xml/syntax', 5,
+                                     expat.ErrorString(error.code))
diff --git a/third_party/blink/tools/blinkpy/style/checkers/xml_unittest.py b/third_party/blink/tools/blinkpy/style/checkers/xml_unittest.py
index 3daa974..dbcede78 100644
--- a/third_party/blink/tools/blinkpy/style/checkers/xml_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/checkers/xml_unittest.py
@@ -19,7 +19,6 @@
 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit test for xml.py."""
 
 import unittest
@@ -28,7 +27,6 @@
 
 
 class MockErrorHandler(object):
-
     def __init__(self, handle_style_error):
         self.turned_off_filtering = False
         self._handle_style_error = handle_style_error
@@ -37,7 +35,8 @@
         self.turned_off_filtering = True
 
     def __call__(self, line_number, category, confidence, message):
-        self._handle_style_error(self, line_number, category, confidence, message)
+        self._handle_style_error(self, line_number, category, confidence,
+                                 message)
         return True
 
 
@@ -45,8 +44,10 @@
     """Tests XMLChecker class."""
 
     def assert_no_error(self, xml_data):
-        def handle_style_error(mock_error_handler, line_number, category, confidence, message):
-            self.fail('Unexpected error: %d %s %d %s' % (line_number, category, confidence, message))
+        def handle_style_error(mock_error_handler, line_number, category,
+                               confidence, message):
+            self.fail('Unexpected error: %d %s %d %s' % \
+                (line_number, category, confidence, message))
 
         error_handler = MockErrorHandler(handle_style_error)
         checker = xml.XMLChecker('foo.xml', error_handler)
@@ -54,7 +55,8 @@
         self.assertTrue(error_handler.turned_off_filtering)
 
     def assert_error(self, expected_line_number, expected_category, xml_data):
-        def handle_style_error(mock_error_handler, line_number, category, confidence, message):
+        def handle_style_error(mock_error_handler, line_number, category,
+                               confidence, message):
             mock_error_handler.had_error = True
             self.assertEqual(expected_line_number, line_number)
             self.assertEqual(expected_category, category)
diff --git a/third_party/blink/tools/blinkpy/style/error_handlers.py b/third_party/blink/tools/blinkpy/style/error_handlers.py
index 5fecc8f..83c27295 100644
--- a/third_party/blink/tools/blinkpy/style/error_handlers.py
+++ b/third_party/blink/tools/blinkpy/style/error_handlers.py
@@ -19,7 +19,6 @@
 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Defines style error handler classes.
 
 A style error handler is a function to call when a style error is
@@ -49,10 +48,12 @@
 
 
 class DefaultStyleErrorHandler(object):
-
     """The default style error handler."""
 
-    def __init__(self, file_path, configuration, increment_error_count,
+    def __init__(self,
+                 file_path,
+                 configuration,
+                 increment_error_count,
                  line_numbers=None):
         """Create a default style error handler.
 
@@ -126,7 +127,11 @@
     def turn_off_line_filtering(self):
         self._line_numbers = None
 
-    def __call__(self, line_number=0, category='error', confidence='1', message=''):
+    def __call__(self,
+                 line_number=0,
+                 category='error',
+                 confidence='1',
+                 message=''):
         """Handle the occurrence of a style error.
 
         See the docstring of this module for more information.
@@ -134,9 +139,10 @@
         if not self.should_line_be_checked(line_number):
             return False
 
-        if not self._configuration.is_reportable(category=category,
-                                                 confidence_in_error=confidence,
-                                                 file_path=self._file_path):
+        if not self._configuration.is_reportable(
+                category=category,
+                confidence_in_error=confidence,
+                file_path=self._file_path):
             return False
 
         category_total = self._add_reportable_error(category)
@@ -147,12 +153,14 @@
             # Then suppress displaying the error.
             return False
 
-        self._configuration.write_style_error(category=category,
-                                              confidence_in_error=confidence,
-                                              file_path=self._file_path,
-                                              line_number=line_number,
-                                              message=message)
+        self._configuration.write_style_error(
+            category=category,
+            confidence_in_error=confidence,
+            file_path=self._file_path,
+            line_number=line_number,
+            message=message)
         if category_total == max_reports:
-            self._configuration.stderr_write('Suppressing further [%s] reports '
-                                             'for this file.\n' % category)
+            self._configuration.stderr_write(
+                'Suppressing further [%s] reports '
+                'for this file.\n' % category)
         return True
diff --git a/third_party/blink/tools/blinkpy/style/error_handlers_unittest.py b/third_party/blink/tools/blinkpy/style/error_handlers_unittest.py
index 820f8b00..a31222c 100644
--- a/third_party/blink/tools/blinkpy/style/error_handlers_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/error_handlers_unittest.py
@@ -19,7 +19,6 @@
 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit tests for error_handlers.py."""
 
 import unittest
@@ -30,7 +29,6 @@
 
 
 class DefaultStyleErrorHandlerTest(unittest.TestCase):
-
     """Tests the DefaultStyleErrorHandler class."""
 
     def setUp(self):
@@ -62,10 +60,11 @@
             stderr_write=self._mock_stderr_write)
 
     def _error_handler(self, configuration, line_numbers=None):
-        return DefaultStyleErrorHandler(configuration=configuration,
-                                        file_path=self._file_path,
-                                        increment_error_count=self._mock_increment_error_count,
-                                        line_numbers=line_numbers)
+        return DefaultStyleErrorHandler(
+            configuration=configuration,
+            file_path=self._file_path,
+            increment_error_count=self._mock_increment_error_count,
+            line_numbers=line_numbers)
 
     def _check_initialized(self):
         """Check that count and error messages are initialized."""
@@ -74,10 +73,11 @@
 
     def _call_error_handler(self, handle_error, confidence, line_number=100):
         """Call the given error handler with a test error."""
-        handle_error(line_number=line_number,
-                     category=self._category,
-                     confidence=confidence,
-                     message='message')
+        handle_error(
+            line_number=line_number,
+            category=self._category,
+            confidence=confidence,
+            message='message')
 
     def test_eq__true_return_value(self):
         """Test the __eq__() method for the return value of True."""
@@ -88,14 +88,17 @@
 
     def test_eq__false_return_value(self):
         """Test the __eq__() method for the return value of False."""
+
         def make_handler(configuration=self._style_checker_configuration(),
-                         file_path='foo.txt', increment_error_count=lambda: True,
+                         file_path='foo.txt',
+                         increment_error_count=lambda: True,
                          line_numbers=None):
             line_numbers = line_numbers or [100]
-            return DefaultStyleErrorHandler(configuration=configuration,
-                                            file_path=file_path,
-                                            increment_error_count=increment_error_count,
-                                            line_numbers=line_numbers)
+            return DefaultStyleErrorHandler(
+                configuration=configuration,
+                file_path=file_path,
+                increment_error_count=increment_error_count,
+                line_numbers=line_numbers)
 
         handler = make_handler()
 
@@ -105,7 +108,8 @@
         # Verify that a difference in any argument causes equality to fail.
         self.assertFalse(handler.__eq__(make_handler(configuration=None)))
         self.assertFalse(handler.__eq__(make_handler(file_path='bar.txt')))
-        self.assertFalse(handler.__eq__(make_handler(increment_error_count=None)))
+        self.assertFalse(
+            handler.__eq__(make_handler(increment_error_count=None)))
         self.assertFalse(handler.__eq__(make_handler(line_numbers=[50])))
 
     def test_ne(self):
@@ -125,9 +129,9 @@
 
         confidence = 1
         # Confirm the error is not reportable.
-        self.assertFalse(configuration.is_reportable(self._category,
-                                                     confidence,
-                                                     self._file_path))
+        self.assertFalse(
+            configuration.is_reportable(self._category, confidence,
+                                        self._file_path))
         error_handler = self._error_handler(configuration)
         self._call_error_handler(error_handler, confidence)
 
@@ -158,9 +162,10 @@
         self.assertEqual(3, len(self._error_messages))
         self.assertEqual(self._error_messages[-2],
                          'foo.h(100):  message  [whitespace/tab] [5]\n')
-        self.assertEqual(self._error_messages[-1],
-                         'Suppressing further [whitespace/tab] reports '
-                         'for this file.\n')
+        self.assertEqual(
+            self._error_messages[-1],
+            'Suppressing further [whitespace/tab] reports '
+            'for this file.\n')
 
         # Third call: no report.
         self._call_error_handler(error_handler, confidence)
@@ -171,8 +176,7 @@
         """Test the line_numbers parameter."""
         self._check_initialized()
         configuration = self._style_checker_configuration()
-        error_handler = self._error_handler(configuration,
-                                            line_numbers=[50])
+        error_handler = self._error_handler(configuration, line_numbers=[50])
         confidence = 5
 
         # Error on non-modified line: no error.
@@ -190,7 +194,8 @@
         error_handler.turn_off_line_filtering()
         self._call_error_handler(error_handler, confidence, line_number=60)
         self.assertEqual(2, self._error_count)
-        self.assertEqual(self._error_messages,
-                         ['foo.h(50):  message  [whitespace/tab] [5]\n',
-                          'foo.h(60):  message  [whitespace/tab] [5]\n',
-                          'Suppressing further [whitespace/tab] reports for this file.\n'])
+        self.assertEqual(self._error_messages, [
+            'foo.h(50):  message  [whitespace/tab] [5]\n',
+            'foo.h(60):  message  [whitespace/tab] [5]\n',
+            'Suppressing further [whitespace/tab] reports for this file.\n'
+        ])
diff --git a/third_party/blink/tools/blinkpy/style/filereader.py b/third_party/blink/tools/blinkpy/style/filereader.py
index a3fa4da..20ef012 100644
--- a/third_party/blink/tools/blinkpy/style/filereader.py
+++ b/third_party/blink/tools/blinkpy/style/filereader.py
@@ -27,7 +27,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Supports reading and processing text files."""
 
 import codecs
@@ -35,12 +34,10 @@
 import os
 import sys
 
-
 _log = logging.getLogger(__name__)
 
 
 class TextFileReader(object):
-
     """Supports reading and processing text files.
 
        Attributes:
@@ -109,7 +106,8 @@
 
         if not self.filesystem.exists(file_path) and file_path != '-':
             _log.error("File does not exist: '%s'", file_path)
-            sys.exit(1)  # FIXME: This should throw or return instead of exiting directly.
+            # FIXME: This should throw or return instead of exiting directly.
+            sys.exit(1)
 
         if not self._processor.should_process(file_path):
             _log.debug("Skipping file: '%s'", file_path)
@@ -119,7 +117,8 @@
         try:
             lines = self._read_lines(file_path)
         except IOError as err:
-            message = ("Could not read file. Skipping: '%s'\n  %s" % (file_path, err))
+            message = (
+                "Could not read file. Skipping: '%s'\n  %s" % (file_path, err))
             _log.warning(message)
             return
 
diff --git a/third_party/blink/tools/blinkpy/style/filereader_unittest.py b/third_party/blink/tools/blinkpy/style/filereader_unittest.py
index aa6b436..490061b 100644
--- a/third_party/blink/tools/blinkpy/style/filereader_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/filereader_unittest.py
@@ -20,7 +20,6 @@
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-
 from blinkpy.common.system.filesystem import FileSystem
 from blinkpy.common.system.log_testing import LoggingTestCase
 from blinkpy.style.checker import ProcessorBase
@@ -28,9 +27,7 @@
 
 
 class TextFileReaderTest(LoggingTestCase):
-
     class MockProcessor(ProcessorBase):
-
         """A processor for test purposes.
 
         This processor simply records the parameters passed to its process()
@@ -101,7 +98,9 @@
         # remain.
         message = log_messages.pop()
 
-        self.assertTrue(message.startswith("WARNING: Could not read file. Skipping: '%s'\n  " % temp_dir))
+        self.assertTrue(
+            message.startswith(
+                "WARNING: Could not read file. Skipping: '%s'\n  " % temp_dir))
 
         self._assert_file_reader([], 1)
 
@@ -143,8 +142,7 @@
         file_path2 = self._create_file(rel_path, 'bar')
 
         self._file_reader.process_paths([dir, file_path1])
-        processed = [(['bar'], file_path2, None),
-                     (['foo'], file_path1, None)]
+        processed = [(['bar'], file_path2, None), (['foo'], file_path1, None)]
         self._assert_file_reader(processed, 2)
 
     def test_count_delete_only_file(self):
diff --git a/third_party/blink/tools/blinkpy/style/filter.py b/third_party/blink/tools/blinkpy/style/filter.py
index d5822ec..f1e62da 100644
--- a/third_party/blink/tools/blinkpy/style/filter.py
+++ b/third_party/blink/tools/blinkpy/style/filter.py
@@ -19,7 +19,6 @@
 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Contains filter-related code."""
 
 
@@ -53,7 +52,6 @@
 
 
 class _CategoryFilter(object):
-
     """Filters whether to check style categories."""
 
     def __init__(self, filter_rules=None):
@@ -74,7 +72,8 @@
             filter_rules = []
 
         self._filter_rules = filter_rules
-        self._should_check_category = {}  # Cached dictionary of category to True/False
+        # Cached dictionary of category to True/False
+        self._should_check_category = {}
 
     def __str__(self):
         return ','.join(self._filter_rules)
@@ -115,7 +114,6 @@
 
 
 class FilterConfiguration(object):
-
     """Supports filtering with path-specific and user-specified rules."""
 
     def __init__(self, base_rules=None, path_specific=None, user_rules=None):
diff --git a/third_party/blink/tools/blinkpy/style/filter_unittest.py b/third_party/blink/tools/blinkpy/style/filter_unittest.py
index 7f14976e..7647796 100644
--- a/third_party/blink/tools/blinkpy/style/filter_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/filter_unittest.py
@@ -19,7 +19,6 @@
 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit tests for filter.py."""
 
 import unittest
@@ -51,7 +50,6 @@
 
 
 class ValidateFilterRulesTest(unittest.TestCase):
-
     """Tests validate_filter_rules() function."""
 
     def test_validate_filter_rules(self):
@@ -66,11 +64,7 @@
             "+xxx",
         ]
 
-        good_rules = [
-            "+tabs",
-            "-tabs",
-            "+build"
-        ]
+        good_rules = ["+tabs", "-tabs", "+build"]
 
         for rule in bad_rules:
             with self.assertRaises(ValueError):
@@ -82,7 +76,6 @@
 
 
 class CategoryFilterTest(unittest.TestCase):
-
     """Tests CategoryFilter class."""
 
     def test_init(self):
@@ -144,14 +137,14 @@
 
 
 class FilterConfigurationTest(unittest.TestCase):
-
     """Tests FilterConfiguration class."""
 
     def _config(self, base_rules, path_specific, user_rules):
         """Return a FilterConfiguration instance."""
-        return FilterConfiguration(base_rules=base_rules,
-                                   path_specific=path_specific,
-                                   user_rules=user_rules)
+        return FilterConfiguration(
+            base_rules=base_rules,
+            path_specific=path_specific,
+            user_rules=user_rules)
 
     def test_init(self):
         """Test __init__ method."""
@@ -189,12 +182,12 @@
         path_specific = [(["path"], ["+a"])]
         user_rules = ["+"]
 
-        self.assertFalse(config.__eq__(FilterConfiguration(
-            base_rules=base_rules)))
-        self.assertFalse(config.__eq__(FilterConfiguration(
-            path_specific=path_specific)))
-        self.assertFalse(config.__eq__(FilterConfiguration(
-            user_rules=user_rules)))
+        self.assertFalse(
+            config.__eq__(FilterConfiguration(base_rules=base_rules)))
+        self.assertFalse(
+            config.__eq__(FilterConfiguration(path_specific=path_specific)))
+        self.assertFalse(
+            config.__eq__(FilterConfiguration(user_rules=user_rules)))
 
     def test_ne(self):
         """Test __ne__ method."""
@@ -220,8 +213,7 @@
     def test_path_specific(self):
         """Test effect of path_rules_specifier on should_check()."""
         base_rules = ["-"]
-        path_specific = [(["path1"], ["+b"]),
-                         (["path2"], ["+c"])]
+        path_specific = [(["path1"], ["+b"]), (["path2"], ["+c"])]
         user_rules = []
 
         config = self._config(base_rules, path_specific, user_rules)
diff --git a/third_party/blink/tools/blinkpy/style/main.py b/third_party/blink/tools/blinkpy/style/main.py
index 28a5e3d..80ac53c8 100644
--- a/third_party/blink/tools/blinkpy/style/main.py
+++ b/third_party/blink/tools/blinkpy/style/main.py
@@ -30,7 +30,6 @@
 from blinkpy.style.filereader import TextFileReader
 from blinkpy.style.patchreader import PatchReader
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -86,8 +85,7 @@
 
   Pass only files below the checkout root to ensure correct results.
   See the help documentation for more info.
-""",
-                    path, checkout_root)
+""", path, checkout_root)
 
                 return paths
             rel_paths.append(rel_path)
@@ -101,14 +99,12 @@
 
 
 class CheckBlinkStyle(object):
-
     def _engage_awesome_stderr_hacks(self):
         # Change stderr to write with replacement characters so we don't die
         # if we try to print something containing non-ASCII characters.
         stderr = codecs.StreamReaderWriter(sys.stderr,
                                            codecs.getreader('utf8'),
-                                           codecs.getwriter('utf8'),
-                                           'replace')
+                                           codecs.getwriter('utf8'), 'replace')
         # Setting an "encoding" attribute on the stream is necessary to
         # prevent the logging module from raising an error.  See
         # the checker.configure_logging() function for more information.
@@ -140,7 +136,10 @@
 
         configuration = checker.check_blink_style_configuration(options)
 
-        paths = change_directory(host.filesystem, checkout_root=host.git().checkout_root, paths=paths)
+        paths = change_directory(
+            host.filesystem,
+            checkout_root=host.git().checkout_root,
+            paths=paths)
 
         style_processor = StyleProcessor(configuration)
         file_reader = TextFileReader(host.filesystem, style_processor)
@@ -149,7 +148,8 @@
             file_reader.process_paths(paths)
         else:
             changed_files = paths if options.diff_files else None
-            patch = host.git().create_patch(options.git_commit, changed_files=changed_files)
+            patch = host.git().create_patch(
+                options.git_commit, changed_files=changed_files)
             patch_checker = PatchReader(file_reader)
             patch_checker.check(patch)
 
@@ -157,6 +157,7 @@
         file_count = file_reader.file_count
         delete_only_file_count = file_reader.delete_only_file_count
 
-        _log.info('Total errors found: %d in %d files', error_count, file_count)
+        _log.info('Total errors found: %d in %d files', error_count,
+                  file_count)
         # We fail when style errors are found.
         return error_count > 0
diff --git a/third_party/blink/tools/blinkpy/style/main_unittest.py b/third_party/blink/tools/blinkpy/style/main_unittest.py
index b4a5322b..43bb70c 100644
--- a/third_party/blink/tools/blinkpy/style/main_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/main_unittest.py
@@ -31,10 +31,13 @@
 
     def setUp(self):
         super(ChangeDirectoryTest, self).setUp()
-        self.filesystem = MockFileSystem(dirs=[self._original_directory, self._checkout_root], cwd=self._original_directory)
+        self.filesystem = MockFileSystem(
+            dirs=[self._original_directory, self._checkout_root],
+            cwd=self._original_directory)
 
     def _change_directory(self, paths, checkout_root):
-        return change_directory(self.filesystem, paths=paths, checkout_root=checkout_root)
+        return change_directory(
+            self.filesystem, paths=paths, checkout_root=checkout_root)
 
     def _assert_result(self, actual_return_value, expected_return_value,
                        expected_log_messages, expected_current_directory):
@@ -43,17 +46,21 @@
         self.assertEqual(self.filesystem.getcwd(), expected_current_directory)
 
     def test_paths_none(self):
-        paths = self._change_directory(checkout_root=self._checkout_root, paths=None)
+        paths = self._change_directory(
+            checkout_root=self._checkout_root, paths=None)
         self._assert_result(paths, None, [], self._checkout_root)
 
     def test_paths_convertible(self):
         paths = ['/chromium/src/foo1.txt', '/chromium/src/foo2.txt']
-        paths = self._change_directory(checkout_root=self._checkout_root, paths=paths)
-        self._assert_result(paths, ['foo1.txt', 'foo2.txt'], [], self._checkout_root)
+        paths = self._change_directory(
+            checkout_root=self._checkout_root, paths=paths)
+        self._assert_result(paths, ['foo1.txt', 'foo2.txt'], [],
+                            self._checkout_root)
 
     def test_with_git_paths_unconvertible(self):
         paths = ['/chromium/src/foo1.txt', '/outside/foo2.txt']
-        paths = self._change_directory(checkout_root=self._checkout_root, paths=paths)
+        paths = self._change_directory(
+            checkout_root=self._checkout_root, paths=paths)
         log_messages = [
             """WARNING: Path-dependent style checks may not work correctly:
 
@@ -66,5 +73,7 @@
   Pass only files below the checkout root to ensure correct results.
   See the help documentation for more info.
 
-"""]
-        self._assert_result(paths, paths, log_messages, self._original_directory)
+"""
+        ]
+        self._assert_result(paths, paths, log_messages,
+                            self._original_directory)
diff --git a/third_party/blink/tools/blinkpy/style/optparser.py b/third_party/blink/tools/blinkpy/style/optparser.py
index 435f5c5..5d1c1b83 100644
--- a/third_party/blink/tools/blinkpy/style/optparser.py
+++ b/third_party/blink/tools/blinkpy/style/optparser.py
@@ -19,7 +19,6 @@
 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Supports the parsing of command-line options for check_blink_style.py."""
 
 import logging
@@ -102,7 +101,6 @@
 
 # This class should not have knowledge of the flag key names.
 class DefaultCommandOptionValues(object):
-
     """Stores the default check_blink_style.py command-line options.
 
     Attributes:
@@ -117,7 +115,6 @@
 
 # This class should not have knowledge of the flag key names.
 class CommandOptionValues(object):
-
     """Stores the option values passed by the user via the command line.
 
     Attributes:
@@ -192,7 +189,6 @@
 
 
 class ArgumentPrinter(object):
-
     """Supports the printing of check_blink_style.py command arguments."""
 
     def _flag_pair_to_string(self, flag_key, flag_value):
@@ -282,55 +278,86 @@
         self.default_options = default_options
         self.stderr_write = stderr.write
 
-        self._parser = self._create_option_parser(stderr=stderr,
-                                                  usage=usage,
-                                                  default_min_confidence=self.default_options.min_confidence,
-                                                  default_output_format=self.default_options.output_format)
+        self._parser = self._create_option_parser(
+            stderr=stderr,
+            usage=usage,
+            default_min_confidence=self.default_options.min_confidence,
+            default_output_format=self.default_options.output_format)
 
-    def _create_option_parser(self, stderr, usage,
-                              default_min_confidence, default_output_format):
+    def _create_option_parser(self, stderr, usage, default_min_confidence,
+                              default_output_format):
         # Since the epilog string is short, it is not necessary to replace
         # the epilog string with a mock epilog string when testing.
         # For this reason, we use _EPILOG directly rather than passing it
         # as an argument like we do for the usage string.
         parser = OptionParser(usage=usage, epilog=_EPILOG)
 
-        filter_help = ('set a filter to control what categories of style '
-                       'errors to report.  Specify a filter using a comma-'
-                       'delimited list of boolean filter rules, for example '
-                       '"--filter -whitespace,+whitespace/braces".  To display '
-                       'all categories and which are enabled by default, pass '
-                       """no value (e.g. '-f ""' or '--filter=').""")
-        parser.add_option('-f', '--filter-rules', metavar='RULES',
-                          dest='filter_value', help=filter_help)
+        filter_help = (
+            'set a filter to control what categories of style '
+            'errors to report.  Specify a filter using a comma-'
+            'delimited list of boolean filter rules, for example '
+            '"--filter -whitespace,+whitespace/braces".  To display '
+            'all categories and which are enabled by default, pass '
+            """no value (e.g. '-f ""' or '--filter=').""")
+        parser.add_option(
+            '-f',
+            '--filter-rules',
+            metavar='RULES',
+            dest='filter_value',
+            help=filter_help)
 
-        git_commit_help = ('check all changes in the given commit. '
-                           "Use 'commit_id..' to check all changes after commit_id")
-        parser.add_option('-g', '--git-diff', '--git-commit',
-                          metavar='COMMIT', dest='git_commit', help=git_commit_help,)
+        git_commit_help = (
+            'check all changes in the given commit. '
+            "Use 'commit_id..' to check all changes after commit_id")
+        parser.add_option(
+            '-g',
+            '--git-diff',
+            '--git-commit',
+            metavar='COMMIT',
+            dest='git_commit',
+            help=git_commit_help,
+        )
 
         diff_files_help = 'diff the files passed on the command line rather than checking the style of every line'
-        parser.add_option('--diff-files', action='store_true', dest='diff_files', default=False, help=diff_files_help)
+        parser.add_option(
+            '--diff-files',
+            action='store_true',
+            dest='diff_files',
+            default=False,
+            help=diff_files_help)
 
         min_confidence_help = ('set the minimum confidence of style errors '
                                'to report.  Can be an integer 1-5, with 1 '
                                'displaying all errors.  Defaults to %default.')
-        parser.add_option('-m', '--min-confidence', metavar='INT',
-                          type='int', dest='min_confidence',
-                          default=default_min_confidence,
-                          help=min_confidence_help)
+        parser.add_option(
+            '-m',
+            '--min-confidence',
+            metavar='INT',
+            type='int',
+            dest='min_confidence',
+            default=default_min_confidence,
+            help=min_confidence_help)
 
         output_format_help = ('set the output format, which can be "emacs" '
                               'or "vs7" (for Visual Studio).  '
                               'Defaults to "%default".')
-        parser.add_option('-o', '--output-format', metavar='FORMAT',
-                          choices=['emacs', 'vs7'],
-                          dest='output_format', default=default_output_format,
-                          help=output_format_help)
+        parser.add_option(
+            '-o',
+            '--output-format',
+            metavar='FORMAT',
+            choices=['emacs', 'vs7'],
+            dest='output_format',
+            default=default_output_format,
+            help=output_format_help)
 
         verbose_help = 'enable verbose logging.'
-        parser.add_option('-v', '--verbose', dest='is_verbose', default=False,
-                          action='store_true', help=verbose_help)
+        parser.add_option(
+            '-v',
+            '--verbose',
+            dest='is_verbose',
+            default=False,
+            action='store_true',
+            help=verbose_help)
 
         # Override OptionParser's error() method so that option help will
         # also display when an error occurs.  Normally, just the usage
@@ -425,9 +452,9 @@
 
         min_confidence = int(min_confidence)
         if (min_confidence < 1) or (min_confidence > 5):
-            self._parse_error('option --min-confidence: invalid integer: '
-                              '%s: value must be between 1 and 5'
-                              % min_confidence)
+            self._parse_error(
+                'option --min-confidence: invalid integer: '
+                '%s: value must be between 1 and 5' % min_confidence)
 
         if filter_value:
             filter_rules = self._parse_filter_flag(filter_value)
@@ -439,11 +466,12 @@
         except ValueError as err:
             self._parse_error(err)
 
-        options = CommandOptionValues(filter_rules=filter_rules,
-                                      git_commit=git_commit,
-                                      diff_files=diff_files,
-                                      is_verbose=is_verbose,
-                                      min_confidence=min_confidence,
-                                      output_format=output_format)
+        options = CommandOptionValues(
+            filter_rules=filter_rules,
+            git_commit=git_commit,
+            diff_files=diff_files,
+            is_verbose=is_verbose,
+            min_confidence=min_confidence,
+            output_format=output_format)
 
         return (paths, options)
diff --git a/third_party/blink/tools/blinkpy/style/optparser_unittest.py b/third_party/blink/tools/blinkpy/style/optparser_unittest.py
index bc8a412..4e711c4 100644
--- a/third_party/blink/tools/blinkpy/style/optparser_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/optparser_unittest.py
@@ -19,7 +19,6 @@
 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit tests for parser.py."""
 
 import unittest
@@ -32,7 +31,6 @@
 
 
 class ArgumentPrinterTest(unittest.TestCase):
-
     """Tests the ArgumentPrinter class."""
 
     _printer = ArgumentPrinter()
@@ -42,16 +40,18 @@
                         min_confidence=3,
                         filter_rules=None,
                         git_commit=None):
-        return ProcessorOptions(filter_rules=filter_rules,
-                                git_commit=git_commit,
-                                min_confidence=min_confidence,
-                                output_format=output_format)
+        return ProcessorOptions(
+            filter_rules=filter_rules,
+            git_commit=git_commit,
+            min_confidence=min_confidence,
+            output_format=output_format)
 
     def test_to_flag_string(self):
         options = self._create_options('vs7', 5, ['+foo', '-bar'], 'git')
-        self.assertEqual('--filter=+foo,-bar --git-commit=git '
-                         '--min-confidence=5 --output=vs7',
-                         self._printer.to_flag_string(options))
+        self.assertEqual(
+            '--filter=+foo,-bar --git-commit=git '
+            '--min-confidence=5 --output=vs7',
+            self._printer.to_flag_string(options))
 
         # This is to check that --filter and --git-commit do not
         # show up when not user-specified.
@@ -61,11 +61,9 @@
 
 
 class ArgumentParserTest(LoggingTestCase):
-
     """Test the ArgumentParser class."""
 
     class _MockStdErr(object):
-
         def write(self, _):
             # We do not want the usage string or style categories
             # to print during unit tests, so print nothing.
@@ -78,8 +76,8 @@
 
     def _create_defaults(self):
         """Return a DefaultCommandOptionValues instance for testing."""
-        return DefaultCommandOptionValues(min_confidence=3,
-                                          output_format='vs7')
+        return DefaultCommandOptionValues(
+            min_confidence=3, output_format='vs7')
 
     def _create_parser(self):
         """Return an ArgumentParser instance for testing."""
@@ -89,11 +87,12 @@
 
         mock_stderr = self._MockStdErr()
 
-        return ArgumentParser(all_categories=all_categories,
-                              base_filter_rules=[],
-                              default_options=default_options,
-                              mock_stderr=mock_stderr,
-                              usage='test usage')
+        return ArgumentParser(
+            all_categories=all_categories,
+            base_filter_rules=[],
+            default_options=default_options,
+            mock_stderr=mock_stderr,
+            usage='test usage')
 
     def test_parse_documentation(self):
         parse = self._parse
@@ -118,30 +117,40 @@
 
         with self.assertRaises(SystemExit):
             parse(['--min-confidence=bad'])
-        self.assertLog(['ERROR: option --min-confidence: '
-                        "invalid integer value: 'bad'\n"])
+        self.assertLog([
+            'ERROR: option --min-confidence: '
+            "invalid integer value: 'bad'\n"
+        ])
         with self.assertRaises(SystemExit):
             parse(['--min-confidence=0'])
-        self.assertLog(['ERROR: option --min-confidence: invalid integer: 0: '
-                        'value must be between 1 and 5\n'])
+        self.assertLog([
+            'ERROR: option --min-confidence: invalid integer: 0: '
+            'value must be between 1 and 5\n'
+        ])
         with self.assertRaises(SystemExit):
             parse(['--min-confidence=6'])
-        self.assertLog(['ERROR: option --min-confidence: invalid integer: 6: '
-                        'value must be between 1 and 5\n'])
+        self.assertLog([
+            'ERROR: option --min-confidence: invalid integer: 6: '
+            'value must be between 1 and 5\n'
+        ])
         parse(['--min-confidence=1'])  # works
         parse(['--min-confidence=5'])  # works
 
         with self.assertRaises(SystemExit):
             parse(['--output=bad'])
-        self.assertLog(['ERROR: option --output-format: invalid choice: '
-                        "'bad' (choose from 'emacs', 'vs7')\n"])
+        self.assertLog([
+            'ERROR: option --output-format: invalid choice: '
+            "'bad' (choose from 'emacs', 'vs7')\n"
+        ])
         parse(['--output=vs7'])  # works
 
         # Pass a filter rule not beginning with + or -.
         with self.assertRaises(SystemExit):
             parse(['--filter=build'])
-        self.assertLog(['ERROR: Invalid filter rule "build": '
-                        'every rule must start with + or -.\n'])
+        self.assertLog([
+            'ERROR: Invalid filter rule "build": '
+            'every rule must start with + or -.\n'
+        ])
         parse(['--filter=+build'])  # works
 
     def test_parse_default_arguments(self):
@@ -179,13 +188,11 @@
 
         # Pass user_rules.
         _, options = parse(['--filter=+build,-whitespace'])
-        self.assertEqual(options.filter_rules,
-                         ['+build', '-whitespace'])
+        self.assertEqual(options.filter_rules, ['+build', '-whitespace'])
 
         # Pass spurious white space in user rules.
         _, options = parse(['--filter=+build, -whitespace'])
-        self.assertEqual(options.filter_rules,
-                         ['+build', '-whitespace'])
+        self.assertEqual(options.filter_rules, ['+build', '-whitespace'])
 
     def test_parse_files(self):
         parse = self._parse
@@ -199,7 +206,6 @@
 
 
 class CommandOptionValuesTest(unittest.TestCase):
-
     """Tests CommandOptionValues class."""
 
     def test_init(self):
@@ -222,11 +228,12 @@
         ProcessorOptions(min_confidence=5)  # works
 
         # Check attributes.
-        options = ProcessorOptions(filter_rules=['+'],
-                                   git_commit='commit',
-                                   is_verbose=True,
-                                   min_confidence=3,
-                                   output_format='vs7')
+        options = ProcessorOptions(
+            filter_rules=['+'],
+            git_commit='commit',
+            is_verbose=True,
+            min_confidence=3,
+            output_format='vs7')
         self.assertEqual(options.filter_rules, ['+'])
         self.assertEqual(options.git_commit, 'commit')
         self.assertTrue(options.is_verbose)
@@ -242,11 +249,12 @@
         # Explicitly create a ProcessorOptions instance with all default
         # values.  We do this to be sure we are assuming the right default
         # values in our self.assertFalse() calls below.
-        options = ProcessorOptions(filter_rules=[],
-                                   git_commit=None,
-                                   is_verbose=False,
-                                   min_confidence=1,
-                                   output_format='emacs')
+        options = ProcessorOptions(
+            filter_rules=[],
+            git_commit=None,
+            is_verbose=False,
+            min_confidence=1,
+            output_format='emacs')
         # Verify that we created options correctly.
         self.assertTrue(options.__eq__(ProcessorOptions()))
 
diff --git a/third_party/blink/tools/blinkpy/style/patchreader.py b/third_party/blink/tools/blinkpy/style/patchreader.py
index d39c23c5..434f6dc 100644
--- a/third_party/blink/tools/blinkpy/style/patchreader.py
+++ b/third_party/blink/tools/blinkpy/style/patchreader.py
@@ -32,7 +32,6 @@
 
 from blinkpy.common.checkout.diff_parser import DiffParser
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -53,7 +52,8 @@
 
         for path, diff_file in patch_files.iteritems():
             line_numbers = diff_file.added_or_modified_line_numbers()
-            _log.debug('Found %s new or modified lines in: %s', len(line_numbers), path)
+            _log.debug('Found %s new or modified lines in: %s',
+                       len(line_numbers), path)
 
             if not line_numbers:
                 # Don't check files which contain only deleted lines
@@ -62,4 +62,5 @@
                 self._text_file_reader.count_delete_only_file()
                 continue
 
-            self._text_file_reader.process_file(file_path=path, line_numbers=line_numbers)
+            self._text_file_reader.process_file(
+                file_path=path, line_numbers=line_numbers)
diff --git a/third_party/blink/tools/blinkpy/style/patchreader_unittest.py b/third_party/blink/tools/blinkpy/style/patchreader_unittest.py
index f64c8c23..d6c253df 100644
--- a/third_party/blink/tools/blinkpy/style/patchreader_unittest.py
+++ b/third_party/blink/tools/blinkpy/style/patchreader_unittest.py
@@ -35,11 +35,10 @@
 
 
 class PatchReaderTest(unittest.TestCase):
-
     class MockTextFileReader(object):
-
         def __init__(self):
-            self.passed_to_process_file = []  # A list of (file_path, line_numbers) pairs.
+            # A list of (file_path, line_numbers) pairs.
+            self.passed_to_process_file = []
             self.delete_only_file_count = 0  # A number of times count_delete_only_file() called.
 
         def process_file(self, file_path, line_numbers):
@@ -52,8 +51,10 @@
         self._file_reader = self.MockTextFileReader()
 
     def _assert_checked(self, passed_to_process_file, delete_only_file_count):
-        self.assertEqual(self._file_reader.passed_to_process_file, passed_to_process_file)
-        self.assertEqual(self._file_reader.delete_only_file_count, delete_only_file_count)
+        self.assertEqual(self._file_reader.passed_to_process_file,
+                         passed_to_process_file)
+        self.assertEqual(self._file_reader.delete_only_file_count,
+                         delete_only_file_count)
 
     def test_check_patch(self):
         PatchReader(self._file_reader).check(
@@ -78,7 +79,8 @@
             '@@ -1 +0,0 @@\n'
             '-foobar\n')
         # The deleted file isn't be processed.
-        self._assert_checked(passed_to_process_file=[], delete_only_file_count=1)
+        self._assert_checked(
+            passed_to_process_file=[], delete_only_file_count=1)
 
     def test_check_patch_with_png_deletion(self):
         PatchReader(self._file_reader).check(
@@ -86,4 +88,5 @@
             'deleted file mode 100644\n'
             'index ef65bee..0000000\n'
             'Binary files a/foo-expected.png and /dev/null differ\n')
-        self._assert_checked(passed_to_process_file=[], delete_only_file_count=1)
+        self._assert_checked(
+            passed_to_process_file=[], delete_only_file_count=1)
diff --git a/third_party/blink/tools/blinkpy/tool/.style.yapf b/third_party/blink/tools/blinkpy/tool/.style.yapf
new file mode 100644
index 0000000..557fa7b
--- /dev/null
+++ b/third_party/blink/tools/blinkpy/tool/.style.yapf
@@ -0,0 +1,2 @@
+[style]
+based_on_style = pep8
diff --git a/third_party/blink/tools/blinkpy/tool/blink_tool.py b/third_party/blink/tools/blinkpy/tool/blink_tool.py
index 821990c..d4ae2d3a9 100644
--- a/third_party/blink/tools/blinkpy/tool/blink_tool.py
+++ b/third_party/blink/tools/blinkpy/tool/blink_tool.py
@@ -26,7 +26,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """blink_tool.py is a tool with multiple sub-commands with different purposes.
 
 It has commands for printing expectations, fetching new test baselines, etc.
@@ -52,7 +51,6 @@
 from blinkpy.tool.commands.rebaseline_cl import RebaselineCL
 from blinkpy.tool.commands.rebaseline_test import RebaselineTest
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -62,10 +60,17 @@
 
     global_options = [
         optparse.make_option(
-            '-v', '--verbose', action='store_true', dest='verbose', default=False,
+            '-v',
+            '--verbose',
+            action='store_true',
+            dest='verbose',
+            default=False,
             help='enable all logging'),
         optparse.make_option(
-            '-d', '--directory', action='append', default=[],
+            '-d',
+            '--directory',
+            action='append',
+            default=[],
             help='Directory to look at for changed files'),
     ]
 
@@ -125,7 +130,10 @@
     def _create_option_parser(self):
         usage = 'Usage: %prog [options] COMMAND [ARGS]'
         name = optparse.OptionParser().get_prog_name()
-        return HelpPrintingOptionParser(epilog_method=self.help_command.help_epilog, prog=name, usage=usage)
+        return HelpPrintingOptionParser(
+            epilog_method=self.help_command.help_epilog,
+            prog=name,
+            usage=usage)
 
     def _add_global_options(self, option_parser):
         global_options = self.global_options or []
diff --git a/third_party/blink/tools/blinkpy/tool/blink_tool_unittest.py b/third_party/blink/tools/blinkpy/tool/blink_tool_unittest.py
index 5420d3d..b85ae5c4 100644
--- a/third_party/blink/tools/blinkpy/tool/blink_tool_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/blink_tool_unittest.py
@@ -9,16 +9,15 @@
 
 
 class BlinkToolTest(unittest.TestCase):
-
     def test_split_args_basic(self):
         self.assertEqual(
-            BlinkTool._split_command_name_from_args(['--global-option', 'command', '--option', 'arg']),
+            BlinkTool._split_command_name_from_args(
+                ['--global-option', 'command', '--option', 'arg']),
             ('command', ['--global-option', '--option', 'arg']))
 
     def test_split_args_empty(self):
         self.assertEqual(
-            BlinkTool._split_command_name_from_args([]),
-            (None, []))
+            BlinkTool._split_command_name_from_args([]), (None, []))
 
     def test_split_args_with_no_options(self):
         self.assertEqual(
diff --git a/third_party/blink/tools/blinkpy/tool/commands/abstract_local_server_command.py b/third_party/blink/tools/blinkpy/tool/commands/abstract_local_server_command.py
index 1def9494..5f0afff 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/abstract_local_server_command.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/abstract_local_server_command.py
@@ -34,9 +34,18 @@
 
     def __init__(self):
         options = [
-            make_option('--httpd-port', action='store', type='int', default=8127, help='Port to use for the HTTP server'),
-            make_option('--no-show-results', action='store_false', default=True, dest='show_results',
-                        help="Don't launch a browser with the rebaseline server"),
+            make_option(
+                '--httpd-port',
+                action='store',
+                type='int',
+                default=8127,
+                help='Port to use for the HTTP server'),
+            make_option(
+                '--no-show-results',
+                action='store_false',
+                default=True,
+                dest='show_results',
+                help="Don't launch a browser with the rebaseline server"),
         ]
         super(AbstractLocalServerCommand, self).__init__(options=options)
 
@@ -46,13 +55,15 @@
     def execute(self, options, args, tool):
         config = self._prepare_config(options, args, tool)
 
-        server_url = 'http://localhost:%d%s' % (options.httpd_port, self.launch_path)
+        server_url = 'http://localhost:%d%s' % (options.httpd_port,
+                                                self.launch_path)
         print 'Starting server at %s' % server_url
         print "Use the 'Exit' link in the UI, %squitquitquit or Ctrl-C to stop" % server_url
 
         if options.show_results:
             # FIXME: This seems racy.
-            threading.Timer(0.1, lambda: tool.user.open_url(server_url)).start()
+            threading.Timer(0.1,
+                            lambda: tool.user.open_url(server_url)).start()
 
         httpd = self.server(httpd_port=options.httpd_port, config=config)  # pylint: disable=not-callable
         httpd.serve_forever()
diff --git a/third_party/blink/tools/blinkpy/tool/commands/analyze_baselines.py b/third_party/blink/tools/blinkpy/tool/commands/analyze_baselines.py
index c519d9c..96d069b 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/analyze_baselines.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/analyze_baselines.py
@@ -44,7 +44,11 @@
     def __init__(self):
         super(AnalyzeBaselines, self).__init__(options=[
             self.suffixes_option,
-            optparse.make_option('--missing', action='store_true', default=False, help='Show missing baselines as well.'),
+            optparse.make_option(
+                '--missing',
+                action='store_true',
+                default=False,
+                help='Show missing baselines as well.'),
         ] + self.platform_options)
         self._optimizer_class = BaselineOptimizer  # overridable for testing
         self._baseline_optimizer = None
@@ -58,11 +62,14 @@
         # TODO(robertma): Investigate changing the CLI to take extensions with leading '.'.
         for suffix in self._baseline_suffix_list:
             extension = '.' + suffix
-            name = self._port.output_filename(test_name, self._port.BASELINE_SUFFIX, extension)
-            results_by_directory = self._baseline_optimizer.read_results_by_directory(name)
+            name = self._port.output_filename(
+                test_name, self._port.BASELINE_SUFFIX, extension)
+            results_by_directory = self._baseline_optimizer.read_results_by_directory(
+                name)
             if results_by_directory:
                 self._write('%s:' % name)
-                self._baseline_optimizer.write_by_directory(results_by_directory, self._write, '  ')
+                self._baseline_optimizer.write_by_directory(
+                    results_by_directory, self._write, '  ')
             elif options.missing:
                 self._write('%s: (no baselines found)' % name)
 
@@ -74,6 +81,7 @@
             _log.error("No port names match '%s'", options.platform)
             return
         self._port = tool.port_factory.get(port_names[0])
-        self._baseline_optimizer = self._optimizer_class(tool, self._port, port_names)
+        self._baseline_optimizer = self._optimizer_class(
+            tool, self._port, port_names)
         for test_name in self._port.tests(args):
             self._analyze_baseline(options, test_name)
diff --git a/third_party/blink/tools/blinkpy/tool/commands/analyze_baselines_unittest.py b/third_party/blink/tools/blinkpy/tool/commands/analyze_baselines_unittest.py
index 08c0b3f..aa7b9fd 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/analyze_baselines_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/analyze_baselines_unittest.py
@@ -10,7 +10,6 @@
 
 
 class _FakeOptimizer(BaselineOptimizer):
-
     def read_results_by_directory(self, baseline_name):
         if baseline_name.endswith('txt'):
             return {'web_tests/passes/text.html': '123456'}
@@ -23,27 +22,26 @@
     def setUp(self):
         super(TestAnalyzeBaselines, self).setUp()
         self.port = self.tool.port_factory.get('test')
-        self.tool.port_factory.get = (lambda port_name=None, options=None: self.port)
+        self.tool.port_factory.get = (
+            lambda port_name=None, options=None: self.port)
         self.lines = []
         self.command._optimizer_class = _FakeOptimizer
         self.command._write = (lambda msg: self.lines.append(msg))
 
     def test_default(self):
-        self.command.execute(optparse.Values(dict(suffixes='txt', missing=False, platform=None)), ['passes/text.html'], self.tool)
+        self.command.execute(
+            optparse.Values(
+                dict(suffixes='txt', missing=False, platform=None)),
+            ['passes/text.html'], self.tool)
         self.assertEqual(self.lines,
-                         ['passes/text-expected.txt:',
-                          '  (generic): 123456'])
+                         ['passes/text-expected.txt:', '  (generic): 123456'])
 
     def test_missing_baselines(self):
         self.command.execute(
             optparse.Values(
-                dict(
-                    suffixes='png,txt',
-                    missing=True,
-                    platform=None)),
-            ['passes/text.html'],
-            self.tool)
-        self.assertEqual(self.lines,
-                         ['passes/text-expected.png: (no baselines found)',
-                          'passes/text-expected.txt:',
-                          '  (generic): 123456'])
+                dict(suffixes='png,txt', missing=True, platform=None)),
+            ['passes/text.html'], self.tool)
+        self.assertEqual(self.lines, [
+            'passes/text-expected.png: (no baselines found)',
+            'passes/text-expected.txt:', '  (generic): 123456'
+        ])
diff --git a/third_party/blink/tools/blinkpy/tool/commands/command.py b/third_party/blink/tools/blinkpy/tool/commands/command.py
index 4a58648..f184d68 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/command.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/command.py
@@ -44,7 +44,8 @@
     long_help = None
 
     def __init__(self, options=None, requires_local_commits=False):
-        self.required_arguments = self._parse_required_arguments(self.argument_names)
+        self.required_arguments = self._parse_required_arguments(
+            self.argument_names)
         self.options = options
         self.requires_local_commits = requires_local_commits
         # option_parser can be overridden by the tool using set_option_parser
@@ -80,8 +81,9 @@
                 # For now our parser is rather dumb.  Do some minimal validation that
                 # we haven't confused it.
                 if argument[-1] != ']':
-                    raise Exception('Failure to parse argument string %s.  Argument %s is missing ending ]' %
-                                    (argument_names, argument))
+                    raise Exception(
+                        'Failure to parse argument string %s.  Argument %s is missing ending ]'
+                        % (argument_names, argument))
             else:
                 required_args.append(argument)
         return required_args
@@ -99,21 +101,21 @@
 
     def check_arguments_and_execute(self, options, args, tool=None):
         if len(args) < len(self.required_arguments):
-            _log.error("%s required, %s provided.  Provided: %s  Required: %s\nSee '%s help %s' for usage.",
-                       pluralize('argument', len(self.required_arguments)),
-                       pluralize('argument', len(args)),
-                       "'%s'" % ' '.join(args),
-                       ' '.join(self.required_arguments),
-                       tool.name(),
-                       self.name)
+            _log.error(
+                "%s required, %s provided.  Provided: %s  Required: %s\nSee '%s help %s' for usage.",
+                pluralize('argument', len(self.required_arguments)),
+                pluralize('argument', len(args)), "'%s'" % ' '.join(args),
+                ' '.join(self.required_arguments), tool.name(), self.name)
             return 1
         return self.execute(options, args, tool) or 0
 
     def standalone_help(self):
-        help_text = self.name_with_arguments().ljust(len(self.name_with_arguments()) + 3) + self.help_text + '\n\n'
+        help_text = self.name_with_arguments().ljust(
+            len(self.name_with_arguments()) + 3) + self.help_text + '\n\n'
         if self.long_help:
             help_text += '%s\n\n' % self.long_help
-        help_text += self.option_parser.format_option_help(optparse.IndentedHelpFormatter())
+        help_text += self.option_parser.format_option_help(
+            optparse.IndentedHelpFormatter())
         return help_text
 
     def execute(self, options, args, tool):
@@ -128,7 +130,6 @@
 
 
 class HelpPrintingOptionParser(optparse.OptionParser):
-
     def __init__(self, epilog_method=None, *args, **kwargs):
         self.epilog_method = epilog_method
         optparse.OptionParser.__init__(self, *args, **kwargs)
@@ -137,7 +138,8 @@
         self.print_usage(sys.stderr)
         error_message = '%s: error: %s\n' % (self.get_prog_name(), msg)
         # This method is overridden to add this one line to the output:
-        error_message += '\nType \'%s --help\' to see usage.\n' % self.get_prog_name()
+        error_message += '\nType \'%s --help\' to see usage.\n' % \
+            self.get_prog_name()
         self.exit(1, error_message)
 
     # We override format_epilog to avoid the default formatting which would paragraph-wrap the epilog
diff --git a/third_party/blink/tools/blinkpy/tool/commands/command_test.py b/third_party/blink/tools/blinkpy/tool/commands/command_test.py
index bcdb755..19d1fd5 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/command_test.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/command_test.py
@@ -34,10 +34,15 @@
 
 
 class CommandsTest(unittest.TestCase):
-
-    def assert_execute_outputs(
-            self, command, args=None, expected_stdout='', expected_stderr='',
-            expected_exception=None, expected_logs=None, options=optparse.Values(), tool=MockBlinkTool()):
+    def assert_execute_outputs(self,
+                               command,
+                               args=None,
+                               expected_stdout='',
+                               expected_stderr='',
+                               expected_exception=None,
+                               expected_logs=None,
+                               options=optparse.Values(),
+                               tool=MockBlinkTool()):
         args = args or []
         options.blocks = None
         options.cc = 'MOCK cc'
@@ -52,5 +57,9 @@
         options.quiet = True
         options.reviewer = 'MOCK reviewer'
         OutputCapture().assert_outputs(
-            self, command.execute, [options, args, tool], expected_stdout=expected_stdout,
-            expected_stderr=expected_stderr, expected_exception=expected_exception, expected_logs=expected_logs)
+            self,
+            command.execute, [options, args, tool],
+            expected_stdout=expected_stdout,
+            expected_stderr=expected_stderr,
+            expected_exception=expected_exception,
+            expected_logs=expected_logs)
diff --git a/third_party/blink/tools/blinkpy/tool/commands/command_unittest.py b/third_party/blink/tools/blinkpy/tool/commands/command_unittest.py
index 44703f1a..f1c4ee3 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/command_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/command_unittest.py
@@ -52,10 +52,10 @@
 
 
 class CommandTest(unittest.TestCase):
-
     def test_name_with_arguments_with_two_args(self):
         class TrivialCommandWithArgs(TrivialCommand):
             argument_names = "ARG1 ARG2"
+
         command = TrivialCommandWithArgs()
         self.assertEqual(command.name_with_arguments(), "trivial ARG1 ARG2")
 
@@ -65,9 +65,12 @@
 
     def test_parse_required_arguments(self):
         # Unit test for protected method - pylint: disable=protected-access
-        self.assertEqual(Command._parse_required_arguments("ARG1 ARG2"), ["ARG1", "ARG2"])
-        self.assertEqual(Command._parse_required_arguments("[ARG1] [ARG2]"), [])
-        self.assertEqual(Command._parse_required_arguments("[ARG1] ARG2"), ["ARG2"])
+        self.assertEqual(
+            Command._parse_required_arguments("ARG1 ARG2"), ["ARG1", "ARG2"])
+        self.assertEqual(
+            Command._parse_required_arguments("[ARG1] [ARG2]"), [])
+        self.assertEqual(
+            Command._parse_required_arguments("[ARG1] ARG2"), ["ARG2"])
         # Note: We might make our arg parsing smarter in the future and allow this type of arguments string.
         with self.assertRaises(Exception):
             Command._parse_required_arguments("[ARG1 ARG2]")
@@ -75,9 +78,14 @@
     def test_required_arguments(self):
         class TrivialCommandWithRequiredAndOptionalArgs(TrivialCommand):
             argument_names = "ARG1 ARG2 [ARG3]"
+
         two_required_arguments = TrivialCommandWithRequiredAndOptionalArgs()
-        expected_logs = ("2 arguments required, 1 argument provided.  Provided: 'foo'  Required: ARG1 ARG2\n"
-                         "See 'dummy-tool help trivial' for usage.\n")
-        exit_code = OutputCapture().assert_outputs(self, two_required_arguments.check_arguments_and_execute,
-                                                   [None, ["foo"], DummyTool()], expected_logs=expected_logs)
+        expected_logs = (
+            "2 arguments required, 1 argument provided.  Provided: 'foo'  Required: ARG1 ARG2\n"
+            "See 'dummy-tool help trivial' for usage.\n")
+        exit_code = OutputCapture().assert_outputs(
+            self,
+            two_required_arguments.check_arguments_and_execute,
+            [None, ["foo"], DummyTool()],
+            expected_logs=expected_logs)
         self.assertEqual(exit_code, 1)
diff --git a/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines.py b/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines.py
index 5b034a9..a6339124 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines.py
@@ -34,9 +34,12 @@
 
     def _copy_existing_baseline(self, port_name, test_name, suffix):
         """Copies the baseline for the given builder to all "predecessor" directories."""
-        baseline_directory = self._tool.port_factory.get(port_name).baseline_version_dir()
-        ports = [self._port_for_primary_baseline(baseline)
-                 for baseline in self._immediate_predecessors_in_fallback(baseline_directory)]
+        baseline_directory = self._tool.port_factory.get(
+            port_name).baseline_version_dir()
+        ports = [
+            self._port_for_primary_baseline(baseline) for baseline in self.
+            _immediate_predecessors_in_fallback(baseline_directory)
+        ]
 
         old_baselines = []
         new_baselines = []
@@ -53,11 +56,13 @@
                 port.baseline_version_dir(),
                 self._file_name_for_expected_result(test_name, suffix))
             if self._tool.filesystem.exists(new_baseline):
-                _log.debug('Existing baseline at %s, not copying over it.', new_baseline)
+                _log.debug('Existing baseline at %s, not copying over it.',
+                           new_baseline)
                 continue
 
             full_expectations = TestExpectations(port)
-            if ResultType.Skip in full_expectations.get_expectations(test_name).results:
+            if ResultType.Skip in full_expectations.get_expectations(
+                    test_name).results:
                 _log.debug('%s is skipped on %s.', test_name, port.name())
                 continue
             if port.skipped_due_to_smoke_tests(test_name):
@@ -71,16 +76,23 @@
             old_baseline = old_baselines[i]
             new_baseline = new_baselines[i]
 
-            _log.debug('Copying baseline from %s to %s.', old_baseline, new_baseline)
-            self._tool.filesystem.maybe_make_directory(self._tool.filesystem.dirname(new_baseline))
+            _log.debug('Copying baseline from %s to %s.', old_baseline,
+                       new_baseline)
+            self._tool.filesystem.maybe_make_directory(
+                self._tool.filesystem.dirname(new_baseline))
             self._tool.filesystem.copyfile(old_baseline, new_baseline)
 
     def _port_for_primary_baseline(self, baseline):
         """Returns a Port object for the given baseline directory base name."""
-        for port in [self._tool.port_factory.get(port_name) for port_name in self._tool.port_factory.all_port_names()]:
-            if self._tool.filesystem.basename(port.baseline_version_dir()) == baseline:
+        for port in [
+                self._tool.port_factory.get(port_name)
+                for port_name in self._tool.port_factory.all_port_names()
+        ]:
+            if self._tool.filesystem.basename(
+                    port.baseline_version_dir()) == baseline:
                 return port
-        raise Exception('Failed to find port for primary baseline %s.' % baseline)
+        raise Exception(
+            'Failed to find port for primary baseline %s.' % baseline)
 
     @memoized
     def _immediate_predecessors_in_fallback(self, path_to_rebaseline):
@@ -115,7 +127,9 @@
             try:
                 index = baseline_search_path.index(path_to_rebaseline)
                 if index:
-                    immediate_predecessors.append(self._tool.filesystem.basename(baseline_search_path[index - 1]))
+                    immediate_predecessors.append(
+                        self._tool.filesystem.basename(
+                            baseline_search_path[index - 1]))
             except ValueError:
                 # baseline_search_path.index() throws a ValueError if the item isn't in the list.
                 pass
diff --git a/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines_unittest.py b/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines_unittest.py
index 897c74f..890bdd0 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/copy_existing_baselines_unittest.py
@@ -23,7 +23,8 @@
 
     def baseline_path(self, path_from_web_test_dir):
         port = self.tool.port_factory.get()
-        return self.tool.filesystem.join(port.web_tests_dir(), path_from_web_test_dir)
+        return self.tool.filesystem.join(port.web_tests_dir(),
+                                         path_from_web_test_dir)
 
     # The tests in this class all depend on the fall-back path graph
     # that is set up in |TestPort.FALLBACK_PATHS|.
@@ -33,61 +34,94 @@
         # baseline directory because test-mac-mac10.10 is the "immediate
         # predecessor" in the fall-back graph.
         self._write(
-            self.baseline_path('platform/test-mac-mac10.11/failures/expected/image-expected.txt'),
-            'original test-mac-mac10.11 result')
-        self.assertFalse(self.tool.filesystem.exists(
-            self.baseline_path('platform/test-mac-mac10.10/failures/expected/image-expected.txt')))
+            self.baseline_path(
+                'platform/test-mac-mac10.11/failures/expected/image-expected.txt'
+            ), 'original test-mac-mac10.11 result')
+        self.assertFalse(
+            self.tool.filesystem.exists(
+                self.baseline_path(
+                    'platform/test-mac-mac10.10/failures/expected/image-expected.txt'
+                )))
 
-        self.command.execute(self.options(port_name='test-mac-mac10.11', test='failures/expected/image.html'), [], self.tool)
+        self.command.execute(
+            self.options(
+                port_name='test-mac-mac10.11',
+                test='failures/expected/image.html'), [], self.tool)
 
         self.assertEqual(
-            self._read(self.baseline_path('platform/test-mac-mac10.11/failures/expected/image-expected.txt')),
-            'original test-mac-mac10.11 result')
+            self._read(
+                self.baseline_path(
+                    'platform/test-mac-mac10.11/failures/expected/image-expected.txt'
+                )), 'original test-mac-mac10.11 result')
         self.assertEqual(
-            self._read(self.baseline_path('platform/test-mac-mac10.10/failures/expected/image-expected.txt')),
-            'original test-mac-mac10.11 result')
+            self._read(
+                self.baseline_path(
+                    'platform/test-mac-mac10.10/failures/expected/image-expected.txt'
+                )), 'original test-mac-mac10.11 result')
 
     def test_copy_baseline_to_multiple_immediate_predecessors(self):
         # The test-win-win10 baseline is copied over to the test-linux-trusty
         # and test-win-win7 baseline paths, since both of these are "immediate
         # predecessors".
         self._write(
-            self.baseline_path('platform/test-win-win10/failures/expected/image-expected.txt'),
-            'original test-win-win10 result')
-        self.assertFalse(self.tool.filesystem.exists(
-            self.baseline_path('platform/test-linux-trusty/failures/expected/image-expected.txt')))
+            self.baseline_path(
+                'platform/test-win-win10/failures/expected/image-expected.txt'
+            ), 'original test-win-win10 result')
+        self.assertFalse(
+            self.tool.filesystem.exists(
+                self.baseline_path(
+                    'platform/test-linux-trusty/failures/expected/image-expected.txt'
+                )))
 
-        self.command.execute(self.options(port_name='test-win-win10', test='failures/expected/image.html'), [], self.tool)
+        self.command.execute(
+            self.options(
+                port_name='test-win-win10',
+                test='failures/expected/image.html'), [], self.tool)
 
         self.assertEqual(
-            self._read(self.baseline_path('platform/test-win-win10/failures/expected/image-expected.txt')),
-            'original test-win-win10 result')
+            self._read(
+                self.baseline_path(
+                    'platform/test-win-win10/failures/expected/image-expected.txt'
+                )), 'original test-win-win10 result')
         self.assertEqual(
-            self._read(self.baseline_path('platform/test-linux-trusty/failures/expected/image-expected.txt')),
-            'original test-win-win10 result')
+            self._read(
+                self.baseline_path(
+                    'platform/test-linux-trusty/failures/expected/image-expected.txt'
+                )), 'original test-win-win10 result')
         self.assertEqual(
-            self._read(self.baseline_path('platform/test-linux-trusty/failures/expected/image-expected.txt')),
-            'original test-win-win10 result')
+            self._read(
+                self.baseline_path(
+                    'platform/test-linux-trusty/failures/expected/image-expected.txt'
+                )), 'original test-win-win10 result')
 
     def test_no_copy_existing_baseline(self):
         # If a baseline exists already for an "immediate predecessor" baseline
         # directory, (e.g. test-linux-trusty), then no "immediate successor"
         # baselines (e.g. test-win-win10) are copied over.
         self._write(
-            self.baseline_path('platform/test-win-win10/failures/expected/image-expected.txt'),
-            'original test-win-win10 result')
+            self.baseline_path(
+                'platform/test-win-win10/failures/expected/image-expected.txt'
+            ), 'original test-win-win10 result')
         self._write(
-            self.baseline_path('platform/test-linux-trusty/failures/expected/image-expected.txt'),
-            'original test-linux-trusty result')
+            self.baseline_path(
+                'platform/test-linux-trusty/failures/expected/image-expected.txt'
+            ), 'original test-linux-trusty result')
 
-        self.command.execute(self.options(port_name='test-win-win10', test='failures/expected/image.html'), [], self.tool)
+        self.command.execute(
+            self.options(
+                port_name='test-win-win10',
+                test='failures/expected/image.html'), [], self.tool)
 
         self.assertEqual(
-            self._read(self.baseline_path('platform/test-win-win10/failures/expected/image-expected.txt')),
-            'original test-win-win10 result')
+            self._read(
+                self.baseline_path(
+                    'platform/test-win-win10/failures/expected/image-expected.txt'
+                )), 'original test-win-win10 result')
         self.assertEqual(
-            self._read(self.baseline_path('platform/test-linux-trusty/failures/expected/image-expected.txt')),
-            'original test-linux-trusty result')
+            self._read(
+                self.baseline_path(
+                    'platform/test-linux-trusty/failures/expected/image-expected.txt'
+                )), 'original test-linux-trusty result')
 
     def test_no_copy_skipped_test(self):
         # If a test is skipped on some platform, no baselines are copied over
@@ -95,24 +129,34 @@
         # so the test-win-win10 baseline is not copied over.
         port = self.tool.port_factory.get('test-win-win10')
         self._write(
-            self.baseline_path('platform/test-win-win10/failures/expected/image-expected.txt'),
-            'original test-win-win10 result')
-        self._write(
-            port.path_to_generic_test_expectations_file(),
-            ('# tags: [ Win Linux ]\n'
-             '# results: [ Failure Skip ]\n'
-             '[ Win ] failures/expected/image.html [ Failure ]\n'
-             '[ Linux ] failures/expected/image.html [ Skip ]\n'))
+            self.baseline_path(
+                'platform/test-win-win10/failures/expected/image-expected.txt'
+            ), 'original test-win-win10 result')
+        self._write(port.path_to_generic_test_expectations_file(),
+                    ('# tags: [ Win Linux ]\n'
+                     '# results: [ Failure Skip ]\n'
+                     '[ Win ] failures/expected/image.html [ Failure ]\n'
+                     '[ Linux ] failures/expected/image.html [ Skip ]\n'))
 
-        self.command.execute(self.options(port_name='test-win-win10', test='failures/expected/image.html'), [], self.tool)
+        self.command.execute(
+            self.options(
+                port_name='test-win-win10',
+                test='failures/expected/image.html'), [], self.tool)
 
         self.assertFalse(
-            self.tool.filesystem.exists(self.baseline_path('platform/test-linux-trusty/failures/expected/image-expected.txt')))
+            self.tool.filesystem.exists(
+                self.baseline_path(
+                    'platform/test-linux-trusty/failures/expected/image-expected.txt'
+                )))
 
     def test_port_for_primary_baseline(self):
         # Testing a protected method - pylint: disable=protected-access
-        self.assertEqual(self.command._port_for_primary_baseline('test-linux-trusty').name(), 'test-linux-trusty')
-        self.assertEqual(self.command._port_for_primary_baseline('test-mac-mac10.11').name(), 'test-mac-mac10.11')
+        self.assertEqual(
+            self.command._port_for_primary_baseline('test-linux-trusty').
+            name(), 'test-linux-trusty')
+        self.assertEqual(
+            self.command._port_for_primary_baseline('test-mac-mac10.11').
+            name(), 'test-mac-mac10.11')
 
     def test_port_for_primary_baseline_not_found(self):
         # Testing a protected method - pylint: disable=protected-access
diff --git a/third_party/blink/tools/blinkpy/tool/commands/flaky_tests.py b/third_party/blink/tools/blinkpy/tool/commands/flaky_tests.py
index cb1ffb49..4905ff1 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/flaky_tests.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/flaky_tests.py
@@ -86,30 +86,40 @@
             # TODO(ojan): We should also skip bots that haven't uploaded recently,
             # e.g. if they're >24h stale.
             if not expectations:
-                _log.error("Can't load flakiness data for builder: %s", builder_name)
+                _log.error("Can't load flakiness data for builder: %s",
+                           builder_name)
                 continue
 
-            for line in expectations.expectation_lines(only_ignore_very_flaky=True):
+            for line in expectations.expectation_lines(
+                    only_ignore_very_flaky=True):
                 # TODO(ojan): Find a way to merge specifiers instead of removing build types.
                 # We can't just union because some specifiers will change the meaning of others.
                 # For example, it's not clear how to merge [ Mac Release ] with [ Linux Debug ].
                 # But, in theory we should be able to merge [ Mac Release ] and [ Mac Debug ].
                 tags = self._filter_build_type_specifiers(line.tags)
-                exps.append(Expectation(tags=tags, results=line.results, test=line.test))
+                exps.append(
+                    Expectation(
+                        tags=tags, results=line.results, test=line.test))
         return exps
 
     def execute(self, options, args, tool):
         factory = self.expectations_factory(tool.builders)
-        lines = self._collect_expectation_lines(tool.builders.all_continuous_builder_names(), factory)
+        lines = self._collect_expectation_lines(
+            tool.builders.all_continuous_builder_names(), factory)
         lines.sort(key=lambda line: line.test)
 
         port = tool.port_factory.get()
         # Skip any tests which are mentioned in the dashboard but not in our checkout:
         fs = tool.filesystem
-        lines = [line for line in lines if fs.exists(fs.join(port.web_tests_dir(), line.test))]
+        lines = [
+            line for line in lines
+            if fs.exists(fs.join(port.web_tests_dir(), line.test))
+        ]
 
         test_names = [line.test for line in lines]
-        flakiness_dashboard_url = self.FLAKINESS_DASHBOARD_URL % ','.join(test_names)
+        flakiness_dashboard_url = self.FLAKINESS_DASHBOARD_URL % \
+            ','.join(test_names)
         expectations_string = '\n'.join(line.to_string() for line in lines)
 
-        print self.OUTPUT % (self.HEADER, expectations_string, flakiness_dashboard_url)
+        print self.OUTPUT % (self.HEADER, expectations_string,
+                             flakiness_dashboard_url)
diff --git a/third_party/blink/tools/blinkpy/tool/commands/flaky_tests_unittest.py b/third_party/blink/tools/blinkpy/tool/commands/flaky_tests_unittest.py
index e754658..f21be8a 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/flaky_tests_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/flaky_tests_unittest.py
@@ -12,59 +12,82 @@
 
 
 class FakeBotTestExpectations(object):
-
     def expectation_lines(self):
         return []
 
 
 class FakeBotTestExpectationsFactory(object):
-    FAILURE_MAP = {'C': 'CRASH', 'F': 'FAIL', 'N': 'NO DATA', 'P': 'PASS', 'T': 'TIMEOUT',
-                   'Y': 'NOTRUN', 'X': 'SKIP', 'K': 'LEAK'}
+    FAILURE_MAP = {
+        'C': 'CRASH',
+        'F': 'FAIL',
+        'N': 'NO DATA',
+        'P': 'PASS',
+        'T': 'TIMEOUT',
+        'Y': 'NOTRUN',
+        'X': 'SKIP',
+        'K': 'LEAK'
+    }
 
     def __init__(self, builders):
         self.builders = builders
 
     def _expectations_from_test_data(self, builder, test_data):
-        test_data[bot_test_expectations.ResultsJSON.FAILURE_MAP_KEY] = self.FAILURE_MAP
+        test_data[bot_test_expectations.ResultsJSON.
+                  FAILURE_MAP_KEY] = self.FAILURE_MAP
         json_dict = {
             builder: test_data,
         }
         results = bot_test_expectations.ResultsJSON(builder, json_dict)
         return bot_test_expectations.BotTestExpectations(
-            results, self.builders, self.builders.specifiers_for_builder(builder))
+            results, self.builders,
+            self.builders.specifiers_for_builder(builder))
 
     def expectations_for_builder(self, builder):
         if builder == 'foo-builder':
-            return self._expectations_from_test_data(builder, {
-                'tests': {
-                    'pass.html': {'results': [[2, 'FFFP']], 'expected': 'PASS'},
-                }
-            })
+            return self._expectations_from_test_data(
+                builder, {
+                    'tests': {
+                        'pass.html': {
+                            'results': [[2, 'FFFP']],
+                            'expected': 'PASS'
+                        },
+                    }
+                })
 
         if builder == 'bar-builder':
-            return self._expectations_from_test_data(builder, {
-                'tests': {
-                    'pass.html': {'results': [[2, 'TTTP']], 'expected': 'PASS'},
-                }
-            })
+            return self._expectations_from_test_data(
+                builder, {
+                    'tests': {
+                        'pass.html': {
+                            'results': [[2, 'TTTP']],
+                            'expected': 'PASS'
+                        },
+                    }
+                })
 
         return FakeBotTestExpectations()
 
 
 class FlakyTestsTest(CommandsTest):
-
     @staticmethod
     def fake_builders_list():
         return BuilderList({
-            'foo-builder': {'port_name': 'dummy-port', 'specifiers': ['Linux', 'Release']},
-            'bar-builder': {'port_name': 'dummy-port', 'specifiers': ['Mac', 'Debug']},
+            'foo-builder': {
+                'port_name': 'dummy-port',
+                'specifiers': ['Linux', 'Release']
+            },
+            'bar-builder': {
+                'port_name': 'dummy-port',
+                'specifiers': ['Mac', 'Debug']
+            },
         })
 
     def test_merge_lines(self):
         command = flaky_tests.FlakyTests()
         factory = FakeBotTestExpectationsFactory(self.fake_builders_list())
 
-        lines = command._collect_expectation_lines(['foo-builder', 'bar-builder'], factory)
+        lines = command._collect_expectation_lines(
+            ['foo-builder', 'bar-builder'], factory)
         self.assertEqual(len(lines), 2)
         self.assertEqual(lines[0].results, set(['FAIL', 'PASS']))
         self.assertEqual(set(lines[0].tags), set(['Linux']))
@@ -78,8 +101,11 @@
         command.expectations_factory = FakeBotTestExpectationsFactory
         options = optparse.Values({'upload': True})
         expected_stdout = flaky_tests.FlakyTests.OUTPUT % (
-            flaky_tests.FlakyTests.HEADER,
-            '',
+            flaky_tests.FlakyTests.HEADER, '',
             flaky_tests.FlakyTests.FLAKINESS_DASHBOARD_URL % '') + '\n'
 
-        self.assert_execute_outputs(command, options=options, tool=tool, expected_stdout=expected_stdout)
+        self.assert_execute_outputs(
+            command,
+            options=options,
+            tool=tool,
+            expected_stdout=expected_stdout)
diff --git a/third_party/blink/tools/blinkpy/tool/commands/help_command.py b/third_party/blink/tools/blinkpy/tool/commands/help_command.py
index 366b73b4..c711e75 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/help_command.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/help_command.py
@@ -58,15 +58,21 @@
             relevant_commands = self._tool.commands[:]
         else:
             epilog = 'Common %prog commands:\n'
-            relevant_commands = filter(self._tool.should_show_in_main_help, self._tool.commands)
-        longest_name_length = max(len(command.name) for command in relevant_commands)
+            relevant_commands = filter(self._tool.should_show_in_main_help,
+                                       self._tool.commands)
+        longest_name_length = max(
+            len(command.name) for command in relevant_commands)
         relevant_commands.sort(lambda a, b: cmp(a.name, b.name))
-        command_help_texts = ['   %s   %s\n' % (command.name.ljust(longest_name_length), command.help_text)
-                              for command in relevant_commands]
+        command_help_texts = [
+            '   %s   %s\n' % (command.name.ljust(longest_name_length),
+                              command.help_text)
+            for command in relevant_commands
+        ]
         epilog += '%s\n' % ''.join(command_help_texts)
         epilog += "See '%prog help --all-commands' to list all commands.\n"
         epilog += "See '%prog help COMMAND' for more information on a specific command.\n"
-        return epilog.replace('%prog', self._tool.name())  # Use of %prog here mimics OptionParser.expand_prog_name().
+        # Use of %prog here mimics OptionParser.expand_prog_name().
+        return epilog.replace('%prog', self._tool.name())
 
     # FIXME: This is a hack so that we don't show --all-commands as a global option:
     def _remove_help_options(self):
diff --git a/third_party/blink/tools/blinkpy/tool/commands/optimize_baselines.py b/third_party/blink/tools/blinkpy/tool/commands/optimize_baselines.py
index e8077a2f..cf96d1b 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/optimize_baselines.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/optimize_baselines.py
@@ -7,7 +7,6 @@
 from blinkpy.common.checkout.baseline_optimizer import BaselineOptimizer
 from blinkpy.tool.commands.rebaseline import AbstractRebaseliningCommand
 
-
 _log = logging.getLogger(__name__)
 
 
diff --git a/third_party/blink/tools/blinkpy/tool/commands/optimize_baselines_unittest.py b/third_party/blink/tools/blinkpy/tool/commands/optimize_baselines_unittest.py
index 6ddde1f..772aefe 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/optimize_baselines_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/optimize_baselines_unittest.py
@@ -20,26 +20,41 @@
 
     def test_optimize_all_suffixes_by_default(self):
         test_port = self.tool.port_factory.get('test')
-        self._write_test_file(test_port, 'another/test.html', 'Dummy test contents')
-        self._write_test_file(test_port, 'platform/test-mac-mac10.10/another/test-expected.txt', 'result A')
-        self._write_test_file(test_port, 'platform/test-mac-mac10.10/another/test-expected.png', 'result A png')
-        self._write_test_file(test_port, 'another/test-expected.txt', 'result A')
-        self._write_test_file(test_port, 'another/test-expected.png', 'result A png')
+        self._write_test_file(test_port, 'another/test.html',
+                              'Dummy test contents')
+        self._write_test_file(
+            test_port, 'platform/test-mac-mac10.10/another/test-expected.txt',
+            'result A')
+        self._write_test_file(
+            test_port, 'platform/test-mac-mac10.10/another/test-expected.png',
+            'result A png')
+        self._write_test_file(test_port, 'another/test-expected.txt',
+                              'result A')
+        self._write_test_file(test_port, 'another/test-expected.png',
+                              'result A png')
 
         self.command.execute(
-            optparse.Values({'suffixes': 'txt,wav,png', 'no_modify_git': True, 'platform': 'test-mac-mac10.10'}),
-            ['another/test.html'],
-            self.tool)
+            optparse.Values({
+                'suffixes': 'txt,wav,png',
+                'no_modify_git': True,
+                'platform': 'test-mac-mac10.10'
+            }), ['another/test.html'], self.tool)
 
         self.assertFalse(
-            self.tool.filesystem.exists(self.tool.filesystem.join(
-                test_port.web_tests_dir(), 'platform/mac/another/test-expected.txt')))
+            self.tool.filesystem.exists(
+                self.tool.filesystem.join(
+                    test_port.web_tests_dir(),
+                    'platform/mac/another/test-expected.txt')))
         self.assertFalse(
-            self.tool.filesystem.exists(self.tool.filesystem.join(
-                test_port.web_tests_dir(), 'platform/mac/another/test-expected.png')))
+            self.tool.filesystem.exists(
+                self.tool.filesystem.join(
+                    test_port.web_tests_dir(),
+                    'platform/mac/another/test-expected.png')))
         self.assertTrue(
-            self.tool.filesystem.exists(self.tool.filesystem.join(
-                test_port.web_tests_dir(), 'another/test-expected.txt')))
+            self.tool.filesystem.exists(
+                self.tool.filesystem.join(test_port.web_tests_dir(),
+                                          'another/test-expected.txt')))
         self.assertTrue(
-            self.tool.filesystem.exists(self.tool.filesystem.join(
-                test_port.web_tests_dir(), 'another/test-expected.png')))
+            self.tool.filesystem.exists(
+                self.tool.filesystem.join(test_port.web_tests_dir(),
+                                          'another/test-expected.png')))
diff --git a/third_party/blink/tools/blinkpy/tool/commands/pretty_diff.py b/third_party/blink/tools/blinkpy/tool/commands/pretty_diff.py
index 54c22121..1251692 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/pretty_diff.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/pretty_diff.py
@@ -36,7 +36,6 @@
 from blinkpy.common.system.executive import ScriptError
 from blinkpy.tool.commands.command import Command
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -47,9 +46,15 @@
 
     def __init__(self):
         options = [
-            optparse.make_option('-g', '--git-commit', action='store', dest='git_commit',
-                                 help=('Operate on a local commit. If a range, the commits are squashed into one. <ref>.... '
-                                       'includes the working copy changes. UPSTREAM can be used for the upstream/tracking branch.'))
+            optparse.make_option(
+                '-g',
+                '--git-commit',
+                action='store',
+                dest='git_commit',
+                help=
+                ('Operate on a local commit. If a range, the commits are squashed into one. <ref>.... '
+                 'includes the working copy changes. UPSTREAM can be used for the upstream/tracking branch.'
+                 ))
         ]
         super(PrettyDiff, self).__init__(options)
         self._tool = None
@@ -82,8 +87,8 @@
 
     def _diff(self, options):
         changed_files = self._tool.git().changed_files(options.git_commit)
-        return self._tool.git().create_patch(options.git_commit,
-                                             changed_files=changed_files)
+        return self._tool.git().create_patch(
+            options.git_commit, changed_files=changed_files)
 
     @staticmethod
     def _pretty_diff_file(diff):
diff --git a/third_party/blink/tools/blinkpy/tool/commands/queries.py b/third_party/blink/tools/blinkpy/tool/commands/queries.py
index 4dfde2e..465099e 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/queries.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/queries.py
@@ -63,19 +63,39 @@
 
     def __init__(self):
         options = [
-            make_option('--all', action='store_true', default=False,
-                        help='display the expectations for *all* tests'),
-            make_option('-x', '--exclude-keyword', action='append', default=[],
-                        help='limit to tests not matching the given keyword (for example, '
-                             '"skip", "slow", or "crash". May specify multiple times'),
-            make_option('-i', '--include-keyword', action='append', default=[],
-                        help='limit to tests with the given keyword (for example, "skip", '
-                             '"slow", or "crash". May specify multiple times'),
-            make_option('--csv', action='store_true', default=False,
-                        help='Print a CSV-style report that includes the port name, bugs, '
-                             'specifiers, tests, and expectations'),
-            make_option('--paths', action='store_true', default=False,
-                        help='display the paths for all applicable expectation files'),
+            make_option(
+                '--all',
+                action='store_true',
+                default=False,
+                help='display the expectations for *all* tests'),
+            make_option(
+                '-x',
+                '--exclude-keyword',
+                action='append',
+                default=[],
+                help=
+                'limit to tests not matching the given keyword (for example, '
+                '"skip", "slow", or "crash". May specify multiple times'),
+            make_option(
+                '-i',
+                '--include-keyword',
+                action='append',
+                default=[],
+                help=
+                'limit to tests with the given keyword (for example, "skip", '
+                '"slow", or "crash". May specify multiple times'),
+            make_option(
+                '--csv',
+                action='store_true',
+                default=False,
+                help=
+                'Print a CSV-style report that includes the port name, bugs, '
+                'specifiers, tests, and expectations'),
+            make_option(
+                '--paths',
+                action='store_true',
+                default=False,
+                help='display the paths for all applicable expectation files'),
         ] + platform_options(use_globs=True)
 
         super(PrintExpectations, self).__init__(options=options)
@@ -87,7 +107,8 @@
             return
 
         if options.platform:
-            port_names = fnmatch.filter(tool.port_factory.all_port_names(), options.platform)
+            port_names = fnmatch.filter(tool.port_factory.all_port_names(),
+                                        options.platform)
             if not port_names:
                 default_port = tool.port_factory.get(options.platform)
                 if default_port:
@@ -106,7 +127,8 @@
             web_tests_dir = default_port.web_tests_dir()
             for file in files:
                 if file.startswith(web_tests_dir):
-                    file = file.replace(web_tests_dir, WEB_TESTS_LAST_COMPONENT)
+                    file = file.replace(web_tests_dir,
+                                        WEB_TESTS_LAST_COMPONENT)
                 print file
             return
 
@@ -114,8 +136,12 @@
         for port_name in port_names:
             port = tool.port_factory.get(port_name, options)
             test_expectations = TestExpectations(port)
-            tests_to_print = self._filter_tests(options, test_expectations, tests)
-            lines = [test_expectations.get_expectations(test) for test in sorted(tests_to_print)]
+            tests_to_print = self._filter_tests(options, test_expectations,
+                                                tests)
+            lines = [
+                test_expectations.get_expectations(test)
+                for test in sorted(tests_to_print)
+            ]
             if port_name != port_names[0]:
                 print
             print '\n'.join(self._format_lines(options, port_name, lines))
@@ -124,7 +150,8 @@
     def _test_set_for_keyword(keyword, test_expectations, tests):
         filtered_tests = []
         for test in tests:
-            if keyword == 'SLOW' and test_expectations.get_expectations(test).is_slow_test:
+            if (keyword == 'SLOW'
+                    and test_expectations.get_expectations(test).is_slow_test):
                 filtered_tests.append(test)
             elif keyword in test_expectations.get_expectations(test).results:
                 filtered_tests.append(test)
@@ -134,18 +161,22 @@
         filtered_tests = set()
         if options.include_keyword:
             for keyword in options.include_keyword:
-                filtered_tests.update(self._test_set_for_keyword(keyword.upper(), test_expectations, tests))
+                filtered_tests.update(
+                    self._test_set_for_keyword(keyword.upper(),
+                                               test_expectations, tests))
         else:
             filtered_tests = tests
 
         for keyword in options.exclude_keyword:
-            filtered_tests.difference_update(self._test_set_for_keyword(keyword.upper(), test_expectations, tests))
+            filtered_tests.difference_update(
+                self._test_set_for_keyword(keyword.upper(), test_expectations,
+                                           tests))
         return filtered_tests
 
     @staticmethod
     def _to_csv(expectation):
-        return '%s,%s,%s,%s' % (
-            expectation.test, expectation.reason, ' '.join(expectation.tags), ' '.join(expectation.results))
+        return '%s,%s,%s,%s' % (expectation.test, expectation.reason, ' '.join(
+            expectation.tags), ' '.join(expectation.results))
 
     def _format_lines(self, options, port_name, lines):
         output = []
@@ -166,13 +197,23 @@
 
     def __init__(self):
         options = [
-            make_option('--all', action='store_true', default=False,
-                        help='display the baselines for *all* tests'),
-            make_option('--csv', action='store_true', default=False,
-                        help='Print a CSV-style report that includes the port name, test_name, '
-                             'test platform, baseline type, baseline location, and baseline platform'),
-            make_option('--include-virtual-tests', action='store_true',
-                        help='Include virtual tests'),
+            make_option(
+                '--all',
+                action='store_true',
+                default=False,
+                help='display the baselines for *all* tests'),
+            make_option(
+                '--csv',
+                action='store_true',
+                default=False,
+                help=
+                'Print a CSV-style report that includes the port name, test_name, '
+                'test platform, baseline type, baseline location, and baseline platform'
+            ),
+            make_option(
+                '--include-virtual-tests',
+                action='store_true',
+                help='Include virtual tests'),
         ] + platform_options(use_globs=True)
         super(PrintBaselines, self).__init__(options=options)
         self._platform_regexp = re.compile(r'platform/([^\/]+)/(.+)')
@@ -184,7 +225,8 @@
 
         default_port = tool.port_factory.get()
         if options.platform:
-            port_names = fnmatch.filter(tool.port_factory.all_port_names(), options.platform)
+            port_names = fnmatch.filter(tool.port_factory.all_port_names(),
+                                        options.platform)
             if not port_names:
                 print "No port names match '%s'" % options.platform
         else:
@@ -202,15 +244,20 @@
                 print '// For %s' % port_name
             port = tool.port_factory.get(port_name)
             for test_name in tests:
-                self._print_baselines(options, port_name, test_name, port.expected_baselines_by_extension(test_name))
+                self._print_baselines(
+                    options, port_name, test_name,
+                    port.expected_baselines_by_extension(test_name))
 
     def _print_baselines(self, options, port_name, test_name, baselines):
         for extension in sorted(baselines.keys()):
             baseline_location = baselines[extension]
             if baseline_location:
                 if options.csv:
-                    print '%s,%s,%s,%s,%s,%s' % (port_name, test_name, self._platform_for_path(test_name),
-                                                 extension[1:], baseline_location, self._platform_for_path(baseline_location))
+                    print '%s,%s,%s,%s,%s,%s' % (
+                        port_name, test_name,
+                        self._platform_for_path(test_name), extension[1:],
+                        baseline_location,
+                        self._platform_for_path(baseline_location))
                 else:
                     print baseline_location
 
diff --git a/third_party/blink/tools/blinkpy/tool/commands/queries_unittest.py b/third_party/blink/tools/blinkpy/tool/commands/queries_unittest.py
index da1e4e1..a4d0f74 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/queries_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/queries_unittest.py
@@ -37,11 +37,19 @@
 
 
 class PrintExpectationsTest(unittest.TestCase):
-
-    def run_test(self, tests, expected_stdout, platform='test-win-win7', **kwargs):
+    def run_test(self,
+                 tests,
+                 expected_stdout,
+                 platform='test-win-win7',
+                 **kwargs):
         options_defaults = {
-            'all': False, 'csv': False, 'full': False, 'platform': platform,
-            'include_keyword': [], 'exclude_keyword': [], 'paths': False,
+            'all': False,
+            'csv': False,
+            'full': False,
+            'platform': platform,
+            'include_keyword': [],
+            'exclude_keyword': [],
+            'paths': False,
         }
         options_defaults.update(kwargs)
         options = optparse.Values(dict(**options_defaults))
@@ -62,46 +70,52 @@
         self.assertMultiLineEqual(stdout, expected_stdout)
 
     def test_basic(self):
-        self.run_test(['failures/expected/text.html', 'failures/expected/timeout.html'],
-                      ('// For test-win-win7\n'
-                       'failures/expected/text.html [ Failure ]\n'
-                       'failures/expected/timeout.html [ Timeout ]\n'))
+        self.run_test(
+            ['failures/expected/text.html', 'failures/expected/timeout.html'],
+            ('// For test-win-win7\n'
+             'failures/expected/text.html [ Failure ]\n'
+             'failures/expected/timeout.html [ Timeout ]\n'))
 
     def test_multiple(self):
-        self.run_test(['failures/unexpected/*/text.html', 'failures/expected/timeout.html'],
-                      ('// For test-win-win10\n'
-                       'failures/expected/timeout.html [ Timeout ]\n'
-                       'failures/unexpected/\*/text.html [ Pass ]\n'
-                       '\n'
-                       '// For test-win-win7\n'
-                       'failures/expected/timeout.html [ Timeout ]\n'
-                       'failures/unexpected/\*/text.html [ Pass ]\n'),
+        self.run_test([
+            'failures/unexpected/*/text.html', 'failures/expected/timeout.html'
+        ], ('// For test-win-win10\n'
+            'failures/expected/timeout.html [ Timeout ]\n'
+            'failures/unexpected/\*/text.html [ Pass ]\n'
+            '\n'
+            '// For test-win-win7\n'
+            'failures/expected/timeout.html [ Timeout ]\n'
+            'failures/unexpected/\*/text.html [ Pass ]\n'),
                       platform='test-win-*')
 
     def test_full(self):
-        self.run_test(['failures/expected/text.html', 'failures/expected/timeout.html'],
-                      ('// For test-win-win7\n'
-                       'failures/expected/text.html [ Failure ]\n'
-                       'failures/expected/timeout.html [ Timeout ]\n'),
-                      full=True)
+        self.run_test(
+            ['failures/expected/text.html', 'failures/expected/timeout.html'],
+            ('// For test-win-win7\n'
+             'failures/expected/text.html [ Failure ]\n'
+             'failures/expected/timeout.html [ Timeout ]\n'),
+            full=True)
 
     def test_exclude(self):
-        self.run_test(['failures/expected/text.html', 'failures/expected/crash.html'],
-                      ('// For test-win-win7\n'
-                       'failures/expected/text.html [ Failure ]\n'),
-                      exclude_keyword=['crash'])
+        self.run_test(
+            ['failures/expected/text.html', 'failures/expected/crash.html'],
+            ('// For test-win-win7\n'
+             'failures/expected/text.html [ Failure ]\n'),
+            exclude_keyword=['crash'])
 
     def test_include(self):
-        self.run_test(['failures/expected/text.html', 'failures/expected/crash.html'],
-                      ('// For test-win-win7\n'
-                       'failures/expected/crash.html [ Crash ]\n'),
-                      include_keyword=['crash'])
+        self.run_test(
+            ['failures/expected/text.html', 'failures/expected/crash.html'],
+            ('// For test-win-win7\n'
+             'failures/expected/crash.html [ Crash ]\n'),
+            include_keyword=['crash'])
 
     def test_csv(self):
-        self.run_test(['failures/expected/text.html', 'failures/expected/image.html'],
-                      ('test-win-win7,failures/expected/image.html,,,FAIL\n'
-                       'test-win-win7,failures/expected/text.html,,,FAIL\n'),
-                      csv=True)
+        self.run_test(
+            ['failures/expected/text.html', 'failures/expected/image.html'],
+            ('test-win-win7,failures/expected/image.html,,,FAIL\n'
+             'test-win-win7,failures/expected/text.html,,,FAIL\n'),
+            csv=True)
 
     def test_paths(self):
         self.run_test([],
@@ -114,7 +128,6 @@
 
 
 class PrintBaselinesTest(unittest.TestCase):
-
     def setUp(self):
         self.oc = None
         self.tool = MockBlinkTool()
@@ -142,35 +155,49 @@
     def test_basic(self):
         command = PrintBaselines()
         self.capture_output()
-        options = optparse.Values({'all': False, 'include_virtual_tests': False, 'csv': False, 'platform': None})
+        options = optparse.Values({
+            'all': False,
+            'include_virtual_tests': False,
+            'csv': False,
+            'platform': None
+        })
         command.execute(options, ['passes/text.html'], self.tool)
         stdout, _, _ = self.restore_output()
-        self.assertMultiLineEqual(stdout,
-                                  ('// For test-win-win7\n'
-                                   'passes/text-expected.png\n'
-                                   'passes/text-expected.txt\n'))
+        self.assertMultiLineEqual(stdout, ('// For test-win-win7\n'
+                                           'passes/text-expected.png\n'
+                                           'passes/text-expected.txt\n'))
 
     def test_multiple(self):
         command = PrintBaselines()
         self.capture_output()
-        options = optparse.Values({'all': False, 'include_virtual_tests': False, 'csv': False, 'platform': 'test-win-*'})
+        options = optparse.Values({
+            'all': False,
+            'include_virtual_tests': False,
+            'csv': False,
+            'platform': 'test-win-*'
+        })
         command.execute(options, ['passes/text.html'], self.tool)
         stdout, _, _ = self.restore_output()
-        self.assertMultiLineEqual(stdout,
-                                  ('// For test-win-win10\n'
-                                   'passes/text-expected.png\n'
-                                   'passes/text-expected.txt\n'
-                                   '\n'
-                                   '// For test-win-win7\n'
-                                   'passes/text-expected.png\n'
-                                   'passes/text-expected.txt\n'))
+        self.assertMultiLineEqual(stdout, ('// For test-win-win10\n'
+                                           'passes/text-expected.png\n'
+                                           'passes/text-expected.txt\n'
+                                           '\n'
+                                           '// For test-win-win7\n'
+                                           'passes/text-expected.png\n'
+                                           'passes/text-expected.txt\n'))
 
     def test_csv(self):
         command = PrintBaselines()
         self.capture_output()
-        options = optparse.Values({'all': False, 'platform': '*win7', 'csv': True, 'include_virtual_tests': False})
+        options = optparse.Values({
+            'all': False,
+            'platform': '*win7',
+            'csv': True,
+            'include_virtual_tests': False
+        })
         command.execute(options, ['passes/text.html'], self.tool)
         stdout, _, _ = self.restore_output()
-        self.assertMultiLineEqual(stdout,
-                                  ('test-win-win7,passes/text.html,None,png,passes/text-expected.png,None\n'
-                                   'test-win-win7,passes/text.html,None,txt,passes/text-expected.txt,None\n'))
+        self.assertMultiLineEqual(stdout, (
+            'test-win-win7,passes/text.html,None,png,passes/text-expected.png,None\n'
+            'test-win-win7,passes/text.html,None,txt,passes/text-expected.txt,None\n'
+        ))
diff --git a/third_party/blink/tools/blinkpy/tool/commands/rebaseline.py b/third_party/blink/tools/blinkpy/tool/commands/rebaseline.py
index 08873300..389901d 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/rebaseline.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/rebaseline.py
@@ -42,7 +42,6 @@
 from blinkpy.web_tests.models.test_expectations import SystemConfigurationRemover, TestExpectations
 from blinkpy.web_tests.port import base, factory
 
-
 _log = logging.getLogger(__name__)
 
 # For CLI compatibility, we would like a list of baseline extensions without
@@ -60,14 +59,20 @@
     wpt_options = factory.wpt_options()
 
     no_optimize_option = optparse.make_option(
-        '--no-optimize', dest='optimize', action='store_false', default=True,
-        help=('Do not optimize (de-duplicate) the expectations after rebaselining '
-              '(default is to de-dupe automatically). You can use "blink_tool.py '
-              'optimize-baselines" to optimize separately.'))
+        '--no-optimize',
+        dest='optimize',
+        action='store_false',
+        default=True,
+        help=
+        ('Do not optimize (de-duplicate) the expectations after rebaselining '
+         '(default is to de-dupe automatically). You can use "blink_tool.py '
+         'optimize-baselines" to optimize separately.'))
     results_directory_option = optparse.make_option(
         '--results-directory', help='Local results directory to use.')
     suffixes_option = optparse.make_option(
-        '--suffixes', default=','.join(BASELINE_SUFFIX_LIST), action='store',
+        '--suffixes',
+        default=','.join(BASELINE_SUFFIX_LIST),
+        action='store',
         help='Comma-separated-list of file types to rebaseline.')
     builder_option = optparse.make_option(
         '--builder',
@@ -80,7 +85,9 @@
               '--builder.'))
     test_option = optparse.make_option('--test', help='Test to rebaseline.')
     build_number_option = optparse.make_option(
-        '--build-number', default=None, type='int',
+        '--build-number',
+        default=None,
+        type='int',
         help='Optional build number; if not given, the latest build is used.')
     step_name_option = optparse.make_option(
         '--step-name',
@@ -184,9 +191,8 @@
     def __str__(self):
         if not self._test_prefix_map:
             return '<Empty TestBaselineSet>'
-        return ('<TestBaselineSet with:\n  ' +
-                '\n  '.join('%s: %s, %s' % triple for triple in self._iter_combinations()) +
-                '>')
+        return ('<TestBaselineSet with:\n  ' + '\n  '.join('%s: %s, %s' % \
+            triple for triple in self._iter_combinations()) + '>')
 
     def test_prefixes(self):
         """Returns a sorted list of test prefixes."""
@@ -211,7 +217,8 @@
             build: A Build object. This specifies where to fetch baselines from.
             port_name: This specifies what platform the baseline is for.
         """
-        port_name = port_name or self._host.builders.port_name_for_builder_name(build.builder_name)
+        port_name = port_name or self._host.builders.port_name_for_builder_name(
+            build.builder_name)
         self._builder_names.add(build.builder_name)
         self._test_prefix_map[test_prefix].append((build, port_name))
 
@@ -222,10 +229,12 @@
 
 class AbstractParallelRebaselineCommand(AbstractRebaseliningCommand):
     """Base class for rebaseline commands that do some tasks in parallel."""
+
     # Not overriding execute() - pylint: disable=abstract-method
 
     def __init__(self, options=None):
-        super(AbstractParallelRebaselineCommand, self).__init__(options=options)
+        super(AbstractParallelRebaselineCommand,
+              self).__init__(options=options)
 
     def _release_builders(self):
         """Returns a list of builder names for continuous release builders.
@@ -279,7 +288,8 @@
         rebaseline_commands = []
         lines_to_remove = {}
 
-        builders_to_fetch_from = self._builders_to_fetch_from(test_baseline_set.all_builders())
+        builders_to_fetch_from = self._builders_to_fetch_from(
+            test_baseline_set.all_builders())
         for test, build, port_name in test_baseline_set:
             if build.builder_name not in builders_to_fetch_from:
                 continue
@@ -290,8 +300,10 @@
                 #   1. ran and passed ([ Skip ], [ WontFix ] should be kept)
                 #   2. passed unexpectedly (flaky expectations should be kept)
                 if self._test_passed_unexpectedly(test, build, port_name):
-                    _log.debug('Test %s passed unexpectedly in %s. '
-                               'Will try to remove it from TestExpectations.', test, build)
+                    _log.debug(
+                        'Test %s passed unexpectedly in %s. '
+                        'Will try to remove it from TestExpectations.', test,
+                        build)
                     if test not in lines_to_remove:
                         lines_to_remove[test] = []
                     lines_to_remove[test].append(port_name)
@@ -301,12 +313,18 @@
             if options.verbose:
                 args.append('--verbose')
             args.extend([
-                '--test', test,
-                '--suffixes', ','.join(suffixes),
-                '--port-name', port_name,
+                '--test',
+                test,
+                '--suffixes',
+                ','.join(suffixes),
+                '--port-name',
+                port_name,
             ])
 
-            copy_command = [self._tool.executable, path_to_blink_tool, 'copy-existing-baselines-internal'] + args
+            copy_command = [
+                self._tool.executable, path_to_blink_tool,
+                'copy-existing-baselines-internal'
+            ] + args
             copy_baseline_commands.append(tuple([copy_command, cwd]))
 
             args.extend(['--builder', build.builder_name])
@@ -315,11 +333,15 @@
             if options.results_directory:
                 args.extend(['--results-directory', options.results_directory])
 
-            step_name = self._tool.results_fetcher.get_layout_test_step_name(build)
+            step_name = self._tool.results_fetcher.get_layout_test_step_name(
+                build)
             if step_name:
                 args.extend(['--step-name', step_name])
 
-            rebaseline_command = [self._tool.executable, path_to_blink_tool, 'rebaseline-test-internal'] + args
+            rebaseline_command = [
+                self._tool.executable, path_to_blink_tool,
+                'rebaseline-test-internal'
+            ] + args
             rebaseline_commands.append(tuple([rebaseline_command, cwd]))
 
         return copy_baseline_commands, rebaseline_commands, lines_to_remove
@@ -345,11 +367,13 @@
     def _optimize_baselines(self, test_baseline_set, verbose=False):
         """Returns a list of commands to run in parallel to de-duplicate baselines."""
         tests_to_suffixes = collections.defaultdict(set)
-        builders_to_fetch_from = self._builders_to_fetch_from(test_baseline_set.all_builders())
+        builders_to_fetch_from = self._builders_to_fetch_from(
+            test_baseline_set.all_builders())
         for test, build, _ in test_baseline_set:
             if build.builder_name not in builders_to_fetch_from:
                 continue
-            tests_to_suffixes[test].update(self._suffixes_for_actual_failures(test, build))
+            tests_to_suffixes[test].update(
+                self._suffixes_for_actual_failures(test, build))
 
         optimize_commands = []
         for test, suffixes in tests_to_suffixes.iteritems():
@@ -365,7 +389,9 @@
             args.extend(['--suffixes', ','.join(suffixes), test])
             path_to_blink_tool = self._tool.path()
             cwd = self._tool.git().checkout_root
-            command = [self._tool.executable, path_to_blink_tool, 'optimize-baselines'] + args
+            command = [
+                self._tool.executable, path_to_blink_tool, 'optimize-baselines'
+            ] + args
             optimize_commands.append(tuple([command, cwd]))
 
         return optimize_commands
@@ -373,8 +399,10 @@
     def _update_expectations_files(self, lines_to_remove):
         tests = lines_to_remove.keys()
         to_remove = defaultdict(set)
-        all_versions = frozenset([config.version.lower() for config in
-                                  self._tool.port_factory.get().all_test_configurations()])
+        all_versions = frozenset([
+            config.version.lower() for config in self._tool.port_factory.get().
+            all_test_configurations()
+        ])
         # This is so we remove lines for builders that skip this test.
         # For example, Android skips most tests and we don't want to leave
         # stray [ Android ] lines in TestExpectations.
@@ -382,19 +410,25 @@
         for port_name in self._tool.port_factory.all_port_names():
             port = self._tool.port_factory.get(port_name)
             for test in tests:
-                if port.test_configuration().version.lower() in all_versions and port.skips_test(test):
-                    to_remove[test].add(port.test_configuration().version.lower())
+                if (port.test_configuration().version.lower() in all_versions
+                        and port.skips_test(test)):
+                    to_remove[test].add(
+                        port.test_configuration().version.lower())
 
         # Get configurations to remove based on builders for each test
         for test, port_names in lines_to_remove.items():
             for port_name in port_names:
                 port = self._tool.port_factory.get(port_name)
                 if port.test_configuration().version.lower() in all_versions:
-                    to_remove[test].add(port.test_configuration().version.lower())
+                    to_remove[test].add(
+                        port.test_configuration().version.lower())
         port = self._tool.port_factory.get()
         path = port.path_to_generic_test_expectations_file()
         test_expectations = TestExpectations(
-            port, expectations_dict={path: self._tool.filesystem.read_text_file(path)})
+            port,
+            expectations_dict={
+                path: self._tool.filesystem.read_text_file(path)
+            })
         system_remover = SystemConfigurationRemover(test_expectations)
         for test, versions in to_remove.items():
             system_remover.remove_os_versions(test, versions)
@@ -421,8 +455,11 @@
             test_baseline_set: A TestBaselineSet instance, which represents
                 a set of tests/platform combinations to rebaseline.
         """
-        if self._tool.git().has_working_directory_changes(pathspec=self._web_tests_dir()):
-            _log.error('There are uncommitted changes in the web tests directory; aborting.')
+        if self._tool.git().has_working_directory_changes(
+                pathspec=self._web_tests_dir()):
+            _log.error(
+                'There are uncommitted changes in the web tests directory; aborting.'
+            )
             return
 
         for test in sorted({t for t, _, _ in test_baseline_set}):
@@ -439,7 +476,8 @@
 
         for test in extra_lines_to_remove:
             if test in lines_to_remove:
-                lines_to_remove[test] = lines_to_remove[test] + extra_lines_to_remove[test]
+                lines_to_remove[test] = (
+                    lines_to_remove[test] + extra_lines_to_remove[test])
             else:
                 lines_to_remove[test] = extra_lines_to_remove[test]
 
@@ -447,15 +485,19 @@
             self._update_expectations_files(lines_to_remove)
 
         if options.optimize:
-            self._run_in_parallel(self._optimize_baselines(test_baseline_set, options.verbose))
+            self._run_in_parallel(
+                self._optimize_baselines(test_baseline_set, options.verbose))
 
         self._tool.git().add_list(self.unstaged_baselines())
 
     def unstaged_baselines(self):
         """Returns absolute paths for unstaged (including untracked) baselines."""
-        baseline_re = re.compile(r'.*[\\/]' + WEB_TESTS_LAST_COMPONENT + r'[\\/].*-expected\.(txt|png|wav)$')
+        baseline_re = re.compile(r'.*[\\/]' + WEB_TESTS_LAST_COMPONENT +
+                                 r'[\\/].*-expected\.(txt|png|wav)$')
         unstaged_changes = self._tool.git().unstaged_changes()
-        return sorted(self._tool.git().absolute_path(path) for path in unstaged_changes if re.match(baseline_re, path))
+        return sorted(self._tool.git().absolute_path(path)
+                      for path in unstaged_changes
+                      if re.match(baseline_re, path))
 
     def _generic_baseline_paths(self, test_baseline_set):
         """Returns absolute paths for generic baselines for the given tests.
@@ -466,8 +508,14 @@
         filesystem = self._tool.filesystem
         baseline_paths = []
         for test in test_baseline_set.all_tests():
-            filenames = [self._file_name_for_expected_result(test, suffix) for suffix in BASELINE_SUFFIX_LIST]
-            baseline_paths += [filesystem.join(self._web_tests_dir(), filename) for filename in filenames]
+            filenames = [
+                self._file_name_for_expected_result(test, suffix)
+                for suffix in BASELINE_SUFFIX_LIST
+            ]
+            baseline_paths += [
+                filesystem.join(self._web_tests_dir(), filename)
+                for filename in filenames
+            ]
         baseline_paths.sort()
         return baseline_paths
 
@@ -505,7 +553,8 @@
         Returns:
             A boolean.
         """
-        if self._tool.builders.port_name_for_builder_name(build.builder_name) != port_name:
+        if self._tool.builders.port_name_for_builder_name(
+                build.builder_name) != port_name:
             return False
         test_result = self._result_for_test(test, build)
         if not test_result:
@@ -538,14 +587,20 @@
             self.no_optimize_option,
             # FIXME: should we support the platform options in addition to (or instead of) --builders?
             self.results_directory_option,
-            optparse.make_option('--builders', default=None, action='append',
-                                 help=('Comma-separated-list of builders to pull new baselines from '
-                                       '(can also be provided multiple times).')),
+            optparse.make_option(
+                '--builders',
+                default=None,
+                action='append',
+                help=
+                ('Comma-separated-list of builders to pull new baselines from '
+                 '(can also be provided multiple times).')),
         ])
 
     def _builders_to_pull_from(self):
         return self._tool.user.prompt_with_list(
-            'Which builder to pull results from:', self._release_builders(), can_choose_multiple=True)
+            'Which builder to pull results from:',
+            self._release_builders(),
+            can_choose_multiple=True)
 
     def execute(self, options, args, tool):
         self._tool = tool
diff --git a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl.py b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl.py
index 13ffccd..10a4d280 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl.py
@@ -1,7 +1,6 @@
 # Copyright 2016 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.
-
 """A command to fetch new baselines from try jobs for the current CL."""
 
 import json
@@ -13,19 +12,19 @@
 from blinkpy.tool.commands.rebaseline import AbstractParallelRebaselineCommand
 from blinkpy.tool.commands.rebaseline import TestBaselineSet
 
-
 _log = logging.getLogger(__name__)
 
 
 class RebaselineCL(AbstractParallelRebaselineCommand):
     name = 'rebaseline-cl'
     help_text = 'Fetches new baselines for a CL from test runs on try bots.'
-    long_help = ('This command downloads new baselines for failing web '
-                 'tests from archived try job test results. Cross-platform '
-                 'baselines are deduplicated after downloading.  Without '
-                 'positional parameters or --test-name-file, all failing tests '
-                 'are rebaselined. If positional parameters are provided, '
-                 'they are interpreted as test names to rebaseline.')
+    long_help = (
+        'This command downloads new baselines for failing web '
+        'tests from archived try job test results. Cross-platform '
+        'baselines are deduplicated after downloading.  Without '
+        'positional parameters or --test-name-file, all failing tests '
+        'are rebaselined. If positional parameters are provided, '
+        'they are interpreted as test names to rebaseline.')
 
     show_in_main_help = True
     argument_names = '[testname,...]'
@@ -33,34 +32,48 @@
     def __init__(self):
         super(RebaselineCL, self).__init__(options=[
             optparse.make_option(
-                '--dry-run', action='store_true', default=False,
+                '--dry-run',
+                action='store_true',
+                default=False,
                 help='Dry run mode; list actions that would be performed but '
-                     'do not actually download any new baselines.'),
+                'do not actually download any new baselines.'),
             optparse.make_option(
-                '--only-changed-tests', action='store_true', default=False,
+                '--only-changed-tests',
+                action='store_true',
+                default=False,
                 help='Only download new baselines for tests that are directly '
-                     'modified in the CL.'),
+                'modified in the CL.'),
             optparse.make_option(
-                '--no-trigger-jobs', dest='trigger_jobs', action='store_false',
+                '--no-trigger-jobs',
+                dest='trigger_jobs',
+                action='store_false',
                 default=True,
                 help='Do not trigger any try jobs.'),
             optparse.make_option(
-                '--fill-missing', dest='fill_missing', action='store_true',
+                '--fill-missing',
+                dest='fill_missing',
+                action='store_true',
                 default=None,
                 help='If some platforms have no try job results, use results '
-                     'from try job results of other platforms.'),
+                'from try job results of other platforms.'),
             optparse.make_option(
-                '--no-fill-missing', dest='fill_missing', action='store_false'),
+                '--no-fill-missing', dest='fill_missing',
+                action='store_false'),
             optparse.make_option(
-                '--test-name-file', dest='test_name_file', default=None,
+                '--test-name-file',
+                dest='test_name_file',
+                default=None,
                 help='Read names of tests to rebaseline from this file, one '
-                     'test per line.'),
+                'test per line.'),
             optparse.make_option(
-                '--builders', default=None, action='append',
+                '--builders',
+                default=None,
+                action='append',
                 help=('Comma-separated-list of builders to pull new baselines '
                       'from (can also be provided multiple times).')),
             optparse.make_option(
-                '--patchset', default=None,
+                '--patchset',
+                default=None,
                 help='Patchset number to fetch new baselines from.'),
             self.no_optimize_option,
             self.results_directory_option,
@@ -89,7 +102,10 @@
         jobs = self.git_cl.latest_try_jobs(
             builder_names=self.selected_try_bots, patchset=options.patchset)
         self._log_jobs(jobs)
-        builders_with_no_jobs = self.selected_try_bots - {b.builder_name for b in jobs}
+        builders_with_no_jobs = self.selected_try_bots - {
+            b.builder_name
+            for b in jobs
+        }
 
         if not options.trigger_jobs and not jobs:
             _log.info('Aborted: no try jobs and --no-trigger-jobs passed.')
@@ -102,7 +118,8 @@
         jobs_to_results = self._fetch_results(jobs)
 
         builders_with_results = {b.builder_name for b in jobs_to_results}
-        builders_without_results = set(self.selected_try_bots) - builders_with_results
+        builders_without_results = (
+            set(self.selected_try_bots) - builders_with_results)
         if builders_without_results:
             _log.info('There are some builders with no results:')
             self._log_builder_list(builders_without_results)
@@ -184,7 +201,9 @@
             jobs: A dict mapping Build objects to TryJobStatus objects.
         """
         finished_jobs = {b for b, s in jobs.items() if s.status == 'COMPLETED'}
-        if self.selected_try_bots.issubset({b.builder_name for b in finished_jobs}):
+        if self.selected_try_bots.issubset(
+            {b.builder_name
+             for b in finished_jobs}):
             _log.info('Finished try jobs found for all try bots.')
             return
 
@@ -230,10 +249,12 @@
                 # Only completed failed builds will contain actual failed
                 # web tests to download baselines for.
                 continue
-            results_url = results_fetcher.results_url(build.builder_name, build.build_number)
+            results_url = results_fetcher.results_url(build.builder_name,
+                                                      build.build_number)
             web_test_results = results_fetcher.fetch_results(build)
             if web_test_results is None:
-                _log.info('Failed to fetch results for "%s".', build.builder_name)
+                _log.info('Failed to fetch results for "%s".',
+                          build.builder_name)
                 _log.info('Results URL: %s/results.html', results_url)
                 continue
             results[build] = web_test_results
@@ -242,7 +263,8 @@
     def _make_test_baseline_set_from_file(self, filename, builds_to_results):
         test_baseline_set = TestBaselineSet(self._tool)
         try:
-            with self._tool.filesystem.open_text_file_for_reading(filename) as fh:
+            with self._tool.filesystem.open_text_file_for_reading(
+                    filename) as fh:
                 _log.info('Reading list of tests to rebaseline '
                           'from %s', filename)
                 for test in fh.readlines():
@@ -294,7 +316,10 @@
             # In the changed files list from Git, paths always use "/" as
             # the path separator, and they're always relative to repo root.
             test_base = self._test_base_path()
-            tests_in_cl = [f[len(test_base):] for f in files_in_cl if f.startswith(test_base)]
+            tests_in_cl = [
+                f[len(test_base):] for f in files_in_cl
+                if f.startswith(test_base)
+            ]
 
         test_baseline_set = TestBaselineSet(self._tool)
         for build, tests in builds_to_tests.iteritems():
@@ -308,8 +333,7 @@
         """Returns the relative path from the repo root to the web tests."""
         finder = PathFinder(self._tool.filesystem)
         return self._tool.filesystem.relpath(
-            finder.web_tests_dir(),
-            finder.path_from_chromium_base()) + '/'
+            finder.web_tests_dir(), finder.path_from_chromium_base()) + '/'
 
     def _tests_to_rebaseline(self, build, web_test_results):
         """Fetches a list of tests that should be rebaselined for some build.
@@ -331,7 +355,8 @@
 
         new_failures = self._fetch_tests_with_new_failures(build)
         if new_failures is None:
-            _log.warning('No retry summary available for "%s".', build.builder_name)
+            _log.warning('No retry summary available for "%s".',
+                         build.builder_name)
         else:
             tests = [t for t in tests if t in new_failures]
         return tests
@@ -367,7 +392,10 @@
         is an entry for the "win-win10" port, then an entry might be added
         for "win-win7" using the results from "win-win10".
         """
-        all_ports = {self._tool.builders.port_name_for_builder_name(b) for b in self.selected_try_bots}
+        all_ports = {
+            self._tool.builders.port_name_for_builder_name(b)
+            for b in self.selected_try_bots
+        }
         for test_prefix in test_baseline_set.test_prefixes():
             build_port_pairs = test_baseline_set.build_port_pairs(test_prefix)
             missing_ports = all_ports - {p for _, p in build_port_pairs}
@@ -376,9 +404,8 @@
             _log.info('For %s:', test_prefix)
             for port in missing_ports:
                 build = self._choose_fill_in_build(port, build_port_pairs)
-                _log.info(
-                    'Using "%s" build %d for %s.',
-                    build.builder_name, build.build_number, port)
+                _log.info('Using "%s" build %d for %s.', build.builder_name,
+                          build.build_number, port)
                 test_baseline_set.add(test_prefix, build, port)
         return test_baseline_set
 
@@ -388,6 +415,7 @@
         Ideally, this should return a build for a similar port so that the
         results from the selected build may also be correct for the target port.
         """
+
         # A full port name should normally always be of the form <os>-<version>;
         # for example "win-win7", or "linux-trusty". For the test port used in
         # unit tests, though, the full port name may be "test-<os>-<version>".
@@ -398,7 +426,8 @@
 
         # If any Build exists with the same OS, use the first one.
         target_os = os_name(target_port)
-        same_os_builds = sorted(b for b, p in build_port_pairs if os_name(p) == target_os)
+        same_os_builds = sorted(
+            b for b, p in build_port_pairs if os_name(p) == target_os)
         if same_os_builds:
             return same_os_builds[0]
 
diff --git a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl_unittest.py b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl_unittest.py
index 9fd3f8d..57ff414c 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl_unittest.py
@@ -30,16 +30,17 @@
         builds = {
             Build('MOCK Try Win', 5000): TryJobStatus('COMPLETED', 'FAILURE'),
             Build('MOCK Try Mac', 4000): TryJobStatus('COMPLETED', 'FAILURE'),
-            Build('MOCK Try Linux', 6000): TryJobStatus('COMPLETED', 'FAILURE'),
+            Build('MOCK Try Linux', 6000): TryJobStatus(
+                'COMPLETED', 'FAILURE'),
         }
 
         self.command.git_cl = MockGitCL(self.tool, builds)
 
-        git = MockGit(filesystem=self.tool.filesystem, executive=self.tool.executive)
+        git = MockGit(
+            filesystem=self.tool.filesystem, executive=self.tool.executive)
         git.changed_files = lambda **_: [
             RELATIVE_WEB_TESTS + 'one/text-fail.html',
-            RELATIVE_WEB_TESTS + 'one/flaky-fail.html',
-        ]
+            RELATIVE_WEB_TESTS + 'one/flaky-fail.html', ]
         self.tool.git = lambda: git
 
         self.tool.builders = BuilderList({
@@ -63,49 +64,91 @@
             'tests': {
                 'one': {
                     'crash.html': {
-                        'expected': 'PASS', 'actual': 'CRASH', 'is_unexpected': True,
-                        'artifacts': {'crash_log': ['crash.log']}},
+                        'expected': 'PASS',
+                        'actual': 'CRASH',
+                        'is_unexpected': True,
+                        'artifacts': {
+                            'crash_log': ['crash.log']
+                        }
+                    },
                     'expected-fail.html': {
-                        'expected': 'FAIL', 'actual': 'FAIL',
-                        'artifacts': {'expected_text': ['expected-fail-expected.txt'],
-                                      'actual_text': ['expected-fail-actual.txt']}},
+                        'expected': 'FAIL',
+                        'actual': 'FAIL',
+                        'artifacts': {
+                            'expected_text': ['expected-fail-expected.txt'],
+                            'actual_text': ['expected-fail-actual.txt']
+                        }
+                    },
                     'flaky-fail.html': {
-                        'expected': 'PASS', 'actual': 'PASS FAIL', 'is_unexpected': True,
-                        'artifacts': {'expected_audio': ['flaky-fail-expected.wav'],
-                                      'actual_audio': ['flaky-fail-actual.wav']}},
+                        'expected': 'PASS',
+                        'actual': 'PASS FAIL',
+                        'is_unexpected': True,
+                        'artifacts': {
+                            'expected_audio': ['flaky-fail-expected.wav'],
+                            'actual_audio': ['flaky-fail-actual.wav']
+                        }
+                    },
                     'missing.html': {
-                        'expected': 'PASS', 'actual': 'FAIL', 'is_unexpected': True,
-                        'artifacts': {'actual_image': ['missing-actual.png']}, 'is_missing_image': True},
+                        'expected': 'PASS',
+                        'actual': 'FAIL',
+                        'is_unexpected': True,
+                        'artifacts': {
+                            'actual_image': ['missing-actual.png']
+                        },
+                        'is_missing_image': True
+                    },
                     'slow-fail.html': {
-                        'expected': 'SLOW', 'actual': 'FAIL', 'is_unexpected': True,
-                        'artifacts': {'actual_text': ['slow-fail-actual.txt'],
-                                      'expected_text': ['slow-fail-expected.txt']}},
+                        'expected': 'SLOW',
+                        'actual': 'FAIL',
+                        'is_unexpected': True,
+                        'artifacts': {
+                            'actual_text': ['slow-fail-actual.txt'],
+                            'expected_text': ['slow-fail-expected.txt']
+                        }
+                    },
                     'text-fail.html': {
-                        'expected': 'PASS', 'actual': 'FAIL', 'is_unexpected': True,
-                        'artifacts': {'actual_text': ['text-fail-actual.txt'],
-                                      'expected_text': ['text-fail-expected.txt']}},
-                    'unexpected-pass.html': {'expected': 'FAIL', 'actual': 'PASS', 'is_unexpected': True},
+                        'expected': 'PASS',
+                        'actual': 'FAIL',
+                        'is_unexpected': True,
+                        'artifacts': {
+                            'actual_text': ['text-fail-actual.txt'],
+                            'expected_text': ['text-fail-expected.txt']
+                        }
+                    },
+                    'unexpected-pass.html': {
+                        'expected': 'FAIL',
+                        'actual': 'PASS',
+                        'is_unexpected': True
+                    },
                 },
                 'two': {
                     'image-fail.html': {
-                        'expected': 'PASS', 'actual': 'FAIL', 'is_unexpected': True,
-                        'artifacts': {'actual_image': ['image-fail-actual.png'],
-                                      'expected_image': ['image-fail-expected.png']}}},
+                        'expected': 'PASS',
+                        'actual': 'FAIL',
+                        'is_unexpected': True,
+                        'artifacts': {
+                            'actual_image': ['image-fail-actual.png'],
+                            'expected_image': ['image-fail-expected.png']
+                        }
+                    }
+                },
             },
         })
 
         for build in builds:
             self.tool.results_fetcher.set_results(build, web_test_results)
-            self.tool.results_fetcher.set_retry_sumary_json(build, json.dumps({
-                'failures': [
-                    'one/flaky-fail.html',
-                    'one/missing.html',
-                    'one/slow-fail.html',
-                    'one/text-fail.html',
-                    'two/image-fail.html',
-                ],
-                'ignored': [],
-            }))
+            self.tool.results_fetcher.set_retry_sumary_json(
+                build,
+                json.dumps({
+                    'failures': [
+                        'one/flaky-fail.html',
+                        'one/missing.html',
+                        'one/slow-fail.html',
+                        'one/text-fail.html',
+                        'two/image-fail.html',
+                    ],
+                    'ignored': [],
+                }))
 
         # Write to the mock filesystem so that these tests are considered to exist.
         tests = [
@@ -161,7 +204,9 @@
     def test_execute_with_test_name_file(self):
         fs = self.mac_port.host.filesystem
         test_name_file = fs.mktemp()
-        fs.write_text_file(test_name_file, textwrap.dedent('''
+        fs.write_text_file(
+            test_name_file,
+            textwrap.dedent('''
             one/flaky-fail.html
               one/missing.html
             # one/slow-fail.html
@@ -174,7 +219,8 @@
         self.assertEqual(exit_code, 0)
         self.assertLog([
             'INFO: Finished try jobs found for all try bots.\n',
-            'INFO: Reading list of tests to rebaseline from %s\n' % test_name_file,
+            'INFO: Reading list of tests to rebaseline from %s\n' %
+            test_name_file,
             'INFO: Rebaselining one/flaky-fail.html\n',
             'INFO: Rebaselining one/missing.html\n',
             'INFO: Rebaselining one/text-fail.html\n',
@@ -208,10 +254,8 @@
         exit_code = self.command.execute(self.command_options(), [], self.tool)
         self.assertEqual(exit_code, 1)
         self.assertLog([
-            'INFO: No finished try jobs.\n',
-            'INFO: Triggering try jobs:\n',
-            'INFO:   MOCK Try Linux\n',
-            'INFO:   MOCK Try Mac\n',
+            'INFO: No finished try jobs.\n', 'INFO: Triggering try jobs:\n',
+            'INFO:   MOCK Try Linux\n', 'INFO:   MOCK Try Mac\n',
             'INFO:   MOCK Try Win\n',
             'INFO: Once all pending try jobs have finished, please re-run\n'
             'blink_tool.py rebaseline-cl to fetch new baselines.\n'
@@ -273,7 +317,8 @@
         builds = {
             Build('MOCK Try Win', 5000): TryJobStatus('COMPLETED', 'FAILURE'),
             Build('MOCK Try Mac', 4000): TryJobStatus('COMPLETED', 'FAILURE'),
-            Build('MOCK Try Linux', 6000): TryJobStatus('COMPLETED', 'CANCELED'),
+            Build('MOCK Try Linux', 6000): TryJobStatus(
+                'COMPLETED', 'CANCELED'),
         }
         self.command.git_cl = MockGitCL(self.tool, builds)
         exit_code = self.command.execute(self.command_options(), [], self.tool)
@@ -290,7 +335,8 @@
         builds = {
             Build('MOCK Try Win', 5000): TryJobStatus('COMPLETED', 'FAILURE'),
             Build('MOCK Try Mac', 4000): TryJobStatus('COMPLETED', 'SUCCESS'),
-            Build('MOCK Try Linux', 6000): TryJobStatus('COMPLETED', 'SUCCESS'),
+            Build('MOCK Try Linux', 6000): TryJobStatus(
+                'COMPLETED', 'SUCCESS'),
         }
         self.command.git_cl = MockGitCL(self.tool, builds)
         exit_code = self.command.execute(self.command_options(), [], self.tool)
@@ -341,13 +387,16 @@
         builds = {
             Build('MOCK Try Win', 5000): TryJobStatus('COMPLETED', 'FAILURE'),
             Build('MOCK Try Mac', 4000): TryJobStatus('COMPLETED', 'FAILURE'),
-            Build('MOCK Try Linux', 6000): TryJobStatus('COMPLETED', 'FAILURE'),
+            Build('MOCK Try Linux', 6000): TryJobStatus(
+                'COMPLETED', 'FAILURE'),
         }
         for build in builds:
-            self.tool.results_fetcher.set_retry_sumary_json(build, json.dumps({
-                'failures': ['one/text-fail.html'],
-                'ignored': ['two/image-fail.html'],
-            }))
+            self.tool.results_fetcher.set_retry_sumary_json(
+                build,
+                json.dumps({
+                    'failures': ['one/text-fail.html'],
+                    'ignored': ['two/image-fail.html'],
+                }))
         exit_code = self.command.execute(self.command_options(), [], self.tool)
         self.assertEqual(exit_code, 0)
         self.assertLog([
@@ -377,47 +426,60 @@
         # First write test contents to the mock filesystem so that
         # one/flaky-fail.html is considered a real test to rebaseline.
         port = self.tool.port_factory.get('test-win-win7')
-        path = port.host.filesystem.join(
-            port.web_tests_dir(), 'one/flaky-fail.html')
+        path = port.host.filesystem.join(port.web_tests_dir(),
+                                         'one/flaky-fail.html')
         self._write(path, 'contents')
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add(
-            'one/flaky-fail.html', Build('MOCK Try Win', 5000))
+        test_baseline_set.add('one/flaky-fail.html', Build(
+            'MOCK Try Win', 5000))
         self.command.rebaseline(self.command_options(), test_baseline_set)
-        self.assertEqual(
-            self.tool.executive.calls,
-            [
-                [[
-                    'python', 'echo', 'copy-existing-baselines-internal',
-                    '--test', 'one/flaky-fail.html',
-                    '--suffixes', 'wav',
-                    '--port-name', 'test-win-win7',
-                ]],
-                [[
-                    'python', 'echo', 'rebaseline-test-internal',
-                    '--test', 'one/flaky-fail.html',
-                    '--suffixes', 'wav',
-                    '--port-name', 'test-win-win7',
-                    '--builder', 'MOCK Try Win',
-                    '--build-number', '5000',
-                    '--step-name', 'blink_web_tests (with patch)',
-                ]],
-                [[
-                    'python', 'echo', 'optimize-baselines',
-                    '--no-manifest-update',
-                    '--suffixes', 'wav',
-                    'one/flaky-fail.html',
-                ]]
-            ])
+        self.assertEqual(self.tool.executive.calls,
+                         [[[
+                             'python',
+                             'echo',
+                             'copy-existing-baselines-internal',
+                             '--test',
+                             'one/flaky-fail.html',
+                             '--suffixes',
+                             'wav',
+                             '--port-name',
+                             'test-win-win7',
+                         ]],
+                          [[
+                              'python',
+                              'echo',
+                              'rebaseline-test-internal',
+                              '--test',
+                              'one/flaky-fail.html',
+                              '--suffixes',
+                              'wav',
+                              '--port-name',
+                              'test-win-win7',
+                              '--builder',
+                              'MOCK Try Win',
+                              '--build-number',
+                              '5000',
+                              '--step-name',
+                              'blink_web_tests (with patch)',
+                          ]],
+                          [[
+                              'python',
+                              'echo',
+                              'optimize-baselines',
+                              '--no-manifest-update',
+                              '--suffixes',
+                              'wav',
+                              'one/flaky-fail.html',
+                          ]]])
 
     def test_trigger_try_jobs(self):
         # The trigger_try_jobs method just uses git cl to trigger jobs for
         # the given builders.
         self.command.trigger_try_jobs(['MOCK Try Linux', 'MOCK Try Win'])
-        self.assertEqual(
-            self.command.git_cl.calls,
-            [['git', 'cl', 'try', '-B', 'luci.chromium.try',
-              '-b', 'MOCK Try Linux', '-b', 'MOCK Try Win']])
+        self.assertEqual(self.command.git_cl.calls, [[
+            'git', 'cl', 'try', '-B', 'luci.chromium.try', '-b',
+            'MOCK Try Linux', '-b', 'MOCK Try Win'
+        ]])
         self.assertLog([
             'INFO: Triggering try jobs:\n',
             'INFO:   MOCK Try Linux\n',
@@ -427,14 +489,16 @@
         ])
 
     def test_execute_missing_results_with_no_fill_missing_prompts(self):
-        self.tool.results_fetcher.set_results(Build('MOCK Try Win', 5000), None)
+        self.tool.results_fetcher.set_results(
+            Build('MOCK Try Win', 5000), None)
         exit_code = self.command.execute(self.command_options(), [], self.tool)
         self.assertEqual(exit_code, 1)
         self.assertLog([
             'INFO: Finished try jobs found for all try bots.\n',
             'INFO: Failed to fetch results for "MOCK Try Win".\n',
             ('INFO: Results URL: https://test-results.appspot.com/data/layout_results/'
-             'MOCK_Try_Win/5000/blink_web_tests%20%28with%20patch%29/layout-test-results/results.html\n'),
+             'MOCK_Try_Win/5000/blink_web_tests%20%28with%20patch%29/layout-test-results/results.html\n'
+             ),
             'INFO: There are some builders with no results:\n',
             'INFO:   MOCK Try Win\n',
             'INFO: Would you like to continue?\n',
@@ -442,31 +506,32 @@
         ])
 
     def test_execute_missing_results_with_fill_missing_continues(self):
-        self.tool.results_fetcher.set_results(Build('MOCK Try Win', 5000), None)
+        self.tool.results_fetcher.set_results(
+            Build('MOCK Try Win', 5000), None)
         exit_code = self.command.execute(
-            self.command_options(fill_missing=True),
-            ['one/flaky-fail.html'], self.tool)
+            self.command_options(fill_missing=True), ['one/flaky-fail.html'],
+            self.tool)
         self.assertEqual(exit_code, 0)
         self.assertLog([
             'INFO: Finished try jobs found for all try bots.\n',
             'INFO: Failed to fetch results for "MOCK Try Win".\n',
             ('INFO: Results URL: https://test-results.appspot.com/data/layout_results/'
-             'MOCK_Try_Win/5000/blink_web_tests%20%28with%20patch%29/layout-test-results/results.html\n'),
-            'INFO: There are some builders with no results:\n',
-            'INFO:   MOCK Try Win\n',
-            'INFO: For one/flaky-fail.html:\n',
+             'MOCK_Try_Win/5000/blink_web_tests%20%28with%20patch%29/layout-test-results/results.html\n'
+             ), 'INFO: There are some builders with no results:\n',
+            'INFO:   MOCK Try Win\n', 'INFO: For one/flaky-fail.html:\n',
             'INFO: Using "MOCK Try Linux" build 6000 for test-win-win7.\n',
             'INFO: Rebaselining one/flaky-fail.html\n'
         ])
 
     def test_fill_in_missing_results(self):
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('one/flaky-fail.html', Build('MOCK Try Linux', 100))
-        test_baseline_set.add('one/flaky-fail.html', Build('MOCK Try Win', 200))
+        test_baseline_set.add('one/flaky-fail.html',
+                              Build('MOCK Try Linux', 100))
+        test_baseline_set.add('one/flaky-fail.html', Build(
+            'MOCK Try Win', 200))
         self.command.fill_in_missing_results(test_baseline_set)
         self.assertEqual(
-            test_baseline_set.build_port_pairs('one/flaky-fail.html'),
-            [
+            test_baseline_set.build_port_pairs('one/flaky-fail.html'), [
                 (Build('MOCK Try Linux', 100), 'test-linux-trusty'),
                 (Build('MOCK Try Win', 200), 'test-win-win7'),
                 (Build('MOCK Try Linux', 100), 'test-mac-mac10.11'),
@@ -504,8 +569,7 @@
         test_baseline_set.add('one/flaky-fail.html', Build('MOCK Bar4', 200))
         self.command.fill_in_missing_results(test_baseline_set)
         self.assertEqual(
-            test_baseline_set.build_port_pairs('one/flaky-fail.html'),
-            [
+            test_baseline_set.build_port_pairs('one/flaky-fail.html'), [
                 (Build('MOCK Foo12', 100), 'foo-foo12'),
                 (Build('MOCK Bar4', 200), 'bar-bar4'),
                 (Build('MOCK Foo12', 100), 'foo-foo45'),
diff --git a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_server.py b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_server.py
index fad77cd..c96ba17 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_server.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_server.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Starts a local HTTP server which displays web test failures (given a test
 results directory), provides comparisons of expected and actual results (both
 images and text) and allows one-click rebaselining of tests.
@@ -39,8 +38,8 @@
 
 
 class TestConfig(object):
-
-    def __init__(self, test_port, web_tests_directory, results_directory, platforms, host):
+    def __init__(self, test_port, web_tests_directory, results_directory,
+                 platforms, host):
         self.test_port = test_port
         self.web_tests_directory = web_tests_directory
         self.results_directory = results_directory
@@ -73,7 +72,8 @@
                 return
             result_dict = result.result_dict()
             result_dict['state'] = STATE_NEEDS_REBASELINE
-            result_dict['baselines'] = get_test_baselines(result.test_name(), self._test_config)
+            result_dict['baselines'] = get_test_baselines(
+                result.test_name(), self._test_config)
             new_tests_subtree[result.test_name()] = result_dict
 
         WebTestResults(results_json).for_each_test(gather_baselines_for_test)
@@ -84,13 +84,17 @@
         host = Host()
 
         print 'Parsing full_results.json...'
-        results_json_path = host.filesystem.join(results_directory, 'full_results.json')
-        results_json = json_results_generator.load_json(host.filesystem, results_json_path)
+        results_json_path = host.filesystem.join(results_directory,
+                                                 'full_results.json')
+        results_json = json_results_generator.load_json(
+            host.filesystem, results_json_path)
 
         port = tool.port_factory.get()
         web_tests_directory = port.web_tests_dir()
-        platforms = host.filesystem.listdir(host.filesystem.join(web_tests_directory, 'platform'))
-        self._test_config = TestConfig(port, web_tests_directory, results_directory, platforms, host)
+        platforms = host.filesystem.listdir(
+            host.filesystem.join(web_tests_directory, 'platform'))
+        self._test_config = TestConfig(port, web_tests_directory,
+                                       results_directory, platforms, host)
 
         print 'Gathering current baselines...'
         self._gather_baselines(results_json)
diff --git a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_test.py b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_test.py
index 88f884b..07d9e02 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_test.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_test.py
@@ -36,10 +36,12 @@
             results_url = 'file://' + options.results_directory
         else:
             results_url = self._tool.results_fetcher.results_url(
-                options.builder, build_number=options.build_number,
+                options.builder,
+                build_number=options.build_number,
                 step_name=options.step_name)
 
-        port_name = options.port_name or self._tool.builders.port_name_for_builder_name(options.builder)
+        port_name = options.port_name or self._tool.builders.port_name_for_builder_name(
+            options.builder)
         test_name = options.test
         for suffix in self._baseline_suffix_list:
             self._rebaseline_test(port_name, test_name, suffix, results_url)
@@ -59,22 +61,30 @@
 
         baseline_directory = port.baseline_version_dir()
 
-        source_baseline = '%s/%s' % (results_url, self._file_name_for_actual_result(test_name, suffix))
-        target_baseline = self._tool.filesystem.join(baseline_directory, self._file_name_for_expected_result(test_name, suffix))
+        source_baseline = '%s/%s' % (
+            results_url, self._file_name_for_actual_result(test_name, suffix))
+        target_baseline = self._tool.filesystem.join(
+            baseline_directory,
+            self._file_name_for_expected_result(test_name, suffix))
 
         if suffix == 'png' and port.reference_files(test_name):
-            _log.warning('Cannot rebaseline image result for reftest: %s', test_name)
+            _log.warning('Cannot rebaseline image result for reftest: %s',
+                         test_name)
             data = ''
             # Still continue in case we can remove extra -expected.png.
         else:
-            _log.debug('Retrieving source %s for target %s.', source_baseline, target_baseline)
-            data = self._tool.web.get_binary(source_baseline, return_none_on_404=True)
+            _log.debug('Retrieving source %s for target %s.', source_baseline,
+                       target_baseline)
+            data = self._tool.web.get_binary(
+                source_baseline, return_none_on_404=True)
 
         if not data:
             # We don't just remove the file because the test may create empty
             # result on this platform but non-empty on other platforms.
             # Create an empty file, and let optimization deal with it.
-            _log.debug('Writing empty result %s which may be removed during optimization.', target_baseline)
+            _log.debug(
+                'Writing empty result %s which may be removed during optimization.',
+                target_baseline)
             data = ''
 
         filesystem = self._tool.filesystem
diff --git a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_test_unittest.py b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_test_unittest.py
index a1d7725..a6e7f13 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_test_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_test_unittest.py
@@ -15,25 +15,28 @@
 
     @staticmethod
     def options(**kwargs):
-        return optparse.Values(dict({
-            'builder': 'MOCK Mac10.11',
-            'port_name': None,
-            'test': 'userscripts/another-test.html',
-            'suffixes': 'txt',
-            'results_directory': None,
-            'build_number': None,
-            'step_name': None,
-        }, **kwargs))
+        return optparse.Values(
+            dict({
+                'builder': 'MOCK Mac10.11',
+                'port_name': None,
+                'test': 'userscripts/another-test.html',
+                'suffixes': 'txt',
+                'results_directory': None,
+                'build_number': None,
+                'step_name': None,
+            }, **kwargs))
 
     def test_rebaseline_test_internal_with_port_that_lacks_buildbot(self):
         self.tool.executive = MockExecutive()
 
         port = self.tool.port_factory.get('test-win-win7')
         baseline_relative_path = 'platform/test-win-win10/failures/expected/image-expected.txt'
-        baseline_local_absolute_path = port.host.filesystem.join(port.web_tests_dir(), baseline_relative_path)
+        baseline_local_absolute_path = port.host.filesystem.join(
+            port.web_tests_dir(), baseline_relative_path)
         self._write(baseline_local_absolute_path, 'original win10 result')
-        actual_result_url = ('https://test-results.appspot.com/data/layout_results/MOCK_Win10/' +
-                             'results/layout-test-results/failures/expected/image-actual.txt')
+        actual_result_url = (
+            'https://test-results.appspot.com/data/layout_results/MOCK_Win10/'
+            + 'results/layout-test-results/failures/expected/image-actual.txt')
         self.tool.web.urls[actual_result_url] = 'new win10 result'
 
         oc = OutputCapture()
@@ -55,10 +58,14 @@
             out, _, _ = oc.restore_output()
 
         self.assertItemsEqual(self.tool.web.urls_fetched, [actual_result_url])
-        self.assertMultiLineEqual(self._read(baseline_local_absolute_path),
-                                  'new win10 result')
-        self.assertFalse(self.tool.filesystem.exists(self.tool.filesystem.join(
-            port.web_tests_dir(), 'platform/test-win-win7/failures/expected/image-expected.txt')))
+        self.assertMultiLineEqual(
+            self._read(baseline_local_absolute_path), 'new win10 result')
+        self.assertFalse(
+            self.tool.filesystem.exists(
+                self.tool.filesystem.join(
+                    port.web_tests_dir(),
+                    'platform/test-win-win7/failures/expected/image-expected.txt'
+                )))
         # We should not change TestExpectations for unexpected failures.
         self.assertMultiLineEqual(out, '')
 
@@ -79,57 +86,74 @@
     def test_rebaseline_updates_expectations_file_noop(self):
         # pylint: disable=protected-access
         self._zero_out_test_expectations()
+        self._write(self.test_expectations_path, (
+            'Bug(B) [ Mac Linux Win7 Debug ] fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Pass ]\n'
+            'Bug(A) [ Debug ] : fast/css/large-list-of-rules-crash.html [ Failure ]\n'
+        ))
         self._write(
-            self.test_expectations_path,
-            ('Bug(B) [ Mac Linux Win7 Debug ] fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Pass ]\n'
-             'Bug(A) [ Debug ] : fast/css/large-list-of-rules-crash.html [ Failure ]\n'))
-        self._write('fast/dom/Window/window-postmessage-clone-really-deep-array.html', 'Dummy test contents')
-        self._write('fast/css/large-list-of-rules-crash.html', 'Dummy test contents')
+            'fast/dom/Window/window-postmessage-clone-really-deep-array.html',
+            'Dummy test contents')
+        self._write('fast/css/large-list-of-rules-crash.html',
+                    'Dummy test contents')
         self._write('userscripts/another-test.html', 'Dummy test contents')
 
-        self.command._rebaseline_test_and_update_expectations(self.options(suffixes='png,wav,txt'))
+        self.command._rebaseline_test_and_update_expectations(
+            self.options(suffixes='png,wav,txt'))
 
-        self.assertItemsEqual(self.tool.web.urls_fetched,
-                              [self.WEB_PREFIX + '/userscripts/another-test-actual.png',
-                               self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
-                               self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
+        self.assertItemsEqual(self.tool.web.urls_fetched, [
+            self.WEB_PREFIX + '/userscripts/another-test-actual.png',
+            self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
+            self.WEB_PREFIX + '/userscripts/another-test-actual.txt'
+        ])
         new_expectations = self._read(self.test_expectations_path)
-        self.assertMultiLineEqual(
-            new_expectations,
-            ('Bug(B) [ Mac Linux Win7 Debug ] fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Pass ]\n'
-             'Bug(A) [ Debug ] : fast/css/large-list-of-rules-crash.html [ Failure ]\n'))
+        self.assertMultiLineEqual(new_expectations, (
+            'Bug(B) [ Mac Linux Win7 Debug ] fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Pass ]\n'
+            'Bug(A) [ Debug ] : fast/css/large-list-of-rules-crash.html [ Failure ]\n'
+        ))
 
     def test_rebaseline_test(self):
         # pylint: disable=protected-access
         actual_result_url = self.WEB_PREFIX + '/userscripts/another-test-actual.txt'
         self.tool.web.urls[actual_result_url] = 'new result'
-        self.command._rebaseline_test('test-linux-trusty', 'userscripts/another-test.html', 'txt', self.WEB_PREFIX)
+        self.command._rebaseline_test('test-linux-trusty',
+                                      'userscripts/another-test.html', 'txt',
+                                      self.WEB_PREFIX)
         self.assertItemsEqual(self.tool.web.urls_fetched, [actual_result_url])
         port = self.tool.port_factory.get('test-linux-trusty')
         self.assertMultiLineEqual(
-            self._read(port.host.filesystem.join(port.baseline_version_dir(), 'userscripts/another-test-expected.txt')),
-            'new result')
+            self._read(
+                port.host.filesystem.join(
+                    port.baseline_version_dir(),
+                    'userscripts/another-test-expected.txt')), 'new result')
 
     def test_rebaseline_test_empty_result(self):
         # pylint: disable=protected-access
         actual_result_url = self.WEB_PREFIX + '/userscripts/another-test-actual.txt'
         self.tool.web.urls[actual_result_url] = ''
-        self.command._rebaseline_test('test-linux-trusty', 'userscripts/another-test.html', 'txt', self.WEB_PREFIX)
+        self.command._rebaseline_test('test-linux-trusty',
+                                      'userscripts/another-test.html', 'txt',
+                                      self.WEB_PREFIX)
         self.assertItemsEqual(self.tool.web.urls_fetched, [actual_result_url])
         port = self.tool.port_factory.get('test-linux-trusty')
         self.assertMultiLineEqual(
-            self._read(port.host.filesystem.join(port.baseline_version_dir(), 'userscripts/another-test-expected.txt')),
-            '')
+            self._read(
+                port.host.filesystem.join(
+                    port.baseline_version_dir(),
+                    'userscripts/another-test-expected.txt')), '')
 
     def test_rebaseline_test_non_existence_result(self):
         # pylint: disable=protected-access
         actual_result_url = self.WEB_PREFIX + '/userscripts/another-test-actual.txt'
-        self.command._rebaseline_test('test-linux-trusty', 'userscripts/another-test.html', 'txt', self.WEB_PREFIX)
+        self.command._rebaseline_test('test-linux-trusty',
+                                      'userscripts/another-test.html', 'txt',
+                                      self.WEB_PREFIX)
         self.assertItemsEqual(self.tool.web.urls_fetched, [actual_result_url])
         port = self.tool.port_factory.get('test-linux-trusty')
         self.assertMultiLineEqual(
-            self._read(port.host.filesystem.join(port.baseline_version_dir(), 'userscripts/another-test-expected.txt')),
-            '')
+            self._read(
+                port.host.filesystem.join(
+                    port.baseline_version_dir(),
+                    'userscripts/another-test-expected.txt')), '')
 
     def test_rebaseline_test_with_results_directory(self):
         # pylint: disable=protected-access
@@ -138,17 +162,25 @@
             self.test_expectations_path,
             ('Bug(x) [ Mac ] userscripts/another-test.html [ Failure ]\n'
              'bug(z) [ Linux ] userscripts/another-test.html [ Failure ]\n'))
-        self.command._rebaseline_test_and_update_expectations(self.options(results_directory='/tmp'))
-        self.assertItemsEqual(self.tool.web.urls_fetched, ['file:///tmp/userscripts/another-test-actual.txt'])
+        self.command._rebaseline_test_and_update_expectations(
+            self.options(results_directory='/tmp'))
+        self.assertItemsEqual(
+            self.tool.web.urls_fetched,
+            ['file:///tmp/userscripts/another-test-actual.txt'])
 
     def test_rebaseline_reftest(self):
         # pylint: disable=protected-access
         self._write('userscripts/another-test.html', 'test data')
         self._write('userscripts/another-test-expected.html', 'generic result')
         OutputCapture().assert_outputs(
-            self, self.command._rebaseline_test_and_update_expectations, args=[self.options(suffixes='png')],
-            expected_logs='Cannot rebaseline image result for reftest: userscripts/another-test.html\n')
-        self.assertDictEqual(self.command.expectation_line_changes.to_dict(), {'remove-lines': []})
+            self,
+            self.command._rebaseline_test_and_update_expectations,
+            args=[self.options(suffixes='png')],
+            expected_logs=
+            'Cannot rebaseline image result for reftest: userscripts/another-test.html\n'
+        )
+        self.assertDictEqual(self.command.expectation_line_changes.to_dict(),
+                             {'remove-lines': []})
 
     def test_rebaseline_reftest_with_text(self):
         # pylint: disable=protected-access
@@ -156,8 +188,14 @@
         self._write('userscripts/another-test-expected.html', 'generic result')
         self._write('userscripts/another-test-expected.txt', 'text')
         OutputCapture().assert_outputs(
-            self, self.command._rebaseline_test_and_update_expectations, args=[self.options(suffixes='png,txt')],
-            expected_logs='Cannot rebaseline image result for reftest: userscripts/another-test.html\n')
-        self.assertItemsEqual(self.tool.web.urls_fetched,
-                              [self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
-        self.assertDictEqual(self.command.expectation_line_changes.to_dict(), {'remove-lines': []})
+            self,
+            self.command._rebaseline_test_and_update_expectations,
+            args=[self.options(suffixes='png,txt')],
+            expected_logs=
+            'Cannot rebaseline image result for reftest: userscripts/another-test.html\n'
+        )
+        self.assertItemsEqual(
+            self.tool.web.urls_fetched,
+            [self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
+        self.assertDictEqual(self.command.expectation_line_changes.to_dict(),
+                             {'remove-lines': []})
diff --git a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_unittest.py b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_unittest.py
index 21a5768..a3b1a185 100644
--- a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_unittest.py
@@ -11,8 +11,7 @@
 from blinkpy.common.path_finder import RELATIVE_WEB_TESTS
 from blinkpy.common.system.executive_mock import MockExecutive
 from blinkpy.tool.commands.rebaseline import (
-    AbstractParallelRebaselineCommand, Rebaseline, TestBaselineSet
-)
+    AbstractParallelRebaselineCommand, Rebaseline, TestBaselineSet)
 from blinkpy.tool.mock_tool import MockBlinkTool
 from blinkpy.web_tests.builder_list import BuilderList
 from blinkpy.web_tests.port.factory_mock import MockPortFactory
@@ -27,23 +26,61 @@
     def setUp(self):
         self.tool = MockBlinkTool()
         self.command = self.command_constructor()
-        self.command._tool = self.tool   # pylint: disable=protected-access
+        self.command._tool = self.tool  # pylint: disable=protected-access
         self.tool.builders = BuilderList({
-            'MOCK Mac10.10 (dbg)': {'port_name': 'test-mac-mac10.10', 'specifiers': ['Mac10.10', 'Debug']},
-            'MOCK Mac10.10': {'port_name': 'test-mac-mac10.10', 'specifiers': ['Mac10.10', 'Release']},
-            'MOCK Mac10.11 (dbg)': {'port_name': 'test-mac-mac10.11', 'specifiers': ['Mac10.11', 'Debug']},
-            'MOCK Mac10.11 ASAN': {'port_name': 'test-mac-mac10.11', 'specifiers': ['Mac10.11', 'Release']},
-            'MOCK Mac10.11': {'port_name': 'test-mac-mac10.11', 'specifiers': ['Mac10.11', 'Release']},
-            'MOCK Precise': {'port_name': 'test-linux-precise', 'specifiers': ['Precise', 'Release']},
-            'MOCK Trusty': {'port_name': 'test-linux-trusty', 'specifiers': ['Trusty', 'Release']},
-            'MOCK Win10': {'port_name': 'test-win-win10', 'specifiers': ['Win10', 'Release']},
-            'MOCK Win7 (dbg)': {'port_name': 'test-win-win7', 'specifiers': ['Win7', 'Debug']},
-            'MOCK Win7 (dbg)(1)': {'port_name': 'test-win-win7', 'specifiers': ['Win7', 'Debug']},
-            'MOCK Win7 (dbg)(2)': {'port_name': 'test-win-win7', 'specifiers': ['Win7', 'Debug']},
-            'MOCK Win7': {'port_name': 'test-win-win7', 'specifiers': ['Win7', 'Release']},
+            'MOCK Mac10.10 (dbg)': {
+                'port_name': 'test-mac-mac10.10',
+                'specifiers': ['Mac10.10', 'Debug']
+            },
+            'MOCK Mac10.10': {
+                'port_name': 'test-mac-mac10.10',
+                'specifiers': ['Mac10.10', 'Release']
+            },
+            'MOCK Mac10.11 (dbg)': {
+                'port_name': 'test-mac-mac10.11',
+                'specifiers': ['Mac10.11', 'Debug']
+            },
+            'MOCK Mac10.11 ASAN': {
+                'port_name': 'test-mac-mac10.11',
+                'specifiers': ['Mac10.11', 'Release']
+            },
+            'MOCK Mac10.11': {
+                'port_name': 'test-mac-mac10.11',
+                'specifiers': ['Mac10.11', 'Release']
+            },
+            'MOCK Precise': {
+                'port_name': 'test-linux-precise',
+                'specifiers': ['Precise', 'Release']
+            },
+            'MOCK Trusty': {
+                'port_name': 'test-linux-trusty',
+                'specifiers': ['Trusty', 'Release']
+            },
+            'MOCK Win10': {
+                'port_name': 'test-win-win10',
+                'specifiers': ['Win10', 'Release']
+            },
+            'MOCK Win7 (dbg)': {
+                'port_name': 'test-win-win7',
+                'specifiers': ['Win7', 'Debug']
+            },
+            'MOCK Win7 (dbg)(1)': {
+                'port_name': 'test-win-win7',
+                'specifiers': ['Win7', 'Debug']
+            },
+            'MOCK Win7 (dbg)(2)': {
+                'port_name': 'test-win-win7',
+                'specifiers': ['Win7', 'Debug']
+            },
+            'MOCK Win7': {
+                'port_name': 'test-win-win7',
+                'specifiers': ['Win7', 'Release']
+            },
         })
-        self.mac_port = self.tool.port_factory.get_from_builder_name('MOCK Mac10.11')
-        self.test_expectations_path = self.mac_port.path_to_generic_test_expectations_file()
+        self.mac_port = self.tool.port_factory.get_from_builder_name(
+            'MOCK Mac10.11')
+        self.test_expectations_path = self.mac_port.path_to_generic_test_expectations_file(
+        )
 
         # This file must exist for Port classes to function properly.
         self._write('VirtualTestSuites', '[]')
@@ -89,34 +126,39 @@
 
     def _setup_mock_build_data(self):
         for builder in ['MOCK Win7', 'MOCK Win7 (dbg)', 'MOCK Mac10.11']:
-            self.tool.results_fetcher.set_results(Build(builder), WebTestResults({
-                'tests': {
-                    'userscripts': {
-                        'first-test.html': {
-                            'expected': 'PASS',
-                            'actual': 'FAIL',
-                            'is_unexpected': True,
-                            'artifacts': {
-                                'actual_image': ['first-test-actual.png'],
-                                'expected_image': ['first-test-expected.png'],
-                                'actual_text': ['first-test-actual.txt'],
-                                'expected_text': ['first-test-expected.txt']
-                            }
-                        },
-                        'second-test.html': {
-                            'expected': 'FAIL',
-                            'actual': 'FAIL',
-                            'artifacts': {
-                                'actual_image': ['second-test-actual.png'],
-                                'expected_image': ['second-test-expected.png'],
-                                'actual_audio': ['second-test-actual.wav'],
-                                'expected_audio': ['second-test-expected.wav']
+            self.tool.results_fetcher.set_results(
+                Build(builder),
+                WebTestResults({
+                    'tests': {
+                        'userscripts': {
+                            'first-test.html': {
+                                'expected': 'PASS',
+                                'actual': 'FAIL',
+                                'is_unexpected': True,
+                                'artifacts': {
+                                    'actual_image': ['first-test-actual.png'],
+                                    'expected_image':
+                                    ['first-test-expected.png'],
+                                    'actual_text': ['first-test-actual.txt'],
+                                    'expected_text':
+                                    ['first-test-expected.txt']
+                                }
+                            },
+                            'second-test.html': {
+                                'expected': 'FAIL',
+                                'actual': 'FAIL',
+                                'artifacts': {
+                                    'actual_image': ['second-test-actual.png'],
+                                    'expected_image':
+                                    ['second-test-expected.png'],
+                                    'actual_audio': ['second-test-actual.wav'],
+                                    'expected_audio':
+                                    ['second-test-expected.wav']
+                                }
                             }
                         }
                     }
-                }
-            }))
-
+                }))
 
 
 class TestAbstractParallelRebaselineCommand(BaseTestCase):
@@ -130,8 +172,10 @@
 
     def test_builders_to_fetch_from(self):
         # pylint: disable=protected-access
-        builders_to_fetch = self.command._builders_to_fetch_from(
-            ['MOCK Win10', 'MOCK Win7 (dbg)(1)', 'MOCK Win7 (dbg)(2)', 'MOCK Win7'])
+        builders_to_fetch = self.command._builders_to_fetch_from([
+            'MOCK Win10', 'MOCK Win7 (dbg)(1)', 'MOCK Win7 (dbg)(2)',
+            'MOCK Win7'
+        ])
         self.assertEqual(builders_to_fetch, {'MOCK Win7', 'MOCK Win10'})
 
     def test_generic_baseline_paths(self):
@@ -141,7 +185,8 @@
         test_baseline_set.add('passes/text.html', Build('MOCK Win10'))
 
         # pylint: disable=protected-access
-        baseline_paths = self.command._generic_baseline_paths(test_baseline_set)
+        baseline_paths = self.command._generic_baseline_paths(
+            test_baseline_set)
         self.assertEqual(baseline_paths, [
             '/test.checkout/wtests/passes/text-expected.png',
             '/test.checkout/wtests/passes/text-expected.txt',
@@ -155,14 +200,11 @@
             RELATIVE_WEB_TESTS + 'x/foo-expected.something': '?',
             RELATIVE_WEB_TESTS + 'x/foo-expected.png': '?',
             RELATIVE_WEB_TESTS + 'x/foo.html': 'M',
-            'docs/something.md': '?',
-        }
-        self.assertEqual(
-            self.command.unstaged_baselines(),
-            [
-                '/mock-checkout/' + RELATIVE_WEB_TESTS + 'x/foo-expected.png',
-                '/mock-checkout/' + RELATIVE_WEB_TESTS + 'x/foo-expected.txt',
-            ])
+            'docs/something.md': '?', }
+        self.assertEqual(self.command.unstaged_baselines(), [
+            '/mock-checkout/' + RELATIVE_WEB_TESTS + 'x/foo-expected.png',
+            '/mock-checkout/' + RELATIVE_WEB_TESTS + 'x/foo-expected.txt',
+        ])
 
 
 class TestRebaseline(BaseTestCase):
@@ -183,185 +225,252 @@
 
     @staticmethod
     def options(**kwargs):
-        return optparse.Values(dict({
-            'optimize': True,
-            'verbose': True,
-            'results_directory': None
-        }, **kwargs))
+        return optparse.Values(
+            dict({
+                'optimize': True,
+                'verbose': True,
+                'results_directory': None
+            }, **kwargs))
 
     def test_rebaseline_test_passes_on_all_builders(self):
-        self.tool.results_fetcher.set_results(Build('MOCK Win7'), WebTestResults({
-            'tests': {
-                'userscripts': {
-                    'first-test.html': {
-                        'expected': 'REBASELINE',
-                        'actual': 'PASS'
+        self.tool.results_fetcher.set_results(
+            Build('MOCK Win7'),
+            WebTestResults({
+                'tests': {
+                    'userscripts': {
+                        'first-test.html': {
+                            'expected': 'REBASELINE',
+                            'actual': 'PASS'
+                        }
                     }
                 }
-            }
-        }))
+            }))
 
-        self._write(self.test_expectations_path, 'Bug(x) userscripts/first-test.html [ Failure ]\n')
+        self._write(self.test_expectations_path,
+                    'Bug(x) userscripts/first-test.html [ Failure ]\n')
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7'))
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Win7'))
         self.command.rebaseline(self.options(), test_baseline_set)
 
         self.assertEqual(self.tool.executive.calls, [])
 
     def test_rebaseline_all(self):
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7'))
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Win7'))
         self.command.rebaseline(self.options(), test_baseline_set)
 
-        self.assertEqual(
-            self.tool.executive.calls,
-            [
-                [[
-                    'python', 'echo', 'copy-existing-baselines-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win7',
-                ]],
-                [[
-                    'python', 'echo', 'rebaseline-test-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win7',
-                    '--builder', 'MOCK Win7',
-                    '--step-name', 'blink_web_tests (with patch)',
-                ]],
-                [[
-                    'python', 'echo', 'optimize-baselines',
-                    '--no-manifest-update',
-                    '--verbose',
-                    '--suffixes', 'txt,png',
-                    'userscripts/first-test.html',
-                ]]
-            ])
+        self.assertEqual(self.tool.executive.calls,
+                         [[[
+                             'python',
+                             'echo',
+                             'copy-existing-baselines-internal',
+                             '--verbose',
+                             '--test',
+                             'userscripts/first-test.html',
+                             '--suffixes',
+                             'txt,png',
+                             '--port-name',
+                             'test-win-win7',
+                         ]],
+                          [[
+                              'python',
+                              'echo',
+                              'rebaseline-test-internal',
+                              '--verbose',
+                              '--test',
+                              'userscripts/first-test.html',
+                              '--suffixes',
+                              'txt,png',
+                              '--port-name',
+                              'test-win-win7',
+                              '--builder',
+                              'MOCK Win7',
+                              '--step-name',
+                              'blink_web_tests (with patch)',
+                          ]],
+                          [[
+                              'python',
+                              'echo',
+                              'optimize-baselines',
+                              '--no-manifest-update',
+                              '--verbose',
+                              '--suffixes',
+                              'txt,png',
+                              'userscripts/first-test.html',
+                          ]]])
 
     def test_rebaseline_debug(self):
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7 (dbg)'))
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Win7 (dbg)'))
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
-        self.assertEqual(
-            self.tool.executive.calls,
-            [
-                [[
-                    'python', 'echo', 'copy-existing-baselines-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win7',
-                ]],
-                [[
-                    'python', 'echo', 'rebaseline-test-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win7',
-                    '--builder', 'MOCK Win7 (dbg)',
-                    '--step-name', 'blink_web_tests (with patch)',
-                ]],
-                [[
-                    'python', 'echo', 'optimize-baselines',
-                    '--no-manifest-update',
-                    '--verbose',
-                    '--suffixes', 'txt,png',
-                    'userscripts/first-test.html',
-                ]]
-            ])
+        self.assertEqual(self.tool.executive.calls,
+                         [[[
+                             'python',
+                             'echo',
+                             'copy-existing-baselines-internal',
+                             '--verbose',
+                             '--test',
+                             'userscripts/first-test.html',
+                             '--suffixes',
+                             'txt,png',
+                             '--port-name',
+                             'test-win-win7',
+                         ]],
+                          [[
+                              'python',
+                              'echo',
+                              'rebaseline-test-internal',
+                              '--verbose',
+                              '--test',
+                              'userscripts/first-test.html',
+                              '--suffixes',
+                              'txt,png',
+                              '--port-name',
+                              'test-win-win7',
+                              '--builder',
+                              'MOCK Win7 (dbg)',
+                              '--step-name',
+                              'blink_web_tests (with patch)',
+                          ]],
+                          [[
+                              'python',
+                              'echo',
+                              'optimize-baselines',
+                              '--no-manifest-update',
+                              '--verbose',
+                              '--suffixes',
+                              'txt,png',
+                              'userscripts/first-test.html',
+                          ]]])
 
     def test_no_optimize(self):
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7'))
-        self.command.rebaseline(self.options(optimize=False), test_baseline_set)
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Win7'))
+        self.command.rebaseline(
+            self.options(optimize=False), test_baseline_set)
 
-        self.assertEqual(
-            self.tool.executive.calls,
-            [
-                [[
-                    'python', 'echo', 'copy-existing-baselines-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win7',
-
-                ]],
-                [[
-                    'python', 'echo', 'rebaseline-test-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win7',
-                    '--builder', 'MOCK Win7',
-                    '--step-name', 'blink_web_tests (with patch)',
-                ]]
-            ])
+        self.assertEqual(self.tool.executive.calls,
+                         [[[
+                             'python',
+                             'echo',
+                             'copy-existing-baselines-internal',
+                             '--verbose',
+                             '--test',
+                             'userscripts/first-test.html',
+                             '--suffixes',
+                             'txt,png',
+                             '--port-name',
+                             'test-win-win7',
+                         ]],
+                          [[
+                              'python',
+                              'echo',
+                              'rebaseline-test-internal',
+                              '--verbose',
+                              '--test',
+                              'userscripts/first-test.html',
+                              '--suffixes',
+                              'txt,png',
+                              '--port-name',
+                              'test-win-win7',
+                              '--builder',
+                              'MOCK Win7',
+                              '--step-name',
+                              'blink_web_tests (with patch)',
+                          ]]])
 
     def test_results_directory(self):
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7'))
-        self.command.rebaseline(self.options(optimize=False, results_directory='/tmp'), test_baseline_set)
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Win7'))
+        self.command.rebaseline(
+            self.options(optimize=False, results_directory='/tmp'),
+            test_baseline_set)
 
-        self.assertEqual(
-            self.tool.executive.calls,
-            [
-                [[
-                    'python', 'echo', 'copy-existing-baselines-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win7',
-                ]],
-                [[
-                    'python', 'echo', 'rebaseline-test-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win7',
-                    '--builder', 'MOCK Win7',
-                    '--results-directory', '/tmp',
-                    '--step-name', 'blink_web_tests (with patch)',
-                ]],
-            ])
+        self.assertEqual(self.tool.executive.calls, [
+            [[
+                'python',
+                'echo',
+                'copy-existing-baselines-internal',
+                '--verbose',
+                '--test',
+                'userscripts/first-test.html',
+                '--suffixes',
+                'txt,png',
+                '--port-name',
+                'test-win-win7',
+            ]],
+            [[
+                'python',
+                'echo',
+                'rebaseline-test-internal',
+                '--verbose',
+                '--test',
+                'userscripts/first-test.html',
+                '--suffixes',
+                'txt,png',
+                '--port-name',
+                'test-win-win7',
+                '--builder',
+                'MOCK Win7',
+                '--results-directory',
+                '/tmp',
+                '--step-name',
+                'blink_web_tests (with patch)',
+            ]],
+        ])
 
     def test_rebaseline_with_different_port_name(self):
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7'), 'test-win-win10')
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Win7'), 'test-win-win10')
         self.command.rebaseline(self.options(), test_baseline_set)
 
-        self.assertEqual(
-            self.tool.executive.calls,
-            [
-                [[
-                    'python', 'echo', 'copy-existing-baselines-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win10',
-
-                ]],
-                [[
-                    'python', 'echo', 'rebaseline-test-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win10',
-                    '--builder', 'MOCK Win7',
-                    '--step-name', 'blink_web_tests (with patch)',
-                ]],
-                [[
-                    'python', 'echo', 'optimize-baselines',
-                    '--no-manifest-update',
-                    '--verbose',
-                    '--suffixes', 'txt,png',
-                    'userscripts/first-test.html',
-                ]]
-            ])
+        self.assertEqual(self.tool.executive.calls,
+                         [[[
+                             'python',
+                             'echo',
+                             'copy-existing-baselines-internal',
+                             '--verbose',
+                             '--test',
+                             'userscripts/first-test.html',
+                             '--suffixes',
+                             'txt,png',
+                             '--port-name',
+                             'test-win-win10',
+                         ]],
+                          [[
+                              'python',
+                              'echo',
+                              'rebaseline-test-internal',
+                              '--verbose',
+                              '--test',
+                              'userscripts/first-test.html',
+                              '--suffixes',
+                              'txt,png',
+                              '--port-name',
+                              'test-win-win10',
+                              '--builder',
+                              'MOCK Win7',
+                              '--step-name',
+                              'blink_web_tests (with patch)',
+                          ]],
+                          [[
+                              'python',
+                              'echo',
+                              'optimize-baselines',
+                              '--no-manifest-update',
+                              '--verbose',
+                              '--suffixes',
+                              'txt,png',
+                              'userscripts/first-test.html',
+                          ]]])
 
 
 class TestRebaselineUpdatesExpectationsFiles(BaseTestCase):
@@ -374,6 +483,7 @@
 
         def mock_run_command(*args, **kwargs):  # pylint: disable=unused-argument
             return '{"add": [], "remove-lines": [{"test": "userscripts/first-test.html", "port_name": "test-mac-mac10.11"}]}\n'
+
         self.tool.executive = MockExecutive(run_command_fn=mock_run_command)
 
     @staticmethod
@@ -389,27 +499,26 @@
     # the corresponding expectation (if exists) should be updated.
 
     def test_rebaseline_updates_expectations_file(self):
-        self._write(
-            self.test_expectations_path,
-            ('# tags: [ Mac10.10 Mac Linux ]\n'
-             '# tags: [ Debug ]\n'
-             '# results: [ Failure ]\n'
-             'crbug.com/123 [ Debug Mac ] userscripts/first-test.html [ Failure ]\n'
-             '[ Linux ] userscripts/first-test.html [ Failure ]\n'))
+        self._write(self.test_expectations_path, (
+            '# tags: [ Mac10.10 Mac Linux ]\n'
+            '# tags: [ Debug ]\n'
+            '# results: [ Failure ]\n'
+            'crbug.com/123 [ Debug Mac ] userscripts/first-test.html [ Failure ]\n'
+            '[ Linux ] userscripts/first-test.html [ Failure ]\n'))
         self._setup_mock_build_data()
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11'))
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Mac10.11'))
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
         new_expectations = self._read(self.test_expectations_path)
-        self.assertMultiLineEqual(
-            new_expectations,
-            ('# tags: [ Mac10.10 Mac Linux ]\n'
-             '# tags: [ Debug ]\n'
-             '# results: [ Failure ]\n'
-             'crbug.com/123 [ Debug Mac10.10 ] userscripts/first-test.html [ Failure ]\n'
-             '[ Linux ] userscripts/first-test.html [ Failure ]\n'))
+        self.assertMultiLineEqual(new_expectations, (
+            '# tags: [ Mac10.10 Mac Linux ]\n'
+            '# tags: [ Debug ]\n'
+            '# results: [ Failure ]\n'
+            'crbug.com/123 [ Debug Mac10.10 ] userscripts/first-test.html [ Failure ]\n'
+            '[ Linux ] userscripts/first-test.html [ Failure ]\n'))
 
     def test_rebaseline_updates_expectations_file_all_platforms(self):
         self._write(self.test_expectations_path,
@@ -417,7 +526,8 @@
                      'userscripts/first-test.html [ Failure ]\n'))
         self._setup_mock_build_data()
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11'))
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Mac10.11'))
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
@@ -434,15 +544,17 @@
         # This test is just like test_rebaseline_updates_expectations_file_all_platforms(),
         # except that if a particular port happens to SKIP a test in an overrides file,
         # we count that as passing, and do not think that we still need to rebaseline it.
-        self._write(self.test_expectations_path,
-                    '# tags: [ Linux Mac10.10 Win ]\n# results: [ Failure ]\nuserscripts/first-test.html [ Failure ]\n')
-        self._write('NeverFixTests',
-                    ('# tags: [ Android ]\n'
-                     '# results: [ Skip ]\n'
-                     '[ Android ] userscripts [ Skip ]\n'))
+        self._write(
+            self.test_expectations_path,
+            '# tags: [ Linux Mac10.10 Win ]\n# results: [ Failure ]\nuserscripts/first-test.html [ Failure ]\n'
+        )
+        self._write('NeverFixTests', ('# tags: [ Android ]\n'
+                                      '# results: [ Skip ]\n'
+                                      '[ Android ] userscripts [ Skip ]\n'))
         self._setup_mock_build_data()
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11'))
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Mac10.11'))
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
@@ -469,7 +581,8 @@
                      '[ Win ] userscripts/first-test.html [ Skip ]\n'))
         self._setup_mock_build_data()
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11'))
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Mac10.11'))
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
@@ -491,7 +604,8 @@
                      '[ Win ] userscripts/first-test.html [ Failure Slow ]\n'))
         self._setup_mock_build_data()
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11'))
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Mac10.11'))
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
@@ -509,12 +623,15 @@
         # a test not being in the SmokeTests file, instead of using overrides files.
         # If a test is not part of the smoke tests, we count that as passing on ports that only
         # run smoke tests, and do not think that we still need to rebaseline it.
-        self._write(self.test_expectations_path,
-                    '# tags: [ Linux Mac10.10 Win ]\n# results: [ Failure ]\nuserscripts/first-test.html [ Failure ]\n')
+        self._write(
+            self.test_expectations_path,
+            '# tags: [ Linux Mac10.10 Win ]\n# results: [ Failure ]\nuserscripts/first-test.html [ Failure ]\n'
+        )
         self._write('SmokeTests', 'fast/html/article-element.html')
         self._setup_mock_build_data()
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11'))
+        test_baseline_set.add('userscripts/first-test.html',
+                              Build('MOCK Mac10.11'))
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
@@ -540,29 +657,35 @@
                      '[ Mac ] userscripts/skipped-test.html [ Skip ]\n'
                      '[ Win ] userscripts/skipped-test.html [ Skip ]\n'))
         self._write('userscripts/skipped-test.html', 'Dummy test contents')
-        self.tool.results_fetcher.set_results(Build('MOCK Mac10.11'), WebTestResults({
-            'tests': {
-                'userscripts': {
-                    'skipped-test.html': {
-                        'expected': 'SKIP',
-                        'actual': 'SKIP',
+        self.tool.results_fetcher.set_results(
+            Build('MOCK Mac10.11'),
+            WebTestResults({
+                'tests': {
+                    'userscripts': {
+                        'skipped-test.html': {
+                            'expected': 'SKIP',
+                            'actual': 'SKIP',
+                        }
                     }
                 }
-            }
-        }))
-        self.tool.results_fetcher.set_results(Build('MOCK Win7'), WebTestResults({
-            'tests': {
-                'userscripts': {
-                    'skipped-test.html': {
-                        'expected': 'SKIP',
-                        'actual': 'SKIP',
+            }))
+        self.tool.results_fetcher.set_results(
+            Build('MOCK Win7'),
+            WebTestResults({
+                'tests': {
+                    'userscripts': {
+                        'skipped-test.html': {
+                            'expected': 'SKIP',
+                            'actual': 'SKIP',
+                        }
                     }
                 }
-            }
-        }))
+            }))
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/skipped-test.html', Build('MOCK Mac10.11'))
-        test_baseline_set.add('userscripts/skipped-test.html', Build('MOCK Win7'))
+        test_baseline_set.add('userscripts/skipped-test.html',
+                              Build('MOCK Mac10.11'))
+        test_baseline_set.add('userscripts/skipped-test.html',
+                              Build('MOCK Win7'))
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
@@ -577,49 +700,60 @@
 
     def test_rebaseline_keeps_flaky_expectations(self):
         # Flaky expectations should be kept even if the test passes.
-        self._write(self.test_expectations_path,
-                    '# results: [ Pass Failure ]\nuserscripts/flaky-test.html [ Pass Failure ]\n')
+        self._write(
+            self.test_expectations_path,
+            '# results: [ Pass Failure ]\nuserscripts/flaky-test.html [ Pass Failure ]\n'
+        )
         self._write('userscripts/flaky-test.html', 'Dummy test contents')
-        self.tool.results_fetcher.set_results(Build('MOCK Mac10.11'), WebTestResults({
-            'tests': {
-                'userscripts': {
-                    'flaky-test.html': {
-                        'expected': 'PASS FAIL',
-                        'actual': 'PASS',
+        self.tool.results_fetcher.set_results(
+            Build('MOCK Mac10.11'),
+            WebTestResults({
+                'tests': {
+                    'userscripts': {
+                        'flaky-test.html': {
+                            'expected': 'PASS FAIL',
+                            'actual': 'PASS',
+                        }
                     }
                 }
-            }
-        }))
+            }))
         test_baseline_set = TestBaselineSet(self.tool)
-        test_baseline_set.add('userscripts/flaky-test.html', Build('MOCK Mac10.11'))
+        test_baseline_set.add('userscripts/flaky-test.html',
+                              Build('MOCK Mac10.11'))
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
         new_expectations = self._read(self.test_expectations_path)
         self.assertMultiLineEqual(
             new_expectations,
-            '# results: [ Pass Failure ]\nuserscripts/flaky-test.html [ Pass Failure ]\n')
+            '# results: [ Pass Failure ]\nuserscripts/flaky-test.html [ Pass Failure ]\n'
+        )
         self.assertEqual(self.tool.executive.calls, [])
 
     def test_rebaseline_test_passes_unexpectedly(self):
         # The test passes without any output. Its expectation should be updated
         # without calling rebaseline-test-internal.
-        self._write(self.test_expectations_path,
-                    '# tags: [ Linux Mac10.10 Win ]\n# results: [ Failure ]\nuserscripts/all-pass.html [ Failure ]\n')
+        self._write(
+            self.test_expectations_path,
+            '# tags: [ Linux Mac10.10 Win ]\n# results: [ Failure ]\nuserscripts/all-pass.html [ Failure ]\n'
+        )
         self._write('userscripts/all-pass.html', 'Dummy test contents')
         test_baseline_set = TestBaselineSet(self.tool)
-        self.tool.results_fetcher.set_results(Build('MOCK Mac10.11'), WebTestResults({
-            'tests': {
-                'userscripts': {
-                    'all-pass.html': {
-                        'expected': 'FAIL',
-                        'actual': 'PASS',
-                        'is_unexpected': True
+        self.tool.results_fetcher.set_results(
+            Build('MOCK Mac10.11'),
+            WebTestResults({
+                'tests': {
+                    'userscripts': {
+                        'all-pass.html': {
+                            'expected': 'FAIL',
+                            'actual': 'PASS',
+                            'is_unexpected': True
+                        }
                     }
                 }
-            }
-        }))
-        test_baseline_set.add('userscripts/all-pass.html', Build('MOCK Mac10.11'))
+            }))
+        test_baseline_set.add('userscripts/all-pass.html',
+                              Build('MOCK Mac10.11'))
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
@@ -636,22 +770,28 @@
     def test_rebaseline_test_passes_unexpectedly_everywhere(self):
         # Similar to test_rebaseline_test_passes_unexpectedly, except that the
         # test passes on all ports.
-        self._write(self.test_expectations_path,
-                    '# results: [ Failure ]\nuserscripts/all-pass.html [ Failure ]\n')
+        self._write(
+            self.test_expectations_path,
+            '# results: [ Failure ]\nuserscripts/all-pass.html [ Failure ]\n')
         self._write('userscripts/all-pass.html', 'Dummy test contents')
         test_baseline_set = TestBaselineSet(self.tool)
-        for builder in ['MOCK Win7', 'MOCK Win10', 'MOCK Mac10.10', 'MOCK Mac10.11', 'MOCK Precise', 'MOCK Trusty']:
-            self.tool.results_fetcher.set_results(Build(builder), WebTestResults({
-                'tests': {
-                    'userscripts': {
-                        'all-pass.html': {
-                            'expected': 'FAIL',
-                            'actual': 'PASS',
-                            'is_unexpected': True
+        for builder in [
+                'MOCK Win7', 'MOCK Win10', 'MOCK Mac10.10', 'MOCK Mac10.11',
+                'MOCK Precise', 'MOCK Trusty'
+        ]:
+            self.tool.results_fetcher.set_results(
+                Build(builder),
+                WebTestResults({
+                    'tests': {
+                        'userscripts': {
+                            'all-pass.html': {
+                                'expected': 'FAIL',
+                                'actual': 'PASS',
+                                'is_unexpected': True
+                            }
                         }
                     }
-                }
-            }))
+                }))
             test_baseline_set.add('userscripts/all-pass.html', Build(builder))
 
         self.command.rebaseline(self.options(), test_baseline_set)
@@ -665,28 +805,33 @@
         # build was run on a different port than the port we are rebaselining
         # (possible when rebaseline-cl --fill-missing), in which case we don't
         # update the expectations.
-        self._write(self.test_expectations_path,
-                    '# results: [ Failure ]\nuserscripts/all-pass.html [ Failure ]\n')
+        self._write(
+            self.test_expectations_path,
+            '# results: [ Failure ]\nuserscripts/all-pass.html [ Failure ]\n')
         self._write('userscripts/all-pass.html', 'Dummy test contents')
         test_baseline_set = TestBaselineSet(self.tool)
-        self.tool.results_fetcher.set_results(Build('MOCK Mac10.11'), WebTestResults({
-            'tests': {
-                'userscripts': {
-                    'all-pass.html': {
-                        'expected': 'FAIL',
-                        'actual': 'PASS',
-                        'is_unexpected': True
+        self.tool.results_fetcher.set_results(
+            Build('MOCK Mac10.11'),
+            WebTestResults({
+                'tests': {
+                    'userscripts': {
+                        'all-pass.html': {
+                            'expected': 'FAIL',
+                            'actual': 'PASS',
+                            'is_unexpected': True
+                        }
                     }
                 }
-            }
-        }))
-        test_baseline_set.add('userscripts/all-pass.html', Build('MOCK Mac10.11'), 'MOCK Mac10.10')
+            }))
+        test_baseline_set.add('userscripts/all-pass.html',
+                              Build('MOCK Mac10.11'), 'MOCK Mac10.10')
 
         self.command.rebaseline(self.options(), test_baseline_set)
 
         new_expectations = self._read(self.test_expectations_path)
         self.assertMultiLineEqual(
-            new_expectations, '# results: [ Failure ]\nuserscripts/all-pass.html [ Failure ]\n')
+            new_expectations,
+            '# results: [ Failure ]\nuserscripts/all-pass.html [ Failure ]\n')
         self.assertEqual(self.tool.executive.calls, [])
 
 
@@ -709,28 +854,38 @@
         # pylint: disable=protected-access
         self.command._builders_to_pull_from = lambda: ['MOCK Win7']
         self._setup_mock_build_data()
-        self.command.execute(self.options(), ['userscripts/first-test.html'], self.tool)
+        self.command.execute(self.options(), ['userscripts/first-test.html'],
+                             self.tool)
 
-        self.assertEqual(
-            self.tool.executive.calls,
-            [
-                [[
-                    'python', 'echo', 'copy-existing-baselines-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win7',
-                ]],
-                [[
-                    'python', 'echo', 'rebaseline-test-internal',
-                    '--verbose',
-                    '--test', 'userscripts/first-test.html',
-                    '--suffixes', 'txt,png',
-                    '--port-name', 'test-win-win7',
-                    '--builder', 'MOCK Win7',
-                    '--step-name', 'blink_web_tests (with patch)',
-                ]]
-            ])
+        self.assertEqual(self.tool.executive.calls,
+                         [[[
+                             'python',
+                             'echo',
+                             'copy-existing-baselines-internal',
+                             '--verbose',
+                             '--test',
+                             'userscripts/first-test.html',
+                             '--suffixes',
+                             'txt,png',
+                             '--port-name',
+                             'test-win-win7',
+                         ]],
+                          [[
+                              'python',
+                              'echo',
+                              'rebaseline-test-internal',
+                              '--verbose',
+                              '--test',
+                              'userscripts/first-test.html',
+                              '--suffixes',
+                              'txt,png',
+                              '--port-name',
+                              'test-win-win7',
+                              '--builder',
+                              'MOCK Win7',
+                              '--step-name',
+                              'blink_web_tests (with patch)',
+                          ]]])
 
     def test_rebaseline_directory(self):
         # pylint: disable=protected-access
@@ -739,50 +894,66 @@
         self._setup_mock_build_data()
         self.command.execute(self.options(), ['userscripts'], self.tool)
 
-        self.assertEqual(
-            self.tool.executive.calls,
-            [
-                [
-                    [
-                        'python', 'echo', 'copy-existing-baselines-internal',
-                        '--verbose',
-                        '--test', 'userscripts/first-test.html',
-                        '--suffixes', 'txt,png',
-                        '--port-name', 'test-win-win7',
-                    ],
-                    [
-                        'python', 'echo', 'copy-existing-baselines-internal',
-                        '--verbose',
-                        '--test', 'userscripts/second-test.html',
-                        '--suffixes', 'wav,png',
-                        '--port-name', 'test-win-win7',
-                    ]
-                ],
-                [
-                    [
-                        'python', 'echo', 'rebaseline-test-internal',
-                        '--verbose',
-                        '--test', 'userscripts/first-test.html',
-                        '--suffixes', 'txt,png',
-                        '--port-name', 'test-win-win7',
-                        '--builder', 'MOCK Win7',
-                        '--step-name', 'blink_web_tests (with patch)',
-                    ],
-                    [
-                        'python', 'echo', 'rebaseline-test-internal',
-                        '--verbose',
-                        '--test', 'userscripts/second-test.html',
-                        '--suffixes', 'wav,png',
-                        '--port-name', 'test-win-win7',
-                        '--builder', 'MOCK Win7',
-                        '--step-name', 'blink_web_tests (with patch)',
-                    ]
-                ]
-            ])
+        self.assertEqual(self.tool.executive.calls,
+                         [[[
+                             'python',
+                             'echo',
+                             'copy-existing-baselines-internal',
+                             '--verbose',
+                             '--test',
+                             'userscripts/first-test.html',
+                             '--suffixes',
+                             'txt,png',
+                             '--port-name',
+                             'test-win-win7',
+                         ],
+                           [
+                               'python',
+                               'echo',
+                               'copy-existing-baselines-internal',
+                               '--verbose',
+                               '--test',
+                               'userscripts/second-test.html',
+                               '--suffixes',
+                               'wav,png',
+                               '--port-name',
+                               'test-win-win7',
+                           ]],
+                          [[
+                              'python',
+                              'echo',
+                              'rebaseline-test-internal',
+                              '--verbose',
+                              '--test',
+                              'userscripts/first-test.html',
+                              '--suffixes',
+                              'txt,png',
+                              '--port-name',
+                              'test-win-win7',
+                              '--builder',
+                              'MOCK Win7',
+                              '--step-name',
+                              'blink_web_tests (with patch)',
+                          ],
+                           [
+                               'python',
+                               'echo',
+                               'rebaseline-test-internal',
+                               '--verbose',
+                               '--test',
+                               'userscripts/second-test.html',
+                               '--suffixes',
+                               'wav,png',
+                               '--port-name',
+                               'test-win-win7',
+                               '--builder',
+                               'MOCK Win7',
+                               '--step-name',
+                               'blink_web_tests (with patch)',
+                           ]]])
 
 
 class TestBaselineSetTest(unittest.TestCase):
-
     def setUp(self):
         host = MockBlinkTool()
         host.port_factory = MockPortFactory(host)
@@ -792,9 +963,18 @@
         host.filesystem.write_text_file(base_dir + '/a/y.html', '<html>')
         host.filesystem.write_text_file(base_dir + '/a/z.html', '<html>')
         host.builders = BuilderList({
-            'MOCK Mac10.12': {'port_name': 'test-mac-mac10.12', 'specifiers': ['Mac10.12', 'Release']},
-            'MOCK Trusty': {'port_name': 'test-linux-trusty', 'specifiers': ['Trusty', 'Release']},
-            'MOCK Win10': {'port_name': 'test-win-win10', 'specifiers': ['Win10', 'Release']},
+            'MOCK Mac10.12': {
+                'port_name': 'test-mac-mac10.12',
+                'specifiers': ['Mac10.12', 'Release']
+            },
+            'MOCK Trusty': {
+                'port_name': 'test-linux-trusty',
+                'specifiers': ['Trusty', 'Release']
+            },
+            'MOCK Win10': {
+                'port_name': 'test-win-win10',
+                'specifiers': ['Win10', 'Release']
+            },
         })
         self.host = host
 
@@ -803,15 +983,18 @@
         test_baseline_set.add('a', Build('MOCK Trusty'))
         test_baseline_set.add('a/z.html', Build('MOCK Win10'))
         self.assertEqual(
-            list(test_baseline_set),
-            [
-                ('a/x.html', Build(builder_name='MOCK Trusty'), 'test-linux-trusty'),
-                ('a/y.html', Build(builder_name='MOCK Trusty'), 'test-linux-trusty'),
-                ('a/z.html', Build(builder_name='MOCK Trusty'), 'test-linux-trusty'),
-                ('a/z.html', Build(builder_name='MOCK Win10'), 'test-win-win10'),
+            list(test_baseline_set), [
+                ('a/x.html', Build(builder_name='MOCK Trusty'),
+                 'test-linux-trusty'),
+                ('a/y.html', Build(builder_name='MOCK Trusty'),
+                 'test-linux-trusty'),
+                ('a/z.html', Build(builder_name='MOCK Trusty'),
+                 'test-linux-trusty'),
+                ('a/z.html', Build(builder_name='MOCK Win10'),
+                 'test-win-win10'),
             ])
-        self.assertEqual(
-            test_baseline_set.all_tests(), ['a/x.html', 'a/y.html', 'a/z.html'])
+        self.assertEqual(test_baseline_set.all_tests(),
+                         ['a/x.html', 'a/y.html', 'a/z.html'])
 
     def test_str_empty(self):
         test_baseline_set = TestBaselineSet(host=self.host)
@@ -825,7 +1008,8 @@
             str(test_baseline_set),
             ('<TestBaselineSet with:\n'
              '  a/x.html: Build(builder_name=\'MOCK Mac10.12\', build_number=None), test-mac-mac10.12\n'
-             '  a/x.html: Build(builder_name=\'MOCK Win10\', build_number=None), test-win-win10>'))
+             '  a/x.html: Build(builder_name=\'MOCK Win10\', build_number=None), test-win-win10>'
+             ))
 
     def test_getters(self):
         test_baseline_set = TestBaselineSet(host=self.host)
@@ -834,7 +1018,5 @@
         self.assertEqual(test_baseline_set.test_prefixes(), ['a/x.html'])
         self.assertEqual(
             test_baseline_set.build_port_pairs('a/x.html'),
-            [
-                (Build(builder_name='MOCK Mac10.12'), 'test-mac-mac10.12'),
-                (Build(builder_name='MOCK Win10'), 'test-win-win10')
-            ])
+            [(Build(builder_name='MOCK Mac10.12'), 'test-mac-mac10.12'),
+             (Build(builder_name='MOCK Win10'), 'test-win-win10')])
diff --git a/third_party/blink/tools/blinkpy/tool/grammar.py b/third_party/blink/tools/blinkpy/tool/grammar.py
index bd253be..506236e 100644
--- a/third_party/blink/tools/blinkpy/tool/grammar.py
+++ b/third_party/blink/tools/blinkpy/tool/grammar.py
@@ -44,11 +44,15 @@
     return '%d %s' % (count, noun)
 
 
-def join_with_separators(list_of_strings, separator=', ', only_two_separator=' and ', last_separator=', and '):
+def join_with_separators(list_of_strings,
+                         separator=', ',
+                         only_two_separator=' and ',
+                         last_separator=', and '):
     if not list_of_strings:
         return ''
     if len(list_of_strings) == 1:
         return list_of_strings[0]
     if len(list_of_strings) == 2:
         return only_two_separator.join(list_of_strings)
-    return '%s%s%s' % (separator.join(list_of_strings[:-1]), last_separator, list_of_strings[-1])
+    return '%s%s%s' % (separator.join(list_of_strings[:-1]), last_separator,
+                       list_of_strings[-1])
diff --git a/third_party/blink/tools/blinkpy/tool/grammar_unittest.py b/third_party/blink/tools/blinkpy/tool/grammar_unittest.py
index 3e7aa1b..4af8fb44 100644
--- a/third_party/blink/tools/blinkpy/tool/grammar_unittest.py
+++ b/third_party/blink/tools/blinkpy/tool/grammar_unittest.py
@@ -32,26 +32,19 @@
 
 
 class GrammarTest(unittest.TestCase):
-
     def test_join_with_separators_zero(self):
-        self.assertEqual(
-            '',
-            grammar.join_with_separators([]))
+        self.assertEqual('', grammar.join_with_separators([]))
 
     def test_join_with_separators_one(self):
-        self.assertEqual(
-            'one',
-            grammar.join_with_separators(['one']))
+        self.assertEqual('one', grammar.join_with_separators(['one']))
 
     def test_join_with_separators_two(self):
-        self.assertEqual(
-            'one and two',
-            grammar.join_with_separators(['one', 'two']))
+        self.assertEqual('one and two',
+                         grammar.join_with_separators(['one', 'two']))
 
     def test_join_with_separators_three(self):
-        self.assertEqual(
-            'one, two, and three',
-            grammar.join_with_separators(['one', 'two', 'three']))
+        self.assertEqual('one, two, and three',
+                         grammar.join_with_separators(['one', 'two', 'three']))
 
     def test_pluralize_zero(self):
         self.assertEqual('0 tests', grammar.pluralize('test', 0))
diff --git a/third_party/blink/tools/blinkpy/tool/mock_tool.py b/third_party/blink/tools/blinkpy/tool/mock_tool.py
index 0c6db05..ba2451cf 100644
--- a/third_party/blink/tools/blinkpy/tool/mock_tool.py
+++ b/third_party/blink/tools/blinkpy/tool/mock_tool.py
@@ -30,7 +30,6 @@
 
 
 class MockBlinkTool(MockHost):
-
     def __init__(self, *args, **kwargs):
         MockHost.__init__(self, *args, **kwargs)
 
diff --git a/third_party/blink/tools/blinkpy/w3c/.style.yapf b/third_party/blink/tools/blinkpy/w3c/.style.yapf
new file mode 100644
index 0000000..557fa7b
--- /dev/null
+++ b/third_party/blink/tools/blinkpy/w3c/.style.yapf
@@ -0,0 +1,2 @@
+[style]
+based_on_style = pep8
diff --git a/third_party/blink/tools/blinkpy/w3c/chromium_commit.py b/third_party/blink/tools/blinkpy/w3c/chromium_commit.py
index f0282d0..b443b2a 100644
--- a/third_party/blink/tools/blinkpy/w3c/chromium_commit.py
+++ b/third_party/blink/tools/blinkpy/w3c/chromium_commit.py
@@ -8,7 +8,6 @@
 
 
 class ChromiumCommit(object):
-
     def __init__(self, host, sha=None, position=None):
         """Initializes a ChomiumCommit object, given a sha or commit position.
 
@@ -52,20 +51,21 @@
 
         It is inclusive of this commit and of the latest commit.
         """
-        return len(self.host.executive.run_command([
-            'git', 'rev-list', '{}..origin/master'.format(self.sha)
-        ], cwd=self.absolute_chromium_dir).splitlines())
+        return len(
+            self.host.executive.run_command(
+                ['git', 'rev-list', '{}..origin/master'.format(self.sha)],
+                cwd=self.absolute_chromium_dir).splitlines())
 
     def position_to_sha(self, commit_position):
-        return self.host.executive.run_command([
-            'git', 'crrev-parse', commit_position
-        ], cwd=self.absolute_chromium_dir).strip()
+        return self.host.executive.run_command(
+            ['git', 'crrev-parse', commit_position],
+            cwd=self.absolute_chromium_dir).strip()
 
     def sha_to_position(self, sha):
         try:
-            return self.host.executive.run_command([
-                'git', 'footers', '--position', sha
-            ], cwd=self.absolute_chromium_dir).strip()
+            return self.host.executive.run_command(
+                ['git', 'footers', '--position', sha],
+                cwd=self.absolute_chromium_dir).strip()
         except ScriptError as e:
             # Commits from Gerrit CLs that have not yet been committed in
             # Chromium do not have a commit position.
@@ -75,38 +75,40 @@
                 raise
 
     def subject(self):
-        return self.host.executive.run_command([
-            'git', 'show', '--format=%s', '--no-patch', self.sha
-        ], cwd=self.absolute_chromium_dir).strip()
+        return self.host.executive.run_command(
+            ['git', 'show', '--format=%s', '--no-patch', self.sha],
+            cwd=self.absolute_chromium_dir).strip()
 
     def body(self):
-        return self.host.executive.run_command([
-            'git', 'show', '--format=%b', '--no-patch', self.sha
-        ], cwd=self.absolute_chromium_dir)
+        return self.host.executive.run_command(
+            ['git', 'show', '--format=%b', '--no-patch', self.sha],
+            cwd=self.absolute_chromium_dir)
 
     def author(self):
-        return self.host.executive.run_command([
-            'git', 'show', '--format=%aN <%aE>', '--no-patch', self.sha
-        ], cwd=self.absolute_chromium_dir).strip()
+        return self.host.executive.run_command(
+            ['git', 'show', '--format=%aN <%aE>', '--no-patch', self.sha],
+            cwd=self.absolute_chromium_dir).strip()
 
     def message(self):
         """Returns a string with a commit's subject and body."""
-        return self.host.executive.run_command([
-            'git', 'show', '--format=%B', '--no-patch', self.sha
-        ], cwd=self.absolute_chromium_dir)
+        return self.host.executive.run_command(
+            ['git', 'show', '--format=%B', '--no-patch', self.sha],
+            cwd=self.absolute_chromium_dir)
 
     def change_id(self):
         """Returns the Change-Id footer if it is present."""
-        return self.host.executive.run_command([
-            'git', 'footers', '--key', 'Change-Id', self.sha
-        ], cwd=self.absolute_chromium_dir).strip()
+        return self.host.executive.run_command(
+            ['git', 'footers', '--key', 'Change-Id', self.sha],
+            cwd=self.absolute_chromium_dir).strip()
 
     def filtered_changed_files(self):
         """Returns a list of modified exportable files."""
-        changed_files = self.host.executive.run_command([
-            'git', 'diff-tree', '--name-only', '--no-commit-id', '-r', self.sha,
-            '--', self.absolute_chromium_wpt_dir
-        ], cwd=self.absolute_chromium_dir).splitlines()
+        changed_files = self.host.executive.run_command(
+            [
+                'git', 'diff-tree', '--name-only', '--no-commit-id', '-r',
+                self.sha, '--', self.absolute_chromium_wpt_dir
+            ],
+            cwd=self.absolute_chromium_dir).splitlines()
         return [f for f in changed_files if is_file_exportable(f)]
 
     def format_patch(self):
@@ -116,9 +118,10 @@
         if not filtered_files:
             return ''
 
-        return self.host.executive.run_command([
-            'git', 'format-patch', '-1', '--stdout', self.sha, '--'
-        ] + filtered_files, cwd=self.absolute_chromium_dir)
+        return self.host.executive.run_command(
+            ['git', 'format-patch', '-1', '--stdout', self.sha, '--'] +
+            filtered_files,
+            cwd=self.absolute_chromium_dir)
 
     def url(self):
         """Returns a URL to view more information about this commit."""
diff --git a/third_party/blink/tools/blinkpy/w3c/chromium_commit_mock.py b/third_party/blink/tools/blinkpy/w3c/chromium_commit_mock.py
index e21d149..1f1e3269 100644
--- a/third_party/blink/tools/blinkpy/w3c/chromium_commit_mock.py
+++ b/third_party/blink/tools/blinkpy/w3c/chromium_commit_mock.py
@@ -6,8 +6,8 @@
 
 
 class MockChromiumCommit(object):
-
-    def __init__(self, host,
+    def __init__(self,
+                 host,
                  position='refs/heads/master@{#123}',
                  change_id='Iba5eba11',
                  author='Fake author',
diff --git a/third_party/blink/tools/blinkpy/w3c/chromium_commit_unittest.py b/third_party/blink/tools/blinkpy/w3c/chromium_commit_unittest.py
index 5a2a903..9bd3ce2c 100644
--- a/third_party/blink/tools/blinkpy/w3c/chromium_commit_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/chromium_commit_unittest.py
@@ -14,41 +14,48 @@
 
 
 class ChromiumCommitTest(unittest.TestCase):
-
     def test_validates_sha(self):
         with self.assertRaises(AssertionError):
             ChromiumCommit(MockHost(), sha='rutabaga')
 
     def test_derives_sha_from_position(self):
         host = MockHost()
-        host.executive = MockExecutive(output='c881563d734a86f7d9cd57ac509653a61c45c240')
+        host.executive = MockExecutive(
+            output='c881563d734a86f7d9cd57ac509653a61c45c240')
         pos = 'Cr-Commit-Position: refs/heads/master@{#789}'
         chromium_commit = ChromiumCommit(host, position=pos)
 
         self.assertEqual(chromium_commit.position, 'refs/heads/master@{#789}')
-        self.assertEqual(chromium_commit.sha, 'c881563d734a86f7d9cd57ac509653a61c45c240')
+        self.assertEqual(chromium_commit.sha,
+                         'c881563d734a86f7d9cd57ac509653a61c45c240')
 
     def test_derives_position_from_sha(self):
         host = MockHost()
         host.executive = mock_git_commands({
-            'footers': 'refs/heads/master@{#789}'
+            'footers':
+            'refs/heads/master@{#789}'
         })
-        chromium_commit = ChromiumCommit(host, sha='c881563d734a86f7d9cd57ac509653a61c45c240')
+        chromium_commit = ChromiumCommit(
+            host, sha='c881563d734a86f7d9cd57ac509653a61c45c240')
 
         self.assertEqual(chromium_commit.position, 'refs/heads/master@{#789}')
-        self.assertEqual(chromium_commit.sha, 'c881563d734a86f7d9cd57ac509653a61c45c240')
+        self.assertEqual(chromium_commit.sha,
+                         'c881563d734a86f7d9cd57ac509653a61c45c240')
 
     def test_when_commit_has_no_position(self):
         host = MockHost()
 
         def run_command(_):
-            raise ScriptError('Unable to infer commit position from footers rutabaga')
+            raise ScriptError(
+                'Unable to infer commit position from footers rutabaga')
 
         host.executive = MockExecutive(run_command_fn=run_command)
-        chromium_commit = ChromiumCommit(host, sha='c881563d734a86f7d9cd57ac509653a61c45c240')
+        chromium_commit = ChromiumCommit(
+            host, sha='c881563d734a86f7d9cd57ac509653a61c45c240')
 
         self.assertEqual(chromium_commit.position, 'no-commit-position-yet')
-        self.assertEqual(chromium_commit.sha, 'c881563d734a86f7d9cd57ac509653a61c45c240')
+        self.assertEqual(chromium_commit.sha,
+                         'c881563d734a86f7d9cd57ac509653a61c45c240')
 
     def test_filtered_changed_files_blacklist(self):
         host = MockHost()
@@ -57,8 +64,10 @@
         qualified_fake_files = [CHROMIUM_WPT_DIR + f for f in fake_files]
 
         host.executive = mock_git_commands({
-            'diff-tree': '\n'.join(qualified_fake_files),
-            'crrev-parse': 'c881563d734a86f7d9cd57ac509653a61c45c240',
+            'diff-tree':
+            '\n'.join(qualified_fake_files),
+            'crrev-parse':
+            'c881563d734a86f7d9cd57ac509653a61c45c240',
         })
 
         position_footer = 'Cr-Commit-Position: refs/heads/master@{#789}'
@@ -67,7 +76,9 @@
         files = chromium_commit.filtered_changed_files()
 
         expected_files = ['file1', 'file3']
-        qualified_expected_files = [CHROMIUM_WPT_DIR + f for f in expected_files]
+        qualified_expected_files = [
+            CHROMIUM_WPT_DIR + f for f in expected_files
+        ]
 
         self.assertEqual(files, qualified_expected_files)
 
diff --git a/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits.py b/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits.py
index f886be2..09adf83 100644
--- a/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits.py
+++ b/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits.py
@@ -6,7 +6,6 @@
 from blinkpy.w3c.chromium_finder import absolute_chromium_dir
 from blinkpy.w3c.common import CHROMIUM_WPT_DIR
 
-
 DEFAULT_COMMIT_HISTORY_WINDOW = 10000
 SKIPPED_REVISIONS = [
     # The great blink mv: https://crbug.com/843412#c13
@@ -15,8 +14,12 @@
 
 
 def exportable_commits_over_last_n_commits(
-        host, local_wpt, wpt_github, number=DEFAULT_COMMIT_HISTORY_WINDOW,
-        require_clean=True, verify_merged_pr=False):
+        host,
+        local_wpt,
+        wpt_github,
+        number=DEFAULT_COMMIT_HISTORY_WINDOW,
+        require_clean=True,
+        verify_merged_pr=False):
     """Lists exportable commits after a certain point.
 
     Exportable commits contain changes in the wpt directory and have not been
@@ -48,11 +51,16 @@
         cleanly, both in chronological order.
     """
     start_commit = 'HEAD~{}'.format(number + 1)
-    return _exportable_commits_since(start_commit, host, local_wpt, wpt_github, require_clean, verify_merged_pr)
+    return _exportable_commits_since(start_commit, host, local_wpt, wpt_github,
+                                     require_clean, verify_merged_pr)
 
 
-def _exportable_commits_since(chromium_commit_hash, host, local_wpt, wpt_github,
-                              require_clean=True, verify_merged_pr=False):
+def _exportable_commits_since(chromium_commit_hash,
+                              host,
+                              local_wpt,
+                              wpt_github,
+                              require_clean=True,
+                              verify_merged_pr=False):
     """Lists exportable commits after the given commit.
 
     Args:
@@ -61,33 +69,41 @@
 
     Return values and remaining arguments are the same as exportable_commits_over_last_n_commits.
     """
-    chromium_repo_root = host.executive.run_command([
-        'git', 'rev-parse', '--show-toplevel'
-    ], cwd=absolute_chromium_dir(host)).strip()
+    chromium_repo_root = host.executive.run_command(
+        ['git', 'rev-parse', '--show-toplevel'],
+        cwd=absolute_chromium_dir(host)).strip()
 
     wpt_path = chromium_repo_root + '/' + CHROMIUM_WPT_DIR
     commit_range = '{}..HEAD'.format(chromium_commit_hash)
     skipped_revs = ['^' + rev for rev in SKIPPED_REVISIONS]
-    command = ['git', 'rev-list', commit_range] + skipped_revs + ['--reverse', '--', wpt_path]
-    commit_hashes = host.executive.run_command(command, cwd=absolute_chromium_dir(host)).splitlines()
+    command = (['git', 'rev-list', commit_range] + skipped_revs +
+               ['--reverse', '--', wpt_path])
+    commit_hashes = host.executive.run_command(
+        command, cwd=absolute_chromium_dir(host)).splitlines()
     chromium_commits = [ChromiumCommit(host, sha=sha) for sha in commit_hashes]
     exportable_commits = []
     errors = []
     for commit in chromium_commits:
-        state, error = get_commit_export_state(commit, local_wpt, wpt_github, verify_merged_pr)
+        state, error = get_commit_export_state(commit, local_wpt, wpt_github,
+                                               verify_merged_pr)
         if require_clean:
             success = state == CommitExportState.EXPORTABLE_CLEAN
         else:
-            success = state in (CommitExportState.EXPORTABLE_CLEAN, CommitExportState.EXPORTABLE_DIRTY)
+            success = state in (CommitExportState.EXPORTABLE_CLEAN,
+                                CommitExportState.EXPORTABLE_DIRTY)
         if success:
             exportable_commits.append(commit)
         elif error != '':
-            errors.append('The following commit did not apply cleanly:\nSubject: %s (%s)\n%s' %
-                          (commit.subject(), commit.url(), error))
+            errors.append(
+                'The following commit did not apply cleanly:\nSubject: %s (%s)\n%s' % \
+                    (commit.subject(), commit.url(), error))
     return exportable_commits, errors
 
 
-def get_commit_export_state(chromium_commit, local_wpt, wpt_github, verify_merged_pr=False):
+def get_commit_export_state(chromium_commit,
+                            local_wpt,
+                            wpt_github,
+                            verify_merged_pr=False):
     """Determines the exportability state of a Chromium commit.
 
     Args:
@@ -111,14 +127,17 @@
     if not patch:
         return CommitExportState.NO_PATCH, ''
 
-    if _is_commit_exported(chromium_commit, local_wpt, wpt_github, verify_merged_pr):
+    if _is_commit_exported(chromium_commit, local_wpt, wpt_github,
+                           verify_merged_pr):
         return CommitExportState.EXPORTED, ''
 
     success, error = local_wpt.test_patch(patch)
-    return (CommitExportState.EXPORTABLE_CLEAN, '') if success else (CommitExportState.EXPORTABLE_DIRTY, error)
+    return ((CommitExportState.EXPORTABLE_CLEAN, '') if success else
+            (CommitExportState.EXPORTABLE_DIRTY, error))
 
 
-def _is_commit_exported(chromium_commit, local_wpt, wpt_github, verify_merged_pr):
+def _is_commit_exported(chromium_commit, local_wpt, wpt_github,
+                        verify_merged_pr):
     pull_request = wpt_github.pr_for_chromium_commit(chromium_commit)
     if not pull_request or pull_request.state != 'closed':
         return False
@@ -139,8 +158,9 @@
 
     # PR is merged, and we need to verify that local WPT contains the commit.
     change_id = chromium_commit.change_id()
-    found_in_upstream = (local_wpt.seek_change_id(change_id) if change_id
-                         else local_wpt.seek_commit_position(chromium_commit.position))
+    found_in_upstream = (local_wpt.seek_change_id(change_id)
+                         if change_id else local_wpt.seek_commit_position(
+                             chromium_commit.position))
     return found_in_upstream
 
 
diff --git a/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits_unittest.py b/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits_unittest.py
index c2e1fe83..df8c421 100644
--- a/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/chromium_exportable_commits_unittest.py
@@ -10,10 +10,7 @@
 from blinkpy.w3c.chromium_commit import ChromiumCommit
 from blinkpy.w3c.chromium_commit_mock import MockChromiumCommit
 from blinkpy.w3c.chromium_exportable_commits import (
-    _exportable_commits_since,
-    get_commit_export_state,
-    CommitExportState
-)
+    _exportable_commits_since, get_commit_export_state, CommitExportState)
 from blinkpy.w3c.local_wpt_mock import MockLocalWPT
 from blinkpy.w3c.wpt_github import PullRequest
 from blinkpy.w3c.wpt_github_mock import MockWPTGitHub
@@ -26,42 +23,71 @@
     def test_exportable_commits_since(self):
         host = MockHost()
         host.executive = mock_git_commands({
-            'show': 'fake message',
-            'rev-list': 'add087a97844f4b9e307d9a216940582d96db306',
-            'rev-parse': '/mock-checkout/src',
-            'crrev-parse': 'add087a97844f4b9e307d9a216940582d96db306',
-            'diff': 'fake diff',
+            'show':
+            'fake message',
+            'rev-list':
+            'add087a97844f4b9e307d9a216940582d96db306',
+            'rev-parse':
+            '/mock-checkout/src',
+            'crrev-parse':
+            'add087a97844f4b9e307d9a216940582d96db306',
+            'diff':
+            'fake diff',
             'diff-tree': (RELATIVE_WEB_TESTS + 'external/wpt/some\n' +
                           RELATIVE_WEB_TESTS + 'external/wpt/files'),
-            'format-patch': 'hey I\'m a patch',
-            'footers': 'cr-rev-position',
-        }, strict=True)
+            'format-patch':
+            'hey I\'m a patch',
+            'footers':
+            'cr-rev-position',
+        },
+                                           strict=True)
 
         commits, _ = _exportable_commits_since(
-            'beefcafe', host, MockLocalWPT(test_patch=[(True, '')]), MockWPTGitHub(pull_requests=[]))
+            'beefcafe', host, MockLocalWPT(test_patch=[(True, '')]),
+            MockWPTGitHub(pull_requests=[]))
         self.assertEqual(len(commits), 1)
         self.assertIsInstance(commits[0], ChromiumCommit)
         self.assertEqual(host.executive.calls, [
             ['git', 'rev-parse', '--show-toplevel'],
-            ['git', 'rev-list', 'beefcafe..HEAD', '^77578ccb4082ae20a9326d9e673225f1189ebb63',
-             '--reverse', '--', '/mock-checkout/src/' + RELATIVE_WEB_TESTS + 'external/wpt/'],
-            ['git', 'footers', '--position', 'add087a97844f4b9e307d9a216940582d96db306'],
-            ['git', 'show', '--format=%B', '--no-patch', 'add087a97844f4b9e307d9a216940582d96db306'],
-            ['git', 'diff-tree', '--name-only', '--no-commit-id', '-r', 'add087a97844f4b9e307d9a216940582d96db306', '--',
-             '/mock-checkout/' + RELATIVE_WEB_TESTS + 'external/wpt'],
-            ['git', 'format-patch', '-1', '--stdout', 'add087a97844f4b9e307d9a216940582d96db306', '--',
-             RELATIVE_WEB_TESTS + 'external/wpt/some', RELATIVE_WEB_TESTS + 'external/wpt/files'],
+            [
+                'git', 'rev-list', 'beefcafe..HEAD',
+                '^77578ccb4082ae20a9326d9e673225f1189ebb63', '--reverse', '--',
+                '/mock-checkout/src/' + RELATIVE_WEB_TESTS + 'external/wpt/'
+            ],
+            [
+                'git', 'footers', '--position',
+                'add087a97844f4b9e307d9a216940582d96db306'
+            ],
+            [
+                'git', 'show', '--format=%B', '--no-patch',
+                'add087a97844f4b9e307d9a216940582d96db306'
+            ],
+            [
+                'git', 'diff-tree', '--name-only', '--no-commit-id', '-r',
+                'add087a97844f4b9e307d9a216940582d96db306', '--',
+                '/mock-checkout/' + RELATIVE_WEB_TESTS + 'external/wpt'
+            ],
+            [
+                'git', 'format-patch', '-1', '--stdout',
+                'add087a97844f4b9e307d9a216940582d96db306', '--',
+                RELATIVE_WEB_TESTS + 'external/wpt/some',
+                RELATIVE_WEB_TESTS + 'external/wpt/files'
+            ],
         ])
 
     def test_exportable_commits_since_require_clean_by_default(self):
         host = MockHost()
         host.executive = mock_git_commands({
-            'diff-tree': RELATIVE_WEB_TESTS + 'external/wpt/some_files',
-            'footers': 'cr-rev-position',
-            'format-patch': 'hey I\'m a patch',
-            'rev-list': 'add087a97844f4b9e307d9a216940582d96db306\n'
-                        'add087a97844f4b9e307d9a216940582d96db307\n'
-                        'add087a97844f4b9e307d9a216940582d96db308\n'
+            'diff-tree':
+            RELATIVE_WEB_TESTS + 'external/wpt/some_files',
+            'footers':
+            'cr-rev-position',
+            'format-patch':
+            'hey I\'m a patch',
+            'rev-list':
+            'add087a97844f4b9e307d9a216940582d96db306\n'
+            'add087a97844f4b9e307d9a216940582d96db307\n'
+            'add087a97844f4b9e307d9a216940582d96db308\n'
         })
         local_wpt = MockLocalWPT(test_patch=[
             (True, ''),
@@ -69,19 +95,23 @@
             (True, ''),
         ])
 
-        commits, _ = _exportable_commits_since(
-            'beefcafe', host, local_wpt, MockWPTGitHub(pull_requests=[]))
+        commits, _ = _exportable_commits_since('beefcafe', host, local_wpt,
+                                               MockWPTGitHub(pull_requests=[]))
         self.assertEqual(len(commits), 2)
 
     def test_exportable_commits_since_not_require_clean(self):
         host = MockHost()
         host.executive = mock_git_commands({
-            'diff-tree': RELATIVE_WEB_TESTS + 'external/wpt/some_files',
-            'footers': 'cr-rev-position',
-            'format-patch': 'hey I\'m a patch',
-            'rev-list': 'add087a97844f4b9e307d9a216940582d96db306\n'
-                        'add087a97844f4b9e307d9a216940582d96db307\n'
-                        'add087a97844f4b9e307d9a216940582d96db308\n'
+            'diff-tree':
+            RELATIVE_WEB_TESTS + 'external/wpt/some_files',
+            'footers':
+            'cr-rev-position',
+            'format-patch':
+            'hey I\'m a patch',
+            'rev-list':
+            'add087a97844f4b9e307d9a216940582d96db306\n'
+            'add087a97844f4b9e307d9a216940582d96db307\n'
+            'add087a97844f4b9e307d9a216940582d96db308\n'
         })
         local_wpt = MockLocalWPT(test_patch=[
             (True, ''),
@@ -90,63 +120,96 @@
         ])
 
         commits, _ = _exportable_commits_since(
-            'beefcafe', host, local_wpt, MockWPTGitHub(pull_requests=[]), require_clean=False)
+            'beefcafe',
+            host,
+            local_wpt,
+            MockWPTGitHub(pull_requests=[]),
+            require_clean=False)
         self.assertEqual(len(commits), 3)
 
     def test_get_commit_export_state(self):
         commit = MockChromiumCommit(MockHost())
         github = MockWPTGitHub(pull_requests=[])
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(test_patch=[(True, '')]), github),
-                         (CommitExportState.EXPORTABLE_CLEAN, ''))
+        self.assertEqual(
+            get_commit_export_state(commit,
+                                    MockLocalWPT(test_patch=[(True, '')]),
+                                    github),
+            (CommitExportState.EXPORTABLE_CLEAN, ''))
 
     def test_commit_with_noexport_is_not_exportable(self):
         # Patch is not tested if the commit is ignored based on the message, hence empty MockLocalWPT.
 
-        commit = MockChromiumCommit(MockHost(), body='Message\nNo-Export: true')
+        commit = MockChromiumCommit(
+            MockHost(), body='Message\nNo-Export: true')
         github = MockWPTGitHub(pull_requests=[])
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(), github), (CommitExportState.IGNORED, ''))
+        self.assertEqual(
+            get_commit_export_state(commit, MockLocalWPT(), github),
+            (CommitExportState.IGNORED, ''))
 
         # The older NOEXPORT tag also makes it non-exportable.
-        old_commit = MockChromiumCommit(MockHost(), body='Message\nNOEXPORT=true')
-        self.assertEqual(get_commit_export_state(old_commit, MockLocalWPT(), github), (CommitExportState.IGNORED, ''))
+        old_commit = MockChromiumCommit(
+            MockHost(), body='Message\nNOEXPORT=true')
+        self.assertEqual(
+            get_commit_export_state(old_commit, MockLocalWPT(), github),
+            (CommitExportState.IGNORED, ''))
 
         # No-Export/NOEXPORT in a revert CL also makes it non-exportable.
-        revert = MockChromiumCommit(MockHost(), body='Revert of Message\n> No-Export: true')
-        self.assertEqual(get_commit_export_state(revert, MockLocalWPT(), github), (CommitExportState.IGNORED, ''))
-        old_revert = MockChromiumCommit(MockHost(), body='Revert of Message\n> NOEXPORT=true')
-        self.assertEqual(get_commit_export_state(old_revert, MockLocalWPT(), github), (CommitExportState.IGNORED, ''))
+        revert = MockChromiumCommit(
+            MockHost(), body='Revert of Message\n> No-Export: true')
+        self.assertEqual(
+            get_commit_export_state(revert, MockLocalWPT(), github),
+            (CommitExportState.IGNORED, ''))
+        old_revert = MockChromiumCommit(
+            MockHost(), body='Revert of Message\n> NOEXPORT=true')
+        self.assertEqual(
+            get_commit_export_state(old_revert, MockLocalWPT(), github),
+            (CommitExportState.IGNORED, ''))
 
     def test_commit_with_noexport_is_not_exportable_mixed_casing(self):
         # Patch is not tested if the commit is ignored based on the message, hence empty MockLocalWPT.
         # Make sure that the casing of the "No export" message isn't considered.
 
-        commit = MockChromiumCommit(MockHost(), body='Message\nno-EXPORT: true')
+        commit = MockChromiumCommit(
+            MockHost(), body='Message\nno-EXPORT: true')
         github = MockWPTGitHub(pull_requests=[])
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(), github), (CommitExportState.IGNORED, ''))
+        self.assertEqual(
+            get_commit_export_state(commit, MockLocalWPT(), github),
+            (CommitExportState.IGNORED, ''))
 
         commit = MockChromiumCommit(MockHost(), body='Message\nnoexport=TRUE')
         github = MockWPTGitHub(pull_requests=[])
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(), github), (CommitExportState.IGNORED, ''))
+        self.assertEqual(
+            get_commit_export_state(commit, MockLocalWPT(), github),
+            (CommitExportState.IGNORED, ''))
 
-        commit = MockChromiumCommit(MockHost(), body='Message\nNO-exPORT: trUE')
+        commit = MockChromiumCommit(
+            MockHost(), body='Message\nNO-exPORT: trUE')
         github = MockWPTGitHub(pull_requests=[])
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(), github), (CommitExportState.IGNORED, ''))
+        self.assertEqual(
+            get_commit_export_state(commit, MockLocalWPT(), github),
+            (CommitExportState.IGNORED, ''))
 
     # "Import" in commit message doesn't by itself make a commit exportable,
     # see https://crbug.com/879128.
     def test_commit_that_starts_with_import_is_exportable(self):
         commit = MockChromiumCommit(MockHost(), subject='Import message')
         github = MockWPTGitHub(pull_requests=[])
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(test_patch=[(True, '')]), github),
-                         (CommitExportState.EXPORTABLE_CLEAN, ''))
+        self.assertEqual(
+            get_commit_export_state(commit,
+                                    MockLocalWPT(test_patch=[(True, '')]),
+                                    github),
+            (CommitExportState.EXPORTABLE_CLEAN, ''))
 
     def test_commit_that_has_open_pr_is_exportable(self):
         commit = MockChromiumCommit(MockHost(), change_id='I00decade')
         github = MockWPTGitHub(pull_requests=[
             PullRequest('PR2', 2, 'body\nChange-Id: I00decade', 'open', []),
         ])
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(test_patch=[(True, '')]), github),
-                         (CommitExportState.EXPORTABLE_CLEAN, ''))
+        self.assertEqual(
+            get_commit_export_state(commit,
+                                    MockLocalWPT(test_patch=[(True, '')]),
+                                    github),
+            (CommitExportState.EXPORTABLE_CLEAN, ''))
 
     def test_commit_that_has_closed_but_not_merged_pr(self):
         commit = MockChromiumCommit(MockHost(), change_id='I00decade')
@@ -154,40 +217,69 @@
             PullRequest('PR2', 2, 'body\nChange-Id: I00decade', 'closed', []),
         ])
         # Regardless of verify_merged_pr, abandoned PRs are always exported.
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(), github, verify_merged_pr=False),
-                         (CommitExportState.EXPORTED, ''))
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(), github, verify_merged_pr=True),
-                         (CommitExportState.EXPORTED, ''))
+        self.assertEqual(
+            get_commit_export_state(
+                commit, MockLocalWPT(), github, verify_merged_pr=False),
+            (CommitExportState.EXPORTED, ''))
+        self.assertEqual(
+            get_commit_export_state(
+                commit, MockLocalWPT(), github, verify_merged_pr=True),
+            (CommitExportState.EXPORTED, ''))
 
     def test_commit_that_has_merged_pr_and_found_locally(self):
         commit = MockChromiumCommit(MockHost(), change_id='I00decade')
-        github = MockWPTGitHub(pull_requests=[
-            PullRequest('PR2', 2, 'body\nChange-Id: I00decade', 'closed', []),
-        ], merged_index=0)
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(change_ids=['I00decade']), github, verify_merged_pr=False),
-                         (CommitExportState.EXPORTED, ''))
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(change_ids=['I00decade']), github, verify_merged_pr=True),
-                         (CommitExportState.EXPORTED, ''))
+        github = MockWPTGitHub(
+            pull_requests=[
+                PullRequest('PR2', 2, 'body\nChange-Id: I00decade', 'closed',
+                            []),
+            ],
+            merged_index=0)
+        self.assertEqual(
+            get_commit_export_state(
+                commit,
+                MockLocalWPT(change_ids=['I00decade']),
+                github,
+                verify_merged_pr=False), (CommitExportState.EXPORTED, ''))
+        self.assertEqual(
+            get_commit_export_state(
+                commit,
+                MockLocalWPT(change_ids=['I00decade']),
+                github,
+                verify_merged_pr=True), (CommitExportState.EXPORTED, ''))
 
     def test_commit_that_has_merged_pr_but_not_found_locally(self):
         commit = MockChromiumCommit(MockHost(), change_id='I00decade')
-        github = MockWPTGitHub(pull_requests=[
-            PullRequest('PR2', 2, 'body\nChange-Id: I00decade', 'closed', []),
-        ], merged_index=0)
+        github = MockWPTGitHub(
+            pull_requests=[
+                PullRequest('PR2', 2, 'body\nChange-Id: I00decade', 'closed',
+                            []),
+            ],
+            merged_index=0)
         # verify_merged_pr should be False by default.
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(), github),
-                         (CommitExportState.EXPORTED, ''))
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(test_patch=[(True, '')]), github, verify_merged_pr=True),
-                         (CommitExportState.EXPORTABLE_CLEAN, ''))
+        self.assertEqual(
+            get_commit_export_state(commit, MockLocalWPT(), github),
+            (CommitExportState.EXPORTED, ''))
+        self.assertEqual(
+            get_commit_export_state(
+                commit,
+                MockLocalWPT(test_patch=[(True, '')]),
+                github,
+                verify_merged_pr=True),
+            (CommitExportState.EXPORTABLE_CLEAN, ''))
 
     def test_commit_that_produces_errors(self):
         commit = MockChromiumCommit(MockHost())
         github = MockWPTGitHub(pull_requests=[])
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(test_patch=[(False, 'error')]), github),
-                         (CommitExportState.EXPORTABLE_DIRTY, 'error'))
+        self.assertEqual(
+            get_commit_export_state(
+                commit, MockLocalWPT(test_patch=[(False, 'error')]), github),
+            (CommitExportState.EXPORTABLE_DIRTY, 'error'))
 
     def test_commit_that_produces_empty_diff(self):
         commit = MockChromiumCommit(MockHost())
         github = MockWPTGitHub(pull_requests=[])
-        self.assertEqual(get_commit_export_state(commit, MockLocalWPT(test_patch=[(False, '')]), github),
-                         (CommitExportState.EXPORTABLE_DIRTY, ''))
+        self.assertEqual(
+            get_commit_export_state(commit,
+                                    MockLocalWPT(test_patch=[(False, '')]),
+                                    github),
+            (CommitExportState.EXPORTABLE_DIRTY, ''))
diff --git a/third_party/blink/tools/blinkpy/w3c/common.py b/third_party/blink/tools/blinkpy/w3c/common.py
index ccbdaeb6..1e96cf2 100644
--- a/third_party/blink/tools/blinkpy/w3c/common.py
+++ b/third_party/blink/tools/blinkpy/w3c/common.py
@@ -1,7 +1,6 @@
 # Copyright 2016 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.
-
 """Utility functions used both when importing and exporting."""
 
 import json
@@ -9,12 +8,12 @@
 
 from blinkpy.common.path_finder import RELATIVE_WEB_TESTS
 
-
 WPT_GH_ORG = 'web-platform-tests'
 WPT_GH_REPO_NAME = 'wpt'
 WPT_GH_URL = 'https://github.com/%s/%s/' % (WPT_GH_ORG, WPT_GH_REPO_NAME)
 WPT_MIRROR_URL = 'https://chromium.googlesource.com/external/github.com/web-platform-tests/wpt.git'
-WPT_GH_SSH_URL_TEMPLATE = 'https://{}@github.com/%s/%s.git' % (WPT_GH_ORG, WPT_GH_REPO_NAME)
+WPT_GH_SSH_URL_TEMPLATE = 'https://{}@github.com/%s/%s.git' % \
+    (WPT_GH_ORG, WPT_GH_REPO_NAME)
 WPT_REVISION_FOOTER = 'WPT-Export-Revision: '
 CHANGE_ID_FOOTER = 'Change-Id: '
 EXPORT_PR_LABEL = 'chromium-export'
@@ -48,7 +47,8 @@
     if not credentials_json:
         return env_credentials
     if not host.filesystem.exists(credentials_json):
-        _log.warning('Credentials JSON file not found at %s.', credentials_json)
+        _log.warning('Credentials JSON file not found at %s.',
+                     credentials_json)
         return {}
     credentials = {}
     contents = json.loads(host.filesystem.read_text_file(credentials_json))
@@ -75,12 +75,11 @@
     """
     assert '/' not in basename
     blacklist = [
-        'MANIFEST.json',    # MANIFEST.json is automatically regenerated.
-        'OWNERS',           # https://crbug.com/584660 https://crbug.com/702283
-        'reftest.list',     # https://crbug.com/582838
+        'MANIFEST.json',  # MANIFEST.json is automatically regenerated.
+        'OWNERS',  # https://crbug.com/584660 https://crbug.com/702283
+        'reftest.list',  # https://crbug.com/582838
     ]
-    return (basename in blacklist
-            or is_testharness_baseline(basename)
+    return (basename in blacklist or is_testharness_baseline(basename)
             or basename.startswith('.'))
 
 
diff --git a/third_party/blink/tools/blinkpy/w3c/common_unittest.py b/third_party/blink/tools/blinkpy/w3c/common_unittest.py
index 5a6e3f40..4dc69bb 100644
--- a/third_party/blink/tools/blinkpy/w3c/common_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/common_unittest.py
@@ -7,17 +7,12 @@
 
 from blinkpy.common.host_mock import MockHost
 from blinkpy.common.path_finder import RELATIVE_WEB_TESTS
-from blinkpy.w3c.common import (
-    read_credentials,
-    is_testharness_baseline,
-    is_basename_skipped,
-    is_file_exportable,
-    CHROMIUM_WPT_DIR
-)
+from blinkpy.w3c.common import (read_credentials, is_testharness_baseline,
+                                is_basename_skipped, is_file_exportable,
+                                CHROMIUM_WPT_DIR)
 
 
 class CommonTest(unittest.TestCase):
-
     def test_get_credentials_empty(self):
         host = MockHost()
         host.filesystem.write_text_file('/tmp/credentials.json', '{}')
@@ -36,8 +31,7 @@
             'UNUSED_VALUE': 'foo',
         })
         self.assertEqual(
-            read_credentials(host, None),
-            {
+            read_credentials(host, None), {
                 'GH_USER': 'user-github',
                 'GH_TOKEN': 'pass-github',
                 'GERRIT_USER': 'user-gerrit',
@@ -55,8 +49,7 @@
                 'GERRIT_TOKEN': 'pass-gerrit',
             }))
         self.assertEqual(
-            read_credentials(host, '/tmp/credentials.json'),
-            {
+            read_credentials(host, '/tmp/credentials.json'), {
                 'GH_USER': 'user-github',
                 'GH_TOKEN': 'pass-github',
                 'GERRIT_USER': 'user-gerrit',
@@ -78,18 +71,20 @@
                 'GH_TOKEN': 'pass-github-from-json',
             }))
         self.assertEqual(
-            read_credentials(host, '/tmp/credentials.json'),
-            {
+            read_credentials(host, '/tmp/credentials.json'), {
                 'GH_USER': 'user-github-from-json',
                 'GH_TOKEN': 'pass-github-from-json',
             })
 
     def test_is_testharness_baseline(self):
         self.assertTrue(is_testharness_baseline('fake-test-expected.txt'))
-        self.assertTrue(is_testharness_baseline('external/wpt/fake-test-expected.txt'))
-        self.assertTrue(is_testharness_baseline('/tmp/wpt/fake-test-expected.txt'))
+        self.assertTrue(
+            is_testharness_baseline('external/wpt/fake-test-expected.txt'))
+        self.assertTrue(
+            is_testharness_baseline('/tmp/wpt/fake-test-expected.txt'))
         self.assertFalse(is_testharness_baseline('fake-test-expected.html'))
-        self.assertFalse(is_testharness_baseline('external/wpt/fake-test-expected.html'))
+        self.assertFalse(
+            is_testharness_baseline('external/wpt/fake-test-expected.html'))
 
     def test_is_basename_skipped(self):
         self.assertTrue(is_basename_skipped('MANIFEST.json'))
@@ -103,9 +98,13 @@
             is_basename_skipped('third_party/fake/OWNERS')
 
     def test_is_file_exportable(self):
-        self.assertTrue(is_file_exportable(CHROMIUM_WPT_DIR + 'html/fake-test.html'))
-        self.assertFalse(is_file_exportable(CHROMIUM_WPT_DIR + 'html/fake-test-expected.txt'))
-        self.assertFalse(is_file_exportable(CHROMIUM_WPT_DIR + 'MANIFEST.json'))
+        self.assertTrue(
+            is_file_exportable(CHROMIUM_WPT_DIR + 'html/fake-test.html'))
+        self.assertFalse(
+            is_file_exportable(CHROMIUM_WPT_DIR +
+                               'html/fake-test-expected.txt'))
+        self.assertFalse(
+            is_file_exportable(CHROMIUM_WPT_DIR + 'MANIFEST.json'))
         self.assertFalse(is_file_exportable(CHROMIUM_WPT_DIR + 'dom/OWNERS'))
 
     def test_is_file_exportable_asserts_path(self):
@@ -117,4 +116,5 @@
             is_file_exportable('third_party/fake/OWNERS')
         # Rejects absolute paths.
         with self.assertRaises(AssertionError):
-            is_file_exportable('/mock-checkout/' + RELATIVE_WEB_TESTS + 'external/wpt/OWNERS')
+            is_file_exportable('/mock-checkout/' + RELATIVE_WEB_TESTS +
+                               'external/wpt/OWNERS')
diff --git a/third_party/blink/tools/blinkpy/w3c/directory_owners_extractor.py b/third_party/blink/tools/blinkpy/w3c/directory_owners_extractor.py
index e7b1264..88891a8 100644
--- a/third_party/blink/tools/blinkpy/w3c/directory_owners_extractor.py
+++ b/third_party/blink/tools/blinkpy/w3c/directory_owners_extractor.py
@@ -1,7 +1,6 @@
 # Copyright 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-
 """A limited finder & parser for Chromium OWNERS files.
 
 This module is intended to be used within web_tests/external and is
@@ -16,7 +15,6 @@
 from blinkpy.common.path_finder import PathFinder
 from blinkpy.common.system.filesystem import FileSystem
 
-
 # Format of OWNERS files can be found at //src/third_party/depot_tools/owners.py
 # In our use case (under external/wpt), we only process the first enclosing
 # OWNERS file for any given path (i.e. always assuming "set noparent"), and we
@@ -29,7 +27,6 @@
 
 
 class DirectoryOwnersExtractor(object):
-
     def __init__(self, filesystem=None):
         self.filesystem = filesystem or FileSystem()
         self.finder = PathFinder(filesystem)
@@ -46,7 +43,8 @@
             owned directories (paths relative to the root of web tests).
         """
         email_map = collections.defaultdict(set)
-        external_root_owners = self.finder.path_from_web_tests('external', 'OWNERS')
+        external_root_owners = self.finder.path_from_web_tests(
+            'external', 'OWNERS')
         for relpath in changed_files:
             # Try to find the first *non-empty* OWNERS file.
             absolute_path = self.finder.path_from_chromium_base(relpath)
@@ -57,16 +55,21 @@
                 if owners:
                     break
                 # Found an empty OWNERS file. Try again from the parent directory.
-                absolute_path = self.filesystem.dirname(self.filesystem.dirname(owners_file))
+                absolute_path = self.filesystem.dirname(
+                    self.filesystem.dirname(owners_file))
                 owners_file = self.find_owners_file(absolute_path)
             # Skip web_tests/external/OWNERS.
             if not owners or owners_file == external_root_owners:
                 continue
 
             owned_directory = self.filesystem.dirname(owners_file)
-            owned_directory_relpath = self.filesystem.relpath(owned_directory, self.finder.web_tests_dir())
+            owned_directory_relpath = self.filesystem.relpath(
+                owned_directory, self.finder.web_tests_dir())
             email_map[tuple(owners)].add(owned_directory_relpath)
-        return {owners: sorted(owned_directories) for owners, owned_directories in email_map.iteritems()}
+        return {
+            owners: sorted(owned_directories)
+            for owners, owned_directories in email_map.iteritems()
+        }
 
     def find_owners_file(self, start_path):
         """Finds the first enclosing OWNERS file for a given path.
@@ -82,8 +85,8 @@
             The absolute path to the first OWNERS file found; None if not found
             or if start_path is outside of web_tests/external.
         """
-        abs_start_path = (start_path if self.filesystem.isabs(start_path)
-                          else self.finder.path_from_chromium_base(start_path))
+        abs_start_path = (start_path if self.filesystem.isabs(start_path) else
+                          self.finder.path_from_chromium_base(start_path))
         directory = (abs_start_path if self.filesystem.isdir(abs_start_path)
                      else self.filesystem.dirname(abs_start_path))
         external_root = self.finder.path_from_web_tests('external')
@@ -92,7 +95,8 @@
         # Stop at web_tests, which is the parent of external_root.
         while directory != self.finder.web_tests_dir():
             owners_file = self.filesystem.join(directory, 'OWNERS')
-            if self.filesystem.isfile(self.finder.path_from_chromium_base(owners_file)):
+            if self.filesystem.isfile(
+                    self.finder.path_from_chromium_base(owners_file)):
                 return owners_file
             directory = self.filesystem.dirname(directory)
         return None
diff --git a/third_party/blink/tools/blinkpy/w3c/directory_owners_extractor_unittest.py b/third_party/blink/tools/blinkpy/w3c/directory_owners_extractor_unittest.py
index a3c1825..fbdc6e0 100644
--- a/third_party/blink/tools/blinkpy/w3c/directory_owners_extractor_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/directory_owners_extractor_unittest.py
@@ -8,17 +8,17 @@
 from blinkpy.common.system.filesystem_mock import MockFileSystem
 from blinkpy.w3c.directory_owners_extractor import DirectoryOwnersExtractor
 
-
 MOCK_WEB_TESTS = '/mock-checkout/' + RELATIVE_WEB_TESTS
 ABS_WPT_BASE = MOCK_WEB_TESTS + 'external/wpt'
 REL_WPT_BASE = RELATIVE_WEB_TESTS + 'external/wpt'
 
-class DirectoryOwnersExtractorTest(unittest.TestCase):
 
+class DirectoryOwnersExtractorTest(unittest.TestCase):
     def setUp(self):
         # We always have an OWNERS file at web_tests/external.
         self.filesystem = MockFileSystem(files={
-            MOCK_WEB_TESTS + 'external/OWNERS': 'ecosystem-infra@chromium.org'
+            MOCK_WEB_TESTS + 'external/OWNERS':
+            'ecosystem-infra@chromium.org'
         })
         self.extractor = DirectoryOwnersExtractor(self.filesystem)
 
@@ -30,19 +30,24 @@
 
     def test_list_owners_combines_same_owners(self):
         self._write_files({
-            ABS_WPT_BASE + '/foo/x.html': '',
-            ABS_WPT_BASE + '/foo/OWNERS': 'a@chromium.org\nc@chromium.org\n',
-            ABS_WPT_BASE + '/bar/x/y.html': '',
-            ABS_WPT_BASE + '/bar/OWNERS': 'a@chromium.org\nc@chromium.org\n',
+            ABS_WPT_BASE + '/foo/x.html':
+            '',
+            ABS_WPT_BASE + '/foo/OWNERS':
+            'a@chromium.org\nc@chromium.org\n',
+            ABS_WPT_BASE + '/bar/x/y.html':
+            '',
+            ABS_WPT_BASE + '/bar/OWNERS':
+            'a@chromium.org\nc@chromium.org\n',
         })
         changed_files = [
             REL_WPT_BASE + '/foo/x.html',
             REL_WPT_BASE + '/bar/x/y.html',
         ]
         self.assertEqual(
-            self.extractor.list_owners(changed_files),
-            {('a@chromium.org', 'c@chromium.org'): ['external/wpt/bar', 'external/wpt/foo']}
-        )
+            self.extractor.list_owners(changed_files), {
+                ('a@chromium.org', 'c@chromium.org'):
+                ['external/wpt/bar', 'external/wpt/foo']
+            })
 
     def test_list_owners_combines_same_directory(self):
         self._write_files({
@@ -56,30 +61,34 @@
         ]
         self.assertEqual(
             self.extractor.list_owners(changed_files),
-            {('foo@chromium.org',): ['external/wpt/baz/x']}
-        )
+            {('foo@chromium.org', ): ['external/wpt/baz/x']})
 
     def test_list_owners_skips_empty_owners(self):
         self._write_files({
-            ABS_WPT_BASE + '/baz/x/y/z.html': '',
-            ABS_WPT_BASE + '/baz/x/y/OWNERS': '# Some comments\n',
-            ABS_WPT_BASE + '/baz/x/OWNERS': 'foo@chromium.org\n',
+            ABS_WPT_BASE + '/baz/x/y/z.html':
+            '',
+            ABS_WPT_BASE + '/baz/x/y/OWNERS':
+            '# Some comments\n',
+            ABS_WPT_BASE + '/baz/x/OWNERS':
+            'foo@chromium.org\n',
         })
         changed_files = [
             REL_WPT_BASE + '/baz/x/y/z.html',
         ]
         self.assertEqual(
             self.extractor.list_owners(changed_files),
-            {('foo@chromium.org',): ['external/wpt/baz/x']}
-        )
+            {('foo@chromium.org', ): ['external/wpt/baz/x']})
 
     def test_list_owners_not_found(self):
         self._write_files({
             # Although web_tests/external/OWNERS exists, it should not be listed.
-            ABS_WPT_BASE + '/foo/bar.html': '',
+            ABS_WPT_BASE + '/foo/bar.html':
+            '',
             # Files out of external.
-            '/mock-checkout/' + RELATIVE_WEB_TESTS + 'TestExpectations': '',
-            '/mock-checkout/' + RELATIVE_WEB_TESTS + 'OWNERS': 'foo@chromium.org',
+            '/mock-checkout/' + RELATIVE_WEB_TESTS + 'TestExpectations':
+            '',
+            '/mock-checkout/' + RELATIVE_WEB_TESTS + 'OWNERS':
+            'foo@chromium.org',
         })
         changed_files = [
             REL_WPT_BASE + '/foo/bar.html',
@@ -88,24 +97,27 @@
         self.assertEqual(self.extractor.list_owners(changed_files), {})
 
     def test_find_owners_file_at_current_dir(self):
-        self._write_files({
-            ABS_WPT_BASE + '/foo/OWNERS': 'a@chromium.org'
-        })
-        self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/foo'), ABS_WPT_BASE + '/foo/OWNERS')
+        self._write_files({ABS_WPT_BASE + '/foo/OWNERS': 'a@chromium.org'})
+        self.assertEqual(
+            self.extractor.find_owners_file(REL_WPT_BASE + '/foo'),
+            ABS_WPT_BASE + '/foo/OWNERS')
 
     def test_find_owners_file_at_ancestor(self):
         self._write_files({
             ABS_WPT_BASE + '/x/OWNERS': 'a@chromium.org',
             ABS_WPT_BASE + '/x/y/z.html': '',
         })
-        self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/x/y'), ABS_WPT_BASE + '/x/OWNERS')
+        self.assertEqual(
+            self.extractor.find_owners_file(REL_WPT_BASE + '/x/y'),
+            ABS_WPT_BASE + '/x/OWNERS')
 
     def test_find_owners_file_stops_at_external_root(self):
         self._write_files({
             ABS_WPT_BASE + '/x/y/z.html': '',
         })
-        self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/x/y'),
-                         MOCK_WEB_TESTS + 'external/OWNERS')
+        self.assertEqual(
+            self.extractor.find_owners_file(REL_WPT_BASE + '/x/y'),
+            MOCK_WEB_TESTS + 'external/OWNERS')
 
     def test_find_owners_file_takes_four_kinds_of_paths(self):
         owners_path = ABS_WPT_BASE + '/foo/OWNERS'
@@ -114,21 +126,33 @@
             ABS_WPT_BASE + '/foo/bar.html': '',
         })
         # Absolute paths of directories.
-        self.assertEqual(self.extractor.find_owners_file(ABS_WPT_BASE + '/foo'), owners_path)
+        self.assertEqual(
+            self.extractor.find_owners_file(ABS_WPT_BASE + '/foo'),
+            owners_path)
         # Relative paths of directories.
-        self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/foo'), owners_path)
+        self.assertEqual(
+            self.extractor.find_owners_file(REL_WPT_BASE + '/foo'),
+            owners_path)
         # Absolute paths of files.
-        self.assertEqual(self.extractor.find_owners_file(ABS_WPT_BASE + '/foo/bar.html'), owners_path)
+        self.assertEqual(
+            self.extractor.find_owners_file(ABS_WPT_BASE + '/foo/bar.html'),
+            owners_path)
         # Relative paths of files.
-        self.assertEqual(self.extractor.find_owners_file(REL_WPT_BASE + '/foo/bar.html'), owners_path)
+        self.assertEqual(
+            self.extractor.find_owners_file(REL_WPT_BASE + '/foo/bar.html'),
+            owners_path)
 
     def test_find_owners_file_out_of_external(self):
         self._write_files({
-            '/mock-checkout/' + RELATIVE_WEB_TESTS + 'OWNERS': 'foo@chromium.org',
-            '/mock-checkout/' + RELATIVE_WEB_TESTS + 'other/some_file': '',
+            '/mock-checkout/' + RELATIVE_WEB_TESTS + 'OWNERS':
+            'foo@chromium.org',
+            '/mock-checkout/' + RELATIVE_WEB_TESTS + 'other/some_file':
+            '',
         })
-        self.assertIsNone(self.extractor.find_owners_file(RELATIVE_WEB_TESTS[:-1]))
-        self.assertIsNone(self.extractor.find_owners_file(RELATIVE_WEB_TESTS + 'other'))
+        self.assertIsNone(
+            self.extractor.find_owners_file(RELATIVE_WEB_TESTS[:-1]))
+        self.assertIsNone(
+            self.extractor.find_owners_file(RELATIVE_WEB_TESTS + 'other'))
         self.assertIsNone(self.extractor.find_owners_file('third_party'))
 
     def test_extract_owners(self):
@@ -143,8 +167,9 @@
             '# TEAM: some-team@chromium.org\n'
             '# COMPONENT: Blink>Layout\n'
         }
-        self.assertEqual(self.extractor.extract_owners(ABS_WPT_BASE + '/foo/OWNERS'),
-                         ['foo@chromium.org', 'bar@chromium.org'])
+        self.assertEqual(
+            self.extractor.extract_owners(ABS_WPT_BASE + '/foo/OWNERS'),
+            ['foo@chromium.org', 'bar@chromium.org'])
 
     def test_extract_component(self):
         self.filesystem.files = {
@@ -152,7 +177,9 @@
             '# TEAM: some-team@chromium.org\n'
             '# COMPONENT: Blink>Layout\n'
         }
-        self.assertEqual(self.extractor.extract_component(ABS_WPT_BASE + '/foo/OWNERS'), 'Blink>Layout')
+        self.assertEqual(
+            self.extractor.extract_component(ABS_WPT_BASE + '/foo/OWNERS'),
+            'Blink>Layout')
 
     def test_is_wpt_notify_enabled_true(self):
         self.filesystem.files = {
@@ -160,7 +187,8 @@
             '# COMPONENT: Blink>Layout\n'
             '# WPT-NOTIFY: true\n'
         }
-        self.assertTrue(self.extractor.is_wpt_notify_enabled(ABS_WPT_BASE + '/foo/OWNERS'))
+        self.assertTrue(
+            self.extractor.is_wpt_notify_enabled(ABS_WPT_BASE + '/foo/OWNERS'))
 
     def test_is_wpt_notify_enabled_false(self):
         self.filesystem.files = {
@@ -168,7 +196,8 @@
             '# COMPONENT: Blink>Layout\n'
             '# WPT-NOTIFY: false\n'
         }
-        self.assertFalse(self.extractor.is_wpt_notify_enabled(ABS_WPT_BASE + '/foo/OWNERS'))
+        self.assertFalse(
+            self.extractor.is_wpt_notify_enabled(ABS_WPT_BASE + '/foo/OWNERS'))
 
     def test_is_wpt_notify_enabled_absence_is_false(self):
         self.filesystem.files = {
@@ -176,4 +205,5 @@
             '# TEAM: some-team@chromium.org\n'
             '# COMPONENT: Blink>Layout\n'
         }
-        self.assertFalse(self.extractor.is_wpt_notify_enabled(ABS_WPT_BASE + '/foo/OWNERS'))
+        self.assertFalse(
+            self.extractor.is_wpt_notify_enabled(ABS_WPT_BASE + '/foo/OWNERS'))
diff --git a/third_party/blink/tools/blinkpy/w3c/export_notifier.py b/third_party/blink/tools/blinkpy/w3c/export_notifier.py
index 846e5a2..5f04d9a 100644
--- a/third_party/blink/tools/blinkpy/w3c/export_notifier.py
+++ b/third_party/blink/tools/blinkpy/w3c/export_notifier.py
@@ -1,7 +1,6 @@
 # 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.
-
 """Sends notifications after automatic exports.
 
 Automatically comments on a Gerrit CL when its corresponding PR fails the Taskcluster check. In
@@ -22,7 +21,6 @@
 
 
 class ExportNotifier(object):
-
     def __init__(self, host, wpt_github, gerrit, dry_run=True):
         self.host = host
         self.wpt_github = wpt_github
@@ -38,13 +36,13 @@
             prs = self.wpt_github.recent_failing_chromium_exports()
         except GitHubError as e:
             _log.info(
-                'Surfacing Taskcluster failures cannot be completed due to the following error:')
+                'Surfacing Taskcluster failures cannot be completed due to the following error:'
+            )
             _log.error(str(e))
             return True
 
         if len(prs) > 100:
-            _log.error(
-                'Too many open failing PRs: %s; abort.', len(prs))
+            _log.error('Too many open failing PRs: %s; abort.', len(prs))
             return True
 
         _log.info('Found %d failing PRs.', len(prs))
@@ -61,15 +59,14 @@
             gerrit_id = self.wpt_github.extract_metadata(
                 'Change-Id: ', pr.body)
             if not gerrit_id:
-                _log.error(
-                    'Can not retrieve Change-Id for %s.', pr.number)
+                _log.error('Can not retrieve Change-Id for %s.', pr.number)
                 continue
 
-            gerrit_sha = self.wpt_github.extract_metadata(WPT_REVISION_FOOTER, pr.body)
+            gerrit_sha = self.wpt_github.extract_metadata(
+                WPT_REVISION_FOOTER, pr.body)
             gerrit_dict[gerrit_id] = PRStatusInfo(
                 taskcluster_status['node_id'],
-                taskcluster_status['target_url'],
-                gerrit_sha)
+                taskcluster_status['target_url'], gerrit_sha)
 
         self.process_failing_prs(gerrit_dict)
         return False
@@ -109,19 +106,19 @@
                     cl_comment = pr_status_info.to_gerrit_comment()
 
                 if self.dry_run:
-                    _log.info(
-                        '[dry_run] Would have commented on CL %s\n', change_id)
-                    _log.debug(
-                        'Comments are:\n %s\n', cl_comment)
+                    _log.info('[dry_run] Would have commented on CL %s\n',
+                              change_id)
+                    _log.debug('Comments are:\n %s\n', cl_comment)
                 else:
                     _log.info('Commenting on CL %s\n', change_id)
                     cl.post_comment(cl_comment)
             except GerritError as e:
-                _log.error(
-                    'Could not process Gerrit CL %s: %s', change_id, str(e))
+                _log.error('Could not process Gerrit CL %s: %s', change_id,
+                           str(e))
                 continue
 
-    def has_latest_taskcluster_status_commented(self, messages, pr_status_info):
+    def has_latest_taskcluster_status_commented(self, messages,
+                                                pr_status_info):
         """Determines if the Taskcluster status has already been commented on the messages of a CL.
 
         Args:
@@ -206,9 +203,10 @@
 
     @staticmethod
     def from_gerrit_comment(comment):
-        tags = [PRStatusInfo.NODE_ID_TAG,
-                PRStatusInfo.LINK_TAG,
-                PRStatusInfo.CL_SHA_TAG]
+        tags = [
+            PRStatusInfo.NODE_ID_TAG, PRStatusInfo.LINK_TAG,
+            PRStatusInfo.CL_SHA_TAG
+        ]
         values = ['', '', '']
 
         for line in comment.splitlines():
@@ -223,12 +221,13 @@
         return PRStatusInfo(*values)
 
     def to_gerrit_comment(self, patchset=None):
-        status_line = ('The exported PR for the current patch failed Taskcluster check(s) '
-                       'on GitHub, which could indict cross-broswer failures on the '
-                       'exportable changes. Please contact ecosystem-infra@ team for '
-                       'more information.')
-        node_id_line = ('\n\n{}{}').format(
-            PRStatusInfo.NODE_ID_TAG, self.node_id)
+        status_line = (
+            'The exported PR for the current patch failed Taskcluster check(s) '
+            'on GitHub, which could indict cross-broswer failures on the '
+            'exportable changes. Please contact ecosystem-infra@ team for '
+            'more information.')
+        node_id_line = ('\n\n{}{}').format(PRStatusInfo.NODE_ID_TAG,
+                                           self.node_id)
         link_line = ('\n{}{}').format(PRStatusInfo.LINK_TAG, self.link)
         sha_line = ('\n{}{}').format(PRStatusInfo.CL_SHA_TAG, self.gerrit_sha)
 
diff --git a/third_party/blink/tools/blinkpy/w3c/export_notifier_unittest.py b/third_party/blink/tools/blinkpy/w3c/export_notifier_unittest.py
index d89d0611..cdaaaf7 100644
--- a/third_party/blink/tools/blinkpy/w3c/export_notifier_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/export_notifier_unittest.py
@@ -11,7 +11,6 @@
 
 
 class ExportNotifierTest(LoggingTestCase):
-
     def setUp(self):
         super(ExportNotifierTest, self).setUp()
         self.host = MockHost()
@@ -20,13 +19,14 @@
         self.notifier = ExportNotifier(self.host, self.git, self.gerrit)
 
     def test_from_gerrit_comment_success(self):
-        gerrit_comment = ('The exported PR for the current patch failed Taskcluster check(s) '
-                          'on GitHub, which could indict cross-broswer failures on the '
-                          'exportable changes. Please contact ecosystem-infra@ team for '
-                          'more information.\n\n'
-                          'Taskcluster Node ID: foo\n'
-                          'Taskcluster Link: bar\n'
-                          'Gerrit CL SHA: num')
+        gerrit_comment = (
+            'The exported PR for the current patch failed Taskcluster check(s) '
+            'on GitHub, which could indict cross-broswer failures on the '
+            'exportable changes. Please contact ecosystem-infra@ team for '
+            'more information.\n\n'
+            'Taskcluster Node ID: foo\n'
+            'Taskcluster Link: bar\n'
+            'Gerrit CL SHA: num')
 
         actual = PRStatusInfo.from_gerrit_comment(gerrit_comment)
 
@@ -35,13 +35,14 @@
         self.assertEqual(actual.gerrit_sha, 'num')
 
     def test_from_gerrit_comment_missing_info(self):
-        gerrit_comment = ('The exported PR for the current patch failed Taskcluster check(s) '
-                          'on GitHub, which could indict cross-broswer failures on the '
-                          'exportable changes. Please contact ecosystem-infra@ team for '
-                          'more information.\n\n'
-                          'Taskcluster Node ID: \n'
-                          'Taskcluster Link: bar\n'
-                          'Gerrit CL SHA: num')
+        gerrit_comment = (
+            'The exported PR for the current patch failed Taskcluster check(s) '
+            'on GitHub, which could indict cross-broswer failures on the '
+            'exportable changes. Please contact ecosystem-infra@ team for '
+            'more information.\n\n'
+            'Taskcluster Node ID: \n'
+            'Taskcluster Link: bar\n'
+            'Gerrit CL SHA: num')
 
         actual = PRStatusInfo.from_gerrit_comment(gerrit_comment)
 
@@ -56,13 +57,14 @@
 
     def test_to_gerrit_comment(self):
         pr_status_info = PRStatusInfo('foo', 'bar', 'num')
-        expected = ('The exported PR for the current patch failed Taskcluster check(s) '
-                    'on GitHub, which could indict cross-broswer failures on the '
-                    'exportable changes. Please contact ecosystem-infra@ team for '
-                    'more information.\n\n'
-                    'Taskcluster Node ID: foo\n'
-                    'Taskcluster Link: bar\n'
-                    'Gerrit CL SHA: num')
+        expected = (
+            'The exported PR for the current patch failed Taskcluster check(s) '
+            'on GitHub, which could indict cross-broswer failures on the '
+            'exportable changes. Please contact ecosystem-infra@ team for '
+            'more information.\n\n'
+            'Taskcluster Node ID: foo\n'
+            'Taskcluster Link: bar\n'
+            'Gerrit CL SHA: num')
 
         actual = pr_status_info.to_gerrit_comment()
 
@@ -70,13 +72,14 @@
 
     def test_to_gerrit_comment_latest(self):
         pr_status_info = PRStatusInfo('foo', 'bar', None)
-        expected = ('The exported PR for the current patch failed Taskcluster check(s) '
-                    'on GitHub, which could indict cross-broswer failures on the '
-                    'exportable changes. Please contact ecosystem-infra@ team for '
-                    'more information.\n\n'
-                    'Taskcluster Node ID: foo\n'
-                    'Taskcluster Link: bar\n'
-                    'Gerrit CL SHA: Latest')
+        expected = (
+            'The exported PR for the current patch failed Taskcluster check(s) '
+            'on GitHub, which could indict cross-broswer failures on the '
+            'exportable changes. Please contact ecosystem-infra@ team for '
+            'more information.\n\n'
+            'Taskcluster Node ID: foo\n'
+            'Taskcluster Link: bar\n'
+            'Gerrit CL SHA: Latest')
 
         actual = pr_status_info.to_gerrit_comment()
 
@@ -84,39 +87,35 @@
 
     def test_to_gerrit_comment_with_patchset(self):
         pr_status_info = PRStatusInfo('foo', 'bar', 'num')
-        expected = ('The exported PR for the current patch failed Taskcluster check(s) '
-                    'on GitHub, which could indict cross-broswer failures on the '
-                    'exportable changes. Please contact ecosystem-infra@ team for '
-                    'more information.\n\n'
-                    'Taskcluster Node ID: foo\n'
-                    'Taskcluster Link: bar\n'
-                    'Gerrit CL SHA: num\n'
-                    'Patchset Number: 3')
+        expected = (
+            'The exported PR for the current patch failed Taskcluster check(s) '
+            'on GitHub, which could indict cross-broswer failures on the '
+            'exportable changes. Please contact ecosystem-infra@ team for '
+            'more information.\n\n'
+            'Taskcluster Node ID: foo\n'
+            'Taskcluster Link: bar\n'
+            'Gerrit CL SHA: num\n'
+            'Patchset Number: 3')
 
         actual = pr_status_info.to_gerrit_comment(3)
 
         self.assertEqual(expected, actual)
 
     def test_get_failure_taskcluster_status_success(self):
-        taskcluster_status = [
-            {
-                "state": "failure",
-                "context": "Community-TC (pull_request)",
-            },
-            {
-                "state": "success",
-                "context": "random",
-            }
-        ]
+        taskcluster_status = [{
+            "state": "failure",
+            "context": "Community-TC (pull_request)",
+        }, {
+            "state": "success",
+            "context": "random",
+        }]
 
         self.assertEqual(
             self.notifier.get_failure_taskcluster_status(
-                taskcluster_status, 123),
-            {
-                "state": "failure",
-                "context": "Community-TC (pull_request)",
-            }
-        )
+                taskcluster_status, 123), {
+                    "state": "failure",
+                    "context": "Community-TC (pull_request)",
+                })
 
     def test_get_failure_taskcluster_status_fail(self):
         taskcluster_status = [
@@ -126,18 +125,17 @@
             },
         ]
 
-        self.assertEqual(self.notifier.get_failure_taskcluster_status(
-            taskcluster_status, 123), None)
+        self.assertEqual(
+            self.notifier.get_failure_taskcluster_status(
+                taskcluster_status, 123), None)
 
     def test_has_latest_taskcluster_status_commented_false(self):
         pr_status_info = PRStatusInfo('foo', 'bar', 'num')
-        messages = [
-            {
-                "date": "2019-08-20 17:42:05.000000000",
-                "message": "Uploaded patch set 1.\nInitial upload",
-                "_revision_number": 1
-            }
-        ]
+        messages = [{
+            "date": "2019-08-20 17:42:05.000000000",
+            "message": "Uploaded patch set 1.\nInitial upload",
+            "_revision_number": 1
+        }]
 
         actual = self.notifier.has_latest_taskcluster_status_commented(
             messages, pr_status_info)
@@ -153,16 +151,19 @@
                 "_revision_number": 1
             },
             {
-                "date": "2019-08-21 17:41:05.000000000",
-                "message": ('The exported PR for the current patch failed Taskcluster check(s) '
-                            'on GitHub, which could indict cross-broswer failures on the '
-                            'exportable changes. Please contact ecosystem-infra@ team for '
-                            'more information.\n\n'
-                            'Taskcluster Node ID: foo\n'
-                            'Taskcluster Link: bar\n'
-                            'Gerrit CL SHA: num\n'
-                            'Patchset Number: 3'),
-                "_revision_number": 2
+                "date":
+                "2019-08-21 17:41:05.000000000",
+                "message":
+                ('The exported PR for the current patch failed Taskcluster check(s) '
+                 'on GitHub, which could indict cross-broswer failures on the '
+                 'exportable changes. Please contact ecosystem-infra@ team for '
+                 'more information.\n\n'
+                 'Taskcluster Node ID: foo\n'
+                 'Taskcluster Link: bar\n'
+                 'Gerrit CL SHA: num\n'
+                 'Patchset Number: 3'),
+                "_revision_number":
+                2
             },
         ]
 
@@ -175,15 +176,14 @@
 
     def test_get_taskcluster_statuses_success(self):
         self.notifier.wpt_github = MockWPTGitHub(pull_requests=[
-            PullRequest(title='title1', number=1234,
-                        body='description\nWPT-Export-Revision: 1',
-                        state='open', labels=[]),
+            PullRequest(
+                title='title1',
+                number=1234,
+                body='description\nWPT-Export-Revision: 1',
+                state='open',
+                labels=[]),
         ])
-        status = [
-            {
-                "description": "foo"
-            }
-        ]
+        status = [{"description": "foo"}]
         self.notifier.wpt_github.status = status
         actual = self.notifier.get_taskcluster_statuses(123)
 
@@ -198,7 +198,8 @@
         self.notifier.gerrit = MockGerritAPI()
         self.notifier.gerrit.cl = MockGerritCL(
             data={
-                'change_id': 'abc',
+                'change_id':
+                'abc',
                 'messages': [
                     {
                         "date": "2019-08-20 17:42:05.000000000",
@@ -206,16 +207,19 @@
                         "_revision_number": 1
                     },
                     {
-                        "date": "2019-08-21 17:41:05.000000000",
-                        "message": ('The exported PR for the current patch failed Taskcluster check(s) '
-                                    'on GitHub, which could indict cross-broswer failures on the '
-                                    'exportable changes. Please contact ecosystem-infra@ team for '
-                                    'more information.\n\n'
-                                    'Taskcluster Node ID: notfoo\n'
-                                    'Taskcluster Link: bar\n'
-                                    'Gerrit CL SHA: notnum\n'
-                                    'Patchset Number: 3'),
-                        "_revision_number": 2
+                        "date":
+                        "2019-08-21 17:41:05.000000000",
+                        "message":
+                        ('The exported PR for the current patch failed Taskcluster check(s) '
+                         'on GitHub, which could indict cross-broswer failures on the '
+                         'exportable changes. Please contact ecosystem-infra@ team for '
+                         'more information.\n\n'
+                         'Taskcluster Node ID: notfoo\n'
+                         'Taskcluster Link: bar\n'
+                         'Gerrit CL SHA: notnum\n'
+                         'Patchset Number: 3'),
+                        "_revision_number":
+                        2
                     },
                 ],
                 'revisions': {
@@ -224,30 +228,33 @@
                     }
                 }
             },
-            api=self.notifier.gerrit
-        )
+            api=self.notifier.gerrit)
         gerrit_dict = {'abc': PRStatusInfo('foo', 'bar', 'num')}
-        expected = ('The exported PR for the current patch failed Taskcluster check(s) '
-                    'on GitHub, which could indict cross-broswer failures on the '
-                    'exportable changes. Please contact ecosystem-infra@ team for '
-                    'more information.\n\n'
-                    'Taskcluster Node ID: foo\n'
-                    'Taskcluster Link: bar\n'
-                    'Gerrit CL SHA: num\n'
-                    'Patchset Number: 1')
+        expected = (
+            'The exported PR for the current patch failed Taskcluster check(s) '
+            'on GitHub, which could indict cross-broswer failures on the '
+            'exportable changes. Please contact ecosystem-infra@ team for '
+            'more information.\n\n'
+            'Taskcluster Node ID: foo\n'
+            'Taskcluster Link: bar\n'
+            'Gerrit CL SHA: num\n'
+            'Patchset Number: 1')
 
         self.notifier.process_failing_prs(gerrit_dict)
 
         self.assertEqual(self.notifier.gerrit.cls_queried, ['abc'])
-        self.assertEqual(self.notifier.gerrit.request_posted, [
-            ('/a/changes/abc/revisions/current/review', {'message': expected})])
+        self.assertEqual(self.notifier.gerrit.request_posted,
+                         [('/a/changes/abc/revisions/current/review', {
+                             'message': expected
+                         })])
 
     def test_process_failing_prs_has_commented(self):
         self.notifier.dry_run = False
         self.notifier.gerrit = MockGerritAPI()
         self.notifier.gerrit.cl = MockGerritCL(
             data={
-                'change_id': 'abc',
+                'change_id':
+                'abc',
                 'messages': [
                     {
                         "date": "2019-08-20 17:42:05.000000000",
@@ -255,16 +262,19 @@
                         "_revision_number": 1
                     },
                     {
-                        "date": "2019-08-21 17:41:05.000000000",
-                        "message": ('The exported PR for the current patch failed Taskcluster check(s) '
-                                    'on GitHub, which could indict cross-broswer failures on the '
-                                    'exportable changes. Please contact ecosystem-infra@ team for '
-                                    'more information.\n\n'
-                                    'Taskcluster Node ID: foo\n'
-                                    'Taskcluster Link: bar\n'
-                                    'Gerrit CL SHA: notnum\n'
-                                    'Patchset Number: 3'),
-                        "_revision_number": 2
+                        "date":
+                        "2019-08-21 17:41:05.000000000",
+                        "message":
+                        ('The exported PR for the current patch failed Taskcluster check(s) '
+                         'on GitHub, which could indict cross-broswer failures on the '
+                         'exportable changes. Please contact ecosystem-infra@ team for '
+                         'more information.\n\n'
+                         'Taskcluster Node ID: foo\n'
+                         'Taskcluster Link: bar\n'
+                         'Gerrit CL SHA: notnum\n'
+                         'Patchset Number: 3'),
+                        "_revision_number":
+                        2
                     },
                 ],
                 'revisions': {
@@ -273,8 +283,7 @@
                     }
                 }
             },
-            api=self.notifier.gerrit
-        )
+            api=self.notifier.gerrit)
         gerrit_dict = {'abc': PRStatusInfo('foo', 'bar', 'num')}
 
         self.notifier.process_failing_prs(gerrit_dict)
@@ -287,7 +296,8 @@
         self.notifier.gerrit = MockGerritAPI()
         self.notifier.gerrit.cl = MockGerritCL(
             data={
-                'change_id': 'abc',
+                'change_id':
+                'abc',
                 'messages': [
                     {
                         "date": "2019-08-20 17:42:05.000000000",
@@ -295,16 +305,19 @@
                         "_revision_number": 1
                     },
                     {
-                        "date": "2019-08-21 17:41:05.000000000",
-                        "message": ('The exported PR for the current patch failed Taskcluster check(s) '
-                                    'on GitHub, which could indict cross-broswer failures on the '
-                                    'exportable changes. Please contact ecosystem-infra@ team for '
-                                    'more information.\n\n'
-                                    'Taskcluster Node ID: not foo\n'
-                                    'Taskcluster Link: bar\n'
-                                    'Gerrit CL SHA: notnum\n'
-                                    'Patchset Number: 3'),
-                        "_revision_number": 2
+                        "date":
+                        "2019-08-21 17:41:05.000000000",
+                        "message":
+                        ('The exported PR for the current patch failed Taskcluster check(s) '
+                         'on GitHub, which could indict cross-broswer failures on the '
+                         'exportable changes. Please contact ecosystem-infra@ team for '
+                         'more information.\n\n'
+                         'Taskcluster Node ID: not foo\n'
+                         'Taskcluster Link: bar\n'
+                         'Gerrit CL SHA: notnum\n'
+                         'Patchset Number: 3'),
+                        "_revision_number":
+                        2
                     },
                 ],
                 'revisions': {
@@ -313,22 +326,24 @@
                     }
                 }
             },
-            api=self.notifier.gerrit
-        )
-        expected = ('The exported PR for the current patch failed Taskcluster check(s) '
-                    'on GitHub, which could indict cross-broswer failures on the '
-                    'exportable changes. Please contact ecosystem-infra@ team for '
-                    'more information.\n\n'
-                    'Taskcluster Node ID: foo\n'
-                    'Taskcluster Link: bar\n'
-                    'Gerrit CL SHA: Latest')
+            api=self.notifier.gerrit)
+        expected = (
+            'The exported PR for the current patch failed Taskcluster check(s) '
+            'on GitHub, which could indict cross-broswer failures on the '
+            'exportable changes. Please contact ecosystem-infra@ team for '
+            'more information.\n\n'
+            'Taskcluster Node ID: foo\n'
+            'Taskcluster Link: bar\n'
+            'Gerrit CL SHA: Latest')
         gerrit_dict = {'abc': PRStatusInfo('foo', 'bar', None)}
 
         self.notifier.process_failing_prs(gerrit_dict)
 
         self.assertEqual(self.notifier.gerrit.cls_queried, ['abc'])
-        self.assertEqual(self.notifier.gerrit.request_posted, [
-            ('/a/changes/abc/revisions/current/review', {'message': expected})])
+        self.assertEqual(self.notifier.gerrit.request_posted,
+                         [('/a/changes/abc/revisions/current/review', {
+                             'message': expected
+                         })])
 
     def test_process_failing_prs_raise_gerrit_error(self):
         self.notifier.dry_run = False
@@ -339,31 +354,36 @@
 
         self.assertEqual(self.notifier.gerrit.cls_queried, ['abc'])
         self.assertEqual(self.notifier.gerrit.request_posted, [])
-        self.assertLog(
-            ['INFO: Processing 1 CLs with failed Taskcluster status.\n',
-             'ERROR: Could not process Gerrit CL abc: Error from query_cl\n'])
+        self.assertLog([
+            'INFO: Processing 1 CLs with failed Taskcluster status.\n',
+            'ERROR: Could not process Gerrit CL abc: Error from query_cl\n'
+        ])
 
     def test_export_notifier_success(self):
         self.notifier.wpt_github = MockWPTGitHub(pull_requests=[])
         self.notifier.wpt_github.recent_failing_pull_requests = [
-            PullRequest(title='title1', number=1234,
-                        body='description\nWPT-Export-Revision: hash\nChange-Id: decafbad',
-                        state='open', labels=[''])]
-        status = [
-            {
-                "state": "failure",
-                "context": "Community-TC (pull_request)",
-                "node_id": "foo",
-                "target_url": "bar"
-            }
+            PullRequest(
+                title='title1',
+                number=1234,
+                body=
+                'description\nWPT-Export-Revision: hash\nChange-Id: decafbad',
+                state='open',
+                labels=[''])
         ]
+        status = [{
+            "state": "failure",
+            "context": "Community-TC (pull_request)",
+            "node_id": "foo",
+            "target_url": "bar"
+        }]
         self.notifier.wpt_github.status = status
 
         self.notifier.dry_run = False
         self.notifier.gerrit = MockGerritAPI()
         self.notifier.gerrit.cl = MockGerritCL(
             data={
-                'change_id': 'decafbad',
+                'change_id':
+                'decafbad',
                 'messages': [
                     {
                         "date": "2019-08-20 17:42:05.000000000",
@@ -371,16 +391,19 @@
                         "_revision_number": 1
                     },
                     {
-                        "date": "2019-08-21 17:41:05.000000000",
-                        "message": ('The exported PR for the current patch failed Taskcluster check(s) '
-                                    'on GitHub, which could indict cross-broswer failures on the '
-                                    'exportable changes. Please contact ecosystem-infra@ team for '
-                                    'more information.\n\n'
-                                    'Taskcluster Node ID: notfoo\n'
-                                    'Taskcluster Link: bar\n'
-                                    'Gerrit CL SHA: notnum\n'
-                                    'Patchset Number: 3'),
-                        "_revision_number": 2
+                        "date":
+                        "2019-08-21 17:41:05.000000000",
+                        "message":
+                        ('The exported PR for the current patch failed Taskcluster check(s) '
+                         'on GitHub, which could indict cross-broswer failures on the '
+                         'exportable changes. Please contact ecosystem-infra@ team for '
+                         'more information.\n\n'
+                         'Taskcluster Node ID: notfoo\n'
+                         'Taskcluster Link: bar\n'
+                         'Gerrit CL SHA: notnum\n'
+                         'Patchset Number: 3'),
+                        "_revision_number":
+                        2
                     },
                 ],
                 'revisions': {
@@ -389,16 +412,16 @@
                     }
                 }
             },
-            api=self.notifier.gerrit
-        )
-        expected = ('The exported PR for the current patch failed Taskcluster check(s) '
-                    'on GitHub, which could indict cross-broswer failures on the '
-                    'exportable changes. Please contact ecosystem-infra@ team for '
-                    'more information.\n\n'
-                    'Taskcluster Node ID: foo\n'
-                    'Taskcluster Link: bar\n'
-                    'Gerrit CL SHA: hash\n'
-                    'Patchset Number: 2')
+            api=self.notifier.gerrit)
+        expected = (
+            'The exported PR for the current patch failed Taskcluster check(s) '
+            'on GitHub, which could indict cross-broswer failures on the '
+            'exportable changes. Please contact ecosystem-infra@ team for '
+            'more information.\n\n'
+            'Taskcluster Node ID: foo\n'
+            'Taskcluster Link: bar\n'
+            'Gerrit CL SHA: hash\n'
+            'Patchset Number: 2')
 
         exit_code = self.notifier.main()
 
@@ -409,5 +432,7 @@
             'get_branch_statuses',
         ])
         self.assertEqual(self.notifier.gerrit.cls_queried, ['decafbad'])
-        self.assertEqual(self.notifier.gerrit.request_posted, [
-            ('/a/changes/decafbad/revisions/current/review', {'message': expected})])
+        self.assertEqual(self.notifier.gerrit.request_posted,
+                         [('/a/changes/decafbad/revisions/current/review', {
+                             'message': expected
+                         })])
diff --git a/third_party/blink/tools/blinkpy/w3c/gerrit.py b/third_party/blink/tools/blinkpy/w3c/gerrit.py
index 8fd199c..9a45e39 100644
--- a/third_party/blink/tools/blinkpy/w3c/gerrit.py
+++ b/third_party/blink/tools/blinkpy/w3c/gerrit.py
@@ -47,7 +47,8 @@
         The path has to be prefixed with '/a/':
         https://gerrit-review.googlesource.com/Documentation/rest-api.html#authentication
         """
-        assert path.startswith('/a/'), 'POST requests need to use authenticated routes.'
+        assert path.startswith('/a/'), \
+            'POST requests need to use authenticated routes.'
         url = URL_BASE + path
         assert self.user and self.token, 'Gerrit user and token required for authenticated routes.'
 
@@ -56,7 +57,8 @@
             'Authorization': 'Basic {}'.format(b64auth),
             'Content-Type': 'application/json',
         }
-        return self.host.web.request('POST', url, data=json.dumps(data), headers=headers)
+        return self.host.web.request(
+            'POST', url, data=json.dumps(data), headers=headers)
 
     def query_cl_comments_and_revisions(self, change_id):
         """Queries a CL with comments and revisions information."""
@@ -64,7 +66,8 @@
 
     def query_cl(self, change_id, query_options=QUERY_OPTIONS):
         """Queries a commit information from Gerrit."""
-        path = '/changes/chromium%2Fsrc~master~{}?{}'.format(change_id, query_options)
+        path = '/changes/chromium%2Fsrc~master~{}?{}'.format(
+            change_id, query_options)
         try:
             cl_data = self.get(path)
         except NetworkTimeout:
@@ -149,13 +152,13 @@
     def post_comment(self, message):
         """Posts a comment to the CL."""
         path = '/a/changes/{change_id}/revisions/current/review'.format(
-            change_id=self.change_id,
-        )
+            change_id=self.change_id, )
         try:
             return self.api.post(path, {'message': message})
         except HTTPError as e:
-            raise GerritError('Failed to post a comment to issue {} (code {}).'.format(
-                self.change_id, e.code))
+            raise GerritError(
+                'Failed to post a comment to issue {} (code {}).'.format(
+                    self.change_id, e.code))
 
     def is_exportable(self):
         # TODO(robertma): Consolidate with the related part in chromium_exportable_commits.py.
diff --git a/third_party/blink/tools/blinkpy/w3c/gerrit_mock.py b/third_party/blink/tools/blinkpy/w3c/gerrit_mock.py
index 5ae7b518..a4f5b25 100644
--- a/third_party/blink/tools/blinkpy/w3c/gerrit_mock.py
+++ b/third_party/blink/tools/blinkpy/w3c/gerrit_mock.py
@@ -9,7 +9,6 @@
 
 
 class MockGerritAPI(object):
-
     def __init__(self, raise_error=False):
         self.exportable_open_cls = []
         self.request_posted = []
@@ -38,7 +37,6 @@
 
 
 class MockGerritCL(GerritCL):
-
     def __init__(self, data, api=None, chromium_commit=None):
         api = api or MockGerritAPI()
         self.chromium_commit = chromium_commit
diff --git a/third_party/blink/tools/blinkpy/w3c/gerrit_unittest.py b/third_party/blink/tools/blinkpy/w3c/gerrit_unittest.py
index 64dae49..14120874 100644
--- a/third_party/blink/tools/blinkpy/w3c/gerrit_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/gerrit_unittest.py
@@ -26,51 +26,69 @@
 
 
 class GerritCLTest(unittest.TestCase):
-
     def test_url(self):
         data = {
             'change_id': 'Ib58c7125d85d2fd71af711ea8bbd2dc927ed02cb',
             '_number': 638250,
         }
         gerrit_cl = GerritCL(data, MockGerritAPI())
-        self.assertEqual(gerrit_cl.url, 'https://chromium-review.googlesource.com/638250')
+        self.assertEqual(gerrit_cl.url,
+                         'https://chromium-review.googlesource.com/638250')
 
     def test_fetch_current_revision_commit(self):
         host = MockHost()
-        host.executive = mock_git_commands({
-            'fetch': '',
-            'rev-parse': '4de71d0ce799af441c1f106c5432c7fa7256be45',
-            'footers': 'no-commit-position-yet'
-        }, strict=True)
+        host.executive = mock_git_commands(
+            {
+                'fetch': '',
+                'rev-parse': '4de71d0ce799af441c1f106c5432c7fa7256be45',
+                'footers': 'no-commit-position-yet'
+            },
+            strict=True)
         data = {
             'change_id': 'Ib58c7125d85d2fd71af711ea8bbd2dc927ed02cb',
             'subject': 'fake subject',
             '_number': 638250,
             'current_revision': '1',
-            'revisions': {'1': {
-                'fetch': {'http': {
-                    'url': 'https://chromium.googlesource.com/chromium/src',
-                    'ref': 'refs/changes/50/638250/1'
-                }}
-            }},
-            'owner': {'email': 'test@chromium.org'},
+            'revisions': {
+                '1': {
+                    'fetch': {
+                        'http': {
+                            'url':
+                            'https://chromium.googlesource.com/chromium/src',
+                            'ref':
+                            'refs/changes/50/638250/1'
+                        }
+                    }
+                }
+            },
+            'owner': {
+                'email': 'test@chromium.org'
+            },
         }
         gerrit_cl = GerritCL(data, MockGerritAPI())
         commit = gerrit_cl.fetch_current_revision_commit(host)
 
-        self.assertEqual(commit.sha, '4de71d0ce799af441c1f106c5432c7fa7256be45')
-        self.assertEqual(host.executive.calls, [
-            ['git', 'fetch', 'https://chromium.googlesource.com/chromium/src', 'refs/changes/50/638250/1'],
-            ['git', 'rev-parse', 'FETCH_HEAD'],
-            ['git', 'footers', '--position', '4de71d0ce799af441c1f106c5432c7fa7256be45']
-        ])
+        self.assertEqual(commit.sha,
+                         '4de71d0ce799af441c1f106c5432c7fa7256be45')
+        self.assertEqual(host.executive.calls,
+                         [[
+                             'git', 'fetch',
+                             'https://chromium.googlesource.com/chromium/src',
+                             'refs/changes/50/638250/1'
+                         ], ['git', 'rev-parse', 'FETCH_HEAD'],
+                          [
+                              'git', 'footers', '--position',
+                              '4de71d0ce799af441c1f106c5432c7fa7256be45'
+                          ]])
 
     def test_empty_cl_is_not_exportable(self):
         data = {
             'change_id': 'Ib58c7125d85d2fd71af711ea8bbd2dc927ed02cb',
             'subject': 'fake subject',
             '_number': 638250,
-            'owner': {'email': 'test@chromium.org'},
+            'owner': {
+                'email': 'test@chromium.org'
+            },
         }
         gerrit_cl = GerritCL(data, MockGerritAPI())
         # It's important that this does not throw!
@@ -82,13 +100,17 @@
             'subject': 'fake subject',
             '_number': 638250,
             'current_revision': '1',
-            'revisions': {'1': {
-                'commit_with_footers': 'fake subject',
-                'files': {
-                    RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+            'revisions': {
+                '1': {
+                    'commit_with_footers': 'fake subject',
+                    'files': {
+                        RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+                    }
                 }
-            }},
-            'owner': {'email': 'test@chromium.org'},
+            },
+            'owner': {
+                'email': 'test@chromium.org'
+            },
         }
         gerrit_cl = GerritCL(data, MockGerritAPI())
         self.assertTrue(gerrit_cl.is_exportable())
@@ -99,13 +121,17 @@
             'subject': 'fake subject',
             '_number': 638250,
             'current_revision': '1',
-            'revisions': {'1': {
-                'commit_with_footers': 'fake subject',
-                'files': {
-                    RELATIVE_WEB_TESTS + 'foo/bar.html': '',
+            'revisions': {
+                '1': {
+                    'commit_with_footers': 'fake subject',
+                    'files': {
+                        RELATIVE_WEB_TESTS + 'foo/bar.html': '',
+                    }
                 }
-            }},
-            'owner': {'email': 'test@chromium.org'},
+            },
+            'owner': {
+                'email': 'test@chromium.org'
+            },
         }
         gerrit_cl = GerritCL(data, MockGerritAPI())
         self.assertFalse(gerrit_cl.is_exportable())
@@ -116,13 +142,17 @@
             'subject': 'fake subject',
             '_number': 638250,
             'current_revision': '1',
-            'revisions': {'1': {
-                'commit_with_footers': 'fake subject\nNo-Export: true',
-                'files': {
-                    RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+            'revisions': {
+                '1': {
+                    'commit_with_footers': 'fake subject\nNo-Export: true',
+                    'files': {
+                        RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+                    }
                 }
-            }},
-            'owner': {'email': 'test@chromium.org'},
+            },
+            'owner': {
+                'email': 'test@chromium.org'
+            },
         }
         gerrit_cl = GerritCL(data, MockGerritAPI())
         self.assertFalse(gerrit_cl.is_exportable())
@@ -133,13 +163,17 @@
             'subject': 'fake subject',
             '_number': 638250,
             'current_revision': '1',
-            'revisions': {'1': {
-                'commit_with_footers': 'fake subject\nNOEXPORT=true',
-                'files': {
-                    RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+            'revisions': {
+                '1': {
+                    'commit_with_footers': 'fake subject\nNOEXPORT=true',
+                    'files': {
+                        RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+                    }
                 }
-            }},
-            'owner': {'email': 'test@chromium.org'},
+            },
+            'owner': {
+                'email': 'test@chromium.org'
+            },
         }
         gerrit_cl = GerritCL(data, MockGerritAPI())
         self.assertFalse(gerrit_cl.is_exportable())
@@ -150,13 +184,17 @@
             'subject': 'Import something',
             '_number': 638250,
             'current_revision': '1',
-            'revisions': {'1': {
-                'commit_with_footers': 'fake subject',
-                'files': {
-                    RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+            'revisions': {
+                '1': {
+                    'commit_with_footers': 'fake subject',
+                    'files': {
+                        RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html': '',
+                    }
                 }
-            }},
-            'owner': {'email': 'test@chromium.org'},
+            },
+            'owner': {
+                'email': 'test@chromium.org'
+            },
         }
         gerrit_cl = GerritCL(data, MockGerritAPI())
         self.assertTrue(gerrit_cl.is_exportable())
diff --git a/third_party/blink/tools/blinkpy/w3c/import_notifier.py b/third_party/blink/tools/blinkpy/w3c/import_notifier.py
index 87e4f6a0..183dadf7 100644
--- a/third_party/blink/tools/blinkpy/w3c/import_notifier.py
+++ b/third_party/blink/tools/blinkpy/w3c/import_notifier.py
@@ -1,7 +1,6 @@
 # Copyright 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-
 """Sends notifications after automatic imports (WIP).
 
 Automatically file bugs for new failures caused by WPT imports for opted-in
@@ -30,7 +29,6 @@
 
 
 class ImportNotifier(object):
-
     def __init__(self, host, chromium_git, local_wpt):
         self.host = host
         self.git = chromium_git
@@ -42,8 +40,15 @@
         self.owners_extractor = DirectoryOwnersExtractor(host.filesystem)
         self.new_failures_by_directory = defaultdict(list)
 
-    def main(self, wpt_revision_start, wpt_revision_end, rebaselined_tests, test_expectations, issue, patchset,
-             dry_run=True, service_account_key_json=None):
+    def main(self,
+             wpt_revision_start,
+             wpt_revision_end,
+             rebaselined_tests,
+             test_expectations,
+             issue,
+             patchset,
+             dry_run=True,
+             service_account_key_json=None):
         """Files bug reports for new failures.
 
         Args:
@@ -66,11 +71,14 @@
         gerrit_url = SHORT_GERRIT_PREFIX + issue
         gerrit_url_with_ps = gerrit_url + '/' + patchset + '/'
 
-        changed_test_baselines = self.find_changed_baselines_of_tests(rebaselined_tests)
-        self.examine_baseline_changes(changed_test_baselines, gerrit_url_with_ps)
+        changed_test_baselines = self.find_changed_baselines_of_tests(
+            rebaselined_tests)
+        self.examine_baseline_changes(changed_test_baselines,
+                                      gerrit_url_with_ps)
         self.examine_new_test_expectations(test_expectations)
 
-        bugs = self.create_bugs_from_new_failures(wpt_revision_start, wpt_revision_end, gerrit_url)
+        bugs = self.create_bugs_from_new_failures(wpt_revision_start,
+                                                  wpt_revision_end, gerrit_url)
         self.file_bugs(bugs, dry_run, service_account_key_json)
 
     def find_changed_baselines_of_tests(self, rebaselined_tests):
@@ -97,7 +105,8 @@
                 test_baselines[test_name] = changed_baselines
         return test_baselines
 
-    def examine_baseline_changes(self, changed_test_baselines, gerrit_url_with_ps):
+    def examine_baseline_changes(self, changed_test_baselines,
+                                 gerrit_url_with_ps):
         """Examines all changed baselines to find new failures.
 
         Args:
@@ -114,9 +123,11 @@
             for baseline in changed_baselines:
                 if self.more_failures_in_baseline(baseline):
                     self.new_failures_by_directory[directory].append(
-                        TestFailure(TestFailure.BASELINE_CHANGE, test_name,
-                                    baseline_path=baseline, gerrit_url_with_ps=gerrit_url_with_ps)
-                    )
+                        TestFailure(
+                            TestFailure.BASELINE_CHANGE,
+                            test_name,
+                            baseline_path=baseline,
+                            gerrit_url_with_ps=gerrit_url_with_ps))
 
     def more_failures_in_baseline(self, baseline):
         diff = self.git.run(['diff', '-U0', 'origin/master', '--', baseline])
@@ -143,11 +154,13 @@
 
             for expectation_line in expectation_lines:
                 self.new_failures_by_directory[directory].append(
-                    TestFailure(TestFailure.NEW_EXPECTATION, test_name,
-                                expectation_line=expectation_line)
-                )
+                    TestFailure(
+                        TestFailure.NEW_EXPECTATION,
+                        test_name,
+                        expectation_line=expectation_line))
 
-    def create_bugs_from_new_failures(self, wpt_revision_start, wpt_revision_end, gerrit_url):
+    def create_bugs_from_new_failures(self, wpt_revision_start,
+                                      wpt_revision_end, gerrit_url):
         """Files bug reports for new failures.
 
         Args:
@@ -160,14 +173,18 @@
         Return:
             A list of MonorailIssue objects that should be filed.
         """
-        imported_commits = self.local_wpt.commits_in_range(wpt_revision_start, wpt_revision_end)
+        imported_commits = self.local_wpt.commits_in_range(
+            wpt_revision_start, wpt_revision_end)
         bugs = []
         for directory, failures in self.new_failures_by_directory.iteritems():
-            summary = '[WPT] New failures introduced in {} by import {}'.format(directory, gerrit_url)
+            summary = '[WPT] New failures introduced in {} by import {}'.format(
+                directory, gerrit_url)
 
-            full_directory = self.host.filesystem.join(self.finder.web_tests_dir(), directory)
+            full_directory = self.host.filesystem.join(
+                self.finder.web_tests_dir(), directory)
             owners_file = self.host.filesystem.join(full_directory, 'OWNERS')
-            is_wpt_notify_enabled = self.owners_extractor.is_wpt_notify_enabled(owners_file)
+            is_wpt_notify_enabled = self.owners_extractor.is_wpt_notify_enabled(
+                owners_file)
 
             owners = self.owners_extractor.extract_owners(owners_file)
             # owners may be empty but not None.
@@ -178,26 +195,32 @@
             components = [component] if component else None
 
             prologue = ('WPT import {} introduced new failures in {}:\n\n'
-                        'List of new failures:\n'.format(gerrit_url, directory))
+                        'List of new failures:\n'.format(
+                            gerrit_url, directory))
             failure_list = ''
             for failure in failures:
                 failure_list += str(failure) + '\n'
 
             epilogue = '\nThis import contains upstream changes from {} to {}:\n'.format(
-                wpt_revision_start, wpt_revision_end
-            )
-            commit_list = self.format_commit_list(imported_commits, full_directory)
+                wpt_revision_start, wpt_revision_end)
+            commit_list = self.format_commit_list(imported_commits,
+                                                  full_directory)
 
             description = prologue + failure_list + epilogue + commit_list
 
-            bug = MonorailIssue.new_chromium_issue(summary, description, cc, components)
+            bug = MonorailIssue.new_chromium_issue(summary, description, cc,
+                                                   components)
             _log.info(unicode(bug))
 
             if is_wpt_notify_enabled:
-                _log.info("WPT-NOTIFY enabled in this directory; adding the bug to the pending list.")
+                _log.info(
+                    "WPT-NOTIFY enabled in this directory; adding the bug to the pending list."
+                )
                 bugs.append(bug)
             else:
-                _log.info("WPT-NOTIFY disabled in this directory; discarding the bug.")
+                _log.info(
+                    "WPT-NOTIFY disabled in this directory; discarding the bug."
+                )
         return bugs
 
     def format_commit_list(self, imported_commits, directory):
@@ -219,7 +242,8 @@
         for sha, subject in imported_commits:
             # subject is a Unicode string and can contain non-ASCII characters.
             line = u'{}: {}'.format(subject, GITHUB_COMMIT_PREFIX + sha)
-            if self.local_wpt.is_commit_affecting_directory(sha, path_from_wpt):
+            if self.local_wpt.is_commit_affecting_directory(
+                    sha, path_from_wpt):
                 line += ' [affecting this directory]'
             commit_list += line + '\n'
         return commit_list
@@ -239,11 +263,13 @@
         # find_owners_file takes either a relative path from the *root* of the
         # repository, or an absolute path.
         abs_test_path = self.finder.path_from_web_tests(test_name)
-        owners_file = self.owners_extractor.find_owners_file(self.host.filesystem.dirname(abs_test_path))
+        owners_file = self.owners_extractor.find_owners_file(
+            self.host.filesystem.dirname(abs_test_path))
         if not owners_file:
             return None
         owned_directory = self.host.filesystem.dirname(owners_file)
-        short_directory = self.host.filesystem.relpath(owned_directory, self.finder.web_tests_dir())
+        short_directory = self.host.filesystem.relpath(
+            owned_directory, self.finder.web_tests_dir())
         return short_directory
 
     def file_bugs(self, bugs, dry_run, service_account_key_json=None):
@@ -256,18 +282,22 @@
         """
         # TODO(robertma): Better error handling in this method.
         if dry_run:
-            _log.info('[dry_run] Would have filed the %d bugs in the pending list.', len(bugs))
+            _log.info(
+                '[dry_run] Would have filed the %d bugs in the pending list.',
+                len(bugs))
             return
 
         _log.info('Filing %d bugs in the pending list to Monorail', len(bugs))
         api = self._get_monorail_api(service_account_key_json)
         for index, bug in enumerate(bugs, start=1):
             response = api.insert_issue(bug)
-            _log.info('[%d] Filed bug: %s', index, MonorailIssue.crbug_link(response['id']))
+            _log.info('[%d] Filed bug: %s', index,
+                      MonorailIssue.crbug_link(response['id']))
 
     def _get_monorail_api(self, service_account_key_json):
         if service_account_key_json:
-            return self._monorail_api(service_account_key_json=service_account_key_json)
+            return self._monorail_api(
+                service_account_key_json=service_account_key_json)
         token = LuciAuth(self.host).get_access_token()
         return self._monorail_api(access_token=token)
 
@@ -279,7 +309,12 @@
     BASELINE_CHANGE = 1
     NEW_EXPECTATION = 2
 
-    def __init__(self, failure_type, test_name, expectation_line='', baseline_path='', gerrit_url_with_ps=''):
+    def __init__(self,
+                 failure_type,
+                 test_name,
+                 expectation_line='',
+                 baseline_path='',
+                 gerrit_url_with_ps=''):
         if failure_type == self.BASELINE_CHANGE:
             assert baseline_path and gerrit_url_with_ps
         else:
@@ -299,13 +334,11 @@
             return self._format_new_expectation()
 
     def __eq__(self, other):
-        return (
-            self.failure_type == other.failure_type and
-            self.test_name == other.test_name and
-            self.expectation_line == other.expectation_line and
-            self.baseline_path == other.baseline_path and
-            self.gerrit_url_with_ps == other.gerrit_url_with_ps
-        )
+        return (self.failure_type == other.failure_type
+                and self.test_name == other.test_name
+                and self.expectation_line == other.expectation_line
+                and self.baseline_path == other.baseline_path
+                and self.gerrit_url_with_ps == other.gerrit_url_with_ps)
 
     def _format_baseline_change(self):
         assert self.failure_type == self.BASELINE_CHANGE
diff --git a/third_party/blink/tools/blinkpy/w3c/import_notifier_unittest.py b/third_party/blink/tools/blinkpy/w3c/import_notifier_unittest.py
index 27ba9d0..18a9ee9 100644
--- a/third_party/blink/tools/blinkpy/w3c/import_notifier_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/import_notifier_unittest.py
@@ -14,11 +14,10 @@
 from blinkpy.w3c.import_notifier import ImportNotifier, TestFailure
 from blinkpy.w3c.wpt_expectations_updater import UMBRELLA_BUG
 
-
 MOCK_WEB_TESTS = '/mock-checkout/' + RELATIVE_WEB_TESTS
 
-class ImportNotifierTest(unittest.TestCase):
 
+class ImportNotifierTest(unittest.TestCase):
     def setUp(self):
         self.host = MockHost()
         # Mock a virtual test suite at virtual/gpu/external/wpt/foo.
@@ -34,17 +33,24 @@
         changed_files = [
             RELATIVE_WEB_TESTS + 'external/wpt/foo/bar.html',
             RELATIVE_WEB_TESTS + 'external/wpt/foo/bar-expected.txt',
-            RELATIVE_WEB_TESTS + 'platform/linux/external/wpt/foo/bar-expected.txt',
+            RELATIVE_WEB_TESTS +
+            'platform/linux/external/wpt/foo/bar-expected.txt',
             RELATIVE_WEB_TESTS + 'external/wpt/random_stuff.html',
         ]
         self.git.changed_files = lambda: changed_files
-        self.assertEqual(self.notifier.find_changed_baselines_of_tests(['external/wpt/foo/bar.html']),
-                         {'external/wpt/foo/bar.html': [
-                             RELATIVE_WEB_TESTS + 'external/wpt/foo/bar-expected.txt',
-                             RELATIVE_WEB_TESTS + 'platform/linux/external/wpt/foo/bar-expected.txt',
-                         ]})
+        self.assertEqual(
+            self.notifier.find_changed_baselines_of_tests(
+                ['external/wpt/foo/bar.html']),
+            {
+                'external/wpt/foo/bar.html': [
+                    RELATIVE_WEB_TESTS + 'external/wpt/foo/bar-expected.txt',
+                    RELATIVE_WEB_TESTS +
+                    'platform/linux/external/wpt/foo/bar-expected.txt',
+                ]
+            })
 
-        self.assertEqual(self.notifier.find_changed_baselines_of_tests(set()), {})
+        self.assertEqual(
+            self.notifier.find_changed_baselines_of_tests(set()), {})
 
     def test_more_failures_in_baseline_more_fails(self):
         # Replacing self.host.executive won't work here, because ImportNotifier
@@ -58,8 +64,12 @@
                      '+FAIL new failure 2\n')
         })
         self.notifier.git = MockGit(executive=executive)
-        self.assertTrue(self.notifier.more_failures_in_baseline('foo-expected.txt'))
-        self.assertEqual(executive.calls, [['git', 'diff', '-U0', 'origin/master', '--', 'foo-expected.txt']])
+        self.assertTrue(
+            self.notifier.more_failures_in_baseline('foo-expected.txt'))
+        self.assertEqual(
+            executive.calls,
+            [['git', 'diff', '-U0', 'origin/master', '--', 'foo-expected.txt']
+             ])
 
     def test_more_failures_in_baseline_fewer_fails(self):
         executive = mock_git_commands({
@@ -71,7 +81,8 @@
                      '+FAIL new failure 2\n')
         })
         self.notifier.git = MockGit(executive=executive)
-        self.assertFalse(self.notifier.more_failures_in_baseline('foo-expected.txt'))
+        self.assertFalse(
+            self.notifier.more_failures_in_baseline('foo-expected.txt'))
 
     def test_more_failures_in_baseline_same_fails(self):
         executive = mock_git_commands({
@@ -82,61 +93,80 @@
                      '+FAIL a new failure\n')
         })
         self.notifier.git = MockGit(executive=executive)
-        self.assertFalse(self.notifier.more_failures_in_baseline('foo-expected.txt'))
+        self.assertFalse(
+            self.notifier.more_failures_in_baseline('foo-expected.txt'))
 
     def test_examine_baseline_changes(self):
         self.host.filesystem.write_text_file(
-            MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS',
-            'test@chromium.org'
-        )
-        changed_test_baselines = {'external/wpt/foo/bar.html': [
-            RELATIVE_WEB_TESTS + 'external/wpt/foo/bar-expected.txt',
-            RELATIVE_WEB_TESTS + 'platform/linux/external/wpt/foo/bar-expected.txt',
-        ]}
+            MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS', 'test@chromium.org')
+        changed_test_baselines = {
+            'external/wpt/foo/bar.html': [
+                RELATIVE_WEB_TESTS + 'external/wpt/foo/bar-expected.txt',
+                RELATIVE_WEB_TESTS +
+                'platform/linux/external/wpt/foo/bar-expected.txt',
+            ]
+        }
         gerrit_url_with_ps = 'https://crrev.com/c/12345/3/'
         self.notifier.more_failures_in_baseline = lambda _: True
-        self.notifier.examine_baseline_changes(changed_test_baselines, gerrit_url_with_ps)
+        self.notifier.examine_baseline_changes(changed_test_baselines,
+                                               gerrit_url_with_ps)
 
         self.assertEqual(
-            self.notifier.new_failures_by_directory,
-            {'external/wpt/foo': [
-                TestFailure(TestFailure.BASELINE_CHANGE, 'external/wpt/foo/bar.html',
-                            baseline_path=RELATIVE_WEB_TESTS + 'external/wpt/foo/bar-expected.txt',
-                            gerrit_url_with_ps=gerrit_url_with_ps),
-                TestFailure(TestFailure.BASELINE_CHANGE, 'external/wpt/foo/bar.html',
-                            baseline_path=RELATIVE_WEB_TESTS + 'platform/linux/external/wpt/foo/bar-expected.txt',
-                            gerrit_url_with_ps=gerrit_url_with_ps),
-            ]}
-        )
+            self.notifier.new_failures_by_directory, {
+                'external/wpt/foo': [
+                    TestFailure(
+                        TestFailure.BASELINE_CHANGE,
+                        'external/wpt/foo/bar.html',
+                        baseline_path=RELATIVE_WEB_TESTS +
+                        'external/wpt/foo/bar-expected.txt',
+                        gerrit_url_with_ps=gerrit_url_with_ps),
+                    TestFailure(
+                        TestFailure.BASELINE_CHANGE,
+                        'external/wpt/foo/bar.html',
+                        baseline_path=RELATIVE_WEB_TESTS +
+                        'platform/linux/external/wpt/foo/bar-expected.txt',
+                        gerrit_url_with_ps=gerrit_url_with_ps),
+                ]
+            })
 
     def test_examine_new_test_expectations(self):
         self.host.filesystem.write_text_file(
-            MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS',
-            'test@chromium.org'
-        )
-        test_expectations = {'external/wpt/foo/bar.html': [
-            'crbug.com/12345 [ Linux ] external/wpt/foo/bar.html [ Fail ]',
-            'crbug.com/12345 [ Win ] external/wpt/foo/bar.html [ Timeout ]',
-        ]}
+            MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS', 'test@chromium.org')
+        test_expectations = {
+            'external/wpt/foo/bar.html': [
+                'crbug.com/12345 [ Linux ] external/wpt/foo/bar.html [ Fail ]',
+                'crbug.com/12345 [ Win ] external/wpt/foo/bar.html [ Timeout ]',
+            ]
+        }
         self.notifier.examine_new_test_expectations(test_expectations)
         self.assertEqual(
-            self.notifier.new_failures_by_directory,
-            {'external/wpt/foo': [
-                TestFailure(TestFailure.NEW_EXPECTATION, 'external/wpt/foo/bar.html',
-                            expectation_line='crbug.com/12345 [ Linux ] external/wpt/foo/bar.html [ Fail ]'),
-                TestFailure(TestFailure.NEW_EXPECTATION, 'external/wpt/foo/bar.html',
-                            expectation_line='crbug.com/12345 [ Win ] external/wpt/foo/bar.html [ Timeout ]'),
-            ]}
-        )
+            self.notifier.new_failures_by_directory, {
+                'external/wpt/foo': [
+                    TestFailure(
+                        TestFailure.NEW_EXPECTATION,
+                        'external/wpt/foo/bar.html',
+                        expectation_line=
+                        'crbug.com/12345 [ Linux ] external/wpt/foo/bar.html [ Fail ]'
+                    ),
+                    TestFailure(
+                        TestFailure.NEW_EXPECTATION,
+                        'external/wpt/foo/bar.html',
+                        expectation_line=
+                        'crbug.com/12345 [ Win ] external/wpt/foo/bar.html [ Timeout ]'
+                    ),
+                ]
+            })
 
         self.notifier.new_failures_by_directory = {}
         self.notifier.examine_new_test_expectations({})
         self.assertEqual(self.notifier.new_failures_by_directory, {})
 
     def test_format_commit_list(self):
-        imported_commits = [('SHA1', 'Subject 1'),
-                            # Use non-ASCII chars to really test Unicode handling.
-                            ('SHA2', u'ABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ')]
+        imported_commits = [
+            ('SHA1', 'Subject 1'),
+            # Use non-ASCII chars to really test Unicode handling.
+            ('SHA2', u'ABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ')
+        ]
 
         def _is_commit_affecting_directory(commit, directory):
             self.assertIn(commit, ('SHA1', 'SHA2'))
@@ -145,52 +175,65 @@
 
         self.local_wpt.is_commit_affecting_directory = _is_commit_affecting_directory
         self.assertEqual(
-            self.notifier.format_commit_list(imported_commits, MOCK_WEB_TESTS + 'external/wpt/foo'),
+            self.notifier.format_commit_list(
+                imported_commits, MOCK_WEB_TESTS + 'external/wpt/foo'),
             u'Subject 1: https://github.com/web-platform-tests/wpt/commit/SHA1 [affecting this directory]\n'
             u'ABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ: https://github.com/web-platform-tests/wpt/commit/SHA2\n'
         )
 
     def test_find_owned_directory_non_virtual(self):
         self.host.filesystem.write_text_file(
-            MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS',
-            'test@chromium.org'
-        )
-        self.assertEqual(self.notifier.find_owned_directory('external/wpt/foo/bar.html'), 'external/wpt/foo')
-        self.assertEqual(self.notifier.find_owned_directory('external/wpt/foo/bar/baz.html'), 'external/wpt/foo')
+            MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS', 'test@chromium.org')
+        self.assertEqual(
+            self.notifier.find_owned_directory('external/wpt/foo/bar.html'),
+            'external/wpt/foo')
+        self.assertEqual(
+            self.notifier.find_owned_directory(
+                'external/wpt/foo/bar/baz.html'), 'external/wpt/foo')
 
     def test_find_owned_directory_virtual(self):
         self.host.filesystem.write_text_file(
-            MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS',
-            'test@chromium.org'
-        )
-        self.assertEqual(self.notifier.find_owned_directory('virtual/gpu/external/wpt/foo/bar.html'), 'external/wpt/foo')
+            MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS', 'test@chromium.org')
+        self.assertEqual(
+            self.notifier.find_owned_directory(
+                'virtual/gpu/external/wpt/foo/bar.html'), 'external/wpt/foo')
 
     def test_create_bugs_from_new_failures(self):
         self.host.filesystem.write_text_file(
             MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS',
             '# COMPONENT: Blink>Infra>Ecosystem\n'
             '# WPT-NOTIFY: true\n'
-            'foolip@chromium.org\n'
-        )
+            'foolip@chromium.org\n')
         self.host.filesystem.write_text_file(
-            MOCK_WEB_TESTS + 'external/wpt/bar/OWNERS',
-            'test@chromium.org'
-        )
+            MOCK_WEB_TESTS + 'external/wpt/bar/OWNERS', 'test@chromium.org')
         self.notifier.new_failures_by_directory = {
-            'external/wpt/foo': [TestFailure(TestFailure.NEW_EXPECTATION, 'external/wpt/foo/baz.html',
-                                             expectation_line='crbug.com/12345 external/wpt/foo/baz.html [ Fail ]')],
-            'external/wpt/bar': [TestFailure(TestFailure.NEW_EXPECTATION, 'external/wpt/bar/baz.html',
-                                             expectation_line='crbug.com/12345 external/wpt/bar/baz.html [ Fail ]')]
+            'external/wpt/foo': [
+                TestFailure(
+                    TestFailure.NEW_EXPECTATION,
+                    'external/wpt/foo/baz.html',
+                    expectation_line=
+                    'crbug.com/12345 external/wpt/foo/baz.html [ Fail ]')
+            ],
+            'external/wpt/bar': [
+                TestFailure(
+                    TestFailure.NEW_EXPECTATION,
+                    'external/wpt/bar/baz.html',
+                    expectation_line=
+                    'crbug.com/12345 external/wpt/bar/baz.html [ Fail ]')
+            ]
         }
-        bugs = self.notifier.create_bugs_from_new_failures('SHA_START', 'SHA_END', 'https://crrev.com/c/12345')
+        bugs = self.notifier.create_bugs_from_new_failures(
+            'SHA_START', 'SHA_END', 'https://crrev.com/c/12345')
 
         # Only one directory has WPT-NOTIFY enabled.
         self.assertEqual(len(bugs), 1)
         # The formatting of imported commits and new failures are already tested.
         self.assertEqual(bugs[0].body['cc'], ['foolip@chromium.org'])
         self.assertEqual(bugs[0].body['components'], ['Blink>Infra>Ecosystem'])
-        self.assertEqual(bugs[0].body['summary'],
-                         '[WPT] New failures introduced in external/wpt/foo by import https://crrev.com/c/12345')
+        self.assertEqual(
+            bugs[0].body['summary'],
+            '[WPT] New failures introduced in external/wpt/foo by import https://crrev.com/c/12345'
+        )
 
     def test_no_bugs_filed_in_dry_run(self):
         def unreachable(_):
@@ -203,7 +246,9 @@
         test = self
 
         class FakeAPI(object):
-            def __init__(self, service_account_key_json=None, access_token=None):
+            def __init__(self,
+                         service_account_key_json=None,
+                         access_token=None):
                 test.assertIsNone(service_account_key_json)
                 test.assertEqual(access_token, 'MOCK output of child process')
 
@@ -213,35 +258,45 @@
 
 
 class TestFailureTest(unittest.TestCase):
-
     def test_test_failure_to_str_baseline_change(self):
         failure = TestFailure(
-            TestFailure.BASELINE_CHANGE, 'external/wpt/foo/bar.html',
-            baseline_path=RELATIVE_WEB_TESTS + 'external/wpt/foo/bar-expected.txt',
+            TestFailure.BASELINE_CHANGE,
+            'external/wpt/foo/bar.html',
+            baseline_path=RELATIVE_WEB_TESTS +
+            'external/wpt/foo/bar-expected.txt',
             gerrit_url_with_ps='https://crrev.com/c/12345/3/')
-        self.assertEqual(str(failure),
-                         'external/wpt/foo/bar.html new failing tests: https://crrev.com/c/12345/3/' +
-                         RELATIVE_WEB_TESTS + 'external/wpt/foo/bar-expected.txt')
+        self.assertEqual(
+            str(failure),
+            'external/wpt/foo/bar.html new failing tests: https://crrev.com/c/12345/3/'
+            + RELATIVE_WEB_TESTS + 'external/wpt/foo/bar-expected.txt')
 
         platform_failure = TestFailure(
-            TestFailure.BASELINE_CHANGE, 'external/wpt/foo/bar.html',
-            baseline_path=RELATIVE_WEB_TESTS + 'platform/linux/external/wpt/foo/bar-expected.txt',
+            TestFailure.BASELINE_CHANGE,
+            'external/wpt/foo/bar.html',
+            baseline_path=RELATIVE_WEB_TESTS +
+            'platform/linux/external/wpt/foo/bar-expected.txt',
             gerrit_url_with_ps='https://crrev.com/c/12345/3/')
-        self.assertEqual(str(platform_failure),
-                         '[ Linux ] external/wpt/foo/bar.html new failing tests: https://crrev.com/c/12345/3/' +
-                         RELATIVE_WEB_TESTS + 'platform/linux/external/wpt/foo/bar-expected.txt')
+        self.assertEqual(
+            str(platform_failure),
+            '[ Linux ] external/wpt/foo/bar.html new failing tests: https://crrev.com/c/12345/3/'
+            + RELATIVE_WEB_TESTS +
+            'platform/linux/external/wpt/foo/bar-expected.txt')
 
     def test_test_failure_to_str_new_expectation(self):
         failure = TestFailure(
-            TestFailure.NEW_EXPECTATION, 'external/wpt/foo/bar.html',
-            expectation_line='crbug.com/12345 [ Linux ] external/wpt/foo/bar.html [ Fail ]'
-        )
-        self.assertEqual(str(failure),
-                         'crbug.com/12345 [ Linux ] external/wpt/foo/bar.html [ Fail ]')
+            TestFailure.NEW_EXPECTATION,
+            'external/wpt/foo/bar.html',
+            expectation_line=
+            'crbug.com/12345 [ Linux ] external/wpt/foo/bar.html [ Fail ]')
+        self.assertEqual(
+            str(failure),
+            'crbug.com/12345 [ Linux ] external/wpt/foo/bar.html [ Fail ]')
 
         failure_with_umbrella_bug = TestFailure(
-            TestFailure.NEW_EXPECTATION, 'external/wpt/foo/bar.html',
-            expectation_line=UMBRELLA_BUG + ' external/wpt/foo/bar.html [ Fail ]'
-        )
-        self.assertEqual(str(failure_with_umbrella_bug),
-                         'external/wpt/foo/bar.html [ Fail ]')
+            TestFailure.NEW_EXPECTATION,
+            'external/wpt/foo/bar.html',
+            expectation_line=UMBRELLA_BUG +
+            ' external/wpt/foo/bar.html [ Fail ]')
+        self.assertEqual(
+            str(failure_with_umbrella_bug),
+            'external/wpt/foo/bar.html [ Fail ]')
diff --git a/third_party/blink/tools/blinkpy/w3c/local_wpt.py b/third_party/blink/tools/blinkpy/w3c/local_wpt.py
index 4ab3b9e..994abf4 100644
--- a/third_party/blink/tools/blinkpy/w3c/local_wpt.py
+++ b/third_party/blink/tools/blinkpy/w3c/local_wpt.py
@@ -1,7 +1,6 @@
 # Copyright 2016 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.
-
 """A utility class for interacting with a local checkout of the Web Platform Tests."""
 
 import logging
@@ -19,7 +18,6 @@
 
 
 class LocalWPT(object):
-
     def __init__(self, host, gh_token=None, path='/tmp/wpt'):
         """Initializes a LocalWPT instance.
 
@@ -47,9 +45,12 @@
         else:
             remote_url = WPT_MIRROR_URL
             _log.info('No credentials given, using wpt mirror URL.')
-            _log.info('It is possible for the mirror to be delayed; see https://crbug.com/698272.')
+            _log.info(
+                'It is possible for the mirror to be delayed; see https://crbug.com/698272.'
+            )
         # Do not use self.run here because self.path doesn't exist yet.
-        self.host.executive.run_command(['git', 'clone', remote_url, self.path])
+        self.host.executive.run_command(
+            ['git', 'clone', remote_url, self.path])
 
         _log.info('Setting git user name & email in %s', self.path)
         self.run(['git', 'config', 'user.name', DEFAULT_WPT_COMMITTER_NAME])
@@ -58,7 +59,8 @@
     def run(self, command, **kwargs):
         """Runs a command in the local WPT directory."""
         # TODO(robertma): Migrate to blinkpy.common.checkout.Git. (crbug.com/676399)
-        return self.host.executive.run_command(command, cwd=self.path, **kwargs)
+        return self.host.executive.run_command(
+            command, cwd=self.path, **kwargs)
 
     def clean(self):
         """Resets git to a clean state, on origin/master with no changed files."""
@@ -66,7 +68,12 @@
         self.run(['git', 'clean', '-fdx'])
         self.run(['git', 'checkout', 'origin/master'])
 
-    def create_branch_with_patch(self, branch_name, message, patch, author, force_push=False):
+    def create_branch_with_patch(self,
+                                 branch_name,
+                                 message,
+                                 patch,
+                                 author,
+                                 force_push=False):
         """Commits the given patch and pushes to the upstream repo.
 
         Args:
@@ -157,9 +164,9 @@
         This doesn't include the given commit, and this assumes that the given
         commit is on the the master branch.
         """
-        return len(self.run([
-            'git', 'rev-list', '{}..origin/master'.format(commit)
-        ]).splitlines())
+        return len(
+            self.run(['git', 'rev-list',
+                      '{}..origin/master'.format(commit)]).splitlines())
 
     def _most_recent_log_matching(self, grep_str):
         """Finds the most recent commit whose message contains the given pattern.
@@ -184,7 +191,8 @@
             A list of (SHA, commit subject) pairs ordered reverse-chronologically.
         """
         revision_range = revision_start + '..' + revision_end
-        output = self.run(['git', 'rev-list', '--pretty=oneline', revision_range])
+        output = self.run(
+            ['git', 'rev-list', '--pretty=oneline', revision_range])
         commits = []
         for line in output.splitlines():
             # Split at the first space.
@@ -193,7 +201,10 @@
 
     def is_commit_affecting_directory(self, commit, directory):
         """Checks if a commit affects a directory."""
-        exit_code = self.run(['git', 'diff-tree', '--quiet', '--no-commit-id', commit, '--', directory],
+        exit_code = self.run([
+            'git', 'diff-tree', '--quiet', '--no-commit-id', commit, '--',
+            directory
+        ],
                              return_exit_code=True)
         return exit_code == 1
 
@@ -216,4 +227,5 @@
         Returns:
             A string of the matched commit log, empty if not found.
         """
-        return self._most_recent_log_matching('^Cr-Commit-Position: %s' % commit_position)
+        return self._most_recent_log_matching(
+            '^Cr-Commit-Position: %s' % commit_position)
diff --git a/third_party/blink/tools/blinkpy/w3c/local_wpt_mock.py b/third_party/blink/tools/blinkpy/w3c/local_wpt_mock.py
index 223133ff..b0bffc93 100644
--- a/third_party/blink/tools/blinkpy/w3c/local_wpt_mock.py
+++ b/third_party/blink/tools/blinkpy/w3c/local_wpt_mock.py
@@ -1,13 +1,15 @@
 # Copyright 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-
 """A mock LocalWPT class with canned responses."""
 
 
 class MockLocalWPT(object):
-
-    def __init__(self, test_patch=None, apply_patch=None, change_ids=None, commit_positions=None):
+    def __init__(self,
+                 test_patch=None,
+                 apply_patch=None,
+                 change_ids=None,
+                 commit_positions=None):
         """Initializes the mock with pre-populated responses.
 
         Args:
diff --git a/third_party/blink/tools/blinkpy/w3c/local_wpt_unittest.py b/third_party/blink/tools/blinkpy/w3c/local_wpt_unittest.py
index e99dbb2..0b31b2a 100644
--- a/third_party/blink/tools/blinkpy/w3c/local_wpt_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/local_wpt_unittest.py
@@ -13,12 +13,9 @@
 
 
 class LocalWPTTest(unittest.TestCase):
-
     def test_fetch_when_wpt_dir_exists(self):
         host = MockHost()
-        host.filesystem = MockFileSystem(files={
-            '/tmp/wpt': ''
-        })
+        host.filesystem = MockFileSystem(files={'/tmp/wpt': ''})
 
         local_wpt = LocalWPT(host, 'token')
         local_wpt.fetch()
@@ -34,7 +31,11 @@
         local_wpt.fetch()
 
         self.assertEqual(host.executive.calls, [
-            ['git', 'clone', 'https://token@github.com/web-platform-tests/wpt.git', '/tmp/wpt'],
+            [
+                'git', 'clone',
+                'https://token@github.com/web-platform-tests/wpt.git',
+                '/tmp/wpt'
+            ],
             ['git', 'config', 'user.name', DEFAULT_WPT_COMMITTER_NAME],
             ['git', 'config', 'user.email', DEFAULT_WPT_COMMITTER_EMAIL],
         ])
@@ -55,20 +56,26 @@
         local_wpt = LocalWPT(host, 'token')
         local_wpt.fetch()
 
-        local_wpt.create_branch_with_patch('chromium-export-decafbad', 'message', 'patch', 'author <author@author.com>')
-        self.assertEqual(host.executive.calls, [
-            ['git', 'clone', 'https://token@github.com/web-platform-tests/wpt.git', '/tmp/wpt'],
-            ['git', 'config', 'user.name', DEFAULT_WPT_COMMITTER_NAME],
-            ['git', 'config', 'user.email', DEFAULT_WPT_COMMITTER_EMAIL],
-            ['git', 'reset', '--hard', 'HEAD'],
-            ['git', 'clean', '-fdx'],
-            ['git', 'checkout', 'origin/master'],
-            ['git', 'branch', '-D', 'chromium-export-decafbad'],
-            ['git', 'checkout', '-b', 'chromium-export-decafbad'],
-            ['git', 'apply', '-'],
-            ['git', 'add', '.'],
-            ['git', 'commit', '--author', 'author <author@author.com>', '-am', 'message'],
-            ['git', 'push', 'origin', 'chromium-export-decafbad']])
+        local_wpt.create_branch_with_patch('chromium-export-decafbad',
+                                           'message', 'patch',
+                                           'author <author@author.com>')
+        self.assertEqual(
+            host.executive.calls,
+            [[
+                'git', 'clone',
+                'https://token@github.com/web-platform-tests/wpt.git',
+                '/tmp/wpt'
+            ], ['git', 'config', 'user.name', DEFAULT_WPT_COMMITTER_NAME],
+             ['git', 'config', 'user.email', DEFAULT_WPT_COMMITTER_EMAIL],
+             ['git', 'reset', '--hard', 'HEAD'], ['git', 'clean', '-fdx'],
+             ['git', 'checkout', 'origin/master'],
+             ['git', 'branch', '-D', 'chromium-export-decafbad'],
+             ['git', 'checkout', '-b', 'chromium-export-decafbad'],
+             ['git', 'apply', '-'], ['git', 'add', '.'],
+             [
+                 'git', 'commit', '--author', 'author <author@author.com>',
+                 '-am', 'message'
+             ], ['git', 'push', 'origin', 'chromium-export-decafbad']])
 
     def test_test_patch_success(self):
         host = MockHost()
@@ -79,7 +86,8 @@
             'reset': '',
             'clean': '',
             'checkout': '',
-        }, strict=True)
+        },
+                                           strict=True)
         local_wpt = LocalWPT(host, 'token')
 
         self.assertEqual(local_wpt.test_patch('dummy patch'), (True, ''))
@@ -93,7 +101,8 @@
             'reset': '',
             'clean': '',
             'checkout': '',
-        }, strict=True)
+        },
+                                           strict=True)
         local_wpt = LocalWPT(host, 'token')
 
         self.assertEqual(local_wpt.test_patch('dummy patch'), (False, ''))
@@ -108,18 +117,24 @@
         host.executive = MockExecutive(run_command_fn=_run_fn)
         local_wpt = LocalWPT(host, 'token')
 
-        self.assertEqual(local_wpt.test_patch('dummy patch'), (False, 'MOCK failed applying patch'))
+        self.assertEqual(
+            local_wpt.test_patch('dummy patch'),
+            (False, 'MOCK failed applying patch'))
 
     def test_commits_in_range(self):
         host = MockHost()
         host.executive = mock_git_commands({
-            'rev-list': '34ab6c3f5aee8bf05207b674edbcb6affb179545 Fix presubmit errors\n'
-                        '8c596b820634a623dfd7a2b0f36007ce2f7a0c9f test\n'
-        }, strict=True)
+            'rev-list':
+            '34ab6c3f5aee8bf05207b674edbcb6affb179545 Fix presubmit errors\n'
+            '8c596b820634a623dfd7a2b0f36007ce2f7a0c9f test\n'
+        },
+                                           strict=True)
         local_wpt = LocalWPT(host, 'token')
 
         self.assertTrue(local_wpt.commits_in_range('HEAD~2', 'HEAD'))
-        self.assertEqual(host.executive.calls, [['git', 'rev-list', '--pretty=oneline', 'HEAD~2..HEAD']])
+        self.assertEqual(
+            host.executive.calls,
+            [['git', 'rev-list', '--pretty=oneline', 'HEAD~2..HEAD']])
 
     def test_is_commit_affecting_directory(self):
         host = MockHost()
@@ -128,19 +143,28 @@
         host.executive = mock_git_commands({'diff-tree': 1}, strict=True)
         local_wpt = LocalWPT(host, 'token')
 
-        self.assertTrue(local_wpt.is_commit_affecting_directory('HEAD', 'css/'))
-        self.assertEqual(host.executive.calls, [['git', 'diff-tree', '--quiet', '--no-commit-id', 'HEAD', '--', 'css/']])
+        self.assertTrue(
+            local_wpt.is_commit_affecting_directory('HEAD', 'css/'))
+        self.assertEqual(host.executive.calls, [[
+            'git', 'diff-tree', '--quiet', '--no-commit-id', 'HEAD', '--',
+            'css/'
+        ]])
 
     def test_seek_change_id(self):
         host = MockHost()
         local_wpt = LocalWPT(host, 'token')
 
         local_wpt.seek_change_id('Ifake-change-id')
-        self.assertEqual(host.executive.calls, [['git', 'log', '-1', '--grep', '^Change-Id: Ifake-change-id']])
+        self.assertEqual(
+            host.executive.calls,
+            [['git', 'log', '-1', '--grep', '^Change-Id: Ifake-change-id']])
 
     def test_seek_commit_position(self):
         host = MockHost()
         local_wpt = LocalWPT(host, 'token')
 
         local_wpt.seek_commit_position('refs/heads/master@{12345}')
-        self.assertEqual(host.executive.calls, [['git', 'log', '-1', '--grep', '^Cr-Commit-Position: refs/heads/master@{12345}']])
+        self.assertEqual(host.executive.calls, [[
+            'git', 'log', '-1', '--grep',
+            '^Cr-Commit-Position: refs/heads/master@{12345}'
+        ]])
diff --git a/third_party/blink/tools/blinkpy/w3c/monorail.py b/third_party/blink/tools/blinkpy/w3c/monorail.py
index 1ffa923..75940cc 100644
--- a/third_party/blink/tools/blinkpy/w3c/monorail.py
+++ b/third_party/blink/tools/blinkpy/w3c/monorail.py
@@ -19,7 +19,8 @@
     _ALLOWED_FIELDS = _STRING_LIST_FIELDS | _STRING_FIELDS
 
     # Again, the list is non-exhaustive.
-    _VALID_STATUSES = frozenset(['Unconfirmed', 'Untriaged', 'Available', 'Assigned', 'Started'])
+    _VALID_STATUSES = frozenset(
+        ['Unconfirmed', 'Untriaged', 'Available', 'Assigned', 'Started'])
 
     def __init__(self, project_id, **kwargs):
         self.project_id = project_id
@@ -40,17 +41,20 @@
                 self._body[field] = list(self._body[field])
         # We expect a KeyError to be raised if 'status' is missing.
         self._body['status'] = self._body['status'].capitalize()
-        assert self._body['status'] in self._VALID_STATUSES, 'Unknown status %s.' % self._body['status']
+        assert self._body['status'] in self._VALID_STATUSES, \
+            'Unknown status %s.' % self._body['status']
         assert self._body['summary'], 'summary cannot be empty.'
 
     def __unicode__(self):
         result = (u'Monorail issue in project {}\n'
                   'Summary: {}\n'
-                  'Status: {}\n').format(self.project_id, self.body['summary'], self.body['status'])
+                  'Status: {}\n').format(self.project_id, self.body['summary'],
+                                         self.body['status'])
         if 'cc' in self.body:
             result += u'CC: {}\n'.format(', '.join(self.body['cc']))
         if 'components' in self.body:
-            result += u'Components: {}\n'.format(', '.join(self.body['components']))
+            result += u'Components: {}\n'.format(', '.join(
+                self.body['components']))
         if 'labels' in self.body:
             result += u'Labels: {}\n'.format(', '.join(self.body['labels']))
         if 'description' in self.body:
@@ -77,8 +81,7 @@
             description=description,
             cc=cc or [],
             components=components or [],
-            status='Untriaged'
-        )
+            status='Untriaged')
 
     @staticmethod
     def crbug_link(issue_id):
@@ -116,17 +119,22 @@
 
         # TODO(robertma): Deprecate the JSON key support once BuildBot is gone.
         if service_account_key_json:
-            credentials = self._oauth2_client.GoogleCredentials.from_stream(service_account_key_json)
+            credentials = self._oauth2_client.GoogleCredentials.from_stream(
+                service_account_key_json)
         elif access_token:
             credentials = self._oauth2_client.AccessTokenCredentials(
-                access_token=access_token,
-                user_agent='blinkpy/1.0')
+                access_token=access_token, user_agent='blinkpy/1.0')
         else:
-            credentials = self._oauth2_client.GoogleCredentials.get_application_default()
+            credentials = self._oauth2_client.GoogleCredentials.get_application_default(
+            )
 
         # cache_discovery needs to be disabled because of https://github.com/google/google-api-python-client/issues/299
         self.api = self._api_discovery.build(
-            'monorail', 'v1', discoveryServiceUrl=self._DISCOVERY_URL, credentials=credentials, cache_discovery=False)
+            'monorail',
+            'v1',
+            discoveryServiceUrl=self._DISCOVERY_URL,
+            credentials=credentials,
+            cache_discovery=False)
 
     @staticmethod
     def _fix_cc_in_body(body):
@@ -139,4 +147,5 @@
 
     def insert_issue(self, issue):
         body = self._fix_cc_in_body(issue.body)
-        return self.api.issues().insert(projectId=issue.project_id, body=body).execute()
+        return self.api.issues().insert(
+            projectId=issue.project_id, body=body).execute()
diff --git a/third_party/blink/tools/blinkpy/w3c/monorail_unittest.py b/third_party/blink/tools/blinkpy/w3c/monorail_unittest.py
index 602727f..14a22ac 100644
--- a/third_party/blink/tools/blinkpy/w3c/monorail_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/monorail_unittest.py
@@ -9,31 +9,42 @@
 
 
 class MonorailIssueTest(unittest.TestCase):
-
     def test_init_succeeds(self):
         # Minimum example.
         MonorailIssue('chromium', summary='test', status='Untriaged')
         # All fields.
-        MonorailIssue('chromium', summary='test', status='Untriaged', description='body',
-                      cc=['foo@chromium.org'], labels=['Flaky'], components=['Infra'])
+        MonorailIssue(
+            'chromium',
+            summary='test',
+            status='Untriaged',
+            description='body',
+            cc=['foo@chromium.org'],
+            labels=['Flaky'],
+            components=['Infra'])
 
     def test_init_fills_project_id(self):
         issue = MonorailIssue('chromium', summary='test', status='Untriaged')
         self.assertEqual(issue.body['projectId'], 'chromium')
 
     def test_unicode(self):
-        issue = MonorailIssue('chromium', summary=u'test', status='Untriaged',
-                              description=u'ABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ',
-                              cc=['foo@chromium.org', 'bar@chromium.org'], labels=['Flaky'], components=['Infra'])
+        issue = MonorailIssue(
+            'chromium',
+            summary=u'test',
+            status='Untriaged',
+            description=u'ABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ',
+            cc=['foo@chromium.org', 'bar@chromium.org'],
+            labels=['Flaky'],
+            components=['Infra'])
         self.assertEqual(type(unicode(issue)), unicode)
-        self.assertEqual(unicode(issue),
-                         (u'Monorail issue in project chromium\n'
-                          u'Summary: test\n'
-                          u'Status: Untriaged\n'
-                          u'CC: foo@chromium.org, bar@chromium.org\n'
-                          u'Components: Infra\n'
-                          u'Labels: Flaky\n'
-                          u'Description:\nABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ\n'))
+        self.assertEqual(
+            unicode(issue),
+            (u'Monorail issue in project chromium\n'
+             u'Summary: test\n'
+             u'Status: Untriaged\n'
+             u'CC: foo@chromium.org, bar@chromium.org\n'
+             u'Components: Infra\n'
+             u'Labels: Flaky\n'
+             u'Description:\nABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ\n'))
 
     def test_init_unknown_fields(self):
         with self.assertRaises(AssertionError):
@@ -53,15 +64,27 @@
 
     def test_init_string_passed_for_list_fields(self):
         with self.assertRaises(AssertionError):
-            MonorailIssue('chromium', summary='test', status='Untriaged', cc='foo@chromium.org')
+            MonorailIssue(
+                'chromium',
+                summary='test',
+                status='Untriaged',
+                cc='foo@chromium.org')
         with self.assertRaises(AssertionError):
-            MonorailIssue('chromium', summary='test', status='Untriaged', components='Infra')
+            MonorailIssue(
+                'chromium',
+                summary='test',
+                status='Untriaged',
+                components='Infra')
         with self.assertRaises(AssertionError):
-            MonorailIssue('chromium', summary='test', status='Untriaged', labels='Flaky')
+            MonorailIssue(
+                'chromium', summary='test', status='Untriaged', labels='Flaky')
 
     def test_new_chromium_issue(self):
         issue = MonorailIssue.new_chromium_issue(
-            'test', description='body', cc=['foo@chromium.org'], components=['Infra'])
+            'test',
+            description='body',
+            cc=['foo@chromium.org'],
+            components=['Infra'])
         self.assertEqual(issue.project_id, 'chromium')
         self.assertEqual(issue.body['summary'], 'test')
         self.assertEqual(issue.body['description'], 'body')
@@ -69,18 +92,23 @@
         self.assertEqual(issue.body['components'], ['Infra'])
 
     def test_crbug_link(self):
-        self.assertEqual(MonorailIssue.crbug_link(12345), 'https://crbug.com/12345')
+        self.assertEqual(
+            MonorailIssue.crbug_link(12345), 'https://crbug.com/12345')
 
 
 class MonorailAPITest(unittest.TestCase):
-
     def test_fix_cc_field_in_body(self):
         original_body = {
             'summary': 'test bug',
             'cc': ['foo@chromium.org', 'bar@chromium.org']
         }
         # pylint: disable=protected-access
-        self.assertEqual(MonorailAPI._fix_cc_in_body(original_body), {
-            'summary': 'test bug',
-            'cc': [{'name': 'foo@chromium.org'}, {'name': 'bar@chromium.org'}]
-        })
+        self.assertEqual(
+            MonorailAPI._fix_cc_in_body(original_body), {
+                'summary': 'test bug',
+                'cc': [{
+                    'name': 'foo@chromium.org'
+                }, {
+                    'name': 'bar@chromium.org'
+                }]
+            })
diff --git a/third_party/blink/tools/blinkpy/w3c/pr_cleanup_tool.py b/third_party/blink/tools/blinkpy/w3c/pr_cleanup_tool.py
index bf5a7ec..a205c07 100644
--- a/third_party/blink/tools/blinkpy/w3c/pr_cleanup_tool.py
+++ b/third_party/blink/tools/blinkpy/w3c/pr_cleanup_tool.py
@@ -6,9 +6,7 @@
 from blinkpy.common.system.log_utils import configure_logging
 from blinkpy.w3c.wpt_github import WPTGitHub
 from blinkpy.w3c.gerrit import GerritAPI, GerritError
-from blinkpy.w3c.common import (
-    read_credentials
-)
+from blinkpy.w3c.common import (read_credentials)
 
 _log = logging.getLogger(__name__)
 
@@ -44,8 +42,8 @@
                          'script may fail with a network error when making '
                          'an API request to Gerrit.')
 
-        self.wpt_github = self.wpt_github or WPTGitHub(
-            self.host, gh_user, gh_token)
+        self.wpt_github = self.wpt_github or WPTGitHub(self.host, gh_user,
+                                                       gh_token)
         self.gerrit = self.gerrit or GerritAPI(self.host, gr_user, gr_token)
         pull_requests = self.retrieve_all_prs()
         for pull_request in pull_requests:
@@ -60,8 +58,8 @@
             try:
                 cl = self.gerrit.query_cl(change_id)
             except GerritError as e:
-                _log.error(
-                    'Could not query change_id %s: %s', change_id, str(e))
+                _log.error('Could not query change_id %s: %s', change_id,
+                           str(e))
                 continue
 
             cl_status = cl.status
@@ -80,12 +78,14 @@
         parser = argparse.ArgumentParser()
         parser.description = __doc__
         parser.add_argument(
-            '-v', '--verbose', action='store_true',
+            '-v',
+            '--verbose',
+            action='store_true',
             help='log extra details that may be helpful when debugging')
         parser.add_argument(
             '--credentials-json',
             help='A JSON file with GitHub credentials, '
-                 'generally not necessary on developer machines')
+            'generally not necessary on developer machines')
         return parser.parse_args(argv)
 
     def retrieve_all_prs(self):
@@ -104,5 +104,6 @@
         _log.info(comment)
         _log.info('https://github.com/web-platform-tests/wpt/pull/%s',
                   pull_request.number)
-        _log.info(self.wpt_github.extract_metadata(
-            'Reviewed-on: ', pull_request.body))
+        _log.info(
+            self.wpt_github.extract_metadata('Reviewed-on: ',
+                                             pull_request.body))
diff --git a/third_party/blink/tools/blinkpy/w3c/pr_cleanup_tool_unittest.py b/third_party/blink/tools/blinkpy/w3c/pr_cleanup_tool_unittest.py
index d5d8e24..e542d7d7 100644
--- a/third_party/blink/tools/blinkpy/w3c/pr_cleanup_tool_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/pr_cleanup_tool_unittest.py
@@ -11,7 +11,6 @@
 
 
 class PrCleanupToolTest(LoggingTestCase):
-
     def setUp(self):
         super(PrCleanupToolTest, self).setUp()
         host = MockHost()
@@ -28,8 +27,12 @@
     def test_main_successful_close_abandoned_cl(self):
         pr_cleanup = PrCleanupTool(self.host)
         pr_cleanup.wpt_github = MockWPTGitHub(pull_requests=[
-            PullRequest(title='title1', number=1234,
-                        body='Change-Id: 88', state='open', labels=[]),
+            PullRequest(
+                title='title1',
+                number=1234,
+                body='Change-Id: 88',
+                state='open',
+                labels=[]),
         ])
         pr_cleanup.gerrit = MockGerritAPI()
         pr_cleanup.gerrit.cl = MockGerritCL(
@@ -41,9 +44,13 @@
                 'current_revision': '1',
                 'has_review_started': True,
                 'revisions': {
-                    '1': {'commit_with_footers': 'a commit with footers'}
+                    '1': {
+                        'commit_with_footers': 'a commit with footers'
+                    }
                 },
-                'owner': {'email': 'test@chromium.org'},
+                'owner': {
+                    'email': 'test@chromium.org'
+                },
             },
             api=pr_cleanup.gerrit)
         pr_cleanup.main(['--credentials-json', '/tmp/credentials.json'])
@@ -51,13 +58,18 @@
         self.assertEqual(pr_cleanup.wpt_github.calls, [
             'all_pull_requests',
             'add_comment "Close this PR because the Chromium CL has been abandoned."',
-            'update_pr', 'get_pr_branch', 'delete_remote_branch'])
+            'update_pr', 'get_pr_branch', 'delete_remote_branch'
+        ])
 
     def test_main_successful_close_no_exportable_changes(self):
         pr_cleanup = PrCleanupTool(self.host)
         pr_cleanup.wpt_github = MockWPTGitHub(pull_requests=[
-            PullRequest(title='title1', number=1234,
-                        body='Change-Id: 99', state='open', labels=[]),
+            PullRequest(
+                title='title1',
+                number=1234,
+                body='Change-Id: 99',
+                state='open',
+                labels=[]),
         ])
         pr_cleanup.gerrit = MockGerritAPI()
         pr_cleanup.gerrit.cl = MockGerritCL(
@@ -69,12 +81,16 @@
                 'current_revision': '1',
                 'has_review_started': True,
                 'revisions': {
-                    '1': {'commit_with_footers': 'a commit with footers',
-                          'files': {
-                              RELATIVE_WEB_TESTS + 'foo/bar.html': '',
-                          }}
+                    '1': {
+                        'commit_with_footers': 'a commit with footers',
+                        'files': {
+                            RELATIVE_WEB_TESTS + 'foo/bar.html': '',
+                        }
+                    }
                 },
-                'owner': {'email': 'test@chromium.org'},
+                'owner': {
+                    'email': 'test@chromium.org'
+                },
             },
             api=pr_cleanup.gerrit)
         pr_cleanup.main(['--credentials-json', '/tmp/credentials.json'])
@@ -82,14 +98,19 @@
         self.assertEqual(pr_cleanup.wpt_github.calls, [
             'all_pull_requests',
             'add_comment "Close this PR because the Chromium'
-            ' CL does not have exportable changes."',
-            'update_pr', 'get_pr_branch', 'delete_remote_branch'])
+            ' CL does not have exportable changes."', 'update_pr',
+            'get_pr_branch', 'delete_remote_branch'
+        ])
 
     def test_query_cl_raise_exception(self):
         pr_cleanup = PrCleanupTool(self.host)
         pr_cleanup.wpt_github = MockWPTGitHub(pull_requests=[
-            PullRequest(title='title1', number=1234,
-                        body='Change-Id: 88', state='open', labels=[]),
+            PullRequest(
+                title='title1',
+                number=1234,
+                body='Change-Id: 88',
+                state='open',
+                labels=[]),
         ])
         pr_cleanup.gerrit = MockGerritAPI(raise_error=True)
         pr_cleanup.gerrit.cl = MockGerritCL(
@@ -101,9 +122,13 @@
                 'current_revision': '1',
                 'has_review_started': True,
                 'revisions': {
-                    '1': {'commit_with_footers': 'a commit with footers'}
+                    '1': {
+                        'commit_with_footers': 'a commit with footers'
+                    }
                 },
-                'owner': {'email': 'test@chromium.org'},
+                'owner': {
+                    'email': 'test@chromium.org'
+                },
             },
             api=pr_cleanup.gerrit)
         pr_cleanup.main(['--credentials-json', '/tmp/credentials.json'])
diff --git a/third_party/blink/tools/blinkpy/w3c/test_copier.py b/third_party/blink/tools/blinkpy/w3c/test_copier.py
index 61cd831c..00e157a 100644
--- a/third_party/blink/tools/blinkpy/w3c/test_copier.py
+++ b/third_party/blink/tools/blinkpy/w3c/test_copier.py
@@ -24,7 +24,6 @@
 # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
 # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
-
 """Logic for converting and copying files from a W3C repo.
 
 This module is responsible for modifying and copying a subset of the tests from
@@ -40,12 +39,11 @@
 
 _log = logging.getLogger(__name__)
 
-
 # Directory for imported tests relative to the web tests base directory.
 DEST_DIR_NAME = 'external'
 
-class TestCopier(object):
 
+class TestCopier(object):
     def __init__(self, host, source_repo_path):
         """Initializes variables to prepare for copying and converting files.
 
@@ -63,10 +61,10 @@
         self.web_tests_dir = self.path_finder.web_tests_dir()
         self.destination_directory = self.filesystem.normpath(
             self.filesystem.join(
-                self.web_tests_dir,
-                DEST_DIR_NAME,
+                self.web_tests_dir, DEST_DIR_NAME,
                 self.filesystem.basename(self.source_repo_path)))
-        self.import_in_place = (self.source_repo_path == self.destination_directory)
+        self.import_in_place = (
+            self.source_repo_path == self.destination_directory)
         self.dir_above_repo = self.filesystem.dirname(self.source_repo_path)
 
         self.import_list = []
@@ -76,7 +74,8 @@
         self._prefixed_properties = {}
 
     def do_import(self):
-        _log.info('Importing %s into %s', self.source_repo_path, self.destination_directory)
+        _log.info('Importing %s into %s', self.source_repo_path,
+                  self.destination_directory)
         self.find_importable_tests()
         self.import_tests()
 
@@ -92,7 +91,7 @@
             cur_dir = root.replace(self.dir_above_repo + '/', '') + '/'
             _log.debug('Scanning %s...', cur_dir)
 
-            dirs_to_skip = ('.git',)
+            dirs_to_skip = ('.git', )
 
             if dirs:
                 for name in dirs_to_skip:
@@ -114,7 +113,8 @@
             for filename in files:
                 path_full = self.filesystem.join(root, filename)
                 path_base = path_full.replace(self.source_repo_path + '/', '')
-                path_base = self.destination_directory.replace(self.web_tests_dir + '/', '') + '/' + path_base
+                path_base = self.destination_directory.replace(
+                    self.web_tests_dir + '/', '') + '/' + path_base
                 if path_base in paths_to_skip:
                     if self.import_in_place:
                         _log.debug('Pruning: %s', path_base)
@@ -126,30 +126,43 @@
 
                 if is_basename_skipped(filename):
                     _log.debug('Skipping: %s', path_full)
-                    _log.debug('  Reason: This file may cause Chromium presubmit to fail.')
+                    _log.debug(
+                        '  Reason: This file may cause Chromium presubmit to fail.'
+                    )
                     continue
 
                 copy_list.append({'src': path_full, 'dest': filename})
 
             if copy_list:
                 # Only add this directory to the list if there's something to import
-                self.import_list.append({'dirname': root, 'copy_list': copy_list})
+                self.import_list.append({
+                    'dirname': root,
+                    'copy_list': copy_list
+                })
 
     def find_paths_to_skip(self):
         paths_to_skip = set()
         port = self.host.port_factory.get()
-        w3c_import_expectations_path = self.path_finder.path_from_web_tests('W3CImportExpectations')
-        w3c_import_expectations = self.filesystem.read_text_file(w3c_import_expectations_path)
-        expectations = TestExpectations(port, {w3c_import_expectations_path: w3c_import_expectations})
+        w3c_import_expectations_path = self.path_finder.path_from_web_tests(
+            'W3CImportExpectations')
+        w3c_import_expectations = self.filesystem.read_text_file(
+            w3c_import_expectations_path)
+        expectations = TestExpectations(
+            port, {w3c_import_expectations_path: w3c_import_expectations})
 
         # get test names that should be skipped
-        for line in expectations.get_updated_lines(w3c_import_expectations_path):
+        for line in expectations.get_updated_lines(
+                w3c_import_expectations_path):
             if line.is_glob:
-                _log.warning('W3CImportExpectations:%d Globs are not allowed in this file.' % line.lineno)
+                _log.warning(
+                    'W3CImportExpectations:%d Globs are not allowed in this file.'
+                    % line.lineno)
                 continue
             if ResultType.Skip in line.results:
                 if line.tags:
-                    _log.warning('W3CImportExpectations:%d should not have any specifiers' % line.lineno)
+                    _log.warning(
+                        'W3CImportExpectations:%d should not have any specifiers'
+                        % line.lineno)
                 paths_to_skip.add(line.test)
 
         return paths_to_skip
@@ -162,8 +175,10 @@
 
             orig_path = dir_to_copy['dirname']
 
-            relative_dir = self.filesystem.relpath(orig_path, self.source_repo_path)
-            dest_dir = self.filesystem.join(self.destination_directory, relative_dir)
+            relative_dir = self.filesystem.relpath(orig_path,
+                                                   self.source_repo_path)
+            dest_dir = self.filesystem.join(self.destination_directory,
+                                            relative_dir)
 
             if not self.filesystem.exists(dest_dir):
                 self.filesystem.maybe_make_directory(dest_dir)
@@ -177,8 +192,11 @@
 
         if self._prefixed_properties:
             _log.info('Properties needing prefixes (by count):')
-            for prefixed_property in sorted(self._prefixed_properties, key=lambda p: self._prefixed_properties[p]):
-                _log.info('  %s: %s', prefixed_property, self._prefixed_properties[prefixed_property])
+            for prefixed_property in sorted(
+                    self._prefixed_properties,
+                    key=lambda p: self._prefixed_properties[p]):
+                _log.info('  %s: %s', prefixed_property,
+                          self._prefixed_properties[prefixed_property])
 
     def copy_file(self, file_to_copy, dest_dir):
         """Converts and copies a file, if it should be copied.
@@ -200,12 +218,14 @@
             return
 
         if not self.filesystem.exists(source_path):
-            _log.error('%s not found. Possible error in the test.', source_path)
+            _log.error('%s not found. Possible error in the test.',
+                       source_path)
             return
 
         if not self.filesystem.exists(self.filesystem.dirname(dest_path)):
             if not self.import_in_place:
-                self.filesystem.maybe_make_directory(self.filesystem.dirname(dest_path))
+                self.filesystem.maybe_make_directory(
+                    self.filesystem.dirname(dest_path))
 
         relpath = self.filesystem.relpath(dest_path, self.web_tests_dir)
         # FIXME: Maybe doing a file diff is in order here for existing files?
diff --git a/third_party/blink/tools/blinkpy/w3c/test_copier_unittest.py b/third_party/blink/tools/blinkpy/w3c/test_copier_unittest.py
index 744b0007..60f5265 100644
--- a/third_party/blink/tools/blinkpy/w3c/test_copier_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/test_copier_unittest.py
@@ -32,7 +32,6 @@
 from blinkpy.common.system.log_testing import LoggingTestCase
 from blinkpy.w3c.test_copier import TestCopier
 
-
 MOCK_WEB_TESTS = '/mock-checkout/' + RELATIVE_WEB_TESTS
 
 FAKE_SOURCE_REPO_DIR = '/blink'
@@ -49,7 +48,6 @@
 
 
 class TestCopierTest(LoggingTestCase):
-
     def test_import_dir_with_no_tests(self):
         host = MockHost()
         host.executive = MockExecutive(exception=ScriptError('error'))
@@ -62,34 +60,34 @@
         host.filesystem = MockFileSystem(files=FAKE_FILES)
         copier = TestCopier(host, FAKE_SOURCE_REPO_DIR)
         copier.find_importable_tests()
-        self.assertEqual(
-            copier.import_list,
-            [
-                {
-                    'copy_list': [
-                        {'dest': 'has_shebang.txt', 'src': '/blink/w3c/dir/has_shebang.txt'},
-                        {'dest': 'README.txt', 'src': '/blink/w3c/dir/README.txt'}
-                    ],
-                    'dirname': '/blink/w3c/dir',
-                }
-            ])
+        self.assertEqual(copier.import_list, [{
+            'copy_list': [{
+                'dest': 'has_shebang.txt',
+                'src': '/blink/w3c/dir/has_shebang.txt'
+            }, {
+                'dest': 'README.txt',
+                'src': '/blink/w3c/dir/README.txt'
+            }],
+            'dirname':
+            '/blink/w3c/dir',
+        }])
 
     def test_does_not_import_reftestlist_file(self):
         host = MockHost()
         host.filesystem = MockFileSystem(files=FAKE_FILES)
         copier = TestCopier(host, FAKE_SOURCE_REPO_DIR)
         copier.find_importable_tests()
-        self.assertEqual(
-            copier.import_list,
-            [
-                {
-                    'copy_list': [
-                        {'dest': 'has_shebang.txt', 'src': '/blink/w3c/dir/has_shebang.txt'},
-                        {'dest': 'README.txt', 'src': '/blink/w3c/dir/README.txt'}
-                    ],
-                    'dirname': '/blink/w3c/dir',
-                }
-            ])
+        self.assertEqual(copier.import_list, [{
+            'copy_list': [{
+                'dest': 'has_shebang.txt',
+                'src': '/blink/w3c/dir/has_shebang.txt'
+            }, {
+                'dest': 'README.txt',
+                'src': '/blink/w3c/dir/README.txt'
+            }],
+            'dirname':
+            '/blink/w3c/dir',
+        }])
 
     def test_files_with_shebang_are_made_executable(self):
         host = MockHost()
@@ -102,21 +100,26 @@
 
     def test_ref_test_with_ref_is_copied(self):
         host = MockHost()
-        host.filesystem = MockFileSystem(files={
-            '/blink/w3c/dir1/my-ref-test.html': '<html><head><link rel="match" href="ref-file.html" />test</head></html>',
-            '/blink/w3c/dir1/ref-file.html': '<html><head>test</head></html>',
-            MOCK_WEB_TESTS + 'W3CImportExpectations': '',
-        })
+        host.filesystem = MockFileSystem(
+            files={
+                '/blink/w3c/dir1/my-ref-test.html':
+                '<html><head><link rel="match" href="ref-file.html" />test</head></html>',
+                '/blink/w3c/dir1/ref-file.html':
+                '<html><head>test</head></html>',
+                MOCK_WEB_TESTS + 'W3CImportExpectations':
+                '',
+            })
         copier = TestCopier(host, FAKE_SOURCE_REPO_DIR)
         copier.find_importable_tests()
-        self.assertEqual(
-            copier.import_list,
-            [
-                {
-                    'copy_list': [
-                        {'src': '/blink/w3c/dir1/ref-file.html', 'dest': 'ref-file.html'},
-                        {'src': '/blink/w3c/dir1/my-ref-test.html', 'dest': 'my-ref-test.html'}
-                    ],
-                    'dirname': '/blink/w3c/dir1',
-                }
-            ])
+        self.assertEqual(copier.import_list, [{
+            'copy_list': [{
+                'src': '/blink/w3c/dir1/ref-file.html',
+                'dest': 'ref-file.html'
+            },
+                          {
+                              'src': '/blink/w3c/dir1/my-ref-test.html',
+                              'dest': 'my-ref-test.html'
+                          }],
+            'dirname':
+            '/blink/w3c/dir1',
+        }])
diff --git a/third_party/blink/tools/blinkpy/w3c/test_exporter.py b/third_party/blink/tools/blinkpy/w3c/test_exporter.py
index d7c4dc3b..89afaf4 100644
--- a/third_party/blink/tools/blinkpy/w3c/test_exporter.py
+++ b/third_party/blink/tools/blinkpy/w3c/test_exporter.py
@@ -1,7 +1,6 @@
 # Copyright 2016 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.
-
 """Exports Chromium changes to web-platform-tests."""
 
 import argparse
@@ -26,7 +25,6 @@
 
 
 class TestExporter(object):
-
     def __init__(self, host):
         self.host = host
         self.wpt_github = None
@@ -59,9 +57,12 @@
                        'your credentials up.')
             return False
 
-        self.wpt_github = self.wpt_github or WPTGitHub(self.host, credentials['GH_USER'], credentials['GH_TOKEN'])
-        self.gerrit = self.gerrit or GerritAPI(self.host, credentials['GERRIT_USER'], credentials['GERRIT_TOKEN'])
-        self.local_wpt = self.local_wpt or LocalWPT(self.host, credentials['GH_TOKEN'])
+        self.wpt_github = self.wpt_github or WPTGitHub(
+            self.host, credentials['GH_USER'], credentials['GH_TOKEN'])
+        self.gerrit = self.gerrit or GerritAPI(
+            self.host, credentials['GERRIT_USER'], credentials['GERRIT_TOKEN'])
+        self.local_wpt = self.local_wpt or LocalWPT(self.host,
+                                                    credentials['GH_TOKEN'])
         self.local_wpt.fetch()
 
         _log.info('Searching for exportable in-flight CLs.')
@@ -70,7 +71,8 @@
         try:
             open_gerrit_cls = self.gerrit.query_exportable_open_cls()
         except GerritError as e:
-            _log.info('In-flight CLs cannot be exported due to the following error:')
+            _log.info(
+                'In-flight CLs cannot be exported due to the following error:')
             _log.error(str(e))
             gerrit_error = True
         else:
@@ -81,8 +83,9 @@
         exportable_commits, git_errors = self.get_exportable_commits()
         self.process_chromium_commits(exportable_commits)
         if git_errors:
-            _log.info('Attention: The following errors have prevented some commits from being '
-                      'exported:')
+            _log.info(
+                'Attention: The following errors have prevented some commits from being '
+                'exported:')
             for error in git_errors:
                 _log.error(error)
 
@@ -103,20 +106,25 @@
     def parse_args(self, argv):
         parser = argparse.ArgumentParser(description=__doc__)
         parser.add_argument(
-            '-v', '--verbose', action='store_true',
+            '-v',
+            '--verbose',
+            action='store_true',
             help='log extra details that may be helpful when debugging')
         parser.add_argument(
-            '--dry-run', action='store_true',
+            '--dry-run',
+            action='store_true',
             help='See what would be done without actually creating or merging '
-                 'any pull requests.')
+            'any pull requests.')
         parser.add_argument(
-            '--credentials-json', required=True,
+            '--credentials-json',
+            required=True,
             help='A JSON file with an object containing zero or more of the '
-                 'following keys: GH_USER, GH_TOKEN, GERRIT_USER, GERRIT_TOKEN')
+            'following keys: GH_USER, GH_TOKEN, GERRIT_USER, GERRIT_TOKEN')
         parser.add_argument(
-            '--surface-failures-to-gerrit', action='store_true',
+            '--surface-failures-to-gerrit',
+            action='store_true',
             help='Indicates whether to run the service that surfaces GitHub '
-                 'faliures to Gerrit through comments.')
+            'faliures to Gerrit through comments.')
         return parser.parse_args(argv)
 
     def process_gerrit_cls(self, gerrit_cls):
@@ -136,9 +144,11 @@
             pr_url = '{}pull/{}'.format(WPT_GH_URL, pull_request.number)
             _log.info('In-flight PR found: %s', pr_url)
 
-            pr_cl_revision = self.wpt_github.extract_metadata(WPT_REVISION_FOOTER, pull_request.body)
+            pr_cl_revision = self.wpt_github.extract_metadata(
+                WPT_REVISION_FOOTER, pull_request.body)
             if cl.current_revision_sha == pr_cl_revision:
-                _log.info('PR revision matches CL revision. Nothing to do here.')
+                _log.info(
+                    'PR revision matches CL revision. Nothing to do here.')
                 return
 
             _log.info('New revision found, updating PR...')
@@ -153,7 +163,8 @@
             self.process_chromium_commit(commit)
 
     def process_chromium_commit(self, commit):
-        _log.info('Found exportable Chromium commit: %s %s', commit.subject(), commit.sha)
+        _log.info('Found exportable Chromium commit: %s %s', commit.subject(),
+                  commit.sha)
 
         pull_request = self.wpt_github.pr_for_chromium_commit(commit)
         if pull_request:
@@ -170,7 +181,8 @@
                 # TODO(robertma): Only update the PR when it is not up-to-date
                 # to avoid unnecessary Travis runs.
                 _log.info('Updating PR with the final checked-in change...')
-                self.create_or_update_pr_from_landed_commit(commit, pull_request)
+                self.create_or_update_pr_from_landed_commit(
+                    commit, pull_request)
                 self.remove_provisional_pr_label(pull_request)
                 # Updating the patch triggers Travis, which will block merge.
                 # Return early and merge next time.
@@ -196,7 +208,9 @@
 
     def remove_provisional_pr_label(self, pull_request):
         if self.dry_run:
-            _log.info('[dry_run] Would have attempted to remove the provisional PR label')
+            _log.info(
+                '[dry_run] Would have attempted to remove the provisional PR label'
+            )
             return
 
         _log.info('Removing provisional label "%s"...', PROVISIONAL_PR_LABEL)
@@ -215,20 +229,20 @@
 
         try:
             self.wpt_github.merge_pr(pull_request.number)
-            change_id = self.wpt_github.extract_metadata(CHANGE_ID_FOOTER, pull_request.body)
+            change_id = self.wpt_github.extract_metadata(
+                CHANGE_ID_FOOTER, pull_request.body)
             if change_id:
                 cl = GerritCL(data={'change_id': change_id}, api=self.gerrit)
                 pr_url = '{}pull/{}'.format(WPT_GH_URL, pull_request.number)
                 cl.post_comment((
                     'The WPT PR for this CL has been merged upstream! {pr_url}'
-                ).format(
-                    pr_url=pr_url
-                ))
+                ).format(pr_url=pr_url))
 
         except MergeError:
             _log.warn('Could not merge PR.')
 
-    def create_or_update_pr_from_landed_commit(self, commit, pull_request=None):
+    def create_or_update_pr_from_landed_commit(self, commit,
+                                               pull_request=None):
         """Creates or updates a PR from a landed Chromium commit.
 
         Args:
@@ -237,10 +251,12 @@
                 If specified, updates the PR instead of creating one.
         """
         if pull_request:
-            self.create_or_update_pr_from_commit(commit, provisional=False, pr_number=pull_request.number)
+            self.create_or_update_pr_from_commit(
+                commit, provisional=False, pr_number=pull_request.number)
         else:
             branch_name = 'chromium-export-' + commit.short_sha
-            self.create_or_update_pr_from_commit(commit, provisional=False, pr_branch_name=branch_name)
+            self.create_or_update_pr_from_commit(
+                commit, provisional=False, pr_branch_name=branch_name)
 
     def create_or_update_pr_from_inflight_cl(self, cl, pull_request=None):
         """Creates or updates a PR from an in-flight Gerrit CL.
@@ -257,7 +273,8 @@
         if not success:
             _log.error('Gerrit CL patch did not apply cleanly:')
             _log.error(error)
-            _log.debug('First 500 characters of patch: << END_OF_PATCH_EXCERPT')
+            _log.debug(
+                'First 500 characters of patch: << END_OF_PATCH_EXCERPT')
             _log.debug(patch[0:500])
             _log.debug('END_OF_PATCH_EXCERPT')
             return
@@ -266,7 +283,8 @@
         # Change-Id can be deleted from the body of an in-flight CL in Chromium
         # (https://crbug.com/gerrit/12244). We need to add it back. And we've
         # asserted that cl.change_id is present in GerritCL.
-        if not self.wpt_github.extract_metadata(CHANGE_ID_FOOTER, commit.message()):
+        if not self.wpt_github.extract_metadata(CHANGE_ID_FOOTER,
+                                                commit.message()):
             _log.warn('Adding missing Change-Id back to %s', cl.url)
             footer += '{}{}\n'.format(CHANGE_ID_FOOTER, cl.change_id)
         # Reviewed-on footer is not in the git commit message of in-flight CLs,
@@ -277,22 +295,27 @@
 
         if pull_request:
             pr_number = self.create_or_update_pr_from_commit(
-                commit, provisional=True, pr_number=pull_request.number, pr_footer=footer)
+                commit,
+                provisional=True,
+                pr_number=pull_request.number,
+                pr_footer=footer)
             if pr_number is None:
                 return
 
             # TODO(jeffcarp): Turn PullRequest into a class with a .url method
-            cl.post_comment((
-                'Successfully updated WPT GitHub pull request with '
-                'new revision "{subject}": {pr_url}'
-            ).format(
-                subject=cl.current_revision_description,
-                pr_url='%spull/%d' % (WPT_GH_URL, pull_request.number),
-            ))
+            cl.post_comment(
+                ('Successfully updated WPT GitHub pull request with '
+                 'new revision "{subject}": {pr_url}').format(
+                     subject=cl.current_revision_description,
+                     pr_url='%spull/%d' % (WPT_GH_URL, pull_request.number),
+                 ))
         else:
             branch_name = 'chromium-export-cl-{}'.format(cl.number)
             pr_number = self.create_or_update_pr_from_commit(
-                commit, provisional=True, pr_footer=footer, pr_branch_name=branch_name)
+                commit,
+                provisional=True,
+                pr_footer=footer,
+                pr_branch_name=branch_name)
             if pr_number is None:
                 return
 
@@ -305,11 +328,14 @@
                 'WPT Export docs:\n'
                 'https://chromium.googlesource.com/chromium/src/+/master'
                 '/docs/testing/web_platform_tests.md#Automatic-export-process'
-            ).format(
-                pr_url='%spull/%d' % (WPT_GH_URL, pr_number)
-            ))
+            ).format(pr_url='%spull/%d' % (WPT_GH_URL, pr_number)))
 
-    def create_or_update_pr_from_commit(self, commit, provisional, pr_number=None, pr_footer='', pr_branch_name=None):
+    def create_or_update_pr_from_commit(self,
+                                        commit,
+                                        provisional,
+                                        pr_number=None,
+                                        pr_footer='',
+                                        pr_branch_name=None):
         """Creates or updates a PR from a Chromium commit.
 
         The commit can be either landed or in-flight. The exportable portion of
@@ -348,20 +374,25 @@
         if self.dry_run:
             action_str = 'updating' if updating else 'creating'
             origin_str = 'CL' if provisional else 'Chromium commit'
-            _log.info('[dry_run] Stopping before %s PR from %s', action_str, origin_str)
+            _log.info('[dry_run] Stopping before %s PR from %s', action_str,
+                      origin_str)
             _log.info('\n\n[dry_run] message:')
             _log.info(message)
-            _log.debug('\n[dry_run] First 500 characters of patch: << END_OF_PATCH_EXCERPT')
+            _log.debug(
+                '\n[dry_run] First 500 characters of patch: << END_OF_PATCH_EXCERPT'
+            )
             _log.debug(patch[0:500])
             _log.debug('END_OF_PATCH_EXCERPT')
             return
 
-        self.local_wpt.create_branch_with_patch(pr_branch_name, message, patch, author, force_push=True)
+        self.local_wpt.create_branch_with_patch(
+            pr_branch_name, message, patch, author, force_push=True)
 
         if updating:
             self.wpt_github.update_pr(pr_number, subject, pr_description)
         else:
-            pr_number = self.wpt_github.create_pr(pr_branch_name, subject, pr_description)
+            pr_number = self.wpt_github.create_pr(pr_branch_name, subject,
+                                                  pr_description)
             self.wpt_github.add_label(pr_number, EXPORT_PR_LABEL)
             if provisional:
                 self.wpt_github.add_label(pr_number, PROVISIONAL_PR_LABEL)
diff --git a/third_party/blink/tools/blinkpy/w3c/test_exporter_unittest.py b/third_party/blink/tools/blinkpy/w3c/test_exporter_unittest.py
index 21981e5..2b5f8ac 100644
--- a/third_party/blink/tools/blinkpy/w3c/test_exporter_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/test_exporter_unittest.py
@@ -15,7 +15,6 @@
 
 
 class TestExporterTest(LoggingTestCase):
-
     def setUp(self):
         super(TestExporterTest, self).setUp()
         host = MockHost()
@@ -32,26 +31,34 @@
     def test_dry_run_stops_before_creating_pr(self):
         test_exporter = TestExporter(self.host)
         test_exporter.wpt_github = MockWPTGitHub(pull_requests=[
-            PullRequest(title='title1', number=1234,
-                        body='', state='open', labels=[]),
+            PullRequest(
+                title='title1', number=1234, body='', state='open', labels=[]),
         ])
         test_exporter.gerrit = MockGerritAPI()
-        test_exporter.gerrit.exportable_open_cls = [MockGerritCL(
-            data={
-                'change_id': 'I001',
-                'subject': 'subject',
-                '_number': 1234,
-                'current_revision': '1',
-                'has_review_started': True,
-                'revisions': {
-                    '1': {'commit_with_footers': 'a commit with footers'}
+        test_exporter.gerrit.exportable_open_cls = [
+            MockGerritCL(
+                data={
+                    'change_id': 'I001',
+                    'subject': 'subject',
+                    '_number': 1234,
+                    'current_revision': '1',
+                    'has_review_started': True,
+                    'revisions': {
+                        '1': {
+                            'commit_with_footers': 'a commit with footers'
+                        }
+                    },
+                    'owner': {
+                        'email': 'test@chromium.org'
+                    },
                 },
-                'owner': {'email': 'test@chromium.org'},
-            },
-            api=test_exporter.gerrit,
-            chromium_commit=MockChromiumCommit(self.host, subject='subject',
-                                               body='fake body', change_id='I001')
-        )]
+                api=test_exporter.gerrit,
+                chromium_commit=MockChromiumCommit(
+                    self.host,
+                    subject='subject',
+                    body='fake body',
+                    change_id='I001'))
+        ]
         test_exporter.get_exportable_commits = lambda: ([
             MockChromiumCommit(
                 self.host, position='refs/heads/master@{#458475}'),
@@ -86,20 +93,22 @@
             ['--credentials-json', '/tmp/credentials.json'])
 
         self.assertTrue(success)
-        self.assertEqual(test_exporter.wpt_github.calls, [
-            # 1
-            'pr_for_chromium_commit',
-            'create_pr',
-            'add_label "chromium-export"',
-            # 2
-            'pr_for_chromium_commit',
-            'create_pr',
-            'add_label "chromium-export"',
-            # 3
-            'pr_for_chromium_commit',
-            'create_pr',
-            'add_label "chromium-export"',
-        ])
+        self.assertEqual(
+            test_exporter.wpt_github.calls,
+            [
+                # 1
+                'pr_for_chromium_commit',
+                'create_pr',
+                'add_label "chromium-export"',
+                # 2
+                'pr_for_chromium_commit',
+                'create_pr',
+                'add_label "chromium-export"',
+                # 3
+                'pr_for_chromium_commit',
+                'create_pr',
+                'add_label "chromium-export"',
+            ])
         self.assertEqual(test_exporter.wpt_github.pull_requests_created, [
             ('chromium-export-96862edfc1', 'subject 1',
              'body 1\n\nChange-Id: I001\n'),
@@ -115,36 +124,40 @@
         # 4. #458478 has an in-flight PR associated with it and should be merged successfully.
         # 5. #458479 has an in-flight PR associated with it but can not be merged.
         test_exporter = TestExporter(self.host)
-        test_exporter.wpt_github = MockWPTGitHub(pull_requests=[
-            PullRequest(
-                title='Open PR',
-                number=1234,
-                body='rutabaga\nCr-Commit-Position: refs/heads/master@{#458475}\nChange-Id: I0005',
-                state='open',
-                labels=['do not merge yet']
-            ),
-            PullRequest(
-                title='Merged PR',
-                number=2345,
-                body='rutabaga\nCr-Commit-Position: refs/heads/master@{#458477}\nChange-Id: Idead',
-                state='closed',
-                labels=[]
-            ),
-            PullRequest(
-                title='Open PR',
-                number=3456,
-                body='rutabaga\nCr-Commit-Position: refs/heads/master@{#458478}\nChange-Id: I0118',
-                state='open',
-                labels=[]  # It's important that this is empty.
-            ),
-            PullRequest(
-                title='Open PR',
-                number=4747,
-                body='rutabaga\nCr-Commit-Position: refs/heads/master@{#458479}\nChange-Id: I0147',
-                state='open',
-                labels=[]  # It's important that this is empty.
-            ),
-        ], unsuccessful_merge_index=3)  # Mark the last PR as unmergable.
+        test_exporter.wpt_github = MockWPTGitHub(
+            pull_requests=[
+                PullRequest(
+                    title='Open PR',
+                    number=1234,
+                    body=
+                    'rutabaga\nCr-Commit-Position: refs/heads/master@{#458475}\nChange-Id: I0005',
+                    state='open',
+                    labels=['do not merge yet']),
+                PullRequest(
+                    title='Merged PR',
+                    number=2345,
+                    body=
+                    'rutabaga\nCr-Commit-Position: refs/heads/master@{#458477}\nChange-Id: Idead',
+                    state='closed',
+                    labels=[]),
+                PullRequest(
+                    title='Open PR',
+                    number=3456,
+                    body=
+                    'rutabaga\nCr-Commit-Position: refs/heads/master@{#458478}\nChange-Id: I0118',
+                    state='open',
+                    labels=[]  # It's important that this is empty.
+                ),
+                PullRequest(
+                    title='Open PR',
+                    number=4747,
+                    body=
+                    'rutabaga\nCr-Commit-Position: refs/heads/master@{#458479}\nChange-Id: I0147',
+                    state='open',
+                    labels=[]  # It's important that this is empty.
+                ),
+            ],
+            unsuccessful_merge_index=3)  # Mark the last PR as unmergable.
         test_exporter.gerrit = MockGerritAPI()
         test_exporter.get_exportable_commits = lambda: ([
             MockChromiumCommit(
@@ -162,30 +175,32 @@
             ['--credentials-json', '/tmp/credentials.json'])
 
         self.assertTrue(success)
-        self.assertEqual(test_exporter.wpt_github.calls, [
-            # 1. #458475
-            'pr_for_chromium_commit',
-            'get_pr_branch',
-            'update_pr',
-            'remove_label "do not merge yet"',
-            # 2. #458476
-            'pr_for_chromium_commit',
-            'create_pr',
-            'add_label "chromium-export"',
-            # 3. #458477
-            'pr_for_chromium_commit',
-            # 4. #458478
-            'pr_for_chromium_commit',
-            # Testing the lack of remove_label here. The exporter should not
-            # try to remove the provisional label from PRs it has already
-            # removed it from.
-            'get_pr_branch',
-            'merge_pr',
-            # 5. #458479
-            'pr_for_chromium_commit',
-            'get_pr_branch',
-            'merge_pr',
-        ])
+        self.assertEqual(
+            test_exporter.wpt_github.calls,
+            [
+                # 1. #458475
+                'pr_for_chromium_commit',
+                'get_pr_branch',
+                'update_pr',
+                'remove_label "do not merge yet"',
+                # 2. #458476
+                'pr_for_chromium_commit',
+                'create_pr',
+                'add_label "chromium-export"',
+                # 3. #458477
+                'pr_for_chromium_commit',
+                # 4. #458478
+                'pr_for_chromium_commit',
+                # Testing the lack of remove_label here. The exporter should not
+                # try to remove the provisional label from PRs it has already
+                # removed it from.
+                'get_pr_branch',
+                'merge_pr',
+                # 5. #458479
+                'pr_for_chromium_commit',
+                'get_pr_branch',
+                'merge_pr',
+            ])
         self.assertEqual(test_exporter.wpt_github.pull_requests_created, [
             ('chromium-export-52c3178508', 'Fake subject',
              'Fake body\n\nChange-Id: I0476\n'),
@@ -215,7 +230,11 @@
                     },
                 },
                 api=test_exporter.gerrit,
-                chromium_commit=MockChromiumCommit(self.host, subject='subject', body='fake body <html>', change_id='I001')),
+                chromium_commit=MockChromiumCommit(
+                    self.host,
+                    subject='subject',
+                    body='fake body <html>',
+                    change_id='I001')),
             MockGerritCL(
                 data={
                     'change_id': 'I002',
@@ -233,7 +252,9 @@
                     },
                 },
                 api=test_exporter.gerrit,
-                chromium_commit=MockChromiumCommit(self.host, subject='subject', body='body', change_id=None)),
+                chromium_commit=MockChromiumCommit(
+                    self.host, subject='subject', body='body',
+                    change_id=None)),
         ]
         test_exporter.main(['--credentials-json', '/tmp/credentials.json'])
 
@@ -248,10 +269,12 @@
             'add_label "do not merge yet"',
         ])
         self.assertEqual(test_exporter.wpt_github.pull_requests_created, [
-            ('chromium-export-cl-1234', 'subject', 'fake body \\<html>\n\nChange-Id: I001\nReviewed-on: '
+            ('chromium-export-cl-1234', 'subject',
+             'fake body \\<html>\n\nChange-Id: I001\nReviewed-on: '
              'https://chromium-review.googlesource.com/1234\n'
              'WPT-Export-Revision: 1'),
-            ('chromium-export-cl-1235', 'subject', 'body\nChange-Id: I002\nReviewed-on: '
+            ('chromium-export-cl-1235', 'subject',
+             'body\nChange-Id: I002\nReviewed-on: '
              'https://chromium-review.googlesource.com/1235\n'
              'WPT-Export-Revision: 1'),
         ])
@@ -260,27 +283,35 @@
     def test_gerrit_cl_no_update_if_pr_with_same_revision(self):
         test_exporter = TestExporter(self.host)
         test_exporter.wpt_github = MockWPTGitHub(pull_requests=[
-            PullRequest(title='title1', number=1234,
-                        body='description\nWPT-Export-Revision: 1',
-                        state='open', labels=[]),
+            PullRequest(
+                title='title1',
+                number=1234,
+                body='description\nWPT-Export-Revision: 1',
+                state='open',
+                labels=[]),
         ])
         test_exporter.get_exportable_commits = lambda: ([], [])
         test_exporter.gerrit = MockGerritAPI()
-        test_exporter.gerrit.exportable_open_cls = [MockGerritCL(
-            data={
-                'change_id': '1',
-                'subject': 'subject',
-                '_number': 1,
-                'current_revision': '1',
-                'has_review_started': True,
-                'revisions': {
-                    '1': {'commit_with_footers': 'a commit with footers'}
+        test_exporter.gerrit.exportable_open_cls = [
+            MockGerritCL(
+                data={
+                    'change_id': '1',
+                    'subject': 'subject',
+                    '_number': 1,
+                    'current_revision': '1',
+                    'has_review_started': True,
+                    'revisions': {
+                        '1': {
+                            'commit_with_footers': 'a commit with footers'
+                        }
+                    },
+                    'owner': {
+                        'email': 'test@chromium.org'
+                    },
                 },
-                'owner': {'email': 'test@chromium.org'},
-            },
-            api=test_exporter.gerrit,
-            chromium_commit=MockChromiumCommit(self.host)
-        )]
+                api=test_exporter.gerrit,
+                chromium_commit=MockChromiumCommit(self.host))
+        ]
         success = test_exporter.main(
             ['--credentials-json', '/tmp/credentials.json'])
 
@@ -294,34 +325,40 @@
     def test_gerrit_cl_updates_if_cl_has_new_revision(self):
         test_exporter = TestExporter(self.host)
         test_exporter.wpt_github = MockWPTGitHub(pull_requests=[
-            PullRequest(title='title1', number=1234,
-                        body='description\nWPT-Export-Revision: 1',
-                        state='open', labels=[]),
+            PullRequest(
+                title='title1',
+                number=1234,
+                body='description\nWPT-Export-Revision: 1',
+                state='open',
+                labels=[]),
         ])
         test_exporter.get_exportable_commits = lambda: ([], [])
         test_exporter.gerrit = MockGerritAPI()
-        test_exporter.gerrit.exportable_open_cls = [MockGerritCL(
-            data={
-                'change_id': '1',
-                'subject': 'subject',
-                '_number': 1,
-                'current_revision': '2',
-                'has_review_started': True,
-                'revisions': {
-                    '1': {
-                        'commit_with_footers': 'a commit with footers 1',
-                        'description': 'subject 1',
+        test_exporter.gerrit.exportable_open_cls = [
+            MockGerritCL(
+                data={
+                    'change_id': '1',
+                    'subject': 'subject',
+                    '_number': 1,
+                    'current_revision': '2',
+                    'has_review_started': True,
+                    'revisions': {
+                        '1': {
+                            'commit_with_footers': 'a commit with footers 1',
+                            'description': 'subject 1',
+                        },
+                        '2': {
+                            'commit_with_footers': 'a commit with footers 2',
+                            'description': 'subject 2',
+                        },
                     },
-                    '2': {
-                        'commit_with_footers': 'a commit with footers 2',
-                        'description': 'subject 2',
+                    'owner': {
+                        'email': 'test@chromium.org'
                     },
                 },
-                'owner': {'email': 'test@chromium.org'},
-            },
-            api=test_exporter.gerrit,
-            chromium_commit=MockChromiumCommit(self.host)
-        )]
+                api=test_exporter.gerrit,
+                chromium_commit=MockChromiumCommit(self.host))
+        ]
         test_exporter.main(['--credentials-json', '/tmp/credentials.json'])
 
         self.assertEqual(test_exporter.wpt_github.calls, [
@@ -335,13 +372,15 @@
     def test_attempts_to_merge_landed_gerrit_cl(self):
         test_exporter = TestExporter(self.host)
         test_exporter.wpt_github = MockWPTGitHub(pull_requests=[
-            PullRequest(title='title1', number=1234,
-                        body='description\nWPT-Export-Revision: 9\nChange-Id: decafbad',
-                        state='open', labels=['do not merge yet']),
+            PullRequest(
+                title='title1',
+                number=1234,
+                body='description\nWPT-Export-Revision: 9\nChange-Id: decafbad',
+                state='open',
+                labels=['do not merge yet']),
         ])
         test_exporter.get_exportable_commits = lambda: ([
-            MockChromiumCommit(self.host, change_id='decafbad'),
-        ], [])
+            MockChromiumCommit(self.host, change_id='decafbad'), ], [])
         test_exporter.gerrit = MockGerritAPI()
         success = test_exporter.main(
             ['--credentials-json', '/tmp/credentials.json'])
@@ -359,13 +398,15 @@
     def test_merges_non_provisional_pr(self):
         test_exporter = TestExporter(self.host)
         test_exporter.wpt_github = MockWPTGitHub(pull_requests=[
-            PullRequest(title='title1', number=1234,
-                        body='description\nWPT-Export-Revision: 9\nChange-Id: decafbad',
-                        state='open', labels=['']),
+            PullRequest(
+                title='title1',
+                number=1234,
+                body='description\nWPT-Export-Revision: 9\nChange-Id: decafbad',
+                state='open',
+                labels=['']),
         ])
         test_exporter.get_exportable_commits = lambda: ([
-            MockChromiumCommit(self.host, change_id='decafbad'),
-        ], [])
+            MockChromiumCommit(self.host, change_id='decafbad'), ], [])
         test_exporter.gerrit = MockGerritAPI()
         success = test_exporter.main(
             ['--credentials-json', '/tmp/credentials.json'])
@@ -384,28 +425,31 @@
         test_exporter.wpt_github = MockWPTGitHub(pull_requests=[])
         test_exporter.get_exportable_commits = lambda: ([], [])
         test_exporter.gerrit = MockGerritAPI()
-        test_exporter.gerrit.exportable_open_cls = [MockGerritCL(
-            data={
-                'change_id': '1',
-                'subject': 'subject',
-                '_number': 1,
-                'current_revision': '2',
-                'has_review_started': False,
-                'revisions': {
-                    '1': {
-                        'commit_with_footers': 'a commit with footers 1',
-                        'description': 'subject 1',
+        test_exporter.gerrit.exportable_open_cls = [
+            MockGerritCL(
+                data={
+                    'change_id': '1',
+                    'subject': 'subject',
+                    '_number': 1,
+                    'current_revision': '2',
+                    'has_review_started': False,
+                    'revisions': {
+                        '1': {
+                            'commit_with_footers': 'a commit with footers 1',
+                            'description': 'subject 1',
+                        },
+                        '2': {
+                            'commit_with_footers': 'a commit with footers 2',
+                            'description': 'subject 2',
+                        },
                     },
-                    '2': {
-                        'commit_with_footers': 'a commit with footers 2',
-                        'description': 'subject 2',
+                    'owner': {
+                        'email': 'test@chromium.org'
                     },
                 },
-                'owner': {'email': 'test@chromium.org'},
-            },
-            api=test_exporter.gerrit,
-            chromium_commit=MockChromiumCommit(self.host)
-        )]
+                api=test_exporter.gerrit,
+                chromium_commit=MockChromiumCommit(self.host))
+        ]
         success = test_exporter.main(
             ['--credentials-json', '/tmp/credentials.json'])
 
@@ -427,12 +471,14 @@
             ['--credentials-json', '/tmp/credentials.json'])
 
         self.assertFalse(success)
-        self.assertLog(['INFO: Cloning GitHub web-platform-tests/wpt into /tmp/wpt\n',
-                        'INFO: Setting git user name & email in /tmp/wpt\n',
-                        'INFO: Searching for exportable in-flight CLs.\n',
-                        'INFO: In-flight CLs cannot be exported due to the following error:\n',
-                        'ERROR: Gerrit API fails.\n',
-                        'INFO: Searching for exportable Chromium commits.\n'])
+        self.assertLog([
+            'INFO: Cloning GitHub web-platform-tests/wpt into /tmp/wpt\n',
+            'INFO: Setting git user name & email in /tmp/wpt\n',
+            'INFO: Searching for exportable in-flight CLs.\n',
+            'INFO: In-flight CLs cannot be exported due to the following error:\n',
+            'ERROR: Gerrit API fails.\n',
+            'INFO: Searching for exportable Chromium commits.\n'
+        ])
 
     def test_run_returns_false_on_patch_failure(self):
         test_exporter = TestExporter(self.host)
@@ -444,9 +490,11 @@
             ['--credentials-json', '/tmp/credentials.json'])
 
         self.assertFalse(success)
-        self.assertLog(['INFO: Cloning GitHub web-platform-tests/wpt into /tmp/wpt\n',
-                        'INFO: Setting git user name & email in /tmp/wpt\n',
-                        'INFO: Searching for exportable in-flight CLs.\n',
-                        'INFO: Searching for exportable Chromium commits.\n',
-                        'INFO: Attention: The following errors have prevented some commits from being exported:\n',
-                        'ERROR: There was an error with the rutabaga.\n'])
+        self.assertLog([
+            'INFO: Cloning GitHub web-platform-tests/wpt into /tmp/wpt\n',
+            'INFO: Setting git user name & email in /tmp/wpt\n',
+            'INFO: Searching for exportable in-flight CLs.\n',
+            'INFO: Searching for exportable Chromium commits.\n',
+            'INFO: Attention: The following errors have prevented some commits from being exported:\n',
+            'ERROR: There was an error with the rutabaga.\n'
+        ])
diff --git a/third_party/blink/tools/blinkpy/w3c/test_importer.py b/third_party/blink/tools/blinkpy/w3c/test_importer.py
index 8867e530..5010b58d 100644
--- a/third_party/blink/tools/blinkpy/w3c/test_importer.py
+++ b/third_party/blink/tools/blinkpy/w3c/test_importer.py
@@ -1,7 +1,6 @@
 # Copyright 2014 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.
-
 """Fetches a copy of the latest state of a W3C test repository and commits.
 
 If this script is given the argument --auto-update, it will also:
@@ -34,7 +33,6 @@
 from blinkpy.web_tests.port.base import Port
 from blinkpy.web_tests.models.test_expectations import TestExpectations
 
-
 # Settings for how often to check try job results and how long to wait.
 POLL_DELAY_SECONDS = 2 * 60
 TIMEOUT_SECONDS = 210 * 60
@@ -47,7 +45,6 @@
 
 
 class TestImporter(object):
-
     def __init__(self, host, wpt_github=None):
         self.host = host
         self.wpt_github = wpt_github
@@ -87,7 +84,8 @@
             self.host.executive.error_output_limit = None
 
         if options.auto_update and options.auto_upload:
-            _log.error('--auto-upload and --auto-update cannot be used together.')
+            _log.error(
+                '--auto-upload and --auto-update cannot be used together.')
             return 1
 
         if not self.checkout_is_okay():
@@ -104,8 +102,10 @@
                          '/+/master/docs/testing/web_platform_tests.md'
                          '#GitHub-credentials for instructions on how to set '
                          'your credentials up.')
-        self.wpt_github = self.wpt_github or WPTGitHub(self.host, gh_user, gh_token)
-        self.git_cl = GitCL(self.host, auth_refresh_token_json=options.auth_refresh_token_json)
+        self.wpt_github = self.wpt_github or WPTGitHub(self.host, gh_user,
+                                                       gh_token)
+        self.git_cl = GitCL(
+            self.host, auth_refresh_token_json=options.auth_refresh_token_json)
 
         _log.debug('Noting the current Chromium revision.')
         chromium_revision = self.chromium_git.latest_git_commit()
@@ -124,10 +124,12 @@
         self.last_wpt_revision = self._get_last_imported_wpt_revision()
         import_commit = 'wpt@%s' % self.wpt_revision
 
-        _log.info('Importing %s to Chromium %s', import_commit, chromium_revision)
+        _log.info('Importing %s to Chromium %s', import_commit,
+                  chromium_revision)
 
         if options.ignore_exportable_commits:
-            commit_message = self._commit_message(chromium_revision, import_commit)
+            commit_message = self._commit_message(chromium_revision,
+                                                  import_commit)
         else:
             commits = self.apply_exportable_commits_locally(local_wpt)
             if commits is None:
@@ -135,7 +137,9 @@
                 _log.error('Aborting import to prevent clobbering commits.')
                 return 1
             commit_message = self._commit_message(
-                chromium_revision, import_commit, locally_applied_commits=commits)
+                chromium_revision,
+                import_commit,
+                locally_applied_commits=commits)
 
         self._clear_out_dest_path()
 
@@ -151,8 +155,10 @@
         # TODO(crbug.com/800570 robertma): Re-enable it once we fix the bug.
         # self._delete_orphaned_baselines()
 
-        _log.info('Updating TestExpectations for any removed or renamed tests.')
-        self.update_all_test_expectations_files(self._list_deleted_tests(), self._list_renamed_tests())
+        _log.info(
+            'Updating TestExpectations for any removed or renamed tests.')
+        self.update_all_test_expectations_files(self._list_deleted_tests(),
+                                                self._list_renamed_tests())
 
         if not self.chromium_git.has_working_directory_changes():
             _log.info('Done: no changes to import.')
@@ -180,7 +186,8 @@
         if not self.run_commit_queue_for_cl():
             return 1
 
-        if not self.send_notifications(local_wpt, options.auto_file_bugs, options.monorail_auth_json):
+        if not self.send_notifications(local_wpt, options.auto_file_bugs,
+                                       options.monorail_auth_json):
             return 1
 
         return 0
@@ -281,34 +288,40 @@
         parser = argparse.ArgumentParser()
         parser.description = __doc__
         parser.add_argument(
-            '-v', '--verbose', action='store_true',
+            '-v',
+            '--verbose',
+            action='store_true',
             help='log extra details that may be helpful when debugging')
         parser.add_argument(
-            '--ignore-exportable-commits', action='store_true',
+            '--ignore-exportable-commits',
+            action='store_true',
             help='do not check for exportable commits that would be clobbered')
         parser.add_argument('-r', '--revision', help='target wpt revision')
         parser.add_argument(
-            '--auto-upload', action='store_true',
+            '--auto-upload',
+            action='store_true',
             help='upload a CL, update expectations, but do NOT trigger CQ')
         parser.add_argument(
-            '--auto-update', action='store_true',
+            '--auto-update',
+            action='store_true',
             help='upload a CL, update expectations, and trigger CQ')
         parser.add_argument(
-            '--auto-file-bugs', action='store_true',
+            '--auto-file-bugs',
+            action='store_true',
             help='file new failures automatically to crbug.com')
         parser.add_argument(
             '--auth-refresh-token-json',
             help='authentication refresh token JSON file used for try jobs, '
-                 'generally not necessary on developer machines')
+            'generally not necessary on developer machines')
         parser.add_argument(
             '--credentials-json',
             help='A JSON file with GitHub credentials, '
-                 'generally not necessary on developer machines')
+            'generally not necessary on developer machines')
         parser.add_argument(
             '--monorail-auth-json',
             help='A JSON file containing the private key of a service account '
-                 'to access Monorail (crbug.com), only needed when '
-                 '--auto-file-bugs is used')
+            'to access Monorail (crbug.com), only needed when '
+            '--auto-file-bugs is used')
 
         return parser.parse_args(argv)
 
@@ -317,7 +330,8 @@
             _log.warning('Checkout is dirty; aborting.')
             return False
         # TODO(robertma): Add a method in Git to query a range of commits.
-        local_commits = self.chromium_git.run(['log', '--oneline', 'origin/master..HEAD'])
+        local_commits = self.chromium_git.run(
+            ['log', '--oneline', 'origin/master..HEAD'])
         if local_commits:
             _log.warning('Checkout has local commits before import.')
         return True
@@ -355,7 +369,8 @@
                 _log.error('Commit cannot be applied cleanly:')
                 _log.error(error)
                 return None
-            self.wpt_git.commit_locally_with_message('Applying patch %s' % commit.sha)
+            self.wpt_git.commit_locally_with_message(
+                'Applying patch %s' % commit.sha)
         return commits
 
     def exportable_but_not_exported_commits(self, local_wpt):
@@ -368,7 +383,11 @@
         # irrelevant and ignored here, because it tests patches *individually*
         # while the importer tries to reapply these patches *cumulatively*.
         commits, _ = exportable_commits_over_last_n_commits(
-            self.host, local_wpt, self.wpt_github, require_clean=False, verify_merged_pr=True)
+            self.host,
+            local_wpt,
+            self.wpt_github,
+            require_clean=False,
+            verify_merged_pr=True)
         return commits
 
     def _generate_manifest(self):
@@ -395,7 +414,8 @@
         _log.info('Cleaning out tests from %s.', self.dest_path)
         should_remove = lambda fs, dirname, basename: (
             is_file_exportable(fs.relpath(fs.join(dirname, basename), self.finder.chromium_base())))
-        files_to_delete = self.fs.files_under(self.dest_path, file_filter=should_remove)
+        files_to_delete = self.fs.files_under(
+            self.dest_path, file_filter=should_remove)
         for subpath in files_to_delete:
             self.remove(self.finder.path_from_web_tests('external', subpath))
 
@@ -410,13 +430,16 @@
             self.finder.chromium_base())
         return changed_files == [wpt_base_manifest]
 
-    def _commit_message(self, chromium_commit_sha, import_commit_sha,
+    def _commit_message(self,
+                        chromium_commit_sha,
+                        import_commit_sha,
                         locally_applied_commits=None):
         message = 'Import {}\n\nUsing wpt-import in Chromium {}.\n'.format(
             import_commit_sha, chromium_commit_sha)
         if locally_applied_commits:
             message += 'With Chromium commits locally applied on WPT:\n'
-            message += '\n'.join(str(commit) for commit in locally_applied_commits)
+            message += '\n'.join(
+                str(commit) for commit in locally_applied_commits)
         message += '\nNo-Export: true'
         return message
 
@@ -425,13 +448,15 @@
 
         is_baseline_filter = lambda fs, dirname, basename: is_testharness_baseline(basename)
 
-        baselines = self.fs.files_under(self.dest_path, file_filter=is_baseline_filter)
+        baselines = self.fs.files_under(
+            self.dest_path, file_filter=is_baseline_filter)
 
         # Note about possible refactoring:
         #  - the manifest path could be factored out to a common location, and
         #  - the logic for reading the manifest could be factored out from here
         # and the Port class.
-        manifest_path = self.finder.path_from_web_tests('external', 'wpt', 'MANIFEST.json')
+        manifest_path = self.finder.path_from_web_tests(
+            'external', 'wpt', 'MANIFEST.json')
         manifest = WPTManifest(self.fs.read_text_file(manifest_path))
         wpt_urls = manifest.all_urls()
 
@@ -451,7 +476,8 @@
         # TODO(qyearsley): Ensure that this works with platform baselines and
         # virtual baselines, and add unit tests.
         base = '/' + rel_path.replace('-expected.txt', '')
-        return any((base + ext) in wpt_urls for ext in Port.supported_file_extensions)
+        return any(
+            (base + ext) in wpt_urls for ext in Port.supported_file_extensions)
 
     def copyfile(self, source, destination):
         _log.debug('cp %s %s', source, destination)
@@ -477,11 +503,14 @@
         self.git_cl.run([
             'upload',
             '-f',
-            '--message-file', temp_path,
-            '--tbrs', sheriff_email,
+            '--message-file',
+            temp_path,
+            '--tbrs',
+            sheriff_email,
             # Note: we used to CC all the directory owners, but have stopped
             # in search of a better notification mechanism. (crbug.com/765334)
-            '--cc', 'robertma@chromium.org',
+            '--cc',
+            'robertma@chromium.org',
         ])
 
         self.fs.remove(temp_path)
@@ -510,7 +539,8 @@
             '/chromium/src/+/master/docs/testing/web_platform_tests.md\n\n')
 
         if directory_owners:
-            description += self._format_directory_owners(directory_owners) + '\n\n'
+            description += self._format_directory_owners(
+                directory_owners) + '\n\n'
 
         # Prevent FindIt from auto-reverting import CLs.
         description += 'NOAUTOREVERT=true\n'
@@ -578,7 +608,8 @@
         """
         _log.info('Adding test expectations lines to TestExpectations.')
         expectation_updater = WPTExpectationsUpdater(self.host)
-        self.rebaselined_tests, self.new_test_expectations = expectation_updater.update_expectations()
+        self.rebaselined_tests, self.new_test_expectations = expectation_updater.update_expectations(
+        )
 
     def update_all_test_expectations_files(self, deleted_tests, renamed_tests):
         """Updates all test expectations files for tests that have been deleted or renamed.
@@ -588,11 +619,14 @@
         """
         port = self.host.port_factory.get()
         for path, file_contents in port.all_expectations_dict().iteritems():
-            self._update_single_test_expectations_file(port, path, file_contents, deleted_tests, renamed_tests)
+            self._update_single_test_expectations_file(
+                port, path, file_contents, deleted_tests, renamed_tests)
 
-    def _update_single_test_expectations_file(self, port, path, file_contents, deleted_tests, renamed_tests):
+    def _update_single_test_expectations_file(self, port, path, file_contents,
+                                              deleted_tests, renamed_tests):
         """Updates a single test expectations file."""
-        test_expectations = TestExpectations(port, expectations_dict={path: file_contents})
+        test_expectations = TestExpectations(
+            port, expectations_dict={path: file_contents})
 
         new_lines = []
         for line in test_expectations.get_updated_lines(path):
@@ -603,7 +637,8 @@
                 continue
             test_name = line.test
             if self.finder.is_webdriver_test_path(test_name):
-                root_test_file, subtest_suffix = port.split_webdriver_test_name(test_name)
+                root_test_file, subtest_suffix = port.split_webdriver_test_name(
+                    test_name)
             else:
                 root_test_file = test_name
             if root_test_file in deleted_tests:
@@ -611,7 +646,8 @@
             if root_test_file in renamed_tests:
                 if self.finder.is_webdriver_test_path(root_test_file):
                     renamed_test = renamed_tests[root_test_file]
-                    test_name = port.add_webdriver_subtest_suffix(renamed_test, subtest_suffix)
+                    test_name = port.add_webdriver_subtest_suffix(
+                        renamed_test, subtest_suffix)
                 else:
                     test_name = renamed_tests[root_test_file]
             line.test = test_name
@@ -621,7 +657,9 @@
     def _list_deleted_tests(self):
         """List of web tests that have been deleted."""
         # TODO(robertma): Improve Git.changed_files so that we can use it here.
-        out = self.chromium_git.run(['diff', 'origin/master', '-M100%', '--diff-filter=D', '--name-only'])
+        out = self.chromium_git.run([
+            'diff', 'origin/master', '-M100%', '--diff-filter=D', '--name-only'
+        ])
         deleted_tests = []
         for path in out.splitlines():
             test = self._relative_to_web_test_dir(path)
@@ -634,7 +672,10 @@
 
         Returns a dict mapping source name to destination name.
         """
-        out = self.chromium_git.run(['diff', 'origin/master', '-M100%', '--diff-filter=R', '--name-status'])
+        out = self.chromium_git.run([
+            'diff', 'origin/master', '-M100%', '--diff-filter=R',
+            '--name-status'
+        ])
         renamed_tests = {}
         for line in out.splitlines():
             _, source_path, dest_path = line.split()
@@ -646,7 +687,8 @@
 
     def _relative_to_web_test_dir(self, path_relative_to_repo_root):
         """Returns a path that's relative to the web tests directory."""
-        abs_path = self.finder.path_from_chromium_base(path_relative_to_repo_root)
+        abs_path = self.finder.path_from_chromium_base(
+            path_relative_to_repo_root)
         if not abs_path.startswith(self.finder.web_tests_dir()):
             return None
         return self.fs.relpath(abs_path, self.finder.web_tests_dir())
@@ -654,7 +696,8 @@
     def _get_last_imported_wpt_revision(self):
         """Finds the last imported WPT revision."""
         # TODO(robertma): Only match commit subjects.
-        output = self.chromium_git.most_recent_log_matching('^Import wpt@', self.finder.chromium_base())
+        output = self.chromium_git.most_recent_log_matching(
+            '^Import wpt@', self.finder.chromium_base())
         # No line-start anchor (^) below because of the formatting of output.
         result = re.search(r'Import wpt@(\w+)', output)
         if result:
@@ -663,13 +706,19 @@
             _log.error('Cannot find last WPT import.')
             return None
 
-    def send_notifications(self, local_wpt, auto_file_bugs, monorail_auth_json):
+    def send_notifications(self, local_wpt, auto_file_bugs,
+                           monorail_auth_json):
         issue = self.git_cl.run(['status', '--field=id']).strip()
         patchset = self.git_cl.run(['status', '--field=patch']).strip()
         # Construct the notifier here so that any errors won't affect the import.
         notifier = ImportNotifier(self.host, self.chromium_git, local_wpt)
-        notifier.main(self.last_wpt_revision, self.wpt_revision,
-                      self.rebaselined_tests, self.new_test_expectations,
-                      issue, patchset,
-                      dry_run=not auto_file_bugs, service_account_key_json=monorail_auth_json)
+        notifier.main(
+            self.last_wpt_revision,
+            self.wpt_revision,
+            self.rebaselined_tests,
+            self.new_test_expectations,
+            issue,
+            patchset,
+            dry_run=not auto_file_bugs,
+            service_account_key_json=monorail_auth_json)
         return True
diff --git a/third_party/blink/tools/blinkpy/w3c/test_importer_unittest.py b/third_party/blink/tools/blinkpy/w3c/test_importer_unittest.py
index e36d0311..97bb629 100644
--- a/third_party/blink/tools/blinkpy/w3c/test_importer_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/test_importer_unittest.py
@@ -24,14 +24,14 @@
 from blinkpy.w3c.wpt_manifest import BASE_MANIFEST_NAME
 from blinkpy.web_tests.builder_list import BuilderList
 
-
 MOCK_WEB_TESTS = '/mock-checkout/' + RELATIVE_WEB_TESTS
 
-class TestImporterTest(LoggingTestCase):
 
+class TestImporterTest(LoggingTestCase):
     def test_update_expectations_for_cl_no_results(self):
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
         importer = TestImporter(host)
         importer.git_cl = MockGitCL(host, time_out=True)
         success = importer.update_expectations_for_cl()
@@ -44,11 +44,15 @@
 
     def test_update_expectations_for_cl_closed_cl(self):
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
         importer = TestImporter(host)
-        importer.git_cl = MockGitCL(host, status='closed', try_job_results={
-            Build('builder-a', 123): TryJobStatus('COMPLETED', 'SUCCESS'),
-        })
+        importer.git_cl = MockGitCL(
+            host,
+            status='closed',
+            try_job_results={
+                Build('builder-a', 123): TryJobStatus('COMPLETED', 'SUCCESS'),
+            })
         success = importer.update_expectations_for_cl()
         self.assertFalse(success)
         self.assertLog([
@@ -58,11 +62,15 @@
 
     def test_update_expectations_for_cl_all_jobs_pass(self):
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
         importer = TestImporter(host)
-        importer.git_cl = MockGitCL(host, status='lgtm', try_job_results={
-            Build('builder-a', 123): TryJobStatus('COMPLETED', 'SUCCESS'),
-        })
+        importer.git_cl = MockGitCL(
+            host,
+            status='lgtm',
+            try_job_results={
+                Build('builder-a', 123): TryJobStatus('COMPLETED', 'SUCCESS'),
+            })
         success = importer.update_expectations_for_cl()
         self.assertLog([
             'INFO: Triggering try jobs for updating expectations.\n',
@@ -72,11 +80,15 @@
 
     def test_update_expectations_for_cl_fail_but_no_changes(self):
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
         importer = TestImporter(host)
-        importer.git_cl = MockGitCL(host, status='lgtm', try_job_results={
-            Build('builder-a', 123): TryJobStatus('COMPLETED', 'FAILURE'),
-        })
+        importer.git_cl = MockGitCL(
+            host,
+            status='lgtm',
+            try_job_results={
+                Build('builder-a', 123): TryJobStatus('COMPLETED', 'FAILURE'),
+            })
         importer.fetch_new_expectations_and_baselines = lambda: None
         success = importer.update_expectations_for_cl()
         self.assertTrue(success)
@@ -87,13 +99,19 @@
 
     def test_run_commit_queue_for_cl_pass(self):
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
         importer = TestImporter(host)
         # Only the latest job for each builder is counted.
-        importer.git_cl = MockGitCL(host, status='lgtm', try_job_results={
-            Build('cq-builder-a', 120): TryJobStatus('COMPLETED', 'FAILURE'),
-            Build('cq-builder-a', 123): TryJobStatus('COMPLETED', 'SUCCESS'),
-        })
+        importer.git_cl = MockGitCL(
+            host,
+            status='lgtm',
+            try_job_results={
+                Build('cq-builder-a', 120): TryJobStatus(
+                    'COMPLETED', 'FAILURE'),
+                Build('cq-builder-a', 123): TryJobStatus(
+                    'COMPLETED', 'SUCCESS'),
+            })
         success = importer.run_commit_queue_for_cl()
         self.assertTrue(success)
         self.assertLog([
@@ -110,13 +128,20 @@
 
     def test_run_commit_queue_for_cl_fail_cq(self):
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
         importer = TestImporter(host)
-        importer.git_cl = MockGitCL(host, status='lgtm', try_job_results={
-            Build('cq-builder-a', 120): TryJobStatus('COMPLETED', 'SUCCESS'),
-            Build('cq-builder-a', 123): TryJobStatus('COMPLETED', 'FAILURE'),
-            Build('cq-builder-b', 200): TryJobStatus('COMPLETED', 'SUCCESS'),
-        })
+        importer.git_cl = MockGitCL(
+            host,
+            status='lgtm',
+            try_job_results={
+                Build('cq-builder-a', 120): TryJobStatus(
+                    'COMPLETED', 'SUCCESS'),
+                Build('cq-builder-a', 123): TryJobStatus(
+                    'COMPLETED', 'FAILURE'),
+                Build('cq-builder-b', 200): TryJobStatus(
+                    'COMPLETED', 'SUCCESS'),
+            })
         importer.fetch_new_expectations_and_baselines = lambda: None
         success = importer.run_commit_queue_for_cl()
         self.assertFalse(success)
@@ -132,13 +157,19 @@
 
     def test_run_commit_queue_for_cl_fail_to_land(self):
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
         importer = TestImporter(host)
         # Only the latest job for each builder is counted.
-        importer.git_cl = MockGitCL(host, status='lgtm', try_job_results={
-            Build('cq-builder-a', 120): TryJobStatus('COMPLETED', 'FAILURE'),
-            Build('cq-builder-a', 123): TryJobStatus('COMPLETED', 'SUCCESS'),
-        })
+        importer.git_cl = MockGitCL(
+            host,
+            status='lgtm',
+            try_job_results={
+                Build('cq-builder-a', 120): TryJobStatus(
+                    'COMPLETED', 'FAILURE'),
+                Build('cq-builder-a', 123): TryJobStatus(
+                    'COMPLETED', 'SUCCESS'),
+            })
         importer.git_cl.wait_for_closed_status = lambda: False
         success = importer.run_commit_queue_for_cl()
         self.assertFalse(success)
@@ -157,12 +188,18 @@
 
     def test_run_commit_queue_for_cl_closed_cl(self):
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
         importer = TestImporter(host)
-        importer.git_cl = MockGitCL(host, status='closed', try_job_results={
-            Build('cq-builder-a', 120): TryJobStatus('COMPLETED', 'SUCCESS'),
-            Build('cq-builder-b', 200): TryJobStatus('COMPLETED', 'SUCCESS'),
-        })
+        importer.git_cl = MockGitCL(
+            host,
+            status='closed',
+            try_job_results={
+                Build('cq-builder-a', 120): TryJobStatus(
+                    'COMPLETED', 'SUCCESS'),
+                Build('cq-builder-b', 200): TryJobStatus(
+                    'COMPLETED', 'SUCCESS'),
+            })
         success = importer.run_commit_queue_for_cl()
         self.assertFalse(success)
         self.assertLog([
@@ -184,16 +221,16 @@
             'INFO: Triggering CQ try jobs.\n',
             'ERROR: Timed out waiting for CQ; aborting.\n'
         ])
-        self.assertEqual(
-            importer.git_cl.calls,
-            [['git', 'cl', 'try'], ['git', 'cl', 'set-close']])
+        self.assertEqual(importer.git_cl.calls,
+                         [['git', 'cl', 'try'], ['git', 'cl', 'set-close']])
 
     def test_submit_cl_timeout_and_already_merged(self):
         # Here we simulate a case where we timeout waiting for the CQ to submit a
         # CL because we miss the notification that it was merged. We then get an
         # error when trying to close the CL because it's already been merged.
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
         importer = TestImporter(host)
         # Define some error text that looks like a typical ScriptError.
         git_error_text = (
@@ -201,14 +238,18 @@
             '...there is usually a stack trace here with some calls\n'
             '...and maybe other calls\n'
             'And finally, there is the exception:\n'
-            'GerritError: Conflict: change is merged\n'
-        )
+            'GerritError: Conflict: change is merged\n')
         importer.git_cl = MockGitCL(
-            host, status='lgtm', git_error_output={'set-close': git_error_text},
+            host,
+            status='lgtm',
+            git_error_output={'set-close': git_error_text},
             # Only the latest job for each builder is counted.
             try_job_results={
-                Build('cq-builder-a', 120): TryJobStatus('COMPLETED', 'FAILURE'),
-                Build('cq-builder-a', 123): TryJobStatus('COMPLETED', 'SUCCESS')})
+                Build('cq-builder-a', 120): TryJobStatus(
+                    'COMPLETED', 'FAILURE'),
+                Build('cq-builder-a', 123): TryJobStatus(
+                    'COMPLETED', 'SUCCESS')
+            })
         importer.git_cl.wait_for_closed_status = lambda: False
         success = importer.run_commit_queue_for_cl()
         # Since the CL is already merged, we absorb the error and treat it as success.
@@ -230,16 +271,19 @@
     def test_apply_exportable_commits_locally(self):
         # TODO(robertma): Consider using MockLocalWPT.
         host = MockHost()
-        importer = TestImporter(host, wpt_github=MockWPTGitHub(pull_requests=[]))
+        importer = TestImporter(
+            host, wpt_github=MockWPTGitHub(pull_requests=[]))
         importer.wpt_git = MockGit(cwd='/tmp/wpt', executive=host.executive)
         fake_commit = MockChromiumCommit(
-            host, subject='My fake commit',
-            patch=(
-                'Fake patch contents...\n'
-                '--- a/' + RELATIVE_WEB_TESTS + 'external/wpt/css/css-ui-3/outline-004.html\n'
-                '+++ b/' + RELATIVE_WEB_TESTS + 'external/wpt/css/css-ui-3/outline-004.html\n'
-                '@@ -20,7 +20,7 @@\n'
-                '...'))
+            host,
+            subject='My fake commit',
+            patch=('Fake patch contents...\n'
+                   '--- a/' + RELATIVE_WEB_TESTS +
+                   'external/wpt/css/css-ui-3/outline-004.html\n'
+                   '+++ b/' + RELATIVE_WEB_TESTS +
+                   'external/wpt/css/css-ui-3/outline-004.html\n'
+                   '@@ -20,7 +20,7 @@\n'
+                   '...'))
         importer.exportable_but_not_exported_commits = lambda _: [fake_commit]
         applied = importer.apply_exportable_commits_locally(LocalWPT(host))
         self.assertEqual(applied, [fake_commit])
@@ -247,23 +291,27 @@
         # TODO(robertma): Move this to local_wpt_unittest.py.
         self.assertEqual(host.executive.full_calls, [
             MockCall(
-                ['git', 'apply', '-'],
-                {
-                    'input': (
-                        'Fake patch contents...\n'
-                        '--- a/css/css-ui-3/outline-004.html\n'
-                        '+++ b/css/css-ui-3/outline-004.html\n'
-                        '@@ -20,7 +20,7 @@\n'
-                        '...'),
-                    'cwd': '/tmp/wpt',
-                    'env': None
+                ['git', 'apply', '-'], {
+                    'input': ('Fake patch contents...\n'
+                              '--- a/css/css-ui-3/outline-004.html\n'
+                              '+++ b/css/css-ui-3/outline-004.html\n'
+                              '@@ -20,7 +20,7 @@\n'
+                              '...'),
+                    'cwd':
+                    '/tmp/wpt',
+                    'env':
+                    None
                 }),
-            MockCall(
-                ['git', 'add', '.'],
-                kwargs={'input': None, 'cwd': '/tmp/wpt', 'env': None})
+            MockCall(['git', 'add', '.'],
+                     kwargs={
+                         'input': None,
+                         'cwd': '/tmp/wpt',
+                         'env': None
+                     })
         ])
-        self.assertEqual(importer.wpt_git.local_commits(),
-                         [['Applying patch 14fd77e88e42147c57935c49d9e3b2412b8491b7']])
+        self.assertEqual(
+            importer.wpt_git.local_commits(),
+            [['Applying patch 14fd77e88e42147c57935c49d9e3b2412b8491b7']])
 
     def test_apply_exportable_commits_locally_returns_none_on_failure(self):
         host = MockHost()
@@ -271,7 +319,8 @@
         importer = TestImporter(host, wpt_github=wpt_github)
         commit = MockChromiumCommit(host, subject='My fake commit')
         importer.exportable_but_not_exported_commits = lambda _: [commit]
-        local_wpt = MockLocalWPT(apply_patch=['Failed'])    # Failure to apply patch.
+        # Failure to apply patch.
+        local_wpt = MockLocalWPT(apply_patch=['Failed'])
         applied = importer.apply_exportable_commits_locally(local_wpt)
         self.assertIsNone(applied)
 
@@ -297,23 +346,28 @@
         host.filesystem.files[MOCK_WEB_TESTS + 'new/a.html'] = ''
         host.filesystem.files[MOCK_WEB_TESTS + 'new/b.html'] = ''
         importer = TestImporter(host)
-        deleted_tests = ['some/test/b.html', 'external/wpt/webdriver/some/test/b.html']
+        deleted_tests = [
+            'some/test/b.html', 'external/wpt/webdriver/some/test/b.html'
+        ]
         renamed_test_pairs = {
             'some/test/a.html': 'new/a.html',
             'some/test/c*.html': 'new/c*.html',
             'external/wpt/webdriver/some/test/a*.html': 'old/a*.html',
             'external/wpt/webdriver/some/test/c.html': 'old/c.html',
         }
-        importer.update_all_test_expectations_files(deleted_tests, renamed_test_pairs)
+        importer.update_all_test_expectations_files(deleted_tests,
+                                                    renamed_test_pairs)
         self.assertMultiLineEqual(
-            host.filesystem.read_text_file(MOCK_WEB_TESTS + 'TestExpectations'),
+            host.filesystem.read_text_file(MOCK_WEB_TESTS +
+                                           'TestExpectations'),
             ('# results: [ Failure ]\n'
              'new/a.html [ Failure ]\n'
              'ignore/globs/* [ Failure ]\n'
              'new/c\*.html [ Failure ]\n'
              'some/test/d.html [ Failure ]\n'))
         self.assertMultiLineEqual(
-            host.filesystem.read_text_file(MOCK_WEB_TESTS + 'WebDriverExpectations'),
+            host.filesystem.read_text_file(MOCK_WEB_TESTS +
+                                           'WebDriverExpectations'),
             ('# results: [ Failure ]\n'
              'old/a\*.html>>foo\* [ Failure ]\n'
              'old/a\*.html>>bar [ Failure ]\n'
@@ -322,18 +376,23 @@
 
     def test_get_directory_owners(self):
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS',
-                                        'someone@chromium.org\n')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS',
+            'someone@chromium.org\n')
         importer = TestImporter(host)
         importer.chromium_git.changed_files = lambda: [RELATIVE_WEB_TESTS + 'external/wpt/foo/x.html']
-        self.assertEqual(importer.get_directory_owners(), {('someone@chromium.org',): ['external/wpt/foo']})
+        self.assertEqual(importer.get_directory_owners(),
+                         {('someone@chromium.org', ): ['external/wpt/foo']})
 
     def test_get_directory_owners_no_changed_files(self):
         host = MockHost()
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'W3CImportExpectations', '')
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS',
-                                        'someone@chromium.org\n')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'W3CImportExpectations', '')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'external/wpt/foo/OWNERS',
+            'someone@chromium.org\n')
         importer = TestImporter(host)
         self.assertEqual(importer.get_directory_owners(), {})
 
@@ -343,13 +402,13 @@
         host = MockHost()
         importer = TestImporter(host)
         importer._commit_changes('dummy message')
-        self.assertEqual(importer.chromium_git.local_commits(), [['dummy message']])
+        self.assertEqual(importer.chromium_git.local_commits(),
+                         [['dummy message']])
 
     def test_commit_message(self):
         importer = TestImporter(MockHost())
         self.assertEqual(
-            importer._commit_message('aaaa', '1111'),
-            'Import 1111\n\n'
+            importer._commit_message('aaaa', '1111'), 'Import 1111\n\n'
             'Using wpt-import in Chromium aaaa.\n\n'
             'No-Export: true')
 
@@ -359,8 +418,7 @@
         importer = TestImporter(host)
         description = importer._cl_description(directory_owners={})
         self.assertEqual(
-            description,
-            'Last commit message\n\n'
+            description, 'Last commit message\n\n'
             'Note to sheriffs: This CL imports external tests and adds\n'
             'expectations for those tests; if this CL is large and causes\n'
             'a few new failures, please fix the failures by adding new\n'
@@ -369,33 +427,33 @@
             '/chromium/src/+/master/docs/testing/web_platform_tests.md\n\n'
             'NOAUTOREVERT=true\n'
             'No-Export: true')
-        self.assertEqual(host.executive.calls, [['git', 'log', '-1', '--format=%B']])
+        self.assertEqual(host.executive.calls,
+                         [['git', 'log', '-1', '--format=%B']])
 
     def test_cl_description_moves_noexport_tag(self):
         host = MockHost()
         host.executive = MockExecutive(output='Summary\n\nNo-Export: true\n\n')
         importer = TestImporter(host)
         description = importer._cl_description(directory_owners={})
-        self.assertIn(
-            'No-Export: true',
-            description)
+        self.assertIn('No-Export: true', description)
 
     def test_cl_description_with_directory_owners(self):
         host = MockHost()
         host.executive = MockExecutive(output='Last commit message\n\n')
         importer = TestImporter(host)
-        description = importer._cl_description(directory_owners={
-            ('someone@chromium.org',): ['external/wpt/foo', 'external/wpt/bar'],
-            ('x@chromium.org', 'y@chromium.org'): ['external/wpt/baz'],
-        })
+        description = importer._cl_description(
+            directory_owners={
+                ('someone@chromium.org', ):
+                ['external/wpt/foo', 'external/wpt/bar'],
+                ('x@chromium.org', 'y@chromium.org'): ['external/wpt/baz'],
+            })
         self.assertIn(
             'Directory owners for changes in this CL:\n'
             'someone@chromium.org:\n'
             '  external/wpt/foo\n'
             '  external/wpt/bar\n'
             'x@chromium.org, y@chromium.org:\n'
-            '  external/wpt/baz\n\n',
-            description)
+            '  external/wpt/baz\n\n', description)
 
     def test_tbr_reviewer_no_response_uses_backup(self):
         host = MockHost()
@@ -442,9 +500,7 @@
         })
         importer = TestImporter(host)
         self.assertEqual(TBR_FALLBACK, importer.tbr_reviewer())
-        self.assertLog([
-            'INFO: No sheriff today.\n'
-        ])
+        self.assertLog(['INFO: No sheriff today.\n'])
 
     def test_tbr_reviewer_rotations_url_unavailable(self):
         def raise_exception(*_):
@@ -454,9 +510,7 @@
         host.web.get_binary = raise_exception
         importer = TestImporter(host)
         self.assertEqual(TBR_FALLBACK, importer.tbr_reviewer())
-        self.assertLog([
-            'ERROR: Cannot fetch %s\n' % ROTATIONS_URL
-        ])
+        self.assertLog(['ERROR: Cannot fetch %s\n' % ROTATIONS_URL])
 
     def test_tbr_reviewer(self):
         host = MockHost()
@@ -507,20 +561,17 @@
         # asserts that TestImporter._generate_manifest would invoke the script.
         host = MockHost()
         importer = TestImporter(host)
-        host.filesystem.write_text_file(MOCK_WEB_TESTS + 'external/wpt/MANIFEST.json', '{}')
+        host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'external/wpt/MANIFEST.json', '{}')
         importer._generate_manifest()
-        self.assertEqual(
-            host.executive.calls,
-            [
-                [
-                    'python',
-                    '/mock-checkout/third_party/blink/tools/blinkpy/third_party/wpt/wpt/wpt',
-                    'manifest',
-                    '--no-download',
-                    '--tests-root',
-                    MOCK_WEB_TESTS + 'external/wpt',
-                ]
-            ])
+        self.assertEqual(host.executive.calls, [[
+            'python',
+            '/mock-checkout/third_party/blink/tools/blinkpy/third_party/wpt/wpt/wpt',
+            'manifest',
+            '--no-download',
+            '--tests-root',
+            MOCK_WEB_TESTS + 'external/wpt',
+        ]])
         self.assertEqual(importer.chromium_git.added_paths,
                          {MOCK_WEB_TESTS + 'external/' + BASE_MANIFEST_NAME})
 
@@ -553,9 +604,11 @@
             }))
         host.filesystem.write_text_file(dest_path + '/a.html', '')
         host.filesystem.write_text_file(dest_path + '/a-expected.txt', '')
-        host.filesystem.write_text_file(dest_path + '/orphaned-expected.txt', '')
+        host.filesystem.write_text_file(dest_path + '/orphaned-expected.txt',
+                                        '')
         importer._delete_orphaned_baselines()
-        self.assertFalse(host.filesystem.exists(dest_path + '/orphaned-expected.txt'))
+        self.assertFalse(
+            host.filesystem.exists(dest_path + '/orphaned-expected.txt'))
         self.assertTrue(host.filesystem.exists(dest_path + '/a-expected.txt'))
 
     def test_delete_orphaned_baselines_worker_js_tests(self):
@@ -585,15 +638,20 @@
             }))
         host.filesystem.write_text_file(dest_path + '/a.any.js', '')
         host.filesystem.write_text_file(dest_path + '/a.any-expected.txt', '')
-        host.filesystem.write_text_file(dest_path + '/a.any.worker-expected.txt', '')
+        host.filesystem.write_text_file(
+            dest_path + '/a.any.worker-expected.txt', '')
         host.filesystem.write_text_file(dest_path + '/b.worker.js', '')
-        host.filesystem.write_text_file(dest_path + '/b.worker-expected.txt', '')
+        host.filesystem.write_text_file(dest_path + '/b.worker-expected.txt',
+                                        '')
         host.filesystem.write_text_file(dest_path + '/c.html', '')
         host.filesystem.write_text_file(dest_path + '/c-expected.txt', '')
         importer._delete_orphaned_baselines()
-        self.assertTrue(host.filesystem.exists(dest_path + '/a.any-expected.txt'))
-        self.assertTrue(host.filesystem.exists(dest_path + '/a.any.worker-expected.txt'))
-        self.assertTrue(host.filesystem.exists(dest_path + '/b.worker-expected.txt'))
+        self.assertTrue(
+            host.filesystem.exists(dest_path + '/a.any-expected.txt'))
+        self.assertTrue(
+            host.filesystem.exists(dest_path + '/a.any.worker-expected.txt'))
+        self.assertTrue(
+            host.filesystem.exists(dest_path + '/b.worker-expected.txt'))
         self.assertTrue(host.filesystem.exists(dest_path + '/c-expected.txt'))
 
     def test_clear_out_dest_path(self):
@@ -601,13 +659,15 @@
         importer = TestImporter(host)
         dest_path = importer.dest_path
         host.filesystem.write_text_file(dest_path + '/foo-test.html', '')
-        host.filesystem.write_text_file(dest_path + '/foo-test-expected.txt', '')
+        host.filesystem.write_text_file(dest_path + '/foo-test-expected.txt',
+                                        '')
         host.filesystem.write_text_file(dest_path + '/OWNERS', '')
         host.filesystem.write_text_file(dest_path + '/bar/baz/OWNERS', '')
         # When the destination path is cleared, OWNERS files and baselines
         # are kept.
         importer._clear_out_dest_path()
         self.assertFalse(host.filesystem.exists(dest_path + '/foo-test.html'))
-        self.assertTrue(host.filesystem.exists(dest_path + '/foo-test-expected.txt'))
+        self.assertTrue(
+            host.filesystem.exists(dest_path + '/foo-test-expected.txt'))
         self.assertTrue(host.filesystem.exists(dest_path + '/OWNERS'))
         self.assertTrue(host.filesystem.exists(dest_path + '/bar/baz/OWNERS'))
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py b/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py
index 1a94544..dce09b8 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py
@@ -1,7 +1,6 @@
 # Copyright 2016 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.
-
 """Updates expectations and baselines when updating web-platform-tests.
 
 Specifically, this class fetches results from try bots for the current CL, then
@@ -28,11 +27,11 @@
 # TODO(robertma): Investigate reusing web_tests.models.test_expectations and
 # alike in this module.
 
-SimpleTestResult = namedtuple('SimpleTestResult', ['expected', 'actual', 'bug'])
+SimpleTestResult = namedtuple('SimpleTestResult',
+                              ['expected', 'actual', 'bug'])
 
 
 class WPTExpectationsUpdater(object):
-
     def __init__(self, host):
         self.host = host
         self.port = self.host.port_factory.get()
@@ -44,9 +43,15 @@
 
     def run(self, args=None):
         parser = argparse.ArgumentParser(description=__doc__)
-        parser.add_argument('--patchset', default=None,
-                            help='Patchset number to fetch new baselines from.')
-        parser.add_argument('-v', '--verbose', action='store_true', help='More verbose logging.')
+        parser.add_argument(
+            '--patchset',
+            default=None,
+            help='Patchset number to fetch new baselines from.')
+        parser.add_argument(
+            '-v',
+            '--verbose',
+            action='store_true',
+            help='More verbose logging.')
         args = parser.parse_args(args)
 
         log_level = logging.DEBUG if args.verbose else logging.INFO
@@ -80,12 +85,14 @@
             if job_status.result == 'SUCCESS':
                 self.ports_with_all_pass.add(self.port_name(build))
             port_results = self.get_failing_results_dict(build)
-            test_expectations = self.merge_dicts(test_expectations, port_results)
+            test_expectations = self.merge_dicts(test_expectations,
+                                                 port_results)
 
         # And then we merge results for different platforms that had the same results.
         for test_name, platform_result in test_expectations.iteritems():
             # platform_result is a dict mapping platforms to results.
-            test_expectations[test_name] = self.merge_same_valued_keys(platform_result)
+            test_expectations[test_name] = self.merge_same_valued_keys(
+                platform_result)
 
         # At this point, test_expectations looks like: {
         #     'test-with-failing-result': {
@@ -94,7 +101,8 @@
         #     }
         # }
 
-        rebaselined_tests, test_expectations = self.download_text_baselines(test_expectations)
+        rebaselined_tests, test_expectations = self.download_text_baselines(
+            test_expectations)
         test_expectation_lines = self.create_line_dict(test_expectations)
         self.write_to_test_expectations(test_expectation_lines)
         return rebaselined_tests, test_expectation_lines
@@ -105,7 +113,8 @@
 
     def get_latest_try_jobs(self):
         """Returns the latest finished try jobs as Build objects."""
-        return self.git_cl.latest_try_jobs(builder_names=self._get_try_bots(), patchset=self.patchset)
+        return self.git_cl.latest_try_jobs(
+            builder_names=self._get_try_bots(), patchset=self.patchset)
 
     def get_failing_results_dict(self, build):
         """Returns a nested dict of failing test results.
@@ -135,10 +144,10 @@
         has_webdriver_tests = self.host.builders.has_webdriver_tests_for_builder(
             build.builder_name)
         if has_webdriver_tests:
-            master = self.host.builders.master_for_builder(
-                build.builder_name)
+            master = self.host.builders.master_for_builder(build.builder_name)
             test_result_list.append(
-                self.host.results_fetcher.fetch_webdriver_test_results(build, master))
+                self.host.results_fetcher.fetch_webdriver_test_results(
+                    build, master))
 
         test_result_list = filter(None, test_result_list)
         if not test_result_list:
@@ -149,13 +158,18 @@
         failing_test_results = []
         for test_result in test_result_list:
             failing_test_results += [
-                result for result in test_result.didnt_run_as_expected_results() if not result.did_pass()]
+                result
+                for result in test_result.didnt_run_as_expected_results()
+                if not result.did_pass()
+            ]
 
-        return self.generate_results_dict(self.port_name(build), failing_test_results)
+        return self.generate_results_dict(
+            self.port_name(build), failing_test_results)
 
     @memoized
     def port_name(self, build):
-        return self.host.builders.port_name_for_builder_name(build.builder_name)
+        return self.host.builders.port_name_for_builder_name(
+            build.builder_name)
 
     def generate_results_dict(self, full_port_name, web_test_results):
         """Makes a dict with results for one platform.
@@ -179,11 +193,11 @@
                 continue
 
             test_dict[test_name] = {
-                full_port_name: SimpleTestResult(
+                full_port_name:
+                SimpleTestResult(
                     expected=result.expected_results(),
                     actual=result.actual_results(),
-                    bug=UMBRELLA_BUG
-                )
+                    bug=UMBRELLA_BUG)
             }
         return test_dict
 
@@ -201,12 +215,16 @@
         path = path or []
         for key in source:
             if key in target:
-                if (isinstance(target[key], dict)) and isinstance(source[key], dict):
-                    self.merge_dicts(target[key], source[key], path + [str(key)])
+                if (isinstance(target[key], dict)) and isinstance(
+                        source[key], dict):
+                    self.merge_dicts(target[key], source[key],
+                                     path + [str(key)])
                 elif target[key] == source[key]:
                     pass
                 else:
-                    raise ValueError('The key: %s already exist in the target dictionary.' % '.'.join(path))
+                    raise ValueError(
+                        'The key: %s already exist in the target dictionary.' %
+                        '.'.join(path))
             else:
                 target[key] = source[key]
         return target
@@ -249,8 +267,11 @@
 
                 if next_item == keys[-1]:
                     if found_match:
-                        merged_dict[tuple(matching_value_keys)] = dictionary[current_key]
-                        keys = [k for k in keys if k not in matching_value_keys]
+                        merged_dict[tuple(
+                            matching_value_keys)] = dictionary[current_key]
+                        keys = [
+                            k for k in keys if k not in matching_value_keys
+                        ]
                     else:
                         merged_dict[current_key] = dictionary[current_key]
                         keys.remove(current_key)
@@ -319,10 +340,13 @@
         line_dict = defaultdict(list)
         for test_name, port_results in sorted(merged_results.iteritems()):
             if not self.port.is_wpt_test(test_name):
-                _log.warning('Non-WPT test "%s" unexpectedly passed to create_line_dict.', test_name)
+                _log.warning(
+                    'Non-WPT test "%s" unexpectedly passed to create_line_dict.',
+                    test_name)
                 continue
             for port_names, result in sorted(port_results.iteritems()):
-                line_dict[test_name].extend(self._create_lines(test_name, port_names, result))
+                line_dict[test_name].extend(
+                    self._create_lines(test_name, port_names, result))
         return line_dict
 
     def _create_lines(self, test_name, port_names, result):
@@ -351,7 +375,8 @@
         # also apply to any ports that we weren't able to get results for.
         port_names.extend(self.ports_with_no_results)
 
-        expectations = '[ %s ]' % ' '.join(self.get_expectations(result, test_name))
+        expectations = '[ %s ]' % \
+            ' '.join(self.get_expectations(result, test_name))
         for specifier in self.normalized_specifiers(test_name, port_names):
             line_parts = []
             if specifier:
@@ -380,12 +405,14 @@
         """
         specifiers = []
         for name in sorted(port_names):
-            specifiers.append(self.host.builders.version_specifier_for_port_name(name))
+            specifiers.append(
+                self.host.builders.version_specifier_for_port_name(name))
 
         if self.specifiers_can_extend_to_all_platforms(specifiers, test_name):
             return ['']
 
-        specifiers = self.simplify_specifiers(specifiers, self.port.configuration_specifier_macros())
+        specifiers = self.simplify_specifiers(
+            specifiers, self.port.configuration_specifier_macros())
         if not specifiers:
             return ['']
         return specifiers
@@ -405,20 +432,26 @@
         """
         extended_specifiers = specifiers + self.skipped_specifiers(test_name)
         # If the list is simplified to empty, then all platforms are covered.
-        return not self.simplify_specifiers(extended_specifiers, self.port.configuration_specifier_macros())
+        return not self.simplify_specifiers(
+            extended_specifiers, self.port.configuration_specifier_macros())
 
     def skipped_specifiers(self, test_name):
         """Returns a list of platform specifiers for which the test is skipped."""
         specifiers = []
         for port in self.all_try_builder_ports():
             if port.skips_test(test_name):
-                specifiers.append(self.host.builders.version_specifier_for_port_name(port.name()))
+                specifiers.append(
+                    self.host.builders.version_specifier_for_port_name(
+                        port.name()))
         return specifiers
 
     @memoized
     def all_try_builder_ports(self):
         """Returns a list of Port objects for all try builders."""
-        return [self.host.port_factory.get_from_builder_name(name) for name in self._get_try_bots()]
+        return [
+            self.host.port_factory.get_from_builder_name(name)
+            for name in self._get_try_bots()
+        ]
 
     def simplify_specifiers(self, specifiers, specifier_macros):
         """Simplifies the specifier part of an expectation line if possible.
@@ -446,7 +479,10 @@
             macro = macro.lower()
 
             # Only consider version specifiers that have corresponding try bots.
-            versions = {s.lower() for s in versions if s.lower() in covered_by_try_bots}
+            versions = {
+                s.lower()
+                for s in versions if s.lower() in covered_by_try_bots
+            }
             if len(versions) == 0:
                 continue
             if versions <= specifiers:
@@ -460,7 +496,8 @@
         all_platform_specifiers = set()
         for builder_name in self._get_try_bots():
             all_platform_specifiers.add(
-                self.host.builders.platform_specifier_for_builder(builder_name).lower())
+                self.host.builders.platform_specifier_for_builder(
+                    builder_name).lower())
         return frozenset(all_platform_specifiers)
 
     def write_to_test_expectations(self, line_dict):
@@ -478,7 +515,8 @@
         """
         if not line_dict:
             _log.info(
-                'No lines to write to TestExpectations, WebdriverExpectations or NeverFixTests.')
+                'No lines to write to TestExpectations, WebdriverExpectations or NeverFixTests.'
+            )
             return
 
         line_list = []
@@ -501,30 +539,39 @@
             if not lines:
                 continue
 
-            _log.info('Lines to write to %s:\n %s', expectations_file_path, '\n'.join(lines))
+            _log.info('Lines to write to %s:\n %s', expectations_file_path,
+                      '\n'.join(lines))
             # Writes to TestExpectations file.
-            file_contents = self.host.filesystem.read_text_file(expectations_file_path)
+            file_contents = self.host.filesystem.read_text_file(
+                expectations_file_path)
 
             marker_comment_index = file_contents.find(MARKER_COMMENT)
             if marker_comment_index == -1:
                 file_contents += '\n%s\n' % MARKER_COMMENT
                 file_contents += '\n'.join(lines)
             else:
-                end_of_marker_line = (file_contents[marker_comment_index:].find('\n')) + marker_comment_index
-                file_contents = file_contents[:end_of_marker_line + 1] + '\n'.join(lines) + file_contents[end_of_marker_line:]
+                end_of_marker_line = (file_contents[marker_comment_index:].
+                                      find('\n')) + marker_comment_index
+                file_contents = (
+                    file_contents[:end_of_marker_line + 1] + '\n'.join(lines) +
+                    file_contents[end_of_marker_line:])
 
-            self.host.filesystem.write_text_file(expectations_file_path, file_contents)
+            self.host.filesystem.write_text_file(expectations_file_path,
+                                                 file_contents)
 
         if wont_fix_list:
-            _log.info('Lines to write to NeverFixTests:\n %s', '\n'.join(wont_fix_list))
+            _log.info('Lines to write to NeverFixTests:\n %s',
+                      '\n'.join(wont_fix_list))
             # Writes to NeverFixTests file.
             wont_fix_path = self.port.path_to_never_fix_tests_file()
-            wont_fix_file_content = self.host.filesystem.read_text_file(wont_fix_path)
+            wont_fix_file_content = self.host.filesystem.read_text_file(
+                wont_fix_path)
             if not wont_fix_file_content.endswith('\n'):
                 wont_fix_file_content += '\n'
             wont_fix_file_content += '\n'.join(wont_fix_list)
             wont_fix_file_content += '\n'
-            self.host.filesystem.write_text_file(wont_fix_path, wont_fix_file_content)
+            self.host.filesystem.write_text_file(wont_fix_path,
+                                                 wont_fix_file_content)
 
     # TODO(robertma): Unit test this method.
     def download_text_baselines(self, test_results):
@@ -544,7 +591,8 @@
             the test_results dictionary containing only tests that couldn't be
             rebaselined.
         """
-        tests_to_rebaseline, test_results = self.get_tests_to_rebaseline(test_results)
+        tests_to_rebaseline, test_results = self.get_tests_to_rebaseline(
+            test_results)
         if not tests_to_rebaseline:
             _log.info('No tests to rebaseline.')
             return tests_to_rebaseline, test_results
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater_unittest.py b/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater_unittest.py
index 5421383..fc3b4e5f 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater_unittest.py
@@ -20,7 +20,6 @@
 
 
 class WPTExpectationsUpdaterTest(LoggingTestCase):
-
     def mock_host(self):
         """Returns a mock host with fake values set up for testing."""
         host = MockHost()
@@ -64,13 +63,13 @@
 
         # Write a dummy manifest file, describing what tests exist.
         host.filesystem.write_text_file(
-            host.port_factory.get().web_tests_dir() + '/external/' + BASE_MANIFEST_NAME,
+            host.port_factory.get().web_tests_dir() + '/external/' +
+            BASE_MANIFEST_NAME,
             json.dumps({
                 'items': {
                     'reftest': {
-                        'reftest.html': [
-                            ['/reftest.html', [['/reftest-ref.html', '==']], {}]
-                        ]
+                        'reftest.html':
+                        [['/reftest.html', [['/reftest-ref.html', '==']], {}]]
                     },
                     'testharness': {
                         'test/path.html': [['/test/path.html', {}]],
@@ -89,19 +88,28 @@
         host = self.mock_host()
 
         # Fill in an initial value for TestExpectations
-        expectations_path = host.port_factory.get().path_to_generic_test_expectations_file()
-        host.filesystem.write_text_file(expectations_path, MARKER_COMMENT + '\n')
+        expectations_path = \
+            host.port_factory.get().path_to_generic_test_expectations_file()
+        host.filesystem.write_text_file(expectations_path,
+                                        MARKER_COMMENT + '\n')
 
         # Set up fake try job results.
         updater = WPTExpectationsUpdater(host)
-        updater.git_cl = MockGitCL(updater.host, {
-            Build('MOCK Try Mac10.10', 333): TryJobStatus('COMPLETED', 'FAILURE'),
-            Build('MOCK Try Mac10.11', 111): TryJobStatus('COMPLETED', 'SUCCESS'),
-            Build('MOCK Try Trusty', 222): TryJobStatus('COMPLETED', 'SUCCESS'),
-            Build('MOCK Try Precise', 333): TryJobStatus('COMPLETED', 'SUCCESS'),
-            Build('MOCK Try Win10', 444): TryJobStatus('COMPLETED', 'SUCCESS'),
-            Build('MOCK Try Win7', 555): TryJobStatus('COMPLETED', 'SUCCESS'),
-        })
+        updater.git_cl = MockGitCL(
+            updater.host, {
+                Build('MOCK Try Mac10.10', 333):
+                TryJobStatus('COMPLETED', 'FAILURE'),
+                Build('MOCK Try Mac10.11', 111):
+                TryJobStatus('COMPLETED', 'SUCCESS'),
+                Build('MOCK Try Trusty', 222):
+                TryJobStatus('COMPLETED', 'SUCCESS'),
+                Build('MOCK Try Precise', 333):
+                TryJobStatus('COMPLETED', 'SUCCESS'),
+                Build('MOCK Try Win10', 444):
+                TryJobStatus('COMPLETED', 'SUCCESS'),
+                Build('MOCK Try Win7', 555):
+                TryJobStatus('COMPLETED', 'SUCCESS'),
+            })
 
         # Set up failing results for one try bot. It shouldn't matter what
         # results are for the other builders since we shouldn't need to even
@@ -127,53 +135,61 @@
         self.assertEqual(0, updater.run(args=[]))
 
         # Results are only fetched for failing builds.
-        self.assertEqual(host.results_fetcher.fetched_builds, [Build('MOCK Try Mac10.10', 333)])
+        self.assertEqual(host.results_fetcher.fetched_builds,
+                         [Build('MOCK Try Mac10.10', 333)])
 
         self.assertEqual(
             host.filesystem.read_text_file(expectations_path),
             '# ====== New tests from wpt-importer added here ======\n'
-            'crbug.com/626703 [ Mac10.10 ] external/wpt/test/path.html [ Timeout ]\n')
+            'crbug.com/626703 [ Mac10.10 ] external/wpt/test/path.html [ Timeout ]\n'
+        )
 
     def test_get_failing_results_dict_only_passing_results(self):
         host = self.mock_host()
-        host.results_fetcher.set_results(Build('MOCK Try Mac10.10', 123), WebTestResults({
-            'tests': {
-                'external': {
-                    'wpt': {
-                        'x': {
-                            'passing-test.html': {
-                                'expected': 'PASS',
-                                'actual': 'PASS',
+        host.results_fetcher.set_results(
+            Build('MOCK Try Mac10.10', 123),
+            WebTestResults({
+                'tests': {
+                    'external': {
+                        'wpt': {
+                            'x': {
+                                'passing-test.html': {
+                                    'expected': 'PASS',
+                                    'actual': 'PASS',
+                                },
                             },
                         },
                     },
                 },
-            },
-        }))
+            }))
         updater = WPTExpectationsUpdater(host)
         self.assertEqual(
-            updater.get_failing_results_dict(Build('MOCK Try Mac10.10', 123)), {})
+            updater.get_failing_results_dict(Build('MOCK Try Mac10.10', 123)),
+            {})
 
     def test_get_failing_results_dict_unexpected_pass(self):
         host = self.mock_host()
-        host.results_fetcher.set_results(Build('MOCK Try Mac10.10', 123), WebTestResults({
-            'tests': {
-                'external': {
-                    'wpt': {
-                        'x': {
-                            'passing-test.html': {
-                                'expected': 'FAIL TIMEOUT',
-                                'actual': 'PASS',
-                                'is_unexpected': True,
+        host.results_fetcher.set_results(
+            Build('MOCK Try Mac10.10', 123),
+            WebTestResults({
+                'tests': {
+                    'external': {
+                        'wpt': {
+                            'x': {
+                                'passing-test.html': {
+                                    'expected': 'FAIL TIMEOUT',
+                                    'actual': 'PASS',
+                                    'is_unexpected': True,
+                                },
                             },
                         },
                     },
                 },
-            },
-        }))
+            }))
         updater = WPTExpectationsUpdater(host)
         self.assertEqual(
-            updater.get_failing_results_dict(Build('MOCK Try Mac10.10', 123)), {})
+            updater.get_failing_results_dict(Build('MOCK Try Mac10.10', 123)),
+            {})
 
     def test_get_failing_results_dict_no_results(self):
         host = self.mock_host()
@@ -181,32 +197,36 @@
         host.results_fetcher.set_results(Build('MOCK Try Mac10.10', 123), None)
         updater = WPTExpectationsUpdater(host)
         self.assertEqual(
-            updater.get_failing_results_dict(Build('MOCK Try Mac10.10', 123)), {})
+            updater.get_failing_results_dict(Build('MOCK Try Mac10.10', 123)),
+            {})
 
     def test_get_failing_results_dict_some_failing_results(self):
         host = self.mock_host()
-        host.results_fetcher.set_results(Build('MOCK Try Mac10.10', 123), WebTestResults({
-            'tests': {
-                'external': {
-                    'wpt': {
-                        'x': {
-                            'failing-test.html': {
-                                'expected': 'PASS',
-                                'actual': 'IMAGE',
-                                'is_unexpected': True,
+        host.results_fetcher.set_results(
+            Build('MOCK Try Mac10.10', 123),
+            WebTestResults({
+                'tests': {
+                    'external': {
+                        'wpt': {
+                            'x': {
+                                'failing-test.html': {
+                                    'expected': 'PASS',
+                                    'actual': 'IMAGE',
+                                    'is_unexpected': True,
+                                },
                             },
                         },
                     },
                 },
-            },
-        }))
+            }))
         updater = WPTExpectationsUpdater(host)
-        results_dict = updater.get_failing_results_dict(Build('MOCK Try Mac10.10', 123))
+        results_dict = updater.get_failing_results_dict(
+            Build('MOCK Try Mac10.10', 123))
         self.assertEqual(
-            results_dict,
-            {
+            results_dict, {
                 'external/wpt/x/failing-test.html': {
-                    'test-mac-mac10.10': SimpleTestResult(
+                    'test-mac-mac10.10':
+                    SimpleTestResult(
                         actual='IMAGE',
                         expected='PASS',
                         bug='crbug.com/626703',
@@ -216,71 +236,79 @@
 
     def test_get_failing_results_dict_non_wpt_test(self):
         host = self.mock_host()
-        host.results_fetcher.set_results(Build('MOCK Try Mac10.10', 123), WebTestResults({
-            'tests': {
-                'x': {
-                    'failing-test.html': {
-                        'expected': 'PASS',
-                        'actual': 'IMAGE',
-                        'is_unexpected': True,
+        host.results_fetcher.set_results(
+            Build('MOCK Try Mac10.10', 123),
+            WebTestResults({
+                'tests': {
+                    'x': {
+                        'failing-test.html': {
+                            'expected': 'PASS',
+                            'actual': 'IMAGE',
+                            'is_unexpected': True,
+                        },
                     },
                 },
-            },
-        }))
+            }))
         updater = WPTExpectationsUpdater(host)
-        results_dict = updater.get_failing_results_dict(Build('MOCK Try Mac10.10', 123))
+        results_dict = updater.get_failing_results_dict(
+            Build('MOCK Try Mac10.10', 123))
         self.assertEqual(results_dict, {})
 
     def test_get_failing_results_dict_webdriver_failing_results_(self):
         host = self.mock_host()
-        host.results_fetcher.set_results(Build('MOCK Try Trusty', 123), WebTestResults({
-            'tests': {
-                'external': {
-                    'wpt': {
-                        'x': {
-                            'failing-test.html': {
-                                'expected': 'PASS',
-                                'actual': 'IMAGE',
-                                'is_unexpected': True,
+        host.results_fetcher.set_results(
+            Build('MOCK Try Trusty', 123),
+            WebTestResults({
+                'tests': {
+                    'external': {
+                        'wpt': {
+                            'x': {
+                                'failing-test.html': {
+                                    'expected': 'PASS',
+                                    'actual': 'IMAGE',
+                                    'is_unexpected': True,
+                                },
                             },
                         },
                     },
                 },
-            },
-        }))
+            }))
 
-        host.results_fetcher.set_webdriver_test_results(Build('MOCK Try Trusty', 123), "tryserver.blink", WebTestResults({
-            'tests': {
-                'external': {
-                    'wpt': {
-                        'y': {
-                            'webdriver-fail.html': {
-                                'expected': 'PASS',
-                                'actual': 'FAIL',
-                                'is_unexpected': True,
+        host.results_fetcher.set_webdriver_test_results(
+            Build('MOCK Try Trusty', 123), "tryserver.blink",
+            WebTestResults({
+                'tests': {
+                    'external': {
+                        'wpt': {
+                            'y': {
+                                'webdriver-fail.html': {
+                                    'expected': 'PASS',
+                                    'actual': 'FAIL',
+                                    'is_unexpected': True,
+                                },
                             },
                         },
                     },
                 },
-            },
-        }))
+            }))
         updater = WPTExpectationsUpdater(host)
         results_dict = updater.get_failing_results_dict(
             Build('MOCK Try Trusty', 123))
 
         self.assertEqual(len(results_dict.keys()), 2)
         self.assertEqual(
-            results_dict,
-            {
+            results_dict, {
                 'external/wpt/x/failing-test.html': {
-                    'test-linux-trusty': SimpleTestResult(
+                    'test-linux-trusty':
+                    SimpleTestResult(
                         actual='IMAGE',
                         expected='PASS',
                         bug='crbug.com/626703',
                     ),
                 },
                 'external/wpt/y/webdriver-fail.html': {
-                    'test-linux-trusty': SimpleTestResult(
+                    'test-linux-trusty':
+                    SimpleTestResult(
                         actual='FAIL',
                         expected='PASS',
                         bug='crbug.com/626703',
@@ -292,22 +320,44 @@
         updater = WPTExpectationsUpdater(self.mock_host())
         self.assertEqual(
             updater.merge_same_valued_keys({
-                'one': {'expected': 'FAIL', 'actual': 'PASS'},
-                'two': {'expected': 'FAIL', 'actual': 'PASS'},
-            }),
-            {('two', 'one'): {'expected': 'FAIL', 'actual': 'PASS'}})
+                'one': {
+                    'expected': 'FAIL',
+                    'actual': 'PASS'
+                },
+                'two': {
+                    'expected': 'FAIL',
+                    'actual': 'PASS'
+                },
+            }), {('two', 'one'): {
+                     'expected': 'FAIL',
+                     'actual': 'PASS'
+                 }})
 
     def test_merge_same_valued_keys_one_mismatch(self):
         updater = WPTExpectationsUpdater(self.mock_host())
         self.assertEqual(
             updater.merge_same_valued_keys({
-                'one': {'expected': 'FAIL', 'actual': 'PASS'},
-                'two': {'expected': 'FAIL', 'actual': 'TIMEOUT'},
-                'three': {'expected': 'FAIL', 'actual': 'PASS'},
-            }),
-            {
-                ('three', 'one'): {'expected': 'FAIL', 'actual': 'PASS'},
-                'two': {'expected': 'FAIL', 'actual': 'TIMEOUT'},
+                'one': {
+                    'expected': 'FAIL',
+                    'actual': 'PASS'
+                },
+                'two': {
+                    'expected': 'FAIL',
+                    'actual': 'TIMEOUT'
+                },
+                'three': {
+                    'expected': 'FAIL',
+                    'actual': 'PASS'
+                },
+            }), {
+                ('three', 'one'): {
+                    'expected': 'FAIL',
+                    'actual': 'PASS'
+                },
+                'two': {
+                    'expected': 'FAIL',
+                    'actual': 'TIMEOUT'
+                },
             })
 
     def test_get_expectations(self):
@@ -317,52 +367,63 @@
             updater.get_expectations(SimpleTestResult('FAIL', 'PASS', 'bug')),
             {'Pass'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('FAIL', 'PASS PASS', 'bug')),
-            {'Pass'})
+            updater.get_expectations(
+                SimpleTestResult('FAIL', 'PASS PASS', 'bug')), {'Pass'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('FAIL', 'TIMEOUT', 'bug')),
+            updater.get_expectations(
+                SimpleTestResult('FAIL', 'TIMEOUT', 'bug')), {'Timeout'})
+        self.assertEqual(
+            updater.get_expectations(
+                SimpleTestResult('FAIL', 'TIMEOUT TIMEOUT', 'bug')),
             {'Timeout'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('FAIL', 'TIMEOUT TIMEOUT', 'bug')),
-            {'Timeout'})
+            updater.get_expectations(
+                SimpleTestResult('TIMEOUT', 'PASS', 'bug')), {'Pass'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('TIMEOUT', 'PASS', 'bug')),
-            {'Pass'})
+            updater.get_expectations(
+                SimpleTestResult('TIMEOUT', 'PASS PASS', 'bug')), {'Pass'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('TIMEOUT', 'PASS PASS', 'bug')),
-            {'Pass'})
-        self.assertEqual(
-            updater.get_expectations(SimpleTestResult('PASS', 'TEXT PASS', 'bug')),
+            updater.get_expectations(
+                SimpleTestResult('PASS', 'TEXT PASS', 'bug')),
             {'Pass', 'Failure'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('PASS', 'TIMEOUT CRASH TEXT', 'bug')),
+            updater.get_expectations(
+                SimpleTestResult('PASS', 'TIMEOUT CRASH TEXT', 'bug')),
             {'Crash', 'Failure', 'Timeout'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('SLOW CRASH FAIL TIMEOUT', 'PASS', 'bug')),
+            updater.get_expectations(
+                SimpleTestResult('SLOW CRASH FAIL TIMEOUT', 'PASS', 'bug')),
             {'Pass'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('PASS', 'IMAGE+TEXT IMAGE IMAGE', 'bug')),
+            updater.get_expectations(
+                SimpleTestResult('PASS', 'IMAGE+TEXT IMAGE IMAGE', 'bug')),
             {'Failure'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('PASS', 'MISSING', 'bug')),
-            {'Skip'})
+            updater.get_expectations(
+                SimpleTestResult('PASS', 'MISSING', 'bug')), {'Skip'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('PASS', 'MISSING MISSING', 'bug')),
-            {'Skip'})
+            updater.get_expectations(
+                SimpleTestResult('PASS', 'MISSING MISSING', 'bug')), {'Skip'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('PASS', 'TIMEOUT', 'bug'), test_name='foo/bar-manual.html'),
-            {'Skip'})
+            updater.get_expectations(
+                SimpleTestResult('PASS', 'TIMEOUT', 'bug'),
+                test_name='foo/bar-manual.html'), {'Skip'})
         self.assertEqual(
-            updater.get_expectations(SimpleTestResult('PASS', 'FAIL', 'bug'), test_name='external/wpt/webdriver/foo/a'),
-            {'Failure'})
+            updater.get_expectations(
+                SimpleTestResult('PASS', 'FAIL', 'bug'),
+                test_name='external/wpt/webdriver/foo/a'), {'Failure'})
 
     def test_create_line_dict_old_tests(self):
         # In this example, there are two failures that are not in wpt.
         updater = WPTExpectationsUpdater(self.mock_host())
         results = {
             'fake/test/path.html': {
-                'one': SimpleTestResult(expected='FAIL', actual='PASS', bug='crbug.com/test'),
-                'two': SimpleTestResult(expected='FAIL', actual='PASS', bug='crbug.com/test'),
+                'one':
+                SimpleTestResult(
+                    expected='FAIL', actual='PASS', bug='crbug.com/test'),
+                'two':
+                SimpleTestResult(
+                    expected='FAIL', actual='PASS', bug='crbug.com/test'),
             }
         }
         self.assertEqual(updater.create_line_dict(results), {})
@@ -373,20 +434,29 @@
         updater = WPTExpectationsUpdater(self.mock_host())
         results = {
             'external/wpt/test/zzzz.html': {
-                'test-mac-mac10.10': SimpleTestResult(expected='PASS', actual='TEXT', bug='crbug.com/test'),
+                'test-mac-mac10.10':
+                SimpleTestResult(
+                    expected='PASS', actual='TEXT', bug='crbug.com/test'),
             },
             'virtual/foo/external/wpt/test/zzzz.html': {
-                'test-linux-trusty': SimpleTestResult(expected='FAIL', actual='PASS', bug='crbug.com/test'),
-                'test-mac-mac10.11': SimpleTestResult(expected='FAIL', actual='TIMEOUT', bug='crbug.com/test'),
+                'test-linux-trusty':
+                SimpleTestResult(
+                    expected='FAIL', actual='PASS', bug='crbug.com/test'),
+                'test-mac-mac10.11':
+                SimpleTestResult(
+                    expected='FAIL', actual='TIMEOUT', bug='crbug.com/test'),
             },
             'unrelated/test.html': {
-                'test-linux-trusty': SimpleTestResult(expected='FAIL', actual='PASS', bug='crbug.com/test'),
+                'test-linux-trusty':
+                SimpleTestResult(
+                    expected='FAIL', actual='PASS', bug='crbug.com/test'),
             },
         }
         self.assertEqual(
-            updater.create_line_dict(results),
-            {
-                'external/wpt/test/zzzz.html': ['crbug.com/test [ Mac10.10 ] external/wpt/test/zzzz.html [ Failure ]'],
+            updater.create_line_dict(results), {
+                'external/wpt/test/zzzz.html': [
+                    'crbug.com/test [ Mac10.10 ] external/wpt/test/zzzz.html [ Failure ]'
+                ],
                 'virtual/foo/external/wpt/test/zzzz.html': [
                     'crbug.com/test [ Trusty ] virtual/foo/external/wpt/test/zzzz.html [ Pass ]',
                     'crbug.com/test [ Mac10.11 ] virtual/foo/external/wpt/test/zzzz.html [ Timeout ]',
@@ -398,13 +468,16 @@
         updater = WPTExpectationsUpdater(self.mock_host())
         results = {
             'virtual/foo/external/wpt/test/aa-manual.html': {
-                'test-linux-trusty': SimpleTestResult(expected='PASS', actual='TIMEOUT', bug='crbug.com/test'),
-                'test-mac-mac10.11': SimpleTestResult(expected='FAIL', actual='TIMEOUT', bug='crbug.com/test'),
+                'test-linux-trusty':
+                SimpleTestResult(
+                    expected='PASS', actual='TIMEOUT', bug='crbug.com/test'),
+                'test-mac-mac10.11':
+                SimpleTestResult(
+                    expected='FAIL', actual='TIMEOUT', bug='crbug.com/test'),
             },
         }
         self.assertEqual(
-            updater.create_line_dict(results),
-            {
+            updater.create_line_dict(results), {
                 'virtual/foo/external/wpt/test/aa-manual.html': [
                     'crbug.com/test [ Trusty ] virtual/foo/external/wpt/test/aa-manual.html [ Skip ]',
                     'crbug.com/test [ Mac10.11 ] virtual/foo/external/wpt/test/aa-manual.html [ Skip ]',
@@ -415,25 +488,31 @@
         # Literal asterisks in test names need to be escaped in expectations.
         updater = WPTExpectationsUpdater(self.mock_host())
         results = {
-            'external/wpt/html/dom/interfaces.https.html?exclude=(Document.*|HTML.*)': {
-                'test-linux-trusty': SimpleTestResult(expected='PASS', actual='FAIL', bug='crbug.com/test'),
+            'external/wpt/html/dom/interfaces.https.html?exclude=(Document.*|HTML.*)':
+            {
+                'test-linux-trusty':
+                SimpleTestResult(
+                    expected='PASS', actual='FAIL', bug='crbug.com/test'),
             },
         }
         self.assertEqual(
-            updater.create_line_dict(results),
-            {
-                'external/wpt/html/dom/interfaces.https.html?exclude=(Document.*|HTML.*)': [
+            updater.create_line_dict(results), {
+                'external/wpt/html/dom/interfaces.https.html?exclude=(Document.*|HTML.*)':
+                [
                     'crbug.com/test [ Trusty ] external/wpt/html/dom/interfaces.https.html?exclude=(Document.\*|HTML.\*) [ Failure ]',
                 ],
             })
 
     def test_normalized_specifiers(self):
         updater = WPTExpectationsUpdater(self.mock_host())
-        self.assertEqual(updater.normalized_specifiers('x/y.html', ['test-mac-mac10.10']), ['Mac10.10'])
+        self.assertEqual(
+            updater.normalized_specifiers('x/y.html', ['test-mac-mac10.10']),
+            ['Mac10.10'])
         self.assertEqual(updater.normalized_specifiers('x/y.html', []), [''])
 
         self.assertEqual(
-            updater.normalized_specifiers('x/y.html', ['test-mac-mac10.10', 'test-win-win7']),
+            updater.normalized_specifiers(
+                'x/y.html', ['test-mac-mac10.10', 'test-win-win7']),
             ['Mac10.10', 'Win7'])
 
     def test_skipped_specifiers_when_test_is_skip(self):
@@ -444,9 +523,12 @@
             ('# tags: [ Linux ]\n'
              '# results: [ Skip ]\n'
              'crbug.com/111 [ Linux ] external/wpt/test.html [ Skip ]\n'))
-        host.filesystem.write_text_file('/test.checkout/wtests/external/wpt/test.html', '')
+        host.filesystem.write_text_file(
+            '/test.checkout/wtests/external/wpt/test.html', '')
         updater = WPTExpectationsUpdater(host)
-        self.assertEqual(updater.skipped_specifiers('external/wpt/test.html'), ['Precise', 'Trusty'])
+        self.assertEqual(
+            updater.skipped_specifiers('external/wpt/test.html'),
+            ['Precise', 'Trusty'])
 
     def test_specifiers_can_extend_to_all_platforms(self):
         host = self.mock_host()
@@ -456,12 +538,16 @@
             ('# tags: [ Linux ]\n'
              '# results: [ Skip ]\n'
              'crbug.com/111 [ Linux ] external/wpt/test.html [ Skip ]\n'))
-        host.filesystem.write_text_file('/test.checkout/wtests/external/wpt/test.html', '')
+        host.filesystem.write_text_file(
+            '/test.checkout/wtests/external/wpt/test.html', '')
         updater = WPTExpectationsUpdater(host)
-        self.assertTrue(updater.specifiers_can_extend_to_all_platforms(
-            ['Mac10.10', 'Mac10.11', 'Win7', 'Win10'], 'external/wpt/test.html'))
-        self.assertFalse(updater.specifiers_can_extend_to_all_platforms(
-            ['Mac10.10', 'Win7', 'Win10'], 'external/wpt/test.html'))
+        self.assertTrue(
+            updater.specifiers_can_extend_to_all_platforms(
+                ['Mac10.10', 'Mac10.11', 'Win7', 'Win10'],
+                'external/wpt/test.html'))
+        self.assertFalse(
+            updater.specifiers_can_extend_to_all_platforms(
+                ['Mac10.10', 'Win7', 'Win10'], 'external/wpt/test.html'))
 
     def test_simplify_specifiers(self):
         host = self.mock_host()
@@ -471,10 +557,18 @@
             'win': ['Win7', 'win10'],
             'Linux': ['Trusty'],
         }
-        self.assertEqual(updater.simplify_specifiers(['mac10.10', 'mac10.11'], macros), ['Mac'])
-        self.assertEqual(updater.simplify_specifiers(['Mac10.10', 'Mac10.11', 'Trusty'], macros), ['Linux', 'Mac'])
-        self.assertEqual(updater.simplify_specifiers(['Mac10.10', 'Mac10.11', 'Trusty', 'Win7', 'Win10'], macros), [])
-        self.assertEqual(updater.simplify_specifiers(['Mac', 'Win', 'Linux'], macros), [])
+        self.assertEqual(
+            updater.simplify_specifiers(['mac10.10', 'mac10.11'], macros),
+            ['Mac'])
+        self.assertEqual(
+            updater.simplify_specifiers(['Mac10.10', 'Mac10.11', 'Trusty'],
+                                        macros), ['Linux', 'Mac'])
+        self.assertEqual(
+            updater.simplify_specifiers(
+                ['Mac10.10', 'Mac10.11', 'Trusty', 'Win7', 'Win10'], macros),
+            [])
+        self.assertEqual(
+            updater.simplify_specifiers(['Mac', 'Win', 'Linux'], macros), [])
 
     def test_simplify_specifiers_uses_specifiers_in_builder_list(self):
         # Even if there are extra specifiers in the macro dictionary, we can simplify specifier
@@ -487,8 +581,13 @@
             'win': ['Win7', 'win10'],
             'Linux': ['Trusty'],
         }
-        self.assertEqual(updater.simplify_specifiers(['mac10.10', 'mac10.11'], macros), ['Mac'])
-        self.assertEqual(updater.simplify_specifiers(['Mac10.10', 'Mac10.11', 'Trusty', 'Win7', 'Win10'], macros), [])
+        self.assertEqual(
+            updater.simplify_specifiers(['mac10.10', 'mac10.11'], macros),
+            ['Mac'])
+        self.assertEqual(
+            updater.simplify_specifiers(
+                ['Mac10.10', 'Mac10.11', 'Trusty', 'Win7', 'Win10'], macros),
+            [])
 
     def test_simplify_specifiers_port_not_tested_by_trybots(self):
         host = self.mock_host()
@@ -498,7 +597,9 @@
             'win': ['win10'],
             'foo': ['bar'],
         }
-        self.assertEqual(updater.simplify_specifiers(['mac10.10', 'mac10.11'], macros), ['Mac'])
+        self.assertEqual(
+            updater.simplify_specifiers(['mac10.10', 'mac10.11'], macros),
+            ['Mac'])
 
     def test_normalized_specifiers_with_skipped_test(self):
         host = self.mock_host()
@@ -509,51 +610,87 @@
              '# results: [ Skip ]\n'
              'crbug.com/111 [ Linux ] external/wpt/test.html [ Skip ]\n'
              'crbug.com/111 [ Mac10.11 ] external/wpt/test.html [ Skip ]\n'))
-        host.filesystem.write_text_file('/test.checkout/wtests/external/wpt/test.html', '')
+        host.filesystem.write_text_file(
+            '/test.checkout/wtests/external/wpt/test.html', '')
         updater = WPTExpectationsUpdater(host)
         self.assertEqual(
-            updater.normalized_specifiers('external/wpt/test.html', ['test-mac-mac10.10', 'test-win-win7', 'test-win-win10']), [''])
+            updater.normalized_specifiers(
+                'external/wpt/test.html',
+                ['test-mac-mac10.10', 'test-win-win7', 'test-win-win10']),
+            [''])
         self.assertEqual(
-            updater.normalized_specifiers('external/wpt/test.html', ['test-win-win7', 'test-win-win10']), ['Win'])
+            updater.normalized_specifiers('external/wpt/test.html',
+                                          ['test-win-win7', 'test-win-win10']),
+            ['Win'])
         self.assertEqual(
-            updater.normalized_specifiers('external/wpt/another.html', ['test-win-win7', 'test-win-win10']), ['Win'])
+            updater.normalized_specifiers('external/wpt/another.html',
+                                          ['test-win-win7', 'test-win-win10']),
+            ['Win'])
 
     def test_merge_dicts_with_conflict_raise_exception(self):
         updater = WPTExpectationsUpdater(self.mock_host())
         # Both dicts here have the key "one", and the value is not equal.
         with self.assertRaises(ValueError):
-            updater.merge_dicts(
-                {
-                    'external/wpt/test/path.html': {
-                        'one': {'expected': 'FAIL', 'actual': 'PASS'},
-                        'two': {'expected': 'FAIL', 'actual': 'TIMEOUT'},
-                        'three': {'expected': 'FAIL', 'actual': 'PASS'},
+            updater.merge_dicts({
+                'external/wpt/test/path.html': {
+                    'one': {
+                        'expected': 'FAIL',
+                        'actual': 'PASS'
+                    },
+                    'two': {
+                        'expected': 'FAIL',
+                        'actual': 'TIMEOUT'
+                    },
+                    'three': {
+                        'expected': 'FAIL',
+                        'actual': 'PASS'
                     },
                 },
-                {
-                    'external/wpt/test/path.html': {
-                        'one': {'expected': 'FAIL', 'actual': 'TIMEOUT'},
-                    }
-                })
+            }, {
+                'external/wpt/test/path.html': {
+                    'one': {
+                        'expected': 'FAIL',
+                        'actual': 'TIMEOUT'
+                    },
+                }
+            })
 
     def test_merge_dicts_merges_second_dict_into_first(self):
         updater = WPTExpectationsUpdater(self.mock_host())
         one = {
             'fake/test/path.html': {
-                'one': {'expected': 'FAIL', 'actual': 'PASS'},
-                'two': {'expected': 'FAIL', 'actual': 'PASS'},
+                'one': {
+                    'expected': 'FAIL',
+                    'actual': 'PASS'
+                },
+                'two': {
+                    'expected': 'FAIL',
+                    'actual': 'PASS'
+                },
             }
         }
         two = {
             'external/wpt/test/path.html': {
-                'one': {'expected': 'FAIL', 'actual': 'PASS'},
-                'two': {'expected': 'FAIL', 'actual': 'TIMEOUT'},
-                'three': {'expected': 'FAIL', 'actual': 'PASS'},
+                'one': {
+                    'expected': 'FAIL',
+                    'actual': 'PASS'
+                },
+                'two': {
+                    'expected': 'FAIL',
+                    'actual': 'TIMEOUT'
+                },
+                'three': {
+                    'expected': 'FAIL',
+                    'actual': 'PASS'
+                },
             }
         }
         three = {
             'external/wpt/test/path.html': {
-                'four': {'expected': 'FAIL', 'actual': 'PASS'},
+                'four': {
+                    'expected': 'FAIL',
+                    'actual': 'PASS'
+                },
             }
         }
 
@@ -573,24 +710,30 @@
                     'has_stderr': True,
                 })
         ]
-        self.assertEqual(updater.generate_results_dict('test-mac-mac10.10', web_test_list), {
-            'external/wpt/test/name.html': {
-                'test-mac-mac10.10': SimpleTestResult(
-                    expected='bar',
-                    actual='foo',
-                    bug='crbug.com/626703',
-                )
-            }
-        })
+        self.assertEqual(
+            updater.generate_results_dict('test-mac-mac10.10', web_test_list),
+            {
+                'external/wpt/test/name.html': {
+                    'test-mac-mac10.10':
+                    SimpleTestResult(
+                        expected='bar',
+                        actual='foo',
+                        bug='crbug.com/626703',
+                    )
+                }
+            })
 
     def test_write_to_test_expectations_with_marker_comment(self):
         host = self.mock_host()
-        expectations_path = host.port_factory.get().path_to_generic_test_expectations_file()
-        host.filesystem.write_text_file(
-            expectations_path,
-            MARKER_COMMENT + '\n')
+        expectations_path = \
+            host.port_factory.get().path_to_generic_test_expectations_file()
+        host.filesystem.write_text_file(expectations_path,
+                                        MARKER_COMMENT + '\n')
         updater = WPTExpectationsUpdater(host)
-        line_dict = {'fake/file/path.html': ['crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]']}
+        line_dict = {
+            'fake/file/path.html':
+            ['crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]']
+        }
         skip_path = host.port_factory.get().path_to_never_fix_tests_file()
         skip_value_origin = host.filesystem.read_text_file(skip_path)
 
@@ -598,27 +741,29 @@
         value = host.filesystem.read_text_file(expectations_path)
 
         self.assertMultiLineEqual(
-            value,
-            (MARKER_COMMENT + '\n'
-             'crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]\n'))
+            value, (MARKER_COMMENT + '\n'
+                    'crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]\n'))
         skip_value = host.filesystem.read_text_file(skip_path)
-        self.assertMultiLineEqual(
-            skip_value,
-            skip_value_origin)
+        self.assertMultiLineEqual(skip_value, skip_value_origin)
 
     def test_write_to_test_expectations_with_webdriver_lines(self):
         host = self.mock_host()
 
-        webdriver_expectations_path = host.port_factory.get().path_to_webdriver_expectations_file()
-        host.filesystem.write_text_file(
-            webdriver_expectations_path,
-            MARKER_COMMENT + '\n')
+        webdriver_expectations_path = \
+            host.port_factory.get().path_to_webdriver_expectations_file()
+        host.filesystem.write_text_file(webdriver_expectations_path,
+                                        MARKER_COMMENT + '\n')
         updater = WPTExpectationsUpdater(host)
-        line_dict = {'external/wpt/webdriver/fake/file/path.html':
-                     ['crbug.com/123 [ Trusty ] external/wpt/webdriver/fake/file/path.html [ Pass ]']}
+        line_dict = {
+            'external/wpt/webdriver/fake/file/path.html': [
+                'crbug.com/123 [ Trusty ] external/wpt/webdriver/fake/file/path.html [ Pass ]'
+            ]
+        }
 
-        expectations_path = host.port_factory.get().path_to_generic_test_expectations_file()
-        expectations_value_origin = host.filesystem.read_text_file(expectations_path)
+        expectations_path = \
+            host.port_factory.get().path_to_generic_test_expectations_file()
+        expectations_value_origin = host.filesystem.read_text_file(
+            expectations_path)
 
         skip_path = host.port_factory.get().path_to_never_fix_tests_file()
         skip_value_origin = host.filesystem.read_text_file(skip_path)
@@ -626,29 +771,30 @@
         updater.write_to_test_expectations(line_dict)
         value = host.filesystem.read_text_file(webdriver_expectations_path)
 
-        self.assertMultiLineEqual(
-            value,
-            (MARKER_COMMENT + '\n'
-             'crbug.com/123 [ Trusty ] external/wpt/webdriver/fake/file/path.html [ Pass ]\n'))
+        self.assertMultiLineEqual(value, (
+            MARKER_COMMENT + '\n'
+            'crbug.com/123 [ Trusty ] external/wpt/webdriver/fake/file/path.html [ Pass ]\n'
+        ))
 
         skip_value = host.filesystem.read_text_file(skip_path)
-        self.assertMultiLineEqual(
-            skip_value,
-            skip_value_origin)
+        self.assertMultiLineEqual(skip_value, skip_value_origin)
 
         expectations_value = host.filesystem.read_text_file(expectations_path)
-        self.assertMultiLineEqual(
-            expectations_value,
-            expectations_value_origin)
+        self.assertMultiLineEqual(expectations_value,
+                                  expectations_value_origin)
 
     def test_write_to_test_expectations_with_no_marker_comment(self):
         host = self.mock_host()
-        expectations_path = host.port_factory.get().path_to_generic_test_expectations_file()
+        expectations_path = \
+            host.port_factory.get().path_to_generic_test_expectations_file()
         host.filesystem.write_text_file(
             expectations_path,
             'crbug.com/111 [ Trusty ] foo/bar.html [ Failure ]\n')
         updater = WPTExpectationsUpdater(host)
-        line_dict = {'fake/file/path.html': ['crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]']}
+        line_dict = {
+            'fake/file/path.html':
+            ['crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]']
+        }
         skip_path = host.port_factory.get().path_to_never_fix_tests_file()
         skip_value_origin = host.filesystem.read_text_file(skip_path)
 
@@ -656,21 +802,19 @@
         value = host.filesystem.read_text_file(expectations_path)
 
         self.assertMultiLineEqual(
-            value,
-            ('crbug.com/111 [ Trusty ] foo/bar.html [ Failure ]\n'
-             '\n' + MARKER_COMMENT + '\n'
-             'crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]'))
+            value, ('crbug.com/111 [ Trusty ] foo/bar.html [ Failure ]\n'
+                    '\n' + MARKER_COMMENT + '\n'
+                    'crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]'))
         skip_value = host.filesystem.read_text_file(skip_path)
-        self.assertMultiLineEqual(
-            skip_value,
-            skip_value_origin)
+        self.assertMultiLineEqual(skip_value, skip_value_origin)
 
     def test_write_to_test_expectations_with_marker_and_no_lines(self):
         host = self.mock_host()
-        expectations_path = host.port_factory.get().path_to_generic_test_expectations_file()
+        expectations_path = \
+            host.port_factory.get().path_to_generic_test_expectations_file()
         host.filesystem.write_text_file(
-            expectations_path,
-            MARKER_COMMENT + '\n' + 'crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]\n')
+            expectations_path, MARKER_COMMENT + '\n' +
+            'crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]\n')
         skip_path = host.port_factory.get().path_to_never_fix_tests_file()
         skip_value_origin = host.filesystem.read_text_file(skip_path)
 
@@ -679,61 +823,57 @@
 
         value = host.filesystem.read_text_file(expectations_path)
         self.assertMultiLineEqual(
-            value,
-            MARKER_COMMENT + '\n' + 'crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]\n')
+            value, MARKER_COMMENT + '\n' +
+            'crbug.com/123 [ Trusty ] fake/file/path.html [ Pass ]\n')
         skip_value = host.filesystem.read_text_file(skip_path)
-        self.assertMultiLineEqual(
-            skip_value,
-            skip_value_origin)
+        self.assertMultiLineEqual(skip_value, skip_value_origin)
 
     def test_write_to_test_expectations_with_manual_tests_and_newline(self):
         host = self.mock_host()
-        expectations_path = host.port_factory.get().path_to_generic_test_expectations_file()
+        expectations_path = \
+            host.port_factory.get().path_to_generic_test_expectations_file()
         skip_path = host.port_factory.get().path_to_never_fix_tests_file()
-        line_dict = {'fake/file/path-manual.html': ['[ Trusty ] fake/file/path-manual.html [ Skip ]']}
+        line_dict = {
+            'fake/file/path-manual.html':
+            ['[ Trusty ] fake/file/path-manual.html [ Skip ]']
+        }
+        host.filesystem.write_text_file(expectations_path,
+                                        MARKER_COMMENT + '\n')
         host.filesystem.write_text_file(
-            expectations_path,
-            MARKER_COMMENT + '\n')
-        host.filesystem.write_text_file(
-            skip_path,
-            '[ Trusty ] fake/file/path-manual.html [ Skip ]\n')
+            skip_path, '[ Trusty ] fake/file/path-manual.html [ Skip ]\n')
         updater = WPTExpectationsUpdater(host)
 
         updater.write_to_test_expectations(line_dict)
 
         expectations_value = host.filesystem.read_text_file(expectations_path)
         skip_value = host.filesystem.read_text_file(skip_path)
+        self.assertMultiLineEqual(expectations_value, MARKER_COMMENT + '\n')
         self.assertMultiLineEqual(
-            expectations_value,
-            MARKER_COMMENT + '\n')
-        self.assertMultiLineEqual(
-            skip_value,
-            '[ Trusty ] fake/file/path-manual.html [ Skip ]\n'
+            skip_value, '[ Trusty ] fake/file/path-manual.html [ Skip ]\n'
             '[ Trusty ] fake/file/path-manual.html [ Skip ]\n')
 
     def test_write_to_test_expectations_without_newline(self):
         host = self.mock_host()
-        expectations_path = host.port_factory.get().path_to_generic_test_expectations_file()
+        expectations_path = \
+            host.port_factory.get().path_to_generic_test_expectations_file()
         skip_path = host.port_factory.get().path_to_never_fix_tests_file()
-        line_dict = {'fake/file/path-manual.html': ['[ Trusty ] fake/file/path-manual.html [ Skip ]']}
+        line_dict = {
+            'fake/file/path-manual.html':
+            ['[ Trusty ] fake/file/path-manual.html [ Skip ]']
+        }
+        host.filesystem.write_text_file(expectations_path,
+                                        MARKER_COMMENT + '\n')
         host.filesystem.write_text_file(
-            expectations_path,
-            MARKER_COMMENT + '\n')
-        host.filesystem.write_text_file(
-            skip_path,
-            '[ Trusty ] fake/file/path-manual.html [ Skip ]')
+            skip_path, '[ Trusty ] fake/file/path-manual.html [ Skip ]')
         updater = WPTExpectationsUpdater(host)
 
         updater.write_to_test_expectations(line_dict)
 
         expectations_value = host.filesystem.read_text_file(expectations_path)
         skip_value = host.filesystem.read_text_file(skip_path)
+        self.assertMultiLineEqual(expectations_value, MARKER_COMMENT + '\n')
         self.assertMultiLineEqual(
-            expectations_value,
-            MARKER_COMMENT + '\n')
-        self.assertMultiLineEqual(
-            skip_value,
-            '[ Trusty ] fake/file/path-manual.html [ Skip ]\n'
+            skip_value, '[ Trusty ] fake/file/path-manual.html [ Skip ]\n'
             '[ Trusty ] fake/file/path-manual.html [ Skip ]\n')
 
     def test_is_reference_test_given_testharness_test(self):
@@ -753,9 +893,12 @@
         updater = WPTExpectationsUpdater(host)
         two = {
             'external/wpt/test/path.html': {
-                'one': SimpleTestResult(expected='FAIL', actual='PASS', bug='bug'),
-                'two': SimpleTestResult(expected='FAIL', actual='TIMEOUT', bug='bug'),
-                'three': SimpleTestResult(expected='FAIL', actual='PASS', bug='bug'),
+                'one':
+                SimpleTestResult(expected='FAIL', actual='PASS', bug='bug'),
+                'two':
+                SimpleTestResult(expected='FAIL', actual='TIMEOUT', bug='bug'),
+                'three':
+                SimpleTestResult(expected='FAIL', actual='PASS', bug='bug'),
             }
         }
         tests_to_rebaseline, _ = updater.get_tests_to_rebaseline(two)
@@ -768,9 +911,15 @@
         updater = WPTExpectationsUpdater(host)
         two = {
             'external/wpt/reftest.html': {
-                'one': SimpleTestResult(expected='FAIL', actual='PASS', bug='crbug.com/test'),
-                'two': SimpleTestResult(expected='FAIL', actual='TIMEOUT', bug='crbug.com/test'),
-                'three': SimpleTestResult(expected='FAIL', actual='PASS', bug='crbug.com/test'),
+                'one':
+                SimpleTestResult(
+                    expected='FAIL', actual='PASS', bug='crbug.com/test'),
+                'two':
+                SimpleTestResult(
+                    expected='FAIL', actual='TIMEOUT', bug='crbug.com/test'),
+                'three':
+                SimpleTestResult(
+                    expected='FAIL', actual='PASS', bug='crbug.com/test'),
             }
         }
         tests_to_rebaseline, _ = updater.get_tests_to_rebaseline(two)
@@ -780,21 +929,27 @@
         host = self.mock_host()
         results = {
             'external/wpt/test/path.html': {
-                'one': SimpleTestResult(expected='PASS', actual='TEXT', bug='bug'),
-                'two': SimpleTestResult(expected='PASS', actual='TIMEOUT', bug='bug'),
+                'one':
+                SimpleTestResult(expected='PASS', actual='TEXT', bug='bug'),
+                'two':
+                SimpleTestResult(expected='PASS', actual='TIMEOUT', bug='bug'),
             },
         }
         results_copy = copy.deepcopy(results)
         updater = WPTExpectationsUpdater(host)
-        tests_to_rebaseline, modified_test_results = updater.get_tests_to_rebaseline(results)
+        tests_to_rebaseline, modified_test_results = updater.get_tests_to_rebaseline(
+            results)
         self.assertEqual(tests_to_rebaseline, ['external/wpt/test/path.html'])
         # The record for the builder with a timeout is kept, but not with a text mismatch,
         # since that should be covered by downloading a new baseline.
-        self.assertEqual(modified_test_results, {
-            'external/wpt/test/path.html': {
-                'two': SimpleTestResult(expected='PASS', actual='TIMEOUT', bug='bug'),
-            },
-        })
+        self.assertEqual(
+            modified_test_results, {
+                'external/wpt/test/path.html': {
+                    'two':
+                    SimpleTestResult(
+                        expected='PASS', actual='TIMEOUT', bug='bug'),
+                },
+            })
         # The original dict isn't modified.
         self.assertEqual(results, results_copy)
 
@@ -802,21 +957,27 @@
         host = self.mock_host()
         results = {
             'external/wpt/test/path.html': {
-                'one': SimpleTestResult(expected='SLOW', actual='TEXT', bug='bug'),
-                'two': SimpleTestResult(expected='SLOW', actual='TIMEOUT', bug='bug'),
+                'one':
+                SimpleTestResult(expected='SLOW', actual='TEXT', bug='bug'),
+                'two':
+                SimpleTestResult(expected='SLOW', actual='TIMEOUT', bug='bug'),
             },
         }
         results_copy = copy.deepcopy(results)
         updater = WPTExpectationsUpdater(host)
-        tests_to_rebaseline, modified_test_results = updater.get_tests_to_rebaseline(results)
+        tests_to_rebaseline, modified_test_results = updater.get_tests_to_rebaseline(
+            results)
         self.assertEqual(tests_to_rebaseline, ['external/wpt/test/path.html'])
         # The record for the builder with a timeout is kept, but not with a text mismatch,
         # since that should be covered by downloading a new baseline.
-        self.assertEqual(modified_test_results, {
-            'external/wpt/test/path.html': {
-                'two': SimpleTestResult(expected='SLOW', actual='TIMEOUT', bug='bug'),
-            },
-        })
+        self.assertEqual(
+            modified_test_results, {
+                'external/wpt/test/path.html': {
+                    'two':
+                    SimpleTestResult(
+                        expected='SLOW', actual='TIMEOUT', bug='bug'),
+                },
+            })
         # The original dict isn't modified.
         self.assertEqual(results, results_copy)
 
@@ -824,21 +985,29 @@
         host = self.mock_host()
         results = {
             'external/wpt/test/foo.html': {
-                'bot': SimpleTestResult(expected='PASS', actual='TEXT TEXT', bug='bug'),
+                'bot':
+                SimpleTestResult(
+                    expected='PASS', actual='TEXT TEXT', bug='bug'),
             },
             'external/wpt/test/bar.html': {
-                'bot': SimpleTestResult(expected='PASS', actual='TIMEOUT TIMEOUT', bug='bug'),
+                'bot':
+                SimpleTestResult(
+                    expected='PASS', actual='TIMEOUT TIMEOUT', bug='bug'),
             },
         }
         updater = WPTExpectationsUpdater(host)
-        tests_to_rebaseline, modified_test_results = updater.get_tests_to_rebaseline(results)
+        tests_to_rebaseline, modified_test_results = updater.get_tests_to_rebaseline(
+            results)
         self.assertEqual(tests_to_rebaseline, ['external/wpt/test/foo.html'])
-        self.assertEqual(modified_test_results, {
-            'external/wpt/test/foo.html': {},
-            'external/wpt/test/bar.html': {
-                'bot': SimpleTestResult(expected='PASS', actual='TIMEOUT TIMEOUT', bug='bug'),
-            },
-        })
+        self.assertEqual(
+            modified_test_results, {
+                'external/wpt/test/foo.html': {},
+                'external/wpt/test/bar.html': {
+                    'bot':
+                    SimpleTestResult(
+                        expected='PASS', actual='TIMEOUT TIMEOUT', bug='bug'),
+                },
+            })
 
     def test_run_no_issue_number(self):
         updater = WPTExpectationsUpdater(self.mock_host())
@@ -852,7 +1021,8 @@
         updater.git_cl = MockGitCL(updater.host, {})
         with self.assertRaises(ScriptError) as e:
             updater.run(args=[])
-        self.assertEqual(e.exception.message, 'No try job information was collected.')
+        self.assertEqual(e.exception.message,
+                         'No try job information was collected.')
 
     def test_new_manual_tests_get_skip_expectation(self):
         host = self.mock_host()
@@ -866,15 +1036,18 @@
                     'test-mac-mac10.11',
                     'test-win-win7',
                     'test-win-win10',
-                ): SimpleTestResult(expected='PASS', actual='MISSING', bug='crbug.com/test')
+                ):
+                SimpleTestResult(
+                    expected='PASS', actual='MISSING', bug='crbug.com/test')
             }
         }
         tests_to_rebaseline, _ = updater.get_tests_to_rebaseline(results)
         self.assertEqual(tests_to_rebaseline, [])
         self.assertEqual(
-            updater.create_line_dict(results),
-            {'external/wpt/x-manual.html': ['crbug.com/test external/wpt/x-manual.html [ Skip ]']}
-        )
+            updater.create_line_dict(results), {
+                'external/wpt/x-manual.html':
+                ['crbug.com/test external/wpt/x-manual.html [ Skip ]']
+            })
 
     def test_one_platform_has_no_results(self):
         # In this example, there is a failure that has been observed on
@@ -889,18 +1062,19 @@
                     'test-linux-precise',
                     'test-linux-trusty',
                     'test-mac-mac10.11',
-                ): SimpleTestResult(expected='PASS', actual='TEXT', bug='crbug.com/test')
+                ):
+                SimpleTestResult(
+                    expected='PASS', actual='TEXT', bug='crbug.com/test')
             }
         }
         updater.ports_with_no_results = {'test-mac-mac10.10'}
         self.assertEqual(
-            updater.create_line_dict(results),
-            {'external/wpt/x.html': [
-                'crbug.com/test [ Linux ] external/wpt/x.html [ Failure ]',
-                'crbug.com/test [ Mac ] external/wpt/x.html [ Failure ]',
-            ]
-            }
-        )
+            updater.create_line_dict(results), {
+                'external/wpt/x.html': [
+                    'crbug.com/test [ Linux ] external/wpt/x.html [ Failure ]',
+                    'crbug.com/test [ Mac ] external/wpt/x.html [ Failure ]',
+                ]
+            })
 
     def test_merging_platforms_if_possible(self):
         host = self.mock_host()
@@ -913,15 +1087,16 @@
                     'test-mac-mac10.10',
                     'test-mac-mac10.11',
                     'test-win-win7',
-                ): SimpleTestResult(expected='PASS', actual='TEXT', bug='crbug.com/test')
+                ):
+                SimpleTestResult(
+                    expected='PASS', actual='TEXT', bug='crbug.com/test')
             }
         }
         self.assertEqual(
-            updater.create_line_dict(results),
-            {'external/wpt/x.html': [
-                'crbug.com/test [ Linux ] external/wpt/x.html [ Failure ]',
-                'crbug.com/test [ Mac ] external/wpt/x.html [ Failure ]',
-                'crbug.com/test [ Win7 ] external/wpt/x.html [ Failure ]',
-            ]
-            }
-        )
+            updater.create_line_dict(results), {
+                'external/wpt/x.html': [
+                    'crbug.com/test [ Linux ] external/wpt/x.html [ Failure ]',
+                    'crbug.com/test [ Mac ] external/wpt/x.html [ Failure ]',
+                    'crbug.com/test [ Win7 ] external/wpt/x.html [ Failure ]',
+                ]
+            })
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_github.py b/third_party/blink/tools/blinkpy/w3c/wpt_github.py
index 2e9f210..091971c 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_github.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_github.py
@@ -27,9 +27,14 @@
     GitHubError will be raised if an API call fails.
     """
 
-    def __init__(self, host, user=None, token=None, pr_history_window=MAX_PR_HISTORY_WINDOW):
+    def __init__(self,
+                 host,
+                 user=None,
+                 token=None,
+                 pr_history_window=MAX_PR_HISTORY_WINDOW):
         if pr_history_window > MAX_PR_HISTORY_WINDOW:
-            raise ValueError("GitHub only provides up to %d results per search" % MAX_PR_HISTORY_WINDOW)
+            raise ValueError("GitHub only provides up to %d results per search"
+                             % MAX_PR_HISTORY_WINDOW)
         self.host = host
         self.user = user
         self.token = token
@@ -65,11 +70,7 @@
             headers['Authorization'] = 'Basic {}'.format(self.auth_token())
 
         response = self.host.web.request(
-            method=method,
-            url=API_BASE + path,
-            data=body,
-            headers=headers
-        )
+            method=method, url=API_BASE + path, data=body, headers=headers)
         return JSONResponse(response)
 
     @staticmethod
@@ -129,7 +130,8 @@
                 _log.error('Please check if branch already exists; If so, '
                            'please remove the PR description and '
                            'delete the branch')
-            raise GitHubError(201, e.code, 'create PR branch %s' % remote_branch_name)
+            raise GitHubError(201, e.code,
+                              'create PR branch %s' % remote_branch_name)
 
         if response.status_code != 201:
             raise GitHubError(201, response.status_code, 'create PR')
@@ -141,11 +143,8 @@
 
         API doc: https://developer.github.com/v3/pulls/#update-a-pull-request
         """
-        path = '/repos/{}/{}/pulls/{}'.format(
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            pr_number
-        )
+        path = '/repos/{}/{}/pulls/{}'.format(WPT_GH_ORG, WPT_GH_REPO_NAME,
+                                              pr_number)
         payload = {}
         if desc_title:
             payload['title'] = desc_title
@@ -156,23 +155,22 @@
         response = self.request(path, method='PATCH', body=payload)
 
         if response.status_code != 200:
-            raise GitHubError(200, response.status_code, 'update PR %d' % pr_number)
+            raise GitHubError(200, response.status_code,
+                              'update PR %d' % pr_number)
 
     def add_label(self, number, label):
         """Adds a label to a GitHub issue (or PR).
 
         API doc: https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue
         """
-        path = '/repos/%s/%s/issues/%d/labels' % (
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            number
-        )
+        path = '/repos/%s/%s/issues/%d/labels' % (WPT_GH_ORG, WPT_GH_REPO_NAME,
+                                                  number)
         body = [label]
         response = self.request(path, method='POST', body=body)
 
         if response.status_code != 200:
-            raise GitHubError(200, response.status_code, 'add label %s to issue %d' % (label, number))
+            raise GitHubError(200, response.status_code,
+                              'add label %s to issue %d' % (label, number))
 
     def remove_label(self, number, label):
         """Removes a label from a GitHub issue (or PR).
@@ -190,23 +188,24 @@
         # The GitHub API documentation claims that this endpoint returns a 204
         # on success. However in reality it returns a 200.
         if response.status_code not in (200, 204):
-            raise GitHubError((200, 204), response.status_code, 'remove label %s from issue %d' % (label, number))
+            raise GitHubError(
+                (200, 204), response.status_code,
+                'remove label %s from issue %d' % (label, number))
 
     def add_comment(self, number, comment_body):
         """Add a comment for an issue (or PR).
 
         API doc: https://developer.github.com/v3/issues/comments/#create-a-comment
         """
-        path = '/repos/%s/%s/issues/%d/comments' % (
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            number
-        )
+        path = '/repos/%s/%s/issues/%d/comments' % (WPT_GH_ORG,
+                                                    WPT_GH_REPO_NAME, number)
         body = {'body': comment_body}
         response = self.request(path, method='POST', body=body)
 
         if response.status_code != 201:
-            raise GitHubError(201, response.status_code, 'add comment %s to issue %d' % (comment_body, number))
+            raise GitHubError(
+                201, response.status_code,
+                'add comment %s to issue %d' % (comment_body, number))
 
     def make_pr_from_item(self, item):
         labels = [label['name'] for label in item['labels']]
@@ -232,14 +231,9 @@
             '?q=repo:{}/{}%20type:pr+is:open%20label:{}%20status:failure%20updated:>{}'
             '&sort=updated'
             '&page=1'
-            '&per_page={}'
-        ).format(
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            EXPORT_PR_LABEL,
-            one_month_ago.isoformat(),
-            MAX_PER_PAGE
-        )
+            '&per_page={}').format(WPT_GH_ORG,
+                                   WPT_GH_REPO_NAME, EXPORT_PR_LABEL,
+                                   one_month_ago.isoformat(), MAX_PER_PAGE)
 
         failing_prs = []
         while path is not None:
@@ -247,9 +241,13 @@
             if response.status_code == 200:
                 if response.data['incomplete_results']:
                     raise GitHubError('complete results', 'incomplete results',
-                                      'fetch failing open chromium exports', path)
+                                      'fetch failing open chromium exports',
+                                      path)
 
-                prs = [self.make_pr_from_item(item) for item in response.data['items']]
+                prs = [
+                    self.make_pr_from_item(item)
+                    for item in response.data['items']
+                ]
                 failing_prs += prs
             else:
                 raise GitHubError(200, response.status_code,
@@ -274,29 +272,29 @@
         Returns:
             A list of PullRequest namedtuples.
         """
-        path = (
-            '/search/issues'
-            '?q=repo:{}/{}%20type:pr%20label:{}'
-            '&sort=updated'
-            '&page=1'
-            '&per_page={}'
-        ).format(
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            EXPORT_PR_LABEL,
-            min(MAX_PER_PAGE, self._pr_history_window)
-        )
+        path = ('/search/issues'
+                '?q=repo:{}/{}%20type:pr%20label:{}'
+                '&sort=updated'
+                '&page=1'
+                '&per_page={}').format(
+                    WPT_GH_ORG, WPT_GH_REPO_NAME, EXPORT_PR_LABEL,
+                    min(MAX_PER_PAGE, self._pr_history_window))
         all_prs = []
         while path is not None and len(all_prs) < self._pr_history_window:
             response = self.request(path, method='GET')
             if response.status_code == 200:
                 if response.data['incomplete_results']:
-                    raise GitHubError('complete results', 'incomplete results', 'fetch all pull requests', path)
+                    raise GitHubError('complete results', 'incomplete results',
+                                      'fetch all pull requests', path)
 
-                prs = [self.make_pr_from_item(item) for item in response.data['items']]
+                prs = [
+                    self.make_pr_from_item(item)
+                    for item in response.data['items']
+                ]
                 all_prs += prs[:self._pr_history_window - len(all_prs)]
             else:
-                raise GitHubError(200, response.status_code, 'fetch all pull requests', path)
+                raise GitHubError(200, response.status_code,
+                                  'fetch all pull requests', path)
             path = self.extract_link_next(response.getheader('Link'))
 
         # There are way more than 1000 exported PRs on GitHub, so we should
@@ -318,14 +316,12 @@
             The list of check statuses of the PR.
         """
         path = '/repos/{}/{}/commits/{}/status'.format(
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            branch_name
-        )
+            WPT_GH_ORG, WPT_GH_REPO_NAME, branch_name)
         response = self.request(path, method='GET')
 
         if response.status_code != 200:
-            raise GitHubError(200, response.status_code, 'get the statuses of PR %d' % branch_name)
+            raise GitHubError(200, response.status_code,
+                              'get the statuses of PR %d' % branch_name)
 
         return response.data['statuses']
 
@@ -337,15 +333,13 @@
         Returns:
             The remote branch name.
         """
-        path = '/repos/{}/{}/pulls/{}'.format(
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            pr_number
-        )
+        path = '/repos/{}/{}/pulls/{}'.format(WPT_GH_ORG, WPT_GH_REPO_NAME,
+                                              pr_number)
         response = self.request(path, method='GET')
 
         if response.status_code != 200:
-            raise GitHubError(200, response.status_code, 'get the branch of PR %d' % pr_number)
+            raise GitHubError(200, response.status_code,
+                              'get the branch of PR %d' % pr_number)
 
         return response.data['head']['ref']
 
@@ -357,17 +351,15 @@
         Returns:
             True if merged, False if not.
         """
-        path = '/repos/%s/%s/pulls/%d/merge' % (
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            pr_number
-        )
+        path = '/repos/%s/%s/pulls/%d/merge' % (WPT_GH_ORG, WPT_GH_REPO_NAME,
+                                                pr_number)
         try:
             response = self.request(path, method='GET')
             if response.status_code == 204:
                 return True
             else:
-                raise GitHubError(204, response.status_code, 'check if PR %d is merged' % pr_number)
+                raise GitHubError(204, response.status_code,
+                                  'check if PR %d is merged' % pr_number)
         except urllib2.HTTPError as e:
             if e.code == 404:
                 return False
@@ -382,11 +374,8 @@
 
         API doc: https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button
         """
-        path = '/repos/%s/%s/pulls/%d/merge' % (
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            pr_number
-        )
+        path = '/repos/%s/%s/pulls/%d/merge' % (WPT_GH_ORG, WPT_GH_REPO_NAME,
+                                                pr_number)
         body = {
             'merge_method': 'rebase',
         }
@@ -400,7 +389,8 @@
                 raise
 
         if response.status_code != 200:
-            raise GitHubError(200, response.status_code, 'merge PR %d' % pr_number)
+            raise GitHubError(200, response.status_code,
+                              'merge PR %d' % pr_number)
 
     def delete_remote_branch(self, remote_branch_name):
         """Deletes a remote branch.
@@ -408,14 +398,12 @@
         API doc: https://developer.github.com/v3/git/refs/#delete-a-reference
         """
         path = '/repos/%s/%s/git/refs/heads/%s' % (
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            remote_branch_name
-        )
+            WPT_GH_ORG, WPT_GH_REPO_NAME, remote_branch_name)
         response = self.request(path, method='DELETE')
 
         if response.status_code != 204:
-            raise GitHubError(204, response.status_code, 'delete remote branch %s' % remote_branch_name)
+            raise GitHubError(204, response.status_code,
+                              'delete remote branch %s' % remote_branch_name)
 
     def pr_for_chromium_commit(self, chromium_commit):
         """Returns a PR corresponding to the given ChromiumCommit, or None."""
@@ -427,7 +415,8 @@
         for pull_request in self.all_pull_requests():
             # Note: Search all 'Change-Id's so that we can manually put multiple
             # CLs in one PR. (The exporter always creates one PR for each CL.)
-            change_ids = self.extract_metadata('Change-Id: ', pull_request.body, all_matches=True)
+            change_ids = self.extract_metadata(
+                'Change-Id: ', pull_request.body, all_matches=True)
             if target_change_id in change_ids:
                 return pull_request
         return None
@@ -474,8 +463,7 @@
 
     def __init__(self, expected, received, action, extra_data=None):
         message = 'Expected {}, but received {} from GitHub when attempting to {}'.format(
-            expected, received, action
-        )
+            expected, received, action)
         if extra_data:
             message += '\n' + str(extra_data)
         super(GitHubError, self).__init__(message)
@@ -492,4 +480,5 @@
         super(MergeError, self).__init__(200, 405, 'merge PR %d' % pr_number)
 
 
-PullRequest = namedtuple('PullRequest', ['title', 'number', 'body', 'state', 'labels'])
+PullRequest = namedtuple('PullRequest',
+                         ['title', 'number', 'body', 'state', 'labels'])
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_github_mock.py b/third_party/blink/tools/blinkpy/w3c/wpt_github_mock.py
index 4b8e1bcf..afe7893 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_github_mock.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_github_mock.py
@@ -10,7 +10,11 @@
     # Some unused arguments may be included to match the real class's API.
     # pylint: disable=unused-argument
 
-    def __init__(self, pull_requests, unsuccessful_merge_index=-1, create_pr_fail_index=-1, merged_index=-1):
+    def __init__(self,
+                 pull_requests,
+                 unsuccessful_merge_index=-1,
+                 create_pr_fail_index=-1,
+                 merged_index=-1):
         """Initializes a mock WPTGitHub.
 
         Args:
@@ -60,8 +64,8 @@
         self.calls.append('create_pr')
 
         if self.create_pr_fail_index != self.create_pr_index:
-            self.pull_requests_created.append(
-                (remote_branch_name, desc_title, body))
+            self.pull_requests_created.append((remote_branch_name, desc_title,
+                                               body))
 
         self.create_pr_index += 1
         return 5678
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_github_unittest.py b/third_party/blink/tools/blinkpy/w3c/wpt_github_unittest.py
index e91aff6..ed73364 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_github_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_github_unittest.py
@@ -13,18 +13,20 @@
 
 
 class WPTGitHubTest(unittest.TestCase):
-
     def generate_pr_item(self, pr_number, state='closed'):
         return {
             'title': 'Foobar',
             'number': pr_number,
             'body': 'description',
             'state': state,
-            'labels': [{'name': EXPORT_PR_LABEL}]
+            'labels': [{
+                'name': EXPORT_PR_LABEL
+            }]
         }
 
     def setUp(self):
-        self.wpt_github = WPTGitHub(MockHost(), user='rutabaga', token='decafbad')
+        self.wpt_github = WPTGitHub(
+            MockHost(), user='rutabaga', token='decafbad')
 
     def test_init(self):
         self.assertEqual(self.wpt_github.user, 'rutabaga')
@@ -32,160 +34,300 @@
 
     def test_constructor_throws_on_pr_history_window_too_large(self):
         with self.assertRaises(ValueError):
-            self.wpt_github = WPTGitHub(MockHost(), user='rutabaga', token='decafbad',
-                                        pr_history_window=MAX_PR_HISTORY_WINDOW + 1)
+            self.wpt_github = WPTGitHub(
+                MockHost(),
+                user='rutabaga',
+                token='decafbad',
+                pr_history_window=MAX_PR_HISTORY_WINDOW + 1)
 
     def test_auth_token(self):
-        self.assertEqual(
-            self.wpt_github.auth_token(),
-            base64.encodestring('rutabaga:decafbad').strip())
+        self.assertEqual(self.wpt_github.auth_token(),
+                         base64.encodestring('rutabaga:decafbad').strip())
 
     def test_extract_link_next(self):
-        link_header = ('<https://api.github.com/user/repos?page=1&per_page=100>; rel="first", '
-                       '<https://api.github.com/user/repos?page=2&per_page=100>; rel="prev", '
-                       '<https://api.github.com/user/repos?page=4&per_page=100>; rel="next", '
-                       '<https://api.github.com/user/repos?page=50&per_page=100>; rel="last"')
-        self.assertEqual(self.wpt_github.extract_link_next(link_header), '/user/repos?page=4&per_page=100')
+        link_header = (
+            '<https://api.github.com/user/repos?page=1&per_page=100>; rel="first", '
+            '<https://api.github.com/user/repos?page=2&per_page=100>; rel="prev", '
+            '<https://api.github.com/user/repos?page=4&per_page=100>; rel="next", '
+            '<https://api.github.com/user/repos?page=50&per_page=100>; rel="last"'
+        )
+        self.assertEqual(
+            self.wpt_github.extract_link_next(link_header),
+            '/user/repos?page=4&per_page=100')
 
     def test_extract_link_next_not_found(self):
         self.assertIsNone(self.wpt_github.extract_link_next(''))
 
     def test_recent_failing_chromium_exports_single_page(self):
-        self.wpt_github = WPTGitHub(MockHost(), user='rutabaga', token='decafbad', pr_history_window=1)
+        self.wpt_github = WPTGitHub(
+            MockHost(), user='rutabaga', token='decafbad', pr_history_window=1)
         self.wpt_github.host.web.responses = [
-            {'status_code': 200,
-             'headers': {'Link': ''},
-             'body': json.dumps({'incomplete_results': False, 'items': [self.generate_pr_item(1)]})},
+            {
+                'status_code':
+                200,
+                'headers': {
+                    'Link': ''
+                },
+                'body':
+                json.dumps({
+                    'incomplete_results': False,
+                    'items': [self.generate_pr_item(1)]
+                })
+            },
         ]
 
-        self.assertEqual(len(self.wpt_github.recent_failing_chromium_exports()), 1)
+        self.assertEqual(
+            len(self.wpt_github.recent_failing_chromium_exports()), 1)
 
     def test_recent_failing_chromium_exports_all_pages(self):
-        self.wpt_github = WPTGitHub(MockHost(), user='rutabaga', token='decafbad', pr_history_window=1)
+        self.wpt_github = WPTGitHub(
+            MockHost(), user='rutabaga', token='decafbad', pr_history_window=1)
         self.wpt_github.host.web.responses = [
-            {'status_code': 200,
-             'headers': {'Link': '<https://api.github.com/resources?page=2>; rel="next"'},
-             'body': json.dumps({'incomplete_results': False, 'items': [self.generate_pr_item(1)]})},
-            {'status_code': 200,
-             'headers': {'Link': ''},
-             'body': json.dumps({'incomplete_results': False, 'items': [self.generate_pr_item(2)]})},
+            {
+                'status_code':
+                200,
+                'headers': {
+                    'Link':
+                    '<https://api.github.com/resources?page=2>; rel="next"'
+                },
+                'body':
+                json.dumps({
+                    'incomplete_results': False,
+                    'items': [self.generate_pr_item(1)]
+                })
+            },
+            {
+                'status_code':
+                200,
+                'headers': {
+                    'Link': ''
+                },
+                'body':
+                json.dumps({
+                    'incomplete_results': False,
+                    'items': [self.generate_pr_item(2)]
+                })
+            },
         ]
-        self.assertEqual(len(self.wpt_github.recent_failing_chromium_exports()), 2)
+        self.assertEqual(
+            len(self.wpt_github.recent_failing_chromium_exports()), 2)
 
     def test_recent_failing_chromium_exports_throws_github_error(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 204},
+            {
+                'status_code': 204
+            },
         ]
         with self.assertRaises(GitHubError):
             self.wpt_github.recent_failing_chromium_exports()
 
     def test_all_pull_requests_single_page(self):
-        self.wpt_github = WPTGitHub(MockHost(), user='rutabaga', token='decafbad', pr_history_window=1)
+        self.wpt_github = WPTGitHub(
+            MockHost(), user='rutabaga', token='decafbad', pr_history_window=1)
         self.wpt_github.host.web.responses = [
-            {'status_code': 200,
-             'headers': {'Link': ''},
-             'body': json.dumps({'incomplete_results': False, 'items': [self.generate_pr_item(1)]})},
+            {
+                'status_code':
+                200,
+                'headers': {
+                    'Link': ''
+                },
+                'body':
+                json.dumps({
+                    'incomplete_results': False,
+                    'items': [self.generate_pr_item(1)]
+                })
+            },
         ]
         self.assertEqual(len(self.wpt_github.all_pull_requests()), 1)
 
     def test_all_pull_requests_all_pages(self):
-        self.wpt_github = WPTGitHub(MockHost(), user='rutabaga', token='decafbad', pr_history_window=2)
+        self.wpt_github = WPTGitHub(
+            MockHost(), user='rutabaga', token='decafbad', pr_history_window=2)
         self.wpt_github.host.web.responses = [
-            {'status_code': 200,
-             'headers': {'Link': '<https://api.github.com/resources?page=2>; rel="next"'},
-             'body': json.dumps({'incomplete_results': False, 'items': [self.generate_pr_item(1)]})},
-            {'status_code': 200,
-             'headers': {'Link': ''},
-             'body': json.dumps({'incomplete_results': False, 'items': [self.generate_pr_item(2)]})},
+            {
+                'status_code':
+                200,
+                'headers': {
+                    'Link':
+                    '<https://api.github.com/resources?page=2>; rel="next"'
+                },
+                'body':
+                json.dumps({
+                    'incomplete_results': False,
+                    'items': [self.generate_pr_item(1)]
+                })
+            },
+            {
+                'status_code':
+                200,
+                'headers': {
+                    'Link': ''
+                },
+                'body':
+                json.dumps({
+                    'incomplete_results': False,
+                    'items': [self.generate_pr_item(2)]
+                })
+            },
         ]
         self.assertEqual(len(self.wpt_github.all_pull_requests()), 2)
 
     def test_all_pull_requests_reaches_pr_history_window(self):
-        self.wpt_github = WPTGitHub(MockHost(), user='rutabaga', token='decafbad', pr_history_window=2)
+        self.wpt_github = WPTGitHub(
+            MockHost(), user='rutabaga', token='decafbad', pr_history_window=2)
         self.wpt_github.host.web.responses = [
-            {'status_code': 200,
-             'headers': {'Link': '<https://api.github.com/resources?page=2>; rel="next"'},
-             'body': json.dumps({'incomplete_results': False, 'items': [self.generate_pr_item(1)]})},
-            {'status_code': 200,
-             'headers': {'Link': ''},
-             'body': json.dumps({'incomplete_results': False, 'items': [self.generate_pr_item(2), self.generate_pr_item(3)]})},
+            {
+                'status_code':
+                200,
+                'headers': {
+                    'Link':
+                    '<https://api.github.com/resources?page=2>; rel="next"'
+                },
+                'body':
+                json.dumps({
+                    'incomplete_results': False,
+                    'items': [self.generate_pr_item(1)]
+                })
+            },
+            {
+                'status_code':
+                200,
+                'headers': {
+                    'Link': ''
+                },
+                'body':
+                json.dumps({
+                    'incomplete_results':
+                    False,
+                    'items':
+                    [self.generate_pr_item(2),
+                     self.generate_pr_item(3)]
+                })
+            },
         ]
         self.assertEqual(len(self.wpt_github.all_pull_requests()), 2)
 
     def test_all_pull_requests_throws_github_error_on_non_200(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 204},
+            {
+                'status_code': 204
+            },
         ]
         with self.assertRaises(GitHubError):
             self.wpt_github.all_pull_requests()
 
     def test_all_pull_requests_throws_github_error_when_incomplete(self):
-        self.wpt_github = WPTGitHub(MockHost(), user='rutabaga', token='decafbad', pr_history_window=1)
+        self.wpt_github = WPTGitHub(
+            MockHost(), user='rutabaga', token='decafbad', pr_history_window=1)
         self.wpt_github.host.web.responses = [
-            {'status_code': 200,
-             'body': json.dumps({'incomplete_results': True, 'items': [self.generate_pr_item(1)]})},
+            {
+                'status_code':
+                200,
+                'body':
+                json.dumps({
+                    'incomplete_results': True,
+                    'items': [self.generate_pr_item(1)]
+                })
+            },
         ]
         with self.assertRaises(GitHubError):
             self.wpt_github.all_pull_requests()
 
     def test_all_pull_requests_throws_github_error_when_too_few_prs(self):
-        self.wpt_github = WPTGitHub(MockHost(), user='rutabaga', token='decafbad', pr_history_window=2)
+        self.wpt_github = WPTGitHub(
+            MockHost(), user='rutabaga', token='decafbad', pr_history_window=2)
         self.wpt_github.host.web.responses = [
-            {'status_code': 200,
-             'body': json.dumps({'incomplete_results': False, 'items': [self.generate_pr_item(1)]})},
+            {
+                'status_code':
+                200,
+                'body':
+                json.dumps({
+                    'incomplete_results': False,
+                    'items': [self.generate_pr_item(1)]
+                })
+            },
         ]
         with self.assertRaises(GitHubError):
             self.wpt_github.all_pull_requests()
 
     def test_create_pr_success(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 201,
-             'body': json.dumps({'number': 1234})},
+            {
+                'status_code': 201,
+                'body': json.dumps({
+                    'number': 1234
+                })
+            },
         ]
-        self.assertEqual(self.wpt_github.create_pr('branch', 'title', 'body'), 1234)
+        self.assertEqual(
+            self.wpt_github.create_pr('branch', 'title', 'body'), 1234)
 
     def test_create_pr_throws_github_error_on_non_201(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 200},
+            {
+                'status_code': 200
+            },
         ]
         with self.assertRaises(GitHubError):
             self.wpt_github.create_pr('branch', 'title', 'body')
 
     def test_get_branch_statuses(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 200,
-             'body': json.dumps({'statuses': [{'description': 'abc'}]})},
+            {
+                'status_code': 200,
+                'body': json.dumps({
+                    'statuses': [{
+                        'description': 'abc'
+                    }]
+                })
+            },
         ]
-        self.assertEqual(self.wpt_github.get_branch_statuses('1234')[0]['description'], 'abc')
+        self.assertEqual(
+            self.wpt_github.get_branch_statuses('1234')[0]['description'],
+            'abc')
 
     def test_get_pr_branch(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 200,
-             'body': json.dumps({'head': {'ref': 'fake_branch'}})},
+            {
+                'status_code': 200,
+                'body': json.dumps({
+                    'head': {
+                        'ref': 'fake_branch'
+                    }
+                })
+            },
         ]
         self.assertEqual(self.wpt_github.get_pr_branch(1234), 'fake_branch')
 
     def test_is_pr_merged_receives_204(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 204},
+            {
+                'status_code': 204
+            },
         ]
         self.assertTrue(self.wpt_github.is_pr_merged(1234))
 
     def test_is_pr_merged_receives_404(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 404},
+            {
+                'status_code': 404
+            },
         ]
         self.assertFalse(self.wpt_github.is_pr_merged(1234))
 
     def test_merge_pr_success(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 200},
+            {
+                'status_code': 200
+            },
         ]
         self.wpt_github.merge_pr(1234)
 
     def test_merge_pr_throws_merge_error_on_405(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 405},
+            {
+                'status_code': 405
+            },
         ]
 
         with self.assertRaises(MergeError):
@@ -193,7 +335,9 @@
 
     def test_remove_label_throws_github_error_on_non_200_or_204(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 201},
+            {
+                'status_code': 201
+            },
         ]
 
         with self.assertRaises(GitHubError):
@@ -201,7 +345,9 @@
 
     def test_delete_remote_branch_throws_github_error_on_non_204(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 200},
+            {
+                'status_code': 200
+            },
         ]
 
         with self.assertRaises(GitHubError):
@@ -209,7 +355,9 @@
 
     def test_add_comment_throws_github_error_on_non_201(self):
         self.wpt_github.host.web.responses = [
-            {'status_code': 200},
+            {
+                'status_code': 200
+            },
         ]
 
         with self.assertRaises(GitHubError):
@@ -218,10 +366,11 @@
     def test_pr_for_chromium_commit_change_id_only(self):
         self.wpt_github.all_pull_requests = lambda: [
             PullRequest('PR1', 1, 'body\nChange-Id: I00c0ffee', 'open', []),
-            PullRequest('PR2', 2, 'body\nChange-Id: I00decade', 'open', []),
-        ]
+            PullRequest('PR2', 2, 'body\nChange-Id: I00decade', 'open', []), ]
         chromium_commit = MockChromiumCommit(
-            MockHost(), change_id='I00decade', position='refs/heads/master@{#10}')
+            MockHost(),
+            change_id='I00decade',
+            position='refs/heads/master@{#10}')
         pull_request = self.wpt_github.pr_for_chromium_commit(chromium_commit)
         self.assertEqual(pull_request.number, 2)
 
@@ -231,7 +380,9 @@
             PullRequest('PR2', 2, 'body\nChange-Id: I00decade\nCr-Commit-Position: refs/heads/master@{#33}', 'open', []),
         ]
         chromium_commit = MockChromiumCommit(
-            MockHost(), change_id='I00decade', position='refs/heads/master@{#10}')
+            MockHost(),
+            change_id='I00decade',
+            position='refs/heads/master@{#10}')
         pull_request = self.wpt_github.pr_for_chromium_commit(chromium_commit)
         self.assertEqual(pull_request.number, 2)
 
@@ -241,11 +392,15 @@
         ]
 
         chromium_commit = MockChromiumCommit(
-            MockHost(), change_id='I00c0ffee', position='refs/heads/master@{#10}')
+            MockHost(),
+            change_id='I00c0ffee',
+            position='refs/heads/master@{#10}')
         pull_request = self.wpt_github.pr_for_chromium_commit(chromium_commit)
         self.assertEqual(pull_request.number, 1)
 
         chromium_commit = MockChromiumCommit(
-            MockHost(), change_id='I00decade', position='refs/heads/master@{#33}')
+            MockHost(),
+            change_id='I00decade',
+            position='refs/heads/master@{#33}')
         pull_request = self.wpt_github.pr_for_chromium_commit(chromium_commit)
         self.assertEqual(pull_request.number, 1)
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_manifest.py b/third_party/blink/tools/blinkpy/w3c/wpt_manifest.py
index e1cdaabb..8d60ac8 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_manifest.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_manifest.py
@@ -1,7 +1,6 @@
 # Copyright 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-
 """WPTManifest is responsible for handling MANIFEST.json.
 
 The MANIFEST.json file contains metadata about files in web-platform-tests,
@@ -228,29 +227,37 @@
 
         # TODO(crbug.com/853815): perhaps also cache the manifest for wpt_internal.
         if 'external' in path:
-            base_manifest_path = fs.join(port.web_tests_dir(), 'external', BASE_MANIFEST_NAME)
+            base_manifest_path = fs.join(port.web_tests_dir(), 'external',
+                                         BASE_MANIFEST_NAME)
             if fs.exists(base_manifest_path):
                 fs.copyfile(base_manifest_path, manifest_path)
             else:
-                _log.error('Manifest base not found at "%s".', base_manifest_path)
+                _log.error('Manifest base not found at "%s".',
+                           base_manifest_path)
 
         WPTManifest.generate_manifest(port.host, wpt_path)
 
         if fs.isfile(manifest_path):
             _log.debug('Manifest generation completed.')
         else:
-            _log.error('Manifest generation failed; creating an empty MANIFEST.json...')
+            _log.error(
+                'Manifest generation failed; creating an empty MANIFEST.json...'
+            )
             fs.write_text_file(manifest_path, '{}')
 
     @staticmethod
     def generate_manifest(host, dest_path):
         """Generates MANIFEST.json on the specified directory."""
         finder = PathFinder(host.filesystem)
-        wpt_exec_path = finder.path_from_blink_tools('blinkpy', 'third_party', 'wpt', 'wpt', 'wpt')
-        cmd = ['python', wpt_exec_path, 'manifest', '--no-download', '--tests-root', dest_path]
+        wpt_exec_path = finder.path_from_blink_tools('blinkpy', 'third_party',
+                                                     'wpt', 'wpt', 'wpt')
+        cmd = [
+            'python', wpt_exec_path, 'manifest', '--no-download',
+            '--tests-root', dest_path
+        ]
 
         # ScriptError will be raised if the command fails.
         host.executive.run_command(
             cmd,
-            return_stderr=True  # This will also include stderr in the exception message.
-        )
+            # This will also include stderr in the exception message.
+            return_stderr=True)
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_manifest_unittest.py b/third_party/blink/tools/blinkpy/w3c/wpt_manifest_unittest.py
index 4aa5fd58..38e15a4b 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_manifest_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_manifest_unittest.py
@@ -12,7 +12,6 @@
 
 
 class WPTManifestUnitTest(unittest.TestCase):
-
     def test_ensure_manifest_copies_new_manifest(self):
         host = MockHost()
         port = TestPort(host)
@@ -21,47 +20,40 @@
         self.assertFalse(host.filesystem.exists(manifest_path))
         WPTManifest.ensure_manifest(port)
         self.assertTrue(host.filesystem.exists(manifest_path))
-        self.assertEqual(host.filesystem.written_files, {manifest_path: '{"manifest": "base"}'})
+        self.assertEqual(host.filesystem.written_files,
+                         {manifest_path: '{"manifest": "base"}'})
 
-        self.assertEqual(
-            host.executive.calls,
-            [
-                [
-                    'python',
-                    '/mock-checkout/third_party/blink/tools/blinkpy/third_party/wpt/wpt/wpt',
-                    'manifest',
-                    '--no-download',
-                    '--tests-root',
-                    WEB_TEST_DIR + '/external/wpt',
-                ]
-            ]
-        )
+        self.assertEqual(host.executive.calls, [[
+            'python',
+            '/mock-checkout/third_party/blink/tools/blinkpy/third_party/wpt/wpt/wpt',
+            'manifest',
+            '--no-download',
+            '--tests-root',
+            WEB_TEST_DIR + '/external/wpt',
+        ]])
 
     def test_ensure_manifest_updates_manifest_if_it_exists(self):
         host = MockHost()
         port = TestPort(host)
         manifest_path = WEB_TEST_DIR + '/external/wpt/MANIFEST.json'
 
-        host.filesystem.write_text_file(manifest_path, '{"manifest": "NOT base"}')
+        host.filesystem.write_text_file(manifest_path,
+                                        '{"manifest": "NOT base"}')
 
         self.assertTrue(host.filesystem.exists(manifest_path))
         WPTManifest.ensure_manifest(port)
         self.assertTrue(host.filesystem.exists(manifest_path))
-        self.assertEqual(host.filesystem.written_files, {manifest_path: '{"manifest": "base"}'})
+        self.assertEqual(host.filesystem.written_files,
+                         {manifest_path: '{"manifest": "base"}'})
 
-        self.assertEqual(
-            host.executive.calls,
-            [
-                [
-                    'python',
-                    '/mock-checkout/third_party/blink/tools/blinkpy/third_party/wpt/wpt/wpt',
-                    'manifest',
-                    '--no-download',
-                    '--tests-root',
-                    WEB_TEST_DIR + '/external/wpt',
-                ]
-            ]
-        )
+        self.assertEqual(host.executive.calls, [[
+            'python',
+            '/mock-checkout/third_party/blink/tools/blinkpy/third_party/wpt/wpt/wpt',
+            'manifest',
+            '--no-download',
+            '--tests-root',
+            WEB_TEST_DIR + '/external/wpt',
+        ]])
 
     def test_ensure_manifest_raises_exception(self):
         host = MockHost()
@@ -75,19 +67,14 @@
         host = MockHost()
         port = TestPort(host)
         WPTManifest.ensure_manifest(port, 'wpt_internal')
-        self.assertEqual(
-            host.executive.calls,
-            [
-                [
-                    'python',
-                    '/mock-checkout/third_party/blink/tools/blinkpy/third_party/wpt/wpt/wpt',
-                    'manifest',
-                    '--no-download',
-                    '--tests-root',
-                    WEB_TEST_DIR + '/wpt_internal',
-                ]
-            ]
-        )
+        self.assertEqual(host.executive.calls, [[
+            'python',
+            '/mock-checkout/third_party/blink/tools/blinkpy/third_party/wpt/wpt/wpt',
+            'manifest',
+            '--no-download',
+            '--tests-root',
+            WEB_TEST_DIR + '/wpt_internal',
+        ]])
 
     def test_does_not_throw_when_missing_some_test_types(self):
         manifest_json = '''
@@ -143,14 +130,17 @@
     }
 }       '''
         manifest = WPTManifest(manifest_json)
-        self.assertEqual(manifest.all_url_items(),
-                         {u'/test.any.html': [u'/test.any.html', {}],
-                          u'/test.any.worker.html': [u'/test.any.worker.html', {}]})
+        self.assertEqual(
+            manifest.all_url_items(), {
+                u'/test.any.html': [u'/test.any.html', {}],
+                u'/test.any.worker.html': [u'/test.any.worker.html', {}]
+            })
         # Ensure that we can get back to `test.any.js` from both of the tests.
-        self.assertEqual(manifest.file_path_for_test_url('/test.any.html'),
-                         'test.any.js')
-        self.assertEqual(manifest.file_path_for_test_url('/test.any.worker.html'),
-                         'test.any.js')
+        self.assertEqual(
+            manifest.file_path_for_test_url('/test.any.html'), 'test.any.js')
+        self.assertEqual(
+            manifest.file_path_for_test_url('/test.any.worker.html'),
+            'test.any.js')
 
     def test_crash_tests(self):
         # Test that the manifest recognizes crash tests and that is_crash_test
@@ -174,7 +164,11 @@
 }
         '''
         manifest = WPTManifest(manifest_json)
-        self.assertEqual(manifest.all_url_items(), {u'test.html': [u'test.html', {}], u'test-crash.html': [u'test-crash.html', {}]})
+        self.assertEqual(
+            manifest.all_url_items(), {
+                u'test.html': [u'test.html', {}],
+                u'test-crash.html': [u'test-crash.html', {}]
+            })
 
         self.assertTrue(manifest.is_crash_test(u'test-crash.html'))
         self.assertFalse(manifest.is_crash_test(u'test.html'))
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder.py b/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder.py
index 30d2469..59a7512 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder.py
@@ -56,9 +56,14 @@
     def run(self, args=None):
         """Main entry point to parse flags and execute the script."""
         parser = argparse.ArgumentParser(description=__doc__)
-        parser.add_argument("--metadata-output-dir",
-                            help="The directory to output the metadata files into.")
-        parser.add_argument('-v', '--verbose', action='store_true', help='More verbose logging.')
+        parser.add_argument(
+            "--metadata-output-dir",
+            help="The directory to output the metadata files into.")
+        parser.add_argument(
+            '-v',
+            '--verbose',
+            action='store_true',
+            help='More verbose logging.')
         args = parser.parse_args(args)
 
         log_level = logging.DEBUG if args.verbose else logging.INFO
@@ -110,7 +115,8 @@
         tests_for_metadata = self.get_tests_needing_metadata()
         _log.info("Found %d tests requiring metadata", len(tests_for_metadata))
         for test_name, test_status_bitmap in tests_for_metadata.items():
-            filename, file_contents = self.get_metadata_filename_and_contents(test_name, test_status_bitmap)
+            filename, file_contents = self.get_metadata_filename_and_contents(
+                test_name, test_status_bitmap)
             if not filename or not file_contents:
                 continue
             self._write_to_file(filename, file_contents)
@@ -147,7 +153,8 @@
             # First check for expectations. If a test is skipped then we do not
             # look for more statuses
             expectation_line = self.expectations.get_expectations(test_name)
-            self._handle_test_with_expectation(test_name, expectation_line, tests_needing_metadata)
+            self._handle_test_with_expectation(test_name, expectation_line,
+                                               tests_needing_metadata)
             if self._test_was_skipped(test_name, tests_needing_metadata):
                 # Do not consider other statuses if a test is skipped
                 continue
@@ -156,10 +163,12 @@
             test_baseline = self.port.expected_text(test_name)
             if not test_baseline:
                 continue
-            self._handle_test_with_baseline(test_name, test_baseline, tests_needing_metadata)
+            self._handle_test_with_baseline(test_name, test_baseline,
+                                            tests_needing_metadata)
         return tests_needing_metadata
 
-    def _handle_test_with_expectation(self, test_name, expectation_line, status_dict):
+    def _handle_test_with_expectation(self, test_name, expectation_line,
+                                      status_dict):
         """Handles a single test expectation and updates |status_dict|."""
         test_statuses = expectation_line.results
         annotations = expectation_line.trailing_comments
@@ -170,7 +179,8 @@
 
         # Guard against the only test_status being Pass (without any
         # annotations), we don't want to create metadata for such a test.
-        if (len(test_statuses) == 1 and ResultType.Pass in test_statuses and not annotations):
+        if (len(test_statuses) == 1 and ResultType.Pass in test_statuses
+                and not annotations):
             return
 
         status_bitmap = 0
@@ -192,9 +202,11 @@
 
     def _test_was_skipped(self, test_name, status_dict):
         """Returns whether |test_name| is marked as skipped in |status_dict|."""
-        return test_name in status_dict and (status_dict[test_name] & SKIP_TEST)
+        return test_name in status_dict and (
+            status_dict[test_name] & SKIP_TEST)
 
-    def _handle_test_with_baseline(self, test_name, test_baseline, status_dict):
+    def _handle_test_with_baseline(self, test_name, test_baseline,
+                                   status_dict):
         """Handles a single test baseline and updates |status_dict|."""
         status_bitmap = 0
         if re.search(r"^(FAIL|NOTRUN|TIMEOUT)", test_baseline, re.MULTILINE):
@@ -221,7 +233,8 @@
         """
         assert "?" not in wpt_test_file
         test_file_parts = wpt_test_file.split("/")
-        return os.path.join(self.metadata_output_dir, *test_file_parts) + ".ini"
+        return os.path.join(self.metadata_output_dir,
+                            *test_file_parts) + ".ini"
 
     def _metadata_inline_test_name_from_test_name(self, wpt_test_name):
         """Returns the test name to use *inside* of a metadata file.
@@ -249,7 +262,9 @@
         variant = "?" + variant_split[1] if len(variant_split) == 2 else ""
         return test_name_part + variant
 
-    def get_metadata_filename_and_contents(self, chromium_test_name, test_status_bitmap=0):
+    def get_metadata_filename_and_contents(self,
+                                           chromium_test_name,
+                                           test_status_bitmap=0):
         """Determines the metadata filename and contents for the specified test.
 
         The metadata filename is derived from the test name but will differ if
@@ -269,7 +284,8 @@
             test does not need a metadata file.
         """
         # Ignore expectations for non-WPT tests
-        if not chromium_test_name or not chromium_test_name.startswith('external/wpt'):
+        if (not chromium_test_name
+                or not chromium_test_name.startswith('external/wpt')):
             return None, None
 
         # Split the test name by directory. We omit the first 2 entries because
@@ -296,15 +312,21 @@
         else:
             # For individual tests, we create one file per test, with the name
             # of the test in the file as well.
-            test_file_path = self.wpt_manifest.file_path_for_test_url(wpt_test_name)
+            test_file_path = self.wpt_manifest.file_path_for_test_url(
+                wpt_test_name)
             if not test_file_path:
-                _log.info("Could not find file for test %s, skipping" % wpt_test_name)
+                _log.info("Could not find file for test %s, skipping" %
+                          wpt_test_name)
                 return None, None
 
-            metadata_filename = self._metadata_filename_from_test_file(test_file_path)
-            _log.debug("Creating a test ini file %s with status_bitmap %s", metadata_filename, test_status_bitmap)
-            inline_test_name = self._metadata_inline_test_name_from_test_name(wpt_test_name)
-            metadata_file_contents = self._get_test_failed_string(inline_test_name, test_status_bitmap)
+            metadata_filename = self._metadata_filename_from_test_file(
+                test_file_path)
+            _log.debug("Creating a test ini file %s with status_bitmap %s",
+                       metadata_filename, test_status_bitmap)
+            inline_test_name = self._metadata_inline_test_name_from_test_name(
+                wpt_test_name)
+            metadata_file_contents = self._get_test_failed_string(
+                inline_test_name, test_status_bitmap)
 
         return metadata_filename, metadata_file_contents
 
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder_unittest.py b/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder_unittest.py
index 64832b3..c22e5fbe 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder_unittest.py
@@ -22,7 +22,11 @@
 )
 
 
-def _make_expectation(port, test_path, test_statuses, test_names=[], trailing_comments=""):
+def _make_expectation(port,
+                      test_path,
+                      test_statuses,
+                      test_names=[],
+                      trailing_comments=""):
     """Creates an expectation object for a single test or directory.
 
     Args:
@@ -37,8 +41,8 @@
         An expectation object with the given test and statuses.
     """
     expectation_dict = OrderedDict()
-    expectation_dict["expectations"] = (
-        "# results: [ %s ]\n%s [ %s ]%s" % (test_statuses, test_path, test_statuses, trailing_comments))
+    expectation_dict["expectations"] = ("# results: [ %s ]\n%s [ %s ]%s" % \
+        (test_statuses, test_path, test_statuses, trailing_comments))
 
     # When test_path is a dir, we expect test_names to be provided.
     is_dir = test_path.endswith('/')
@@ -50,7 +54,6 @@
 
 
 class WPTMetadataBuilderTest(unittest.TestCase):
-
     def setUp(self):
         self.num = 2
         self.host = MockHost()
@@ -90,7 +93,8 @@
         test_name = "some/other/test.html"
         expectations = _make_expectation(self.port, test_name, "SKIP")
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_name, SKIP_TEST)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_name, SKIP_TEST)
         self.assertIsNone(filename)
         self.assertIsNone(contents)
 
@@ -99,7 +103,8 @@
         test_name = "external/wpt/test-not-in-manifest.html"
         expectations = _make_expectation(self.port, test_name, "SKIP")
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_name, SKIP_TEST)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_name, SKIP_TEST)
         self.assertIsNone(filename)
         self.assertIsNone(contents)
 
@@ -186,8 +191,7 @@
         # Manually initialize the baseline file and its contents
         baseline_filename = self.port.expected_filename(test_name, '.txt')
         self.host.filesystem.write_text_file(
-            baseline_filename,
-            "This is a test\nHarness Error. some stuff\n")
+            baseline_filename, "This is a test\nHarness Error. some stuff\n")
         expectations = TestExpectations(self.port)
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
         test_and_status_dict = metadata_builder.get_tests_needing_metadata()
@@ -203,52 +207,63 @@
         baseline_filename = self.port.expected_filename(test_name, '.txt')
         self.host.filesystem.write_text_file(
             baseline_filename,
-            "This is a test\nHarness Error. some stuff\nPASS some subtest\nFAIL another subtest\n")
+            "This is a test\nHarness Error. some stuff\nPASS some subtest\nFAIL another subtest\n"
+        )
         expectations = TestExpectations(self.port)
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
         test_and_status_dict = metadata_builder.get_tests_needing_metadata()
         self.assertEqual(1, len(test_and_status_dict))
         self.assertTrue(test_name in test_and_status_dict)
-        self.assertEqual(SUBTEST_FAIL | HARNESS_ERROR, test_and_status_dict[test_name])
+        self.assertEqual(SUBTEST_FAIL | HARNESS_ERROR,
+                         test_and_status_dict[test_name])
 
     def test_metadata_for_flaky_test(self):
         """A WPT test that is flaky has multiple statuses in metadata."""
         test_name = "external/wpt/test.html"
         expectations = _make_expectation(self.port, test_name, "PASS FAILURE")
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_name, TEST_PASS | TEST_FAIL)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_name, TEST_PASS | TEST_FAIL)
         self.assertEqual("test.html.ini", filename)
         # The PASS and FAIL expectations fan out to also include OK and ERROR
         # to support reftest/testharness test differences.
-        self.assertEqual("[test.html]\n  expected: [PASS, OK, FAIL, ERROR]\n", contents)
+        self.assertEqual("[test.html]\n  expected: [PASS, OK, FAIL, ERROR]\n",
+                         contents)
 
     def test_metadata_for_skipped_test(self):
         """A skipped WPT test should get a test-specific metadata file."""
         test_name = "external/wpt/test.html"
         expectations = _make_expectation(self.port, test_name, "SKIP")
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_name, SKIP_TEST)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_name, SKIP_TEST)
         self.assertEqual("test.html.ini", filename)
-        self.assertEqual("[test.html]\n  disabled: wpt_metadata_builder.py\n", contents)
+        self.assertEqual("[test.html]\n  disabled: wpt_metadata_builder.py\n",
+                         contents)
 
     def test_metadata_for_skipped_test_with_variants(self):
         """A skipped WPT tests with variants should get a test-specific metadata file."""
         test_name = "external/wpt/variant.html?foo=bar/abc"
         expectations = _make_expectation(self.port, test_name, "SKIP")
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_name, SKIP_TEST)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_name, SKIP_TEST)
         # The metadata file name should not include variants
         self.assertEqual("variant.html.ini", filename)
         # ..but the contents of the file should include variants in the test name
-        self.assertEqual("[variant.html?foo=bar/abc]\n  disabled: wpt_metadata_builder.py\n", contents)
+        self.assertEqual(
+            "[variant.html?foo=bar/abc]\n  disabled: wpt_metadata_builder.py\n",
+            contents)
 
     def test_metadata_for_skipped_directory(self):
         """A skipped WPT directory should get a dir-wide metadata file."""
         test_dir = "external/wpt/test_dir/"
         test_name = "external/wpt/test_dir/test.html"
-        expectations = _make_expectation(self.port, test_dir, "SKIP", test_names=[test_name])
+        expectations = _make_expectation(
+            self.port, test_dir, "SKIP", test_names=[test_name])
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_dir, SKIP_TEST)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_dir, SKIP_TEST)
         self.assertEqual(os.path.join("test_dir", "__dir__.ini"), filename)
         self.assertEqual("disabled: wpt_metadata_builder.py\n", contents)
 
@@ -257,7 +272,8 @@
         test_name = "external/wpt/dir/zzzz.html"
         expectations = TestExpectations(self.port)
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_name, SUBTEST_FAIL)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_name, SUBTEST_FAIL)
         self.assertEqual(os.path.join("dir", "zzzz.html.ini"), filename)
         self.assertEqual(
             "[zzzz.html]\n  blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n",
@@ -268,29 +284,35 @@
         test_name = "external/wpt/dir/zzzz.html"
         expectations = TestExpectations(self.port)
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_name, HARNESS_ERROR)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_name, HARNESS_ERROR)
         self.assertEqual(os.path.join("dir", "zzzz.html.ini"), filename)
         self.assertEqual("[zzzz.html]\n  expected: [ERROR]\n", contents)
 
-    def test_metadata_for_wpt_test_with_harness_error_and_subtest_fail_baseline(self):
+    def test_metadata_for_wpt_test_with_harness_error_and_subtest_fail_baseline(
+            self):
         """A WPT test with a baseline file containing a harness error and subtest failure gets metadata."""
         test_name = "external/wpt/dir/zzzz.html"
         expectations = TestExpectations(self.port)
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_name, SUBTEST_FAIL | HARNESS_ERROR)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_name, SUBTEST_FAIL | HARNESS_ERROR)
         self.assertEqual(os.path.join("dir", "zzzz.html.ini"), filename)
-        self.assertEqual("[zzzz.html]\n  blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n  expected: [ERROR]\n",
-                         contents)
+        self.assertEqual(
+            "[zzzz.html]\n  blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n  expected: [ERROR]\n",
+            contents)
 
     def test_metadata_for_wpt_multiglobal_test_with_baseline(self):
         """A WPT test with a baseline file containing failures gets metadata."""
         test_name = "external/wpt/dir/multiglob.https.any.window.html"
         expectations = TestExpectations(self.port)
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_name, SUBTEST_FAIL)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_name, SUBTEST_FAIL)
         # The metadata filename matches the test *filename*, not the test name,
         # which in this case is the js file from the manifest.
-        self.assertEqual(os.path.join("dir", "multiglob.https.any.js.ini"), filename)
+        self.assertEqual(
+            os.path.join("dir", "multiglob.https.any.js.ini"), filename)
         # The metadata contents contains the *test name*
         self.assertEqual(
             "[multiglob.https.any.window.html]\n  blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n",
@@ -301,39 +323,53 @@
         test_name = "external/wpt/test.html"
         expectations = TestExpectations(self.port)
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
-        filename, contents = metadata_builder.get_metadata_filename_and_contents(test_name, TEST_PRECONDITION_FAILED)
+        filename, contents = metadata_builder.get_metadata_filename_and_contents(
+            test_name, TEST_PRECONDITION_FAILED)
         self.assertEqual("test.html.ini", filename)
         # The PASS and FAIL expectations fan out to also include OK and ERROR
         # to support reftest/testharness test differences.
-        self.assertEqual("[test.html]\n  expected: [PRECONDITION_FAILED]\n", contents)
+        self.assertEqual("[test.html]\n  expected: [PRECONDITION_FAILED]\n",
+                         contents)
 
     def test_parse_subtest_failure_annotation(self):
         """Check that we parse the wpt_subtest_failure annotation correctly."""
         test_name = "external/wpt/test.html"
-        expectations = _make_expectation(self.port, test_name, "PASS", trailing_comments=" # wpt_subtest_failure")
+        expectations = _make_expectation(
+            self.port,
+            test_name,
+            "PASS",
+            trailing_comments=" # wpt_subtest_failure")
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
         test_and_status_dict = metadata_builder.get_tests_needing_metadata()
         self.assertEqual(1, len(test_and_status_dict))
         self.assertTrue(test_name in test_and_status_dict)
-        self.assertEqual(TEST_PASS | SUBTEST_FAIL, test_and_status_dict[test_name])
+        self.assertEqual(TEST_PASS | SUBTEST_FAIL,
+                         test_and_status_dict[test_name])
 
     def test_parse_precondition_failure_annotation(self):
         """Check that we parse the wpt_precondition_failed annotation correctly."""
         test_name = "external/wpt/test.html"
-        expectations = _make_expectation(self.port, test_name, "PASS", trailing_comments=" # wpt_precondition_failed")
+        expectations = _make_expectation(
+            self.port,
+            test_name,
+            "PASS",
+            trailing_comments=" # wpt_precondition_failed")
         metadata_builder = WPTMetadataBuilder(expectations, self.port)
         test_and_status_dict = metadata_builder.get_tests_needing_metadata()
         self.assertEqual(1, len(test_and_status_dict))
         self.assertTrue(test_name in test_and_status_dict)
-        self.assertEqual(TEST_PASS | TEST_PRECONDITION_FAILED, test_and_status_dict[test_name])
+        self.assertEqual(TEST_PASS | TEST_PRECONDITION_FAILED,
+                         test_and_status_dict[test_name])
 
     def test_metadata_filename_from_test_file(self):
         """Check that we get the correct metadata filename in various cases."""
         expectations = TestExpectations(self.port)
         mb = WPTMetadataBuilder(expectations, self.port)
-        self.assertEqual("test.html.ini", mb._metadata_filename_from_test_file("test.html"))
+        self.assertEqual("test.html.ini",
+                         mb._metadata_filename_from_test_file("test.html"))
         test_file = os.path.join("dir", "multiglob.https.any.js")
-        self.assertEqual(test_file + ".ini", mb._metadata_filename_from_test_file(test_file))
+        self.assertEqual(test_file + ".ini",
+                         mb._metadata_filename_from_test_file(test_file))
         with self.assertRaises(AssertionError):
             mb._metadata_filename_from_test_file("test.html?variant=abc")
 
@@ -341,10 +377,24 @@
         """Check that we get the correct inline test name in various cases."""
         expectations = TestExpectations(self.port)
         mb = WPTMetadataBuilder(expectations, self.port)
-        self.assertEqual("test.html", mb._metadata_inline_test_name_from_test_name("test.html"))
-        self.assertEqual("test.html", mb._metadata_inline_test_name_from_test_name("dir/test.html"))
-        self.assertEqual("test.html?variant=abc", mb._metadata_inline_test_name_from_test_name("dir/test.html?variant=abc"))
-        self.assertEqual("test.html?variant=abc/def", mb._metadata_inline_test_name_from_test_name("dir/test.html?variant=abc/def"))
-        self.assertEqual("test.worker.html", mb._metadata_inline_test_name_from_test_name("test.worker.html"))
-        self.assertEqual("test.worker.html?variant=abc",
-                         mb._metadata_inline_test_name_from_test_name("dir/test.worker.html?variant=abc"))
+        self.assertEqual(
+            "test.html",
+            mb._metadata_inline_test_name_from_test_name("test.html"))
+        self.assertEqual(
+            "test.html",
+            mb._metadata_inline_test_name_from_test_name("dir/test.html"))
+        self.assertEqual(
+            "test.html?variant=abc",
+            mb._metadata_inline_test_name_from_test_name(
+                "dir/test.html?variant=abc"))
+        self.assertEqual(
+            "test.html?variant=abc/def",
+            mb._metadata_inline_test_name_from_test_name(
+                "dir/test.html?variant=abc/def"))
+        self.assertEqual(
+            "test.worker.html",
+            mb._metadata_inline_test_name_from_test_name("test.worker.html"))
+        self.assertEqual(
+            "test.worker.html?variant=abc",
+            mb._metadata_inline_test_name_from_test_name(
+                "dir/test.worker.html?variant=abc"))
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_output_updater.py b/third_party/blink/tools/blinkpy/w3c/wpt_output_updater.py
index 2624ebf..6542fab 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_output_updater.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_output_updater.py
@@ -1,7 +1,6 @@
 # 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.
-
 """Updates the output of a WPT run.
 
 The purpose of this script is to do any post-processing on the WPT output that
@@ -28,7 +27,6 @@
 
 
 class WPTOutputUpdater(object):
-
     def __init__(self, expectations):
         """
         Args:
@@ -42,13 +40,20 @@
     def run(self, args=None):
         """Main entry point to parse flags and execute the script."""
         parser = argparse.ArgumentParser(description=__doc__)
-        parser.add_argument("--old-json-output-file-path",
-                            help="The JSON output file to be updated, generated by WPT.")
-        parser.add_argument("--new-json-output-dir",
-                            help="The directory to put the new JSON output file.")
-        parser.add_argument("--new-json-output-filename",
-                            help="The name of the new JSON output file.")
-        parser.add_argument('-v', '--verbose', action='store_true', help='More verbose logging.')
+        parser.add_argument(
+            "--old-json-output-file-path",
+            help="The JSON output file to be updated, generated by WPT.")
+        parser.add_argument(
+            "--new-json-output-dir",
+            help="The directory to put the new JSON output file.")
+        parser.add_argument(
+            "--new-json-output-filename",
+            help="The name of the new JSON output file.")
+        parser.add_argument(
+            '-v',
+            '--verbose',
+            action='store_true',
+            help='More verbose logging.')
         args = parser.parse_args(args)
 
         log_level = logging.DEBUG if args.verbose else logging.INFO
@@ -94,7 +99,8 @@
             for line in self.expectations.get_updated_lines(path):
                 if not line.test or line.is_glob:
                     continue
-                test_leaf = self._find_test_for_expectation(line, delim, output_json)
+                test_leaf = self._find_test_for_expectation(
+                    line, delim, output_json)
                 if test_leaf is not None:
                     self._update_output_for_test(line, test_leaf)
         return output_json
@@ -143,7 +149,8 @@
         # do this we check that we're at a leaf, which should have 'actual' and
         # 'expected' fields.
         if 'actual' not in test_leaf or 'expected' not in test_leaf:
-            _log.debug("Expectation was not for a test, skipping: %s", exp.test)
+            _log.debug("Expectation was not for a test, skipping: %s",
+                       exp.test)
             return None
 
         # If we get this far then we have an expectation for a single test that
@@ -160,11 +167,12 @@
             test_leaf: a dictionary containing the JSON output for a test.
         """
         expectation_string = ' '.join(sorted(exp.results))
-        _log.info("Updating expectation for test %s from %s to %s",
-                  exp.test, test_leaf['expected'], expectation_string)
+        _log.info("Updating expectation for test %s from %s to %s", exp.test,
+                  test_leaf['expected'], expectation_string)
         test_leaf['expected'] = expectation_string
 
         # Also update the "is_regression" and "is_unexpected" fields.
         is_unexpected = test_leaf['actual'] not in expectation_string
         test_leaf['is_unexpected'] = is_unexpected
-        test_leaf['is_regression'] = is_unexpected and test_leaf['actual'] != 'PASS'
+        test_leaf['is_regression'] = (is_unexpected
+                                      and test_leaf['actual'] != 'PASS')
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_output_updater_unittest.py b/third_party/blink/tools/blinkpy/w3c/wpt_output_updater_unittest.py
index 42398820..8d0ba25 100644
--- a/third_party/blink/tools/blinkpy/w3c/wpt_output_updater_unittest.py
+++ b/third_party/blink/tools/blinkpy/w3c/wpt_output_updater_unittest.py
@@ -12,10 +12,8 @@
 from blinkpy.w3c.wpt_output_updater import WPTOutputUpdater
 
 _EXPECTATIONS_TEST_LIST = [
-    "some/test.html",
-    "external/wpt/expected_crash.html",
-    "external/wpt/flake.html",
-    "external/wpt/subdir/unexpected_failure.html",
+    "some/test.html", "external/wpt/expected_crash.html",
+    "external/wpt/flake.html", "external/wpt/subdir/unexpected_failure.html",
     "passed/test.html"
 ]
 
@@ -29,14 +27,14 @@
 
 
 class WPTOutputUpdaterTest(unittest.TestCase):
-
     def setUp(self):
         self.host = MockHost()
         self.host.port_factory = MockPortFactory(self.host)
         self.port = self.host.port_factory.get()
         expectations_dict = OrderedDict()
         expectations_dict['expectations'] = _EXPECTATIONS_FILE_STRING
-        self.exp = TestExpectations(self.port, expectations_dict=expectations_dict)
+        self.exp = TestExpectations(
+            self.port, expectations_dict=expectations_dict)
 
     def test_update_output_json(self):
         """Tests that output JSON is properly updated with expectations."""
@@ -76,8 +74,11 @@
         output_json = json.loads(output_string)
 
         # A few simple assertions that the original JSON is formatter properly.
-        self.assertEqual("PASS", output_json["tests"]["expected_crash.html"]["expected"])
-        self.assertEqual("FAIL", output_json["tests"]["subdir"]["unexpected_failure.html"]["actual"])
+        self.assertEqual(
+            "PASS", output_json["tests"]["expected_crash.html"]["expected"])
+        self.assertEqual(
+            "FAIL", output_json["tests"]["subdir"]["unexpected_failure.html"]
+            ["actual"])
 
         # Run the output updater, and confirm the expected statuses are updated.
         new_output_json = output_updater.update_output_json(output_json)
@@ -105,7 +106,8 @@
         # The unexpected_failure.html test had a different status than expected,
         # so is_unexpected is true. Since the actual status wasn't a Pass, it's
         # also a regression.
-        cur_test = new_output_json["tests"]["subdir"]["unexpected_failure.html"]
+        cur_test = new_output_json["tests"]["subdir"][
+            "unexpected_failure.html"]
         self.assertEqual("TIMEOUT", cur_test["expected"])
         self.assertTrue(cur_test["is_regression"])
         self.assertTrue(cur_test["is_unexpected"])
diff --git a/third_party/blink/tools/blinkpy/web_tests/.style.yapf b/third_party/blink/tools/blinkpy/web_tests/.style.yapf
new file mode 100644
index 0000000..557fa7b
--- /dev/null
+++ b/third_party/blink/tools/blinkpy/web_tests/.style.yapf
@@ -0,0 +1,2 @@
+[style]
+based_on_style = pep8
diff --git a/third_party/blink/tools/blinkpy/web_tests/bisect_test_ordering.py b/third_party/blink/tools/blinkpy/web_tests/bisect_test_ordering.py
index b3fea948..c60f6248 100644
--- a/third_party/blink/tools/blinkpy/web_tests/bisect_test_ordering.py
+++ b/third_party/blink/tools/blinkpy/web_tests/bisect_test_ordering.py
@@ -39,7 +39,6 @@
 
 
 class Bucket(object):
-
     def __init__(self, tests):
         self.tests = tests
 
@@ -48,7 +47,6 @@
 
 
 class Bisector(object):
-
     def __init__(self, tests, is_debug):
         self.executive = Executive()
         self.tests = tests
@@ -68,7 +66,10 @@
         # Split the list of test into buckets. Each bucket has at least one test required to cause
         # the expected failure at the end. Split buckets in half until there are only buckets left
         # with one item in them.
-        self.buckets = [Bucket(self.tests[:-1]), Bucket([self.expected_failure])]
+        self.buckets = [
+            Bucket(self.tests[:-1]),
+            Bucket([self.expected_failure])
+        ]
         while not self.is_done():
             self.print_progress()
             self.split_largest_bucket()
@@ -98,7 +99,8 @@
         for bucket in self.buckets:
             tests += bucket.tests
         extra_args = ' --debug' if self.is_debug else ''
-        print 'run_web_tests.py%s --jobs=1 --order=none %s' % (extra_args, ' '.join(tests))
+        print 'run_web_tests.py%s --jobs=1 --order=none %s' % (extra_args,
+                                                               ' '.join(tests))
 
     def is_done(self):
         for bucket in self.buckets:
@@ -135,7 +137,8 @@
             self.buckets = new_buckets
             return
 
-        self.buckets = buckets_before + [first_half, second_half] + buckets_after
+        self.buckets = (
+            buckets_before + [first_half, second_half] + buckets_after)
 
     def test_bucket_list_fails(self, buckets):
         tests = []
@@ -145,10 +148,15 @@
 
     def test_fails(self, tests):
         extra_args = ['--debug'] if self.is_debug else []
-        path_to_run_web_tests = self.path_finder.path_from_tools_scripts('run_web_tests.py')
+        path_to_run_web_tests = self.path_finder.path_from_tools_scripts(
+            'run_web_tests.py')
         output = self.executive.popen(
-            [path_to_run_web_tests, '--jobs', '1', '--order', 'none', '--no-retry',
-             '--no-show-results', '--verbose'] + extra_args + tests, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+            [
+                path_to_run_web_tests, '--jobs', '1', '--order', 'none',
+                '--no-retry', '--no-show-results', '--verbose'
+            ] + extra_args + tests,
+            stdout=subprocess.PIPE,
+            stderr=subprocess.PIPE)
         failure_string = self.expected_failure + ' failed'
         if failure_string in output.stderr.read():
             return True
@@ -162,14 +170,20 @@
     option_parser.add_option(
         '--test-list',
         action='store',
-        help='file that list tests to bisect. The last test in the list is the expected failure.',
+        help=
+        'file that list tests to bisect. The last test in the list is the expected failure.',
         metavar='FILE')
-    option_parser.add_option('--debug', action='store_true', default=False, help='whether to use a debug build')
+    option_parser.add_option(
+        '--debug',
+        action='store_true',
+        default=False,
+        help='whether to use a debug build')
     options, _ = option_parser.parse_args(argv)
 
     tests = open(options.test_list).read().strip().split('\n')
     bisector = Bisector(tests, is_debug=options.debug)
     return bisector.bisect()
 
+
 if __name__ == '__main__':
     sys.exit(main(sys.argv[1:]))
diff --git a/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader.py b/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader.py
index 605672c..1834a49d 100644
--- a/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader.py
+++ b/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader.py
@@ -56,8 +56,11 @@
             return None
 
         pid_to_minidump = dict()
-        for root, _, files in self._host.filesystem.walk(self.crash_dumps_directory()):
-            for dmp in [f for f in files if f.endswith(self._file_extension())]:
+        for root, _, files in self._host.filesystem.walk(
+                self.crash_dumps_directory()):
+            for dmp in [
+                    f for f in files if f.endswith(self._file_extension())
+            ]:
                 dmp_file = self._host.filesystem.join(root, dmp)
                 if self._host.filesystem.mtime(dmp_file) < start_time:
                     continue
@@ -71,7 +74,9 @@
                 stack = self._get_stack_from_dump(pid_to_minidump[str(pid)])
                 if stack:
                     # TODO(xiaochengh): Find the real crash site.
-                    result[test] = (stack, 'Placeholder crash site generated by DumpReader')
+                    result[test] = (
+                        stack,
+                        'Placeholder crash site generated by DumpReader')
 
         return result
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_multipart.py b/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_multipart.py
index ee47da7..79f415a7 100644
--- a/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_multipart.py
+++ b/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_multipart.py
@@ -34,7 +34,6 @@
 from blinkpy.common.path_finder import PathFinder
 from blinkpy.web_tests.breakpad.dump_reader import DumpReader
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -70,7 +69,10 @@
         f.write('\r\n'.join(dump['upload_file_minidump']))
         f.close()
 
-        cmd = [self._path_to_minidump_stackwalk(), temp_name, self._symbols_dir()]
+        cmd = [
+            self._path_to_minidump_stackwalk(), temp_name,
+            self._symbols_dir()
+        ]
         try:
             stack = self._host.executive.run_command(cmd, return_stderr=False)
         except:
@@ -81,7 +83,8 @@
         return stack
 
     def _read_dump(self, dump_file):
-        with self._host.filesystem.open_binary_file_for_reading(dump_file) as f:
+        with self._host.filesystem.open_binary_file_for_reading(
+                dump_file) as f:
             boundary = f.readline().strip()[2:]
             f.seek(0)
             try:
@@ -108,7 +111,9 @@
                 _log.error('    at %s', full_path)
 
         if not result:
-            _log.error("    Could not find breakpad tools, unexpected crashes won't be symbolized")
+            _log.error(
+                "    Could not find breakpad tools, unexpected crashes won't be symbolized"
+            )
             _log.error('    Did you build the target blink_tests?')
             _log.error('')
 
@@ -116,14 +121,17 @@
         return self._breakpad_tools_available
 
     def _path_to_minidump_stackwalk(self):
-        return self._host.filesystem.join(self._build_dir, 'minidump_stackwalk')
+        return self._host.filesystem.join(self._build_dir,
+                                          'minidump_stackwalk')
 
     def _path_to_generate_breakpad_symbols(self):
         return self._path_finder.path_from_chromium_base(
-            'components', 'crash', 'content', 'tools', 'generate_breakpad_symbols.py')
+            'components', 'crash', 'content', 'tools',
+            'generate_breakpad_symbols.py')
 
     def _symbols_dir(self):
-        return self._host.filesystem.join(self._build_dir, 'content_shell.syms')
+        return self._host.filesystem.join(self._build_dir,
+                                          'content_shell.syms')
 
     def _generate_breakpad_symbols_if_necessary(self):
         if self._generated_symbols:
@@ -132,7 +140,7 @@
 
         _log.debug('Generating breakpad symbols')
         queue = Queue.Queue()
-        thread = threading.Thread(target=_symbolize_keepalive, args=(queue,))
+        thread = threading.Thread(target=_symbolize_keepalive, args=(queue, ))
         thread.start()
         try:
             for binary in self._binaries_to_symbolize():
diff --git a/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_multipart_unittest.py b/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_multipart_unittest.py
index e83023e5..1abf688 100644
--- a/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_multipart_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_multipart_unittest.py
@@ -54,7 +54,9 @@
     def test_check_generate_breakpad_symbols_actually_exists(self):
         host = Host()
         dump_reader = DumpReaderMultipart(host, build_dir=None)
-        self.assertTrue(host.filesystem.exists(dump_reader._path_to_generate_breakpad_symbols()))
+        self.assertTrue(
+            host.filesystem.exists(
+                dump_reader._path_to_generate_breakpad_symbols()))
 
     def test_check_is_functional_breakpad_tools_not_found(self):
         host = MockHost()
@@ -72,7 +74,8 @@
 
         dump_file = '/crash-dumps/dump.dmp'
         expected_pid = '4711'
-        host.filesystem.write_text_file(dump_file, "\r\n".join(TestDumpReaderMultipart._MULTIPART_DUMP))
+        host.filesystem.write_text_file(
+            dump_file, "\r\n".join(TestDumpReaderMultipart._MULTIPART_DUMP))
         build_dir = "/mock-checkout/out/Debug"
         host.filesystem.maybe_make_directory(build_dir)
         host.filesystem.exists = lambda x: True
@@ -85,13 +88,15 @@
         dump_reader._binaries_to_symbolize = lambda: ['content_shell']
 
         self.assertTrue(dump_reader.check_is_functional())
-        self.assertEqual(expected_pid, dump_reader._get_pid_from_dump(dump_file))
+        self.assertEqual(expected_pid,
+                         dump_reader._get_pid_from_dump(dump_file))
 
     def test_get_stack_from_dump(self):
         host = MockHost()
 
         dump_file = '/crash-dumps/dump.dmp'
-        host.filesystem.write_text_file(dump_file, "\r\n".join(TestDumpReaderMultipart._MULTIPART_DUMP))
+        host.filesystem.write_text_file(
+            dump_file, "\r\n".join(TestDumpReaderMultipart._MULTIPART_DUMP))
         build_dir = "/mock-checkout/out/Debug"
         host.filesystem.maybe_make_directory(build_dir)
         host.filesystem.exists = lambda x: True
@@ -104,7 +109,8 @@
         dump_reader._binaries_to_symbolize = lambda: ['content_shell']
 
         self.assertTrue(dump_reader.check_is_functional())
-        self.assertEqual("MOCK output of child process", dump_reader._get_stack_from_dump(dump_file))
+        self.assertEqual("MOCK output of child process",
+                         dump_reader._get_stack_from_dump(dump_file))
         self.assertEqual(2, len(host.executive.calls))
         cmd_line = " ".join(host.executive.calls[0])
         self.assertIn('generate_breakpad_symbols.py', cmd_line)
diff --git a/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_win.py b/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_win.py
index c0c92e5..4ddd637 100644
--- a/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_win.py
+++ b/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_win.py
@@ -32,7 +32,6 @@
 
 from blinkpy.web_tests.breakpad.dump_reader import DumpReader
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -65,7 +64,10 @@
 
     def _get_stack_from_dump(self, dump_file):
         minidump = dump_file[:-3] + 'dmp'
-        cmd = [self._cdb_path, '-y', self._build_dir, '-c', '.lines;.ecxr;k30;q', '-z', minidump]
+        cmd = [
+            self._cdb_path, '-y', self._build_dir, '-c', '.lines;.ecxr;k30;q',
+            '-z', minidump
+        ]
         try:
             stack = self._host.executive.run_command(cmd)
         except:
diff --git a/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_win_unittest.py b/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_win_unittest.py
index a1bdaa4..c531930 100644
--- a/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_win_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/breakpad/dump_reader_win_unittest.py
@@ -34,7 +34,6 @@
 
 
 class TestDumpReaderWin(unittest.TestCase):
-
     def test_check_is_functional_cdb_not_found(self):
         host = MockHost()
         host.executive = MockExecutive(should_throw=True)
@@ -50,13 +49,16 @@
 
         dump_file = '/crash-dumps/dump.txt'
         expected_pid = '4711'
-        host.filesystem.write_text_file(dump_file, 'channel:\npid:%s\nplat:Win32\nprod:content_shell\n' % expected_pid)
+        host.filesystem.write_text_file(
+            dump_file, 'channel:\npid:%s\nplat:Win32\nprod:content_shell\n' %
+            expected_pid)
         build_dir = "/mock-checkout/out/Debug"
         host.filesystem.maybe_make_directory(build_dir)
         dump_reader = DumpReaderWin(host, build_dir)
 
         self.assertTrue(dump_reader.check_is_functional())
-        self.assertEqual(expected_pid, dump_reader._get_pid_from_dump(dump_file))
+        self.assertEqual(expected_pid,
+                         dump_reader._get_pid_from_dump(dump_file))
 
     def test_get_stack_from_dump(self):
         host = MockHost()
@@ -71,7 +73,8 @@
 
         self.assertTrue(dump_reader.check_is_functional())
         host.executive.full_calls = []
-        self.assertEqual("MOCK output of child process", dump_reader._get_stack_from_dump(dump_file))
+        self.assertEqual("MOCK output of child process",
+                         dump_reader._get_stack_from_dump(dump_file))
         self.assertEqual(1, len(host.executive.calls))
         cmd_line = " ".join(host.executive.calls[0])
         self.assertIn('cdb.exe', cmd_line)
diff --git a/third_party/blink/tools/blinkpy/web_tests/builder_list.py b/third_party/blink/tools/blinkpy/web_tests/builder_list.py
index 7826ad2..8128ca9 100644
--- a/third_party/blink/tools/blinkpy/web_tests/builder_list.py
+++ b/third_party/blink/tools/blinkpy/web_tests/builder_list.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Represents a set of builder bots running web tests.
 
 This class is used to hold a list of builder bots running web tests and their
@@ -38,7 +37,6 @@
 
 
 class BuilderList(object):
-
     def __init__(self, builders_dict):
         """Creates and validates a builders list.
 
@@ -74,10 +72,12 @@
         return sorted(self._builders)
 
     def all_try_builder_names(self):
-        return sorted(b for b in self._builders if self._builders[b].get('is_try_builder'))
+        return sorted(b for b in self._builders
+                      if self._builders[b].get('is_try_builder'))
 
     def all_continuous_builder_names(self):
-        return sorted(b for b in self._builders if not self._builders[b].get('is_try_builder'))
+        return sorted(b for b in self._builders
+                      if not self._builders[b].get('is_try_builder'))
 
     def all_port_names(self):
         return sorted({b['port_name'] for b in self._builders.values()})
@@ -142,6 +142,7 @@
         """
         for builder_name, info in sorted(self._builders.items()):
             specifiers = info['specifiers']
-            if specifiers[0].lower() == version.lower() and specifiers[1].lower() == build_type.lower():
+            if (specifiers[0].lower() == version.lower()
+                    and specifiers[1].lower() == build_type.lower()):
                 return builder_name
         return ''
diff --git a/third_party/blink/tools/blinkpy/web_tests/builder_list_unittest.py b/third_party/blink/tools/blinkpy/web_tests/builder_list_unittest.py
index 9ec9843..7bbb29a0 100644
--- a/third_party/blink/tools/blinkpy/web_tests/builder_list_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/builder_list_unittest.py
@@ -32,19 +32,55 @@
 
 
 class BuilderListTest(unittest.TestCase):
-
     @staticmethod
     def sample_builder_list():
         return BuilderList({
-            'Blink A': {'port_name': 'port-a', 'specifiers': ['A', 'Release']},
-            'Blink B': {'port_name': 'port-b', 'specifiers': ['B', 'Release']},
-            'Blink B (dbg)': {'port_name': 'port-b', 'specifiers': ['B', 'Debug']},
-            'Blink C (dbg)': {'port_name': 'port-c', 'specifiers': ['C', 'Release']},
-            'Try A': {'port_name': 'port-a', 'specifiers': ['A', 'Release'], 'is_try_builder': True},
-            'Try B': {'port_name': 'port-b', 'specifiers': ['B', 'Release'], 'is_try_builder': True},
-            'CQ Try A': {'bucket': 'bucket.a', 'port_name': 'port-a', 'specifiers': ['A', 'Release'], 'is_try_builder': True},
-            'CQ Try B': {'bucket': 'bucket.b', 'port_name': 'port-b', 'specifiers': ['B', 'Release'], 'is_try_builder': True},
-            'CQ Try C': {'bucket': 'bucket.c', 'port_name': 'port-c', 'specifiers': ['c', 'Release'], 'is_try_builder': True, 'master': "luci", 'has_webdriver_tests': True},
+            'Blink A': {
+                'port_name': 'port-a',
+                'specifiers': ['A', 'Release']
+            },
+            'Blink B': {
+                'port_name': 'port-b',
+                'specifiers': ['B', 'Release']
+            },
+            'Blink B (dbg)': {
+                'port_name': 'port-b',
+                'specifiers': ['B', 'Debug']
+            },
+            'Blink C (dbg)': {
+                'port_name': 'port-c',
+                'specifiers': ['C', 'Release']
+            },
+            'Try A': {
+                'port_name': 'port-a',
+                'specifiers': ['A', 'Release'],
+                'is_try_builder': True
+            },
+            'Try B': {
+                'port_name': 'port-b',
+                'specifiers': ['B', 'Release'],
+                'is_try_builder': True
+            },
+            'CQ Try A': {
+                'bucket': 'bucket.a',
+                'port_name': 'port-a',
+                'specifiers': ['A', 'Release'],
+                'is_try_builder': True
+            },
+            'CQ Try B': {
+                'bucket': 'bucket.b',
+                'port_name': 'port-b',
+                'specifiers': ['B', 'Release'],
+                'is_try_builder': True
+            },
+            'CQ Try C': {
+                'bucket': 'bucket.c',
+                'port_name': 'port-c',
+                'specifiers': ['c', 'Release'],
+                'is_try_builder': True,
+                'master': "luci",
+                'has_webdriver_tests': True
+            },
         })
 
     def test_constructor_validates_list(self):
@@ -55,20 +91,27 @@
 
     def test_all_builder_names(self):
         builders = self.sample_builder_list()
-        self.assertEqual(['Blink A', 'Blink B', 'Blink B (dbg)', 'Blink C (dbg)', 'CQ Try A', 'CQ Try B', 'CQ Try C', 'Try A', 'Try B'],
-                         builders.all_builder_names())
+        self.assertEqual([
+            'Blink A', 'Blink B', 'Blink B (dbg)', 'Blink C (dbg)', 'CQ Try A',
+            'CQ Try B', 'CQ Try C', 'Try A', 'Try B'
+        ], builders.all_builder_names())
 
     def test_all_continuous_builder_names(self):
         builders = self.sample_builder_list()
-        self.assertEqual(['Blink A', 'Blink B', 'Blink B (dbg)', 'Blink C (dbg)'], builders.all_continuous_builder_names())
+        self.assertEqual(
+            ['Blink A', 'Blink B', 'Blink B (dbg)', 'Blink C (dbg)'],
+            builders.all_continuous_builder_names())
 
     def test_all_try_builder_names(self):
         builders = self.sample_builder_list()
-        self.assertEqual(['CQ Try A', 'CQ Try B', 'CQ Try C', 'Try A', 'Try B'], builders.all_try_builder_names())
+        self.assertEqual(
+            ['CQ Try A', 'CQ Try B', 'CQ Try C', 'Try A', 'Try B'],
+            builders.all_try_builder_names())
 
     def test_all_port_names(self):
         builders = self.sample_builder_list()
-        self.assertEqual(['port-a', 'port-b', 'port-c'], builders.all_port_names())
+        self.assertEqual(['port-a', 'port-b', 'port-c'],
+                         builders.all_port_names())
 
     def test_bucket_for_builder_default_bucket(self):
         builders = self.sample_builder_list()
@@ -88,25 +131,28 @@
 
     def test_has_webdriver_tests_for_builder_default_value(self):
         builders = self.sample_builder_list()
-        self.assertEqual(
-            None, builders.has_webdriver_tests_for_builder('Try A'))
+        self.assertEqual(None,
+                         builders.has_webdriver_tests_for_builder('Try A'))
 
     def test_has_webdriver_tests_for_builder_configured_value(self):
         builders = self.sample_builder_list()
-        self.assertEqual(
-            True, builders.has_webdriver_tests_for_builder('CQ Try C'))
+        self.assertEqual(True,
+                         builders.has_webdriver_tests_for_builder('CQ Try C'))
 
     def test_port_name_for_builder_name(self):
         builders = self.sample_builder_list()
-        self.assertEqual('port-b', builders.port_name_for_builder_name('Blink B'))
+        self.assertEqual('port-b',
+                         builders.port_name_for_builder_name('Blink B'))
 
     def test_specifiers_for_builder(self):
         builders = self.sample_builder_list()
-        self.assertEqual(['B', 'Release'], builders.specifiers_for_builder('Blink B'))
+        self.assertEqual(['B', 'Release'],
+                         builders.specifiers_for_builder('Blink B'))
 
     def test_platform_specifier_for_builder(self):
         builders = self.sample_builder_list()
-        self.assertEqual('B', builders.platform_specifier_for_builder('Blink B'))
+        self.assertEqual('B',
+                         builders.platform_specifier_for_builder('Blink B'))
 
     def test_port_name_for_builder_name_with_missing_builder(self):
         builders = self.sample_builder_list()
@@ -120,18 +166,23 @@
 
     def test_builder_name_for_port_name_with_no_debug_builder(self):
         builders = self.sample_builder_list()
-        self.assertEqual('Blink A', builders.builder_name_for_port_name('port-a'))
+        self.assertEqual('Blink A',
+                         builders.builder_name_for_port_name('port-a'))
 
     def test_builder_name_for_port_name_with_debug_builder(self):
         builders = self.sample_builder_list()
-        self.assertEqual('Blink B', builders.builder_name_for_port_name('port-b'))
+        self.assertEqual('Blink B',
+                         builders.builder_name_for_port_name('port-b'))
 
     def test_builder_name_for_port_name_with_only_debug_builder(self):
         builders = self.sample_builder_list()
-        self.assertEqual('Blink C (dbg)', builders.builder_name_for_port_name('port-c'))
+        self.assertEqual('Blink C (dbg)',
+                         builders.builder_name_for_port_name('port-c'))
 
     def test_version_specifier_for_port_name(self):
         builders = self.sample_builder_list()
-        self.assertEqual('A', builders.version_specifier_for_port_name('port-a'))
-        self.assertEqual('B', builders.version_specifier_for_port_name('port-b'))
+        self.assertEqual('A',
+                         builders.version_specifier_for_port_name('port-a'))
+        self.assertEqual('B',
+                         builders.version_specifier_for_port_name('port-b'))
         self.assertIsNone(builders.version_specifier_for_port_name('port-x'))
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py b/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py
index 09647e7..f613096 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py
@@ -26,7 +26,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """The Manager orchestrates the overall process of running web tests.
 
 This includes finding tests to run, reading the test expectations,
@@ -92,7 +91,9 @@
         self._artifacts_directory = self._port.artifacts_directory()
         self._finder = WebTestFinder(self._port, self._options)
         self._path_finder = PathFinder(port.host.filesystem)
-        self._runner = WebTestRunner(self._options, self._port, self._printer, self._results_directory, self._test_is_slow)
+        self._runner = WebTestRunner(self._options, self._port, self._printer,
+                                     self._results_directory,
+                                     self._test_is_slow)
 
     def run(self, args):
         """Runs the tests and return a RunDetails object with the results."""
@@ -101,10 +102,12 @@
         running_all_tests = False
 
         try:
-            paths, all_test_names, running_all_tests = self._collect_tests(args)
+            paths, all_test_names, running_all_tests = self._collect_tests(
+                args)
         except IOError:
             # This is raised if --test-list doesn't exist
-            return test_run_results.RunDetails(exit_code=exit_codes.NO_TESTS_EXIT_STATUS)
+            return test_run_results.RunDetails(
+                exit_code=exit_codes.NO_TESTS_EXIT_STATUS)
 
         test_names = self._finder.split_into_chunks(all_test_names)
 
@@ -155,14 +158,16 @@
             if self._options.watch:
                 run_results = self._run_test_loop(tests_to_run, tests_to_skip)
             else:
-                run_results = self._run_test_once(tests_to_run, tests_to_skip, should_retry_failures)
+                run_results = self._run_test_once(tests_to_run, tests_to_skip,
+                                                  should_retry_failures)
             initial_results, all_retry_results = run_results
         finally:
             self._stop_servers()
             self._clean_up_run()
 
         if self._options.no_expectations:
-            return test_run_results.RunDetails(0, [], [], initial_results, all_retry_results)
+            return test_run_results.RunDetails(0, [], [], initial_results,
+                                               all_retry_results)
 
         # Some crash logs can take a long time to be written out so look
         # for new logs after the test run finishes.
@@ -175,7 +180,10 @@
         summarized_full_results = test_run_results.summarize_results(
             self._port, self._expectations, initial_results, all_retry_results)
         summarized_failing_results = test_run_results.summarize_results(
-            self._port, self._expectations, initial_results, all_retry_results,
+            self._port,
+            self._expectations,
+            initial_results,
+            all_retry_results,
             only_include_failing=True)
 
         exit_code = summarized_failing_results['num_regressions']
@@ -185,24 +193,30 @@
             exit_code = exit_codes.MAX_FAILURES_EXIT_STATUS
 
         if not self._options.dry_run:
-            self._write_json_files(summarized_full_results, summarized_failing_results, initial_results, running_all_tests)
+            self._write_json_files(summarized_full_results,
+                                   summarized_failing_results, initial_results,
+                                   running_all_tests)
 
             self._upload_json_files()
 
-            self._copy_results_html_file(self._artifacts_directory, 'results.html')
+            self._copy_results_html_file(self._artifacts_directory,
+                                         'results.html')
             if initial_results.keyboard_interrupted:
                 exit_code = exit_codes.INTERRUPTED_EXIT_STATUS
             else:
                 if initial_results.interrupted:
                     exit_code = exit_codes.EARLY_EXIT_STATUS
-                if self._options.show_results and (exit_code or initial_results.total_failures):
+                if (self._options.show_results
+                        and (exit_code or initial_results.total_failures)):
                     self._port.show_results_html_file(
-                        self._filesystem.join(self._artifacts_directory, 'results.html'))
-                self._printer.print_results(time.time() - start_time, initial_results)
+                        self._filesystem.join(self._artifacts_directory,
+                                              'results.html'))
+                self._printer.print_results(time.time() - start_time,
+                                            initial_results)
 
-        return test_run_results.RunDetails(
-            exit_code, summarized_full_results, summarized_failing_results,
-            initial_results, all_retry_results)
+        return test_run_results.RunDetails(exit_code, summarized_full_results,
+                                           summarized_failing_results,
+                                           initial_results, all_retry_results)
 
     def _run_test_loop(self, tests_to_run, tests_to_skip):
         # Don't show results in a new browser window because we're already
@@ -215,7 +229,8 @@
             for name in initial_results.failures_by_name:
                 failure = initial_results.failures_by_name[name][0]
                 if isinstance(failure, test_failures.FailureTextMismatch):
-                    full_test_path = self._filesystem.join(self._artifacts_directory, name)
+                    full_test_path = self._filesystem.join(
+                        self._artifacts_directory, name)
                     filename, _ = self._filesystem.splitext(full_test_path)
                     pretty_diff_path = 'file://' + filename + '-pretty-diff.html'
                     self._printer.writeln('Link to pretty diff:')
@@ -228,16 +243,19 @@
             if user_input == 'q' or user_input == 'quit':
                 return (initial_results, all_retry_results)
 
-    def _run_test_once(self, tests_to_run, tests_to_skip, should_retry_failures):
-        num_workers = self._port.num_workers(int(self._options.child_processes))
+    def _run_test_once(self, tests_to_run, tests_to_skip,
+                       should_retry_failures):
+        num_workers = self._port.num_workers(
+            int(self._options.child_processes))
 
         initial_results = self._run_tests(
-            tests_to_run, tests_to_skip, self._options.repeat_each, self._options.iterations,
-            num_workers)
+            tests_to_run, tests_to_skip, self._options.repeat_each,
+            self._options.iterations, num_workers)
 
         # Don't retry failures when interrupted by user or failures limit exception.
         should_retry_failures = should_retry_failures and not (
-            initial_results.interrupted or initial_results.keyboard_interrupted)
+            initial_results.interrupted
+            or initial_results.keyboard_interrupted)
 
         tests_to_retry = self._tests_to_retry(initial_results)
         all_retry_results = []
@@ -247,32 +265,36 @@
                     break
 
                 _log.info('')
-                _log.info('Retrying %s, attempt %d of %d...',
-                          grammar.pluralize('unexpected failure', len(tests_to_retry)),
-                          retry_attempt, self._options.num_retries)
+                _log.info(
+                    'Retrying %s, attempt %d of %d...',
+                    grammar.pluralize('unexpected failure',
+                                      len(tests_to_retry)), retry_attempt,
+                    self._options.num_retries)
 
-                retry_results = self._run_tests(tests_to_retry,
-                                                tests_to_skip=set(),
-                                                repeat_each=1,
-                                                iterations=1,
-                                                num_workers=num_workers,
-                                                retry_attempt=retry_attempt)
+                retry_results = self._run_tests(
+                    tests_to_retry,
+                    tests_to_skip=set(),
+                    repeat_each=1,
+                    iterations=1,
+                    num_workers=num_workers,
+                    retry_attempt=retry_attempt)
                 all_retry_results.append(retry_results)
 
                 tests_to_retry = self._tests_to_retry(retry_results)
         return (initial_results, all_retry_results)
 
     def _collect_tests(self, args):
-        return self._finder.find_tests(args, test_list=self._options.test_list,
-                                       fastest_percentile=self._options.fastest,
-                                       filters=self._options.isolated_script_test_filter)
+        return self._finder.find_tests(
+            args,
+            test_list=self._options.test_list,
+            fastest_percentile=self._options.fastest,
+            filters=self._options.isolated_script_test_filter)
 
     def _is_http_test(self, test):
         return (
-            test.startswith(self.HTTP_SUBDIR + self._port.TEST_PATH_SEPARATOR) or
-            self._is_websocket_test(test) or
-            self._port.TEST_PATH_SEPARATOR + self.HTTP_SUBDIR + self._port.TEST_PATH_SEPARATOR in test
-        )
+            test.startswith(self.HTTP_SUBDIR + self._port.TEST_PATH_SEPARATOR)
+            or self._is_websocket_test(test) or self._port.TEST_PATH_SEPARATOR
+            + self.HTTP_SUBDIR + self._port.TEST_PATH_SEPARATOR in test)
 
     def _is_websocket_test(self, test):
         if self._port.should_use_wptserve(test):
@@ -284,19 +306,26 @@
         return set(test for test in test_names if self._is_http_test(test))
 
     def _is_perf_test(self, test):
-        return self.PERF_SUBDIR == test or (self.PERF_SUBDIR + self._port.TEST_PATH_SEPARATOR) in test
+        return (self.PERF_SUBDIR == test
+                or (self.PERF_SUBDIR + self._port.TEST_PATH_SEPARATOR) in test)
 
     def _prepare_lists(self, paths, test_names):
-        tests_to_skip = self._finder.skip_tests(paths, test_names, self._expectations, self._http_tests(test_names))
-        tests_to_run = [test for test in test_names if test not in tests_to_skip]
+        tests_to_skip = self._finder.skip_tests(paths, test_names,
+                                                self._expectations,
+                                                self._http_tests(test_names))
+        tests_to_run = [
+            test for test in test_names if test not in tests_to_skip
+        ]
 
         return tests_to_run, tests_to_skip
 
     def _test_input_for_file(self, test_file, retry_attempt):
-        return TestInput(test_file,
-                         self._options.slow_time_out_ms if self._test_is_slow(test_file) else self._options.time_out_ms,
-                         self._test_requires_lock(test_file),
-                         retry_attempt=retry_attempt)
+        return TestInput(
+            test_file,
+            self._options.slow_time_out_ms
+            if self._test_is_slow(test_file) else self._options.time_out_ms,
+            self._test_requires_lock(test_file),
+            retry_attempt=retry_attempt)
 
     def _test_requires_lock(self, test_file):
         """Returns True if the test needs to be locked when running multiple
@@ -310,27 +339,35 @@
     def _test_is_slow(self, test_file):
         if not self._expectations:
             return False
-        is_slow_test = self._expectations.get_expectations(test_file).is_slow_test
+        is_slow_test = self._expectations.get_expectations(
+            test_file).is_slow_test
         return is_slow_test or self._port.is_slow_wpt_test(test_file)
 
     def _needs_servers(self, test_names):
-        return any(self._test_requires_lock(test_name) for test_name in test_names)
+        return any(
+            self._test_requires_lock(test_name) for test_name in test_names)
 
     def _rename_results_folder(self):
         try:
             timestamp = time.strftime(
-                "%Y-%m-%d-%H-%M-%S", time.localtime(
-                    self._filesystem.mtime(self._filesystem.join(self._artifacts_directory, 'results.html'))))
+                "%Y-%m-%d-%H-%M-%S",
+                time.localtime(
+                    self._filesystem.mtime(
+                        self._filesystem.join(self._artifacts_directory,
+                                              'results.html'))))
         except (IOError, OSError) as error:
             # It might be possible that results.html was not generated in previous run, because the test
             # run was interrupted even before testing started. In those cases, don't archive the folder.
             # Simply override the current folder contents with new results.
             import errno
             if error.errno in (errno.EEXIST, errno.ENOENT):
-                self._printer.write_update('No results.html file found in previous run, skipping it.')
+                self._printer.write_update(
+                    'No results.html file found in previous run, skipping it.')
             return None
-        archived_name = ''.join((self._filesystem.basename(self._artifacts_directory), '_', timestamp))
-        archived_path = self._filesystem.join(self._filesystem.dirname(self._artifacts_directory), archived_name)
+        archived_name = ''.join((self._filesystem.basename(
+            self._artifacts_directory), '_', timestamp))
+        archived_path = self._filesystem.join(
+            self._filesystem.dirname(self._artifacts_directory), archived_name)
         self._filesystem.move(self._artifacts_directory, archived_path)
 
     def _delete_dirs(self, dir_list):
@@ -338,21 +375,25 @@
             self._filesystem.rmtree(dir_path)
 
     def _limit_archived_results_count(self):
-        results_directory_path = self._filesystem.dirname(self._artifacts_directory)
+        results_directory_path = self._filesystem.dirname(
+            self._artifacts_directory)
         file_list = self._filesystem.listdir(results_directory_path)
         results_directories = []
         for name in file_list:
             file_path = self._filesystem.join(results_directory_path, name)
-            if self._filesystem.isdir(file_path) and self._artifacts_directory in file_path:
+            if (self._filesystem.isdir(file_path)
+                    and self._artifacts_directory in file_path):
                 results_directories.append(file_path)
         results_directories.sort(key=self._filesystem.mtime)
-        self._printer.write_update('Clobbering excess archived results in %s' % results_directory_path)
+        self._printer.write_update('Clobbering excess archived results in %s' %
+                                   results_directory_path)
         self._delete_dirs(results_directories[:-self.ARCHIVED_RESULTS_LIMIT])
 
     def _set_up_run(self, test_names):
         self._printer.write_update('Checking build ...')
         if self._options.build:
-            exit_code = self._port.check_build(self._needs_servers(test_names), self._printer)
+            exit_code = self._port.check_build(
+                self._needs_servers(test_names), self._printer)
             if exit_code:
                 _log.error('Build check failed')
                 return exit_code
@@ -365,7 +406,8 @@
             self._rename_results_folder()
 
         # Create the output directory if it doesn't already exist.
-        self._port.host.filesystem.maybe_make_directory(self._artifacts_directory)
+        self._port.host.filesystem.maybe_make_directory(
+            self._artifacts_directory)
 
         exit_code = self._port.setup_test_run()
         if exit_code:
@@ -381,8 +423,13 @@
 
         return exit_codes.OK_EXIT_STATUS
 
-    def _run_tests(self, tests_to_run, tests_to_skip, repeat_each, iterations,
-                   num_workers, retry_attempt=0):
+    def _run_tests(self,
+                   tests_to_run,
+                   tests_to_skip,
+                   repeat_each,
+                   iterations,
+                   num_workers,
+                   retry_attempt=0):
 
         test_inputs = []
         for _ in xrange(iterations):
@@ -391,7 +438,8 @@
                     test_inputs.append(
                         self._test_input_for_file(test, retry_attempt))
         return self._runner.run_tests(self._expectations, test_inputs,
-                                      tests_to_skip, num_workers, retry_attempt)
+                                      tests_to_skip, num_workers,
+                                      retry_attempt)
 
     def _start_servers(self, tests_to_run):
         if any(self._port.is_wpt_test(test) for test in tests_to_run):
@@ -399,9 +447,12 @@
             self._port.start_wptserve()
             self._wptserve_started = True
 
-        if self._port.requires_http_server() or any(self._is_http_test(test) for test in tests_to_run):
+        if (self._port.requires_http_server()
+                or any(self._is_http_test(test) for test in tests_to_run)):
             self._printer.write_update('Starting HTTP server ...')
-            self._port.start_http_server(additional_dirs={}, number_of_drivers=self._options.max_locked_shards)
+            self._port.start_http_server(
+                additional_dirs={},
+                number_of_drivers=self._options.max_locked_shards)
             self._http_server_started = True
 
         if any(self._is_websocket_test(test) for test in tests_to_run):
@@ -454,27 +505,31 @@
             if result.type != ResultType.Crash:
                 continue
             for failure in result.failures:
-                if (not isinstance(failure, test_failures.FailureCrash) or
-                        failure.has_log):
+                if (not isinstance(failure, test_failures.FailureCrash)
+                        or failure.has_log):
                     continue
-                crashed_processes.append([test, failure.process_name, failure.pid])
+                crashed_processes.append(
+                    [test, failure.process_name, failure.pid])
                 test_to_crash_failure[test] = failure
 
-        sample_files = self._port.look_for_new_samples(
-            crashed_processes, start_time) or {}
+        sample_files = self._port.look_for_new_samples(crashed_processes,
+                                                       start_time) or {}
         for test, sample_file in sample_files.iteritems():
             test_failures.AbstractTestResultType.test_name = test
             test_result = run_results.unexpected_results_by_name[test]
             artifact_relative_path = self._port.output_filename(
                 test, test_failures.FILENAME_SUFFIX_SAMPLE, '.txt')
             artifacts_sub_dir = test_result.artifacts.ArtifactsSubDirectory()
-            artifact_abspath = self._filesystem.join(
-                self._results_directory, artifacts_sub_dir, artifact_relative_path)
+            artifact_abspath = self._filesystem.join(self._results_directory,
+                                                     artifacts_sub_dir,
+                                                     artifact_relative_path)
             self._filesystem.maybe_make_directory(
                 self._filesystem.dirname(artifact_abspath))
             self._filesystem.copyfile(sample_file, artifact_abspath)
-            test_result.artifacts.AddArtifact('sample_file',
-                self._filesystem.join(artifacts_sub_dir, artifact_relative_path))
+            test_result.artifacts.AddArtifact(
+                'sample_file',
+                self._filesystem.join(artifacts_sub_dir,
+                                      artifact_relative_path))
 
         new_crash_logs = self._port.look_for_new_crash_logs(
             crashed_processes, start_time) or {}
@@ -489,15 +544,18 @@
                 test_result.artifacts, force_overwrite=True)
 
     def _clobber_old_results(self):
-        dir_above_results_path = self._filesystem.dirname(self._artifacts_directory)
-        self._printer.write_update('Clobbering old results in %s.' % dir_above_results_path)
+        dir_above_results_path = self._filesystem.dirname(
+            self._artifacts_directory)
+        self._printer.write_update(
+            'Clobbering old results in %s.' % dir_above_results_path)
         if not self._filesystem.exists(dir_above_results_path):
             return
         file_list = self._filesystem.listdir(dir_above_results_path)
         results_directories = []
         for name in file_list:
             file_path = self._filesystem.join(dir_above_results_path, name)
-            if self._filesystem.isdir(file_path) and self._artifacts_directory in file_path:
+            if (self._filesystem.isdir(file_path)
+                    and self._artifacts_directory in file_path):
                 results_directories.append(file_path)
         self._delete_dirs(results_directories)
 
@@ -508,39 +566,59 @@
         # TODO(ojan): This should also check that result.type != test_expectations.MISSING
         # since retrying missing expectations is silly. But that's a bit tricky since we
         # only consider the last retry attempt for the count of unexpected regressions.
-        return [result.test_name for result in run_results.unexpected_results_by_name.values(
-        ) if result.type != ResultType.Pass]
+        return [
+            result.test_name
+            for result in run_results.unexpected_results_by_name.values()
+            if result.type != ResultType.Pass
+        ]
 
-    def _write_json_files(self, summarized_full_results, summarized_failing_results, initial_results, running_all_tests):
+    def _write_json_files(self, summarized_full_results,
+                          summarized_failing_results, initial_results,
+                          running_all_tests):
         _log.debug("Writing JSON files in %s.", self._artifacts_directory)
 
         # FIXME: Upload stats.json to the server and delete times_ms.
-        times_trie = json_results_generator.test_timings_trie(initial_results.results_by_name.values())
-        times_json_path = self._filesystem.join(self._artifacts_directory, 'times_ms.json')
-        json_results_generator.write_json(self._filesystem, times_trie, times_json_path)
+        times_trie = json_results_generator.test_timings_trie(
+            initial_results.results_by_name.values())
+        times_json_path = self._filesystem.join(self._artifacts_directory,
+                                                'times_ms.json')
+        json_results_generator.write_json(self._filesystem, times_trie,
+                                          times_json_path)
 
         # Save out the times data so we can use it for --fastest in the future.
         if running_all_tests:
             bot_test_times_path = self._port.bot_test_times_path()
-            self._filesystem.maybe_make_directory(self._filesystem.dirname(bot_test_times_path))
-            json_results_generator.write_json(self._filesystem, times_trie, bot_test_times_path)
+            self._filesystem.maybe_make_directory(
+                self._filesystem.dirname(bot_test_times_path))
+            json_results_generator.write_json(self._filesystem, times_trie,
+                                              bot_test_times_path)
 
         stats_trie = self._stats_trie(initial_results)
-        stats_path = self._filesystem.join(self._artifacts_directory, 'stats.json')
+        stats_path = self._filesystem.join(self._artifacts_directory,
+                                           'stats.json')
         self._filesystem.write_text_file(stats_path, json.dumps(stats_trie))
 
-        full_results_path = self._filesystem.join(self._artifacts_directory, 'full_results.json')
-        json_results_generator.write_json(self._filesystem, summarized_full_results, full_results_path)
+        full_results_path = self._filesystem.join(self._artifacts_directory,
+                                                  'full_results.json')
+        json_results_generator.write_json(
+            self._filesystem, summarized_full_results, full_results_path)
 
-        full_results_jsonp_path = self._filesystem.join(self._artifacts_directory, 'full_results_jsonp.js')
-        json_results_generator.write_json(self._filesystem,
-                                          summarized_full_results,
-                                          full_results_jsonp_path,
-                                          callback='ADD_FULL_RESULTS')
-        full_results_path = self._filesystem.join(self._artifacts_directory, 'failing_results.json')
+        full_results_jsonp_path = self._filesystem.join(
+            self._artifacts_directory, 'full_results_jsonp.js')
+        json_results_generator.write_json(
+            self._filesystem,
+            summarized_full_results,
+            full_results_jsonp_path,
+            callback='ADD_FULL_RESULTS')
+        full_results_path = self._filesystem.join(self._artifacts_directory,
+                                                  'failing_results.json')
         # We write failing_results.json out as jsonp because we need to load it
         # from a file url for results.html and Chromium doesn't allow that.
-        json_results_generator.write_json(self._filesystem, summarized_failing_results, full_results_path, callback='ADD_RESULTS')
+        json_results_generator.write_json(
+            self._filesystem,
+            summarized_failing_results,
+            full_results_path,
+            callback='ADD_RESULTS')
 
         # Write out the JSON files suitable for other tools to process.
         # As the output can be quite large (as there are 60k+ tests) we also
@@ -548,9 +626,13 @@
         if self._options.json_failing_test_results:
             # FIXME(tansell): Make sure this includes an *unexpected* results
             # (IE Passing when expected to be failing.)
-            json_results_generator.write_json(self._filesystem, summarized_failing_results, self._options.json_failing_test_results)
+            json_results_generator.write_json(
+                self._filesystem, summarized_failing_results,
+                self._options.json_failing_test_results)
         if self._options.json_test_results:
-            json_results_generator.write_json(self._filesystem, summarized_full_results, self._options.json_test_results)
+            json_results_generator.write_json(self._filesystem,
+                                              summarized_full_results,
+                                              self._options.json_test_results)
 
         _log.debug('Finished writing JSON files.')
 
@@ -559,28 +641,36 @@
             return
 
         if not self._options.master_name:
-            _log.error('--test-results-server was set, but --master-name was not.  Not uploading JSON files.')
+            _log.error(
+                '--test-results-server was set, but --master-name was not.  Not uploading JSON files.'
+            )
             return
 
-        _log.debug('Uploading JSON files for builder: %s', self._options.builder_name)
+        _log.debug('Uploading JSON files for builder: %s',
+                   self._options.builder_name)
         attrs = [('builder', self._options.builder_name),
                  ('testtype', self._options.step_name),
                  ('master', self._options.master_name)]
 
-        files = [(name, self._filesystem.join(self._artifacts_directory, name))
-                 for name in ['failing_results.json', 'full_results.json', 'times_ms.json']]
+        files = [
+            (name, self._filesystem.join(self._artifacts_directory, name))
+            for name in
+            ['failing_results.json', 'full_results.json', 'times_ms.json']
+        ]
 
         url = 'https://%s/testfile/upload' % self._options.test_results_server
         # Set uploading timeout in case appengine server is having problems.
         # 120 seconds are more than enough to upload test results.
         uploader = FileUploader(url, 120)
         try:
-            response = uploader.upload_as_multipart_form_data(self._filesystem, files, attrs)
+            response = uploader.upload_as_multipart_form_data(
+                self._filesystem, files, attrs)
             if response:
                 if response.code == 200:
                     _log.debug('JSON uploaded.')
                 else:
-                    _log.debug('JSON upload failed, %d: "%s"', response.code, response.read())
+                    _log.debug('JSON upload failed, %d: "%s"', response.code,
+                               response.read())
             else:
                 _log.error('JSON upload failed; no response returned')
         except IOError as err:
@@ -604,8 +694,12 @@
         stats = {}
         for result in initial_results.results_by_name.values():
             if result.type != ResultType.Skip:
-                stats[result.test_name] = {'results': (_worker_number(result.worker_name), result.test_number, result.pid, int(
-                    result.test_run_time * 1000), int(result.total_run_time * 1000))}
+                stats[result.test_name] = {
+                    'results': (_worker_number(result.worker_name),
+                                result.test_number, result.pid,
+                                int(result.test_run_time * 1000),
+                                int(result.total_run_time * 1000))
+                }
         stats_trie = {}
         for name, value in stats.iteritems():
             json_results_generator.add_path_to_trie(name, value, stats_trie)
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py b/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py
index e205215..14e5ce3 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py
@@ -26,7 +26,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit tests for manager.py."""
 
 import optparse
@@ -40,18 +39,22 @@
 
 
 class FakePrinter(object):
-
     def write_update(self, s):
         pass
 
 
 class ManagerTest(unittest.TestCase):
-
     def test_needs_servers(self):
         def get_manager():
             host = MockHost()
             port = host.port_factory.get('test-mac-mac10.10')
-            manager = Manager(port, options=optparse.Values({'http': True, 'max_locked_shards': 1}), printer=FakePrinter())
+            manager = Manager(
+                port,
+                options=optparse.Values({
+                    'http': True,
+                    'max_locked_shards': 1
+                }),
+                printer=FakePrinter())
             return manager
 
         manager = get_manager()
@@ -62,7 +65,13 @@
 
     def test_servers_started(self):
         def get_manager(port):
-            manager = Manager(port, options=optparse.Values({'http': True, 'max_locked_shards': 1}), printer=FakePrinter())
+            manager = Manager(
+                port,
+                options=optparse.Values({
+                    'http': True,
+                    'max_locked_shards': 1
+                }),
+                printer=FakePrinter())
             return manager
 
         def start_http_server(additional_dirs, number_of_drivers):
@@ -115,9 +124,14 @@
             port = host.port_factory.get('test-mac-mac10.10')
             manager = Manager(
                 port,
-                options=optparse.Values({'test_list': None, 'http': True, 'max_locked_shards': 1}),
+                options=optparse.Values({
+                    'test_list': None,
+                    'http': True,
+                    'max_locked_shards': 1
+                }),
                 printer=FakePrinter())
             return manager
+
         host = MockHost()
         port = host.port_factory.get('test-mac-mac10.10')
         tests = ['failures/expected/crash.html']
@@ -128,23 +142,35 @@
 
     def _make_fake_test_result(self, host, results_directory):
         host.filesystem.maybe_make_directory(results_directory)
-        host.filesystem.write_binary_file(results_directory + '/results.html', 'This is a test results file')
+        host.filesystem.write_binary_file(results_directory + '/results.html',
+                                          'This is a test results file')
 
     def test_rename_results_folder(self):
         host = MockHost()
         port = host.port_factory.get('test-mac-mac10.10')
 
         def get_manager():
-            manager = Manager(port, options=optparse.Values({'max_locked_shards': 1}), printer=FakePrinter())
+            manager = Manager(
+                port,
+                options=optparse.Values({
+                    'max_locked_shards': 1
+                }),
+                printer=FakePrinter())
             return manager
+
         self._make_fake_test_result(port.host, '/tmp/layout-test-results')
-        self.assertTrue(port.host.filesystem.exists('/tmp/layout-test-results'))
+        self.assertTrue(
+            port.host.filesystem.exists('/tmp/layout-test-results'))
         timestamp = time.strftime(
-            '%Y-%m-%d-%H-%M-%S', time.localtime(port.host.filesystem.mtime('/tmp/layout-test-results/results.html')))
+            '%Y-%m-%d-%H-%M-%S',
+            time.localtime(
+                port.host.filesystem.mtime(
+                    '/tmp/layout-test-results/results.html')))
         archived_file_name = '/tmp/layout-test-results' + '_' + timestamp
         manager = get_manager()
         manager._rename_results_folder()
-        self.assertFalse(port.host.filesystem.exists('/tmp/layout-test-results'))
+        self.assertFalse(
+            port.host.filesystem.exists('/tmp/layout-test-results'))
         self.assertTrue(port.host.filesystem.exists(archived_file_name))
 
     def test_clobber_old_results(self):
@@ -152,21 +178,35 @@
         port = host.port_factory.get('test-mac-mac10.10')
 
         def get_manager():
-            manager = Manager(port, options=optparse.Values({'max_locked_shards': 1}), printer=FakePrinter())
+            manager = Manager(
+                port,
+                options=optparse.Values({
+                    'max_locked_shards': 1
+                }),
+                printer=FakePrinter())
             return manager
+
         self._make_fake_test_result(port.host, '/tmp/layout-test-results')
-        self.assertTrue(port.host.filesystem.exists('/tmp/layout-test-results'))
+        self.assertTrue(
+            port.host.filesystem.exists('/tmp/layout-test-results'))
         manager = get_manager()
         manager._clobber_old_results()
-        self.assertFalse(port.host.filesystem.exists('/tmp/layout-test-results'))
+        self.assertFalse(
+            port.host.filesystem.exists('/tmp/layout-test-results'))
 
     def test_limit_archived_results_count(self):
         host = MockHost()
         port = host.port_factory.get('test-mac-mac10.10')
 
         def get_manager():
-            manager = Manager(port, options=optparse.Values({'max_locked_shards': 1}), printer=FakePrinter())
+            manager = Manager(
+                port,
+                options=optparse.Values({
+                    'max_locked_shards': 1
+                }),
+                printer=FakePrinter())
             return manager
+
         for x in range(1, 31):
             dir_name = '/tmp/layout-test-results' + '_' + str(x)
             self._make_fake_test_result(port.host, dir_name)
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/repaint_overlay.py b/third_party/blink/tools/blinkpy/web_tests/controllers/repaint_overlay.py
index eb26037..e47871b 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/repaint_overlay.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/repaint_overlay.py
@@ -6,7 +6,8 @@
 
 
 def result_contains_repaint_rects(text):
-    return isinstance(text, str) and re.search(r'"invalidations": \[$', text, re.MULTILINE) is not None
+    return (isinstance(text, str) and
+            re.search(r'"invalidations": \[$', text, re.MULTILINE) is not None)
 
 
 def extract_layer_tree(input_str):
@@ -29,7 +30,8 @@
 
 
 def generate_repaint_overlay_html(test_name, actual_text, expected_text):
-    if not result_contains_repaint_rects(actual_text) and not result_contains_repaint_rects(expected_text):
+    if (not result_contains_repaint_rects(actual_text)
+            and not result_contains_repaint_rects(expected_text)):
         return ''
 
     expected_layer_tree = extract_layer_tree(expected_text)
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/repaint_overlay_unittest.py b/third_party/blink/tools/blinkpy/web_tests/controllers/repaint_overlay_unittest.py
index 7a14ad5..bafa139 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/repaint_overlay_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/repaint_overlay_unittest.py
@@ -7,7 +7,6 @@
 from blinkpy.common.host import Host
 from blinkpy.web_tests.controllers import repaint_overlay
 
-
 LAYER_TREE = """{
   "layers": [
     {
@@ -30,13 +29,14 @@
 
 
 class TestRepaintOverlay(unittest.TestCase):
-
     def test_result_contains_repaint_rects(self):
-        self.assertTrue(repaint_overlay.result_contains_repaint_rects(LAYER_TREE))
+        self.assertTrue(
+            repaint_overlay.result_contains_repaint_rects(LAYER_TREE))
         self.assertFalse(repaint_overlay.result_contains_repaint_rects('ABCD'))
 
     def test_extract_layer_tree(self):
-        self.assertEquals(LAYER_TREE, repaint_overlay.extract_layer_tree(LAYER_TREE))
+        self.assertEquals(LAYER_TREE,
+                          repaint_overlay.extract_layer_tree(LAYER_TREE))
 
     def test_generate_repaint_overlay_html(self):
         test_name = 'paint/invalidation/repaint-overlay/layers.html'
@@ -48,18 +48,23 @@
             return
 
         layer_tree = str(host.filesystem.read_text_file(layer_tree_file))
-        self.assertTrue(repaint_overlay.result_contains_repaint_rects(layer_tree))
+        self.assertTrue(
+            repaint_overlay.result_contains_repaint_rects(layer_tree))
         overlay_html = (
-            '<!-- Generated by third_party/blink/tools/run_blinkpy_tests.py\n' +
-            ' test case: TestRepaintOverlay.test_generate_repaint_overlay_html. -->\n' +
-            repaint_overlay.generate_repaint_overlay_html(test_name, layer_tree, layer_tree))
+            '<!-- Generated by third_party/blink/tools/run_blinkpy_tests.py\n'
+            +
+            ' test case: TestRepaintOverlay.test_generate_repaint_overlay_html. -->\n'
+            + repaint_overlay.generate_repaint_overlay_html(
+                test_name, layer_tree, layer_tree))
 
         results_directory = port.results_directory()
         host.filesystem.maybe_make_directory(results_directory)
-        actual_overlay_html_file = host.filesystem.join(results_directory, 'layers-overlay.html')
+        actual_overlay_html_file = host.filesystem.join(
+            results_directory, 'layers-overlay.html')
         host.filesystem.write_text_file(actual_overlay_html_file, overlay_html)
 
-        overlay_html_file = port.abspath_for_test('paint/invalidation/repaint-overlay/layers-overlay.html')
+        overlay_html_file = port.abspath_for_test(
+            'paint/invalidation/repaint-overlay/layers-overlay.html')
         expected = host.filesystem.read_text_file(overlay_html_file)
 
         self.assertEquals(
@@ -68,5 +73,5 @@
             'Please examine the diffs:\n  diff %s %s\n'
             'If the diffs are valid, update the file:\n  cp %s %s\n'
             'then update layers-overlay-expected.html in the same directory if needed,'
-            ' and commit the files together with the changed repaint_overlay.py.' %
+            ' and commit the files together with the changed repaint_overlay.py.' % \
             (overlay_html_file, actual_overlay_html_file, actual_overlay_html_file, overlay_html_file))
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py b/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
index c665eecb..db14311 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
@@ -26,7 +26,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-
 import hashlib
 import logging
 import re
@@ -36,12 +35,13 @@
 from blinkpy.web_tests.models.test_results import TestResult, build_test_result
 from blinkpy.web_tests.models import testharness_results
 
-
 _log = logging.getLogger(__name__)
 
 
-def run_single_test(port, options, results_directory, worker_name, driver, test_input):
-    runner = SingleTestRunner(port, options, results_directory, worker_name, driver, test_input)
+def run_single_test(port, options, results_directory, worker_name, driver,
+                    test_input):
+    runner = SingleTestRunner(port, options, results_directory, worker_name,
+                              driver, test_input)
     try:
         test_result = runner.run()
         if not options.no_expectations:
@@ -53,7 +53,8 @@
 
 
 class SingleTestRunner(object):
-    def __init__(self, port, options, results_directory, worker_name, driver, test_input):
+    def __init__(self, port, options, results_directory, worker_name, driver,
+                 test_input):
         self._port = port
         self._filesystem = port.host.filesystem
         self._options = options
@@ -69,16 +70,18 @@
         test_failures.AbstractTestResultType.test_name = test_input.test_name
         test_failures.AbstractTestResultType.result_directory = results_directory
         test_failures.AbstractTestResultType.filesystem = self._filesystem
-        TestResult.repeat_tests = (
-            self._options.watch or self._options.repeat_each > 1 or self._options.iterations > 1)
+        TestResult.repeat_tests = (self._options.watch
+                                   or self._options.repeat_each > 1
+                                   or self._options.iterations > 1)
         TestResult.results_directory = self._results_directory
         TestResult.filesystem = port.host.filesystem
 
     def _expected_driver_output(self):
-        return DriverOutput(self._port.expected_text(self._test_name),
-                            self._port.expected_image(self._test_name),
-                            self._port.expected_checksum(self._test_name),
-                            self._port.expected_audio(self._test_name))
+        return DriverOutput(
+            self._port.expected_text(self._test_name),
+            self._port.expected_image(self._test_name),
+            self._port.expected_checksum(self._test_name),
+            self._port.expected_audio(self._test_name))
 
     def _should_fetch_expected_checksum(self):
         return not self._options.reset_results
@@ -99,7 +102,8 @@
     def run(self):
         # WPT crash tests do not have baselines, so even when re-baselining we
         # run them as normal.
-        if self._options.enable_sanitizer or self._port.is_wpt_crash_test(self._test_name):
+        if (self._options.enable_sanitizer
+                or self._port.is_wpt_crash_test(self._test_name)):
             return self._run_crash_test()
         if self._options.reset_results or self._options.copy_baselines:
             return self._run_rebaseline()
@@ -117,9 +121,13 @@
         failures = self._handle_error(driver_output)
 
         test_result = build_test_result(
-            driver_output, self._test_name, retry_attempt=self._retry_attempt,
-            failures=failures, test_run_time=driver_output.test_time,
-            pid=driver_output.pid, crash_site=driver_output.crash_site)
+            driver_output,
+            self._test_name,
+            retry_attempt=self._retry_attempt,
+            failures=failures,
+            test_run_time=driver_output.test_time,
+            pid=driver_output.pid,
+            crash_site=driver_output.crash_site)
         return test_result
 
     def _run_compare_test(self):
@@ -129,9 +137,13 @@
         failures = self._compare_output(expected_driver_output, driver_output)
 
         return build_test_result(
-            driver_output, self._test_name, retry_attempt=self._retry_attempt,
-            failures=failures, test_run_time=driver_output.test_time,
-            pid=driver_output.pid, crash_site=driver_output.crash_site)
+            driver_output,
+            self._test_name,
+            retry_attempt=self._retry_attempt,
+            failures=failures,
+            test_run_time=driver_output.test_time,
+            pid=driver_output.pid,
+            crash_site=driver_output.crash_site)
 
     def _run_rebaseline(self):
         """Similar to _run_compare_test(), but has the side effect of updating
@@ -141,8 +153,8 @@
         driver_output = self._driver.run_test(self._driver_input())
         expected_driver_output = self._expected_driver_output()
 
-        all_failures = self._compare_output(
-            expected_driver_output, driver_output)
+        all_failures = self._compare_output(expected_driver_output,
+                                            driver_output)
 
         if self._options.reset_results:
             # Only report leaks, timeouts and crashes and treat all other
@@ -156,14 +168,20 @@
         self._update_or_add_new_baselines(driver_output, all_failures)
 
         return build_test_result(
-            driver_output, self._test_name, retry_attempt=self._retry_attempt,
-            failures=reported_failures, test_run_time=driver_output.test_time,
-            pid=driver_output.pid, crash_site=driver_output.crash_site)
+            driver_output,
+            self._test_name,
+            retry_attempt=self._retry_attempt,
+            failures=reported_failures,
+            test_run_time=driver_output.test_time,
+            pid=driver_output.pid,
+            crash_site=driver_output.crash_site)
 
     def _update_or_add_new_baselines(self, driver_output, failures):
         """Updates or adds new baselines for the test if necessary."""
-        if (test_failures.has_failure_type(test_failures.FailureTimeout, failures) or
-            test_failures.has_failure_type(test_failures.FailureCrash, failures)):
+        if (test_failures.has_failure_type(test_failures.FailureTimeout,
+                                           failures)
+                or test_failures.has_failure_type(test_failures.FailureCrash,
+                                                  failures)):
             return
         # We usually don't want to create a new baseline if there isn't one
         # existing (which usually means this baseline isn't necessary, e.g.
@@ -175,61 +193,78 @@
         #    if there are failed assertions we need to create a new baseline.
         #    Note that the created baseline might be redundant, but users can
         #    optimize them later with optimize-baselines.
-        if self._is_all_pass_testharness_text_not_needing_baseline(driver_output.text):
+        if self._is_all_pass_testharness_text_not_needing_baseline(
+                driver_output.text):
             driver_output.text = None
         self._save_baseline_data(
             driver_output.text, '.txt',
-            test_failures.has_failure_type(test_failures.FailureMissingResult, failures) or
-            test_failures.has_failure_type(test_failures.FailureTestHarnessAssertion, failures))
+            test_failures.has_failure_type(test_failures.FailureMissingResult,
+                                           failures)
+            or test_failures.has_failure_type(
+                test_failures.FailureTestHarnessAssertion, failures))
         self._save_baseline_data(
             driver_output.audio, '.wav',
-            test_failures.has_failure_type(test_failures.FailureMissingAudio, failures))
+            test_failures.has_failure_type(test_failures.FailureMissingAudio,
+                                           failures))
 
         expected_png = driver_output.image
         if self._reference_files:
-            _log.warning('Can not rebaseline the image baseline of reftest %s', self._test_name)
+            _log.warning('Can not rebaseline the image baseline of reftest %s',
+                         self._test_name)
             # Let _save_baseline_data remove the '-expected.png' if it exists.
             expected_png = None
         self._save_baseline_data(
             expected_png, '.png',
-            test_failures.has_failure_type(test_failures.FailureMissingImage, failures))
+            test_failures.has_failure_type(test_failures.FailureMissingImage,
+                                           failures))
 
     def _save_baseline_data(self, data, extension, force_create_new_baseline):
         port = self._port
         fs = self._filesystem
 
         # Do not create a new baseline unless we are specifically told so.
-        current_expected_path = port.expected_filename(self._test_name, extension, return_default=False)
+        current_expected_path = port.expected_filename(
+            self._test_name, extension, return_default=False)
         if not current_expected_path and not force_create_new_baseline:
             return
 
         flag_specific_dir = port.baseline_flag_specific_dir()
         if flag_specific_dir:
-            output_dir = fs.join(flag_specific_dir, fs.dirname(self._test_name))
+            output_dir = fs.join(flag_specific_dir,
+                                 fs.dirname(self._test_name))
         elif self._options.copy_baselines:
-            output_dir = fs.join(port.baseline_version_dir(), fs.dirname(self._test_name))
+            output_dir = fs.join(port.baseline_version_dir(),
+                                 fs.dirname(self._test_name))
         else:
             output_dir = fs.dirname(
-                port.expected_filename(self._test_name, extension, fallback_base_for_virtual=False))
+                port.expected_filename(
+                    self._test_name,
+                    extension,
+                    fallback_base_for_virtual=False))
 
         fs.maybe_make_directory(output_dir)
-        output_basename = fs.basename(fs.splitext(self._test_name)[0] + '-expected' + extension)
+        output_basename = fs.basename(
+            fs.splitext(self._test_name)[0] + '-expected' + extension)
         output_path = fs.join(output_dir, output_basename)
 
         # Remove |output_path| if it exists and is not the generic expectation to
         # avoid extra baseline if the new baseline is the same as the fallback baseline.
         generic_dir = fs.join(
-            port.web_tests_dir(), fs.dirname(
-                port.lookup_virtual_test_base(self._test_name) or self._test_name))
+            port.web_tests_dir(),
+            fs.dirname(
+                port.lookup_virtual_test_base(self._test_name)
+                or self._test_name))
         if (not data or output_dir != generic_dir) and fs.exists(output_path):
-            _log.info('Removing the current baseline "%s"', port.relative_test_filename(output_path))
+            _log.info('Removing the current baseline "%s"',
+                      port.relative_test_filename(output_path))
             fs.remove(output_path)
 
         # Note that current_expected_path may change because of the above file removal.
-        current_expected_path = port.expected_filename(self._test_name, extension, return_default=False)
+        current_expected_path = port.expected_filename(
+            self._test_name, extension, return_default=False)
         data = data or ''
-        if (current_expected_path and
-                fs.sha1(current_expected_path) == hashlib.sha1(data).hexdigest()):
+        if (current_expected_path and fs.sha1(current_expected_path) ==
+                hashlib.sha1(data).hexdigest()):
             if self._options.reset_results:
                 _log.info(
                     'Not writing new baseline "%s" because it is the same as the current baseline',
@@ -241,22 +276,26 @@
             return
 
         if not data and not current_expected_path:
-            _log.info('Not creating new baseline because the test does not need it')
+            _log.info(
+                'Not creating new baseline because the test does not need it')
             return
         # If the data is empty and the fallback exists, we'll continue to create
         # an empty baseline file to override the fallback baseline.
 
         if self._options.reset_results:
-            _log.info('Writing new baseline "%s"', port.relative_test_filename(output_path))
+            _log.info('Writing new baseline "%s"',
+                      port.relative_test_filename(output_path))
             port.update_baseline(output_path, data)
         else:
-            _log.info('Copying baseline to "%s"', port.relative_test_filename(output_path))
+            _log.info('Copying baseline to "%s"',
+                      port.relative_test_filename(output_path))
             if fs.exists(current_expected_path):
                 fs.copyfile(current_expected_path, output_path)
             else:
                 _log.error(
                     'Could not copy baseline to "%s" from "%s" because the source file does not exist',
-                    port.relative_test_filename(output_path), current_expected_path)
+                    port.relative_test_filename(output_path),
+                    current_expected_path)
 
     def _handle_error(self, driver_output, reference_filename=None):
         """Returns test failures if some unusual errors happen in driver's run.
@@ -270,8 +309,9 @@
         """
         failures = []
         if driver_output.timeout:
-            failures.append(test_failures.FailureTimeout(
-                driver_output, bool(reference_filename)))
+            failures.append(
+                test_failures.FailureTimeout(driver_output,
+                                             bool(reference_filename)))
 
         if reference_filename:
             testname = self._port.relative_test_filename(reference_filename)
@@ -279,21 +319,28 @@
             testname = self._test_name
 
         if driver_output.crash:
-            failures.append(test_failures.FailureCrash(
-                driver_output, is_reftest=bool(reference_filename),
-                process_name=driver_output.crashed_process_name,
-                pid=driver_output.crashed_pid,
-                has_log=self._port.output_contains_sanitizer_messages(driver_output.crash_log)))
+            failures.append(
+                test_failures.FailureCrash(
+                    driver_output,
+                    is_reftest=bool(reference_filename),
+                    process_name=driver_output.crashed_process_name,
+                    pid=driver_output.crashed_pid,
+                    has_log=self._port.output_contains_sanitizer_messages(
+                        driver_output.crash_log)))
             if driver_output.error:
-                _log.debug('%s %s crashed, (stderr lines):', self._worker_name, testname)
+                _log.debug('%s %s crashed, (stderr lines):', self._worker_name,
+                           testname)
             else:
-                _log.debug('%s %s crashed, (no stderr)', self._worker_name, testname)
+                _log.debug('%s %s crashed, (no stderr)', self._worker_name,
+                           testname)
         elif driver_output.leak:
-            failures.append(test_failures.FailureLeak(
-                driver_output, bool(reference_filename)))
+            failures.append(
+                test_failures.FailureLeak(driver_output,
+                                          bool(reference_filename)))
             _log.debug('%s %s leaked', self._worker_name, testname)
         elif driver_output.error:
-            _log.debug('%s %s output stderr lines:', self._worker_name, testname)
+            _log.debug('%s %s output stderr lines:', self._worker_name,
+                       testname)
         for line in driver_output.error.splitlines():
             _log.debug('  %s', line)
         return failures
@@ -309,16 +356,20 @@
             return failures
 
         failures.extend(
-            self._check_extra_and_missing_baselines(expected_driver_output, driver_output))
+            self._check_extra_and_missing_baselines(expected_driver_output,
+                                                    driver_output))
 
         testharness_completed, testharness_failures = self._compare_testharness_test(
             expected_driver_output, driver_output)
         if testharness_completed:
             failures.extend(testharness_failures)
         else:
-            failures.extend(self._compare_text(expected_driver_output, driver_output))
-            failures.extend(self._compare_image(expected_driver_output, driver_output))
-            failures.extend(self._compare_audio(expected_driver_output, driver_output))
+            failures.extend(
+                self._compare_text(expected_driver_output, driver_output))
+            failures.extend(
+                self._compare_image(expected_driver_output, driver_output))
+            failures.extend(
+                self._compare_audio(expected_driver_output, driver_output))
         return failures
 
     def _report_extra_baseline(self, driver_output, extension, message):
@@ -330,25 +381,34 @@
         if self._port.fallback_expected_filename(self._test_name, extension):
             return False
 
-        expected_file = self._port.expected_filename(self._test_name, extension, return_default=False)
+        expected_file = self._port.expected_filename(
+            self._test_name, extension, return_default=False)
         if expected_file:
-            _log.error('%s %s, but has an extra baseline file. Please remove %s' %
-                       (self._test_name, message, expected_file))
+            _log.error(
+                '%s %s, but has an extra baseline file. Please remove %s' %
+                (self._test_name, message, expected_file))
             return True
         return False
 
     def _is_all_pass_testharness_text_not_needing_baseline(self, text_result):
-        return (text_result and testharness_results.is_all_pass_testharness_result(text_result) and
-                # An all-pass testharness test doesn't need the test baseline unless
-                # if it is overriding a fallback one.
-                not self._port.fallback_expected_filename(self._test_name, '.txt'))
+        return (
+            text_result
+            and testharness_results.is_all_pass_testharness_result(text_result)
+            and
+            # An all-pass testharness test doesn't need the test baseline unless
+            # if it is overriding a fallback one.
+            not self._port.fallback_expected_filename(self._test_name, '.txt'))
 
-    def _check_extra_and_missing_baselines(self, expected_driver_output, driver_output):
+    def _check_extra_and_missing_baselines(self, expected_driver_output,
+                                           driver_output):
         failures = []
 
         if driver_output.text:
-            if self._is_all_pass_testharness_text_not_needing_baseline(driver_output.text):
-                if self._report_extra_baseline(driver_output, '.txt', 'is a all-pass testharness test'):
+            if self._is_all_pass_testharness_text_not_needing_baseline(
+                    driver_output.text):
+                if self._report_extra_baseline(
+                        driver_output, '.txt',
+                        'is a all-pass testharness test'):
                     # TODO(wangxianzhu): Make this a failure.
                     pass
             elif testharness_results.is_testharness_output(driver_output.text):
@@ -358,35 +418,46 @@
                 # -expected.txt for testharness tests.
                 pass
             elif not expected_driver_output.text:
-                failures.append(test_failures.FailureMissingResult(
-                    driver_output, expected_driver_output))
-        elif self._report_extra_baseline(driver_output, '.txt', 'does not produce text result'):
-            failures.append(test_failures.FailureTextNotGenerated(
-                driver_output, expected_driver_output))
+                failures.append(
+                    test_failures.FailureMissingResult(driver_output,
+                                                       expected_driver_output))
+        elif self._report_extra_baseline(driver_output, '.txt',
+                                         'does not produce text result'):
+            failures.append(
+                test_failures.FailureTextNotGenerated(driver_output,
+                                                      expected_driver_output))
 
         if driver_output.image_hash:
             if self._reference_files:
-                if self._report_extra_baseline(driver_output, '.png', 'is a reftest'):
+                if self._report_extra_baseline(driver_output, '.png',
+                                               'is a reftest'):
                     # TODO(wangxianzhu): Make this a failure.
                     pass
             else:
                 if not expected_driver_output.image:
-                    failures.append(test_failures.FailureMissingImage(
-                        driver_output, expected_driver_output))
+                    failures.append(
+                        test_failures.FailureMissingImage(
+                            driver_output, expected_driver_output))
                 elif not expected_driver_output.image_hash:
-                    failures.append(test_failures.FailureMissingImageHash(
-                        driver_output, expected_driver_output))
-        elif self._report_extra_baseline(driver_output, '.png', 'does not produce image result'):
-            failures.append(test_failures.FailureImageHashNotGenerated(
-                driver_output, expected_driver_output))
+                    failures.append(
+                        test_failures.FailureMissingImageHash(
+                            driver_output, expected_driver_output))
+        elif self._report_extra_baseline(driver_output, '.png',
+                                         'does not produce image result'):
+            failures.append(
+                test_failures.FailureImageHashNotGenerated(
+                    driver_output, expected_driver_output))
 
         if driver_output.audio:
             if not expected_driver_output.audio:
-                failures.append(test_failures.FailureMissingAudio(
-                    driver_output, expected_driver_output))
-        elif self._report_extra_baseline(driver_output, '.wav', 'does not produce audio result'):
-            failures.append(test_failures.FailureAudioNotGenerated(
-                driver_output, expected_driver_output))
+                failures.append(
+                    test_failures.FailureMissingAudio(driver_output,
+                                                      expected_driver_output))
+        elif self._report_extra_baseline(driver_output, '.wav',
+                                         'does not produce audio result'):
+            failures.append(
+                test_failures.FailureAudioNotGenerated(driver_output,
+                                                       expected_driver_output))
 
         return failures
 
@@ -399,9 +470,12 @@
             return False, []
         if not testharness_results.is_testharness_output(driver_output.text):
             return False, []
-        if not testharness_results.is_testharness_output_passing(driver_output.text):
-            return True, [test_failures.FailureTestHarnessAssertion(
-                driver_output, expected_driver_output)]
+        if not testharness_results.is_testharness_output_passing(
+                driver_output.text):
+            return True, [
+                test_failures.FailureTestHarnessAssertion(
+                    driver_output, expected_driver_output)
+            ]
         return True, []
 
     def _is_render_tree(self, text):
@@ -418,7 +492,8 @@
 
         normalized_actual_text = self._get_normalized_output_text(actual_text)
         # Assuming expected_text is already normalized.
-        if not self._port.do_text_results_differ(expected_text, normalized_actual_text):
+        if not self._port.do_text_results_differ(expected_text,
+                                                 normalized_actual_text):
             return []
 
         # Determine the text mismatch type
@@ -429,16 +504,22 @@
             return text
 
         def remove_ng_text(results):
-            processed = re.sub(r'LayoutNG(BlockFlow|ListItem|TableCell|FlexibleBox)', r'Layout\1', results)
+            processed = re.sub(
+                r'LayoutNG(BlockFlow|ListItem|TableCell|FlexibleBox)',
+                r'Layout\1', results)
             # LayoutTableCaption doesn't override LayoutBlockFlow::GetName, so
             # render tree dumps have "LayoutBlockFlow" for captions.
-            processed = re.sub('LayoutNGTableCaption', 'LayoutBlockFlow', processed)
+            processed = re.sub('LayoutNGTableCaption', 'LayoutBlockFlow',
+                               processed)
             return processed
 
         def is_ng_name_mismatch(expected, actual):
-            if not re.search("LayoutNG(BlockFlow|ListItem|TableCaption|TableCell|FlexibleBox)", actual):
+            if not re.search(
+                    "LayoutNG(BlockFlow|ListItem|TableCaption|TableCell|FlexibleBox)",
+                    actual):
                 return False
-            if not self._is_render_tree(actual) and not self._is_layer_tree(actual):
+            if (not self._is_render_tree(actual)
+                    and not self._is_layer_tree(actual)):
                 return False
             # There's a mix of NG and legacy names in both expected and actual,
             # so just remove NG from both.
@@ -454,34 +535,44 @@
         if self._port.do_text_results_differ(
                 remove_chars(expected_text, ' \t\n'),
                 remove_chars(normalized_actual_text, ' \t\n')):
-            return [test_failures.FailureTextMismatch(
-                driver_output, expected_driver_output)]
+            return [
+                test_failures.FailureTextMismatch(driver_output,
+                                                  expected_driver_output)
+            ]
 
         # Space-only mismatch
         if not self._port.do_text_results_differ(
                 remove_chars(expected_text, ' \t'),
                 remove_chars(normalized_actual_text, ' \t')):
-            return [test_failures.FailureSpacesAndTabsTextMismatch(
-                driver_output, expected_driver_output)]
+            return [
+                test_failures.FailureSpacesAndTabsTextMismatch(
+                    driver_output, expected_driver_output)
+            ]
 
         # Newline-only mismatch
         if not self._port.do_text_results_differ(
                 remove_chars(expected_text, '\n'),
                 remove_chars(normalized_actual_text, '\n')):
-            return [test_failures.FailureLineBreaksTextMismatch(
-                driver_output, expected_driver_output)]
+            return [
+                test_failures.FailureLineBreaksTextMismatch(
+                    driver_output, expected_driver_output)
+            ]
 
         # Spaces and newlines
-        return [test_failures.FailureSpaceTabLineBreakTextMismatch(
-            driver_output, expected_driver_output)]
+        return [
+            test_failures.FailureSpaceTabLineBreakTextMismatch(
+                driver_output, expected_driver_output)
+        ]
 
     def _compare_audio(self, expected_driver_output, driver_output):
         if not expected_driver_output.audio or not driver_output.audio:
             return []
-        if self._port.do_audio_results_differ(
-            expected_driver_output.audio, driver_output.audio):
-            return [test_failures.FailureAudioMismatch(
-                        driver_output, expected_driver_output)]
+        if self._port.do_audio_results_differ(expected_driver_output.audio,
+                                              driver_output.audio):
+            return [
+                test_failures.FailureAudioMismatch(driver_output,
+                                                   expected_driver_output)
+            ]
         return []
 
     def _get_normalized_output_text(self, output):
@@ -505,8 +596,8 @@
             return []
 
         if driver_output.image_hash != expected_driver_output.image_hash:
-            diff, err_str = self._port.diff_image(
-                expected_driver_output.image, driver_output.image)
+            diff, err_str = self._port.diff_image(expected_driver_output.image,
+                                                  driver_output.image)
 
             if diff:
                 driver_output.image_diff = diff
@@ -518,12 +609,13 @@
             if diff or err_str:
                 return [
                     test_failures.FailureImageHashMismatch(
-                        driver_output, expected_driver_output)]
+                        driver_output, expected_driver_output)
+                ]
             else:
                 # See https://bugs.webkit.org/show_bug.cgi?id=69444 for why this
                 # isn't a full failure.
-                _log.warning(
-                    '  %s -> pixel hash failed (but diff passed)', self._test_name)
+                _log.warning('  %s -> pixel hash failed (but diff passed)',
+                             self._test_name)
 
         return []
 
@@ -537,17 +629,21 @@
         # This _compare_output compares text if expected text exists, ignores
         # image, checks for extra baselines, and generates crash or timeout
         # failures if needed.
-        compare_text_failures = self._compare_output(
-            expected_text_output, test_output)
+        compare_text_failures = self._compare_output(expected_text_output,
+                                                     test_output)
 
         # If the test crashed, or timed out,  or a leak was detected, there's no point
         # in running the reference at all. This can save a lot of execution time if we
         # have a lot of crashes or timeouts.
         if test_output.crash or test_output.timeout or test_output.leak:
             return build_test_result(
-                test_output, self._test_name, retry_attempt=self._retry_attempt,
-                failures=compare_text_failures, test_run_time=test_output.test_time,
-                pid=test_output.pid, crash_site=test_output.crash_site)
+                test_output,
+                self._test_name,
+                retry_attempt=self._retry_attempt,
+                failures=compare_text_failures,
+                test_run_time=test_output.test_time,
+                pid=test_output.pid,
+                crash_site=test_output.crash_site)
 
         # A reftest can have multiple match references and multiple mismatch references;
         # the test fails if any mismatch matches and all of the matches don't match.
@@ -562,17 +658,22 @@
 
         # sort self._reference_files to put mismatch tests first
         for expectation, reference_filename in sorted(self._reference_files):
-            reference_test_name = self._port.relative_test_filename(reference_filename)
+            reference_test_name = self._port.relative_test_filename(
+                reference_filename)
             reference_test_names.append(reference_test_name)
-            driver_input = DriverInput(reference_test_name, self._timeout_ms,
-                                       image_hash=test_output.image_hash, args=args)
+            driver_input = DriverInput(
+                reference_test_name,
+                self._timeout_ms,
+                image_hash=test_output.image_hash,
+                args=args)
             expected_output = self._driver.run_test(driver_input)
             total_test_time += expected_output.test_time
             reftest_failures = self._compare_output_with_reference(
-                expected_output, test_output, reference_filename, expectation == '!=')
+                expected_output, test_output, reference_filename,
+                expectation == '!=')
 
-            if ((expectation == '!=' and reftest_failures) or
-                (expectation == '==' and not reftest_failures)):
+            if ((expectation == '!=' and reftest_failures)
+                    or (expectation == '==' and not reftest_failures)):
                 break
 
         assert expected_output
@@ -584,16 +685,25 @@
         # FIXME: We don't really deal with a mix of reftest types properly. We
         # pass in a set() to reftest_type and only really handle the first of
         # the references in the result.
-        reftest_type = list(set([reference_file[0] for reference_file in self._reference_files]))
+        reftest_type = list(
+            set([
+                reference_file[0] for reference_file in self._reference_files
+            ]))
 
         return build_test_result(
-            test_output, self._test_name, retry_attempt=self._retry_attempt,
-            failures=failures, test_run_time=total_test_time, reftest_type=reftest_type,
-            pid=test_output.pid, crash_site=test_output.crash_site,
+            test_output,
+            self._test_name,
+            retry_attempt=self._retry_attempt,
+            failures=failures,
+            test_run_time=total_test_time,
+            reftest_type=reftest_type,
+            pid=test_output.pid,
+            crash_site=test_output.crash_site,
             references=reference_test_names)
 
-    def _compare_output_with_reference(
-        self, reference_driver_output, actual_driver_output, reference_filename, mismatch):
+    def _compare_output_with_reference(self, reference_driver_output,
+                                       actual_driver_output,
+                                       reference_filename, mismatch):
         failures = []
 
         # Don't continue any more if we already have crash
@@ -601,21 +711,28 @@
         if failures:
             return failures
         failures.extend(
-            self._handle_error(reference_driver_output,
-                               reference_filename=reference_filename))
+            self._handle_error(
+                reference_driver_output,
+                reference_filename=reference_filename))
         if failures:
             return failures
 
         if not actual_driver_output.image_hash:
-            failures.append(test_failures.FailureReftestNoImageGenerated(
-                actual_driver_output, reference_driver_output, reference_filename))
+            failures.append(
+                test_failures.FailureReftestNoImageGenerated(
+                    actual_driver_output, reference_driver_output,
+                    reference_filename))
         elif not reference_driver_output.image_hash:
-            failures.append(test_failures.FailureReftestNoReferenceImageGenerated(
-                actual_driver_output, reference_driver_output, reference_filename))
+            failures.append(
+                test_failures.FailureReftestNoReferenceImageGenerated(
+                    actual_driver_output, reference_driver_output,
+                    reference_filename))
         elif mismatch:
             if reference_driver_output.image_hash == actual_driver_output.image_hash:
-                failures.append(test_failures.FailureReftestMismatchDidNotOccur(
-                    actual_driver_output, reference_driver_output, reference_filename))
+                failures.append(
+                    test_failures.FailureReftestMismatchDidNotOccur(
+                        actual_driver_output, reference_driver_output,
+                        reference_filename))
         elif reference_driver_output.image_hash != actual_driver_output.image_hash:
             diff, err_str = self._port.diff_image(
                 reference_driver_output.image, actual_driver_output.image)
@@ -624,7 +741,8 @@
 
             if err_str:
                 _log.error(err_str)
-                actual_driver_output.error = (actual_driver_output.error or '') + err_str
+                actual_driver_output.error = (actual_driver_output.error
+                                              or '') + err_str
 
             if diff or err_str:
                 failures.append(
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder.py b/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder.py
index 599f3880..09a5e30 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder.py
@@ -41,18 +41,24 @@
 
 
 class WebTestFinder(object):
-
     def __init__(self, port, options):
         self._port = port
         self._options = options
         self._filesystem = self._port.host.filesystem
-        self.WEB_TESTS_DIRECTORIES = ('src', 'third_party', 'blink', 'web_tests')
+        self.WEB_TESTS_DIRECTORIES = ('src', 'third_party', 'blink',
+                                      'web_tests')
 
-    def find_tests(self, args, test_list=None, fastest_percentile=None, filters=None):
+    def find_tests(self,
+                   args,
+                   test_list=None,
+                   fastest_percentile=None,
+                   filters=None):
         filters = filters or []
         paths = self._strip_test_dir_prefixes(args)
         if test_list:
-            paths += self._strip_test_dir_prefixes(self._read_test_names_from_file(test_list, self._port.TEST_PATH_SEPARATOR))
+            paths += self._strip_test_dir_prefixes(
+                self._read_test_names_from_file(
+                    test_list, self._port.TEST_PATH_SEPARATOR))
 
         all_tests = []
         if not paths or fastest_percentile:
@@ -67,10 +73,13 @@
         if fastest_percentile:
             times_trie = self._times_trie()
             if times_trie:
-                fastest_tests = self._fastest_tests(times_trie, all_tests, fastest_percentile)
+                fastest_tests = self._fastest_tests(times_trie, all_tests,
+                                                    fastest_percentile)
                 test_files = list(set(fastest_tests).union(path_tests))
             else:
-                _log.warning('Running all the tests the first time to generate timing data.')
+                _log.warning(
+                    'Running all the tests the first time to generate timing data.'
+                )
                 test_files = all_tests
                 running_all_tests = True
         elif paths:
@@ -98,10 +107,12 @@
         times = convert_times_trie_to_flat_paths(times_trie)
 
         # Ignore tests with a time==0 because those are skipped tests.
-        sorted_times = sorted([test for (test, time) in times.iteritems() if time],
-                              key=lambda t: (times[t], t))
+        sorted_times = sorted(
+            [test for (test, time) in times.iteritems() if time],
+            key=lambda t: (times[t], t))
         clamped_percentile = max(0, min(100, fastest_percentile))
-        number_of_tests_to_return = int(len(sorted_times) * clamped_percentile / 100)
+        number_of_tests_to_return = int(
+            len(sorted_times) * clamped_percentile / 100)
         fastest_tests = set(sorted_times[:number_of_tests_to_return])
 
         # Don't try to run tests in the times_trie that no longer exist,
@@ -124,8 +135,10 @@
         for i in range(len(self.WEB_TESTS_DIRECTORIES)):
             # Handle both "web_tests/foo/bar.html" and "web_tests\foo\bar.html" if
             # the filesystem uses '\\' as a directory separator
-            for separator in (self._port.TEST_PATH_SEPARATOR, self._filesystem.sep):
-                directory_prefix = separator.join(self.WEB_TESTS_DIRECTORIES[i:]) + separator
+            for separator in (self._port.TEST_PATH_SEPARATOR,
+                              self._filesystem.sep):
+                directory_prefix = separator.join(
+                    self.WEB_TESTS_DIRECTORIES[i:]) + separator
                 if path.startswith(directory_prefix):
                     return path[len(directory_prefix):]
         return path
@@ -192,28 +205,33 @@
             return test_names
 
         if self._options.shard_index is None:
-            raise ValueError('Must provide --shard-index or GTEST_SHARD_INDEX when sharding.')
+            raise ValueError(
+                'Must provide --shard-index or GTEST_SHARD_INDEX when sharding.'
+            )
         if self._options.total_shards is None:
-            raise ValueError('Must provide --total-shards or GTEST_TOTAL_SHARDS when sharding.')
+            raise ValueError(
+                'Must provide --total-shards or GTEST_TOTAL_SHARDS when sharding.'
+            )
         if self._options.shard_index >= self._options.total_shards:
-            raise ValueError('Shard index (%d) should be less than total shards (%d)!' % (
-                self._options.shard_index, self._options.total_shards))
+            raise ValueError(
+                'Shard index (%d) should be less than total shards (%d)!' %
+                (self._options.shard_index, self._options.total_shards))
 
-        return self._split_into_chunks(test_names, self._options.shard_index, self._options.total_shards)
+        return self._split_into_chunks(test_names, self._options.shard_index,
+                                       self._options.total_shards)
 
     @staticmethod
     def _split_into_chunks(test_names, index, count):
-        tests_and_indices = [
-            (test_name, hash(test_name) % count)
-            for test_name in test_names]
+        tests_and_indices = [(test_name, hash(test_name) % count)
+                             for test_name in test_names]
 
         tests_to_run = [
-            test_name
-            for test_name, test_index in tests_and_indices
-            if test_index == index]
+            test_name for test_name, test_index in tests_and_indices
+            if test_index == index
+        ]
 
-        _log.debug('chunk %d of %d contains %d tests of %d',
-                   index, count, len(tests_to_run), len(test_names))
+        _log.debug('chunk %d of %d contains %d tests of %d', index, count,
+                   len(tests_to_run), len(test_names))
 
         return tests_to_run
 
@@ -253,11 +271,11 @@
             include = include_by_default
             for glob in sorted(globs, key=glob_sort_key):
                 if (glob.startswith('-') and not glob[1:]) or not glob:
-                    raise ValueError('Empty glob filter "%s"' % (filter,))
+                    raise ValueError('Empty glob filter "%s"' % (filter, ))
                 if '*' in glob[:-1]:
-                    raise ValueError('Bad test filter "%s" specified; '
-                                     'wildcards are only allowed at the end'
-                                     % (glob,))
+                    raise ValueError(
+                        'Bad test filter "%s" specified; '
+                        'wildcards are only allowed at the end' % (glob, ))
                 if glob.startswith('-') and glob[1:] in globs:
                     raise ValueError('Both "%s" and "%s" specified in test '
                                      'filter' % (glob, glob[1:]))
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder_unittest.py b/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder_unittest.py
index 1833937..662f75d5 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_finder_unittest.py
@@ -10,14 +10,13 @@
 from blinkpy.common.host_mock import MockHost
 from blinkpy.web_tests.controllers import web_test_finder
 
-_MOCK_ROOT = os.path.join(
-    path_finder.get_chromium_src_dir(), 'third_party', 'pymock')
+_MOCK_ROOT = os.path.join(path_finder.get_chromium_src_dir(), 'third_party',
+                          'pymock')
 sys.path.insert(0, _MOCK_ROOT)
 import mock
 
 
 class WebTestFinderTests(unittest.TestCase):
-
     def test_find_fastest_tests(self):
         host = MockHost()
         port = host.port_factory.get('test-win-win7', None)
@@ -57,10 +56,18 @@
         }
 
         tests = finder.find_tests(fastest_percentile=50, args=[])
-        self.assertEqual(set(tests[1]), set(['fast/css/1.html', 'fast/css/2.html', 'new/test.html']))
+        self.assertEqual(
+            set(tests[1]),
+            set(['fast/css/1.html', 'fast/css/2.html', 'new/test.html']))
 
-        tests = finder.find_tests(fastest_percentile=50, args=['path/test.html'])
-        self.assertEqual(set(tests[1]), set(['fast/css/1.html', 'fast/css/2.html', 'path/test.html', 'new/test.html']))
+        tests = finder.find_tests(
+            fastest_percentile=50, args=['path/test.html'])
+        self.assertEqual(
+            set(tests[1]),
+            set([
+                'fast/css/1.html', 'fast/css/2.html', 'path/test.html',
+                'new/test.html'
+            ]))
 
         tests = finder.find_tests(args=[])
         self.assertEqual(tests[1], all_tests)
@@ -99,35 +106,35 @@
 
         with mock.patch('__builtin__.hash', int):
 
-          tests = [1, 2, 3, 4]
-          self.assertEqual([1, 2, 3, 4], split(tests, 0, 1))
+            tests = [1, 2, 3, 4]
+            self.assertEqual([1, 2, 3, 4], split(tests, 0, 1))
 
-          self.assertEqual([2, 4], split(tests, 0, 2))
-          self.assertEqual([1, 3], split(tests, 1, 2))
+            self.assertEqual([2, 4], split(tests, 0, 2))
+            self.assertEqual([1, 3], split(tests, 1, 2))
 
-          self.assertEqual([3], split(tests, 0, 3))
-          self.assertEqual([1, 4], split(tests, 1, 3))
-          self.assertEqual([2], split(tests, 2, 3))
+            self.assertEqual([3], split(tests, 0, 3))
+            self.assertEqual([1, 4], split(tests, 1, 3))
+            self.assertEqual([2], split(tests, 2, 3))
 
-          tests = [1, 2, 3, 4, 5]
-          self.assertEqual([1, 2, 3, 4, 5], split(tests, 0, 1))
+            tests = [1, 2, 3, 4, 5]
+            self.assertEqual([1, 2, 3, 4, 5], split(tests, 0, 1))
 
-          self.assertEqual([2, 4], split(tests, 0, 2))
-          self.assertEqual([1, 3, 5], split(tests, 1, 2))
+            self.assertEqual([2, 4], split(tests, 0, 2))
+            self.assertEqual([1, 3, 5], split(tests, 1, 2))
 
-          self.assertEqual([3], split(tests, 0, 3))
-          self.assertEqual([1, 4], split(tests, 1, 3))
-          self.assertEqual([2, 5], split(tests, 2, 3))
+            self.assertEqual([3], split(tests, 0, 3))
+            self.assertEqual([1, 4], split(tests, 1, 3))
+            self.assertEqual([2, 5], split(tests, 2, 3))
 
-          tests = [1, 2, 3, 4, 5, 6]
-          self.assertEqual([1, 2, 3, 4, 5, 6], split(tests, 0, 1))
+            tests = [1, 2, 3, 4, 5, 6]
+            self.assertEqual([1, 2, 3, 4, 5, 6], split(tests, 0, 1))
 
-          self.assertEqual([2, 4, 6], split(tests, 0, 2))
-          self.assertEqual([1, 3, 5], split(tests, 1, 2))
+            self.assertEqual([2, 4, 6], split(tests, 0, 2))
+            self.assertEqual([1, 3, 5], split(tests, 1, 2))
 
-          self.assertEqual([3, 6], split(tests, 0, 3))
-          self.assertEqual([1, 4], split(tests, 1, 3))
-          self.assertEqual([2, 5], split(tests, 2, 3))
+            self.assertEqual([3, 6], split(tests, 0, 3))
+            self.assertEqual([1, 4], split(tests, 1, 3))
+            self.assertEqual([2, 5], split(tests, 2, 3))
 
 
 class FilterTestsTests(unittest.TestCase):
@@ -138,40 +145,34 @@
                          web_test_finder.filter_tests(tests, filters))
 
     def test_no_filters(self):
-        self.check(self.simple_test_list, [],
-                   self.simple_test_list)
+        self.check(self.simple_test_list, [], self.simple_test_list)
 
     def test_empty_glob_is_rejected(self):
-        self.assertRaises(ValueError, self.check,
-                          self.simple_test_list, [['']], [])
-        self.assertRaises(ValueError, self.check,
-                          self.simple_test_list, [['-']], [])
+        self.assertRaises(ValueError, self.check, self.simple_test_list,
+                          [['']], [])
+        self.assertRaises(ValueError, self.check, self.simple_test_list,
+                          [['-']], [])
 
     def test_one_all_positive_filter(self):
-        self.check(self.simple_test_list, [['a*']],
-                   ['a/a1.html', 'a/a2.html'])
+        self.check(self.simple_test_list, [['a*']], ['a/a1.html', 'a/a2.html'])
 
         self.check(self.simple_test_list, [['a*', 'b*']],
                    self.simple_test_list)
 
     def test_one_all_negative_filter(self):
-        self.check(self.simple_test_list, [['-c*']],
-                   self.simple_test_list)
+        self.check(self.simple_test_list, [['-c*']], self.simple_test_list)
 
     def test_one_mixed_filter(self):
         self.check(self.simple_test_list, [['a*', '-c*']],
                    ['a/a1.html', 'a/a2.html'])
 
     def test_two_all_positive_filters(self):
-        self.check(self.simple_test_list, [['a*'], ['b*']],
-                   [])
+        self.check(self.simple_test_list, [['a*'], ['b*']], [])
 
     def test_two_all_negative_filters(self):
-        self.check(self.simple_test_list, [['-a*'], ['-b*']],
-                   [])
+        self.check(self.simple_test_list, [['-a*'], ['-b*']], [])
 
-        self.check(self.simple_test_list, [['-a*'], ['-c*']],
-                   ['b/b1.html'])
+        self.check(self.simple_test_list, [['-a*'], ['-c*']], ['b/b1.html'])
 
     def test_two_mixed_filters(self):
         self.check(self.simple_test_list, [['a*'], ['-b*']],
@@ -182,25 +183,21 @@
         # part of the same filter expression, the longest matching
         # glob wins (takes precedence). The order of the two globs
         # must not matter.
-        self.check(self.simple_test_list, [['a/a*', '-a/a2*']],
-                   ['a/a1.html'])
-        self.check(self.simple_test_list, [['-a/a*', 'a/a2*']],
-                   ['a/a2.html'])
+        self.check(self.simple_test_list, [['a/a*', '-a/a2*']], ['a/a1.html'])
+        self.check(self.simple_test_list, [['-a/a*', 'a/a2*']], ['a/a2.html'])
 
         # In this test, the positive and negative globs are in
         # separate filter expressions, so a2 should be filtered out
         # and nothing should run (tests should only be run if they
         # would be run by every filter individually).
-        self.check(self.simple_test_list, [['-a/a*'], ['a/a2*']],
-                   [])
+        self.check(self.simple_test_list, [['-a/a*'], ['a/a2*']], [])
 
     def test_only_trailing_globs_work(self):
-        self.check(self.simple_test_list, [['a*']],
-                                           ['a/a1.html', 'a/a2.html'])
+        self.check(self.simple_test_list, [['a*']], ['a/a1.html', 'a/a2.html'])
 
         # These test that if you have a glob that contains a "*" that isn't
         # at the end, it is rejected; only globs at the end should work.
-        self.assertRaises(ValueError, self.check,
-                          self.simple_test_list, [['*1.html']], [])
-        self.assertRaises(ValueError, self.check,
-                          self.simple_test_list, [['a*.html']], [])
+        self.assertRaises(ValueError, self.check, self.simple_test_list,
+                          [['*1.html']], [])
+        self.assertRaises(ValueError, self.check, self.simple_test_list,
+                          [['a*.html']], [])
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_runner.py b/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_runner.py
index 95cd232..7aa1a89 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_runner.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_runner.py
@@ -53,18 +53,19 @@
         self.msg = reason
 
     def __reduce__(self):
-        return self.__class__, (self.reason,)
+        return self.__class__, (self.reason, )
 
 
 class WebTestRunner(object):
-
-    def __init__(self, options, port, printer, results_directory, test_is_slow_fn):
+    def __init__(self, options, port, printer, results_directory,
+                 test_is_slow_fn):
         self._options = options
         self._port = port
         self._printer = printer
         self._results_directory = results_directory
         self._test_is_slow = test_is_slow_fn
-        self._sharder = Sharder(self._port.split_test, self._options.max_locked_shards)
+        self._sharder = Sharder(self._port.split_test,
+                                self._options.max_locked_shards)
         self._filesystem = self._port.host.filesystem
 
         self._expectations = None
@@ -73,7 +74,8 @@
 
         self._current_run_results = None
 
-    def run_tests(self, expectations, test_inputs, tests_to_skip, num_workers, retry_attempt):
+    def run_tests(self, expectations, test_inputs, tests_to_skip, num_workers,
+                  retry_attempt):
         batch_size = self._options.derived_batch_size
 
         # If we're retrying a test, then it's because we think it might be flaky
@@ -86,7 +88,9 @@
         self._expectations = expectations
         self._test_inputs = test_inputs
 
-        test_run_results = TestRunResults(self._expectations, len(test_inputs) + len(tests_to_skip))
+        test_run_results = TestRunResults(
+            self._expectations,
+            len(test_inputs) + len(tests_to_skip))
         self._current_run_results = test_run_results
         self._printer.num_tests = len(test_inputs)
         self._printer.num_completed = 0
@@ -94,14 +98,15 @@
         for test_name in set(tests_to_skip):
             result = test_results.TestResult(test_name)
             result.type = ResultType.Skip
-            test_run_results.add(result, expected=True, test_is_slow=self._test_is_slow(test_name))
+            test_run_results.add(
+                result,
+                expected=True,
+                test_is_slow=self._test_is_slow(test_name))
 
         self._printer.write_update('Sharding tests ...')
         locked_shards, unlocked_shards = self._sharder.shard_tests(
-            test_inputs,
-            int(self._options.child_processes),
-            self._options.fully_parallel,
-            self._options.virtual_parallel,
+            test_inputs, int(self._options.child_processes),
+            self._options.fully_parallel, self._options.virtual_parallel,
             batch_size == 1)
 
         self._reorder_tests_by_args(locked_shards)
@@ -114,23 +119,32 @@
         num_workers = min(num_workers, len(all_shards))
 
         if retry_attempt < 1:
-            self._printer.print_workers_and_shards(self._port, num_workers, len(all_shards), len(locked_shards))
+            self._printer.print_workers_and_shards(self._port, num_workers,
+                                                   len(all_shards),
+                                                   len(locked_shards))
 
         if self._options.dry_run:
             return test_run_results
 
-        self._printer.write_update('Starting %s ...' % grammar.pluralize('worker', num_workers))
+        self._printer.write_update(
+            'Starting %s ...' % grammar.pluralize('worker', num_workers))
 
         start_time = time.time()
         try:
-            with message_pool.get(self, self._worker_factory, num_workers, self._port.host) as pool:
-                pool.run(('test_list', shard.name, shard.test_inputs, batch_size) for shard in all_shards)
+            with message_pool.get(self, self._worker_factory, num_workers,
+                                  self._port.host) as pool:
+                pool.run(('test_list', shard.name, shard.test_inputs,
+                          batch_size) for shard in all_shards)
 
             if self._shards_to_redo:
                 num_workers -= len(self._shards_to_redo)
                 if num_workers > 0:
-                    with message_pool.get(self, self._worker_factory, num_workers, self._port.host) as pool:
-                        pool.run(('test_list', shard.name, shard.test_inputs, batch_size) for shard in self._shards_to_redo)
+                    with message_pool.get(self, self._worker_factory,
+                                          num_workers,
+                                          self._port.host) as pool:
+                        pool.run(('test_list', shard.name, shard.test_inputs,
+                                  batch_size)
+                                 for shard in self._shards_to_redo)
         except TestRunInterruptedException as error:
             _log.warning(error.reason)
             test_run_results.interrupted = True
@@ -139,7 +153,8 @@
             self._printer.writeln('Interrupted, exiting ...')
             test_run_results.keyboard_interrupted = True
         except Exception as error:
-            _log.debug('%s("%s") raised, exiting', error.__class__.__name__, error)
+            _log.debug('%s("%s") raised, exiting', error.__class__.__name__,
+                       error)
             raise
         finally:
             test_run_results.run_time = time.time() - start_time
@@ -157,57 +172,71 @@
             shard.test_inputs = list(itertools.chain(*tests_by_args.values()))
 
     def _worker_factory(self, worker_connection):
-        return Worker(worker_connection, self._results_directory, self._options)
+        return Worker(worker_connection, self._results_directory,
+                      self._options)
 
     def _mark_interrupted_tests_as_skipped(self, test_run_results):
         for test_input in self._test_inputs:
             if test_input.test_name not in test_run_results.results_by_name:
-                result = test_results.TestResult(test_input.test_name, failures=[test_failures.FailureEarlyExit()])
+                result = test_results.TestResult(
+                    test_input.test_name,
+                    failures=[test_failures.FailureEarlyExit()])
                 # FIXME: We probably need to loop here if there are multiple iterations.
                 # FIXME: Also, these results are really neither expected nor unexpected. We probably
                 # need a third type of result.
-                test_run_results.add(result, expected=False, test_is_slow=self._test_is_slow(test_input.test_name))
+                test_run_results.add(
+                    result,
+                    expected=False,
+                    test_is_slow=self._test_is_slow(test_input.test_name))
 
     def _interrupt_if_at_failure_limits(self, test_run_results):
-
-        def interrupt_if_at_failure_limit(limit, failure_count, test_run_results, message):
+        def interrupt_if_at_failure_limit(limit, failure_count,
+                                          test_run_results, message):
             if limit and failure_count >= limit:
-                message += ' %d tests run.' % (test_run_results.expected + test_run_results.unexpected)
+                message += ' %d tests run.' % (
+                    test_run_results.expected + test_run_results.unexpected)
                 self._mark_interrupted_tests_as_skipped(test_run_results)
                 raise TestRunInterruptedException(message)
 
         interrupt_if_at_failure_limit(
             self._options.exit_after_n_failures,
-            test_run_results.unexpected_failures,
-            test_run_results,
-            'Exiting early after %d failures.' % test_run_results.unexpected_failures)
+            test_run_results.unexpected_failures, test_run_results,
+            'Exiting early after %d failures.' %
+            test_run_results.unexpected_failures)
         interrupt_if_at_failure_limit(
             self._options.exit_after_n_crashes_or_timeouts,
-            test_run_results.unexpected_crashes + test_run_results.unexpected_timeouts,
-            test_run_results,
-            'Exiting early after %d crashes and %d timeouts.' % (
-                test_run_results.unexpected_crashes, test_run_results.unexpected_timeouts))
+            test_run_results.unexpected_crashes +
+            test_run_results.unexpected_timeouts, test_run_results,
+            'Exiting early after %d crashes and %d timeouts.' %
+            (test_run_results.unexpected_crashes,
+             test_run_results.unexpected_timeouts))
 
     def _update_summary_with_result(self, test_run_results, result):
         if not self._expectations:
             return
 
-        expected = self._expectations.matches_an_expected_result(result.test_name, result.type)
-        expectation_string = ' '.join(self._expectations.get_expectations(result.test_name).results)
+        expected = self._expectations.matches_an_expected_result(
+            result.test_name, result.type)
+        expectation_string = ' '.join(
+            self._expectations.get_expectations(result.test_name).results)
 
         if result.device_failed:
-            self._printer.print_finished_test(self._port, result, False, expectation_string, 'Aborted')
+            self._printer.print_finished_test(self._port, result, False,
+                                              expectation_string, 'Aborted')
             return
 
-        test_run_results.add(result, expected, self._test_is_slow(result.test_name))
-        self._printer.print_finished_test(self._port, result, expected, expectation_string, result.type)
+        test_run_results.add(result, expected,
+                             self._test_is_slow(result.test_name))
+        self._printer.print_finished_test(self._port, result, expected,
+                                          expectation_string, result.type)
         self._interrupt_if_at_failure_limits(test_run_results)
 
     def handle(self, name, source, *args):
         method = getattr(self, '_handle_' + name)
         if method:
             return method(source, *args)
-        raise AssertionError('unknown message %s received from %s, args=%s' % (name, source, repr(args)))
+        raise AssertionError('unknown message %s received from %s, args=%s' %
+                             (name, source, repr(args)))
 
     # The _handle_* methods below are called indirectly by handle(),
     # and may not use all of their arguments - pylint: disable=unused-argument
@@ -227,7 +256,6 @@
 
 
 class Worker(object):
-
     def __init__(self, caller, results_directory, options):
         self._caller = caller
         self._worker_number = caller.worker_number
@@ -256,16 +284,19 @@
         """
         self._host = self._caller.host
         self._filesystem = self._host.filesystem
-        self._port = self._host.port_factory.get(self._options.platform, self._options)
+        self._port = self._host.port_factory.get(self._options.platform,
+                                                 self._options)
         self._driver = self._port.create_driver(self._worker_number)
         self._batch_count = 0
 
     def handle(self, name, source, test_list_name, test_inputs, batch_size):
         assert name == 'test_list'
         for i, test_input in enumerate(test_inputs):
-            device_failed = self._run_test(test_input, test_list_name, batch_size)
+            device_failed = self._run_test(test_input, test_list_name,
+                                           batch_size)
             if device_failed:
-                self._caller.post('device_failed', test_list_name, test_inputs[i:])
+                self._caller.post('device_failed', test_list_name,
+                                  test_inputs[i:])
                 self._caller.stop_running()
                 return
 
@@ -274,7 +305,8 @@
     def _update_test_input(self, test_input):
         if test_input.reference_files is None:
             # Lazy initialization.
-            test_input.reference_files = self._port.reference_files(test_input.test_name)
+            test_input.reference_files = self._port.reference_files(
+                test_input.test_name)
 
     def _run_test(self, test_input, shard_name, batch_size):
         # If the batch size has been exceeded, kill the driver.
@@ -316,7 +348,8 @@
                    for i in self._options.additional_driver_flag):
                 _log.debug('%s waiting %d seconds for %s driver to shutdown',
                            self._name, self._port.driver_stop_timeout(), label)
-                self._driver.stop(timeout_secs=self._port.driver_stop_timeout())
+                self._driver.stop(
+                    timeout_secs=self._port.driver_stop_timeout())
                 return
 
             # Otherwise, kill the driver immediately to speed up shutdown.
@@ -367,12 +400,12 @@
 
 
 class Sharder(object):
-
     def __init__(self, test_split_fn, max_locked_shards):
         self._split = test_split_fn
         self._max_locked_shards = max_locked_shards
 
-    def shard_tests(self, test_inputs, num_workers, fully_parallel, parallel_includes_virtual, run_singly):
+    def shard_tests(self, test_inputs, num_workers, fully_parallel,
+                    parallel_includes_virtual, run_singly):
         """Groups tests into batches.
         This helps ensure that tests that depend on each other (aka bad tests!)
         continue to run together as most cross-tests dependencies tend to
@@ -388,7 +421,8 @@
         if num_workers == 1:
             return self._shard_in_two(test_inputs)
         elif fully_parallel:
-            return self._shard_every_file(test_inputs, run_singly, parallel_includes_virtual)
+            return self._shard_every_file(test_inputs, run_singly,
+                                          parallel_includes_virtual)
         return self._shard_by_directory(test_inputs)
 
     def _shard_in_two(self, test_inputs):
@@ -428,7 +462,8 @@
             # which would be really redundant.
             if test_input.requires_lock:
                 locked_shards.append(TestShard('.', [test_input]))
-            elif test_input.test_name.startswith('virtual') and not run_singly and not virtual_is_unlocked:
+            elif (test_input.test_name.startswith('virtual') and not run_singly
+                  and not virtual_is_unlocked):
                 # This violates the spirit of sharding every file, but in practice, since the
                 # virtual test suites require a different commandline flag and thus a restart
                 # of content_shell, it's too slow to shard them fully.
@@ -436,11 +471,13 @@
             else:
                 unlocked_shards.append(TestShard('.', [test_input]))
 
-        locked_virtual_shards, unlocked_virtual_shards = self._shard_by_directory(virtual_inputs)
+        locked_virtual_shards, unlocked_virtual_shards = self._shard_by_directory(
+            virtual_inputs)
 
         # The locked shards still need to be limited to self._max_locked_shards in order to not
         # overload the http server for the http tests.
-        return (self._resize_shards(locked_virtual_shards + locked_shards, self._max_locked_shards, 'locked_shard'),
+        return (self._resize_shards(locked_virtual_shards + locked_shards,
+                                    self._max_locked_shards, 'locked_shard'),
                 unlocked_virtual_shards + unlocked_shards)
 
     def _shard_by_directory(self, test_inputs):
@@ -484,7 +521,8 @@
         # can handle multiple shards, we should probably do something like
         # limit this to no more than a quarter of all workers, e.g.:
         # return max(math.ceil(num_workers / 4.0), 1)
-        return (self._resize_shards(locked_shards, self._max_locked_shards, 'locked_shard'),
+        return (self._resize_shards(locked_shards, self._max_locked_shards,
+                                    'locked_shard'),
                 unlocked_slow_shards + unlocked_shards)
 
     def _resize_shards(self, old_shards, max_new_shards, shard_name_prefix):
@@ -515,7 +553,8 @@
         new_shards = []
         remaining_shards = old_shards
         while remaining_shards:
-            some_shards, remaining_shards = split_at(remaining_shards, num_old_per_new)
+            some_shards, remaining_shards = split_at(remaining_shards,
+                                                     num_old_per_new)
             new_shards.append(
                 TestShard('%s_%d' % (shard_name_prefix, len(new_shards) + 1),
                           extract_and_flatten(some_shards)))
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_runner_unittest.py b/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_runner_unittest.py
index c8d7217d..2051f0d 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_runner_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/web_test_runner_unittest.py
@@ -42,7 +42,6 @@
 from blinkpy.web_tests.port.test import TestPort
 from blinkpy.web_tests.port.driver import DriverOutput
 
-
 TestExpectations = test_expectations.TestExpectations
 
 
@@ -53,7 +52,8 @@
     def print_expected(self, run_results, get_tests_with_result_type):
         pass
 
-    def print_workers_and_shards(self, port, num_workers, num_shards, num_locked_shards):
+    def print_workers_and_shards(self, port, num_workers, num_shards,
+                                 num_locked_shards):
         pass
 
     def print_started_test(self, test_name):
@@ -73,9 +73,10 @@
 
 
 class LockCheckingRunner(WebTestRunner):
-
     def __init__(self, port, options, printer, tester, http_lock):
-        super(LockCheckingRunner, self).__init__(options, port, printer, port.results_directory(), lambda test_name: False)
+        super(LockCheckingRunner, self).__init__(options, port, printer,
+                                                 port.results_directory(),
+                                                 lambda test_name: False)
         self._finished_list_called = False
         self._tester = tester
         self._should_have_http_lock = http_lock
@@ -85,7 +86,6 @@
 # Ensure that all child processes are always cleaned up.
 @unittest.skipIf(sys.platform == 'win32', 'may not clean up child processes')
 class WebTestRunnerTests(unittest.TestCase):
-
     def setUp(self):
         self._actual_output = DriverOutput(
             text='', image=None, image_hash=None, audio=None)
@@ -95,7 +95,8 @@
     # pylint: disable=protected-access
     def _runner(self, port=None):
         # FIXME: we shouldn't have to use run_web_tests.py to get the options we need.
-        options = run_web_tests.parse_args(['--platform', 'test-mac-mac10.11'])[0]
+        options = run_web_tests.parse_args(['--platform',
+                                            'test-mac-mac10.11'])[0]
         options.child_processes = '1'
 
         host = MockHost()
@@ -112,9 +113,12 @@
         runner._options.exit_after_n_failures = None
         runner._options.exit_after_n_crashes_or_times = None
         test_names = ['passes/text.html', 'passes/image.html']
-        runner._test_inputs = [TestInput(test_name, timeout_ms=6000) for test_name in test_names]
+        runner._test_inputs = [
+            TestInput(test_name, timeout_ms=6000) for test_name in test_names
+        ]
 
-        run_results = TestRunResults(TestExpectations(runner._port), len(test_names))
+        run_results = TestRunResults(
+            TestExpectations(runner._port), len(test_names))
         run_results.unexpected_failures = 100
         run_results.unexpected_crashes = 50
         run_results.unexpected_timeouts = 50
@@ -130,8 +134,10 @@
         runner._options.exit_after_n_crashes_or_timeouts = 10
         with self.assertRaises(TestRunInterruptedException):
             runner._interrupt_if_at_failure_limits(run_results)
-        self.assertEqual(run_results.results_by_name['passes/text.html'].type, 'SKIP')
-        self.assertEqual(run_results.results_by_name['passes/image.html'].type, 'SKIP')
+        self.assertEqual(run_results.results_by_name['passes/text.html'].type,
+                         'SKIP')
+        self.assertEqual(run_results.results_by_name['passes/image.html'].type,
+                         'SKIP')
 
         runner._options.exit_after_n_crashes_or_timeouts = None
         runner._options.exit_after_n_failures = 10
@@ -146,9 +152,11 @@
 
         run_results = TestRunResults(expectations, 1)
         result = TestResult(
-            test_name=test, failures=[
+            test_name=test,
+            failures=[
                 test_failures.FailureReftestMismatchDidNotOccur(
-                    self._actual_output, self._expected_output)],
+                    self._actual_output, self._expected_output)
+            ],
             reftest_type=['!='])
         runner._update_summary_with_result(run_results, result)
         self.assertEqual(1, run_results.expected)
@@ -178,137 +186,185 @@
     ]
 
     def get_test_input(self, test_file):
-        return TestInput(test_file, requires_lock=(test_file.startswith('http') or test_file.startswith('perf')))
+        return TestInput(
+            test_file,
+            requires_lock=(test_file.startswith('http')
+                           or test_file.startswith('perf')))
 
-    def get_shards(self, num_workers, fully_parallel, run_singly, test_list=None, max_locked_shards=1):
+    def get_shards(self,
+                   num_workers,
+                   fully_parallel,
+                   run_singly,
+                   test_list=None,
+                   max_locked_shards=1):
         port = TestPort(MockSystemHost())
         self.sharder = Sharder(port.split_test, max_locked_shards)
         test_list = test_list or self.test_list
-        return self.sharder.shard_tests([self.get_test_input(test) for test in test_list],
-                                        num_workers, fully_parallel, False, run_singly)
+        return self.sharder.shard_tests(
+            [self.get_test_input(test) for test in test_list], num_workers,
+            fully_parallel, False, run_singly)
 
     def assert_shards(self, actual_shards, expected_shard_names):
         self.assertEqual(len(actual_shards), len(expected_shard_names))
         for i, shard in enumerate(actual_shards):
             expected_shard_name, expected_test_names = expected_shard_names[i]
             self.assertEqual(shard.name, expected_shard_name)
-            self.assertEqual([test_input.test_name for test_input in shard.test_inputs],
-                             expected_test_names)
+            self.assertEqual(
+                [test_input.test_name for test_input in shard.test_inputs],
+                expected_test_names)
 
     def test_shard_by_dir(self):
-        locked, unlocked = self.get_shards(num_workers=2, fully_parallel=False, run_singly=False)
+        locked, unlocked = self.get_shards(
+            num_workers=2, fully_parallel=False, run_singly=False)
 
         # Note that although there are tests in multiple dirs that need locks,
         # they are crammed into a single shard in order to reduce the # of
         # workers hitting the server at once.
-        self.assert_shards(locked,
-                           [('locked_shard_1',
-                             ['http/tests/security/view-source-no-refresh.html',
-                              'http/tests/websocket/tests/unicode.htm',
-                              'http/tests/websocket/tests/websocket-protocol-ignored.html',
-                              'http/tests/xmlhttprequest/supported-xml-content-types.html',
-                              'perf/object-keys.html'])])
-        self.assert_shards(unlocked,
-                           [('virtual/threaded/dir', ['virtual/threaded/dir/test.html']),
-                            ('virtual/threaded/fast/foo', ['virtual/threaded/fast/foo/test.html']),
-                            ('animations', ['animations/keyframes.html']),
-                            ('dom/html/level2/html', ['dom/html/level2/html/HTMLAnchorElement03.html',
-                                                      'dom/html/level2/html/HTMLAnchorElement06.html']),
-                            ('fast/css', ['fast/css/display-none-inline-style-change-crash.html'])])
+        self.assert_shards(locked, [('locked_shard_1', [
+            'http/tests/security/view-source-no-refresh.html',
+            'http/tests/websocket/tests/unicode.htm',
+            'http/tests/websocket/tests/websocket-protocol-ignored.html',
+            'http/tests/xmlhttprequest/supported-xml-content-types.html',
+            'perf/object-keys.html'
+        ])])
+        self.assert_shards(
+            unlocked,
+            [('virtual/threaded/dir', ['virtual/threaded/dir/test.html']),
+             ('virtual/threaded/fast/foo',
+              ['virtual/threaded/fast/foo/test.html']),
+             ('animations', ['animations/keyframes.html']),
+             ('dom/html/level2/html', [
+                 'dom/html/level2/html/HTMLAnchorElement03.html',
+                 'dom/html/level2/html/HTMLAnchorElement06.html'
+             ]),
+             ('fast/css',
+              ['fast/css/display-none-inline-style-change-crash.html'])])
 
     def test_shard_every_file(self):
-        locked, unlocked = self.get_shards(num_workers=2, fully_parallel=True, max_locked_shards=2, run_singly=False)
-        self.assert_shards(locked,
-                           [('locked_shard_1',
-                             ['http/tests/websocket/tests/unicode.htm',
-                              'http/tests/security/view-source-no-refresh.html',
-                              'http/tests/websocket/tests/websocket-protocol-ignored.html']),
-                            ('locked_shard_2',
-                             ['http/tests/xmlhttprequest/supported-xml-content-types.html',
-                              'perf/object-keys.html'])])
-        self.assert_shards(unlocked,
-                           [('virtual/threaded/dir', ['virtual/threaded/dir/test.html']),
-                            ('virtual/threaded/fast/foo', ['virtual/threaded/fast/foo/test.html']),
-                            ('.', ['animations/keyframes.html']),
-                            ('.', ['fast/css/display-none-inline-style-change-crash.html']),
-                            ('.', ['dom/html/level2/html/HTMLAnchorElement03.html']),
-                            ('.', ['dom/html/level2/html/HTMLAnchorElement06.html'])])
+        locked, unlocked = self.get_shards(
+            num_workers=2,
+            fully_parallel=True,
+            max_locked_shards=2,
+            run_singly=False)
+        self.assert_shards(
+            locked,
+            [('locked_shard_1', [
+                'http/tests/websocket/tests/unicode.htm',
+                'http/tests/security/view-source-no-refresh.html',
+                'http/tests/websocket/tests/websocket-protocol-ignored.html'
+            ]),
+             ('locked_shard_2', [
+                 'http/tests/xmlhttprequest/supported-xml-content-types.html',
+                 'perf/object-keys.html'
+             ])])
+        self.assert_shards(
+            unlocked,
+            [('virtual/threaded/dir', ['virtual/threaded/dir/test.html']),
+             ('virtual/threaded/fast/foo',
+              ['virtual/threaded/fast/foo/test.html']),
+             ('.', ['animations/keyframes.html']),
+             ('.', ['fast/css/display-none-inline-style-change-crash.html']),
+             ('.', ['dom/html/level2/html/HTMLAnchorElement03.html']),
+             ('.', ['dom/html/level2/html/HTMLAnchorElement06.html'])])
 
     def test_shard_in_two(self):
-        locked, unlocked = self.get_shards(num_workers=1, fully_parallel=False, run_singly=False)
-        self.assert_shards(locked,
-                           [('locked_tests',
-                             ['http/tests/websocket/tests/unicode.htm',
-                              'http/tests/security/view-source-no-refresh.html',
-                              'http/tests/websocket/tests/websocket-protocol-ignored.html',
-                              'http/tests/xmlhttprequest/supported-xml-content-types.html',
-                              'perf/object-keys.html'])])
-        self.assert_shards(unlocked,
-                           [('unlocked_tests',
-                             ['animations/keyframes.html',
-                              'fast/css/display-none-inline-style-change-crash.html',
-                              'dom/html/level2/html/HTMLAnchorElement03.html',
-                              'dom/html/level2/html/HTMLAnchorElement06.html',
-                              'virtual/threaded/dir/test.html',
-                              'virtual/threaded/fast/foo/test.html'])])
+        locked, unlocked = self.get_shards(
+            num_workers=1, fully_parallel=False, run_singly=False)
+        self.assert_shards(locked, [('locked_tests', [
+            'http/tests/websocket/tests/unicode.htm',
+            'http/tests/security/view-source-no-refresh.html',
+            'http/tests/websocket/tests/websocket-protocol-ignored.html',
+            'http/tests/xmlhttprequest/supported-xml-content-types.html',
+            'perf/object-keys.html'
+        ])])
+        self.assert_shards(unlocked, [('unlocked_tests', [
+            'animations/keyframes.html',
+            'fast/css/display-none-inline-style-change-crash.html',
+            'dom/html/level2/html/HTMLAnchorElement03.html',
+            'dom/html/level2/html/HTMLAnchorElement06.html',
+            'virtual/threaded/dir/test.html',
+            'virtual/threaded/fast/foo/test.html'
+        ])])
 
     def test_shard_in_two_has_no_locked_shards(self):
-        locked, unlocked = self.get_shards(num_workers=1, fully_parallel=False, run_singly=False,
-                                           test_list=['animations/keyframe.html'])
+        locked, unlocked = self.get_shards(
+            num_workers=1,
+            fully_parallel=False,
+            run_singly=False,
+            test_list=['animations/keyframe.html'])
         self.assertEqual(len(locked), 0)
         self.assertEqual(len(unlocked), 1)
 
     def test_shard_in_two_has_no_unlocked_shards(self):
-        locked, unlocked = self.get_shards(num_workers=1, fully_parallel=False, run_singly=False,
-                                           test_list=['http/tests/websocket/tests/unicode.htm'])
+        locked, unlocked = self.get_shards(
+            num_workers=1,
+            fully_parallel=False,
+            run_singly=False,
+            test_list=['http/tests/websocket/tests/unicode.htm'])
         self.assertEqual(len(locked), 1)
         self.assertEqual(len(unlocked), 0)
 
     def test_multiple_locked_shards(self):
-        locked, _ = self.get_shards(num_workers=4, fully_parallel=False, max_locked_shards=2, run_singly=False)
-        self.assert_shards(locked,
-                           [('locked_shard_1',
-                             ['http/tests/security/view-source-no-refresh.html',
-                              'http/tests/websocket/tests/unicode.htm',
-                              'http/tests/websocket/tests/websocket-protocol-ignored.html']),
-                            ('locked_shard_2',
-                             ['http/tests/xmlhttprequest/supported-xml-content-types.html',
-                              'perf/object-keys.html'])])
+        locked, _ = self.get_shards(
+            num_workers=4,
+            fully_parallel=False,
+            max_locked_shards=2,
+            run_singly=False)
+        self.assert_shards(
+            locked,
+            [('locked_shard_1', [
+                'http/tests/security/view-source-no-refresh.html',
+                'http/tests/websocket/tests/unicode.htm',
+                'http/tests/websocket/tests/websocket-protocol-ignored.html'
+            ]),
+             ('locked_shard_2', [
+                 'http/tests/xmlhttprequest/supported-xml-content-types.html',
+                 'perf/object-keys.html'
+             ])])
 
-        locked, _ = self.get_shards(num_workers=4, fully_parallel=False, run_singly=False)
-        self.assert_shards(locked,
-                           [('locked_shard_1',
-                             ['http/tests/security/view-source-no-refresh.html',
-                              'http/tests/websocket/tests/unicode.htm',
-                              'http/tests/websocket/tests/websocket-protocol-ignored.html',
-                              'http/tests/xmlhttprequest/supported-xml-content-types.html',
-                              'perf/object-keys.html'])])
+        locked, _ = self.get_shards(
+            num_workers=4, fully_parallel=False, run_singly=False)
+        self.assert_shards(locked, [('locked_shard_1', [
+            'http/tests/security/view-source-no-refresh.html',
+            'http/tests/websocket/tests/unicode.htm',
+            'http/tests/websocket/tests/websocket-protocol-ignored.html',
+            'http/tests/xmlhttprequest/supported-xml-content-types.html',
+            'perf/object-keys.html'
+        ])])
 
     def test_virtual_shards(self):
         # With run_singly=False, we try to keep all of the tests in a virtual suite together even
         # when fully_parallel=True, so that we don't restart every time the command line args change.
-        _, unlocked = self.get_shards(num_workers=2, fully_parallel=True, max_locked_shards=2, run_singly=False,
-                                      test_list=['virtual/foo/bar1.html', 'virtual/foo/bar2.html'])
-        self.assert_shards(unlocked,
-                           [('virtual/foo', ['virtual/foo/bar1.html', 'virtual/foo/bar2.html'])])
+        _, unlocked = self.get_shards(
+            num_workers=2,
+            fully_parallel=True,
+            max_locked_shards=2,
+            run_singly=False,
+            test_list=['virtual/foo/bar1.html', 'virtual/foo/bar2.html'])
+        self.assert_shards(unlocked, [
+            ('virtual/foo', ['virtual/foo/bar1.html', 'virtual/foo/bar2.html'])
+        ])
 
         # But, with run_singly=True, we have to restart every time anyway, so we want full parallelism.
-        _, unlocked = self.get_shards(num_workers=2, fully_parallel=True, max_locked_shards=2, run_singly=True,
-                                      test_list=['virtual/foo/bar1.html', 'virtual/foo/bar2.html'])
-        self.assert_shards(unlocked,
-                           [('.', ['virtual/foo/bar1.html']),
-                            ('.', ['virtual/foo/bar2.html'])])
+        _, unlocked = self.get_shards(
+            num_workers=2,
+            fully_parallel=True,
+            max_locked_shards=2,
+            run_singly=True,
+            test_list=['virtual/foo/bar1.html', 'virtual/foo/bar2.html'])
+        self.assert_shards(unlocked, [('.', ['virtual/foo/bar1.html']),
+                                      ('.', ['virtual/foo/bar2.html'])])
 
 
 class WorkerTests(unittest.TestCase):
-
     class DummyCaller(object):
         worker_number = 1
         name = 'dummy_caller'
 
     def test_worker_no_manifest_update(self):
         # pylint: disable=protected-access
-        options = run_web_tests.parse_args(['--platform', 'test-mac-mac10.11'])[0]
+        options = run_web_tests.parse_args(['--platform',
+                                            'test-mac-mac10.11'])[0]
         worker = Worker(self.DummyCaller(), '/results', options)
         self.assertTrue(options.manifest_update)
         self.assertFalse(worker._options.manifest_update)
diff --git a/third_party/blink/tools/blinkpy/web_tests/layout_package/bot_test_expectations.py b/third_party/blink/tools/blinkpy/web_tests/layout_package/bot_test_expectations.py
index 96cd808..b619500 100644
--- a/third_party/blink/tools/blinkpy/web_tests/layout_package/bot_test_expectations.py
+++ b/third_party/blink/tools/blinkpy/web_tests/layout_package/bot_test_expectations.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Generates a fake TestExpectations file consisting of flaky tests from the bot
 corresponding to the give port.
 """
@@ -122,16 +121,20 @@
         return self._results_json_for_builder(builder)
 
     def _results_url_for_builder(self, builder):
-        return self.RESULTS_URL_FORMAT % (
-            urllib.quote(self.builders.master_for_builder(builder)), urllib.quote(builder))
+        return self.RESULTS_URL_FORMAT % (urllib.quote(
+            self.builders.master_for_builder(builder)), urllib.quote(builder))
 
     def _results_json_for_builder(self, builder):
         results_url = self._results_url_for_builder(builder)
         try:
-            _log.debug('Fetching flakiness data from appengine: %s', results_url)
-            return ResultsJSON(builder, json.load(urllib2.urlopen(results_url)))
+            _log.debug('Fetching flakiness data from appengine: %s',
+                       results_url)
+            return ResultsJSON(builder, json.load(
+                urllib2.urlopen(results_url)))
         except urllib2.URLError as error:
-            _log.warning('Could not retrieve flakiness data from the bot.  url: %s', results_url)
+            _log.warning(
+                'Could not retrieve flakiness data from the bot.  url: %s',
+                results_url)
             _log.warning(error)
 
     def expectations_for_port(self, port_name, builder_category='layout'):
@@ -163,13 +166,15 @@
     # specifiers arg is used in unittests to avoid the static dependency on builders.
     def __init__(self, results_json, builders, specifiers=None):
         self.results_json = results_json
-        self.specifiers = specifiers or set(builders.specifiers_for_builder(results_json.builder_name))
+        self.specifiers = specifiers or set(
+            builders.specifiers_for_builder(results_json.builder_name))
 
     def flakes_by_path(self, only_ignore_very_flaky):
         """Sets test expectations to bot results if there are at least two distinct results."""
         flakes_by_path = {}
         for test_path, entry in self.results_json.walk_results():
-            flaky_types = self._flaky_types_in_results(entry, only_ignore_very_flaky)
+            flaky_types = self._flaky_types_in_results(entry,
+                                                       only_ignore_very_flaky)
             if len(flaky_types) <= 1:
                 continue
             flakes_by_path[test_path] = flaky_types
@@ -180,7 +185,8 @@
         unexpected_results_by_path = {}
         for test_path, entry in self.results_json.walk_results():
             # Expectations for this test. No expectation defaults to PASS.
-            exp_string =  entry.get(self.results_json.EXPECTATIONS_KEY, ResultType.Pass)
+            exp_string = entry.get(self.results_json.EXPECTATIONS_KEY,
+                                   ResultType.Pass)
 
             # All run-length-encoded results for this test.
             results_dict = entry.get(self.results_json.RESULTS_KEY, {})
@@ -195,13 +201,16 @@
             expectations = exp_string.split(' ')
 
             # Unexpected results will become additional expectations
-            additional_expectations = [res for res in results if res not in expectations]
+            additional_expectations = [
+                res for res in results if res not in expectations
+            ]
 
             if not additional_expectations:
                 continue
 
             # Get typ expectation result tags
-            unexpected_results_by_path[test_path] = set(expectations + additional_expectations)
+            unexpected_results_by_path[test_path] = set(
+                expectations + additional_expectations)
         return unexpected_results_by_path
 
     def all_results_by_path(self):
@@ -230,7 +239,8 @@
                 continue
 
             # Distinct results as non-encoded strings.
-            result_strings = map(self.results_json.expectation_for_type, result_types)
+            result_strings = map(self.results_json.expectation_for_type,
+                                 result_types)
 
             results_by_path[test_path] = sorted(result_strings)
         return results_by_path
@@ -238,20 +248,24 @@
     def expectation_lines(self, only_ignore_very_flaky):
         lines = []
         for test_path, entry in self.results_json.walk_results():
-            flaky_types = self._flaky_types_in_results(entry, only_ignore_very_flaky)
+            flaky_types = self._flaky_types_in_results(entry,
+                                                       only_ignore_very_flaky)
             if len(flaky_types) > 1:
-                line = self._line_from_test_and_flaky_types(test_path, flaky_types)
+                line = self._line_from_test_and_flaky_types(
+                    test_path, flaky_types)
                 lines.append(line)
         return lines
 
     def _line_from_test_and_flaky_types(self, test_name, flaky_types):
-        return Expectation(tags=self.specifiers, test=test_name, results=flaky_types)
+        return Expectation(
+            tags=self.specifiers, test=test_name, results=flaky_types)
 
     def _all_types_in_results(self, run_length_encoded_results):
         results = set()
 
         for result_item in run_length_encoded_results:
-            _, result_types = self.results_json.occurances_and_type_from_result_item(result_item)
+            _, result_types = self.results_json.occurances_and_type_from_result_item(
+                result_item)
 
             for result_type in result_types:
                 if result_type not in self.RESULT_TYPES_TO_IGNORE:
@@ -266,17 +280,20 @@
         # This fixes cases where the expectations have an implicit Pass, e.g. [ Slow ].
         latest_expectations = [ResultType.Pass]
         if self.results_json.EXPECTATIONS_KEY in results_entry:
-            expectations_list = results_entry[self.results_json.EXPECTATIONS_KEY].split(' ')
+            expectations_list = results_entry[self.results_json.
+                                              EXPECTATIONS_KEY].split(' ')
             latest_expectations.extend(expectations_list)
 
         for result_item in results_entry[self.results_json.RESULTS_KEY]:
-            _, result_types_str = self.results_json.occurances_and_type_from_result_item(result_item)
+            _, result_types_str = self.results_json.occurances_and_type_from_result_item(
+                result_item)
 
             result_types = []
             for result_type in result_types_str:
                 # TODO(ojan): Remove this if-statement once crbug.com/514378 is fixed.
                 if result_type not in self.NON_RESULT_TYPES:
-                    result_types.append(self.results_json.expectation_for_type(result_type))
+                    result_types.append(
+                        self.results_json.expectation_for_type(result_type))
 
             # It didn't flake if it didn't retry.
             if len(result_types) <= 1:
diff --git a/third_party/blink/tools/blinkpy/web_tests/layout_package/bot_test_expectations_unittest.py b/third_party/blink/tools/blinkpy/web_tests/layout_package/bot_test_expectations_unittest.py
index feb770a..f671f43 100644
--- a/third_party/blink/tools/blinkpy/web_tests/layout_package/bot_test_expectations_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/layout_package/bot_test_expectations_unittest.py
@@ -50,20 +50,26 @@
         return bot_test_expectations.ResultsJSON(builder, 'Dummy content')
 
     def test_results_url_for_builder(self):
-        factory = bot_test_expectations.BotTestExpectationsFactory(self.fake_builder_list())
+        factory = bot_test_expectations.BotTestExpectationsFactory(
+            self.fake_builder_list())
 
-        self.assertEqual(factory._results_url_for_builder('Dummy builder name'),
-                         'https://test-results.appspot.com/testfile?testtype=blink_web_tests'
-                         '&name=results-small.json&master=dummy.master&builder=Dummy%20builder%20name')
+        self.assertEqual(
+            factory._results_url_for_builder('Dummy builder name'),
+            'https://test-results.appspot.com/testfile?testtype=blink_web_tests'
+            '&name=results-small.json&master=dummy.master&builder=Dummy%20builder%20name'
+        )
 
     def test_expectations_for_builder(self):
-        factory = bot_test_expectations.BotTestExpectationsFactory(self.fake_builder_list())
+        factory = bot_test_expectations.BotTestExpectationsFactory(
+            self.fake_builder_list())
         factory._results_json_for_builder = self.fake_results_json_for_builder
 
-        self.assertIsNotNone(factory.expectations_for_builder('Dummy builder name'))
+        self.assertIsNotNone(
+            factory.expectations_for_builder('Dummy builder name'))
 
     def test_expectations_for_port(self):
-        factory = bot_test_expectations.BotTestExpectationsFactory(self.fake_builder_list())
+        factory = bot_test_expectations.BotTestExpectationsFactory(
+            self.fake_builder_list())
         factory._results_json_for_builder = self.fake_results_json_for_builder
 
         self.assertIsNotNone(factory.expectations_for_port('dummy-port'))
@@ -72,48 +78,91 @@
 @unittest.skipIf(sys.platform == 'win32', 'fails on Windows')
 class BotTestExpectationsTest(unittest.TestCase):
     # FIXME: Find a way to import this map from Tools/TestResultServer/model/jsonresults.py.
-    FAILURE_MAP = {'C': 'CRASH', 'F': 'FAIL', 'N': 'NO DATA', 'P': 'PASS', 'T': 'TIMEOUT',
-                   'Y': 'NOTRUN', 'X': 'SKIP'}
+    FAILURE_MAP = {
+        'C': 'CRASH',
+        'F': 'FAIL',
+        'N': 'NO DATA',
+        'P': 'PASS',
+        'T': 'TIMEOUT',
+        'Y': 'NOTRUN',
+        'X': 'SKIP'
+    }
 
     # All result_string's in this file represent retries from a single run.
     # The left-most entry is the first try, the right-most is the last.
 
-    def _assert_is_flaky(self, results_string, should_be_flaky, only_ignore_very_flaky, expected=None):
+    def _assert_is_flaky(self,
+                         results_string,
+                         should_be_flaky,
+                         only_ignore_very_flaky,
+                         expected=None):
         results_json = self._results_json_from_test_data({})
-        expectations = bot_test_expectations.BotTestExpectations(results_json, BuilderList({}), set('test'))
+        expectations = bot_test_expectations.BotTestExpectations(
+            results_json, BuilderList({}), set('test'))
 
         results_entry = self._results_from_string(results_string)
         if expected:
-            results_entry[bot_test_expectations.ResultsJSON.EXPECTATIONS_KEY] = expected
+            results_entry[bot_test_expectations.ResultsJSON.
+                          EXPECTATIONS_KEY] = expected
 
-        num_actual_results = len(expectations._flaky_types_in_results(  # pylint: disable=protected-access
-            results_entry, only_ignore_very_flaky))
+        num_actual_results = len(
+            expectations._flaky_types_in_results(  # pylint: disable=protected-access
+                results_entry, only_ignore_very_flaky))
         if should_be_flaky:
             self.assertGreater(num_actual_results, 1)
         else:
             self.assertLessEqual(num_actual_results, 1)
 
     def test_basic_flaky(self):
-        self._assert_is_flaky('P', should_be_flaky=False, only_ignore_very_flaky=False)
-        self._assert_is_flaky('P', should_be_flaky=False, only_ignore_very_flaky=True)
-        self._assert_is_flaky('F', should_be_flaky=False, only_ignore_very_flaky=False)
-        self._assert_is_flaky('F', should_be_flaky=False, only_ignore_very_flaky=True)
-        self._assert_is_flaky('FP', should_be_flaky=True, only_ignore_very_flaky=False)
-        self._assert_is_flaky('FP', should_be_flaky=False, only_ignore_very_flaky=True)
-        self._assert_is_flaky('FFP', should_be_flaky=True, only_ignore_very_flaky=False)
-        self._assert_is_flaky('FFP', should_be_flaky=True, only_ignore_very_flaky=True)
-        self._assert_is_flaky('FFT', should_be_flaky=True, only_ignore_very_flaky=False)
-        self._assert_is_flaky('FFT', should_be_flaky=True, only_ignore_very_flaky=True)
-        self._assert_is_flaky('FFF', should_be_flaky=False, only_ignore_very_flaky=False)
-        self._assert_is_flaky('FFF', should_be_flaky=False, only_ignore_very_flaky=True)
+        self._assert_is_flaky(
+            'P', should_be_flaky=False, only_ignore_very_flaky=False)
+        self._assert_is_flaky(
+            'P', should_be_flaky=False, only_ignore_very_flaky=True)
+        self._assert_is_flaky(
+            'F', should_be_flaky=False, only_ignore_very_flaky=False)
+        self._assert_is_flaky(
+            'F', should_be_flaky=False, only_ignore_very_flaky=True)
+        self._assert_is_flaky(
+            'FP', should_be_flaky=True, only_ignore_very_flaky=False)
+        self._assert_is_flaky(
+            'FP', should_be_flaky=False, only_ignore_very_flaky=True)
+        self._assert_is_flaky(
+            'FFP', should_be_flaky=True, only_ignore_very_flaky=False)
+        self._assert_is_flaky(
+            'FFP', should_be_flaky=True, only_ignore_very_flaky=True)
+        self._assert_is_flaky(
+            'FFT', should_be_flaky=True, only_ignore_very_flaky=False)
+        self._assert_is_flaky(
+            'FFT', should_be_flaky=True, only_ignore_very_flaky=True)
+        self._assert_is_flaky(
+            'FFF', should_be_flaky=False, only_ignore_very_flaky=False)
+        self._assert_is_flaky(
+            'FFF', should_be_flaky=False, only_ignore_very_flaky=True)
 
-        self._assert_is_flaky('FT', should_be_flaky=True, only_ignore_very_flaky=False, expected='TIMEOUT')
-        self._assert_is_flaky('FT', should_be_flaky=False, only_ignore_very_flaky=True, expected='TIMEOUT')
-        self._assert_is_flaky('FFT', should_be_flaky=True, only_ignore_very_flaky=False, expected='TIMEOUT')
-        self._assert_is_flaky('FFT', should_be_flaky=True, only_ignore_very_flaky=True, expected='TIMEOUT')
+        self._assert_is_flaky(
+            'FT',
+            should_be_flaky=True,
+            only_ignore_very_flaky=False,
+            expected='TIMEOUT')
+        self._assert_is_flaky(
+            'FT',
+            should_be_flaky=False,
+            only_ignore_very_flaky=True,
+            expected='TIMEOUT')
+        self._assert_is_flaky(
+            'FFT',
+            should_be_flaky=True,
+            only_ignore_very_flaky=False,
+            expected='TIMEOUT')
+        self._assert_is_flaky(
+            'FFT',
+            should_be_flaky=True,
+            only_ignore_very_flaky=True,
+            expected='TIMEOUT')
 
     def _results_json_from_test_data(self, test_data):
-        test_data[bot_test_expectations.ResultsJSON.FAILURE_MAP_KEY] = self.FAILURE_MAP
+        test_data[bot_test_expectations.ResultsJSON.FAILURE_MAP_KEY] = \
+            self.FAILURE_MAP
         json_dict = {
             'builder': test_data,
         }
@@ -122,33 +171,46 @@
     def _results_from_string(self, results_string):
         return {'results': [[1, results_string]]}
 
-    def _assert_expectations(self, test_data, expectations_string, only_ignore_very_flaky):
+    def _assert_expectations(self, test_data, expectations_string,
+                             only_ignore_very_flaky):
         results_json = self._results_json_from_test_data(test_data)
-        expectations = bot_test_expectations.BotTestExpectations(results_json, BuilderList({}), set('test'))
-        self.assertEqual(expectations.flakes_by_path(only_ignore_very_flaky), expectations_string)
+        expectations = bot_test_expectations.BotTestExpectations(
+            results_json, BuilderList({}), set('test'))
+        self.assertEqual(
+            expectations.flakes_by_path(only_ignore_very_flaky),
+            expectations_string)
 
     def _assert_unexpected_results(self, test_data, expectations_string):
         results_json = self._results_json_from_test_data(test_data)
-        expectations = bot_test_expectations.BotTestExpectations(results_json, BuilderList({}), set('test'))
-        self.assertEqual(expectations.unexpected_results_by_path(), expectations_string)
+        expectations = bot_test_expectations.BotTestExpectations(
+            results_json, BuilderList({}), set('test'))
+        self.assertEqual(expectations.unexpected_results_by_path(),
+                         expectations_string)
 
     def test_all_results_by_path(self):
         test_data = {
             'tests': {
                 'foo': {
-                    'multiple_pass.html': {'results': [[4, 'P'], [1, 'P'], [2, 'P']]},
-                    'fail.html': {'results': [[2, 'F']]},
-                    'all_types.html': {
-                        'results': [[1, 'C'], [2, 'F'],[1, 'N'], [1, 'P'], [1, 'T'],
-                                    [1, 'Y'], [10, 'X']]
+                    'multiple_pass.html': {
+                        'results': [[4, 'P'], [1, 'P'], [2, 'P']]
                     },
-                    'not_run.html': {'results': []},
+                    'fail.html': {
+                        'results': [[2, 'F']]
+                    },
+                    'all_types.html': {
+                        'results': [[1, 'C'], [2, 'F'], [1, 'N'], [1, 'P'],
+                                    [1, 'T'], [1, 'Y'], [10, 'X']]
+                    },
+                    'not_run.html': {
+                        'results': []
+                    },
                 }
             }
         }
 
         results_json = self._results_json_from_test_data(test_data)
-        expectations = bot_test_expectations.BotTestExpectations(results_json, BuilderList({}), set('test'))
+        expectations = bot_test_expectations.BotTestExpectations(
+            results_json, BuilderList({}), set('test'))
         results_by_path = expectations.all_results_by_path()
 
         expected_output = {
@@ -170,31 +232,52 @@
                     # Even if there are no expected results, it's not very flaky if it didn't do multiple retries.
                     # This accounts for the latest expectations not necessarily matching the expectations
                     # at the time of the given run.
-                    'notverflakynoexpected.html': self._results_from_string('FT'),
+                    'notverflakynoexpected.html':
+                    self._results_from_string('FT'),
                     # If the test is flaky, but marked as such, it shouldn't get printed out.
-                    'notflakyexpected.html': {'results': [[2, 'FFFP']], 'expected': 'PASS FAIL'},
+                    'notflakyexpected.html': {
+                        'results': [[2, 'FFFP']],
+                        'expected': 'PASS FAIL'
+                    },
                 }
             }
         }
-        self._assert_expectations(test_data, {
-            'foo/veryflaky.html': {'FAIL', 'PASS'},
-        }, only_ignore_very_flaky=True)
+        self._assert_expectations(
+            test_data, {
+                'foo/veryflaky.html': {'FAIL', 'PASS'},
+            },
+            only_ignore_very_flaky=True)
 
-        self._assert_expectations(test_data, {
-            'foo/veryflaky.html': {'FAIL', 'PASS'},
-            'foo/notverflakynoexpected.html': {'FAIL', 'TIMEOUT'},
-            'foo/maybeflaky.html': {'FAIL', 'PASS'},
-        }, only_ignore_very_flaky=False)
+        self._assert_expectations(
+            test_data, {
+                'foo/veryflaky.html': {'FAIL', 'PASS'},
+                'foo/notverflakynoexpected.html': {'FAIL', 'TIMEOUT'},
+                'foo/maybeflaky.html': {'FAIL', 'PASS'},
+            },
+            only_ignore_very_flaky=False)
 
     def test_unexpected_results_no_unexpected(self):
         test_data = {
             'tests': {
                 'foo': {
-                    'pass1.html': {'results': [[4, 'P']]},
-                    'pass2.html': {'results': [[2, 'F']], 'expected': 'PASS FAIL'},
-                    'fail.html': {'results': [[2, 'P'], [1, 'F']], 'expected': 'PASS FAIL'},
-                    'not_run.html': {'results': []},
-                    'crash.html': {'results': [[2, 'F'], [1, 'C']], 'expected': 'CRASH FAIL SKIP'},
+                    'pass1.html': {
+                        'results': [[4, 'P']]
+                    },
+                    'pass2.html': {
+                        'results': [[2, 'F']],
+                        'expected': 'PASS FAIL'
+                    },
+                    'fail.html': {
+                        'results': [[2, 'P'], [1, 'F']],
+                        'expected': 'PASS FAIL'
+                    },
+                    'not_run.html': {
+                        'results': []
+                    },
+                    'crash.html': {
+                        'results': [[2, 'F'], [1, 'C']],
+                        'expected': 'CRASH FAIL SKIP'
+                    },
                 }
             }
         }
@@ -204,23 +287,44 @@
         test_data = {
             'tests': {
                 'foo': {
-                    'pass1.html': {'results': [[4, 'P']], 'expected': 'FAIL'},
-                    'pass2.html': {'results': [[2, 'P']], 'expected': 'FAIL'},
-                    'fail.html': {'results': [[4, 'F']]},
-                    'f_p.html': {'results': [[1, 'F'], [2, 'P']]},
-                    'crash.html': {'results': [[2, 'F'], [1, 'C']], 'expected': 'SKIP'},
-                    'image.html': {'results': [[3, 'F']], 'expected': 'CRASH FAIL'},
-                    'i_f.html': {'results': [[6, 'F']], 'expected': 'PASS'},
-                    'all.html': self._results_from_string('FPFPCNCNTXTXFFFFFCFCYY'),
+                    'pass1.html': {
+                        'results': [[4, 'P']],
+                        'expected': 'FAIL'
+                    },
+                    'pass2.html': {
+                        'results': [[2, 'P']],
+                        'expected': 'FAIL'
+                    },
+                    'fail.html': {
+                        'results': [[4, 'F']]
+                    },
+                    'f_p.html': {
+                        'results': [[1, 'F'], [2, 'P']]
+                    },
+                    'crash.html': {
+                        'results': [[2, 'F'], [1, 'C']],
+                        'expected': 'SKIP'
+                    },
+                    'image.html': {
+                        'results': [[3, 'F']],
+                        'expected': 'CRASH FAIL'
+                    },
+                    'i_f.html': {
+                        'results': [[6, 'F']],
+                        'expected': 'PASS'
+                    },
+                    'all.html':
+                    self._results_from_string('FPFPCNCNTXTXFFFFFCFCYY'),
                 }
             }
         }
-        self._assert_unexpected_results(test_data, {
-            'foo/pass1.html': {'FAIL', 'PASS'},
-            'foo/pass2.html': {'FAIL', 'PASS'},
-            'foo/fail.html': {'FAIL', 'PASS'},
-            'foo/f_p.html': {'FAIL', 'PASS'},
-            'foo/crash.html': {'SKIP', 'CRASH', 'FAIL'},
-            'foo/i_f.html': {'FAIL', 'PASS'},
-            'foo/all.html': {'PASS', 'FAIL', 'TIMEOUT', 'CRASH'},
-        })
+        self._assert_unexpected_results(
+            test_data, {
+                'foo/pass1.html': {'FAIL', 'PASS'},
+                'foo/pass2.html': {'FAIL', 'PASS'},
+                'foo/fail.html': {'FAIL', 'PASS'},
+                'foo/f_p.html': {'FAIL', 'PASS'},
+                'foo/crash.html': {'SKIP', 'CRASH', 'FAIL'},
+                'foo/i_f.html': {'FAIL', 'PASS'},
+                'foo/all.html': {'PASS', 'FAIL', 'TIMEOUT', 'CRASH'},
+            })
diff --git a/third_party/blink/tools/blinkpy/web_tests/layout_package/json_results_generator.py b/third_party/blink/tools/blinkpy/web_tests/layout_package/json_results_generator.py
index 2549b49..ff5f594 100644
--- a/third_party/blink/tools/blinkpy/web_tests/layout_package/json_results_generator.py
+++ b/third_party/blink/tools/blinkpy/web_tests/layout_package/json_results_generator.py
@@ -43,7 +43,8 @@
 def strip_json_wrapper(json_content):
     # FIXME: Kill this code once the server returns json instead of jsonp.
     if has_json_wrapper(json_content):
-        return json_content[len(_JSON_PREFIX):len(json_content) - len(_JSON_SUFFIX)]
+        return json_content[len(_JSON_PREFIX):len(json_content) -
+                            len(_JSON_SUFFIX)]
     return json_content
 
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/layout_package/json_results_generator_unittest.py b/third_party/blink/tools/blinkpy/web_tests/layout_package/json_results_generator_unittest.py
index fa1123c..fb60910 100644
--- a/third_party/blink/tools/blinkpy/web_tests/layout_package/json_results_generator_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/layout_package/json_results_generator_unittest.py
@@ -33,7 +33,6 @@
 
 
 class JSONGeneratorTest(unittest.TestCase):
-
     def setUp(self):
         self.builder_name = 'DUMMY_BUILDER_NAME'
         self.build_number = 'DUMMY_BUILDER_NUMBER'
@@ -53,15 +52,21 @@
 
     def test_strip_json_wrapper(self):
         json = "['contents']"
-        self.assertEqual(json_results_generator.strip_json_wrapper(
-            json_results_generator._JSON_PREFIX + json + json_results_generator._JSON_SUFFIX), json)
+        self.assertEqual(
+            json_results_generator.
+            strip_json_wrapper(json_results_generator._JSON_PREFIX + json +
+                               json_results_generator._JSON_SUFFIX), json)
         self.assertEqual(json_results_generator.strip_json_wrapper(json), json)
 
     def test_test_timings_trie(self):
         individual_test_timings = []
-        individual_test_timings.append(json_results_generator.TestResult('foo/bar/baz.html', elapsed_time=1.2))
-        individual_test_timings.append(json_results_generator.TestResult('bar.html', elapsed_time=0.0001))
-        trie = json_results_generator.test_timings_trie(individual_test_timings)
+        individual_test_timings.append(
+            json_results_generator.TestResult(
+                'foo/bar/baz.html', elapsed_time=1.2))
+        individual_test_timings.append(
+            json_results_generator.TestResult('bar.html', elapsed_time=0.0001))
+        trie = json_results_generator.test_timings_trie(
+            individual_test_timings)
 
         expected_trie = {
             'bar.html': 0,
diff --git a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py
index 484a8ac0..968f085c5 100644
--- a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py
+++ b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py
@@ -34,8 +34,8 @@
 from blinkpy.common import exit_codes
 from blinkpy.common.host import Host
 from blinkpy.common.system.log_utils import configure_logging
-from blinkpy.web_tests.models.test_expectations import (
-    TestExpectations, ParseError)
+from blinkpy.web_tests.models.test_expectations import (TestExpectations,
+                                                        ParseError)
 
 from blinkpy.web_tests.port.factory import platform_options
 
@@ -45,16 +45,17 @@
 def PresubmitCheckTestExpectations(input_api, output_api):
     os_path = input_api.os_path
     lint_path = os_path.join(
-        os_path.dirname(os_path.abspath(__file__)),
-        '..', '..', 'lint_test_expectations.py')
+        os_path.dirname(os_path.abspath(__file__)), '..', '..',
+        'lint_test_expectations.py')
     _, errs = input_api.subprocess.Popen(
         [input_api.python_executable, lint_path],
         stdout=input_api.subprocess.PIPE,
         stderr=input_api.subprocess.PIPE).communicate()
     if not errs:
-        return [output_api.PresubmitError(
-            "lint_test_expectations.py failed "
-            "to produce output; check by hand. ")]
+        return [
+            output_api.PresubmitError("lint_test_expectations.py failed "
+                                      "to produce output; check by hand. ")
+        ]
     if errs.strip() != 'Lint succeeded.':
         return [output_api.PresubmitError(errs)]
     return []
@@ -65,23 +66,22 @@
 
     # Add all extra expectation files to be linted.
     options.additional_expectations.extend([
-        host.filesystem.join(
-            port.web_tests_dir(), 'android', 'ClankWPTOverrideExpectations'),
-        host.filesystem.join(
-            port.web_tests_dir(), 'android', 'WebviewWPTOverrideExpectations'),
-        host.filesystem.join(
-            port.web_tests_dir(), 'android', 'WeblayerWPTOverrideExpectations'),
-        host.filesystem.join(
-            port.web_tests_dir(), 'android', 'AndroidWPTNeverFixTests'),
-        host.filesystem.join(
-            port.web_tests_dir(), 'WPTOverrideExpectations'),
-        host.filesystem.join(
-            port.web_tests_dir(), 'WebGPUExpectations'),
+        host.filesystem.join(port.web_tests_dir(), 'android',
+                             'ClankWPTOverrideExpectations'),
+        host.filesystem.join(port.web_tests_dir(), 'android',
+                             'WebviewWPTOverrideExpectations'),
+        host.filesystem.join(port.web_tests_dir(), 'android',
+                             'WeblayerWPTOverrideExpectations'),
+        host.filesystem.join(port.web_tests_dir(), 'android',
+                             'AndroidWPTNeverFixTests'),
+        host.filesystem.join(port.web_tests_dir(), 'WPTOverrideExpectations'),
+        host.filesystem.join(port.web_tests_dir(), 'WebGPUExpectations'),
     ])
 
     ports_to_lint = [
         host.port_factory.get(name, options=options)
-        for name in host.port_factory.all_port_names(options.platform)]
+        for name in host.port_factory.all_port_names(options.platform)
+    ]
 
     # In general, the set of TestExpectation files should be the same for
     # all ports. However, the method used to list expectations files is
@@ -101,9 +101,13 @@
         expectations_dict.update(port.all_expectations_dict())
         config_macro_dict = port.configuration_specifier_macros()
         if config_macro_dict:
-            all_system_specifiers.update({s.lower() for s in config_macro_dict.keys()})
             all_system_specifiers.update(
-                {s.lower() for s in reduce(lambda x, y: x + y, config_macro_dict.values())})
+                {s.lower()
+                 for s in config_macro_dict.keys()})
+            all_system_specifiers.update({
+                s.lower()
+                for s in reduce(lambda x, y: x + y, config_macro_dict.values())
+            })
         for path in port.extra_expectations_files():
             if host.filesystem.exists(path):
                 expectations_dict[path] = host.filesystem.read_text_file(path)
@@ -116,9 +120,10 @@
             if not line or line.startswith('#'):
                 continue
             if line.startswith('Bug('):
-                error = (("%s:%d Expectation '%s' has the Bug(...) token, "
-                          "The token has been removed in the new expectations format") %
-                          (host.filesystem.basename(path), lineno, line))
+                error = ((
+                    "%s:%d Expectation '%s' has the Bug(...) token, "
+                    "The token has been removed in the new expectations format"
+                ) % (host.filesystem.basename(path), lineno, line))
                 _log.error(error)
                 failures.append(error)
                 _log.error('')
@@ -137,8 +142,7 @@
         # Create a TestExpectations instance and see if exception is raised
         try:
             TestExpectations(
-                ports_to_lint[0],
-                expectations_dict={path: content})
+                ports_to_lint[0], expectations_dict={path: content})
         except ParseError as error:
             _log.error(str(error))
             failures.append(str(error))
@@ -158,7 +162,7 @@
         suite_comps = suite.full_prefix.split(port.TEST_PATH_SEPARATOR)
         prefix = suite_comps[1]
         normalized_bases = [port.normalize_test_name(b) for b in suite.bases]
-        normalized_bases.sort();
+        normalized_bases.sort()
         for i in range(1, len(normalized_bases)):
             for j in range(0, i):
                 if normalized_bases[i].startswith(normalized_bases[j]):
@@ -175,7 +179,8 @@
         path_to_readme_md = fs.join(*comps)
         for base in suite.bases:
             if not base:
-                failure = 'Base value in virtual suite "{}" should not be an empty string'.format(prefix)
+                failure = 'Base value in virtual suite "{}" should not be an empty string'.format(
+                    prefix)
                 _log.error(failure)
                 failures.append(failure)
                 continue
@@ -191,7 +196,8 @@
                 continue
             comps = [web_tests_dir] + suite_comps + base_comps + ['README.txt']
             path_to_readme_txt = fs.join(*comps)
-            if not fs.exists(path_to_readme_md) and not fs.exists(path_to_readme_txt):
+            if (not fs.exists(path_to_readme_md)
+                    and not fs.exists(path_to_readme_txt)):
                 failure = '"{}" and "{}" are both missing (each virtual suite must have one).'.format(
                     path_to_readme_txt, path_to_readme_md)
                 _log.error(failure)
@@ -219,9 +225,11 @@
             continue
         failure = ''
         if line in parsed_lines:
-            failure = '%s:%d duplicate with line %d: %s' % (smoke_tests_file, line_number, parsed_lines[line], line)
+            failure = '%s:%d duplicate with line %d: %s' % \
+                (smoke_tests_file, line_number, parsed_lines[line], line)
         elif not port.test_exists(line):
-            failure = '%s:%d Test does not exist: %s' % (smoke_tests_file, line_number, line)
+            failure = '%s:%d Test does not exist: %s' % (smoke_tests_file,
+                                                         line_number, line)
         if failure:
             _log.error(failure)
             failures.append(failure)
@@ -250,12 +258,19 @@
 
 
 def main(argv, stderr, host=None):
-    parser = optparse.OptionParser(option_list=platform_options(use_globs=True))
+    parser = optparse.OptionParser(
+        option_list=platform_options(use_globs=True))
     parser.add_option('--json', help='Path to JSON output file')
-    parser.add_option('--verbose', action='store_true', default=False,
-                      help='log extra details that may be helpful when debugging')
-    parser.add_option('--additional-expectations', action='append', default=[],
-                      help='paths to additional expectation files to lint.')
+    parser.add_option(
+        '--verbose',
+        action='store_true',
+        default=False,
+        help='log extra details that may be helpful when debugging')
+    parser.add_option(
+        '--additional-expectations',
+        action='append',
+        default=[],
+        help='paths to additional expectation files to lint.')
 
     options, _ = parser.parse_args(argv)
 
@@ -275,7 +290,8 @@
         host.executive.error_output_limit = None
     else:
         # PRESUBMIT.py relies on our output, so don't include timestamps.
-        configure_logging(logging_level=logging.INFO, stream=stderr, include_time=False)
+        configure_logging(
+            logging_level=logging.INFO, stream=stderr, include_time=False)
 
     try:
         exit_status = run_checks(host, options)
diff --git a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py
index d7ad122..11f991a 100644
--- a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py
@@ -39,7 +39,6 @@
 
 
 class FakePort(object):
-
     def __init__(self, host, name, path):
         self.host = host
         self.name = name
@@ -84,7 +83,6 @@
 
 
 class FakeFactory(object):
-
     def __init__(self, host, ports):
         self.host = host
         self.ports = {}
@@ -99,23 +97,29 @@
 
 
 class LintTest(LoggingTestCase):
-
     def test_all_configurations(self):
         host = MockHost()
         host.ports_parsed = []
-        host.port_factory = FakeFactory(host, (FakePort(host, 'a', 'path-to-a'),
-                                               FakePort(host, 'b', 'path-to-b'),
-                                               FakePort(host, 'b-win', 'path-to-b')))
+        host.port_factory = FakeFactory(
+            host,
+            (FakePort(host, 'a', 'path-to-a'), FakePort(
+                host, 'b', 'path-to-b'), FakePort(host, 'b-win', 'path-to-b')))
 
-        options = optparse.Values({'platform': 'a', 'additional_expectations': []})
+        options = optparse.Values({
+            'platform': 'a',
+            'additional_expectations': []
+        })
         res = lint_test_expectations.lint(host, options)
         self.assertEqual(res, [])
         self.assertEqual(host.ports_parsed, ['a', 'b', 'b-win'])
 
-    @unittest.skip('crbug.com/986447, re-enable after merging crrev.com/c/1918294')
+    @unittest.skip(
+        'crbug.com/986447, re-enable after merging crrev.com/c/1918294')
     def test_lint_test_files(self):
         options = optparse.Values({
-            'additional_expectations': [], 'platform': 'test-mac-mac10.10'})
+            'additional_expectations': [],
+            'platform': 'test-mac-mac10.10'
+        })
         host = MockHost()
 
         host.port_factory.all_port_names = lambda platform=None: [platform]
@@ -125,7 +129,10 @@
 
     def test_lint_test_files_errors(self):
         options = optparse.Values({
-            'additional_expectations': [], 'platform': 'test', 'debug_rwt_logging': False})
+            'additional_expectations': [],
+            'platform': 'test',
+            'debug_rwt_logging': False
+        })
         host = MockHost()
 
         port = host.port_factory.get(options.platform, options=options)
@@ -143,7 +150,10 @@
 
     def test_extra_files_errors(self):
         options = optparse.Values({
-            'additional_expectations': [], 'platform': 'test', 'debug_rwt_logging': False})
+            'additional_expectations': [],
+            'platform': 'test',
+            'debug_rwt_logging': False
+        })
         host = MockHost()
 
         port = host.port_factory.get(options.platform, options=options)
@@ -151,7 +161,8 @@
 
         host.port_factory.get = lambda platform, options=None: port
         host.port_factory.all_port_names = lambda platform=None: [port.name()]
-        host.filesystem.write_text_file(WEB_TEST_DIR + '/LeakExpectations', '-- syntax error')
+        host.filesystem.write_text_file(WEB_TEST_DIR + '/LeakExpectations',
+                                        '-- syntax error')
 
         res = lint_test_expectations.lint(host, options)
 
@@ -161,7 +172,10 @@
 
     def test_lint_flag_specific_expectation_errors(self):
         options = optparse.Values({
-            'platform': 'test', 'debug_rwt_logging': False, 'additional_expectations': []})
+            'platform': 'test',
+            'debug_rwt_logging': False,
+            'additional_expectations': []
+        })
         host = MockHost()
 
         port = host.port_factory.get(options.platform, options=options)
@@ -178,17 +192,20 @@
         self.assertIn('does/not/exist', all_logs)
         self.assertNotIn('noproblem', all_logs)
 
-    def test_lint_conflicts_in_test_expectations_between_os_and_os_version(self):
+    def test_lint_conflicts_in_test_expectations_between_os_and_os_version(
+            self):
         options = optparse.Values({
-            'additional_expectations': [], 'platform': 'test', 'debug_rwt_logging': False})
+            'additional_expectations': [],
+            'platform': 'test',
+            'debug_rwt_logging': False
+        })
         host = MockHost()
 
         port = host.port_factory.get(options.platform, options=options)
-        test_expectations = (
-            '# tags: [ mac mac10.10 ]\n'
-            '# results: [ Failure Pass ]\n'
-            '[ mac ] test1 [ Failure ]\n'
-            '[ mac10.10 ] test1 [ Pass ]\n')
+        test_expectations = ('# tags: [ mac mac10.10 ]\n'
+                             '# results: [ Failure Pass ]\n'
+                             '[ mac ] test1 [ Failure ]\n'
+                             '[ mac10.10 ] test1 [ Pass ]\n')
         port.expectations_dict = lambda: {
             'testexpectations': test_expectations}
 
@@ -203,26 +220,31 @@
 
 
 class CheckVirtualSuiteTest(unittest.TestCase):
-
     def setUp(self):
         self.host = MockHost()
-        self.options = optparse.Values({'platform': 'test', 'debug_rwt_logging': False})
+        self.options = optparse.Values({
+            'platform': 'test',
+            'debug_rwt_logging': False
+        })
         self.port = self.host.port_factory.get('test', options=self.options)
         self.host.port_factory.get = lambda options=None: self.port
 
     def test_check_virtual_test_suites_readme(self):
         self.port.virtual_test_suites = lambda: [
             VirtualTestSuite(prefix='foo', bases=['test'], args=['--foo']),
-            VirtualTestSuite(prefix='bar', bases=['test'], args=['--bar']),
-        ]
+            VirtualTestSuite(prefix='bar', bases=['test'], args=['--bar']), ]
         self.host.filesystem.maybe_make_directory(WEB_TEST_DIR + '/test')
 
-        res = lint_test_expectations.check_virtual_test_suites(self.host, self.options)
+        res = lint_test_expectations.check_virtual_test_suites(
+            self.host, self.options)
         self.assertEqual(len(res), 2)
 
-        self.host.filesystem.files[WEB_TEST_DIR + '/virtual/foo/README.md'] = ''
-        self.host.filesystem.files[WEB_TEST_DIR + '/virtual/bar/test/README.txt'] = ''
-        res = lint_test_expectations.check_virtual_test_suites(self.host, self.options)
+        self.host.filesystem.files[WEB_TEST_DIR +
+                                   '/virtual/foo/README.md'] = ''
+        self.host.filesystem.files[WEB_TEST_DIR +
+                                   '/virtual/bar/test/README.txt'] = ''
+        res = lint_test_expectations.check_virtual_test_suites(
+            self.host, self.options)
         self.assertFalse(res)
 
     def test_check_virtual_test_suites_redundant(self):
@@ -232,7 +254,8 @@
 
         self.host.filesystem.exists = lambda _: True
         self.host.filesystem.isdir = lambda _: True
-        res = lint_test_expectations.check_virtual_test_suites(self.host, self.options)
+        res = lint_test_expectations.check_virtual_test_suites(
+            self.host, self.options)
         self.assertEqual(len(res), 1)
 
     def test_check_virtual_test_suites_non_redundant(self):
@@ -242,7 +265,8 @@
 
         self.host.filesystem.exists = lambda _: True
         self.host.filesystem.isdir = lambda _: True
-        res = lint_test_expectations.check_virtual_test_suites(self.host, self.options)
+        res = lint_test_expectations.check_virtual_test_suites(
+            self.host, self.options)
         self.assertEqual(len(res), 0)
 
     def test_check_virtual_test_suites_non_existent_base(self):
@@ -252,13 +276,14 @@
 
         self.host.filesystem.maybe_make_directory(WEB_TEST_DIR + '/base1')
         self.host.filesystem.files[WEB_TEST_DIR + '/base3.html'] = ''
-        self.host.filesystem.files[WEB_TEST_DIR + '/virtual/foo/README.md'] = ''
-        res = lint_test_expectations.check_virtual_test_suites(self.host, self.options)
+        self.host.filesystem.files[WEB_TEST_DIR +
+                                   '/virtual/foo/README.md'] = ''
+        res = lint_test_expectations.check_virtual_test_suites(
+            self.host, self.options)
         self.assertEqual(len(res), 1)
 
 
 class MainTest(unittest.TestCase):
-
     def setUp(self):
         self.orig_lint_fn = lint_test_expectations.lint
         self.orig_check_fn = lint_test_expectations.check_virtual_test_suites
diff --git a/third_party/blink/tools/blinkpy/web_tests/merge_results.py b/third_party/blink/tools/blinkpy/web_tests/merge_results.py
index 41560aa..332fcf2a 100644
--- a/third_party/blink/tools/blinkpy/web_tests/merge_results.py
+++ b/third_party/blink/tools/blinkpy/web_tests/merge_results.py
@@ -1,7 +1,6 @@
 # Copyright 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-
 """Classes for merging web tests results directories together.
 
 This is split into three parts:
@@ -42,7 +41,6 @@
 from blinkpy.common.system.filesystem import FileSystem
 from blinkpy.common.system.log_utils import configure_logging
 
-
 _log = logging.getLogger(__name__)
 
 # The output JSON has the following arguments overwritten with a value from
@@ -56,7 +54,6 @@
     ("chromium_revision", "got_revision_cp"),
 ]
 
-
 # Classes for recursively merging a JSON like dictionary together.
 # ------------------------------------------------------------------------
 
@@ -112,14 +109,12 @@
     """Base exception for merge failing."""
 
     def __init__(self, msg, name, objs):
-        emsg = (
-            "Failure merging {name}: "
-            " {msg}\nTrying to merge {objs}."
-        ).format(
-            name=name,
-            msg=msg,
-            objs=objs,
-        )
+        emsg = ("Failure merging {name}: "
+                " {msg}\nTrying to merge {objs}.").format(
+                    name=name,
+                    msg=msg,
+                    objs=objs,
+                )
         Exception.__init__(self, emsg)
 
     @classmethod
@@ -167,20 +162,17 @@
 
         self.add_helper(
             TypeMatch(types.ListType, types.TupleType), self.merge_listlike)
-        self.add_helper(
-            TypeMatch(types.DictType), self.merge_dictlike)
+        self.add_helper(TypeMatch(types.DictType), self.merge_dictlike)
 
     def fallback_matcher(self, objs, name=None):
-        raise MergeFailure(
-            "No merge helper found!", name, objs)
+        raise MergeFailure("No merge helper found!", name, objs)
 
     def merge_equal(self, objs, name=None):
         """Merge equal objects together."""
         obj_0 = objs[0]
         for obj_n in objs[1:]:
             if obj_0 != obj_n:
-                raise MergeFailure(
-                    "Unable to merge!", name, (obj_0, obj_n))
+                raise MergeFailure("Unable to merge!", name, (obj_0, obj_n))
         return obj_0
 
     def merge_listlike(self, lists, name=None):  # pylint: disable=unused-argument
@@ -191,7 +183,10 @@
             output.extend(list_n)
         return lists[0].__class__(output)
 
-    def merge_dictlike(self, dicts, name=None, order_cls=collections.OrderedDict):
+    def merge_dictlike(self,
+                       dicts,
+                       name=None,
+                       order_cls=collections.OrderedDict):
         """Merge things which are dictionaries.
 
         Args:
@@ -301,10 +296,8 @@
 
         if nonmatching:
             raise MergeFailure(
-                '\n'.join(
-                    ['File contents don\'t match:'] + nonmatching),
-                out_filename,
-                to_merge)
+                '\n'.join(['File contents don\'t match:'] + nonmatching),
+                out_filename, to_merge)
 
         self.filesystem.write_binary_file(out_filename, data)
 
@@ -344,7 +337,10 @@
         output.
     """
 
-    def __init__(self, filesystem, json_data_merger=None, json_data_value_overrides=None):
+    def __init__(self,
+                 filesystem,
+                 json_data_merger=None,
+                 json_data_value_overrides=None):
         MergeFiles.__init__(self, filesystem)
         self._json_data_merger = json_data_merger or JSONMerger()
         self._json_data_value_overrides = json_data_value_overrides or {}
@@ -367,18 +363,17 @@
             if before_0 != before_n:
                 raise MergeFailure(
                     "jsonp starting data from %s doesn't match." % filename_n,
-                    out_filename,
-                    [before_0, before_n])
+                    out_filename, [before_0, before_n])
 
             if after_0 != after_n:
                 raise MergeFailure(
                     "jsonp ending data from %s doesn't match." % filename_n,
-                    out_filename,
-                    [after_0, after_n])
+                    out_filename, [after_0, after_n])
 
             input_data.append(new_json_data_n)
 
-        output_data = self._json_data_merger.merge(input_data, name=out_filename)
+        output_data = self._json_data_merger.merge(
+            input_data, name=out_filename)
         output_data.update(self._json_data_value_overrides)
 
         self.dump_jsonp(
@@ -419,9 +414,8 @@
         """
         fd.write(before)
         fd.write(
-            re.subn(
-                '\\s+\n', '\n',
-                json.dumps(json_data, indent=2, sort_keys=True))[0])
+            re.subn('\\s+\n', '\n',
+                    json.dumps(json_data, indent=2, sort_keys=True))[0])
         fd.write(after)
 
 
@@ -430,6 +424,7 @@
 
     Needed so that we don't do this work if the logging statement is disabled.
     """
+
     def __init__(self, *args, **kw):
         self.args = args
         self.kw = kw
@@ -455,17 +450,21 @@
         self.filesystem = filesystem or FileSystem()
 
         # Default to just checking the file contents matches.
-        self.add_helper(lambda *args: True, MergeFilesMatchingContents(self.filesystem))
+        self.add_helper(lambda *args: True,
+                        MergeFilesMatchingContents(self.filesystem))
         # Copy the file it it's the only one.
-        self.add_helper(lambda _, to_merge: len(to_merge) == 1, MergeFilesOne(self.filesystem))
+        self.add_helper(lambda _, to_merge: len(to_merge) == 1,
+                        MergeFilesOne(self.filesystem))
 
     def merge(self, output_dir, to_merge_dirs):
-        output_dir = self.filesystem.realpath(self.filesystem.abspath(output_dir))
+        output_dir = self.filesystem.realpath(
+            self.filesystem.abspath(output_dir))
 
         merge_dirs = []
         # Normalize the given directory values.
         for base_dir in to_merge_dirs:
-            merge_dirs.append(self.filesystem.realpath(self.filesystem.abspath(base_dir)))
+            merge_dirs.append(
+                self.filesystem.realpath(self.filesystem.abspath(base_dir)))
         merge_dirs.sort()
 
         _log.debug("Merging following paths:")
@@ -487,7 +486,8 @@
                 assert dir_path.startswith(base_dir)
                 for f in filenames:
                     # rel_file is the path of f relative to the base directory
-                    rel_file = self.filesystem.join(dir_path, f)[len(base_dir) + 1:]
+                    rel_file = self.filesystem.join(dir_path,
+                                                    f)[len(base_dir) + 1:]
                     files.setdefault(rel_file, []).append(base_dir)
 
         # Go through each file and try to merge it.
@@ -495,19 +495,21 @@
         for partial_file_path, in_dirs in sorted(files.iteritems()):
             out_path = self.filesystem.join(output_dir, partial_file_path)
             if self.filesystem.exists(out_path):
-                raise MergeFailure(
-                    'File %s already exist in output.', out_path, None)
+                raise MergeFailure('File %s already exist in output.',
+                                   out_path, None)
 
             dirname = self.filesystem.dirname(out_path)
             if not self.filesystem.exists(dirname):
                 self.filesystem.maybe_make_directory(dirname)
 
-            to_merge = [self.filesystem.join(d, partial_file_path) for d in in_dirs]
+            to_merge = [
+                self.filesystem.join(d, partial_file_path) for d in in_dirs
+            ]
 
             # If we're only 'merging' one file, don't output to the log. Not a
             # very useful message.
             if len(to_merge) > 1:
-              _log.debug("Creating merged %s from %s", out_path, to_merge)
+                _log.debug("Creating merged %s from %s", out_path, to_merge)
 
             for match_func, merge_func in reversed(self.helpers):
 
@@ -531,6 +533,7 @@
     allow_unknown_if_matching:
         Allow unknown keys found in multiple files if the value matches in all.
     """
+
     def __init__(self, allow_unknown_if_matching=False):
         JSONMerger.__init__(self)
 
@@ -555,9 +558,7 @@
         # combine identical actions into one. The JSON files contain many keys,
         # and the cost of iterating over and executing multiple identical
         # helpers is measurable.
-        self.add_helper(
-            NameRegexMatch('|'.join(matching)),
-            self.merge_equal)
+        self.add_helper(NameRegexMatch('|'.join(matching)), self.merge_equal)
 
         # These keys are accumulated sums we want to add together.
         addable = [
@@ -571,19 +572,16 @@
             ':num_failures_by_type:',
         ]
         self.add_helper(
-            NameRegexMatch('|'.join(addable)),
-            lambda o, name=None: sum(o))
+            NameRegexMatch('|'.join(addable)), lambda o, name=None: sum(o))
 
         # If any shard is interrupted, mark the whole thing as interrupted.
         self.add_helper(
-            NameRegexMatch(':interrupted$'),
-            lambda o, name=None: bool(sum(o)))
+            NameRegexMatch(':interrupted$'), lambda o, name=None: bool(sum(o)))
 
         # Web test directory value is randomly created on each shard, so
         # clear it.
         self.add_helper(
-            NameRegexMatch(':layout_tests_dir$'),
-            lambda o, name=None: None)
+            NameRegexMatch(':layout_tests_dir$'), lambda o, name=None: None)
 
         # seconds_since_epoch is the start time, so we just take the earliest.
         self.add_helper(
@@ -593,7 +591,8 @@
     def fallback_matcher(self, objs, name=None):
         if self.allow_unknown_if_matching:
             result = self.merge_equal(objs, name)
-            _log.warning('Unknown value %s, accepting anyway as it matches.', name)
+            _log.warning('Unknown value %s, accepting anyway as it matches.',
+                         name)
             return result
         return JSONMerger.fallback_matcher(self, objs, name)
 
@@ -601,7 +600,8 @@
 class WebTestDirMerger(DirMerger):
     """Merge web test result directory."""
 
-    def __init__(self, filesystem=None,
+    def __init__(self,
+                 filesystem=None,
                  results_json_value_overrides=None,
                  results_json_allow_unknown_if_matching=False):
         DirMerger.__init__(self, filesystem)
@@ -633,7 +633,8 @@
         results_json_file_merger = MergeFilesJSONP(
             self.filesystem,
             JSONTestResultsMerger(
-                allow_unknown_if_matching=results_json_allow_unknown_if_matching),
+                allow_unknown_if_matching=results_json_allow_unknown_if_matching
+            ),
             json_data_value_overrides=results_json_value_overrides or {})
 
         self.add_helper(
@@ -643,8 +644,7 @@
             FilenameRegexMatch(r'full_results\.json$'),
             results_json_file_merger)
         self.add_helper(
-            FilenameRegexMatch(r'output\.json$'),
-            results_json_file_merger)
+            FilenameRegexMatch(r'output\.json$'), results_json_file_merger)
         self.add_helper(
             FilenameRegexMatch(r'full_results_jsonp\.js$'),
             results_json_file_merger)
@@ -674,10 +674,10 @@
 
     layout_test_results = fs.join(directory, 'layout-test-results')
     merged_output_json = fs.join(directory, 'output.json')
-    if fs.exists(layout_test_results) and not fs.remove_contents(layout_test_results):
-        raise IOError(
-            ('Unable to remove output directory %s contents!\n'
-             'See log output for errors.') % layout_test_results)
+    if (fs.exists(layout_test_results)
+            and not fs.remove_contents(layout_test_results)):
+        raise IOError(('Unable to remove output directory %s contents!\n'
+                       'See log output for errors.') % layout_test_results)
     if fs.exists(merged_output_json):
         fs.remove(merged_output_json)
 
@@ -696,34 +696,42 @@
 """
 
     parser.add_argument(
-        '-v', '--verbose', action='store_true',
+        '-v',
+        '--verbose',
+        action='store_true',
         help='Output information about merging progress.')
 
     parser.add_argument(
         '--results-json-override-value',
-        nargs=2, metavar=('KEY', 'VALUE'), default=[],
+        nargs=2,
+        metavar=('KEY', 'VALUE'),
+        default=[],
         action='append',
         help='Override the value of a value in the result style JSON file '
-             '(--result-jsons-override-value layout_test_dirs /tmp/output).')
+        '(--result-jsons-override-value layout_test_dirs /tmp/output).')
     parser.add_argument(
         '--results-json-allow-unknown-if-matching',
-        action='store_true', default=False,
+        action='store_true',
+        default=False,
         help='Allow unknown values in the result.json file as long as the '
-             'value match on all shards.')
+        'value match on all shards.')
 
     parser.add_argument(
         '--output-directory',
         help='Directory to create the merged results in.')
     parser.add_argument(
         '--allow-existing-output-directory',
-        action='store_true', default=False,
+        action='store_true',
+        default=False,
         help='Allow merging results into a directory which already exists.')
     parser.add_argument(
         '--remove-existing-layout-test-results',
-        action='store_true', default=False,
+        action='store_true',
+        default=False,
         help='Remove existing layout test results from the output directory.')
     parser.add_argument(
-        '--input-directories', nargs='+',
+        '--input-directories',
+        nargs='+',
         help='Directories to merge the results from.')
 
     # Swarming Isolated Merge Script API
@@ -734,24 +742,33 @@
     #     shard0/output.json \
     #     shard1/output.json
     parser.add_argument(
-        '-o', '--output-json',
-        help='(Swarming Isolated Merge Script API) Output JSON file to create.')
+        '-o',
+        '--output-json',
+        help='(Swarming Isolated Merge Script API) Output JSON file to create.'
+    )
     parser.add_argument(
         '--build-properties',
-        help='(Swarming Isolated Merge Script API) Build property JSON file provided by recipes.')
+        help=
+        '(Swarming Isolated Merge Script API) Build property JSON file provided by recipes.'
+    )
     parser.add_argument(
         '--task-output-dir',
-        help='(Swarming Isolated Merge Script API) Directory containing all swarming task results.')
+        help=
+        '(Swarming Isolated Merge Script API) Directory containing all swarming task results.'
+    )
     parser.add_argument(
         '--results-json-override-with-build-property',
-        nargs=2, metavar=('RESULT_JSON_KEY', 'BUILD_PROPERTY_KEY'), default=[],
+        nargs=2,
+        metavar=('RESULT_JSON_KEY', 'BUILD_PROPERTY_KEY'),
+        default=[],
         action='append',
         help='Override the value of a value in the result style JSON file '
-             '(--result-jsons-override-value layout_test_dirs /tmp/output).')
+        '(--result-jsons-override-value layout_test_dirs /tmp/output).')
     parser.add_argument(
         '--summary-json',
-        help='(Swarming Isolated Merge Script API) Summary of shard state running on swarming.'
-             '(Output of the swarming.py collect --task-summary-json=XXX command.)')
+        help=
+        '(Swarming Isolated Merge Script API) Summary of shard state running on swarming.'
+        '(Output of the swarming.py collect --task-summary-json=XXX command.)')
 
     # Script to run after merging the directories together. Normally used with archive_layout_test_results.py
     # scripts/slave/chromium/archive_layout_test_results.py \
@@ -771,8 +788,7 @@
     # The position arguments depend on if we are using the isolated merge
     # script API mode or not.
     parser.add_argument(
-        'positional', nargs='*',
-        help='output.json from shards.')
+        'positional', nargs='*', help='output.json from shards.')
 
     args = parser.parse_args(argv)
     if args.verbose:
@@ -790,8 +806,11 @@
         # For now we just check nobody is supply arguments we didn't expect.
         if args.results_json_override_with_build_property:
             for result_key, build_prop_key in args.results_json_override_with_build_property:
-                assert (result_key, build_prop_key) in RESULTS_JSON_VALUE_OVERRIDE_WITH_BUILD_PROPERTY, (
-                    "%s not in %s" % (result_key, RESULTS_JSON_VALUE_OVERRIDE_WITH_BUILD_PROPERTY))
+                assert (result_key, build_prop_key
+                        ) in RESULTS_JSON_VALUE_OVERRIDE_WITH_BUILD_PROPERTY, (
+                            "%s not in %s" %
+                            (result_key,
+                             RESULTS_JSON_VALUE_OVERRIDE_WITH_BUILD_PROPERTY))
 
         if not args.output_directory:
             args.output_directory = os.getcwd()
@@ -808,7 +827,8 @@
         args.input_directories = args.positional
 
     if not args.output_directory:
-        args.output_directory = tempfile.mkdtemp(suffix='_merged_web_test_results')
+        args.output_directory = tempfile.mkdtemp(
+            suffix='_merged_web_test_results')
         args.allow_existing_output_directory = True
 
     assert args.output_directory
@@ -820,14 +840,18 @@
 
         for result_key, build_prop_key in RESULTS_JSON_VALUE_OVERRIDE_WITH_BUILD_PROPERTY:
             if build_prop_key not in build_properties:
-                logging.warn('Required build property key "%s" was not found!', build_prop_key)
+                logging.warn('Required build property key "%s" was not found!',
+                             build_prop_key)
                 continue
-            results_json_value_overrides[result_key] = build_properties[build_prop_key]
-        logging.debug('results_json_value_overrides: %r', results_json_value_overrides)
+            results_json_value_overrides[result_key] = build_properties[
+                build_prop_key]
+        logging.debug('results_json_value_overrides: %r',
+                      results_json_value_overrides)
 
     merger = WebTestDirMerger(
         results_json_value_overrides=results_json_value_overrides,
-        results_json_allow_unknown_if_matching=args.results_json_allow_unknown_if_matching)
+        results_json_allow_unknown_if_matching=args.
+        results_json_allow_unknown_if_matching)
 
     ensure_empty_dir(
         FileSystem(),
@@ -839,8 +863,8 @@
 
     merged_output_json = os.path.join(args.output_directory, 'output.json')
     if os.path.exists(merged_output_json) and args.output_json:
-        logging.debug(
-            'Copying output.json from %s to %s', merged_output_json, args.output_json)
+        logging.debug('Copying output.json from %s to %s', merged_output_json,
+                      args.output_json)
         shutil.copyfile(merged_output_json, args.output_json)
 
     if args.post_merge_script:
diff --git a/third_party/blink/tools/blinkpy/web_tests/merge_results_unittest.py b/third_party/blink/tools/blinkpy/web_tests/merge_results_unittest.py
index 5035db0..0ce7b35 100644
--- a/third_party/blink/tools/blinkpy/web_tests/merge_results_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/merge_results_unittest.py
@@ -18,10 +18,8 @@
 
 
 class JSONMergerTests(unittest.TestCase):
-
     def test_type_match(self):
-        self.assertTrue(
-            merge_results.TypeMatch(types.DictType)(dict()))
+        self.assertTrue(merge_results.TypeMatch(types.DictType)(dict()))
         self.assertFalse(
             merge_results.TypeMatch(types.ListType, types.TupleType)(dict()))
         self.assertTrue(
@@ -43,18 +41,14 @@
         ]
 
         for expected, (inputa, inputb) in tests:
-            self.assertListEqual(
-                expected, m.merge_listlike([inputa, inputb]))
-            self.assertListEqual(
-                expected, m.merge([inputa, inputb]))
+            self.assertListEqual(expected, m.merge_listlike([inputa, inputb]))
+            self.assertListEqual(expected, m.merge([inputa, inputb]))
             self.assertSequenceEqual(
-                expected,
-                m.merge_listlike([tuple(inputa), tuple(inputb)]),
-                types.TupleType)
-            self.assertSequenceEqual(
-                expected,
-                m.merge([tuple(inputa), tuple(inputb)]),
-                types.TupleType)
+                expected, m.merge_listlike([tuple(inputa),
+                                            tuple(inputb)]), types.TupleType)
+            self.assertSequenceEqual(expected,
+                                     m.merge([tuple(inputa),
+                                              tuple(inputb)]), types.TupleType)
 
     def test_merge_simple_dict(self):
         m = merge_results.JSONMerger()
@@ -62,16 +56,73 @@
 
         tests = [
             # expected, (inputa, inputb)
-            ({'a': 1}, ({'a': 1}, {'a': 1})),
-
-            ({'a': 1, 'b': 2}, ({'a': 1, 'b': 2}, {})),
-            ({'a': 1, 'b': 2}, ({}, {'a': 1, 'b': 2})),
-            ({'a': 1, 'b': 2}, ({'a': 1}, {'b': 2})),
-
-            ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1, 'b': 2, 'c': 3}, {})),
-            ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1, 'b': 2}, {'c': 3})),
-            ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1}, {'b': 2, 'c': 3})),
-            ({'a': 1, 'b': 2, 'c': 3}, ({}, {'a': 1, 'b': 2, 'c': 3})),
+            ({
+                'a': 1
+            }, ({
+                'a': 1
+            }, {
+                'a': 1
+            })),
+            ({
+                'a': 1,
+                'b': 2
+            }, ({
+                'a': 1,
+                'b': 2
+            }, {})),
+            ({
+                'a': 1,
+                'b': 2
+            }, ({}, {
+                'a': 1,
+                'b': 2
+            })),
+            ({
+                'a': 1,
+                'b': 2
+            }, ({
+                'a': 1
+            }, {
+                'b': 2
+            })),
+            ({
+                'a': 1,
+                'b': 2,
+                'c': 3
+            }, ({
+                'a': 1,
+                'b': 2,
+                'c': 3
+            }, {})),
+            ({
+                'a': 1,
+                'b': 2,
+                'c': 3
+            }, ({
+                'a': 1,
+                'b': 2
+            }, {
+                'c': 3
+            })),
+            ({
+                'a': 1,
+                'b': 2,
+                'c': 3
+            }, ({
+                'a': 1
+            }, {
+                'b': 2,
+                'c': 3
+            })),
+            ({
+                'a': 1,
+                'b': 2,
+                'c': 3
+            }, ({}, {
+                'a': 1,
+                'b': 2,
+                'c': 3
+            })),
         ]
 
         for expected, (inputa, inputb) in tests:
@@ -85,10 +136,42 @@
 
         tests = [
             # expected, (inputa, inputb)
-            ({'a': [1, 2]}, ({'a': [1]}, {'a': [2]})),
-            ({'a': [1, 'c', 3]}, ({'a': [1]}, {'a': ['c', 3]})),
-            ({'a': [1], 'b': [2]}, ({'a': [1]}, {'b': [2]})),
-            ({'a': {'b': 1, 'c': 2}}, ({'a': {'b': 1}}, {'a': {'c': 2}})),
+            ({
+                'a': [1, 2]
+            }, ({
+                'a': [1]
+            }, {
+                'a': [2]
+            })),
+            ({
+                'a': [1, 'c', 3]
+            }, ({
+                'a': [1]
+            }, {
+                'a': ['c', 3]
+            })),
+            ({
+                'a': [1],
+                'b': [2]
+            }, ({
+                'a': [1]
+            }, {
+                'b': [2]
+            })),
+            ({
+                'a': {
+                    'b': 1,
+                    'c': 2
+                }
+            }, ({
+                'a': {
+                    'b': 1
+                }
+            }, {
+                'a': {
+                    'c': 2
+                }
+            })),
         ]
         for expected, (inputa, inputb) in tests:
             self.assertDictEqual(expected, m.merge_dictlike([inputa, inputb]))
@@ -100,46 +183,247 @@
         tests = [
             # expected, (inputa, inputb)
             (None, (None, None)),
-            ({'a': 1}, ({'a': 1}, None)),
-            ({'b': 2}, (None, {'b': 2})),
-
-            ({'a': 1}, ({'a': 1}, {'a': 1})),
+            ({
+                'a': 1
+            }, ({
+                'a': 1
+            }, None)),
+            ({
+                'b': 2
+            }, (None, {
+                'b': 2
+            })),
+            ({
+                'a': 1
+            }, ({
+                'a': 1
+            }, {
+                'a': 1
+            })),
 
             # "Left side" value is None
-            ({'a': None, 'b': 2}, ({'a': None, 'b': 2}, {})),
-            ({'a': None, 'b': 2}, ({}, {'a': None, 'b': 2})),
-            ({'a': None, 'b': 2}, ({'a': None}, {'b': 2})),
-
-            ({'a': None, 'b': 2, 'c': 3}, ({'a': None, 'b': 2, 'c': 3}, {})),
-            ({'a': None, 'b': 2, 'c': 3}, ({'a': None, 'b': 2}, {'c': 3})),
-            ({'a': None, 'b': 2, 'c': 3}, ({'a': None}, {'b': 2, 'c': 3})),
-            ({'a': None, 'b': 2, 'c': 3}, ({}, {'a': None, 'b': 2, 'c': 3})),
+            ({
+                'a': None,
+                'b': 2
+            }, ({
+                'a': None,
+                'b': 2
+            }, {})),
+            ({
+                'a': None,
+                'b': 2
+            }, ({}, {
+                'a': None,
+                'b': 2
+            })),
+            ({
+                'a': None,
+                'b': 2
+            }, ({
+                'a': None
+            }, {
+                'b': 2
+            })),
+            ({
+                'a': None,
+                'b': 2,
+                'c': 3
+            }, ({
+                'a': None,
+                'b': 2,
+                'c': 3
+            }, {})),
+            ({
+                'a': None,
+                'b': 2,
+                'c': 3
+            }, ({
+                'a': None,
+                'b': 2
+            }, {
+                'c': 3
+            })),
+            ({
+                'a': None,
+                'b': 2,
+                'c': 3
+            }, ({
+                'a': None
+            }, {
+                'b': 2,
+                'c': 3
+            })),
+            ({
+                'a': None,
+                'b': 2,
+                'c': 3
+            }, ({}, {
+                'a': None,
+                'b': 2,
+                'c': 3
+            })),
 
             # "Right side" value is None
-            ({'a': 1, 'b': None}, ({'a': 1, 'b': None}, {})),
-            ({'a': 1, 'b': None}, ({}, {'a': 1, 'b': None})),
-            ({'a': 1, 'b': None}, ({'a': 1}, {'b': None})),
-
-            ({'a': 1, 'b': None, 'c': 3}, ({'a': 1, 'b': None, 'c': 3}, {})),
-            ({'a': 1, 'b': None, 'c': 3}, ({'a': 1, 'b': None}, {'c': 3})),
-            ({'a': 1, 'b': None, 'c': 3}, ({'a': 1}, {'b': None, 'c': 3})),
-            ({'a': 1, 'b': None, 'c': 3}, ({}, {'a': 1, 'b': None, 'c': 3})),
+            ({
+                'a': 1,
+                'b': None
+            }, ({
+                'a': 1,
+                'b': None
+            }, {})),
+            ({
+                'a': 1,
+                'b': None
+            }, ({}, {
+                'a': 1,
+                'b': None
+            })),
+            ({
+                'a': 1,
+                'b': None
+            }, ({
+                'a': 1
+            }, {
+                'b': None
+            })),
+            ({
+                'a': 1,
+                'b': None,
+                'c': 3
+            }, ({
+                'a': 1,
+                'b': None,
+                'c': 3
+            }, {})),
+            ({
+                'a': 1,
+                'b': None,
+                'c': 3
+            }, ({
+                'a': 1,
+                'b': None
+            }, {
+                'c': 3
+            })),
+            ({
+                'a': 1,
+                'b': None,
+                'c': 3
+            }, ({
+                'a': 1
+            }, {
+                'b': None,
+                'c': 3
+            })),
+            ({
+                'a': 1,
+                'b': None,
+                'c': 3
+            }, ({}, {
+                'a': 1,
+                'b': None,
+                'c': 3
+            })),
 
             # Both values non-None
-            ({'a': 1, 'b': 2}, ({'a': 1, 'b': 2}, {})),
-            ({'a': 1, 'b': 2}, ({}, {'a': 1, 'b': 2})),
-            ({'a': 1, 'b': 2}, ({'a': 1}, {'b': 2})),
-
-            ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1, 'b': 2, 'c': 3}, {})),
-            ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1, 'b': 2}, {'c': 3})),
-            ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1}, {'b': 2, 'c': 3})),
-            ({'a': 1, 'b': 2, 'c': 3}, ({}, {'a': 1, 'b': 2, 'c': 3})),
+            ({
+                'a': 1,
+                'b': 2
+            }, ({
+                'a': 1,
+                'b': 2
+            }, {})),
+            ({
+                'a': 1,
+                'b': 2
+            }, ({}, {
+                'a': 1,
+                'b': 2
+            })),
+            ({
+                'a': 1,
+                'b': 2
+            }, ({
+                'a': 1
+            }, {
+                'b': 2
+            })),
+            ({
+                'a': 1,
+                'b': 2,
+                'c': 3
+            }, ({
+                'a': 1,
+                'b': 2,
+                'c': 3
+            }, {})),
+            ({
+                'a': 1,
+                'b': 2,
+                'c': 3
+            }, ({
+                'a': 1,
+                'b': 2
+            }, {
+                'c': 3
+            })),
+            ({
+                'a': 1,
+                'b': 2,
+                'c': 3
+            }, ({
+                'a': 1
+            }, {
+                'b': 2,
+                'c': 3
+            })),
+            ({
+                'a': 1,
+                'b': 2,
+                'c': 3
+            }, ({}, {
+                'a': 1,
+                'b': 2,
+                'c': 3
+            })),
 
             # Complex values
-            ({'a': [1, 2]}, ({'a': [1]}, {'a': [2]})),
-            ({'a': [1, 'c', 3]}, ({'a': [1]}, {'a': ['c', 3]})),
-            ({'a': [1], 'b': [2]}, ({'a': [1]}, {'b': [2]})),
-            ({'a': {'b': 1, 'c': 2}}, ({'a': {'b': 1}}, {'a': {'c': 2}})),
+            ({
+                'a': [1, 2]
+            }, ({
+                'a': [1]
+            }, {
+                'a': [2]
+            })),
+            ({
+                'a': [1, 'c', 3]
+            }, ({
+                'a': [1]
+            }, {
+                'a': ['c', 3]
+            })),
+            ({
+                'a': [1],
+                'b': [2]
+            }, ({
+                'a': [1]
+            }, {
+                'b': [2]
+            })),
+            ({
+                'a': {
+                    'b': 1,
+                    'c': 2
+                }
+            }, ({
+                'a': {
+                    'b': 1
+                }
+            }, {
+                'a': {
+                    'c': 2
+                }
+            })),
         ]
 
         for expected, (inputa, inputb) in tests:
@@ -171,8 +455,7 @@
     def test_custom_match_on_name(self):
         m = merge_results.JSONMerger()
         m.add_helper(
-            merge_results.NameRegexMatch('a'),
-            lambda o, name=None: sum(o))
+            merge_results.NameRegexMatch('a'), lambda o, name=None: sum(o))
 
         self.assertDictEqual({'a': 3}, m.merge([{'a': 1}, {'a': 2}]))
         with self.assertRaises(merge_results.MergeFailure):
@@ -180,8 +463,7 @@
 
         # Test that helpers that are added later have precedence.
         m.add_helper(
-            merge_results.NameRegexMatch('b'),
-            lambda o, name=None: sum(o))
+            merge_results.NameRegexMatch('b'), lambda o, name=None: sum(o))
         m.add_helper(
             merge_results.NameRegexMatch('b'),
             lambda o, name=None: o[0] - o[1])
@@ -189,17 +471,13 @@
 
     def test_custom_match_on_obj_type(self):
         m = merge_results.JSONMerger()
-        m.add_helper(
-            merge_results.TypeMatch(int),
-            lambda o, name=None: sum(o))
+        m.add_helper(merge_results.TypeMatch(int), lambda o, name=None: sum(o))
         self.assertDictEqual({'a': 3}, m.merge([{'a': 1}, {'a': 2}]))
         self.assertDictEqual({'b': 3}, m.merge([{'b': 1}, {'b': 2}]))
 
     def test_custom_match_on_obj_value(self):
         m = merge_results.JSONMerger()
-        m.add_helper(
-            merge_results.ValueMatch(3),
-            lambda o, name=None: sum(o))
+        m.add_helper(merge_results.ValueMatch(3), lambda o, name=None: sum(o))
         self.assertDictEqual({'a': 6}, m.merge([{'a': 3}, {'a': 3}]))
         self.assertDictEqual({'a': 5}, m.merge([{'a': 2}, {'a': 3}]))
         self.assertDictEqual({'a': 7}, m.merge([{'a': 3}, {'a': 4}]))
@@ -209,7 +487,11 @@
 
 class MergeFilesOneTests(FileSystemTestCase):
     def test(self):
-        mock_filesystem = MockFileSystem({'/s/file1': '1', '/s/file2': '2'}, dirs=['/output'])
+        mock_filesystem = MockFileSystem({
+            '/s/file1': '1',
+            '/s/file2': '2'
+        },
+                                         dirs=['/output'])
 
         merger = merge_results.MergeFilesOne(mock_filesystem)
 
@@ -222,7 +504,12 @@
 
 class MergeFilesMatchingContentsTests(FileSystemTestCase):
     def test(self):
-        mock_filesystem = MockFileSystem({'/s/file1': '1', '/s/file2': '2', '/s/file3': '1'}, dirs=['/output'])
+        mock_filesystem = MockFileSystem({
+            '/s/file1': '1',
+            '/s/file2': '2',
+            '/s/file3': '1'
+        },
+                                         dirs=['/output'])
 
         merger = merge_results.MergeFilesMatchingContents(mock_filesystem)
 
@@ -241,63 +528,95 @@
 
 class MergeFilesLinesSortedTests(FileSystemTestCase):
     def test(self):
-        mock_filesystem = MockFileSystem({'/s/file1': 'A\nC\n', '/s/file2': 'B\n', '/s/file3': 'A\nB\n'}, dirs=['/output'])
+        mock_filesystem = MockFileSystem({
+            '/s/file1': 'A\nC\n',
+            '/s/file2': 'B\n',
+            '/s/file3': 'A\nB\n'
+        },
+                                         dirs=['/output'])
 
         merger = merge_results.MergeFilesLinesSorted(mock_filesystem)
 
-        with self.assertFilesAdded(mock_filesystem, {'/output/out1': 'A\nC\n'}):
+        with self.assertFilesAdded(mock_filesystem,
+                                   {'/output/out1': 'A\nC\n'}):
             merger('/output/out1', ['/s/file1'])
 
         with self.assertFilesAdded(mock_filesystem, {'/output/out2': 'B\n'}):
             merger('/output/out2', ['/s/file2'])
 
-        with self.assertFilesAdded(mock_filesystem, {'/output/out3': 'A\nB\nC\n'}):
+        with self.assertFilesAdded(mock_filesystem,
+                                   {'/output/out3': 'A\nB\nC\n'}):
             merger('/output/out3', ['/s/file1', '/s/file2'])
 
-        with self.assertFilesAdded(mock_filesystem, {'/output/out4': 'A\nB\nB\n'}):
+        with self.assertFilesAdded(mock_filesystem,
+                                   {'/output/out4': 'A\nB\nB\n'}):
             merger('/output/out4', ['/s/file2', '/s/file3'])
 
 
 class MergeFilesKeepFilesTests(FileSystemTestCase):
-
     def test(self):
-        mock_filesystem = MockFileSystem({'/s1/file1': 'a', '/s2/file1': 'b', '/s3/file1': 'c'}, dirs=['/output'])
+        mock_filesystem = MockFileSystem({
+            '/s1/file1': 'a',
+            '/s2/file1': 'b',
+            '/s3/file1': 'c'
+        },
+                                         dirs=['/output'])
 
         merger = merge_results.MergeFilesKeepFiles(mock_filesystem)
 
-        with self.assertFilesAdded(mock_filesystem, {'/output/out_0': 'a', '/output/out_1': 'b', '/output/out_2': 'c'}):
+        with self.assertFilesAdded(mock_filesystem, {
+                '/output/out_0': 'a',
+                '/output/out_1': 'b',
+                '/output/out_2': 'c'
+        }):
             merger('/output/out', ['/s1/file1', '/s2/file1', '/s3/file1'])
 
 
 class DirMergerTests(FileSystemTestCase):
-
     def test_success_no_overlapping_files(self):
-        mock_filesystem = MockFileSystem({'/shard0/file1': '1', '/shard1/file2': '2'})
+        mock_filesystem = MockFileSystem({
+            '/shard0/file1': '1',
+            '/shard1/file2': '2'
+        })
         d = merge_results.DirMerger(mock_filesystem)
-        with self.assertFilesAdded(mock_filesystem, {'/output/file1': '1', '/output/file2': '2'}):
+        with self.assertFilesAdded(mock_filesystem, {
+                '/output/file1': '1',
+                '/output/file2': '2'
+        }):
             d.merge('/output', ['/shard0', '/shard1'])
 
     def test_success_no_overlapping_files_but_matching_contents(self):
-        mock_filesystem = MockFileSystem({'/shard0/file1': '1', '/shard1/file2': '1'})
+        mock_filesystem = MockFileSystem({
+            '/shard0/file1': '1',
+            '/shard1/file2': '1'
+        })
         d = merge_results.DirMerger(mock_filesystem)
-        with self.assertFilesAdded(mock_filesystem, {'/output/file1': '1', '/output/file2': '1'}):
+        with self.assertFilesAdded(mock_filesystem, {
+                '/output/file1': '1',
+                '/output/file2': '1'
+        }):
             d.merge('/output', ['/shard0', '/shard1'])
 
     def test_success_same_file_but_matching_contents(self):
-        mock_filesystem = MockFileSystem({'/shard0/file1': '1', '/shard1/file1': '1'})
+        mock_filesystem = MockFileSystem({
+            '/shard0/file1': '1',
+            '/shard1/file1': '1'
+        })
         d = merge_results.DirMerger(mock_filesystem)
         with self.assertFilesAdded(mock_filesystem, {'/output/file1': '1'}):
             d.merge('/output', ['/shard0', '/shard1'])
 
     def test_failure_same_file_but_contents_differ(self):
-        mock_filesystem = MockFileSystem({'/shard0/file1': '1', '/shard1/file1': '2'})
+        mock_filesystem = MockFileSystem({
+            '/shard0/file1': '1',
+            '/shard1/file1': '2'
+        })
         d = merge_results.DirMerger(mock_filesystem)
         with self.assertRaises(merge_results.MergeFailure):
             d.merge('/output', ['/shard0', '/shard1'])
 
 
 class MergeFilesJSONPTests(FileSystemTestCase):
-
     def assertLoad(self, fd, expected_before, expected_json, expected_after):
         before, json_data, after = merge_results.MergeFilesJSONP.load_jsonp(fd)
         self.assertEqual(expected_before, before)
@@ -314,7 +633,8 @@
         self.assertLoad(fdcls('{"a": 1}'), '', {'a': 1}, '')
         self.assertLoad(fdcls('f({"a": 1});'), 'f(', {'a': 1}, ');')
         self.assertLoad(fdcls('var o = {"a": 1}'), 'var o = ', {'a': 1}, '')
-        self.assertLoad(fdcls('while(1); // {"a": 1}'), 'while(1); // ', {'a': 1}, '')
+        self.assertLoad(
+            fdcls('while(1); // {"a": 1}'), 'while(1); // ', {'a': 1}, '')
         self.assertLoad(fdcls('/* {"a": 1} */'), '/* ', {'a': 1}, ' */')
 
     def test_dump(self):
@@ -328,7 +648,11 @@
 {
   "a": 1
 }""")
-        self.assertDump('', {'a': [1, 'c', 3], 'b': 2}, '', """\
+        self.assertDump(
+            '', {
+                'a': [1, 'c', 3],
+                'b': 2
+            }, '', """\
 {
   "a": [
     1,
@@ -338,49 +662,56 @@
   "b": 2
 }""")
 
-    def assertMergeResults(self, mock_filesystem_contents, inputargs, filesystem_contains, json_data_merger=None):
-        mock_filesystem = MockFileSystem(mock_filesystem_contents, dirs=['/output'])
+    def assertMergeResults(self,
+                           mock_filesystem_contents,
+                           inputargs,
+                           filesystem_contains,
+                           json_data_merger=None):
+        mock_filesystem = MockFileSystem(
+            mock_filesystem_contents, dirs=['/output'])
 
-        file_merger = merge_results.MergeFilesJSONP(mock_filesystem, json_data_merger)
+        file_merger = merge_results.MergeFilesJSONP(mock_filesystem,
+                                                    json_data_merger)
         with self.assertFilesAdded(mock_filesystem, filesystem_contains):
             file_merger(*inputargs)
 
     def assertMergeRaises(self, mock_filesystem_contents, inputargs):
-        mock_filesystem = MockFileSystem(mock_filesystem_contents, dirs=['/output'])
+        mock_filesystem = MockFileSystem(
+            mock_filesystem_contents, dirs=['/output'])
 
         file_merger = merge_results.MergeFilesJSONP(mock_filesystem)
         with self.assertRaises(merge_results.MergeFailure):
             file_merger(*inputargs)
 
     def test_single_file(self):
-        self.assertMergeResults(
-            {'/s/filea': '{"a": 1}'},
-            ('/output/out1', ['/s/filea']),
-            {'/output/out1': """\
+        self.assertMergeResults({
+            '/s/filea': '{"a": 1}'
+        }, ('/output/out1', ['/s/filea']),
+                                {'/output/out1': """\
 {
   "a": 1
 }"""})
 
-        self.assertMergeResults(
-            {'/s/filef1a': 'f1({"a": 1})'},
-            ('/output/outf1', ['/s/filef1a']),
-            {'/output/outf1': """\
+        self.assertMergeResults({
+            '/s/filef1a': 'f1({"a": 1})'
+        }, ('/output/outf1', ['/s/filef1a']),
+                                {'/output/outf1': """\
 f1({
   "a": 1
 })"""})
 
-        self.assertMergeResults(
-            {'/s/fileb1': '{"b": 2}'},
-            ('/output/out2', ['/s/fileb1']),
-            {'/output/out2': """\
+        self.assertMergeResults({
+            '/s/fileb1': '{"b": 2}'
+        }, ('/output/out2', ['/s/fileb1']),
+                                {'/output/out2': """\
 {
   "b": 2
 }"""})
 
-        self.assertMergeResults(
-            {'/s/filef1b1': 'f1({"b": 2})'},
-            ('/output/outf2', ['/s/filef1b1']),
-            {'/output/outf2': """\
+        self.assertMergeResults({
+            '/s/filef1b1': 'f1({"b": 2})'
+        }, ('/output/outf2', ['/s/filef1b1']),
+                                {'/output/outf2': """\
 f1({
   "b": 2
 })"""})
@@ -390,10 +721,8 @@
             {
                 '/s/filea': '{"a": 1}',
                 '/s/fileb1': '{"b": 2}',
-            },
-            ('/output/out3', ['/s/filea', '/s/fileb1']),
-            {
-                '/output/out3': """\
+            }, ('/output/out3', ['/s/filea', '/s/fileb1']),
+            {'/output/out3': """\
 {
   "a": 1,
   "b": 2
@@ -403,142 +732,175 @@
             {
                 '/s/filef1a': 'f1({"a": 1})',
                 '/s/filef1b1': 'f1({"b": 2})',
-            },
-            ('/output/outf3', ['/s/filef1a', '/s/filef1b1']),
-            {
-                '/output/outf3': """\
+            }, ('/output/outf3', ['/s/filef1a', '/s/filef1b1']),
+            {'/output/outf3': """\
 f1({
   "a": 1,
   "b": 2
 })"""})
 
     def test_two_files_identical_values_fails_by_default(self):
-        self.assertMergeRaises(
-            {
-                '/s/fileb1': '{"b": 2}',
-                '/s/fileb2': '{"b": 2}',
-            },
-            ('/output/out4', ['/s/fileb1', '/s/fileb2']))
+        self.assertMergeRaises({
+            '/s/fileb1': '{"b": 2}',
+            '/s/fileb2': '{"b": 2}',
+        }, ('/output/out4', ['/s/fileb1', '/s/fileb2']))
 
-        self.assertMergeRaises(
-            {
-                '/s/filef1b1': 'f1({"b": 2})',
-                '/s/filef1b2': 'f1({"b": 2})',
-            },
-            ('/output/outf4', ['/s/filef1b1', '/s/filef1b2']))
+        self.assertMergeRaises({
+            '/s/filef1b1': 'f1({"b": 2})',
+            '/s/filef1b2': 'f1({"b": 2})',
+        }, ('/output/outf4', ['/s/filef1b1', '/s/filef1b2']))
 
     def test_two_files_identical_values_works_with_custom_merger(self):
         json_data_merger = merge_results.JSONMerger()
         json_data_merger.fallback_matcher = json_data_merger.merge_equal
 
-        self.assertMergeResults(
-            {
-                '/s/fileb1': '{"b": 2}',
-                '/s/fileb2': '{"b": 2}',
-            },
-            ('/output/out4', ['/s/fileb1', '/s/fileb2']),
-            {
-                '/output/out4': """\
+        self.assertMergeResults({
+            '/s/fileb1': '{"b": 2}',
+            '/s/fileb2': '{"b": 2}',
+        }, ('/output/out4', ['/s/fileb1', '/s/fileb2']),
+                                {'/output/out4': """\
 {
   "b": 2
 }"""},
-            json_data_merger=json_data_merger)
+                                json_data_merger=json_data_merger)
 
-        self.assertMergeResults(
-            {
-                '/s/filef1b1': 'f1({"b": 2})',
-                '/s/filef1b2': 'f1({"b": 2})',
-            },
-            ('/output/outf4', ['/s/filef1b1', '/s/filef1b2']),
-            {
-                '/output/outf4': """\
+        self.assertMergeResults({
+            '/s/filef1b1': 'f1({"b": 2})',
+            '/s/filef1b2': 'f1({"b": 2})',
+        }, ('/output/outf4', ['/s/filef1b1', '/s/filef1b2']),
+                                {'/output/outf4': """\
 f1({
   "b": 2
 })"""},
-            json_data_merger=json_data_merger)
+                                json_data_merger=json_data_merger)
 
     def test_two_files_conflicting_values(self):
-        self.assertMergeRaises(
-            {
-                '/s/fileb1': '{"b": 2}',
-                '/s/fileb3': '{"b": 3}',
-            },
-            ('/output/outff1', ['/s/fileb1', '/s/fileb3']))
-        self.assertMergeRaises(
-            {
-                '/s/filef1b1': 'f1({"b": 2})',
-                '/s/filef1b3': 'f1({"b": 3})',
-            },
-            ('/output/outff2', ['/s/filef1b1', '/s/filef1b3']))
+        self.assertMergeRaises({
+            '/s/fileb1': '{"b": 2}',
+            '/s/fileb3': '{"b": 3}',
+        }, ('/output/outff1', ['/s/fileb1', '/s/fileb3']))
+        self.assertMergeRaises({
+            '/s/filef1b1': 'f1({"b": 2})',
+            '/s/filef1b3': 'f1({"b": 3})',
+        }, ('/output/outff2', ['/s/filef1b1', '/s/filef1b3']))
 
     def test_two_files_conflicting_function_names(self):
-        self.assertMergeRaises(
-            {
-                '/s/filef1a': 'f1({"a": 1})',
-                '/s/filef2a': 'f2({"a": 1})',
-            },
-            ('/output/outff3', ['/s/filef1a', '/s/filef2a']))
+        self.assertMergeRaises({
+            '/s/filef1a': 'f1({"a": 1})',
+            '/s/filef2a': 'f2({"a": 1})',
+        }, ('/output/outff3', ['/s/filef1a', '/s/filef2a']))
 
     def test_two_files_mixed_json_and_jsonp(self):
-        self.assertMergeRaises(
-            {
-                '/s/filea': '{"a": 1}',
-                '/s/filef1a': 'f1({"a": 1})',
-            },
-            ('/output/outff4', ['/s/filea', '/s/filef1a']))
+        self.assertMergeRaises({
+            '/s/filea': '{"a": 1}',
+            '/s/filef1a': 'f1({"a": 1})',
+        }, ('/output/outff4', ['/s/filea', '/s/filef1a']))
 
 
 class JSONTestResultsMerger(unittest.TestCase):
-
     def test_allow_unknown_if_matching(self):
-        merger = merge_results.JSONTestResultsMerger(allow_unknown_if_matching=False)
-        self.assertEqual(
-            {'version': 3.0},
-            merger.merge([{'version': 3.0}, {'version': 3.0}]))
+        merger = merge_results.JSONTestResultsMerger(
+            allow_unknown_if_matching=False)
+        self.assertEqual({
+            'version': 3.0
+        }, merger.merge([{
+            'version': 3.0
+        }, {
+            'version': 3.0
+        }]))
 
         with self.assertRaises(merge_results.MergeFailure):
             merger.merge([{'random': 'hello'}, {'random': 'hello'}])
 
-        merger = merge_results.JSONTestResultsMerger(allow_unknown_if_matching=True)
-        self.assertEqual(
-            {'random': 'hello'},
-            merger.merge([{'random': 'hello'}, {'random': 'hello'}]))
+        merger = merge_results.JSONTestResultsMerger(
+            allow_unknown_if_matching=True)
+        self.assertEqual({
+            'random': 'hello'
+        }, merger.merge([{
+            'random': 'hello'
+        }, {
+            'random': 'hello'
+        }]))
 
     def test_summable(self):
         merger = merge_results.JSONTestResultsMerger()
-        self.assertEqual(
-            {'fixable': 5},
-            merger.merge([{'fixable': 2}, {'fixable': 3}]))
-        self.assertEqual(
-            {'num_failures_by_type': {'A': 4, 'B': 3, 'C': 2}},
-            merger.merge([
-                {'num_failures_by_type': {'A': 3, 'B': 1}},
-                {'num_failures_by_type': {'A': 1, 'B': 2, 'C': 2}},
-            ]))
+        self.assertEqual({
+            'fixable': 5
+        }, merger.merge([{
+            'fixable': 2
+        }, {
+            'fixable': 3
+        }]))
+        self.assertEqual({
+            'num_failures_by_type': {
+                'A': 4,
+                'B': 3,
+                'C': 2
+            }
+        },
+                         merger.merge([
+                             {
+                                 'num_failures_by_type': {
+                                     'A': 3,
+                                     'B': 1
+                                 }
+                             },
+                             {
+                                 'num_failures_by_type': {
+                                     'A': 1,
+                                     'B': 2,
+                                     'C': 2
+                                 }
+                             },
+                         ]))
 
     def test_interrupted(self):
         merger = merge_results.JSONTestResultsMerger()
-        self.assertEqual(
-            {'interrupted': False},
-            merger.merge([{'interrupted': False}, {'interrupted': False}]))
-        self.assertEqual(
-            {'interrupted': True},
-            merger.merge([{'interrupted': True}, {'interrupted': False}]))
-        self.assertEqual(
-            {'interrupted': True},
-            merger.merge([{'interrupted': False}, {'interrupted': True}]))
+        self.assertEqual({
+            'interrupted': False
+        }, merger.merge([{
+            'interrupted': False
+        }, {
+            'interrupted': False
+        }]))
+        self.assertEqual({
+            'interrupted': True
+        }, merger.merge([{
+            'interrupted': True
+        }, {
+            'interrupted': False
+        }]))
+        self.assertEqual({
+            'interrupted': True
+        }, merger.merge([{
+            'interrupted': False
+        }, {
+            'interrupted': True
+        }]))
 
     def test_seconds_since_epoch(self):
         merger = merge_results.JSONTestResultsMerger()
-        self.assertEqual(
-            {'seconds_since_epoch': 2},
-            merger.merge([{'seconds_since_epoch': 3}, {'seconds_since_epoch': 2}]))
-        self.assertEqual(
-            {'seconds_since_epoch': 2},
-            merger.merge([{'seconds_since_epoch': 2}, {'seconds_since_epoch': 3}]))
-        self.assertEqual(
-            {'seconds_since_epoch': 12},
-            merger.merge([{'seconds_since_epoch': 12}, {}]))
+        self.assertEqual({
+            'seconds_since_epoch': 2
+        },
+                         merger.merge([{
+                             'seconds_since_epoch': 3
+                         }, {
+                             'seconds_since_epoch': 2
+                         }]))
+        self.assertEqual({
+            'seconds_since_epoch': 2
+        },
+                         merger.merge([{
+                             'seconds_since_epoch': 2
+                         }, {
+                             'seconds_since_epoch': 3
+                         }]))
+        self.assertEqual({
+            'seconds_since_epoch': 12
+        }, merger.merge([{
+            'seconds_since_epoch': 12
+        }, {}]))
 
 
 class WebTestDirMergerTests(unittest.TestCase):
@@ -774,48 +1136,89 @@
 
     web_test_filesystem = {
         # Files for shard0
-        '/shards/0/layout-test-results/access_log.txt': shard0_access_log,
-        '/shards/0/layout-test-results/archived_results.json': shard0_archived_results_json,
-        '/shards/0/layout-test-results/error_log.txt': shard0_error_log,
-        '/shards/0/layout-test-results/failing_results.json': "ADD_RESULTS(" + shard0_output_json + ");",
-        '/shards/0/layout-test-results/full_results.json': shard0_output_json,
-        '/shards/0/layout-test-results/stats.json': shard0_stats_json,
-        '/shards/0/layout-test-results/testdir1/test1-actual.png': '1ap',
-        '/shards/0/layout-test-results/testdir1/test1-diff.png': '1dp',
-        '/shards/0/layout-test-results/testdir1/test1-diffs.html': '1dh',
-        '/shards/0/layout-test-results/testdir1/test1-expected-stderr.txt': '1est',
-        '/shards/0/layout-test-results/testdir1/test1-expected.png': '1ep',
-        '/shards/0/layout-test-results/testdir1/test2-actual.png': '2ap',
-        '/shards/0/layout-test-results/testdir1/test2-diff.png': '2dp',
-        '/shards/0/layout-test-results/testdir1/test2-diffs.html': '2dh',
-        '/shards/0/layout-test-results/testdir1/test2-expected-stderr.txt': '2est',
-        '/shards/0/layout-test-results/testdir1/test2-expected.png': '2ep',
-        '/shards/0/layout-test-results/testdir2/testdir2.1/test3-actual.png': '3ap',
-        '/shards/0/layout-test-results/testdir2/testdir2.1/test3-diff.png': '3dp',
-        '/shards/0/layout-test-results/testdir2/testdir2.1/test3-diffs.html': '3dh',
-        '/shards/0/layout-test-results/testdir2/testdir2.1/test3-expected-stderr.txt': '3est',
-        '/shards/0/layout-test-results/testdir2/testdir2.1/test3-expected.png': '3ep',
-        '/shards/0/layout-test-results/times_ms.json': shard0_times_ms_json,
-        '/shards/0/output.json': shard0_output_json,
+        '/shards/0/layout-test-results/access_log.txt':
+        shard0_access_log,
+        '/shards/0/layout-test-results/archived_results.json':
+        shard0_archived_results_json,
+        '/shards/0/layout-test-results/error_log.txt':
+        shard0_error_log,
+        '/shards/0/layout-test-results/failing_results.json':
+        "ADD_RESULTS(" + shard0_output_json + ");",
+        '/shards/0/layout-test-results/full_results.json':
+        shard0_output_json,
+        '/shards/0/layout-test-results/stats.json':
+        shard0_stats_json,
+        '/shards/0/layout-test-results/testdir1/test1-actual.png':
+        '1ap',
+        '/shards/0/layout-test-results/testdir1/test1-diff.png':
+        '1dp',
+        '/shards/0/layout-test-results/testdir1/test1-diffs.html':
+        '1dh',
+        '/shards/0/layout-test-results/testdir1/test1-expected-stderr.txt':
+        '1est',
+        '/shards/0/layout-test-results/testdir1/test1-expected.png':
+        '1ep',
+        '/shards/0/layout-test-results/testdir1/test2-actual.png':
+        '2ap',
+        '/shards/0/layout-test-results/testdir1/test2-diff.png':
+        '2dp',
+        '/shards/0/layout-test-results/testdir1/test2-diffs.html':
+        '2dh',
+        '/shards/0/layout-test-results/testdir1/test2-expected-stderr.txt':
+        '2est',
+        '/shards/0/layout-test-results/testdir1/test2-expected.png':
+        '2ep',
+        '/shards/0/layout-test-results/testdir2/testdir2.1/test3-actual.png':
+        '3ap',
+        '/shards/0/layout-test-results/testdir2/testdir2.1/test3-diff.png':
+        '3dp',
+        '/shards/0/layout-test-results/testdir2/testdir2.1/test3-diffs.html':
+        '3dh',
+        '/shards/0/layout-test-results/testdir2/testdir2.1/test3-expected-stderr.txt':
+        '3est',
+        '/shards/0/layout-test-results/testdir2/testdir2.1/test3-expected.png':
+        '3ep',
+        '/shards/0/layout-test-results/times_ms.json':
+        shard0_times_ms_json,
+        '/shards/0/output.json':
+        shard0_output_json,
         # Files for shard1
-        '/shards/1/layout-test-results/access_log.txt': shard1_access_log,
-        '/shards/1/layout-test-results/archived_results.json': shard1_archived_results_json,
-        '/shards/1/layout-test-results/error_log.txt': shard1_error_log,
-        '/shards/1/layout-test-results/failing_results.json': "ADD_RESULTS(" + shard1_output_json + ");",
-        '/shards/1/layout-test-results/full_results.json': shard1_output_json,
-        '/shards/1/layout-test-results/stats.json': shard1_stats_json,
-        '/shards/1/layout-test-results/testdir2/testdir2.1/test4-actual.png': '4ap',
-        '/shards/1/layout-test-results/testdir2/testdir2.1/test4-diff.png': '4dp',
-        '/shards/1/layout-test-results/testdir2/testdir2.1/test4-diffs.html': '4dh',
-        '/shards/1/layout-test-results/testdir2/testdir2.1/test4-expected-stderr.txt': '4est',
-        '/shards/1/layout-test-results/testdir2/testdir2.1/test4-expected.png': '4ep',
-        '/shards/1/layout-test-results/testdir3/test5-actual.png': '5ap',
-        '/shards/1/layout-test-results/testdir3/test5-diff.png': '5dp',
-        '/shards/1/layout-test-results/testdir3/test5-diffs.html': '5dh',
-        '/shards/1/layout-test-results/testdir3/test5-expected-stderr.txt': '5est',
-        '/shards/1/layout-test-results/testdir3/test5-expected.png': '5ep',
-        '/shards/1/layout-test-results/times_ms.json': shard1_times_ms_json,
-        '/shards/1/output.json': shard1_output_json,
+        '/shards/1/layout-test-results/access_log.txt':
+        shard1_access_log,
+        '/shards/1/layout-test-results/archived_results.json':
+        shard1_archived_results_json,
+        '/shards/1/layout-test-results/error_log.txt':
+        shard1_error_log,
+        '/shards/1/layout-test-results/failing_results.json':
+        "ADD_RESULTS(" + shard1_output_json + ");",
+        '/shards/1/layout-test-results/full_results.json':
+        shard1_output_json,
+        '/shards/1/layout-test-results/stats.json':
+        shard1_stats_json,
+        '/shards/1/layout-test-results/testdir2/testdir2.1/test4-actual.png':
+        '4ap',
+        '/shards/1/layout-test-results/testdir2/testdir2.1/test4-diff.png':
+        '4dp',
+        '/shards/1/layout-test-results/testdir2/testdir2.1/test4-diffs.html':
+        '4dh',
+        '/shards/1/layout-test-results/testdir2/testdir2.1/test4-expected-stderr.txt':
+        '4est',
+        '/shards/1/layout-test-results/testdir2/testdir2.1/test4-expected.png':
+        '4ep',
+        '/shards/1/layout-test-results/testdir3/test5-actual.png':
+        '5ap',
+        '/shards/1/layout-test-results/testdir3/test5-diff.png':
+        '5dp',
+        '/shards/1/layout-test-results/testdir3/test5-diffs.html':
+        '5dh',
+        '/shards/1/layout-test-results/testdir3/test5-expected-stderr.txt':
+        '5est',
+        '/shards/1/layout-test-results/testdir3/test5-expected.png':
+        '5ep',
+        '/shards/1/layout-test-results/times_ms.json':
+        shard1_times_ms_json,
+        '/shards/1/output.json':
+        shard1_output_json,
     }
 
     # Combined JSON files
@@ -1009,40 +1412,69 @@
 """
 
     web_test_output_filesystem = {
-        '/out/layout-test-results/access_log.txt': output_access_log,
-        '/out/layout-test-results/archived_results.json': output_archived_results_json,
-        '/out/layout-test-results/error_log.txt': output_error_log,
-        '/out/layout-test-results/failing_results.json': "ADD_RESULTS(" + output_output_json + ");",
-        '/out/layout-test-results/full_results.json': output_output_json,
-        '/out/layout-test-results/stats.json': output_stats_json,
-        '/out/layout-test-results/testdir1/test1-actual.png': '1ap',
-        '/out/layout-test-results/testdir1/test1-diff.png': '1dp',
-        '/out/layout-test-results/testdir1/test1-diffs.html': '1dh',
-        '/out/layout-test-results/testdir1/test1-expected-stderr.txt': '1est',
-        '/out/layout-test-results/testdir1/test1-expected.png': '1ep',
-        '/out/layout-test-results/testdir2/testdir2.1/test3-actual.png': '3ap',
-        '/out/layout-test-results/testdir2/testdir2.1/test3-diff.png': '3dp',
-        '/out/layout-test-results/testdir2/testdir2.1/test3-diffs.html': '3dh',
-        '/out/layout-test-results/testdir2/testdir2.1/test3-expected-stderr.txt': '3est',
-        '/out/layout-test-results/testdir2/testdir2.1/test3-expected.png': '3ep',
-        '/out/layout-test-results/testdir2/testdir2.1/test4-actual.png': '4ap',
-        '/out/layout-test-results/testdir2/testdir2.1/test4-diff.png': '4dp',
-        '/out/layout-test-results/testdir2/testdir2.1/test4-diffs.html': '4dh',
-        '/out/layout-test-results/testdir2/testdir2.1/test4-expected-stderr.txt': '4est',
-        '/out/layout-test-results/testdir2/testdir2.1/test4-expected.png': '4ep',
-        '/out/layout-test-results/testdir3/test5-actual.png': '5ap',
-        '/out/layout-test-results/testdir3/test5-diff.png': '5dp',
-        '/out/layout-test-results/testdir3/test5-diffs.html': '5dh',
-        '/out/layout-test-results/testdir3/test5-expected-stderr.txt': '5est',
-        '/out/layout-test-results/testdir3/test5-expected.png': '5ep',
-        '/out/layout-test-results/times_ms.json': output_times_ms_json,
-        '/out/output.json': output_output_json,
+        '/out/layout-test-results/access_log.txt':
+        output_access_log,
+        '/out/layout-test-results/archived_results.json':
+        output_archived_results_json,
+        '/out/layout-test-results/error_log.txt':
+        output_error_log,
+        '/out/layout-test-results/failing_results.json':
+        "ADD_RESULTS(" + output_output_json + ");",
+        '/out/layout-test-results/full_results.json':
+        output_output_json,
+        '/out/layout-test-results/stats.json':
+        output_stats_json,
+        '/out/layout-test-results/testdir1/test1-actual.png':
+        '1ap',
+        '/out/layout-test-results/testdir1/test1-diff.png':
+        '1dp',
+        '/out/layout-test-results/testdir1/test1-diffs.html':
+        '1dh',
+        '/out/layout-test-results/testdir1/test1-expected-stderr.txt':
+        '1est',
+        '/out/layout-test-results/testdir1/test1-expected.png':
+        '1ep',
+        '/out/layout-test-results/testdir2/testdir2.1/test3-actual.png':
+        '3ap',
+        '/out/layout-test-results/testdir2/testdir2.1/test3-diff.png':
+        '3dp',
+        '/out/layout-test-results/testdir2/testdir2.1/test3-diffs.html':
+        '3dh',
+        '/out/layout-test-results/testdir2/testdir2.1/test3-expected-stderr.txt':
+        '3est',
+        '/out/layout-test-results/testdir2/testdir2.1/test3-expected.png':
+        '3ep',
+        '/out/layout-test-results/testdir2/testdir2.1/test4-actual.png':
+        '4ap',
+        '/out/layout-test-results/testdir2/testdir2.1/test4-diff.png':
+        '4dp',
+        '/out/layout-test-results/testdir2/testdir2.1/test4-diffs.html':
+        '4dh',
+        '/out/layout-test-results/testdir2/testdir2.1/test4-expected-stderr.txt':
+        '4est',
+        '/out/layout-test-results/testdir2/testdir2.1/test4-expected.png':
+        '4ep',
+        '/out/layout-test-results/testdir3/test5-actual.png':
+        '5ap',
+        '/out/layout-test-results/testdir3/test5-diff.png':
+        '5dp',
+        '/out/layout-test-results/testdir3/test5-diffs.html':
+        '5dh',
+        '/out/layout-test-results/testdir3/test5-expected-stderr.txt':
+        '5est',
+        '/out/layout-test-results/testdir3/test5-expected.png':
+        '5ep',
+        '/out/layout-test-results/times_ms.json':
+        output_times_ms_json,
+        '/out/output.json':
+        output_output_json,
     }
 
     def test(self):
         fs = MockFileSystem(self.web_test_filesystem)
 
-        merger = merge_results.WebTestDirMerger(fs, results_json_value_overrides={'layout_tests_dir': 'src'})
+        merger = merge_results.WebTestDirMerger(
+            fs, results_json_value_overrides={'layout_tests_dir': 'src'})
         merger.merge('/out', ['/shards/0', '/shards/1'])
 
         for fname, contents in self.web_test_output_filesystem.items():
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_configuration.py b/third_party/blink/tools/blinkpy/web_tests/models/test_configuration.py
index 3ae7a96f..9fbc21c 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_configuration.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_configuration.py
@@ -32,7 +32,6 @@
 
 
 class TestConfiguration(object):
-
     def __init__(self, version, architecture, build_type):
         self.version = version
         self.architecture = architecture
@@ -50,8 +49,8 @@
         return self.__dict__.keys()
 
     def __str__(self):
-        return ('<%(version)s, %(architecture)s, %(build_type)s>' %
-                self.__dict__)
+        return (
+            '<%(version)s, %(architecture)s, %(build_type)s>' % self.__dict__)
 
     def __repr__(self):
         return "TestConfig(version='%(version)s', architecture='%(architecture)s', build_type='%(build_type)s')" % self.__dict__
@@ -68,7 +67,6 @@
 
 
 class SpecifierSorter(object):
-
     def __init__(self, all_test_configurations=None, macros=None):
         self._specifier_to_category = {}
 
@@ -88,7 +86,8 @@
             return
         # Assume well-formed macros.
         for macro, specifier_list in macros.items():
-            self.add_specifier(self.category_for_specifier(specifier_list[0]), macro)
+            self.add_specifier(
+                self.category_for_specifier(specifier_list[0]), macro)
 
     @classmethod
     def category_priority(cls, category):
@@ -103,7 +102,8 @@
     def sort_specifiers(self, specifiers):
         category_slots = map(lambda x: [], TestConfiguration.category_order())
         for specifier in specifiers:
-            category_slots[self.specifier_priority(specifier)].append(specifier)
+            category_slots[self.specifier_priority(specifier)].append(
+                specifier)
 
         def sort_and_return(result, specifier_list):
             specifier_list.sort()
@@ -113,7 +113,6 @@
 
 
 class TestConfigurationConverter(object):
-
     def __init__(self, all_test_configurations, configuration_macros=None):
         self._all_test_configurations = all_test_configurations
         self.configuration_macros = configuration_macros or {}
@@ -125,22 +124,28 @@
         matching_sets_by_category = {}
         for configuration in all_test_configurations:
             for category, specifier in configuration.items():
-                self._specifier_to_configuration_set.setdefault(specifier, set()).add(configuration)
+                self._specifier_to_configuration_set.setdefault(
+                    specifier, set()).add(configuration)
                 self._specifier_sorter.add_specifier(category, specifier)
-                self._collapsing_sets_by_category.setdefault(category, set()).add(specifier)
+                self._collapsing_sets_by_category.setdefault(
+                    category, set()).add(specifier)
                 # FIXME: This seems extra-awful.
                 for cat2, spec2 in configuration.items():
                     if category == cat2:
                         continue
-                    matching_sets_by_category.setdefault(specifier, {}).setdefault(cat2, set()).add(spec2)
+                    matching_sets_by_category.setdefault(
+                        specifier, {}).setdefault(cat2, set()).add(spec2)
         for collapsing_set in self._collapsing_sets_by_category.values():
-            self._collapsing_sets_by_size.setdefault(len(collapsing_set), set()).add(frozenset(collapsing_set))
+            self._collapsing_sets_by_size.setdefault(
+                len(collapsing_set), set()).add(frozenset(collapsing_set))
 
         for specifier, sets_by_category in matching_sets_by_category.items():
             for category, set_by_category in sets_by_category.items():
-                if len(set_by_category) == 1 and self._specifier_sorter.category_priority(
-                        category) > self._specifier_sorter.specifier_priority(specifier):
-                    self._junk_specifier_combinations[specifier] = set_by_category
+                if (len(set_by_category) == 1 and
+                        self._specifier_sorter.category_priority(category) >
+                        self._specifier_sorter.specifier_priority(specifier)):
+                    self._junk_specifier_combinations[specifier] = \
+                        set_by_category
 
         self._specifier_sorter.add_macros(configuration_macros)
 
@@ -160,13 +165,17 @@
 
         for specifier in specifier_set:
             for expanded_specifier in self._expand_macros(specifier):
-                configurations = self._specifier_to_configuration_set.get(expanded_specifier)
+                configurations = self._specifier_to_configuration_set.get(
+                    expanded_specifier)
                 if not configurations:
                     if error_list is not None:
-                        error_list.append("Unrecognized specifier '" + expanded_specifier + "'")
+                        error_list.append("Unrecognized specifier '" +
+                                          expanded_specifier + "'")
                     return set()
-                category = self._specifier_sorter.category_for_specifier(expanded_specifier)
-                matching_sets.setdefault(category, set()).update(configurations)
+                category = self._specifier_sorter.category_for_specifier(
+                    expanded_specifier)
+                matching_sets.setdefault(category,
+                                         set()).update(configurations)
 
         return reduce(set.intersection, matching_sets.values())
 
@@ -176,7 +185,8 @@
             if len(macro) == 1:
                 continue
 
-            for combination in itertools.combinations(specifiers_list, len(macro)):
+            for combination in itertools.combinations(specifiers_list,
+                                                      len(macro)):
                 if cls.symmetric_difference(combination) == set(macro):
                     for item in combination:
                         specifiers_list.remove(item)
@@ -191,7 +201,9 @@
                 macro_set = set(macro)
                 if macro_set.intersection(specifier_set) == macro_set:
                     specifiers_to_remove.append(specifier_set)
-                    specifiers_to_add.append(frozenset((set(specifier_set) - macro_set) | set([macro_specifier])))
+                    specifiers_to_add.append(
+                        frozenset((set(specifier_set) - macro_set)
+                                  | set([macro_specifier])))
             for specifier in specifiers_to_remove:
                 specifiers_list.remove(specifier)
             for specifier in specifiers_to_add:
@@ -202,7 +214,8 @@
 
     @classmethod
     def intersect_combination(cls, combination):
-        return reduce(set.intersection, [set(specifiers) for specifiers in combination])
+        return reduce(set.intersection,
+                      [set(specifiers) for specifiers in combination])
 
     @classmethod
     def symmetric_difference(cls, iterable):
@@ -223,7 +236,8 @@
         specifiers_list = []
         for config in test_configuration_set:
             values = set(config.values())
-            for specifier, junk_specifier_set in self._junk_specifier_combinations.items():
+            for specifier, junk_specifier_set in \
+                self._junk_specifier_combinations.items():
                 if specifier in values:
                     values -= junk_specifier_set
             specifiers_list.append(frozenset(values))
@@ -235,7 +249,8 @@
                 if self.symmetric_difference(combination) in collapsing_sets:
                     for item in combination:
                         specifiers_list.remove(item)
-                    specifiers_list.append(frozenset(self.intersect_combination(combination)))
+                    specifiers_list.append(
+                        frozenset(self.intersect_combination(combination)))
                     return True
             return False
 
@@ -273,7 +288,8 @@
         # 5) Collapsing macros may have created combinations the can now be abbreviated.
         #   (win7, release), (linux, x86, release), (linux, x86_64, release)
         #   --> (win7, release), (linux, release) --> (win7, linux, release)
-        while try_abbreviating([self._collapsing_sets_by_category['version'] | macro_keys]):
+        while try_abbreviating(
+            [self._collapsing_sets_by_category['version'] | macro_keys]):
             pass
 
         # 6) Remove cases where we have collapsed but have all macros.
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_configuration_unittest.py b/third_party/blink/tools/blinkpy/web_tests/models/test_configuration_unittest.py
index 3ce7b6a..b1f0dab 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_configuration_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_configuration_unittest.py
@@ -33,15 +33,15 @@
 
 def make_mock_all_test_configurations_set():
     all_test_configurations = set()
-    for version, architecture in (('snowleopard', 'x86'),
-                                  ('win7', 'x86'),
-                                  ('vista', 'x86'),
-                                  ('precise', 'x86_64'),
-                                  ('trusty', 'x86_64')):
+    for version, architecture in (('snowleopard',
+                                   'x86'), ('win7', 'x86'), ('vista', 'x86'),
+                                  ('precise', 'x86_64'), ('trusty', 'x86_64')):
         for build_type in ('debug', 'release'):
-            all_test_configurations.add(TestConfiguration(version, architecture, build_type))
+            all_test_configurations.add(
+                TestConfiguration(version, architecture, build_type))
     return all_test_configurations
 
+
 MOCK_MACROS = {
     'mac': ['snowleopard'],
     'win': ['vista', 'win7'],
@@ -50,20 +50,25 @@
 
 
 class TestConfigurationTest(unittest.TestCase):
-
     def test_items(self):
         config = TestConfiguration('win7', 'x86', 'release')
         result_config_dict = {}
         for category, specifier in config.items():
             result_config_dict[category] = specifier
-        self.assertEqual({'version': 'win7', 'architecture': 'x86', 'build_type': 'release'}, result_config_dict)
+        self.assertEqual({
+            'version': 'win7',
+            'architecture': 'x86',
+            'build_type': 'release'
+        }, result_config_dict)
 
     def test_keys(self):
         config = TestConfiguration('win7', 'x86', 'release')
         result_config_keys = []
         for category in config.keys():
             result_config_keys.append(category)
-        self.assertEqual(set(['version', 'architecture', 'build_type']), set(result_config_keys))
+        self.assertEqual(
+            set(['version', 'architecture', 'build_type']),
+            set(result_config_keys))
 
     def test_str(self):
         config = TestConfiguration('win7', 'x86', 'release')
@@ -71,13 +76,16 @@
 
     def test_repr(self):
         config = TestConfiguration('win7', 'x86', 'release')
-        self.assertEqual("TestConfig(version='win7', architecture='x86', build_type='release')", repr(config))
+        self.assertEqual(
+            "TestConfig(version='win7', architecture='x86', build_type='release')",
+            repr(config))
 
     def test_hash(self):
         config_dict = {}
         config_dict[TestConfiguration('win7', 'x86', 'release')] = True
         self.assertIn(TestConfiguration('win7', 'x86', 'release'), config_dict)
-        self.assertTrue(config_dict[TestConfiguration('win7', 'x86', 'release')])
+        self.assertTrue(config_dict[TestConfiguration('win7', 'x86',
+                                                      'release')])
 
         def query_unknown_key():
             return config_dict[TestConfiguration('win7', 'x86', 'debug')]
@@ -85,26 +93,34 @@
         with self.assertRaises(KeyError):
             query_unknown_key()
         self.assertIn(TestConfiguration('win7', 'x86', 'release'), config_dict)
-        self.assertNotIn(TestConfiguration('win7', 'x86', 'debug'), config_dict)
-        configs_list = [TestConfiguration('win7', 'x86', 'release'), TestConfiguration(
-            'win7', 'x86', 'debug'), TestConfiguration('win7', 'x86', 'debug')]
+        self.assertNotIn(
+            TestConfiguration('win7', 'x86', 'debug'), config_dict)
+        configs_list = [
+            TestConfiguration('win7', 'x86', 'release'),
+            TestConfiguration('win7', 'x86', 'debug'),
+            TestConfiguration('win7', 'x86', 'debug')
+        ]
         self.assertEqual(len(configs_list), 3)
         self.assertEqual(len(set(configs_list)), 2)
 
     def test_eq(self):
-        self.assertEqual(TestConfiguration('win7', 'x86', 'release'), TestConfiguration('win7', 'x86', 'release'))
-        self.assertNotEquals(TestConfiguration('win7', 'x86', 'release'), TestConfiguration('win7', 'x86', 'debug'))
+        self.assertEqual(
+            TestConfiguration('win7', 'x86', 'release'),
+            TestConfiguration('win7', 'x86', 'release'))
+        self.assertNotEquals(
+            TestConfiguration('win7', 'x86', 'release'),
+            TestConfiguration('win7', 'x86', 'debug'))
 
     def test_values(self):
         config = TestConfiguration('win7', 'x86', 'release')
         result_config_values = []
         for value in config.values():
             result_config_values.append(value)
-        self.assertEqual(set(['win7', 'x86', 'release']), set(result_config_values))
+        self.assertEqual(
+            set(['win7', 'x86', 'release']), set(result_config_values))
 
 
 class SpecifierSorterTest(unittest.TestCase):
-
     def __init__(self, testFunc):
         self._all_test_configurations = make_mock_all_test_configurations_set()
         unittest.TestCase.__init__(self, testFunc)
@@ -126,7 +142,8 @@
         self.assertEqual(sorter.category_for_specifier('one'), 'version')
         sorter.add_specifier('architecture', 'renaissance')
         self.assertEqual(sorter.category_for_specifier('one'), 'version')
-        self.assertEqual(sorter.category_for_specifier('renaissance'), 'architecture')
+        self.assertEqual(
+            sorter.category_for_specifier('renaissance'), 'architecture')
 
     def test_add_macros(self):
         sorter = SpecifierSorter(self._all_test_configurations)
@@ -149,43 +166,59 @@
         sorter = SpecifierSorter(self._all_test_configurations, MOCK_MACROS)
         self.assertEqual(sorter.sort_specifiers(set()), [])
         self.assertEqual(sorter.sort_specifiers(set(['x86'])), ['x86'])
-        self.assertEqual(sorter.sort_specifiers(set(['x86', 'win7'])), ['win7', 'x86'])
-        self.assertEqual(sorter.sort_specifiers(set(['x86', 'debug', 'win7'])), ['win7', 'x86', 'debug'])
-        self.assertEqual(sorter.sort_specifiers(set(['snowleopard', 'x86', 'debug', 'win7'])), [
-                         'snowleopard', 'win7', 'x86', 'debug'])
-        self.assertEqual(sorter.sort_specifiers(set(['x86', 'mac', 'debug', 'win7'])), ['mac', 'win7', 'x86', 'debug'])
+        self.assertEqual(
+            sorter.sort_specifiers(set(['x86', 'win7'])), ['win7', 'x86'])
+        self.assertEqual(
+            sorter.sort_specifiers(set(['x86', 'debug', 'win7'])),
+            ['win7', 'x86', 'debug'])
+        self.assertEqual(
+            sorter.sort_specifiers(
+                set(['snowleopard', 'x86', 'debug', 'win7'])),
+            ['snowleopard', 'win7', 'x86', 'debug'])
+        self.assertEqual(
+            sorter.sort_specifiers(set(['x86', 'mac', 'debug', 'win7'])),
+            ['mac', 'win7', 'x86', 'debug'])
 
 
 class TestConfigurationConverterTest(unittest.TestCase):
-
     def __init__(self, testFunc):
         self._all_test_configurations = make_mock_all_test_configurations_set()
         unittest.TestCase.__init__(self, testFunc)
 
     def test_symmetric_difference(self):
-        self.assertEqual(TestConfigurationConverter.symmetric_difference([set(['a', 'b']), set(['b', 'c'])]), set(['a', 'c']))
-        self.assertEqual(TestConfigurationConverter.symmetric_difference(
-            [set(['a', 'b']), set(['b', 'c']), set(['b', 'd'])]), set(['a', 'c', 'd']))
+        self.assertEqual(
+            TestConfigurationConverter.symmetric_difference(
+                [set(['a', 'b']), set(['b', 'c'])]), set(['a', 'c']))
+        self.assertEqual(
+            TestConfigurationConverter.symmetric_difference(
+                [set(['a', 'b']),
+                 set(['b', 'c']),
+                 set(['b', 'd'])]), set(['a', 'c', 'd']))
 
     def test_to_config_set(self):
         converter = TestConfigurationConverter(self._all_test_configurations)
 
-        self.assertEqual(converter.to_config_set(set()), self._all_test_configurations)
+        self.assertEqual(
+            converter.to_config_set(set()), self._all_test_configurations)
 
         self.assertEqual(converter.to_config_set(set(['foo'])), set())
 
         self.assertEqual(converter.to_config_set(set(['win7', 'foo'])), set())
 
         errors = []
-        self.assertEqual(converter.to_config_set(set(['win7', 'foo']), errors), set())
+        self.assertEqual(
+            converter.to_config_set(set(['win7', 'foo']), errors), set())
         self.assertEqual(errors, ["Unrecognized specifier 'foo'"])
 
-        self.assertEqual(converter.to_config_set(set(['win7', 'x86_64'])), set())
+        self.assertEqual(
+            converter.to_config_set(set(['win7', 'x86_64'])), set())
 
         configs_to_match = set([
             TestConfiguration('win7', 'x86', 'release'),
         ])
-        self.assertEqual(converter.to_config_set(set(['win7', 'release'])), configs_to_match)
+        self.assertEqual(
+            converter.to_config_set(set(['win7', 'release'])),
+            configs_to_match)
 
         configs_to_match = set([
             TestConfiguration('snowleopard', 'x86', 'release'),
@@ -194,7 +227,8 @@
             TestConfiguration('precise', 'x86_64', 'release'),
             TestConfiguration('trusty', 'x86_64', 'release'),
         ])
-        self.assertEqual(converter.to_config_set(set(['release'])), configs_to_match)
+        self.assertEqual(
+            converter.to_config_set(set(['release'])), configs_to_match)
 
         configs_to_match = set([
             TestConfiguration('precise', 'x86_64', 'release'),
@@ -202,7 +236,8 @@
             TestConfiguration('trusty', 'x86_64', 'release'),
             TestConfiguration('trusty', 'x86_64', 'debug'),
         ])
-        self.assertEqual(converter.to_config_set(set(['x86_64'])), configs_to_match)
+        self.assertEqual(
+            converter.to_config_set(set(['x86_64'])), configs_to_match)
 
         configs_to_match = set([
             TestConfiguration('trusty', 'x86_64', 'release'),
@@ -212,15 +247,17 @@
             TestConfiguration('snowleopard', 'x86', 'release'),
             TestConfiguration('snowleopard', 'x86', 'debug'),
         ])
-        self.assertEqual(converter.to_config_set(set(['trusty', 'precise', 'snowleopard'])),
-                         configs_to_match)
+        self.assertEqual(
+            converter.to_config_set(set(['trusty', 'precise', 'snowleopard'])),
+            configs_to_match)
 
         configs_to_match = set([
             TestConfiguration('snowleopard', 'x86', 'release'),
             TestConfiguration('snowleopard', 'x86', 'debug'),
         ])
-        self.assertEqual(converter.to_config_set(set(['snowleopard', 'x86'])),
-                         configs_to_match)
+        self.assertEqual(
+            converter.to_config_set(set(['snowleopard', 'x86'])),
+            configs_to_match)
 
         configs_to_match = set([
             TestConfiguration('trusty', 'x86_64', 'release'),
@@ -231,53 +268,66 @@
             configs_to_match)
 
     def test_macro_expansion(self):
-        converter = TestConfigurationConverter(self._all_test_configurations, MOCK_MACROS)
+        converter = TestConfigurationConverter(self._all_test_configurations,
+                                               MOCK_MACROS)
 
         configs_to_match = set([
             TestConfiguration('vista', 'x86', 'release'),
             TestConfiguration('win7', 'x86', 'release'),
         ])
-        self.assertEqual(converter.to_config_set(set(['win', 'release'])), configs_to_match)
+        self.assertEqual(
+            converter.to_config_set(set(['win', 'release'])), configs_to_match)
 
         configs_to_match = set([
             TestConfiguration('vista', 'x86', 'release'),
             TestConfiguration('win7', 'x86', 'release'),
             TestConfiguration('trusty', 'x86_64', 'release'),
         ])
-        self.assertEqual(converter.to_config_set(set(['win', 'trusty', 'release'])),
-                         configs_to_match)
+        self.assertEqual(
+            converter.to_config_set(set(['win', 'trusty', 'release'])),
+            configs_to_match)
 
         configs_to_match = set([
             TestConfiguration('vista', 'x86', 'release'),
             TestConfiguration('win7', 'x86', 'release'),
             TestConfiguration('snowleopard', 'x86', 'release'),
         ])
-        self.assertEqual(converter.to_config_set(set(['win', 'mac', 'release'])), configs_to_match)
+        self.assertEqual(
+            converter.to_config_set(set(['win', 'mac', 'release'])),
+            configs_to_match)
 
     def test_to_specifier_lists(self):
-        converter = TestConfigurationConverter(self._all_test_configurations, MOCK_MACROS)
+        converter = TestConfigurationConverter(self._all_test_configurations,
+                                               MOCK_MACROS)
 
-        self.assertEqual(converter.to_specifiers_list(set(self._all_test_configurations)), [[]])
+        self.assertEqual(
+            converter.to_specifiers_list(set(self._all_test_configurations)),
+            [[]])
         self.assertEqual(converter.to_specifiers_list(set()), [])
 
         configs_to_match = set([
             TestConfiguration('win7', 'x86', 'release'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match), [set(['release', 'win7'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match),
+            [set(['release', 'win7'])])
 
         configs_to_match = set([
             TestConfiguration('win7', 'x86', 'release'),
             TestConfiguration('win7', 'x86', 'debug'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match), [set(['win7'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match), [set(['win7'])])
 
         configs_to_match = set([
             TestConfiguration('precise', 'x86_64', 'debug'),
             TestConfiguration('trusty', 'x86_64', 'debug'),
             TestConfiguration('win7', 'x86', 'release'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match),
-                         [set(['release', 'win7']), set(['debug', 'linux'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match),
+            [set(['release', 'win7']),
+             set(['debug', 'linux'])])
 
         configs_to_match = set([
             TestConfiguration('win7', 'x86', 'release'),
@@ -287,8 +337,10 @@
             TestConfiguration('trusty', 'x86_64', 'debug'),
             TestConfiguration('precise', 'x86_64', 'debug'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match),
-                         [set(['release', 'win7']), set(['debug', 'linux'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match),
+            [set(['release', 'win7']),
+             set(['debug', 'linux'])])
 
         configs_to_match = set([
             TestConfiguration('win7', 'x86', 'release'),
@@ -297,13 +349,16 @@
             TestConfiguration('precise', 'x86_64', 'release'),
             TestConfiguration('trusty', 'x86_64', 'release'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match), [set(['release'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match), [set(['release'])])
 
         configs_to_match = set([
             TestConfiguration('win7', 'x86', 'release'),
             TestConfiguration('snowleopard', 'x86', 'release'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match), [set(['win7', 'mac', 'release'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match),
+            [set(['win7', 'mac', 'release'])])
 
         configs_to_match = set([
             TestConfiguration('snowleopard', 'x86', 'release'),
@@ -311,8 +366,9 @@
             TestConfiguration('win7', 'x86', 'debug'),
             TestConfiguration('trusty', 'x86_64', 'release'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match),
-                         [set(['win7']), set(['release', 'mac', 'trusty'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match),
+            [set(['win7']), set(['release', 'mac', 'trusty'])])
 
     def test_macro_collapsing(self):
         macros = {'foo': ['bar', 'baz'], 'people': ['bob', 'alice', 'john']}
@@ -323,24 +379,38 @@
 
         specifiers_list = [set(['john', 'godzilla', 'alice'])]
         TestConfigurationConverter.collapse_macros(macros, specifiers_list)
-        self.assertEqual(specifiers_list, [set(['john', 'godzilla', 'alice', 'godzilla'])])
+        self.assertEqual(specifiers_list,
+                         [set(['john', 'godzilla', 'alice', 'godzilla'])])
 
-        specifiers_list = [set(['bar', 'godzilla', 'baz', 'bob', 'alice', 'john'])]
+        specifiers_list = [
+            set(['bar', 'godzilla', 'baz', 'bob', 'alice', 'john'])
+        ]
         TestConfigurationConverter.collapse_macros(macros, specifiers_list)
         self.assertEqual(specifiers_list, [set(['foo', 'godzilla', 'people'])])
 
-        specifiers_list = [set(['bar', 'godzilla', 'baz', 'bob']), set(['bar', 'baz']), set(['people', 'alice', 'bob', 'john'])]
+        specifiers_list = [
+            set(['bar', 'godzilla', 'baz', 'bob']),
+            set(['bar', 'baz']),
+            set(['people', 'alice', 'bob', 'john'])
+        ]
         TestConfigurationConverter.collapse_macros(macros, specifiers_list)
-        self.assertEqual(specifiers_list, [set(['bob', 'foo', 'godzilla']), set(['foo']), set(['people'])])
+        self.assertEqual(
+            specifiers_list,
+            [set(['bob', 'foo', 'godzilla']),
+             set(['foo']),
+             set(['people'])])
 
     def test_converter_macro_collapsing(self):
-        converter = TestConfigurationConverter(self._all_test_configurations, MOCK_MACROS)
+        converter = TestConfigurationConverter(self._all_test_configurations,
+                                               MOCK_MACROS)
 
         configs_to_match = set([
             TestConfiguration('vista', 'x86', 'release'),
             TestConfiguration('win7', 'x86', 'release'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match), [set(['win', 'release'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match),
+            [set(['win', 'release'])])
 
         configs_to_match = set([
             TestConfiguration('vista', 'x86', 'release'),
@@ -348,29 +418,40 @@
             TestConfiguration('precise', 'x86_64', 'release'),
             TestConfiguration('trusty', 'x86_64', 'release'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match), [set(['win', 'linux', 'release'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match),
+            [set(['win', 'linux', 'release'])])
 
         configs_to_match = set([
             TestConfiguration('vista', 'x86', 'release'),
             TestConfiguration('win7', 'x86', 'release'),
             TestConfiguration('snowleopard', 'x86', 'release'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match), [set(['win', 'mac', 'release'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match),
+            [set(['win', 'mac', 'release'])])
 
         configs_to_match = set([
             TestConfiguration('vista', 'x86', 'release'),
             TestConfiguration('win7', 'x86', 'release'),
             TestConfiguration('snowleopard', 'x86', 'release'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match), [set(['win', 'mac', 'release'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match),
+            [set(['win', 'mac', 'release'])])
 
         configs_to_match = set([
             TestConfiguration('vista', 'x86', 'release'),
             TestConfiguration('win7', 'x86', 'release'),
         ])
-        self.assertEqual(converter.to_specifiers_list(configs_to_match), [set(['win', 'release'])])
+        self.assertEqual(
+            converter.to_specifiers_list(configs_to_match),
+            [set(['win', 'release'])])
 
     def test_specifier_converter_access(self):
-        specifier_sorter = TestConfigurationConverter(self._all_test_configurations, MOCK_MACROS).specifier_sorter()
-        self.assertEqual(specifier_sorter.category_for_specifier('snowleopard'), 'version')
-        self.assertEqual(specifier_sorter.category_for_specifier('mac'), 'version')
+        specifier_sorter = TestConfigurationConverter(
+            self._all_test_configurations, MOCK_MACROS).specifier_sorter()
+        self.assertEqual(
+            specifier_sorter.category_for_specifier('snowleopard'), 'version')
+        self.assertEqual(
+            specifier_sorter.category_for_specifier('mac'), 'version')
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_expectations.py b/third_party/blink/tools/blinkpy/web_tests/models/test_expectations.py
index 68d1750..efa7f62 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_expectations.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_expectations.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """A helper class for reading in and dealing with tests expectations for web tests."""
 
 import logging
@@ -41,29 +40,21 @@
 
 ResultType = typ_types.ResultType
 
-
 _log = logging.getLogger(__name__)
 
-
 SPECIAL_PREFIXES = ('# tags:', '# results:', '# conflicts_allowed:')
 
-
 _PLATFORM_TOKENS_LIST = [
-    'Android',
-    'Fuchsia',
-    'IOS', 'IOS12.2', 'IOS13.0',
-    'Linux',
-    'Mac', 'Mac10.10', 'Mac10.11', 'Retina', 'Mac10.12', 'Mac10.13', 'Mac10.14',
+    'Android', 'Fuchsia', 'IOS', 'IOS12.2', 'IOS13.0', 'Linux', 'Mac',
+    'Mac10.10', 'Mac10.11', 'Retina', 'Mac10.12', 'Mac10.13', 'Mac10.14',
     'Win', 'Win7', 'Win10'
 ]
 
-
 _BUILD_TYPE_TOKEN_LIST = [
     'Release',
     'Debug',
 ]
 
-
 EXPECTATION_DESCRIPTIONS = {
     ResultType.Skip: 'skipped',
     ResultType.Pass: 'passes',
@@ -88,7 +79,6 @@
 
 
 class ParseError(Exception):
-
     def __init__(self, errors):
         self.errors = errors
 
@@ -100,7 +90,6 @@
 
 
 class TestExpectations(object):
-
     def __init__(self, port, expectations_dict=None):
         self._port = port
         self._system_condition_tags = self._port.get_platform_tags()
@@ -124,12 +113,17 @@
         self._file_changes_committed = {}
 
         for path, content in self._expectations_dict.items():
-            test_expectations = typ_types.TestExpectations(tags=self._system_condition_tags)
-            ret, errors = test_expectations.parse_tagged_list(content, tags_conflict=self._tags_conflict)
+            test_expectations = typ_types.TestExpectations(
+                tags=self._system_condition_tags)
+            ret, errors = test_expectations.parse_tagged_list(
+                content, tags_conflict=self._tags_conflict)
             if ret:
-                expectation_errors.append('Parsing file %s produced following errors\n%s' % (path, errors))
+                expectation_errors.append(
+                    'Parsing file %s produced following errors\n%s' % (path,
+                                                                       errors))
             self._expectations.append(test_expectations)
-            flag_match = re.match('.*' + port.FLAG_EXPECTATIONS_PREFIX + '(.*)', path)
+            flag_match = re.match(
+                '.*' + port.FLAG_EXPECTATIONS_PREFIX + '(.*)', path)
 
             self._reset_lines(path)
             self._file_changes_committed[path] = False
@@ -145,14 +139,16 @@
         if port.get_option('ignore_tests', []):
             content = '# results: [ Skip ]\n'
             for pattern in set(port.get_option('ignore_tests', [])):
-                if filesystem.isdir(filesystem.join(self._port.web_tests_dir(), pattern)):
+                if filesystem.isdir(
+                        filesystem.join(self._port.web_tests_dir(), pattern)):
                     pattern += '*'
                 content += '%s [ Skip ]\n' % pattern
             test_expectations = typ_types.TestExpectations()
             ret, errors = test_expectations.parse_tagged_list(content)
             if ret:
-                expectation_errors.append('Parsing patterns passed through --ignore produced the following errors\n%s' %
-                                          errors)
+                expectation_errors.append(
+                    'Parsing patterns passed through --ignore produced the following errors\n%s'
+                    % errors)
             self._expectations.append(test_expectations)
         if expectation_errors:
             raise ParseError(expectation_errors)
@@ -180,8 +176,9 @@
             lines: Array which contains Expectation instances for each line in an
                    expectations file."""
         # remove comments associated with deleted expectation
-        while (lines and lines[-1].to_string().strip().startswith('#') and
-               not any(lines[-1].to_string().strip().startswith(prefix) for prefix in SPECIAL_PREFIXES)):
+        while (lines and lines[-1].to_string().strip().startswith('#')
+               and not any(lines[-1].to_string().strip().startswith(prefix)
+                           for prefix in SPECIAL_PREFIXES)):
             lines.pop()
 
         # remove spaces above expectation
@@ -195,8 +192,16 @@
 
         args:
             path: Absolute path of the expectations file."""
-        baseline_linenos = {e.lineno for e in self._file_to_lines[path] if not isinstance(e, _NotExpectation)}
-        not_expectation_linenos = {e.lineno: e for e in self._file_to_lines[path] if e.lineno not in baseline_linenos}
+        baseline_linenos = {
+            e.lineno
+            for e in self._file_to_lines[path]
+            if not isinstance(e, _NotExpectation)
+        }
+        not_expectation_linenos = {
+            e.lineno: e
+            for e in self._file_to_lines[path]
+            if e.lineno not in baseline_linenos
+        }
         content = self._expectations_dict[path]
         idx = self._expectations_dict.keys().index(path)
         typ_expectations = self._expectations[idx]
@@ -205,7 +210,8 @@
         # Store Expectation instances for each line
         lineno_to_exps = defaultdict(list)
 
-        for pattern_to_exps in (typ_expectations.individual_exps, typ_expectations.glob_exps):
+        for pattern_to_exps in (typ_expectations.individual_exps,
+                                typ_expectations.glob_exps):
             for exps in pattern_to_exps.values():
                 for exp in exps:
                     lineno_to_exps[exp.lineno].append(exp)
@@ -246,7 +252,8 @@
         for path, commited in self._file_changes_committed.items():
             if commited:
                 continue
-            new_content = '\n'.join([e.to_string() for e in self.get_updated_lines(path)]) + '\n'
+            new_content = '\n'.join(
+                [e.to_string() for e in self.get_updated_lines(path)]) + '\n'
             self._expectations_dict[path] = new_content
             self._port.host.filesystem.write_text_file(path, new_content)
             self._file_changes_committed[path] = True
@@ -276,7 +283,8 @@
     @memoized
     def _os_to_version(self):
         os_to_version = {}
-        for os, os_versions in self._port.configuration_specifier_macros().items():
+        for os, os_versions in \
+            self._port.configuration_specifier_macros().items():
             for version in os_versions:
                 os_to_version[version.lower()] = os.lower()
         return os_to_version
@@ -310,8 +318,8 @@
             # file and there are expected results in the second file, then the JSON
             # results will show an expected per test field with PASS and whatever the
             # expected results in the second file are.
-            if not (len(expected_results.results) == 1 and
-                    ResultType.Pass in expected_results.results):
+            if not (len(expected_results.results) == 1
+                    and ResultType.Pass in expected_results.results):
                 results.update(expected_results.results)
             is_slow_test |= expected_results.is_slow_test
             reasons.update(expected_results.reason.split())
@@ -322,7 +330,11 @@
         # If the results set is empty then the Expectation constructor
         # will set the expected result to Pass.
         return typ_types.Expectation(
-            test=test, results=results, is_slow_test=is_slow_test, reason=' '.join(reasons), trailing_comments=trailing_comments)
+            test=test,
+            results=results,
+            is_slow_test=is_slow_test,
+            reason=' '.join(reasons),
+            trailing_comments=trailing_comments)
 
     def get_expectations(self, test):
         return self._get_expectations(self._expectations, test)
@@ -344,11 +356,17 @@
             result: ResultType value, i.e ResultType.Skip"""
         tests = []
         for test_exp in self.expectations:
-            tests.extend([test_name for test_name in test_exp.individual_exps.keys()])
-            tests.extend([dir_name[:-1] for dir_name in test_exp.glob_exps.keys()
-                          if self.port.test_isdir(dir_name[:-1])])
-        return {test_name for test_name in tests
-                if result in self.get_expectations(test_name).results}
+            tests.extend(
+                [test_name for test_name in test_exp.individual_exps.keys()])
+            tests.extend([
+                dir_name[:-1] for dir_name in test_exp.glob_exps.keys()
+                if self.port.test_isdir(dir_name[:-1])
+            ])
+        return {
+            test_name
+            for test_name in tests
+            if result in self.get_expectations(test_name).results
+        }
 
     def matches_an_expected_result(self, test, result):
         expected_results = self.get_expectations(test).results
@@ -360,7 +378,8 @@
         bot_expectations = self._port.bot_expectations()
         raw_expectations = '# results: [ Failure Pass Crash Skip Timeout ]\n'
         for test, results in bot_expectations.items():
-            raw_expectations += typ_types.Expectation(test=test, results=results).to_string() + '\n'
+            raw_expectations += typ_types.Expectation(
+                test=test, results=results).to_string() + '\n'
         self.merge_raw_expectations(raw_expectations)
 
     def remove_expectations(self, path, exps):
@@ -410,10 +429,12 @@
             if exp.is_glob:
                 typ_expectations.glob_exps.setdefault(exp.test, []).append(exp)
             else:
-                typ_expectations.individual_exps.setdefault(exp.test,[]).append(exp)
+                typ_expectations.individual_exps.setdefault(exp.test,
+                                                            []).append(exp)
 
         if added_glob:
-            glob_exps = reduce(lambda x,y: x + y, typ_expectations.glob_exps.values())
+            glob_exps = reduce(lambda x, y: x + y,
+                               typ_expectations.glob_exps.values())
             glob_exps.sort(key=lambda e: len(e.test), reverse=True)
             typ_expectations.glob_exps = OrderedDict()
             for exp in glob_exps:
@@ -433,21 +454,27 @@
     def __init__(self, test_expectations):
         self._test_expectations = test_expectations
         self._configuration_specifiers_dict = {}
-        for os, os_versions in  (
-              self._test_expectations.port.configuration_specifier_macros().items()):
-            self._configuration_specifiers_dict[os.lower()] = (
-                frozenset(version.lower() for version in os_versions))
-        self._os_specifiers = frozenset(os for os in self._configuration_specifiers_dict.keys())
+        for os, os_versions in (self._test_expectations.port.
+                                configuration_specifier_macros().items()):
+            self._configuration_specifiers_dict[os.lower()] = (frozenset(
+                version.lower() for version in os_versions))
+        self._os_specifiers = frozenset(
+            os for os in self._configuration_specifiers_dict.keys())
         self._version_specifiers = frozenset(
-            specifier.lower() for specifier in
-            reduce(lambda x,y: x|y, self._configuration_specifiers_dict.values()))
+            specifier.lower() for specifier in reduce(
+                lambda x, y: x | y, self._configuration_specifiers_dict.
+                values()))
         self._deleted_lines = set()
-        self._generic_exp_file_path = self._test_expectations.port.path_to_generic_test_expectations_file()
+        self._generic_exp_file_path = \
+            self._test_expectations.port.path_to_generic_test_expectations_file()
 
     def _split_configuration(self, exp, versions_to_remove):
         build_specifiers = set()
-        os_specifiers = ({os for os in self._os_specifiers if
-                          versions_to_remove & self._configuration_specifiers_dict[os]} & exp.tags)
+        os_specifiers = ({
+            os
+            for os in self._os_specifiers
+            if versions_to_remove & self._configuration_specifiers_dict[os]
+        } & exp.tags)
         if os_specifiers:
             # If an expectations tag list has an OS tag which has several versions which are
             # in the versions_to_remove set, create expectations for versions that are not in
@@ -455,7 +482,8 @@
             build_specifiers = exp.tags - os_specifiers
             os_specifier = os_specifiers.pop()
             system_specifiers = (
-                set(version for version in self._configuration_specifiers_dict[os_specifier]) -
+                set(version for version in self.
+                    _configuration_specifiers_dict[os_specifier]) -
                 versions_to_remove)
         elif self._os_specifiers & exp.tags:
             # If there is an OS tag in the expectation's tag list which does not have
@@ -464,7 +492,8 @@
         else:
             # If there are no OS tags in the expectation's tag list, then create an
             # expectation for each version that is not in the versions_to_remove list
-            system_specifiers = set(self._version_specifiers - versions_to_remove)
+            system_specifiers = set(self._version_specifiers -
+                                    versions_to_remove)
             for os, os_versions in self._configuration_specifiers_dict.items():
                 # If all the versions of an OS are in the system specifiers set, then
                 # replace all those specifiers with the OS specifier.
@@ -474,29 +503,40 @@
                     system_specifiers.add(os)
         return [
             typ_types.Expectation(
-                tags=set([specifier])|build_specifiers, results=exp.results, is_slow_test=exp.is_slow_test,
-                reason=exp.reason, test=exp.test, lineno=exp.lineno, trailing_comments=exp.trailing_comments)
-            for specifier in sorted(system_specifiers)]
+                tags=set([specifier]) | build_specifiers,
+                results=exp.results,
+                is_slow_test=exp.is_slow_test,
+                reason=exp.reason,
+                test=exp.test,
+                lineno=exp.lineno,
+                trailing_comments=exp.trailing_comments)
+            for specifier in sorted(system_specifiers)
+        ]
 
     def remove_os_versions(self, test_name, versions_to_remove):
-        versions_to_remove = frozenset(specifier.lower() for specifier in versions_to_remove)
+        versions_to_remove = frozenset(
+            specifier.lower() for specifier in versions_to_remove)
         if not versions_to_remove:
             # This will prevent making changes to test expectations which have no OS versions to remove.
             return
 
-        exp_lines = self._test_expectations.get_updated_lines(self._generic_exp_file_path)
+        exp_lines = self._test_expectations.get_updated_lines(
+            self._generic_exp_file_path)
         delete_exps = []
 
         for exp in exp_lines:
             if exp.test != test_name:
                 continue
             if exp.tags & versions_to_remove:
-                self._test_expectations.remove_expectations(self._generic_exp_file_path, [exp])
+                self._test_expectations.remove_expectations(
+                    self._generic_exp_file_path, [exp])
             elif not exp.tags & self._version_specifiers:
                 self._test_expectations.add_expectations(
-                    self._generic_exp_file_path, self._split_configuration(exp, versions_to_remove), exp.lineno)
-                self._test_expectations.remove_expectations(self._generic_exp_file_path, [exp])
+                    self._generic_exp_file_path,
+                    self._split_configuration(exp, versions_to_remove),
+                    exp.lineno)
+                self._test_expectations.remove_expectations(
+                    self._generic_exp_file_path, [exp])
 
     def update_expectations(self):
         self._test_expectations.commit_changes()
-
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_expectations_unittest.py b/third_party/blink/tools/blinkpy/web_tests/models/test_expectations_unittest.py
index 0a0123a..d5c942d0 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_expectations_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_expectations_unittest.py
@@ -48,14 +48,14 @@
         unittest.TestCase.__init__(self, testFunc)
 
     def get_basic_tests(self):
-        return ['failures/expected/text.html',
-                'failures/expected/image_checksum.html',
-                'failures/expected/crash.html',
-                'failures/expected/image.html',
-                'failures/expected/timeout.html',
-                'failures/unexpected/*/text.html',
-                'passes/text.html',
-                'reftests/failures/expected/has_unused_expectation.html']
+        return [
+            'failures/expected/text.html',
+            'failures/expected/image_checksum.html',
+            'failures/expected/crash.html', 'failures/expected/image.html',
+            'failures/expected/timeout.html',
+            'failures/unexpected/*/text.html', 'passes/text.html',
+            'reftests/failures/expected/has_unused_expectation.html'
+        ]
 
     def get_basic_expectations(self):
         return """
@@ -73,47 +73,58 @@
             expectations_dict['overrides'] = overrides
         self._port.expectations_dict = lambda: expectations_dict
         expectations_to_lint = expectations_dict if is_lint_mode else None
-        self._exp = TestExpectations(self._port, expectations_dict=expectations_to_lint)
+        self._exp = TestExpectations(
+            self._port, expectations_dict=expectations_to_lint)
 
     def assert_exp_list(self, test, results):
-        self.assertEqual(self._exp.get_expectations(test).results, set(results))
+        self.assertEqual(
+            self._exp.get_expectations(test).results, set(results))
 
     def assert_exp(self, test, result):
         self.assert_exp_list(test, [result])
 
     def assert_bad_expectations(self, expectations, overrides=None):
         with self.assertRaises(ParseError):
-            self.parse_exp(expectations, is_lint_mode=True, overrides=overrides)
+            self.parse_exp(
+                expectations, is_lint_mode=True, overrides=overrides)
 
     def assert_trailing_comments(self, test, comments):
-        self.assertEqual(self._exp.get_expectations(test).trailing_comments, comments)
+        self.assertEqual(
+            self._exp.get_expectations(test).trailing_comments, comments)
 
 
 class BasicTests(Base):
-
     def test_basic(self):
         self.parse_exp(self.get_basic_expectations())
         self.assert_exp('failures/expected/text.html', ResultType.Failure)
-        self.assert_exp_list('failures/expected/image_checksum.html', [ResultType.Crash])
+        self.assert_exp_list('failures/expected/image_checksum.html',
+                             [ResultType.Crash])
         self.assert_exp('passes/text.html', ResultType.Pass)
         self.assert_exp('failures/expected/image.html', ResultType.Crash)
-        self.assert_trailing_comments('failures/expected/crash.html', ' # foo and bar\n')
+        self.assert_trailing_comments('failures/expected/crash.html',
+                                      ' # foo and bar\n')
 
 
 class FlagExpectationsTests(Base):
-
-    def setup_using_raw_expectations(self, base_exps='', flag_exps='', flag_name=''):
+    def setup_using_raw_expectations(self,
+                                     base_exps='',
+                                     flag_exps='',
+                                     flag_name=''):
         self._general_exp_filename = 'TestExpectations'
-        self._port.host.filesystem.write_text_file(self._general_exp_filename, base_exps)
+        self._port.host.filesystem.write_text_file(self._general_exp_filename,
+                                                   base_exps)
         expectations_dict = {self._general_exp_filename: base_exps}
 
         # set up flag specific expectations
         if flag_name:
-            self._flag_exp_filename = self._port.host.filesystem.join('FlagExpectations', flag_name)
-            self._port.host.filesystem.write_text_file(self._flag_exp_filename, flag_exps)
+            self._flag_exp_filename = self._port.host.filesystem.join(
+                'FlagExpectations', flag_name)
+            self._port.host.filesystem.write_text_file(self._flag_exp_filename,
+                                                       flag_exps)
             expectations_dict[self._flag_exp_filename] = flag_exps
 
-        self._test_expectations = TestExpectations(self._port, expectations_dict)
+        self._test_expectations = TestExpectations(self._port,
+                                                   expectations_dict)
 
     def test_add_flag_test_expectations(self):
         raw_flag_exps = """
@@ -121,13 +132,16 @@
         # results: [ Failure ]
         [ Win ] failures/expected/text.html [ Failure ]
         """
-        self.setup_using_raw_expectations(flag_exps=raw_flag_exps, flag_name='composite-after-paint')
-        flag_exp = self._test_expectations.get_flag_expectations('failures/expected/text.html')
+        self.setup_using_raw_expectations(
+            flag_exps=raw_flag_exps, flag_name='composite-after-paint')
+        flag_exp = self._test_expectations.get_flag_expectations(
+            'failures/expected/text.html')
         self.assertEqual(flag_exp.results, set([ResultType.Failure]))
-        self.assertEqual(self._test_expectations.flag_name, '/composite-after-paint')
+        self.assertEqual(self._test_expectations.flag_name,
+                         '/composite-after-paint')
+
 
 class SystemConfigurationRemoverTests(Base):
-
     def __init__(self, testFunc):
         super(SystemConfigurationRemoverTests, self).__init__(testFunc)
         self._port.configuration_specifier_macros_dict = {
@@ -139,10 +153,12 @@
     def set_up_using_raw_expectations(self, content):
         self._general_exp_filename = self._port.host.filesystem.join(
             self._port.web_tests_dir(), 'TestExpectations')
-        self._port.host.filesystem.write_text_file(self._general_exp_filename, content)
+        self._port.host.filesystem.write_text_file(self._general_exp_filename,
+                                                   content)
         expectations_dict = {self._general_exp_filename: content}
         test_expectations = TestExpectations(self._port, expectations_dict)
-        self._system_config_remover = SystemConfigurationRemover(test_expectations)
+        self._system_config_remover = SystemConfigurationRemover(
+            test_expectations)
 
     def test_remove_mac_version_from_mac_expectation(self):
         raw_expectations = (
@@ -151,15 +167,18 @@
             '# Below Expectation should be split\n'
             '[ Mac ] failures/expected/text.html?\* [ Failure ]\n')
         self.set_up_using_raw_expectations(raw_expectations)
-        self._system_config_remover.remove_os_versions('failures/expected/text.html?*', set(['Mac10.10']))
+        self._system_config_remover.remove_os_versions(
+            'failures/expected/text.html?*', set(['Mac10.10']))
         self._system_config_remover.update_expectations()
-        updated_exps = self._port.host.filesystem.read_text_file(self._general_exp_filename)
-        self.assertEqual(updated_exps, (
-            '# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac ]\n'
-            '# results: [ Failure ]\n'
-            '# Below Expectation should be split\n'
-            '[ Mac10.11 ] failures/expected/text.html?\* [ Failure ]\n'
-            '[ Mac10.12 ] failures/expected/text.html?\* [ Failure ]\n'))
+        updated_exps = self._port.host.filesystem.read_text_file(
+            self._general_exp_filename)
+        self.assertEqual(
+            updated_exps,
+            ('# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac ]\n'
+             '# results: [ Failure ]\n'
+             '# Below Expectation should be split\n'
+             '[ Mac10.11 ] failures/expected/text.html?\* [ Failure ]\n'
+             '[ Mac10.12 ] failures/expected/text.html?\* [ Failure ]\n'))
 
     def test_remove_mac_version_from_linux_expectation(self):
         raw_expectations = (
@@ -168,9 +187,11 @@
             '# Below Expectation should be unaffected\n'
             '[ Linux ] failures/expected/text.html [ Failure ]\n')
         self.set_up_using_raw_expectations(raw_expectations)
-        self._system_config_remover.remove_os_versions('failures/expected/text.html', set(['Mac10.10']))
+        self._system_config_remover.remove_os_versions(
+            'failures/expected/text.html', set(['Mac10.10']))
         self._system_config_remover.update_expectations()
-        updated_exps = self._port.host.filesystem.read_text_file(self._general_exp_filename)
+        updated_exps = self._port.host.filesystem.read_text_file(
+            self._general_exp_filename)
         self.assertEqual(updated_exps, raw_expectations)
 
     def test_remove_mac_version_from_all_config_expectation(self):
@@ -180,17 +201,20 @@
             '# Below Expectation should be split\n'
             'failures/expected/text.html [ Failure ]\n')
         self.set_up_using_raw_expectations(raw_expectations)
-        self._system_config_remover.remove_os_versions('failures/expected/text.html', set(['Mac10.10']))
+        self._system_config_remover.remove_os_versions(
+            'failures/expected/text.html', set(['Mac10.10']))
         self._system_config_remover.update_expectations()
-        updated_exps = self._port.host.filesystem.read_text_file(self._general_exp_filename)
-        self.assertEqual(updated_exps, (
-            '# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac Linux Win ]\n'
-            '# results: [ Failure ]\n'
-            '# Below Expectation should be split\n'
-            '[ Linux ] failures/expected/text.html [ Failure ]\n'
-            '[ Mac10.11 ] failures/expected/text.html [ Failure ]\n'
-            '[ Mac10.12 ] failures/expected/text.html [ Failure ]\n'
-            '[ Win ] failures/expected/text.html [ Failure ]\n'))
+        updated_exps = self._port.host.filesystem.read_text_file(
+            self._general_exp_filename)
+        self.assertEqual(
+            updated_exps,
+            ('# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac Linux Win ]\n'
+             '# results: [ Failure ]\n'
+             '# Below Expectation should be split\n'
+             '[ Linux ] failures/expected/text.html [ Failure ]\n'
+             '[ Mac10.11 ] failures/expected/text.html [ Failure ]\n'
+             '[ Mac10.12 ] failures/expected/text.html [ Failure ]\n'
+             '[ Win ] failures/expected/text.html [ Failure ]\n'))
 
     def test_remove_all_mac_versions_from_mac_expectation(self):
         raw_expectations = (
@@ -200,12 +224,14 @@
             '[ Mac ] failures/expected/text.html [ Failure ]\n')
         self.set_up_using_raw_expectations(raw_expectations)
         self._system_config_remover.remove_os_versions(
-            'failures/expected/text.html', {'Mac10.10', 'Mac10.11', 'Mac10.12'})
+            'failures/expected/text.html',
+            {'Mac10.10', 'Mac10.11', 'Mac10.12'})
         self._system_config_remover.update_expectations()
-        updated_exps = self._port.host.filesystem.read_text_file(self._general_exp_filename)
-        self.assertEqual(updated_exps, (
-            '# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac ]\n'
-            '# results: [ Failure ]\n'))
+        updated_exps = self._port.host.filesystem.read_text_file(
+            self._general_exp_filename)
+        self.assertEqual(updated_exps,
+                         ('# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac ]\n'
+                          '# results: [ Failure ]\n'))
 
     def test_remove_all_mac_versions_from_all_config_expectation(self):
         raw_expectations = (
@@ -215,15 +241,18 @@
             'failures/expected/text.html [ Failure ]\n')
         self.set_up_using_raw_expectations(raw_expectations)
         self._system_config_remover.remove_os_versions(
-            'failures/expected/text.html', {'Mac10.10', 'Mac10.11', 'Mac10.12'})
+            'failures/expected/text.html',
+            {'Mac10.10', 'Mac10.11', 'Mac10.12'})
         self._system_config_remover.update_expectations()
-        updated_exps = self._port.host.filesystem.read_text_file(self._general_exp_filename)
-        self.assertEqual(updated_exps, (
-            '# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac Linux Win ]\n'
-            '# results: [ Failure ]\n'
-            '# Below Expectation should be split\n'
-            '[ Linux ] failures/expected/text.html [ Failure ]\n'
-            '[ Win ] failures/expected/text.html [ Failure ]\n'))
+        updated_exps = self._port.host.filesystem.read_text_file(
+            self._general_exp_filename)
+        self.assertEqual(
+            updated_exps,
+            ('# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac Linux Win ]\n'
+             '# results: [ Failure ]\n'
+             '# Below Expectation should be split\n'
+             '[ Linux ] failures/expected/text.html [ Failure ]\n'
+             '[ Win ] failures/expected/text.html [ Failure ]\n'))
 
     def test_remove_all_mac_versions_from_linux_expectation(self):
         raw_expectations = (
@@ -233,9 +262,11 @@
             '[ Linux ] failures/expected/text.html [ Failure ]\n')
         self.set_up_using_raw_expectations(raw_expectations)
         self._system_config_remover.remove_os_versions(
-            'failures/expected/text.html', {'Mac10.10', 'Mac10.11', 'Mac10.12'})
+            'failures/expected/text.html',
+            {'Mac10.10', 'Mac10.11', 'Mac10.12'})
         self._system_config_remover.update_expectations()
-        updated_exps = self._port.host.filesystem.read_text_file(self._general_exp_filename)
+        updated_exps = self._port.host.filesystem.read_text_file(
+            self._general_exp_filename)
         self.assertEqual(updated_exps, raw_expectations)
 
     def test_remove_all_configs(self):
@@ -245,14 +276,18 @@
             '# Below Expectation and this comment should be deleted\n'
             'failures/expected/text.html [ Failure ]\n')
         self.set_up_using_raw_expectations(raw_expectations)
-        all_versions = reduce(lambda x, y: x+y, self._port.configuration_specifier_macros_dict.values())
+        all_versions = reduce(
+            lambda x, y: x + y,
+            self._port.configuration_specifier_macros_dict.values())
         self._system_config_remover.remove_os_versions(
             'failures/expected/text.html', all_versions)
         self._system_config_remover.update_expectations()
-        updated_exps = self._port.host.filesystem.read_text_file(self._general_exp_filename)
-        self.assertEqual(updated_exps, (
-            '# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac Linux Win ]\n'
-            '# results: [ Failure ]\n'))
+        updated_exps = self._port.host.filesystem.read_text_file(
+            self._general_exp_filename)
+        self.assertEqual(
+            updated_exps,
+            ('# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac Linux Win ]\n'
+             '# results: [ Failure ]\n'))
 
     def test_remove_all_configs2(self):
         raw_expectations = (
@@ -261,14 +296,18 @@
             '# Below Expectation and this comment should be deleted\n'
             '[ Mac ] failures/expected/text.html [ Failure ]\n')
         self.set_up_using_raw_expectations(raw_expectations)
-        all_versions = reduce(lambda x, y: x+y, self._port.configuration_specifier_macros_dict.values())
+        all_versions = reduce(
+            lambda x, y: x + y,
+            self._port.configuration_specifier_macros_dict.values())
         self._system_config_remover.remove_os_versions(
             'failures/expected/text.html', all_versions)
         self._system_config_remover.update_expectations()
-        updated_exps = self._port.host.filesystem.read_text_file(self._general_exp_filename)
-        self.assertEqual(updated_exps, (
-            '# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac Linux Win ]\n'
-            '# results: [ Failure ]\n'))
+        updated_exps = self._port.host.filesystem.read_text_file(
+            self._general_exp_filename)
+        self.assertEqual(
+            updated_exps,
+            ('# tags: [ Mac10.10 Mac10.11 Mac10.12 Mac Linux Win ]\n'
+             '# results: [ Failure ]\n'))
 
     def test_remove_mac_version_from_another_mac_version_expectation(self):
         raw_expectations = (
@@ -277,9 +316,11 @@
             '# Below Expectation should be unaffected\n'
             '[ Mac10.11 ] failures/expected/text.html [ Failure ]\n')
         self.set_up_using_raw_expectations(raw_expectations)
-        self._system_config_remover.remove_os_versions('failures/expected/text.html', set(['Mac10.10']))
+        self._system_config_remover.remove_os_versions(
+            'failures/expected/text.html', set(['Mac10.10']))
         self._system_config_remover.update_expectations()
-        updated_exps = self._port.host.filesystem.read_text_file(self._general_exp_filename)
+        updated_exps = self._port.host.filesystem.read_text_file(
+            self._general_exp_filename)
         self.assertEqual(updated_exps, raw_expectations)
 
     def test_remove_mac_version_from_same_mac_version_expectation(self):
@@ -289,61 +330,80 @@
             '# Below Expectation as well as this comment should be deleted\n'
             '[ Mac10.10 ] failures/expected/text.html [ Failure ]\n')
         self.set_up_using_raw_expectations(raw_expectations)
-        self._system_config_remover.remove_os_versions('failures/expected/text.html', set(['Mac10.10']))
+        self._system_config_remover.remove_os_versions(
+            'failures/expected/text.html', set(['Mac10.10']))
         self._system_config_remover.update_expectations()
-        updated_exps = self._port.host.filesystem.read_text_file(self._general_exp_filename)
-        self.assertEqual(updated_exps, (
-            '# tags: [ Mac10.10 Mac10.11 Linux ]\n'
-            '# results: [ Failure ]\n'))
+        updated_exps = self._port.host.filesystem.read_text_file(
+            self._general_exp_filename)
+        self.assertEqual(updated_exps, ('# tags: [ Mac10.10 Mac10.11 Linux ]\n'
+                                        '# results: [ Failure ]\n'))
 
 
 class MiscTests(Base):
-
     def test_parse_mac_legacy_names(self):
         host = MockHost()
         expectations_dict = OrderedDict()
-        expectations_dict['expectations'] = ('# tags: [ Mac10.10 ]\n'
-                                             '# results: [ Failure ]\n'
-                                             '[ Mac10.10 ] failures/expected/text.html [ Failure ]\n')
+        expectations_dict['expectations'] = (
+            '# tags: [ Mac10.10 ]\n'
+            '# results: [ Failure ]\n'
+            '[ Mac10.10 ] failures/expected/text.html [ Failure ]\n')
 
         port = host.port_factory.get('test-mac-mac10.10', None)
         port.expectations_dict = lambda: expectations_dict
         expectations = TestExpectations(port)
-        self.assertEqual(expectations.get_expectations('failures/expected/text.html').results, {ResultType.Failure})
+        self.assertEqual(
+            expectations.get_expectations('failures/expected/text.html').
+            results, {ResultType.Failure})
 
         port = host.port_factory.get('test-win-win7', None)
         port.expectations_dict = lambda: expectations_dict
         expectations = TestExpectations(port)
-        self.assertEqual(expectations.get_expectations('failures/expected/text.html').results, {ResultType.Pass})
+        self.assertEqual(
+            expectations.get_expectations('failures/expected/text.html').
+            results, {ResultType.Pass})
 
     def test_get_test_with_expected_result(self):
-        test_expectations = ('# tags: [ win7 linux ]\n'
-                             '# results: [ Failure ]\n'
-                             '[ win7 ] failures/expected/text.html [ Failure ]\n'
-                             '[ linux ] failures/expected/image_checksum.html [ Failure ]\n')
+        test_expectations = (
+            '# tags: [ win7 linux ]\n'
+            '# results: [ Failure ]\n'
+            '[ win7 ] failures/expected/text.html [ Failure ]\n'
+            '[ linux ] failures/expected/image_checksum.html [ Failure ]\n')
         self.parse_exp(test_expectations)
-        self.assertEqual(self._exp.get_tests_with_expected_result(ResultType.Failure),
-                         set(['failures/expected/text.html']))
+        self.assertEqual(
+            self._exp.get_tests_with_expected_result(ResultType.Failure),
+            set(['failures/expected/text.html']))
 
     def test_multiple_results(self):
-        self.parse_exp('# results: [ Crash Failure ]\nfailures/expected/text.html [ Crash Failure ]')
-        self.assertEqual(self._exp.get_expectations('failures/expected/text.html').results, {ResultType.Failure, ResultType.Crash})
+        self.parse_exp(
+            '# results: [ Crash Failure ]\nfailures/expected/text.html [ Crash Failure ]'
+        )
+        self.assertEqual(
+            self._exp.get_expectations('failures/expected/text.html').results,
+            {ResultType.Failure, ResultType.Crash})
 
     def test_overrides_include_slow(self):
-        self.parse_exp('# results: [ Failure ]\nfailures/expected/text.html [ Failure ]',
-                       '# results: [ Slow ]\nfailures/expected/text.html [ Slow ]')
-        self.assert_exp_list('failures/expected/text.html', set([ResultType.Failure]))
-        self.assertTrue(self._exp.get_expectations('failures/expected/text.html').is_slow_test)
+        self.parse_exp(
+            '# results: [ Failure ]\nfailures/expected/text.html [ Failure ]',
+            '# results: [ Slow ]\nfailures/expected/text.html [ Slow ]')
+        self.assert_exp_list('failures/expected/text.html',
+                             set([ResultType.Failure]))
+        self.assertTrue(
+            self._exp.get_expectations('failures/expected/text.html').
+            is_slow_test)
 
     def test_overrides(self):
-        self.parse_exp('# results: [ Failure ]\nfailures/expected/text.html [ Failure ]',
-                       '# results: [ Timeout ]\nfailures/expected/text.html [ Timeout ]')
-        self.assert_exp_list('failures/expected/text.html', {ResultType.Failure, ResultType.Timeout})
+        self.parse_exp(
+            '# results: [ Failure ]\nfailures/expected/text.html [ Failure ]',
+            '# results: [ Timeout ]\nfailures/expected/text.html [ Timeout ]')
+        self.assert_exp_list('failures/expected/text.html',
+                             {ResultType.Failure, ResultType.Timeout})
 
     def test_more_specific_override_resets_skip(self):
-        self.parse_exp('# results: [ Skip ]\nfailures/expected* [ Skip ]',
-                       '# results: [ Failure ]\nfailures/expected/text.html [ Failure ]')
-        self.assert_exp_list('failures/expected/text.html', {ResultType.Failure, ResultType.Skip})
+        self.parse_exp(
+            '# results: [ Skip ]\nfailures/expected* [ Skip ]',
+            '# results: [ Failure ]\nfailures/expected/text.html [ Failure ]')
+        self.assert_exp_list('failures/expected/text.html',
+                             {ResultType.Failure, ResultType.Skip})
 
     def test_bot_test_expectations(self):
         """Test that expectations are merged rather than overridden when using flaky option 'unexpected'."""
@@ -352,113 +412,122 @@
 
         expectations_dict = OrderedDict()
         expectations_dict['expectations'] = (
-            '# results: [ Failure Crash ]\n%s [ Failure ]\n%s [ Crash ]\n' % (test_name1, test_name2))
+            '# results: [ Failure Crash ]\n%s [ Failure ]\n%s [ Crash ]\n' %
+            (test_name1, test_name2))
         self._port.expectations_dict = lambda: expectations_dict
 
         expectations = TestExpectations(self._port)
-        self.assertEqual(expectations.get_expectations(test_name1).results, set([ResultType.Failure]))
-        self.assertEqual(expectations.get_expectations(test_name2).results, set([ResultType.Crash]))
+        self.assertEqual(
+            expectations.get_expectations(test_name1).results,
+            set([ResultType.Failure]))
+        self.assertEqual(
+            expectations.get_expectations(test_name2).results,
+            set([ResultType.Crash]))
 
         def bot_expectations():
-            return {test_name1: [ResultType.Pass, ResultType.Timeout], test_name2: [ResultType.Crash]}
+            return {
+                test_name1: [ResultType.Pass, ResultType.Timeout],
+                test_name2: [ResultType.Crash]
+            }
+
         self._port.bot_expectations = bot_expectations
         self._port._options.ignore_flaky_tests = 'unexpected'
 
         expectations = TestExpectations(self._port)
-        self.assertEqual(expectations.get_expectations(test_name1).results,
-                         set([ResultType.Pass, ResultType.Failure, ResultType.Timeout]))
-        self.assertEqual(expectations.get_expectations(test_name2).results, set([ResultType.Crash]))
+        self.assertEqual(
+            expectations.get_expectations(test_name1).results,
+            set([ResultType.Pass, ResultType.Failure, ResultType.Timeout]))
+        self.assertEqual(
+            expectations.get_expectations(test_name2).results,
+            set([ResultType.Crash]))
 
 
 class RemoveExpectationsTest(Base):
-
     def test_remove_expectation(self):
         port = MockHost().port_factory.get('test-win-win7')
-        raw_expectations = (
-             '# tags: [ Mac Win ]\n'
-             '# results: [ Failure ]\n'
-             '\n'
-             '# This comment will be deleted\n'
-             '[ mac ] test1 [ Failure ]\n')
+        raw_expectations = ('# tags: [ Mac Win ]\n'
+                            '# results: [ Failure ]\n'
+                            '\n'
+                            '# This comment will be deleted\n'
+                            '[ mac ] test1 [ Failure ]\n')
         expectations_dict = OrderedDict()
         expectations_dict['/tmp/TestExpectations'] = ''
         expectations_dict['/tmp/TestExpectations2'] = raw_expectations
         test_expectations = TestExpectations(port, expectations_dict)
         test_to_exps = test_expectations.expectations[1].individual_exps
-        test_expectations.remove_expectations(
-            '/tmp/TestExpectations2', [test_to_exps['test1'][0]])
+        test_expectations.remove_expectations('/tmp/TestExpectations2',
+                                              [test_to_exps['test1'][0]])
         test_expectations.commit_changes()
         content = port.host.filesystem.read_text_file('/tmp/TestExpectations2')
-        self.assertEqual(content, (
-            '# tags: [ Mac Win ]\n'
-            '# results: [ Failure ]\n'))
+        self.assertEqual(content, ('# tags: [ Mac Win ]\n'
+                                   '# results: [ Failure ]\n'))
 
     def test_remove_added_expectations(self):
         port = MockHost().port_factory.get('test-win-win7')
-        raw_expectations = (
-             '# tags: [ Mac Win ]\n'
-             '# results: [ Failure ]\n'
-             '\n'
-             '# This comment will be deleted\n'
-             '[ mac ] test1 [ Failure ]\n')
+        raw_expectations = ('# tags: [ Mac Win ]\n'
+                            '# results: [ Failure ]\n'
+                            '\n'
+                            '# This comment will be deleted\n'
+                            '[ mac ] test1 [ Failure ]\n')
         expectations_dict = OrderedDict()
         expectations_dict['/tmp/TestExpectations'] = ''
         expectations_dict['/tmp/TestExpectations2'] = raw_expectations
         test_expectations = TestExpectations(port, expectations_dict)
-        test_expectations.add_expectations(
-            '/tmp/TestExpectations2',
-            [Expectation(test='test2', results=set([ResultType.Failure])),
-             Expectation(test='test3', results=set([ResultType.Crash]), tags=set(['win']))], 5)
-        test_expectations.remove_expectations(
-            '/tmp/TestExpectations2',
-            [Expectation(test='test2', results=set([ResultType.Failure]), lineno=5)])
+        test_expectations.add_expectations('/tmp/TestExpectations2', [
+            Expectation(test='test2', results=set([ResultType.Failure])),
+            Expectation(
+                test='test3',
+                results=set([ResultType.Crash]),
+                tags=set(['win']))
+        ], 5)
+        test_expectations.remove_expectations('/tmp/TestExpectations2', [
+            Expectation(
+                test='test2', results=set([ResultType.Failure]), lineno=5)
+        ])
         test_expectations.commit_changes()
         content = port.host.filesystem.read_text_file('/tmp/TestExpectations2')
-        self.assertEqual(content, (
-            '# tags: [ Mac Win ]\n'
-            '# results: [ Failure ]\n'
-             '\n'
-             '# This comment will be deleted\n'
-             '[ mac ] test1 [ Failure ]\n'
-             '[ Win ] test3 [ Crash ]\n'))
+        self.assertEqual(content, ('# tags: [ Mac Win ]\n'
+                                   '# results: [ Failure ]\n'
+                                   '\n'
+                                   '# This comment will be deleted\n'
+                                   '[ mac ] test1 [ Failure ]\n'
+                                   '[ Win ] test3 [ Crash ]\n'))
 
     def test_remove_after_add(self):
         port = MockHost().port_factory.get('test-win-win7')
-        raw_expectations = (
-             '# tags: [ Mac Win ]\n'
-             '# results: [ Failure Crash ]\n'
-             '\n'
-             '# This comment will not be deleted\n'
-             '[ mac ] test1 [ Failure ]\n')
+        raw_expectations = ('# tags: [ Mac Win ]\n'
+                            '# results: [ Failure Crash ]\n'
+                            '\n'
+                            '# This comment will not be deleted\n'
+                            '[ mac ] test1 [ Failure ]\n')
         expectations_dict = OrderedDict()
         expectations_dict['/tmp/TestExpectations'] = ''
         expectations_dict['/tmp/TestExpectations2'] = raw_expectations
         test_expectations = TestExpectations(port, expectations_dict)
         test_to_exps = test_expectations.expectations[1].individual_exps
-        test_expectations.add_expectations(
-            '/tmp/TestExpectations2',
-            [Expectation(test='test2', results=set([ResultType.Failure])),
-             Expectation(test='test3', results=set([ResultType.Crash]), tags=set(['mac']))], 5)
-        test_expectations.remove_expectations(
-            '/tmp/TestExpectations2', [test_to_exps['test1'][0]])
+        test_expectations.add_expectations('/tmp/TestExpectations2', [
+            Expectation(test='test2', results=set([ResultType.Failure])),
+            Expectation(
+                test='test3',
+                results=set([ResultType.Crash]),
+                tags=set(['mac']))
+        ], 5)
+        test_expectations.remove_expectations('/tmp/TestExpectations2',
+                                              [test_to_exps['test1'][0]])
         test_expectations.commit_changes()
         content = port.host.filesystem.read_text_file('/tmp/TestExpectations2')
-        self.assertEqual(content, (
-            '# tags: [ Mac Win ]\n'
-            '# results: [ Failure Crash ]\n'
-            '\n'
-            '# This comment will not be deleted\n'
-            '[ Mac ] test3 [ Crash ]\n'
-            'test2 [ Failure ]\n'))
+        self.assertEqual(content, ('# tags: [ Mac Win ]\n'
+                                   '# results: [ Failure Crash ]\n'
+                                   '\n'
+                                   '# This comment will not be deleted\n'
+                                   '[ Mac ] test3 [ Crash ]\n'
+                                   'test2 [ Failure ]\n'))
 
 
 class AddExpectationsTest(Base):
-
     def test_add_expectation(self):
         port = MockHost().port_factory.get('test-win-win7')
-        raw_expectations = (
-             '# tags: [ Mac Win ]\n'
-             '# results: [ Failure ]\n')
+        raw_expectations = ('# tags: [ Mac Win ]\n' '# results: [ Failure ]\n')
         expectations_dict = OrderedDict()
         expectations_dict['/tmp/TestExpectations'] = ''
         expectations_dict['/tmp/TestExpectations2'] = raw_expectations
@@ -468,100 +537,104 @@
             [Expectation(test='test1', results=set([ResultType.Failure]))])
         test_expectations.commit_changes()
         content = port.host.filesystem.read_text_file('/tmp/TestExpectations2')
-        self.assertEqual(content, (
-            '# tags: [ Mac Win ]\n'
-            '# results: [ Failure ]\n'
-            '\n'
-            'test1 [ Failure ]\n'))
+        self.assertEqual(content, ('# tags: [ Mac Win ]\n'
+                                   '# results: [ Failure ]\n'
+                                   '\n'
+                                   'test1 [ Failure ]\n'))
 
     def test_add_after_remove(self):
         port = MockHost().port_factory.get('test-win-win7')
-        raw_expectations = (
-             '# tags: [ Mac Win ]\n'
-             '# results: [ Failure Crash ]\n'
-             'test1 [ Failure ]\n')
+        raw_expectations = ('# tags: [ Mac Win ]\n'
+                            '# results: [ Failure Crash ]\n'
+                            'test1 [ Failure ]\n')
         expectations_dict = OrderedDict()
         expectations_dict['/tmp/TestExpectations'] = ''
         expectations_dict['/tmp/TestExpectations2'] = raw_expectations
         test_expectations = TestExpectations(port, expectations_dict)
-        test_expectations.remove_expectations(
-            '/tmp/TestExpectations2',
-            [Expectation(test='test1', results=set([ResultType.Failure]), lineno=3)])
+        test_expectations.remove_expectations('/tmp/TestExpectations2', [
+            Expectation(
+                test='test1', results=set([ResultType.Failure]), lineno=3)
+        ])
         test_expectations.add_expectations(
             '/tmp/TestExpectations2',
             [Expectation(test='test2', results=set([ResultType.Crash]))], 3)
         test_expectations.commit_changes()
         content = port.host.filesystem.read_text_file('/tmp/TestExpectations2')
-        self.assertEqual(content, (
-            '# tags: [ Mac Win ]\n'
-            '# results: [ Failure Crash ]\n'
-            'test2 [ Crash ]\n'))
+        self.assertEqual(content, ('# tags: [ Mac Win ]\n'
+                                   '# results: [ Failure Crash ]\n'
+                                   'test2 [ Crash ]\n'))
 
     def test_add_expectation_at_line(self):
         port = MockHost().port_factory.get('test-win-win7')
-        raw_expectations = (
-             '# tags: [ Mac Win ]\n'
-             '# results: [ Failure Crash ]\n'
-             '\n'
-             '# add expectations after this line\n'
-             'test1 [ Failure ]\n'
-             '\n')
+        raw_expectations = ('# tags: [ Mac Win ]\n'
+                            '# results: [ Failure Crash ]\n'
+                            '\n'
+                            '# add expectations after this line\n'
+                            'test1 [ Failure ]\n'
+                            '\n')
         expectations_dict = OrderedDict()
         expectations_dict['/tmp/TestExpectations'] = raw_expectations
         test_expectations = TestExpectations(port, expectations_dict)
-        test_expectations.add_expectations(
-            '/tmp/TestExpectations',
-            [Expectation(test='test2', results=set([ResultType.Crash]), tags=set(['win']))], 4)
-        test_expectations.remove_expectations(
-            '/tmp/TestExpectations',
-            [Expectation(test='test1', results=set([ResultType.Failure]), lineno=5)])
+        test_expectations.add_expectations('/tmp/TestExpectations', [
+            Expectation(
+                test='test2',
+                results=set([ResultType.Crash]),
+                tags=set(['win']))
+        ], 4)
+        test_expectations.remove_expectations('/tmp/TestExpectations', [
+            Expectation(
+                test='test1', results=set([ResultType.Failure]), lineno=5)
+        ])
         test_expectations.commit_changes()
         content = port.host.filesystem.read_text_file('/tmp/TestExpectations')
-        self.assertEqual(content, (
-            '# tags: [ Mac Win ]\n'
-            '# results: [ Failure Crash ]\n'
-            '\n'
-            '# add expectations after this line\n'
-            '[ Win ] test2 [ Crash ]\n'
-            '\n'))
+        self.assertEqual(content, ('# tags: [ Mac Win ]\n'
+                                   '# results: [ Failure Crash ]\n'
+                                   '\n'
+                                   '# add expectations after this line\n'
+                                   '[ Win ] test2 [ Crash ]\n'
+                                   '\n'))
 
 
 class CommitChangesTests(Base):
-
     def test_commit_changes_without_modifications(self):
         port = MockHost().port_factory.get('test-win-win7')
-        raw_expectations = (
-             '# tags: [ Mac Win ]\n'
-             '# results: [ Failure Crash ]\n'
-             '\n'
-             '# add expectations after this line\n'
-             'test1 [ Failure ]\n'
-             '\n')
+        raw_expectations = ('# tags: [ Mac Win ]\n'
+                            '# results: [ Failure Crash ]\n'
+                            '\n'
+                            '# add expectations after this line\n'
+                            'test1 [ Failure ]\n'
+                            '\n')
         expectations_dict = OrderedDict()
         expectations_dict['/tmp/TestExpectations'] = raw_expectations
         test_expectations = TestExpectations(port, expectations_dict)
         test_expectations.commit_changes()
         content = port.host.filesystem.read_text_file('/tmp/TestExpectations')
-        self.assertEqual(content, (
-            '# tags: [ Mac Win ]\n'
-            '# results: [ Failure Crash ]\n'
-            '\n'
-            '# add expectations after this line\n'
-            'test1 [ Failure ]\n'
-            '\n'))
+        self.assertEqual(content, ('# tags: [ Mac Win ]\n'
+                                   '# results: [ Failure Crash ]\n'
+                                   '\n'
+                                   '# add expectations after this line\n'
+                                   'test1 [ Failure ]\n'
+                                   '\n'))
 
 
 class SkippedTests(Base):
-
-    def check(self, expectations, overrides, ignore_tests, lint=False, expected_results=None):
-        expected_results = expected_results or [ResultType.Skip, ResultType.Failure]
+    def check(self,
+              expectations,
+              overrides,
+              ignore_tests,
+              lint=False,
+              expected_results=None):
+        expected_results = expected_results or [
+            ResultType.Skip, ResultType.Failure
+        ]
         port = MockHost().port_factory.get(
             'test-win-win7',
-            options=optparse.Values({'ignore_tests': ignore_tests}))
+            options=optparse.Values({
+                'ignore_tests': ignore_tests
+            }))
         port.host.filesystem.write_text_file(
-            port.host.filesystem.join(
-                port.web_tests_dir(), 'failures/expected/text.html'),
-            'foo')
+            port.host.filesystem.join(port.web_tests_dir(),
+                                      'failures/expected/text.html'), 'foo')
         expectations_dict = OrderedDict()
         expectations_dict['expectations'] = expectations
         if overrides:
@@ -569,20 +642,26 @@
         port.expectations_dict = lambda: expectations_dict
         expectations_to_lint = expectations_dict if lint else None
         exp = TestExpectations(port, expectations_dict=expectations_to_lint)
-        self.assertEqual(exp.get_expectations('failures/expected/text.html').results, set(expected_results))
+        self.assertEqual(
+            exp.get_expectations('failures/expected/text.html').results,
+            set(expected_results))
 
     def test_skipped_file_overrides_expectations(self):
-        self.check(expectations='# results: [ Failure Skip ]\nfailures/expected/text.html [ Failure ]\n',
-                   overrides=None, ignore_tests=['failures/expected/text.html'])
+        self.check(
+            expectations=
+            '# results: [ Failure Skip ]\nfailures/expected/text.html [ Failure ]\n',
+            overrides=None,
+            ignore_tests=['failures/expected/text.html'])
 
     def test_skipped_file_overrides_overrides(self):
-        self.check(expectations='# results: [ Skip Failure ]\n',
-                   overrides='# results: [ Skip Failure ]\nfailures/expected/text.html [ Failure ]\n',
-                   ignore_tests=['failures/expected/text.html'])
+        self.check(
+            expectations='# results: [ Skip Failure ]\n',
+            overrides=
+            '# results: [ Skip Failure ]\nfailures/expected/text.html [ Failure ]\n',
+            ignore_tests=['failures/expected/text.html'])
 
 
 class PrecedenceTests(Base):
-
     def test_file_over_directory(self):
         # This tests handling precedence of specific lines over directories
         # and tests expectations covering entire directories.
@@ -593,7 +672,8 @@
 """
         self.parse_exp(exp_str)
         self.assert_exp('failures/expected/text.html', ResultType.Failure)
-        self.assert_exp_list('failures/expected/crash.html', [ResultType.Crash])
+        self.assert_exp_list('failures/expected/crash.html',
+                             [ResultType.Crash])
 
         exp_str = """
 # results: [ Failure Crash ]
@@ -602,4 +682,5 @@
 """
         self.parse_exp(exp_str)
         self.assert_exp('failures/expected/text.html', ResultType.Failure)
-        self.assert_exp_list('failures/expected/crash.html', [ResultType.Crash])
+        self.assert_exp_list('failures/expected/crash.html',
+                             [ResultType.Crash])
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_failures.py b/third_party/blink/tools/blinkpy/web_tests/models/test_failures.py
index 7f8b154..5728c8d1 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_failures.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_failures.py
@@ -33,7 +33,6 @@
 from blinkpy.common.html_diff import html_diff
 from blinkpy.common.unified_diff import unified_diff
 
-
 # TODO(rmhasan) Create a unit test for each Failure type and make
 # sure each artifact is written to the correct path
 
@@ -99,9 +98,7 @@
 FILENAME_SUFFIX_HTML_DIFF = "-pretty-diff"
 FILENAME_SUFFIX_OVERLAY = "-overlay"
 
-
-_ext_to_file_type = {
-    '.txt': 'text', '.png': 'image', '.wav': 'audio'}
+_ext_to_file_type = {'.txt': 'text', '.png': 'image', '.wav': 'audio'}
 
 
 def has_failure_type(failure_type, failure_list):
@@ -126,8 +123,8 @@
         if expected_driver_output:
             self.has_stderr |= expected_driver_output.has_stderr()
 
-    def _write_to_artifacts(
-            self, typ_artifacts, artifact_name, path, content, force_overwrite):
+    def _write_to_artifacts(self, typ_artifacts, artifact_name, path, content,
+                            force_overwrite):
         typ_artifacts.CreateArtifact(
             artifact_name, path, content, force_overwrite=force_overwrite)
 
@@ -145,8 +142,11 @@
                 artifact_filename)
             if not self.filesystem.exists(artifacts_abspath):
                 self._write_to_artifacts(
-                    typ_artifacts, 'stderr', artifact_filename,
-                    self.actual_driver_output.error, force_overwrite=True)
+                    typ_artifacts,
+                    'stderr',
+                    artifact_filename,
+                    self.actual_driver_output.error,
+                    force_overwrite=True)
 
     @staticmethod
     def loads(s):
@@ -182,7 +182,6 @@
 
 
 class PassWithStderr(AbstractTestResultType):
-
     def __init__(self, driver_output):
         # TODO (rmhasan): Should we write out the reference driver standard
         # error
@@ -200,8 +199,7 @@
     result = ResultType.Timeout
 
     def __init__(self, actual_driver_output, is_reftest=False):
-        super(FailureTimeout, self).__init__(
-            actual_driver_output, None)
+        super(FailureTimeout, self).__init__(actual_driver_output, None)
         self.is_reftest = is_reftest
 
     def create_artifacts(self, typ_artifacts, force_overwrite=False):
@@ -217,10 +215,13 @@
 class FailureCrash(AbstractTestResultType):
     result = ResultType.Crash
 
-    def __init__(self, actual_driver_output, is_reftest=False,
-                 process_name='content_shell', pid=None, has_log=False):
-        super(FailureCrash, self).__init__(
-            actual_driver_output, None)
+    def __init__(self,
+                 actual_driver_output,
+                 is_reftest=False,
+                 process_name='content_shell',
+                 pid=None,
+                 has_log=False):
+        super(FailureCrash, self).__init__(actual_driver_output, None)
         self.process_name = process_name
         self.pid = pid
         self.is_reftest = is_reftest
@@ -228,7 +229,8 @@
         self.crash_log = self.actual_driver_output.crash_log
 
     def create_artifacts(self, typ_artifacts, force_overwrite=False):
-        super(FailureCrash, self).create_artifacts(typ_artifacts, force_overwrite)
+        super(FailureCrash, self).create_artifacts(typ_artifacts,
+                                                   force_overwrite)
         if self.crash_log:
             artifact_filename = self.port.output_filename(
                 self.test_name, FILENAME_SUFFIX_CRASH_LOG, '.txt')
@@ -246,26 +248,24 @@
 
 
 class FailureLeak(TestFailure):
-
     def __init__(self, actual_driver_output, is_reftest=False):
-        super(FailureLeak, self).__init__(
-            actual_driver_output, None)
+        super(FailureLeak, self).__init__(actual_driver_output, None)
         self.is_reftest = is_reftest
 
     def create_artifacts(self, typ_artifacts, force_overwrite=False):
-        super(FailureLeak, self).create_artifacts(typ_artifacts, force_overwrite)
+        super(FailureLeak, self).create_artifacts(typ_artifacts,
+                                                  force_overwrite)
         artifact_filename = self.port.output_filename(
             self.test_name, FILENAME_SUFFIX_LEAK_LOG, '.txt')
         self.log = self.actual_driver_output.leak_log
-        self._write_to_artifacts(
-            typ_artifacts, 'leak_log', artifact_filename, self.log, force_overwrite)
+        self._write_to_artifacts(typ_artifacts, 'leak_log', artifact_filename,
+                                 self.log, force_overwrite)
 
     def message(self):
         return 'leak detected: %s' % (self.log)
 
 
 class ActualAndBaselineArtifacts(TestFailure):
-
     def create_artifacts(self, typ_artifacts, force_overwrite=False):
         super(ActualAndBaselineArtifacts, self).create_artifacts(
             typ_artifacts, force_overwrite)
@@ -275,12 +275,14 @@
             self.test_name, FILENAME_SUFFIX_EXPECTED, self.file_ext)
         attr = _ext_to_file_type[self.file_ext]
         if getattr(self.actual_driver_output, attr):
-            self._write_to_artifacts(
-                typ_artifacts, 'actual_%s' % attr, self.actual_artifact_filename,
-                getattr(self.actual_driver_output, attr), force_overwrite)
+            self._write_to_artifacts(typ_artifacts, 'actual_%s' % attr,
+                                     self.actual_artifact_filename,
+                                     getattr(self.actual_driver_output,
+                                             attr), force_overwrite)
         if getattr(self.expected_driver_output, attr):
             self._write_to_artifacts(
-                typ_artifacts, 'expected_%s' % attr, self.expected_artifact_filename,
+                typ_artifacts, 'expected_%s' % attr,
+                self.expected_artifact_filename,
                 getattr(self.expected_driver_output, attr), force_overwrite)
 
     def message(self):
@@ -288,40 +290,41 @@
 
 
 class FailureText(ActualAndBaselineArtifacts):
-
     def __init__(self, actual_driver_output, expected_driver_output):
-        super(FailureText, self).__init__(
-            actual_driver_output, expected_driver_output)
+        super(FailureText, self).__init__(actual_driver_output,
+                                          expected_driver_output)
         self.has_repaint_overlay = (
             repaint_overlay.result_contains_repaint_rects(
-                actual_driver_output.text) or
-            repaint_overlay.result_contains_repaint_rects(
+                actual_driver_output.text)
+            or repaint_overlay.result_contains_repaint_rects(
                 expected_driver_output.text))
         self.file_ext = '.txt'
 
     def create_artifacts(self, typ_artifacts, force_overwrite=False):
         # TODO (rmhasan): See if you can can only output diff files for
         # non empty text.
-        super(FailureText, self).create_artifacts(
-            typ_artifacts, force_overwrite)
+        super(FailureText, self).create_artifacts(typ_artifacts,
+                                                  force_overwrite)
         expected_text = self.expected_driver_output.text or ''
         actual_text = self.actual_driver_output.text or ''
         artifacts_abs_path = self.filesystem.join(
             self.result_directory, typ_artifacts.ArtifactsSubDirectory())
         diff_content = unified_diff(
-          expected_text, actual_text,
-          self.filesystem.join(artifacts_abs_path, self.expected_artifact_filename),
-          self.filesystem.join(artifacts_abs_path, self.actual_artifact_filename))
-        diff_filename = self.port.output_filename(
-          self.test_name, FILENAME_SUFFIX_DIFF, '.txt')
+            expected_text, actual_text,
+            self.filesystem.join(artifacts_abs_path,
+                                 self.expected_artifact_filename),
+            self.filesystem.join(artifacts_abs_path,
+                                 self.actual_artifact_filename))
+        diff_filename = self.port.output_filename(self.test_name,
+                                                  FILENAME_SUFFIX_DIFF, '.txt')
         html_diff_content = html_diff(expected_text, actual_text)
         html_diff_filename = self.port.output_filename(
             self.test_name, FILENAME_SUFFIX_HTML_DIFF, '.html')
-        self._write_to_artifacts(
-            typ_artifacts, 'text_diff', diff_filename, diff_content, force_overwrite)
-        self._write_to_artifacts(
-            typ_artifacts, 'pretty_text_diff', html_diff_filename,
-            html_diff_content, force_overwrite)
+        self._write_to_artifacts(typ_artifacts, 'text_diff', diff_filename,
+                                 diff_content, force_overwrite)
+        self._write_to_artifacts(typ_artifacts, 'pretty_text_diff',
+                                 html_diff_filename, html_diff_content,
+                                 force_overwrite)
 
     def message(self):
         raise NotImplementedError
@@ -331,19 +334,16 @@
 
 
 class FailureMissingResult(FailureText):
-
     def message(self):
         return '-expected.txt was missing'
 
 
 class FailureTextNotGenerated(FailureText):
-
     def message(self):
         return 'test did not generate text results'
 
 
 class FailureTextMismatch(FailureText):
-
     def create_artifacts(self, typ_artifacts, force_overwrite=False):
         super(FailureTextMismatch, self).create_artifacts(
             typ_artifacts, force_overwrite)
@@ -353,8 +353,8 @@
         if html:
             overlay_filename = self.port.output_filename(
                 self.test_name, FILENAME_SUFFIX_OVERLAY, '.html')
-            self._write_to_artifacts(
-                typ_artifacts, 'overlay', overlay_filename, html, force_overwrite)
+            self._write_to_artifacts(typ_artifacts, 'overlay',
+                                     overlay_filename, html, force_overwrite)
 
     def message(self):
         return 'text diff'
@@ -364,13 +364,11 @@
 
 
 class FailureTestHarnessAssertion(FailureText):
-
     def message(self):
         return 'asserts failed'
 
 
 class FailureSpacesAndTabsTextMismatch(FailureTextMismatch):
-
     def message(self):
         return 'text diff by spaces and tabs only'
 
@@ -379,7 +377,6 @@
 
 
 class FailureLineBreaksTextMismatch(FailureTextMismatch):
-
     def message(self):
         return 'text diff by newlines only'
 
@@ -388,7 +385,6 @@
 
 
 class FailureSpaceTabLineBreakTextMismatch(FailureTextMismatch):
-
     def message(self):
         return 'text diff by spaces, tabs and newlines only'
 
@@ -397,10 +393,9 @@
 
 
 class FailureImage(ActualAndBaselineArtifacts):
-
     def __init__(self, actual_driver_output, expected_driver_output):
-        super(FailureImage, self).__init__(
-            actual_driver_output, expected_driver_output)
+        super(FailureImage, self).__init__(actual_driver_output,
+                                           expected_driver_output)
         self.file_ext = '.png'
 
     def message(self):
@@ -408,25 +403,21 @@
 
 
 class FailureImageHashNotGenerated(FailureImage):
-
     def message(self):
         return 'test did not generate image results'
 
 
 class FailureMissingImageHash(FailureImage):
-
     def message(self):
         return '-expected.png was missing an embedded checksum'
 
 
 class FailureMissingImage(FailureImage):
-
     def message(self):
         return '-expected.png was missing'
 
 
 class FailureImageHashMismatch(FailureImage):
-
     def message(self):
         return 'image diff'
 
@@ -436,16 +427,18 @@
             diff_filename = self.port.output_filename(
                 self.test_name, FILENAME_SUFFIX_DIFF, '.png')
             diff = self.actual_driver_output.image_diff
-            self._write_to_artifacts(
-                typ_artifacts, 'image_diff', diff_filename, diff, force_overwrite)
+            self._write_to_artifacts(typ_artifacts, 'image_diff',
+                                     diff_filename, diff, force_overwrite)
             diffs_html_filename = self.port.output_filename(
                 self.test_name, FILENAME_SUFFIX_DIFFS, '.html')
             diffs_html = _image_diff_html_template % {
-                'title': self.test_name, 'diff_filename': diff_filename,
-                'prefix': self.port.output_filename(self.test_name, '', '')}
-            self._write_to_artifacts(
-                typ_artifacts, 'pretty_image_diff', diffs_html_filename,
-                diffs_html, force_overwrite)
+                'title': self.test_name,
+                'diff_filename': diff_filename,
+                'prefix': self.port.output_filename(self.test_name, '', '')
+            }
+            self._write_to_artifacts(typ_artifacts, 'pretty_image_diff',
+                                     diffs_html_filename, diffs_html,
+                                     force_overwrite)
 
         super(FailureImageHashMismatch, self).create_artifacts(
             typ_artifacts, force_overwrite)
@@ -463,10 +456,12 @@
     # will be called first and then when that method calls the super class's
     # create_artifacts, it will call FailureImageHashMismatch's create_artifacts.
 
-    def __init__(self, actual_driver_output, expected_driver_output,
+    def __init__(self,
+                 actual_driver_output,
+                 expected_driver_output,
                  reference_filename=None):
-        super(FailureReftestMixin, self).__init__(
-            actual_driver_output, expected_driver_output)
+        super(FailureReftestMixin, self).__init__(actual_driver_output,
+                                                  expected_driver_output)
         self.reference_filename = reference_filename
         self.reference_file_type = 'reference_file_mismatch'
 
@@ -477,31 +472,33 @@
         artifact_filename = self.filesystem.join(
             sub_dir, self.filesystem.dirname(self.test_name),
             self.filesystem.basename(self.reference_filename))
-        artifact_abspath = self.filesystem.join(
-            self.result_directory, artifact_filename)
+        artifact_abspath = self.filesystem.join(self.result_directory,
+                                                artifact_filename)
         # a reference test may include a page that does not exist in the
         # web test directory, like about:blank pages
-        if (not self.filesystem.exists(artifact_abspath) and
-                self.filesystem.exists(self.reference_filename)):
+        if (not self.filesystem.exists(artifact_abspath)
+                and self.filesystem.exists(self.reference_filename)):
             self.filesystem.maybe_make_directory(
                 self.filesystem.dirname(artifact_abspath))
             self.filesystem.copyfile(self.reference_filename, artifact_abspath)
-        typ_artifacts.AddArtifact(self.reference_file_type, artifact_filename,
-                                  raise_exception_for_duplicates=False)
+        typ_artifacts.AddArtifact(
+            self.reference_file_type,
+            artifact_filename,
+            raise_exception_for_duplicates=False)
 
     def message(self):
         raise NotImplementedError
 
 
 class FailureReftestMismatch(FailureReftestMixin, FailureImageHashMismatch):
-
     def message(self):
         return 'reference mismatch'
 
 
 class FailureReftestMismatchDidNotOccur(FailureReftestMixin, FailureImage):
-
-    def __init__(self, actual_driver_output, expected_driver_output,
+    def __init__(self,
+                 actual_driver_output,
+                 expected_driver_output,
                  reference_filename=None):
         super(FailureReftestMismatchDidNotOccur, self).__init__(
             actual_driver_output, expected_driver_output, reference_filename)
@@ -512,22 +509,20 @@
 
 
 class FailureReftestNoImageGenerated(FailureReftestMixin, FailureImage):
-
     def message(self):
         return "reference test didn't generate pixel results"
 
 
-class FailureReftestNoReferenceImageGenerated(FailureReftestMixin, FailureImage):
-
+class FailureReftestNoReferenceImageGenerated(FailureReftestMixin,
+                                              FailureImage):
     def message(self):
         return "-expected.html didn't generate pixel results"
 
 
 class FailureAudio(ActualAndBaselineArtifacts):
-
     def __init__(self, actual_driver_output, expected_driver_output):
-        super(FailureAudio, self).__init__(
-            actual_driver_output, expected_driver_output)
+        super(FailureAudio, self).__init__(actual_driver_output,
+                                           expected_driver_output)
         self.file_ext = '.wav'
 
     def message(self):
@@ -535,19 +530,16 @@
 
 
 class FailureMissingAudio(FailureAudio):
-
     def message(self):
         return 'expected audio result was missing'
 
 
 class FailureAudioMismatch(FailureAudio):
-
     def message(self):
         return 'audio mismatch'
 
 
 class FailureAudioNotGenerated(FailureAudio):
-
     def message(self):
         return 'audio result not generated'
 
@@ -556,8 +548,8 @@
     result = ResultType.Skip
 
     def __init__(self, actual_driver_output=None, expected_driver_output=None):
-        super(FailureEarlyExit, self).__init__(
-            actual_driver_output, expected_driver_output)
+        super(FailureEarlyExit, self).__init__(actual_driver_output,
+                                               expected_driver_output)
 
     def create_artifacts(self, typ_artifacts, force_overwrite=False):
         pass
@@ -569,12 +561,12 @@
 # Convenient collection of all failure classes for anything that might
 # need to enumerate over them all.
 ALL_FAILURE_CLASSES = (FailureTimeout, FailureCrash, FailureMissingResult,
-                       FailureTestHarnessAssertion,
-                       FailureTextMismatch, FailureSpacesAndTabsTextMismatch,
-                       FailureLineBreaksTextMismatch, FailureSpaceTabLineBreakTextMismatch,
-                       FailureMissingImageHash,
-                       FailureMissingImage, FailureImageHashMismatch,
-                       FailureReftestMismatch,
+                       FailureTestHarnessAssertion, FailureTextMismatch,
+                       FailureSpacesAndTabsTextMismatch,
+                       FailureLineBreaksTextMismatch,
+                       FailureSpaceTabLineBreakTextMismatch,
+                       FailureMissingImageHash, FailureMissingImage,
+                       FailureImageHashMismatch, FailureReftestMismatch,
                        FailureReftestMismatchDidNotOccur,
                        FailureReftestNoImageGenerated,
                        FailureReftestNoReferenceImageGenerated,
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_failures_unittest.py b/third_party/blink/tools/blinkpy/web_tests/models/test_failures_unittest.py
index 6328a4c..504dabe2 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_failures_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_failures_unittest.py
@@ -30,15 +30,15 @@
 from blinkpy.web_tests.port.driver import DriverOutput
 
 from blinkpy.web_tests.models.test_failures import (
-    ALL_FAILURE_CLASSES, FailureCrash, FailureTimeout, TestFailure
-)
+    ALL_FAILURE_CLASSES, FailureCrash, FailureTimeout, TestFailure)
 
 
 class TestFailuresTest(unittest.TestCase):
-
     def setUp(self):
-        self._actual_output = DriverOutput(text=None, image=None, image_hash=None, audio=None)
-        self._expected_output = DriverOutput(text=None, image=None, image_hash=None, audio=None)
+        self._actual_output = DriverOutput(
+            text=None, image=None, image_hash=None, audio=None)
+        self._expected_output = DriverOutput(
+            text=None, image=None, image_hash=None, audio=None)
 
     def assert_loads(self, cls):
         failure_obj = cls(self._actual_output, self._expected_output)
@@ -61,23 +61,31 @@
             self.assert_loads(c)
 
     def test_equals(self):
-        self.assertEqual(FailureCrash(self._actual_output, self._expected_output),
-                         FailureCrash(self._actual_output, self._expected_output))
-        self.assertNotEqual(FailureCrash(self._actual_output, self._expected_output),
-                            FailureTimeout(self._actual_output, self._expected_output))
-        crash_set = set([FailureCrash(self._actual_output, self._expected_output),
-                         FailureCrash(self._actual_output, self._expected_output)])
+        self.assertEqual(
+            FailureCrash(self._actual_output, self._expected_output),
+            FailureCrash(self._actual_output, self._expected_output))
+        self.assertNotEqual(
+            FailureCrash(self._actual_output, self._expected_output),
+            FailureTimeout(self._actual_output, self._expected_output))
+        crash_set = set([
+            FailureCrash(self._actual_output, self._expected_output),
+            FailureCrash(self._actual_output, self._expected_output)
+        ])
         self.assertEqual(len(crash_set), 1)
         # The hash happens to be the name of the class, but sets still work:
-        crash_set = set([FailureCrash(self._actual_output, self._expected_output),
-                         'FailureCrash'])
+        crash_set = set([
+            FailureCrash(self._actual_output, self._expected_output),
+            'FailureCrash'
+        ])
         self.assertEqual(len(crash_set), 2)
 
     def test_crashes(self):
         self.assertEqual(
             FailureCrash(self._actual_output, self._expected_output).message(),
-                         'content_shell crashed')
+            'content_shell crashed')
         self.assertEqual(
-            FailureCrash(self._actual_output, self._expected_output,
-                         process_name='foo', pid=1234).message(),
-                         'foo crashed [pid=1234]')
+            FailureCrash(
+                self._actual_output,
+                self._expected_output,
+                process_name='foo',
+                pid=1234).message(), 'foo crashed [pid=1234]')
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_input.py b/third_party/blink/tools/blinkpy/web_tests/models/test_input.py
index cfec6f88..7758c47 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_input.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_input.py
@@ -31,8 +31,13 @@
 class TestInput(object):
     """Groups information about a test for easy passing of data."""
 
-    def __init__(self, test_name, timeout_ms=None, requires_lock=None,
-                 reference_files=None, retry_attempt=0, requires_force_overwrite=False):
+    def __init__(self,
+                 test_name,
+                 timeout_ms=None,
+                 requires_lock=None,
+                 reference_files=None,
+                 retry_attempt=0,
+                 requires_force_overwrite=False):
         # TestInput objects are normally constructed by the manager and passed
         # to the workers, but these some fields are set lazily in the workers
         # where possible, because they require us to look at the filesystem,
@@ -46,10 +51,7 @@
 
     def __repr__(self):
         return (
-            "TestInput('%s', timeout_ms=%s, requires_lock=%s, reference_files=%s, retry_attempt=%d, requires_force_overwrite=%s)" % (
-                self.test_name,
-                self.timeout_ms,
-                self.requires_lock,
-                self.reference_files,
-                self.retry_attempt,
-                self.requires_force_overwrite))
+            "TestInput('%s', timeout_ms=%s, requires_lock=%s, reference_files=%s, retry_attempt=%d, requires_force_overwrite=%s)"
+            % (self.test_name, self.timeout_ms, self.requires_lock,
+               self.reference_files, self.retry_attempt,
+               self.requires_force_overwrite))
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_results.py b/third_party/blink/tools/blinkpy/web_tests/models/test_results.py
index de6c100d..aa13b10c 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_results.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_results.py
@@ -33,18 +33,29 @@
 from blinkpy.web_tests.port.base import ARTIFACTS_SUB_DIR
 
 
-def build_test_result(
-    driver_output, test_name, retry_attempt=0,
-        failures=None, test_run_time=None, reftest_type=None,
-        pid=None, references=None, device_failed=False, crash_site=None):
+def build_test_result(driver_output,
+                      test_name,
+                      retry_attempt=0,
+                      failures=None,
+                      test_run_time=None,
+                      reftest_type=None,
+                      pid=None,
+                      references=None,
+                      device_failed=False,
+                      crash_site=None):
     failures = failures or []
     if not failures and driver_output.error:
         failures.append(test_failures.PassWithStderr(driver_output))
     return TestResult(
-        test_name, retry_attempt=retry_attempt,
-        failures=failures, test_run_time=test_run_time,
-        reftest_type=reftest_type, pid=pid, references=references,
-        device_failed=device_failed, crash_site=crash_site)
+        test_name,
+        retry_attempt=retry_attempt,
+        failures=failures,
+        test_run_time=test_run_time,
+        reftest_type=reftest_type,
+        pid=pid,
+        references=references,
+        device_failed=device_failed,
+        crash_site=crash_site)
 
 
 class TestResult(object):
@@ -57,9 +68,16 @@
     def loads(string):
         return cPickle.loads(string)
 
-    def __init__(self, test_name, retry_attempt=0,  failures=None,
-                 test_run_time=None, reftest_type=None,
-                 pid=None, references=None, device_failed=False, crash_site=None):
+    def __init__(self,
+                 test_name,
+                 retry_attempt=0,
+                 failures=None,
+                 test_run_time=None,
+                 reftest_type=None,
+                 pid=None,
+                 references=None,
+                 device_failed=False,
+                 crash_site=None):
         self.test_name = test_name
         self.failures = failures or []
         self.test_run_time = test_run_time or 0  # The time taken to execute the test itself.
@@ -75,12 +93,13 @@
 
         results = set([f.result for f in self.failures] or [ResultType.Pass])
         assert len(results) <= 2, (
-            'single_test_runner.py incorrectly reported results %s for test %s' %
-            (', '.join(results), test_name))
+            'single_test_runner.py incorrectly reported results %s for test %s'
+            % (', '.join(results), test_name))
         if len(results) == 2:
             assert ResultType.Timeout in results and ResultType.Failure in results, (
                 'The only combination of 2 results allowable is TIMEOUT and FAIL. '
-                'Test %s reported the following results %s' % (test_name, ', '.join(results)))
+                'Test %s reported the following results %s' %
+                (test_name, ', '.join(results)))
             self.type = ResultType.Timeout
         else:
             # FIXME: Setting this in the constructor makes this class hard to mutate.
@@ -92,7 +111,10 @@
         self.total_run_time = 0  # The time taken to run the test plus any references, compute diffs, etc.
         self.test_number = None
         self.artifacts = Artifacts(
-            self.results_directory, self.filesystem, retry_attempt, ARTIFACTS_SUB_DIR,
+            self.results_directory,
+            self.filesystem,
+            retry_attempt,
+            ARTIFACTS_SUB_DIR,
             repeat_tests=self.repeat_tests)
 
     def create_artifacts(self):
@@ -100,11 +122,11 @@
             failure.create_artifacts(self.artifacts)
 
     def __eq__(self, other):
-        return (self.test_name == other.test_name and
-                self.failures == other.failures and
-                self.test_run_time == other.test_run_time and
-                self.retry_attempt == other.retry_attempt and
-                self.results_directory == other.results_directory)
+        return (self.test_name == other.test_name
+                and self.failures == other.failures
+                and self.test_run_time == other.test_run_time
+                and self.retry_attempt == other.retry_attempt
+                and self.results_directory == other.results_directory)
 
     def __ne__(self, other):
         return not (self == other)
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_results_unittest.py b/third_party/blink/tools/blinkpy/web_tests/models/test_results_unittest.py
index 9f981bb..9b34b29 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_results_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_results_unittest.py
@@ -34,7 +34,6 @@
 
 
 class TestResultsTest(unittest.TestCase):
-
     def test_defaults(self):
         result = TestResult('foo')
         self.assertEqual(result.test_name, 'foo')
@@ -42,9 +41,7 @@
         self.assertEqual(result.test_run_time, 0)
 
     def test_loads(self):
-        result = TestResult(test_name='foo',
-                            failures=[],
-                            test_run_time=1.1)
+        result = TestResult(test_name='foo', failures=[], test_run_time=1.1)
         s = result.dumps()
         new_result = TestResult.loads(s)
         self.assertIsInstance(new_result, TestResult)
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_run_results.py b/third_party/blink/tools/blinkpy/web_tests/models/test_run_results.py
index 613e57a..597f1d2 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_run_results.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_run_results.py
@@ -39,14 +39,12 @@
 
 
 class TestRunException(Exception):
-
     def __init__(self, code, msg):
         self.code = code
         self.msg = msg
 
 
 class TestRunResults(object):
-
     def __init__(self, expectations, num_tests):
         self.total = num_tests
         self.remaining = self.total
@@ -78,7 +76,8 @@
         self.failures_by_name = {}
 
         self.tests_by_expectation = {}
-        for expected_result in test_expectations.EXPECTATION_DESCRIPTIONS.keys():
+        for expected_result in \
+            test_expectations.EXPECTATION_DESCRIPTIONS.keys():
             self.tests_by_expectation[expected_result] = set()
 
         self.slow_tests = set()
@@ -87,7 +86,8 @@
 
     def add(self, test_result, expected, test_is_slow):
         result_type_for_stats = test_result.type
-        self.tests_by_expectation[result_type_for_stats].add(test_result.test_name)
+        self.tests_by_expectation[result_type_for_stats].add(
+            test_result.test_name)
 
         self.results_by_name[test_result.test_name] = test_result
         if test_result.type != ResultType.Skip:
@@ -103,7 +103,8 @@
             elif test_result.type != ResultType.Pass:
                 self.expected_failures += 1
         else:
-            self.unexpected_results_by_name[test_result.test_name] = test_result
+            self.unexpected_results_by_name[test_result.test_name] = \
+                test_result
             self.unexpected += 1
             if len(test_result.failures):
                 self.unexpected_failures += 1
@@ -116,9 +117,11 @@
 
 
 class RunDetails(object):
-
-    def __init__(self, exit_code, summarized_full_results=None,
-                 summarized_failing_results=None, initial_results=None,
+    def __init__(self,
+                 exit_code,
+                 summarized_full_results=None,
+                 summarized_failing_results=None,
+                 initial_results=None,
                  all_retry_results=None):
         self.exit_code = exit_code
         self.summarized_full_results = summarized_full_results
@@ -138,10 +141,11 @@
     if test_failures.FailureMissingResult in failure_types:
         test_dict['is_missing_text'] = True
 
-    if (test_failures.FailureMissingImage in failure_types or
-            test_failures.FailureMissingImageHash in failure_types or
-            test_failures.FailureReftestNoImageGenerated in failure_types or
-            test_failures.FailureReftestNoReferenceImageGenerated in failure_types):
+    if (test_failures.FailureMissingImage in failure_types
+            or test_failures.FailureMissingImageHash in failure_types
+            or test_failures.FailureReftestNoImageGenerated in failure_types
+            or test_failures.FailureReftestNoReferenceImageGenerated in
+            failure_types):
         test_dict['is_missing_image'] = True
 
     if test_failures.FailureTestHarnessAssertion in failure_types:
@@ -150,8 +154,11 @@
     return test_dict
 
 
-def summarize_results(port_obj, expectations, initial_results,
-                      all_retry_results, only_include_failing=False):
+def summarize_results(port_obj,
+                      expectations,
+                      initial_results,
+                      all_retry_results,
+                      only_include_failing=False):
     """Returns a dictionary containing a summary of the test runs, with the following fields:
         'version': a version indicator
         'fixable': The number of fixable tests (NOW - PASS)
@@ -192,7 +199,8 @@
         for test_name, result in test_run_results.results_by_name.iteritems():
             if result.type == ResultType.Skip:
                 is_unexpected = test_name in test_run_results.unexpected_results_by_name
-                merged_results_by_name[test_name].append((result, is_unexpected))
+                merged_results_by_name[test_name].append((result,
+                                                          is_unexpected))
 
         # results_by_name only includes the last result, so we need all_results.
         for result in test_run_results.all_results:
@@ -280,7 +288,6 @@
             # Either no retries or all retries failed unexpectedly.
             num_regressions += 1
 
-
         rounded_run_time = round(initial_result.test_run_time, 1)
         if rounded_run_time:
             test_dict['time'] = rounded_run_time
@@ -298,10 +305,12 @@
         if len(crash_sites) > 0:
             test_dict['crash_site'] = crash_sites[0]
 
-        if test_failures.has_failure_type(test_failures.FailureTextMismatch, initial_result.failures):
+        if test_failures.has_failure_type(test_failures.FailureTextMismatch,
+                                          initial_result.failures):
             for failure in initial_result.failures:
                 if isinstance(failure, test_failures.FailureTextMismatch):
-                    test_dict['text_mismatch'] = failure.text_mismatch_category()
+                    test_dict['text_mismatch'] = \
+                        failure.text_mismatch_category()
                     break
 
         # Note: is_unexpected and is_regression are intended to reflect the
@@ -321,10 +330,12 @@
         for retry_result, is_unexpected in merged_results[1:]:
             # TODO(robertma): Why do we only update unexpected retry failures?
             if is_unexpected:
-                test_dict.update(_interpret_test_failures(retry_result.failures))
+                test_dict.update(
+                    _interpret_test_failures(retry_result.failures))
 
         for test_result, _ in merged_results:
-            for artifact_name, artifacts in test_result.artifacts.artifacts.items():
+            for artifact_name, artifacts in \
+                test_result.artifacts.artifacts.items():
                 artifact_dict = test_dict.setdefault('artifacts', {})
                 artifact_dict.setdefault(artifact_name, []).extend(artifacts)
 
@@ -377,8 +388,9 @@
         if git:
             results['chromium_revision'] = str(git.commit_position(path))
         else:
-            _log.warning('Failed to determine chromium commit position for %s, '
-                         'leaving "chromium_revision" key blank in full_results.json.',
-                         path)
+            _log.warning(
+                'Failed to determine chromium commit position for %s, '
+                'leaving "chromium_revision" key blank in full_results.json.',
+                path)
 
     return results
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_run_results_unittest.py b/third_party/blink/tools/blinkpy/web_tests/models/test_run_results_unittest.py
index ceea21b..e83ee65 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/test_run_results_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/test_run_results_unittest.py
@@ -39,26 +39,24 @@
 
 def get_result(test_name, result_type=ResultType.Pass, run_time=0):
     failures = []
-    dummy_1, dummy_2 = DriverOutput(None, None, None, None), DriverOutput(None, None, None, None)
+    dummy_1, dummy_2 = DriverOutput(None, None, None, None), DriverOutput(
+        None, None, None, None)
     if result_type == ResultType.Timeout:
         failures = [test_failures.FailureTimeout(dummy_1)]
     elif result_type == ResultType.Crash:
         failures = [test_failures.FailureCrash(dummy_1)]
     elif result_type == ResultType.Failure:
         failures = [test_failures.TestFailure(dummy_1, dummy_2)]
-    return test_results.TestResult(test_name, failures=failures, test_run_time=run_time)
+    return test_results.TestResult(
+        test_name, failures=failures, test_run_time=run_time)
 
 
 def run_results(port, extra_skipped_tests=None):
     tests = [
-        'passes/text.html',
-        'failures/expected/timeout.html',
-        'failures/expected/crash.html',
-        'failures/expected/leak.html',
-        'failures/expected/keyboard.html',
-        'failures/expected/audio.html',
-        'failures/expected/text.html',
-        'passes/skipped/skip.html'
+        'passes/text.html', 'failures/expected/timeout.html',
+        'failures/expected/crash.html', 'failures/expected/leak.html',
+        'failures/expected/keyboard.html', 'failures/expected/audio.html',
+        'failures/expected/text.html', 'passes/skipped/skip.html'
     ]
     expectations = test_expectations.TestExpectations(port)
     if extra_skipped_tests:
@@ -69,57 +67,100 @@
     return test_run_results.TestRunResults(expectations, len(tests))
 
 
-def summarized_results(port, expected, passing, flaky, only_include_failing=False, extra_skipped_tests=None):
+def summarized_results(port,
+                       expected,
+                       passing,
+                       flaky,
+                       only_include_failing=False,
+                       extra_skipped_tests=None):
     test_is_slow = False
 
     all_retry_results = []
     initial_results = run_results(port, extra_skipped_tests)
     if expected:
-        initial_results.add(get_result('passes/text.html', ResultType.Pass), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/audio.html', ResultType.Failure), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/timeout.html', ResultType.Timeout), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/crash.html', ResultType.Crash), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/leak.html', ResultType.Failure), expected, test_is_slow)
+        initial_results.add(
+            get_result('passes/text.html', ResultType.Pass), expected,
+            test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/audio.html', ResultType.Failure),
+            expected, test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/timeout.html', ResultType.Timeout),
+            expected, test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/crash.html', ResultType.Crash),
+            expected, test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/leak.html', ResultType.Failure),
+            expected, test_is_slow)
     elif passing:
         skipped_result = get_result('passes/skipped/skip.html')
         skipped_result.type = ResultType.Skip
         initial_results.add(skipped_result, True, test_is_slow)
 
-        initial_results.add(get_result('passes/text.html', run_time=1), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/audio.html'), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/timeout.html'), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/crash.html'), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/leak.html'), expected, test_is_slow)
+        initial_results.add(
+            get_result('passes/text.html', run_time=1), expected, test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/audio.html'), expected, test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/timeout.html'), expected,
+            test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/crash.html'), expected, test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/leak.html'), expected, test_is_slow)
     else:
-        initial_results.add(get_result('passes/text.html', ResultType.Timeout, run_time=1), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/audio.html',
-                                       ResultType.Crash, run_time=0.049), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/timeout.html',
-                                       ResultType.Failure, run_time=0.05), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/crash.html', ResultType.Timeout), expected, test_is_slow)
-        initial_results.add(get_result('failures/expected/leak.html', ResultType.Timeout), expected, test_is_slow)
+        initial_results.add(
+            get_result('passes/text.html', ResultType.Timeout, run_time=1),
+            expected, test_is_slow)
+        initial_results.add(
+            get_result(
+                'failures/expected/audio.html',
+                ResultType.Crash,
+                run_time=0.049), expected, test_is_slow)
+        initial_results.add(
+            get_result(
+                'failures/expected/timeout.html',
+                ResultType.Failure,
+                run_time=0.05), expected, test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/crash.html', ResultType.Timeout),
+            expected, test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/leak.html', ResultType.Timeout),
+            expected, test_is_slow)
 
         # we only list keyboard.html here, since normally this is WontFix
-        initial_results.add(get_result('failures/expected/keyboard.html', ResultType.Skip), expected, test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/keyboard.html', ResultType.Skip),
+            expected, test_is_slow)
 
-        initial_results.add(get_result('failures/expected/text.html', ResultType.Failure), expected, test_is_slow)
+        initial_results.add(
+            get_result('failures/expected/text.html', ResultType.Failure),
+            expected, test_is_slow)
 
-        all_retry_results = [run_results(port, extra_skipped_tests),
-                             run_results(port, extra_skipped_tests),
-                             run_results(port, extra_skipped_tests)]
+        all_retry_results = [
+            run_results(port, extra_skipped_tests),
+            run_results(port, extra_skipped_tests),
+            run_results(port, extra_skipped_tests)
+        ]
 
         def add_result_to_all_retries(new_result, expected):
             for run_result in all_retry_results:
                 run_result.add(new_result, expected, test_is_slow)
 
         if flaky:
-            add_result_to_all_retries(get_result('passes/text.html', ResultType.Pass), True)
             add_result_to_all_retries(
-                get_result('failures/expected/audio.html', ResultType.Failure), True)
+                get_result('passes/text.html', ResultType.Pass), True)
             add_result_to_all_retries(
-                get_result('failures/expected/leak.html', ResultType.Failure), True)
+                get_result('failures/expected/audio.html', ResultType.Failure),
+                True)
             add_result_to_all_retries(
-                get_result('failures/expected/timeout.html', ResultType.Failure), True)
+                get_result('failures/expected/leak.html', ResultType.Failure),
+                True)
+            add_result_to_all_retries(
+                get_result('failures/expected/timeout.html',
+                           ResultType.Failure), True)
 
             all_retry_results[0].add(
                 get_result('failures/expected/crash.html', ResultType.Failure),
@@ -139,29 +180,34 @@
             add_result_to_all_retries(
                 get_result('passes/text.html', ResultType.Timeout), False)
             add_result_to_all_retries(
-                get_result('failures/expected/audio.html', ResultType.Failure), False)
+                get_result('failures/expected/audio.html', ResultType.Failure),
+                False)
             add_result_to_all_retries(
-                get_result('failures/expected/crash.html', ResultType.Timeout), False)
+                get_result('failures/expected/crash.html', ResultType.Timeout),
+                False)
             add_result_to_all_retries(
-                get_result('failures/expected/leak.html', ResultType.Timeout), False)
+                get_result('failures/expected/leak.html', ResultType.Timeout),
+                False)
 
             all_retry_results[0].add(
-                get_result('failures/expected/timeout.html', ResultType.Failure),
-                False, test_is_slow)
+                get_result('failures/expected/timeout.html',
+                           ResultType.Failure), False, test_is_slow)
             all_retry_results[1].add(
                 get_result('failures/expected/timeout.html', ResultType.Crash),
                 False, test_is_slow)
             all_retry_results[2].add(
-                get_result('failures/expected/timeout.html', ResultType.Failure),
-                False, test_is_slow)
+                get_result('failures/expected/timeout.html',
+                           ResultType.Failure), False, test_is_slow)
 
     return test_run_results.summarize_results(
-        port, initial_results.expectations, initial_results, all_retry_results,
+        port,
+        initial_results.expectations,
+        initial_results,
+        all_retry_results,
         only_include_failing=only_include_failing)
 
 
 class InterpretTestFailuresTest(unittest.TestCase):
-
     def setUp(self):
         host = MockHost()
         self.port = host.port_factory.get(port_name='test')
@@ -169,105 +215,122 @@
         self._expected_output = DriverOutput(None, None, None, None)
 
     def test_interpret_test_failures(self):
-        test_dict = test_run_results._interpret_test_failures(
-            [test_failures.FailureReftestMismatchDidNotOccur(
+        test_dict = test_run_results._interpret_test_failures([
+            test_failures.FailureReftestMismatchDidNotOccur(
                 self._actual_output, self._expected_output,
-                self.port.abspath_for_test('foo/reftest-expected-mismatch.html'))])
+                self.port.abspath_for_test(
+                    'foo/reftest-expected-mismatch.html'))
+        ])
         self.assertEqual(len(test_dict), 0)
 
-        test_dict = test_run_results._interpret_test_failures(
-            [test_failures.FailureMissingAudio(
-                self._actual_output, self._expected_output)])
+        test_dict = test_run_results._interpret_test_failures([
+            test_failures.FailureMissingAudio(self._actual_output,
+                                              self._expected_output)
+        ])
         self.assertIn('is_missing_audio', test_dict)
 
-        test_dict = test_run_results._interpret_test_failures(
-            [test_failures.FailureMissingResult(
-                self._actual_output, self._expected_output)])
+        test_dict = test_run_results._interpret_test_failures([
+            test_failures.FailureMissingResult(self._actual_output,
+                                               self._expected_output)
+        ])
         self.assertIn('is_missing_text', test_dict)
 
-        test_dict = test_run_results._interpret_test_failures(
-            [test_failures.FailureMissingImage(
-                self._actual_output, self._expected_output)])
+        test_dict = test_run_results._interpret_test_failures([
+            test_failures.FailureMissingImage(self._actual_output,
+                                              self._expected_output)
+        ])
         self.assertIn('is_missing_image', test_dict)
 
-        test_dict = test_run_results._interpret_test_failures(
-            [test_failures.FailureMissingImageHash(
-                self._actual_output, self._expected_output)])
+        test_dict = test_run_results._interpret_test_failures([
+            test_failures.FailureMissingImageHash(self._actual_output,
+                                                  self._expected_output)
+        ])
         self.assertIn('is_missing_image', test_dict)
 
 
 class SummarizedResultsTest(unittest.TestCase):
-
     def setUp(self):
         host = MockHost()
         self.port = host.port_factory.get(port_name='test')
 
     def test_no_chromium_revision(self):
-        summary = summarized_results(self.port, expected=False, passing=False, flaky=False)
+        summary = summarized_results(
+            self.port, expected=False, passing=False, flaky=False)
         self.assertNotIn('revision', summary)
 
     def test_num_failures_by_type(self):
-        summary = summarized_results(self.port, expected=False, passing=False, flaky=False)
-        self.assertEquals(
-            summary['num_failures_by_type'],
-            {
-                'CRASH': 1,
-                'PASS': 1,
-                'SKIP': 0,
-                'TIMEOUT': 3,
-                'FAIL': 2,
-            })
+        summary = summarized_results(
+            self.port, expected=False, passing=False, flaky=False)
+        self.assertEquals(summary['num_failures_by_type'], {
+            'CRASH': 1,
+            'PASS': 1,
+            'SKIP': 0,
+            'TIMEOUT': 3,
+            'FAIL': 2,
+        })
 
-        summary = summarized_results(self.port, expected=True, passing=False, flaky=False)
-        self.assertEquals(
-            summary['num_failures_by_type'],
-            {
-                'CRASH': 1,
-                'PASS': 1,
-                'SKIP': 0,
-                'TIMEOUT': 1,
-                'FAIL': 2,
-            })
+        summary = summarized_results(
+            self.port, expected=True, passing=False, flaky=False)
+        self.assertEquals(summary['num_failures_by_type'], {
+            'CRASH': 1,
+            'PASS': 1,
+            'SKIP': 0,
+            'TIMEOUT': 1,
+            'FAIL': 2,
+        })
 
-        summary = summarized_results(self.port, expected=False, passing=True, flaky=False)
-        self.assertEquals(
-            summary['num_failures_by_type'],
-            {
-                'CRASH': 0,
-                'PASS': 5,
-                'SKIP': 1,
-                'TIMEOUT': 0,
-                'FAIL': 0,
-            })
+        summary = summarized_results(
+            self.port, expected=False, passing=True, flaky=False)
+        self.assertEquals(summary['num_failures_by_type'], {
+            'CRASH': 0,
+            'PASS': 5,
+            'SKIP': 1,
+            'TIMEOUT': 0,
+            'FAIL': 0,
+        })
 
     def test_chromium_revision(self):
         self.port._options.builder_name = 'dummy builder'
-        summary = summarized_results(self.port, expected=False, passing=False, flaky=False)
-        self.assertNotEquals(summary['chromium_revision'],
-                             '')
+        summary = summarized_results(
+            self.port, expected=False, passing=False, flaky=False)
+        self.assertNotEquals(summary['chromium_revision'], '')
 
     def test_bug_entry(self):
         self.port._options.builder_name = 'dummy builder'
-        summary = summarized_results(self.port, expected=False, passing=True, flaky=False)
-        self.assertEquals(summary['tests']['passes']['skipped']['skip.html']['bugs'], ['crbug.com/123'])
+        summary = summarized_results(
+            self.port, expected=False, passing=True, flaky=False)
+        self.assertEquals(
+            summary['tests']['passes']['skipped']['skip.html']['bugs'],
+            ['crbug.com/123'])
 
     def test_extra_skipped_tests(self):
         self.port._options.builder_name = 'dummy builder'
-        summary = summarized_results(self.port, expected=False, passing=True, flaky=False, extra_skipped_tests=['passes/text.html'])
-        self.assertEquals(summary['tests']['passes']['text.html']['expected'], 'SKIP')
+        summary = summarized_results(
+            self.port,
+            expected=False,
+            passing=True,
+            flaky=False,
+            extra_skipped_tests=['passes/text.html'])
+        self.assertEquals(summary['tests']['passes']['text.html']['expected'],
+                          'SKIP')
 
     def test_summarized_results_wontfix(self):
         self.port._options.builder_name = 'dummy builder'
-        summary = summarized_results(self.port, expected=False, passing=False, flaky=False)
-        self.assertEquals(summary['tests']['failures']['expected']['keyboard.html']['expected'], 'SKIP CRASH')
-        self.assertTrue(summary['tests']['passes']['text.html']['is_unexpected'])
+        summary = summarized_results(
+            self.port, expected=False, passing=False, flaky=False)
+        self.assertEquals(
+            summary['tests']['failures']['expected']['keyboard.html']
+            ['expected'], 'SKIP CRASH')
+        self.assertTrue(
+            summary['tests']['passes']['text.html']['is_unexpected'])
         self.assertEqual(summary['num_passes'], 1)
         self.assertEqual(summary['num_regressions'], 6)
         self.assertEqual(summary['num_flaky'], 0)
 
     def test_summarized_results_expected_pass(self):
         self.port._options.builder_name = 'dummy builder'
-        summary = summarized_results(self.port, expected=False, passing=True, flaky=False)
+        summary = summarized_results(
+            self.port, expected=False, passing=True, flaky=False)
         self.assertTrue(summary['tests']['passes']['text.html'])
         self.assertEqual(summary['num_passes'], 5)
         self.assertEqual(summary['num_regressions'], 0)
@@ -275,10 +338,16 @@
 
     def test_summarized_results_expected_only_include_failing(self):
         self.port._options.builder_name = 'dummy builder'
-        summary = summarized_results(self.port, expected=True, passing=False, flaky=False, only_include_failing=True)
+        summary = summarized_results(
+            self.port,
+            expected=True,
+            passing=False,
+            flaky=False,
+            only_include_failing=True)
         self.assertNotIn('passes', summary['tests'])
         self.assertTrue(summary['tests']['failures']['expected']['audio.html'])
-        self.assertTrue(summary['tests']['failures']['expected']['timeout.html'])
+        self.assertTrue(
+            summary['tests']['failures']['expected']['timeout.html'])
         self.assertTrue(summary['tests']['failures']['expected']['crash.html'])
         self.assertTrue(summary['tests']['failures']['expected']['leak.html'])
         self.assertEqual(summary['num_passes'], 1)
@@ -287,69 +356,122 @@
 
     def test_summarized_results_skipped(self):
         self.port._options.builder_name = 'dummy builder'
-        summary = summarized_results(self.port, expected=False, passing=True, flaky=False)
-        self.assertEquals(summary['tests']['passes']['skipped']['skip.html']['expected'], 'SKIP')
+        summary = summarized_results(
+            self.port, expected=False, passing=True, flaky=False)
+        self.assertEquals(
+            summary['tests']['passes']['skipped']['skip.html']['expected'],
+            'SKIP')
 
     def test_summarized_results_only_include_failing(self):
         self.port._options.builder_name = 'dummy builder'
-        summary = summarized_results(self.port, expected=False, passing=True, flaky=False, only_include_failing=True)
+        summary = summarized_results(
+            self.port,
+            expected=False,
+            passing=True,
+            flaky=False,
+            only_include_failing=True)
         self.assertTrue('passes' not in summary['tests'])
         self.assertEqual(summary['num_passes'], 5)
         self.assertEqual(summary['num_regressions'], 0)
         self.assertEqual(summary['num_flaky'], 0)
 
     def test_rounded_run_times(self):
-        summary = summarized_results(self.port, expected=False, passing=False, flaky=False)
+        summary = summarized_results(
+            self.port, expected=False, passing=False, flaky=False)
         self.assertEquals(summary['tests']['passes']['text.html']['time'], 1)
-        self.assertTrue('time' not in summary['tests']['failures']['expected']['audio.html'])
-        self.assertEquals(summary['tests']['failures']['expected']['timeout.html']['time'], 0.1)
-        self.assertTrue('time' not in summary['tests']['failures']['expected']['crash.html'])
-        self.assertTrue('time' not in summary['tests']['failures']['expected']['leak.html'])
+        self.assertTrue('time' not in summary['tests']['failures']['expected']
+                        ['audio.html'])
+        self.assertEquals(
+            summary['tests']['failures']['expected']['timeout.html']['time'],
+            0.1)
+        self.assertTrue('time' not in summary['tests']['failures']['expected']
+                        ['crash.html'])
+        self.assertTrue('time' not in summary['tests']['failures']['expected']
+                        ['leak.html'])
 
     def test_timeout_then_unexpected_pass(self):
         test_name = 'failures/expected/text.html'
         expectations = test_expectations.TestExpectations(self.port)
         initial_results = test_run_results.TestRunResults(expectations, 1)
-        initial_results.add(get_result(test_name, ResultType.Timeout, run_time=1), False, False)
-        all_retry_results = [test_run_results.TestRunResults(expectations, 1),
-                             test_run_results.TestRunResults(expectations, 1),
-                             test_run_results.TestRunResults(expectations, 1)]
-        all_retry_results[0].add(get_result(test_name, ResultType.Failure, run_time=0.1), False, False)
-        all_retry_results[1].add(get_result(test_name, ResultType.Pass, run_time=0.1), False, False)
-        all_retry_results[2].add(get_result(test_name, ResultType.Pass, run_time=0.1), False, False)
+        initial_results.add(
+            get_result(test_name, ResultType.Timeout, run_time=1), False,
+            False)
+        all_retry_results = [
+            test_run_results.TestRunResults(expectations, 1),
+            test_run_results.TestRunResults(expectations, 1),
+            test_run_results.TestRunResults(expectations, 1)
+        ]
+        all_retry_results[0].add(
+            get_result(test_name, ResultType.Failure, run_time=0.1), False,
+            False)
+        all_retry_results[1].add(
+            get_result(test_name, ResultType.Pass, run_time=0.1), False, False)
+        all_retry_results[2].add(
+            get_result(test_name, ResultType.Pass, run_time=0.1), False, False)
         summary = test_run_results.summarize_results(
             self.port, expectations, initial_results, all_retry_results)
-        self.assertIn('is_unexpected', summary['tests']['failures']['expected']['text.html'])
-        self.assertEquals(summary['tests']['failures']['expected']['text.html']['expected'], 'FAIL')
-        self.assertEquals(summary['tests']['failures']['expected']['text.html']['actual'], 'TIMEOUT FAIL PASS PASS')
+        self.assertIn('is_unexpected',
+                      summary['tests']['failures']['expected']['text.html'])
+        self.assertEquals(
+            summary['tests']['failures']['expected']['text.html']['expected'],
+            'FAIL')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['text.html']['actual'],
+            'TIMEOUT FAIL PASS PASS')
         self.assertEquals(summary['num_passes'], 1)
         self.assertEquals(summary['num_regressions'], 0)
         self.assertEquals(summary['num_flaky'], 0)
 
     def test_summarized_results_flaky(self):
-        summary = summarized_results(self.port, expected=False, passing=False, flaky=True)
+        summary = summarized_results(
+            self.port, expected=False, passing=False, flaky=True)
 
-        self.assertEquals(summary['tests']['failures']['expected']['crash.html']['expected'], 'CRASH')
-        self.assertEquals(summary['tests']['failures']['expected']['crash.html']['actual'], 'TIMEOUT FAIL CRASH FAIL')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['crash.html']['expected'],
+            'CRASH')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['crash.html']['actual'],
+            'TIMEOUT FAIL CRASH FAIL')
 
-        self.assertTrue('is_unexpected' not in summary['tests']['passes']['text.html'])
-        self.assertEquals(summary['tests']['passes']['text.html']['expected'], 'PASS')
-        self.assertEquals(summary['tests']['passes']['text.html']['actual'], 'TIMEOUT PASS PASS PASS')
+        self.assertTrue(
+            'is_unexpected' not in summary['tests']['passes']['text.html'])
+        self.assertEquals(summary['tests']['passes']['text.html']['expected'],
+                          'PASS')
+        self.assertEquals(summary['tests']['passes']['text.html']['actual'],
+                          'TIMEOUT PASS PASS PASS')
 
-        self.assertTrue(summary['tests']['failures']['expected']['timeout.html']['is_unexpected'])
-        self.assertEquals(summary['tests']['failures']['expected']['timeout.html']['expected'], 'TIMEOUT')
-        self.assertEquals(summary['tests']['failures']['expected']['timeout.html']['actual'], 'FAIL FAIL FAIL FAIL')
+        self.assertTrue(summary['tests']['failures']['expected']
+                        ['timeout.html']['is_unexpected'])
+        self.assertEquals(
+            summary['tests']['failures']['expected']['timeout.html']
+            ['expected'], 'TIMEOUT')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['timeout.html']['actual'],
+            'FAIL FAIL FAIL FAIL')
 
-        self.assertTrue('is_unexpected' not in summary['tests']['failures']['expected']['leak.html'])
-        self.assertEquals(summary['tests']['failures']['expected']['leak.html']['expected'], 'FAIL')
-        self.assertEquals(summary['tests']['failures']['expected']['leak.html']['actual'], 'TIMEOUT FAIL FAIL FAIL')
+        self.assertTrue('is_unexpected' not in summary['tests']['failures']
+                        ['expected']['leak.html'])
+        self.assertEquals(
+            summary['tests']['failures']['expected']['leak.html']['expected'],
+            'FAIL')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['leak.html']['actual'],
+            'TIMEOUT FAIL FAIL FAIL')
 
-        self.assertTrue('is_unexpected' not in summary['tests']['failures']['expected']['audio.html'])
-        self.assertEquals(summary['tests']['failures']['expected']['audio.html']['expected'], 'FAIL')
-        self.assertEquals(summary['tests']['failures']['expected']['audio.html']['actual'], 'CRASH FAIL FAIL FAIL')
+        self.assertTrue('is_unexpected' not in summary['tests']['failures']
+                        ['expected']['audio.html'])
+        self.assertEquals(
+            summary['tests']['failures']['expected']['audio.html']['expected'],
+            'FAIL')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['audio.html']['actual'],
+            'CRASH FAIL FAIL FAIL')
 
-        self.assertEquals(summary['tests']['failures']['expected']['text.html']['expected'], 'FAIL')
-        self.assertTrue('is_unexpected' not in summary['tests']['failures']['expected']['text.html'])
+        self.assertEquals(
+            summary['tests']['failures']['expected']['text.html']['expected'],
+            'FAIL')
+        self.assertTrue('is_unexpected' not in summary['tests']['failures']
+                        ['expected']['text.html'])
 
         self.assertEquals(summary['num_flaky'], 6)
         self.assertEquals(summary['num_passes'], 1)  # keyboard.html
@@ -359,18 +481,27 @@
         test_name = 'passes/text.html'
         expectations = test_expectations.TestExpectations(self.port)
         initial_results = test_run_results.TestRunResults(expectations, 1)
-        initial_results.add(get_result(test_name, ResultType.Crash), False, False)
-        all_retry_results = [test_run_results.TestRunResults(expectations, 1),
-                             test_run_results.TestRunResults(expectations, 1),
-                             test_run_results.TestRunResults(expectations, 1)]
-        all_retry_results[0].add(get_result(test_name, ResultType.Timeout), False, False)
-        all_retry_results[1].add(get_result(test_name, ResultType.Pass), True, False)
-        all_retry_results[2].add(get_result(test_name, ResultType.Pass), True, False)
+        initial_results.add(
+            get_result(test_name, ResultType.Crash), False, False)
+        all_retry_results = [
+            test_run_results.TestRunResults(expectations, 1),
+            test_run_results.TestRunResults(expectations, 1),
+            test_run_results.TestRunResults(expectations, 1)
+        ]
+        all_retry_results[0].add(
+            get_result(test_name, ResultType.Timeout), False, False)
+        all_retry_results[1].add(
+            get_result(test_name, ResultType.Pass), True, False)
+        all_retry_results[2].add(
+            get_result(test_name, ResultType.Pass), True, False)
         summary = test_run_results.summarize_results(
             self.port, expectations, initial_results, all_retry_results)
-        self.assertTrue('is_unexpected' not in summary['tests']['passes']['text.html'])
-        self.assertEquals(summary['tests']['passes']['text.html']['expected'], 'PASS')
-        self.assertEquals(summary['tests']['passes']['text.html']['actual'], 'CRASH TIMEOUT PASS PASS')
+        self.assertTrue(
+            'is_unexpected' not in summary['tests']['passes']['text.html'])
+        self.assertEquals(summary['tests']['passes']['text.html']['expected'],
+                          'PASS')
+        self.assertEquals(summary['tests']['passes']['text.html']['actual'],
+                          'CRASH TIMEOUT PASS PASS')
         self.assertEquals(summary['num_flaky'], 1)
         self.assertEquals(summary['num_passes'], 0)
         self.assertEquals(summary['num_regressions'], 0)
@@ -379,47 +510,78 @@
         test_name = 'passes/text.html'
         expectations = test_expectations.TestExpectations(self.port)
         initial_results = test_run_results.TestRunResults(expectations, 3)
-        initial_results.add(get_result(test_name, ResultType.Crash), False, False)
-        initial_results.add(get_result(test_name, ResultType.Failure), False, False)
-        initial_results.add(get_result(test_name, ResultType.Timeout), False, False)
+        initial_results.add(
+            get_result(test_name, ResultType.Crash), False, False)
+        initial_results.add(
+            get_result(test_name, ResultType.Failure), False, False)
+        initial_results.add(
+            get_result(test_name, ResultType.Timeout), False, False)
         all_retry_results = [test_run_results.TestRunResults(expectations, 2)]
-        all_retry_results[0].add(get_result(test_name, ResultType.Failure), False, False)
-        all_retry_results[0].add(get_result(test_name, ResultType.Failure), False, False)
+        all_retry_results[0].add(
+            get_result(test_name, ResultType.Failure), False, False)
+        all_retry_results[0].add(
+            get_result(test_name, ResultType.Failure), False, False)
 
         summary = test_run_results.summarize_results(
             self.port, expectations, initial_results, all_retry_results)
-        self.assertEquals(summary['tests']['passes']['text.html']['expected'], 'PASS')
-        self.assertEquals(summary['tests']['passes']['text.html']['actual'], 'CRASH FAIL TIMEOUT FAIL FAIL')
+        self.assertEquals(summary['tests']['passes']['text.html']['expected'],
+                          'PASS')
+        self.assertEquals(summary['tests']['passes']['text.html']['actual'],
+                          'CRASH FAIL TIMEOUT FAIL FAIL')
         self.assertEquals(summary['num_flaky'], 0)
         self.assertEquals(summary['num_passes'], 0)
         self.assertEquals(summary['num_regressions'], 1)
 
     def test_summarized_results_regression(self):
-        summary = summarized_results(self.port, expected=False, passing=False, flaky=False)
+        summary = summarized_results(
+            self.port, expected=False, passing=False, flaky=False)
 
-        self.assertTrue(summary['tests']['failures']['expected']['timeout.html']['is_unexpected'])
-        self.assertEquals(summary['tests']['failures']['expected']['timeout.html']['expected'], 'TIMEOUT')
-        self.assertEquals(summary['tests']['failures']['expected']['timeout.html']['actual'], 'FAIL FAIL CRASH FAIL')
+        self.assertTrue(summary['tests']['failures']['expected']
+                        ['timeout.html']['is_unexpected'])
+        self.assertEquals(
+            summary['tests']['failures']['expected']['timeout.html']
+            ['expected'], 'TIMEOUT')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['timeout.html']['actual'],
+            'FAIL FAIL CRASH FAIL')
 
-        self.assertTrue(summary['tests']['passes']['text.html']['is_unexpected'])
-        self.assertEquals(summary['tests']['passes']['text.html']['expected'], 'PASS')
-        self.assertEquals(summary['tests']['passes']['text.html']['actual'], 'TIMEOUT TIMEOUT TIMEOUT TIMEOUT')
+        self.assertTrue(
+            summary['tests']['passes']['text.html']['is_unexpected'])
+        self.assertEquals(summary['tests']['passes']['text.html']['expected'],
+                          'PASS')
+        self.assertEquals(summary['tests']['passes']['text.html']['actual'],
+                          'TIMEOUT TIMEOUT TIMEOUT TIMEOUT')
 
-        self.assertTrue(summary['tests']['failures']['expected']['crash.html']['is_unexpected'])
-        self.assertEquals(summary['tests']['failures']['expected']['crash.html']['expected'], 'CRASH')
-        self.assertEquals(summary['tests']['failures']['expected']['crash.html']['actual'], 'TIMEOUT TIMEOUT TIMEOUT TIMEOUT')
+        self.assertTrue(summary['tests']['failures']['expected']['crash.html']
+                        ['is_unexpected'])
+        self.assertEquals(
+            summary['tests']['failures']['expected']['crash.html']['expected'],
+            'CRASH')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['crash.html']['actual'],
+            'TIMEOUT TIMEOUT TIMEOUT TIMEOUT')
 
-        self.assertTrue(summary['tests']['failures']['expected']['leak.html']['is_unexpected'])
-        self.assertEquals(summary['tests']['failures']['expected']['leak.html']['expected'], 'FAIL')
-        self.assertEquals(summary['tests']['failures']['expected']['leak.html']['actual'], 'TIMEOUT TIMEOUT TIMEOUT TIMEOUT')
+        self.assertTrue(summary['tests']['failures']['expected']['leak.html']
+                        ['is_unexpected'])
+        self.assertEquals(
+            summary['tests']['failures']['expected']['leak.html']['expected'],
+            'FAIL')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['leak.html']['actual'],
+            'TIMEOUT TIMEOUT TIMEOUT TIMEOUT')
 
-        self.assertEquals(summary['tests']['failures']['expected']['audio.html']['expected'], 'FAIL')
-        self.assertEquals(summary['tests']['failures']['expected']['audio.html']['actual'], 'CRASH FAIL FAIL FAIL')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['audio.html']['expected'],
+            'FAIL')
+        self.assertEquals(
+            summary['tests']['failures']['expected']['audio.html']['actual'],
+            'CRASH FAIL FAIL FAIL')
 
         self.assertEquals(summary['num_regressions'], 6)
         self.assertEquals(summary['num_passes'], 1)  # keyboard.html
         self.assertEquals(summary['num_flaky'], 0)
 
     def test_results_contains_path_delimiter(self):
-        summary = summarized_results(self.port, expected=False, passing=False, flaky=False)
+        summary = summarized_results(
+            self.port, expected=False, passing=False, flaky=False)
         self.assertEqual(summary['path_delimiter'], '/')
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/testharness_results.py b/third_party/blink/tools/blinkpy/web_tests/models/testharness_results.py
index a43f2fb2..a4386da 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/testharness_results.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/testharness_results.py
@@ -1,7 +1,6 @@
 # Copyright 2014 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.
-
 """Utility module for checking testharness test output."""
 
 _TESTHARNESSREPORT_HEADER = 'This is a testharness.js-based test.'
@@ -10,9 +9,9 @@
 
 def is_all_pass_testharness_result(content_text):
     """Returns whether |content_text| is a testharness result that only contains PASS lines."""
-    return (is_testharness_output(content_text) and
-            is_testharness_output_passing(content_text) and
-            not has_other_useful_output(content_text))
+    return (is_testharness_output(content_text)
+            and is_testharness_output_passing(content_text)
+            and not has_other_useful_output(content_text))
 
 
 def is_testharness_output(content_text):
@@ -50,10 +49,9 @@
         if line.startswith('PASS'):
             at_least_one_pass = True
             continue
-        if (line.startswith('FAIL') or
-                line.startswith('TIMEOUT') or
-                line.startswith('NOTRUN') or
-                line.startswith('Harness Error.')):
+        if (line.startswith('FAIL') or line.startswith('TIMEOUT')
+                or line.startswith('NOTRUN')
+                or line.startswith('Harness Error.')):
             return False
 
     return at_least_one_pass
@@ -65,8 +63,9 @@
     Namely, console errors/warnings & alerts/confirms/prompts.
     """
 
-    prefixes = ('CONSOLE ERROR:', 'CONSOLE WARNING:',
-                'ALERT:', 'CONFIRM:', 'PROMPT:')
+    prefixes = ('CONSOLE ERROR:', 'CONSOLE WARNING:', 'ALERT:', 'CONFIRM:',
+                'PROMPT:')
+
     def is_useful(line):
         return any(line.startswith(prefix) for prefix in prefixes)
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/testharness_results_unittest.py b/third_party/blink/tools/blinkpy/web_tests/models/testharness_results_unittest.py
index 178ae9823..b76d6ad 100644
--- a/third_party/blink/tools/blinkpy/web_tests/models/testharness_results_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/models/testharness_results_unittest.py
@@ -8,191 +8,228 @@
 
 
 class TestHarnessResultCheckerTest(unittest.TestCase):
-
     def test_is_all_pass_testharness_result_positive_cases(self):
-        self.assertTrue(testharness_results.is_all_pass_testharness_result(
-            'This is a testharness.js-based test.\n'
-            ' PASS: foo bar \n'
-            ' Harness: the test ran to completion.'))
-        self.assertTrue(testharness_results.is_all_pass_testharness_result(
-            'This is a testharness.js-based test.\n'
-            'PASS \'grid\' with: grid-template-areas: "a b"\n'
-            '"c d";\n'
-            'Harness: the test ran to completion.\n'))
+        self.assertTrue(
+            testharness_results.is_all_pass_testharness_result(
+                'This is a testharness.js-based test.\n'
+                ' PASS: foo bar \n'
+                ' Harness: the test ran to completion.'))
+        self.assertTrue(
+            testharness_results.is_all_pass_testharness_result(
+                'This is a testharness.js-based test.\n'
+                'PASS \'grid\' with: grid-template-areas: "a b"\n'
+                '"c d";\n'
+                'Harness: the test ran to completion.\n'))
 
     def test_is_all_pass_testharness_result_negative_cases(self):
-        self.assertFalse(testharness_results.is_all_pass_testharness_result(
-            'This is a testharness.js-based test.\n'
-            'CONSOLE WARNING: This is a warning.\n'
-            'Test ran to completion.'))
-        self.assertFalse(testharness_results.is_all_pass_testharness_result(
-            'This is a testharness.js-based test.\n'
-            ' PASS: foo bar \n'
-            'FAIL  \n'
-            ' Harness: the test ran to completion.'))
-        self.assertFalse(testharness_results.is_all_pass_testharness_result(
-            'This is a testharness.js-based test.\n'
-            'Harness Error. harness_status.status = 1\n'
-            'PASS foo bar\n'
-            'Harness: the test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_all_pass_testharness_result(
+                'This is a testharness.js-based test.\n'
+                'CONSOLE WARNING: This is a warning.\n'
+                'Test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_all_pass_testharness_result(
+                'This is a testharness.js-based test.\n'
+                ' PASS: foo bar \n'
+                'FAIL  \n'
+                ' Harness: the test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_all_pass_testharness_result(
+                'This is a testharness.js-based test.\n'
+                'Harness Error. harness_status.status = 1\n'
+                'PASS foo bar\n'
+                'Harness: the test ran to completion.'))
 
     def test_is_testharness_output_positive_cases(self):
-        self.assertTrue(testharness_results.is_testharness_output(
-            'This is a testharness.js-based test.\n'
-            'Harness: the test ran to completion.'))
-        self.assertTrue(testharness_results.is_testharness_output(
-            '\n'
-            ' \r This is a testharness.js-based test. \n'
-            ' \r  \n'
-            ' \rHarness: the test ran to completion.   \n'
-            '\n'))
-        self.assertTrue(testharness_results.is_testharness_output(
-            'This is a testharness.js-based test.\n'
-            'Foo bar \n'
-            ' Harness: the test ran to completion.'))
-        self.assertTrue(testharness_results.is_testharness_output(
-            'This is a testharness.js-based test.\n'
-            'FAIL: bah \n'
-            ' Harness: the test ran to completion.\n'
-            '\n'
-            '\n'))
+        self.assertTrue(
+            testharness_results.is_testharness_output(
+                'This is a testharness.js-based test.\n'
+                'Harness: the test ran to completion.'))
+        self.assertTrue(
+            testharness_results.is_testharness_output(
+                '\n'
+                ' \r This is a testharness.js-based test. \n'
+                ' \r  \n'
+                ' \rHarness: the test ran to completion.   \n'
+                '\n'))
+        self.assertTrue(
+            testharness_results.is_testharness_output(
+                'This is a testharness.js-based test.\n'
+                'Foo bar \n'
+                ' Harness: the test ran to completion.'))
+        self.assertTrue(
+            testharness_results.is_testharness_output(
+                'This is a testharness.js-based test.\n'
+                'FAIL: bah \n'
+                ' Harness: the test ran to completion.\n'
+                '\n'
+                '\n'))
 
     def test_is_testharness_output_negative_cases(self):
         self.assertFalse(testharness_results.is_testharness_output('foo'))
         self.assertFalse(testharness_results.is_testharness_output(''))
         self.assertFalse(testharness_results.is_testharness_output('   '))
-        self.assertFalse(testharness_results.is_testharness_output(
-            'This is a testharness.js-based test.  Harness: the test ran to completion.'))
-        self.assertFalse(testharness_results.is_testharness_output(
-            '   This    \n'
-            'is a testharness.js-based test.\n'
-            'Harness: the test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_testharness_output(
+                'This is a testharness.js-based test.  Harness: the test ran to completion.'
+            ))
+        self.assertFalse(
+            testharness_results.is_testharness_output(
+                '   This    \n'
+                'is a testharness.js-based test.\n'
+                'Harness: the test ran to completion.'))
 
     def test_is_testharness_output_passing_empty_content(self):
-        self.assertFalse(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            '   Harness: the test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                '   Harness: the test ran to completion.'))
 
     def test_is_testharness_output_passing_no_pass(self):
         # If there are no PASS lines, then the test is not considered to pass.
-        self.assertFalse(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            '  \n'
-            ' Harness: the test ran to completion.'))
-        self.assertFalse(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            ' Foo bar \n'
-            ' Harness: the test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                '  \n'
+                ' Harness: the test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                ' Foo bar \n'
+                ' Harness: the test ran to completion.'))
 
     def test_is_testharness_output_passing_with_pass_and_random_text(self):
-        self.assertTrue(testharness_results.is_testharness_output_passing(
-            'RANDOM TEXT.\n'
-            'This is a testharness.js-based test.\n'
-            'PASS: things are fine.\n'
-            ' Harness: the test ran to completion.\n'
-            '\n'))
+        self.assertTrue(
+            testharness_results.is_testharness_output_passing(
+                'RANDOM TEXT.\n'
+                'This is a testharness.js-based test.\n'
+                'PASS: things are fine.\n'
+                ' Harness: the test ran to completion.\n'
+                '\n'))
 
     def test_is_testharness_output_passing_basic_examples(self):
-        self.assertTrue(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            ' PASS: foo bar \n'
-            ' Harness: the test ran to completion.'))
-        self.assertTrue(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            ' PASS: foo bar FAIL  \n'
-            ' Harness: the test ran to completion.'))
-        self.assertFalse(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            ' PASS: foo bar \n'
-            'FAIL  \n'
-            ' Harness: the test ran to completion.'))
-        self.assertFalse(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            ' FAIL: bah \n'
-            ' Harness: the test ran to completion.'))
+        self.assertTrue(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                ' PASS: foo bar \n'
+                ' Harness: the test ran to completion.'))
+        self.assertTrue(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                ' PASS: foo bar FAIL  \n'
+                ' Harness: the test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                ' PASS: foo bar \n'
+                'FAIL  \n'
+                ' Harness: the test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                ' FAIL: bah \n'
+                ' Harness: the test ran to completion.'))
 
     def test_is_testharness_output_passing_with_console_messages(self):
-        self.assertFalse(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            ' CONSOLE ERROR: BLAH  \n'
-            ' Harness: the test ran to completion.'))
-        self.assertTrue(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            ' CONSOLE WARNING: BLAH  \n'
-            'PASS: some passing method\n'
-            ' Harness: the test ran to completion.'))
-        self.assertTrue(testharness_results.is_testharness_output_passing(
-            'CONSOLE LOG: error.\n'
-            'This is a testharness.js-based test.\n'
-            'PASS: things are fine.\n'
-            'Harness: the test ran to completion.\n'
-            '\n'))
-        self.assertTrue(testharness_results.is_testharness_output_passing(
-            'CONSOLE ERROR: error.\n'
-            'This is a testharness.js-based test.\n'
-            'PASS: things are fine.\n'
-            'Harness: the test ran to completion.\n'
-            '\n'))
-        self.assertTrue(testharness_results.is_testharness_output_passing(
-            'CONSOLE WARNING: error.\n'
-            'This is a testharness.js-based test.\n'
-            'PASS: things are fine.\n'
-            'Harness: the test ran to completion.\n'
-            '\n'))
+        self.assertFalse(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                ' CONSOLE ERROR: BLAH  \n'
+                ' Harness: the test ran to completion.'))
+        self.assertTrue(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                ' CONSOLE WARNING: BLAH  \n'
+                'PASS: some passing method\n'
+                ' Harness: the test ran to completion.'))
+        self.assertTrue(
+            testharness_results.is_testharness_output_passing(
+                'CONSOLE LOG: error.\n'
+                'This is a testharness.js-based test.\n'
+                'PASS: things are fine.\n'
+                'Harness: the test ran to completion.\n'
+                '\n'))
+        self.assertTrue(
+            testharness_results.is_testharness_output_passing(
+                'CONSOLE ERROR: error.\n'
+                'This is a testharness.js-based test.\n'
+                'PASS: things are fine.\n'
+                'Harness: the test ran to completion.\n'
+                '\n'))
+        self.assertTrue(
+            testharness_results.is_testharness_output_passing(
+                'CONSOLE WARNING: error.\n'
+                'This is a testharness.js-based test.\n'
+                'PASS: things are fine.\n'
+                'Harness: the test ran to completion.\n'
+                '\n'))
 
     def test_is_testharness_output_passing_with_timeout_or_notrun(self):
-        self.assertFalse(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            ' TIMEOUT: bah \n'
-            ' Harness: the test ran to completion.'))
-        self.assertFalse(testharness_results.is_testharness_output_passing(
-            'This is a testharness.js-based test.\n'
-            ' NOTRUN: bah \n'
-            ' Harness: the test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                ' TIMEOUT: bah \n'
+                ' Harness: the test ran to completion.'))
+        self.assertFalse(
+            testharness_results.is_testharness_output_passing(
+                'This is a testharness.js-based test.\n'
+                ' NOTRUN: bah \n'
+                ' Harness: the test ran to completion.'))
 
     def test_has_other_useful_output_positive_cases(self):
-        self.assertTrue(testharness_results.has_other_useful_output(
-            'This is a testharness.js-based test.\n'
-            'CONSOLE ERROR: This is an error.\n'
-            'Test ran to completion.'))
-        self.assertTrue(testharness_results.has_other_useful_output(
-            'This is a testharness.js-based test.\n'
-            'CONSOLE WARNING: This is a warning.\n'
-            'Test ran to completion.'))
-        self.assertTrue(testharness_results.has_other_useful_output(
-            'CONSOLE ERROR: This is an error.\n'
-            'Test ran to completion.'))
-        self.assertTrue(testharness_results.has_other_useful_output(
-            'CONSOLE WARNING: This is a warning.\n'
-            'Test ran to completion.'))
-        self.assertTrue(testharness_results.has_other_useful_output(
-            'This is a testharness.js-based test.\n'
-            'CONSOLE ERROR: This is an error.'))
-        self.assertTrue(testharness_results.has_other_useful_output(
-            'CONSOLE ERROR: This is an error.'))
-        self.assertTrue(testharness_results.has_other_useful_output(
-            'CONSOLE WARNING: This is a warning.'))
-        self.assertTrue(testharness_results.has_other_useful_output(
-            'ALERT: alert!'))
-        self.assertTrue(testharness_results.has_other_useful_output(
-            'CONFIRM: confirm?'))
-        self.assertTrue(testharness_results.has_other_useful_output(
-            'PROMPT: prompt.'))
+        self.assertTrue(
+            testharness_results.has_other_useful_output(
+                'This is a testharness.js-based test.\n'
+                'CONSOLE ERROR: This is an error.\n'
+                'Test ran to completion.'))
+        self.assertTrue(
+            testharness_results.has_other_useful_output(
+                'This is a testharness.js-based test.\n'
+                'CONSOLE WARNING: This is a warning.\n'
+                'Test ran to completion.'))
+        self.assertTrue(
+            testharness_results.has_other_useful_output(
+                'CONSOLE ERROR: This is an error.\n'
+                'Test ran to completion.'))
+        self.assertTrue(
+            testharness_results.has_other_useful_output(
+                'CONSOLE WARNING: This is a warning.\n'
+                'Test ran to completion.'))
+        self.assertTrue(
+            testharness_results.has_other_useful_output(
+                'This is a testharness.js-based test.\n'
+                'CONSOLE ERROR: This is an error.'))
+        self.assertTrue(
+            testharness_results.has_other_useful_output(
+                'CONSOLE ERROR: This is an error.'))
+        self.assertTrue(
+            testharness_results.has_other_useful_output(
+                'CONSOLE WARNING: This is a warning.'))
+        self.assertTrue(
+            testharness_results.has_other_useful_output('ALERT: alert!'))
+        self.assertTrue(
+            testharness_results.has_other_useful_output('CONFIRM: confirm?'))
+        self.assertTrue(
+            testharness_results.has_other_useful_output('PROMPT: prompt.'))
 
     def test_has_other_useful_output_negative_cases(self):
-        self.assertFalse(testharness_results.has_other_useful_output(
-            'This is a testharness.js-based test.\n'
-            'CONSOLE MESSAGE: This is not error.'))
-        self.assertFalse(testharness_results.has_other_useful_output(
-            'This is a testharness.js-based test.\n'
-            'No errors here.'))
-        self.assertFalse(testharness_results.has_other_useful_output(
-            'This is not a CONSOLE ERROR, sorry.'))
-        self.assertFalse(testharness_results.has_other_useful_output(
-            'This is not a CONSOLE WARNING, sorry.'))
-        self.assertFalse(testharness_results.has_other_useful_output(
-            'Not an ALERT'))
-        self.assertFalse(testharness_results.has_other_useful_output(
-            'Not a CONFRIM'))
-        self.assertFalse(testharness_results.has_other_useful_output(
-            'Not a PROMPT'))
+        self.assertFalse(
+            testharness_results.has_other_useful_output(
+                'This is a testharness.js-based test.\n'
+                'CONSOLE MESSAGE: This is not error.'))
+        self.assertFalse(
+            testharness_results.has_other_useful_output(
+                'This is a testharness.js-based test.\n'
+                'No errors here.'))
+        self.assertFalse(
+            testharness_results.has_other_useful_output(
+                'This is not a CONSOLE ERROR, sorry.'))
+        self.assertFalse(
+            testharness_results.has_other_useful_output(
+                'This is not a CONSOLE WARNING, sorry.'))
+        self.assertFalse(
+            testharness_results.has_other_useful_output('Not an ALERT'))
+        self.assertFalse(
+            testharness_results.has_other_useful_output('Not a CONFRIM'))
+        self.assertFalse(
+            testharness_results.has_other_useful_output('Not a PROMPT'))
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/android.py b/third_party/blink/tools/blinkpy/web_tests/port/android.py
index 4c5865a4..a5a6f6b 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/android.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/android.py
@@ -49,7 +49,6 @@
 from blinkpy.web_tests.port import factory
 from blinkpy.web_tests.port import server_process
 
-
 # These are stub globals used for android-specific modules. We
 # don't import them unless we actually need a real Android port object,
 # in order to not have the dependency on all of the android and catapult
@@ -65,7 +64,11 @@
 # pylint: enable=invalid-name
 
 _friendly_browser_names = {
-    'weblayershell': 'weblayer', 'systemwebviewshell': 'webview', 'chromepublic': 'chromium'}
+    'weblayershell': 'weblayer',
+    'systemwebviewshell': 'webview',
+    'chromepublic': 'chromium'
+}
+
 
 def _import_android_packages_if_necessary():
     # pylint: disable=invalid-name
@@ -82,7 +85,8 @@
         chromium_src_root = get_chromium_src_dir()
         devil_root = os.path.join(chromium_src_root, 'third_party', 'catapult',
                                   'devil')
-        build_android_root = os.path.join(chromium_src_root, 'build', 'android')
+        build_android_root = os.path.join(chromium_src_root, 'build',
+                                          'android')
         sys.path.insert(0, devil_root)
         sys.path.insert(0, build_android_root)
         from importlib import import_module
@@ -146,7 +150,6 @@
 
 
 class DriverDetails(object):
-
     def __init__(self, apk):
         self._apk = apk
 
@@ -156,9 +159,9 @@
 
 # Information required when running web tests using content_shell as the test runner.
 class ContentShellDriverDetails(DriverDetails):
-
     def __init__(self):
-        super(ContentShellDriverDetails, self).__init__('apks/ContentShell.apk')
+        super(ContentShellDriverDetails,
+              self).__init__('apks/ContentShell.apk')
 
     def device_cache_directory(self):
         return self.device_directory() + 'cache/'
@@ -187,7 +190,10 @@
     def additional_command_line_flags(self, use_breakpad):
         flags = ['--encode-binary']
         if use_breakpad:
-            flags.extend(['--enable-crash-reporter', '--crash-dumps-dir=%s' % self.device_crash_dumps_directory()])
+            flags.extend([
+                '--enable-crash-reporter',
+                '--crash-dumps-dir=%s' % self.device_crash_dumps_directory()
+            ])
         return flags
 
     def device_directory(self):
@@ -216,23 +222,24 @@
 
         if self._default_devices:
             self._usable_devices = [
-                device_utils.DeviceUtils(d)
-                for d in self._default_devices]
+                device_utils.DeviceUtils(d) for d in self._default_devices
+            ]
             return self._usable_devices
 
         devices = device_utils.DeviceUtils.HealthyDevices()
         self._usable_devices = [
-            d for d in devices
-            if (battery_utils.BatteryUtils(d).GetBatteryInfo().get('level', 0)
-                >= AndroidDevices.MINIMUM_BATTERY_PERCENTAGE
-                and d.IsScreenOn())]
+            d for d in devices if
+            (battery_utils.BatteryUtils(d).GetBatteryInfo().get('level', 0) >=
+             AndroidDevices.MINIMUM_BATTERY_PERCENTAGE and d.IsScreenOn())
+        ]
 
         return self._usable_devices
 
     def get_device(self, executive, device_index):
         devices = self.usable_devices(executive)
         if device_index >= len(devices):
-            raise AssertionError('Device index exceeds number of usable devices.')
+            raise AssertionError(
+                'Device index exceeds number of usable devices.')
 
         return devices[device_index]
 
@@ -251,12 +258,16 @@
 
     SUPPORTED_VERSIONS = ('android')
 
-    FALLBACK_PATHS = {'kitkat': ['android'] + linux.LinuxPort.latest_platform_fallback_path()}
+    FALLBACK_PATHS = {
+        'kitkat':
+        ['android'] + linux.LinuxPort.latest_platform_fallback_path()
+    }
 
     BUILD_REQUIREMENTS_URL = 'https://www.chromium.org/developers/how-tos/android-build-instructions'
 
     def __init__(self, host, port_name='', apk='', options=None, **kwargs):
-        super(AndroidPort, self).__init__(host, port_name, options=options, **kwargs)
+        super(AndroidPort, self).__init__(
+            host, port_name, options=options, **kwargs)
         self._operating_system = 'android'
         self._version = 'kitkat'
         fs = host.filesystem
@@ -265,7 +276,8 @@
         if apk:
             self._driver_details = DriverDetails(apk)
             browser_type = fs.splitext(fs.basename(apk))[0].lower()
-            self._browser_type = _friendly_browser_names.get(browser_type, browser_type)
+            self._browser_type = _friendly_browser_names.get(
+                browser_type, browser_type)
         else:
             # The legacy test runner will be used to run web tests on Android.
             # So we need to initialize several port member variables.
@@ -280,20 +292,22 @@
 
             # Initialize the AndroidDevices class which tracks available devices.
             default_devices = None
-            if hasattr(self._options, 'adb_devices') and len(self._options.adb_devices):
+            if hasattr(self._options, 'adb_devices') and len(
+                    self._options.adb_devices):
                 default_devices = self._options.adb_devices
 
-            self._devices = AndroidDevices(default_devices, self._debug_logging)
+            self._devices = AndroidDevices(default_devices,
+                                           self._debug_logging)
 
             devil_chromium.Initialize(
                 output_directory=self._build_path(),
                 adb_path=self._path_from_chromium_base(
-                    'third_party', 'android_sdk', 'public', 'platform-tools', 'adb'))
+                    'third_party', 'android_sdk', 'public', 'platform-tools',
+                    'adb'))
 
             devil_env.config.InitializeLogging(
-                logging.DEBUG
-                if self._debug_logging and self.get_option('debug_rwt_logging')
-                else logging.WARNING)
+                logging.DEBUG if self._debug_logging
+                and self.get_option('debug_rwt_logging') else logging.WARNING)
 
             prepared_devices = self.get_option('prepared_devices', [])
             for serial in prepared_devices:
@@ -301,7 +315,8 @@
 
     def get_platform_tags(self):
         _sanitize_tag = lambda t: t.replace('_', '-').replace(' ', '-')
-        return frozenset(['android', 'android-' + _sanitize_tag(self._browser_type)])
+        return frozenset(
+            ['android', 'android-' + _sanitize_tag(self._browser_type)])
 
     def default_smoke_test_only(self):
         return True
@@ -323,8 +338,9 @@
     def default_child_processes(self):
         usable_devices = self._devices.usable_devices(self._executive)
         if not usable_devices:
-            raise test_run_results.TestRunException(exit_codes.NO_DEVICES_EXIT_STATUS,
-                                                    'Unable to find any attached Android devices.')
+            raise test_run_results.TestRunException(
+                exit_codes.NO_DEVICES_EXIT_STATUS,
+                'Unable to find any attached Android devices.')
         return len(usable_devices)
 
     def check_build(self, needs_http, printer):
@@ -368,12 +384,14 @@
             # Allow the test driver to get full read and write access to the directory on the device,
             # as well as for the FIFOs. We'll need a world writable directory.
             device.RunShellCommand(
-                ['mkdir', '-p', self._driver_details.device_directory()],
+                ['mkdir', '-p',
+                 self._driver_details.device_directory()],
                 check_return=True)
 
             # Make sure that the disk cache on the device resets to a clean state.
             device.RunShellCommand(
-                ['rm', '-rf', self._driver_details.device_cache_directory()],
+                ['rm', '-rf',
+                 self._driver_details.device_cache_directory()],
                 check_return=True)
 
             device.EnableRoot()
@@ -388,12 +406,14 @@
             # Allow the test driver to get full read and write access to the directory on the device,
             # as well as for the FIFOs. We'll need a world writable directory.
             device.RunShellCommand(
-                ['mkdir', '-p', self._driver_details.device_directory()],
+                ['mkdir', '-p',
+                 self._driver_details.device_directory()],
                 check_return=True)
 
             # Make sure that the disk cache on the device resets to a clean state.
             device.RunShellCommand(
-                ['rm', '-rf', self._driver_details.device_cache_directory()],
+                ['rm', '-rf',
+                 self._driver_details.device_cache_directory()],
                 check_return=True)
 
             device_path = lambda *p: posixpath.join(
@@ -414,8 +434,10 @@
                 (self._build_path('test_fonts/android_fallback_fonts.xml'),
                  device_path('android_fallback_fonts.xml')))
             for font_file in self._get_font_files():
-                host_device_tuples.append(
-                    (font_file, device_path('fonts', os.path.basename(font_file))))
+                host_device_tuples.append((font_file,
+                                           device_path(
+                                               'fonts',
+                                               os.path.basename(font_file))))
 
             # - the test resources
             host_device_tuples.extend(
@@ -427,15 +449,20 @@
             device.PushChangedFiles(host_device_tuples)
 
             device.RunShellCommand(
-                ['mkdir', '-p', self._driver_details.device_fifo_directory()],
+                ['mkdir', '-p',
+                 self._driver_details.device_fifo_directory()],
                 check_return=True)
 
-            device.RunShellCommand(
-                ['chmod', '-R', '777', self._driver_details.device_directory()],
-                check_return=True)
-            device.RunShellCommand(
-                ['chmod', '-R', '777', self._driver_details.device_fifo_directory()],
-                check_return=True)
+            device.RunShellCommand([
+                'chmod', '-R', '777',
+                self._driver_details.device_directory()
+            ],
+                                   check_return=True)
+            device.RunShellCommand([
+                'chmod', '-R', '777',
+                self._driver_details.device_fifo_directory()
+            ],
+                                   check_return=True)
 
             # Mark this device as having been set up.
             self._devices.set_device_prepared(device.serial)
@@ -445,13 +472,13 @@
         def setup_device(device):
             try:
                 _setup_device_impl(device)
-            except (ScriptError,
-                    driver.DeviceFailure,
+            except (ScriptError, driver.DeviceFailure,
                     device_errors.CommandFailedError,
                     device_errors.CommandTimeoutError,
                     device_errors.DeviceUnreachableError) as error:
                 with lock:
-                    _log.warning('[%s] failed to prepare_device: %s', device.serial, error)
+                    _log.warning('[%s] failed to prepare_device: %s',
+                                 device.serial, error)
 
         devices = self._devices.usable_devices(self.host.executive)
         device_utils.DeviceUtils.parallel(devices).pMap(setup_device)
@@ -470,7 +497,10 @@
             self._options.prepared_devices = self._devices.prepared_devices()
         else:
             # We were called with --no-build, so assume the devices are up to date.
-            self._options.prepared_devices = [d.get_serial() for d in self._devices.usable_devices(self.host.executive)]
+            self._options.prepared_devices = [
+                d.get_serial()
+                for d in self._devices.usable_devices(self.host.executive)
+            ]
 
     def num_workers(self, requested_num_workers):
         return min(len(self._options.prepared_devices), requested_num_workers)
@@ -489,14 +519,17 @@
     def start_http_server(self, additional_dirs, number_of_drivers):
         additional_dirs[PERF_TEST_PATH_PREFIX] = self._perf_tests_dir()
         additional_dirs[WEB_TESTS_PATH_PREFIX] = self.web_tests_dir()
-        super(AndroidPort, self).start_http_server(additional_dirs, number_of_drivers)
+        super(AndroidPort, self).start_http_server(additional_dirs,
+                                                   number_of_drivers)
 
     def create_driver(self, worker_number, no_timeout=False):
-        return ChromiumAndroidDriver(self, worker_number,
-                                     driver_details=self._driver_details,
-                                     android_devices=self._devices,
-                                     # Force no timeout to avoid test driver timeouts before NRWT.
-                                     no_timeout=True)
+        return ChromiumAndroidDriver(
+            self,
+            worker_number,
+            driver_details=self._driver_details,
+            android_devices=self._devices,
+            # Force no timeout to avoid test driver timeouts before NRWT.
+            no_timeout=True)
 
     def driver_cmd_line(self):
         # Override to return the actual test driver's command line.
@@ -521,7 +554,8 @@
         return self._local_port.path_to_apache_config_file()
 
     def _path_to_driver(self, target=None):
-        return self._build_path_with_target(target, self._driver_details.apk_name())
+        return self._build_path_with_target(target,
+                                            self._driver_details.apk_name())
 
     def _path_to_image_diff(self):
         return self._local_port._path_to_image_diff()
@@ -535,17 +569,34 @@
     # Local private methods.
 
     @staticmethod
-    def _android_server_process_constructor(port, server_name, cmd_line, env=None, more_logging=False):
-        return server_process.ServerProcess(port, server_name, cmd_line, env,
-                                            treat_no_data_as_crash=True, more_logging=more_logging)
+    def _android_server_process_constructor(port,
+                                            server_name,
+                                            cmd_line,
+                                            env=None,
+                                            more_logging=False):
+        return server_process.ServerProcess(
+            port,
+            server_name,
+            cmd_line,
+            env,
+            treat_no_data_as_crash=True,
+            more_logging=more_logging)
 
 
 class AndroidPerf(SingleFileOutputProfiler):
     _cached_perf_host_path = None
     _have_searched_for_perf_host = False
 
-    def __init__(self, host, executable_path, output_dir, device, symfs_path, kallsyms_path, identifier=None):
-        super(AndroidPerf, self).__init__(host, executable_path, output_dir, 'data', identifier)
+    def __init__(self,
+                 host,
+                 executable_path,
+                 output_dir,
+                 device,
+                 symfs_path,
+                 kallsyms_path,
+                 identifier=None):
+        super(AndroidPerf, self).__init__(host, executable_path, output_dir,
+                                          'data', identifier)
         self._device = device
         self._perf_process = None
         self._symfs_path = symfs_path
@@ -554,12 +605,15 @@
     def check_configuration(self):
         # Check that perf is installed
         if not self._device.PathExists('/system/bin/perf'):
-            _log.error('Cannot find /system/bin/perf on device %s', self._device.serial)
+            _log.error('Cannot find /system/bin/perf on device %s',
+                       self._device.serial)
             return False
 
         # Check that the device is a userdebug build (or at least has the necessary libraries).
         if self._device.build_type != 'userdebug':
-            _log.error('Device %s is not flashed with a userdebug build of Android', self._device.serial)
+            _log.error(
+                'Device %s is not flashed with a userdebug build of Android',
+                self._device.serial)
             return False
 
         # FIXME: Check that the binary actually is perf-able (has stackframe pointers)?
@@ -590,8 +644,10 @@
         assert pid
         assert self._perf_process is None
         # FIXME: This can't be a fixed timeout!
-        cmd = [self._device.adb.GetAdbPath(), '-s', self._device.serial,
-               'shell', 'perf', 'record', '-g', '-p', pid, 'sleep', 30]
+        cmd = [
+            self._device.adb.GetAdbPath(), '-s', self._device.serial, 'shell',
+            'perf', 'record', '-g', '-p', pid, 'sleep', 30
+        ]
         self._perf_process = self._host.executive.popen(cmd)
 
     def _perf_version_string(self, perf_path):
@@ -617,13 +673,15 @@
         return self._cached_perf_host_path
 
     def _first_ten_lines_of_profile(self, perf_output):
-        match = re.search(r"^#[^\n]*\n((?: [^\n]*\n){1,10})", perf_output, re.MULTILINE)
+        match = re.search(r"^#[^\n]*\n((?: [^\n]*\n){1,10})", perf_output,
+                          re.MULTILINE)
         return match.group(1) if match else None
 
     def profile_after_exit(self):
         perf_exitcode = self._perf_process.wait()
         if perf_exitcode != 0:
-            _log.debug("Perf failed (exit code: %i), can't process results.", perf_exitcode)
+            _log.debug("Perf failed (exit code: %i), can't process results.",
+                       perf_exitcode)
             return
 
         self._device.PullFile('/data/perf.data', self._output_path)
@@ -631,12 +689,16 @@
         perfhost_path = self._perfhost_path()
         perfhost_report_command = [
             'report',
-            '--input', self._output_path,
-            '--symfs', self._symfs_path,
-            '--kallsyms', self._kallsyms_path,
+            '--input',
+            self._output_path,
+            '--symfs',
+            self._symfs_path,
+            '--kallsyms',
+            self._kallsyms_path,
         ]
         if perfhost_path:
-            perfhost_args = [perfhost_path] + perfhost_report_command + ['--call-graph', 'none']
+            perfhost_args = ([perfhost_path] + perfhost_report_command +
+                             ['--call-graph', 'none'])
             perf_output = self._host.executive.run_command(perfhost_args)
             # We could save off the full -g report to a file if users found that useful.
             _log.debug(self._first_ten_lines_of_profile(perf_output))
@@ -657,20 +719,28 @@
 
         perfhost_display_patch = perfhost_path if perfhost_path else 'perfhost_linux'
         _log.debug('To view the full profile, run:')
-        _log.debug(' '.join([perfhost_display_patch] + perfhost_report_command))
+        _log.debug(
+            ' '.join([perfhost_display_patch] + perfhost_report_command))
 
 
 class ChromiumAndroidDriver(driver.Driver):
-
-    def __init__(self, port, worker_number, driver_details, android_devices, no_timeout=False):
-        super(ChromiumAndroidDriver, self).__init__(port, worker_number, no_timeout)
+    def __init__(self,
+                 port,
+                 worker_number,
+                 driver_details,
+                 android_devices,
+                 no_timeout=False):
+        super(ChromiumAndroidDriver, self).__init__(port, worker_number,
+                                                    no_timeout)
         self._write_stdin_process = None
         self._read_stdout_process = None
         self._read_stderr_process = None
         self._original_kptr_restrict = None
 
         self._android_devices = android_devices
-        self._device = android_devices.get_device(port._executive, worker_number)  # pylint: disable=protected-access
+        self._device = android_devices.get_device(
+            port._executive,  # pylint: disable=protected-access
+            worker_number)
         self._driver_details = driver_details
         self._debug_logging = self._port._debug_logging
         self._created_cmd_line = False
@@ -683,8 +753,11 @@
             symfs_path = self._find_or_create_symfs()
             kallsyms_path = self._update_kallsyms_cache(symfs_path)
             # FIXME: We should pass this some sort of "Bridge" object abstraction around ADB instead of a path/device pair.
-            self._profiler = AndroidPerf(self._port.host, self._port._path_to_driver(), self._port.artifacts_directory(),
-                                         self._device, symfs_path, kallsyms_path)
+            self._profiler = AndroidPerf(self._port.host,
+                                         self._port._path_to_driver(),
+                                         self._port.artifacts_directory(),
+                                         self._device, symfs_path,
+                                         kallsyms_path)
             # FIXME: This is a layering violation and should be moved to Port.check_sys_deps
             # once we have an abstraction around an adb_path/device_serial pair to make it
             # easy to make these class methods on AndroidPerf.
@@ -701,14 +774,16 @@
 
     def _update_kallsyms_cache(self, output_dir):
         kallsyms_name = '%s-kallsyms' % self._device.serial
-        kallsyms_cache_path = self._port.host.filesystem.join(output_dir, kallsyms_name)
+        kallsyms_cache_path = self._port.host.filesystem.join(
+            output_dir, kallsyms_name)
 
         self._device.EnableRoot()
 
         saved_kptr_restrict = self._device.ReadFile(KPTR_RESTRICT_PATH).strip()
         self._device.WriteFile(KPTR_RESTRICT_PATH, '0')
 
-        _log.debug('Updating kallsyms file (%s) from device', kallsyms_cache_path)
+        _log.debug('Updating kallsyms file (%s) from device',
+                   kallsyms_cache_path)
         self._device.PullFile('/proc/kallsysm', kallsyms_cache_path)
         self._device.WriteFile(KPTR_RESTRICT_PATH, saved_kptr_restrict)
 
@@ -726,14 +801,18 @@
 
         # find the installed path, and the path of the symboled built library
         # FIXME: We should get the install path from the device!
-        symfs_library_path = fs.join(symfs_path, 'data/app-lib/%s-1/%s' %
-                                     (self._driver_details.package_name(), self._driver_details.library_name()))
-        built_library_path = self._port._build_path('lib', self._driver_details.library_name())
+        symfs_library_path = fs.join(
+            symfs_path,
+            'data/app-lib/%s-1/%s' % (self._driver_details.package_name(),
+                                      self._driver_details.library_name()))
+        built_library_path = self._port._build_path(
+            'lib', self._driver_details.library_name())
         assert fs.exists(built_library_path)
 
         # FIXME: Ideally we'd check the sha1's first and make a soft-link instead
         # of copying (since we probably never care about windows).
-        _log.debug('Updating symfs library (%s) from built copy (%s)', symfs_library_path, built_library_path)
+        _log.debug('Updating symfs library (%s) from built copy (%s)',
+                   symfs_library_path, built_library_path)
         fs.maybe_make_directory(fs.dirname(symfs_library_path))
         fs.copyfile(built_library_path, symfs_library_path)
 
@@ -757,11 +836,14 @@
         try:
             tombstones = self._device.RunShellCommand(
                 'ls -n /data/tombstones/tombstone_*',
-                check_return=True, shell=True)
+                check_return=True,
+                shell=True)
         except device_errors.CommandFailedError as exc:
             # FIXME: crbug.com/321489 ... figure out why we sometimes get
             #   permission denied.
-            self._log_error('The driver crashed, but we were unable to read a tombstone: %s' % str(exc))
+            self._log_error(
+                'The driver crashed, but we were unable to read a tombstone: %s'
+                % str(exc))
             return ''
 
         last_tombstone = None
@@ -772,16 +854,21 @@
             # -rw------- 1000   1000   45859 2011-04-13 06:00 tombstone_00
             fields = tombstone.split()
             if len(fields) != 7:
-                self._log_warning("unexpected line in tombstone output, skipping: '%s'" % tombstone)
+                self._log_warning(
+                    "unexpected line in tombstone output, skipping: '%s'" %
+                    tombstone)
                 continue
 
-            if not last_tombstone or fields[4] + fields[5] >= last_tombstone[4] + last_tombstone[5]:
+            if (not last_tombstone or fields[4] + fields[5] >=
+                    last_tombstone[4] + last_tombstone[5]):
                 last_tombstone = fields
             else:
                 break
 
         if not last_tombstone:
-            self._log_error('The driver crashed, but we could not find any valid tombstone!')
+            self._log_error(
+                'The driver crashed, but we could not find any valid tombstone!'
+            )
             return ''
 
         # Use Android tool vendor/google/tools/stack to convert the raw
@@ -792,7 +879,8 @@
         return '%s\n%s' % (' '.join(last_tombstone), tombstone_contents)
 
     def _get_logcat(self):
-        return '\n'.join(self._device.adb.Logcat(dump=True, logcat_format='threadtime'))
+        return '\n'.join(
+            self._device.adb.Logcat(dump=True, logcat_format='threadtime'))
 
     def _teardown_performance(self):
         perf_control.PerfControl(self._device).SetDefaultPerfMode()
@@ -800,23 +888,24 @@
     def _get_crash_log(self, stdout, stderr, newer_than):
         if not stdout:
             stdout = ''
-        stdout += '********* [%s] Logcat:\n%s' % (self._device.serial, self._get_logcat())
+        stdout += '********* [%s] Logcat:\n%s' % (self._device.serial,
+                                                  self._get_logcat())
         if not stderr:
             stderr = ''
-        stderr += '********* [%s] Tombstone file:\n%s' % (self._device.serial, self._get_last_stacktrace())
+        stderr += '********* [%s] Tombstone file:\n%s' % (
+            self._device.serial, self._get_last_stacktrace())
 
         if not self._port.get_option('disable_breakpad'):
             crashes = self._pull_crash_dumps_from_device()
             for crash in crashes:
                 stack = self._port._dump_reader._get_stack_from_dump(crash)  # pylint: disable=protected-access
                 try:
-                  stack_str = stack.encode('ascii', 'replace')
+                    stack_str = stack.encode('ascii', 'replace')
                 except Exception as e:
-                  stack_str = '<No Stack> (%s)' % e
+                    stack_str = '<No Stack> (%s)' % e
                 stderr += '********* [%s] breakpad minidump %s:\n%s' % (
                     self._port.host.filesystem.basename(crash),
-                    self._device.serial,
-                    stack_str)
+                    self._device.serial, stack_str)
 
         return super(ChromiumAndroidDriver, self)._get_crash_log(
             stdout, stderr, newer_than)
@@ -824,7 +913,9 @@
     def cmd_line(self, per_test_args):
         # The returned command line is used to start _server_process. In our case, it's an interactive 'adb shell'.
         # The command line passed to the driver process is returned by _driver_cmd_line() instead.
-        return [self._device.adb.GetAdbPath(), '-s', self._device.serial, 'shell']
+        return [
+            self._device.adb.GetAdbPath(), '-s', self._device.serial, 'shell'
+        ]
 
     def _android_driver_cmd_line(self, per_test_args):
         return driver.Driver.cmd_line(self, per_test_args)
@@ -854,7 +945,8 @@
 
     def _start(self, per_test_args):
         if not self._android_devices.is_device_prepared(self._device.serial):
-            raise driver.DeviceFailure('%s is not prepared in _start()' % self._device.serial)
+            raise driver.DeviceFailure(
+                '%s is not prepared in _start()' % self._device.serial)
 
         for retries in range(3):
             try:
@@ -863,13 +955,18 @@
             except ScriptError as error:
                 self._abort('ScriptError("%s") in _start()' % error)
 
-            self._log_error('Failed to start the content_shell application. Retries=%d. Log:\n%s' % (retries, self._get_logcat()))
+            self._log_error(
+                'Failed to start the content_shell application. Retries=%d. Log:\n%s'
+                % (retries, self._get_logcat()))
             self.stop()
             time.sleep(2)
-        self._abort('Failed to start the content_shell application multiple times. Giving up.')
+        self._abort(
+            'Failed to start the content_shell application multiple times. Giving up.'
+        )
 
     def _start_once(self, per_test_args):
-        super(ChromiumAndroidDriver, self)._start(per_test_args, wait_for_ready=False)
+        super(ChromiumAndroidDriver, self)._start(
+            per_test_args, wait_for_ready=False)
 
         self._device.adb.Logcat(clear=True)
 
@@ -904,13 +1001,11 @@
         from devil.android import forwarder
 
         self._log_debug('Starting forwarder')
-        forwarder.Forwarder.Map(
-            [(p, p) for p in base.Port.SERVER_PORTS],
-            self._device)
+        forwarder.Forwarder.Map([(p, p) for p in base.Port.SERVER_PORTS],
+                                self._device)
         forwarder.Forwarder.Map(
             [(forwarder.DYNAMIC_DEVICE_PORT, p)
-             for p in (stdout_port, stderr_port, stdin_port)],
-            self._device)
+             for p in (stdout_port, stderr_port, stdin_port)], self._device)
 
         cmd_line_file_path = self._driver_details.command_line_file()
         original_cmd_line_file_path = cmd_line_file_path + '.orig'
@@ -924,15 +1019,19 @@
                 check_return=True)
 
         stream_port_args = [
-            '--android-stderr-port=%s' % forwarder.Forwarder.DevicePortForHostPort(stderr_port),
-            '--android-stdin-port=%s' % forwarder.Forwarder.DevicePortForHostPort(stdin_port),
-            '--android-stdout-port=%s' % forwarder.Forwarder.DevicePortForHostPort(stdout_port),
+            '--android-stderr-port=%s' %
+            forwarder.Forwarder.DevicePortForHostPort(stderr_port),
+            '--android-stdin-port=%s' %
+            forwarder.Forwarder.DevicePortForHostPort(stdin_port),
+            '--android-stdout-port=%s' %
+            forwarder.Forwarder.DevicePortForHostPort(stdout_port),
         ]
-        cmd_line_contents = self._android_driver_cmd_line(per_test_args + stream_port_args)
-        self._device.WriteFile(
-            self._driver_details.command_line_file(),
-            ' '.join(cmd_line_contents))
-        self._log_debug('Command-line file contents: %s' % ' '.join(cmd_line_contents))
+        cmd_line_contents = self._android_driver_cmd_line(per_test_args +
+                                                          stream_port_args)
+        self._device.WriteFile(self._driver_details.command_line_file(),
+                               ' '.join(cmd_line_contents))
+        self._log_debug(
+            'Command-line file contents: %s' % ' '.join(cmd_line_contents))
         self._created_cmd_line = True
 
         try:
@@ -941,11 +1040,14 @@
                     component=self._driver_details.activity_name(),
                     extras={'RunInSubThread': None}))
         except device_errors.CommandFailedError as exc:
-            self._log_error('Failed to start the content_shell application. Exception:\n' + str(exc))
+            self._log_error(
+                'Failed to start the content_shell application. Exception:\n' +
+                str(exc))
             return False
 
         # The test driver might crash during startup.
-        if not self._wait_for_server_process_output(self._server_process, deadline, '#READY'):
+        if not self._wait_for_server_process_output(self._server_process,
+                                                    deadline, '#READY'):
             return False
 
         self._log_debug('content_shell is ready')
@@ -953,23 +1055,32 @@
 
     def _create_device_crash_dumps_directory(self):
         self._device.RunShellCommand(
-            ['rm', '-rf', self._driver_details.device_crash_dumps_directory()],
+            ['rm', '-rf',
+             self._driver_details.device_crash_dumps_directory()],
             check_return=True)
         self._device.RunShellCommand(
-            ['mkdir', self._driver_details.device_crash_dumps_directory()],
+            ['mkdir',
+             self._driver_details.device_crash_dumps_directory()],
             check_return=True)
-        self._device.RunShellCommand(
-            ['chmod', '-R', '777', self._driver_details.device_crash_dumps_directory()],
-            check_return=True)
+        self._device.RunShellCommand([
+            'chmod', '-R', '777',
+            self._driver_details.device_crash_dumps_directory()
+        ],
+                                     check_return=True)
 
-    def _start_netcat(self, server_name, first_port=FIRST_NETCAT_PORT, read_from_stdin=True):
+    def _start_netcat(self,
+                      server_name,
+                      first_port=FIRST_NETCAT_PORT,
+                      read_from_stdin=True):
         for i in itertools.count(first_port, 65536):
             nc_cmd = ['nc', '-l', str(i)]
             if not read_from_stdin:
                 nc_cmd.append('-d')
-            proc = self._port.server_process_constructor(self._port, server_name, nc_cmd)
+            proc = self._port.server_process_constructor(
+                self._port, server_name, nc_cmd)
             proc.start()
-            self._port.host.executive.wait_limited(proc.pid(), limit_in_seconds=1)
+            self._port.host.executive.wait_limited(
+                proc.pid(), limit_in_seconds=1)
             if self._port.host.executive.check_running_pid(proc.pid()):
                 return (proc, i)
 
@@ -1019,22 +1130,24 @@
 
     def _pull_crash_dumps_from_device(self):
         result = []
-        if not self._device.PathExists(self._driver_details.device_crash_dumps_directory()):
+        if not self._device.PathExists(
+                self._driver_details.device_crash_dumps_directory()):
             return result
         dumps = self._device.ListDirectory(
             self._driver_details.device_crash_dumps_directory())
         for dump in dumps:
-            device_dump = '%s/%s' % (self._driver_details.device_crash_dumps_directory(), dump)
+            device_dump = '%s/%s' % (
+                self._driver_details.device_crash_dumps_directory(), dump)
             local_dump = self._port.host.filesystem.join(
                 self._port._dump_reader.crash_dumps_directory(), dump)  # pylint: disable=protected-access
 
             # FIXME: crbug.com/321489. Figure out why these commands would fail ...
             try:
-                self._device.RunShellCommand(
-                    ['chmod', '777', device_dump], check_return=True)
+                self._device.RunShellCommand(['chmod', '777', device_dump],
+                                             check_return=True)
                 self._device.PullFile(device_dump, local_dump)
-                self._device.RunShellCommand(
-                    ['rm', '-f', device_dump], check_return=True)
+                self._device.RunShellCommand(['rm', '-f', device_dump],
+                                             check_return=True)
             except device_errors.CommandFailedError:
                 pass
 
@@ -1053,13 +1166,13 @@
                 ['mv', original_cmd_line_file_path, cmd_line_file_path],
                 check_return=True)
         elif self._device.PathExists(cmd_line_file_path):
-            self._device.RunShellCommand(
-                ['rm', cmd_line_file_path],
-                check_return=True)
+            self._device.RunShellCommand(['rm', cmd_line_file_path],
+                                         check_return=True)
         self._created_cmd_line = False
 
     def _command_from_driver_input(self, driver_input):
-        command = super(ChromiumAndroidDriver, self)._command_from_driver_input(driver_input)
+        command = super(ChromiumAndroidDriver,
+                        self)._command_from_driver_input(driver_input)
         if command.startswith('/'):
             command = 'http://127.0.0.1:8000' + WEB_TESTS_PATH_PREFIX + \
                 '/' + self._port.relative_test_filename(command)
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/android_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/android_unittest.py
index 77f4fa4..37c584d 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/android_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/android_unittest.py
@@ -41,21 +41,22 @@
 from blinkpy.web_tests.port import driver_unittest
 from blinkpy.web_tests.port import port_testcase
 
-_DEVIL_ROOT = os.path.join(
-    get_chromium_src_dir(), 'third_party', 'catapult', 'devil')
+_DEVIL_ROOT = os.path.join(get_chromium_src_dir(), 'third_party', 'catapult',
+                           'devil')
 sys.path.insert(0, _DEVIL_ROOT)
 from devil.android import device_utils
 from devil.android.sdk import adb_wrapper
 
-_MOCK_ROOT = os.path.join(
-    get_chromium_src_dir(), 'third_party', 'pymock')
+_MOCK_ROOT = os.path.join(get_chromium_src_dir(), 'third_party', 'pymock')
 sys.path.insert(0, _MOCK_ROOT)
 import mock
 
 
 def mock_devices():
-    serials = ['123456789ABCDEF0', '123456789ABCDEF1', '123456789ABCDEF2',
-               '123456789ABCDEF3', '123456789ABCDEF4', '123456789ABCDEF5']
+    serials = [
+        '123456789ABCDEF0', '123456789ABCDEF1', '123456789ABCDEF2',
+        '123456789ABCDEF3', '123456789ABCDEF4', '123456789ABCDEF5'
+    ]
     devices = []
     for serial in serials:
         mock_device = mock.Mock(spec=device_utils.DeviceUtils)
@@ -66,6 +67,7 @@
         devices.append(mock_device)
     return devices
 
+
 class AndroidPortTest(port_testcase.PortTestCase):
     port_name = 'android'
     port_maker = android.AndroidPort
@@ -94,7 +96,10 @@
 
     def test_check_build(self):
         host = MockSystemHost()
-        port = self.make_port(host=host, options=optparse.Values({'child_processes': 1}))
+        port = self.make_port(
+            host=host, options=optparse.Values({
+                'child_processes': 1
+            }))
         # Checking the devices is not tested in this unit test.
         port._check_devices = lambda _: None
         host.filesystem.exists = lambda p: True
@@ -107,7 +112,11 @@
     # Test that the number of child processes to create depends on the devices.
     def test_default_child_processes(self):
         port_default = self.make_port(device_count=5)
-        port_fixed_device = self.make_port(device_count=5, options=optparse.Values({'adb_devices': ['123456789ABCDEF9']}))
+        port_fixed_device = self.make_port(
+            device_count=5,
+            options=optparse.Values({
+                'adb_devices': ['123456789ABCDEF9']
+            }))
 
         self.assertEquals(6, port_default.default_child_processes())
         self.assertEquals(1, port_fixed_device.default_child_processes())
@@ -115,12 +124,14 @@
     def test_weblayer_expectation_tags(self):
         host = MockSystemHost()
         port = android.AndroidPort(host, apk='apks/WebLayerShell.apk')
-        self.assertEqual(port.get_platform_tags(), set(['android', 'android-weblayer']))
+        self.assertEqual(port.get_platform_tags(),
+                         set(['android', 'android-weblayer']))
 
     def test_content_shell_expectation_tags(self):
         host = MockSystemHost()
         port = android.AndroidPort(host)
-        self.assertEqual(port.get_platform_tags(), set(['android', 'android-content-shell']))
+        self.assertEqual(port.get_platform_tags(),
+                         set(['android', 'android-content-shell']))
 
     # Test that an HTTP server indeed is required by Android (as we serve all tests over them)
     def test_requires_http_server(self):
@@ -128,17 +139,25 @@
 
     # Tests the default timeouts for Android, which are different than the rest of Chromium.
     def test_default_timeout_ms(self):
-        self.assertEqual(self.make_port(options=optparse.Values({'configuration': 'Release'})).default_timeout_ms(), 10000)
-        self.assertEqual(self.make_port(options=optparse.Values({'configuration': 'Debug'})).default_timeout_ms(), 10000)
+        self.assertEqual(
+            self.make_port(
+                options=optparse.Values({
+                    'configuration': 'Release'
+                })).default_timeout_ms(), 10000)
+        self.assertEqual(
+            self.make_port(
+                options=optparse.Values({
+                    'configuration': 'Debug'
+                })).default_timeout_ms(), 10000)
 
     def test_path_to_apache_config_file(self):
         port = self.make_port()
         port._local_port.path_to_apache_config_file = lambda: '/host/apache/conf'  # pylint: disable=protected-access
-        self.assertEqual(port.path_to_apache_config_file(), '/host/apache/conf')
+        self.assertEqual(port.path_to_apache_config_file(),
+                         '/host/apache/conf')
 
 
 class ChromiumAndroidDriverTest(unittest.TestCase):
-
     def setUp(self):
         self._mock_devices = mock.patch(
             'devil.android.device_utils.DeviceUtils.HealthyDevices',
@@ -154,7 +173,8 @@
             'devil.android.perf.perf_control.PerfControl')
         self._mock_perf_control.start()
 
-        self._port = android.AndroidPort(MockSystemHost(executive=MockExecutive()), 'android')
+        self._port = android.AndroidPort(
+            MockSystemHost(executive=MockExecutive()), 'android')
         self._driver = android.ChromiumAndroidDriver(
             self._port,
             worker_number=0,
@@ -170,13 +190,16 @@
 
     # The cmd_line() method in the Android port is used for starting a shell, not the test runner.
     def test_cmd_line(self):
-        self.assertEquals(['adb', '-s', '123456789ABCDEF0', 'shell'], self._driver.cmd_line([]))
+        self.assertEquals(['adb', '-s', '123456789ABCDEF0', 'shell'],
+                          self._driver.cmd_line([]))
 
     # Test that the Chromium Android port can interpret Android's shell output.
     def test_read_prompt(self):
-        self._driver._server_process = driver_unittest.MockServerProcess(lines=['root@android:/ # '])
+        self._driver._server_process = driver_unittest.MockServerProcess(
+            lines=['root@android:/ # '])
         self.assertIsNone(self._driver._read_prompt(time.time() + 1))
-        self._driver._server_process = driver_unittest.MockServerProcess(lines=['$ '])
+        self._driver._server_process = driver_unittest.MockServerProcess(
+            lines=['$ '])
         self.assertIsNone(self._driver._read_prompt(time.time() + 1))
 
 
@@ -204,16 +227,23 @@
         self._mock_perf_control.stop()
 
     def test_two_drivers(self):
-        port = android.AndroidPort(MockSystemHost(executive=MockExecutive()), 'android')
-        driver0 = android.ChromiumAndroidDriver(port, worker_number=0,
-                                                driver_details=android.ContentShellDriverDetails(),
-                                                android_devices=port._devices)
-        driver1 = android.ChromiumAndroidDriver(port, worker_number=1,
-                                                driver_details=android.ContentShellDriverDetails(),
-                                                android_devices=port._devices)
+        port = android.AndroidPort(
+            MockSystemHost(executive=MockExecutive()), 'android')
+        driver0 = android.ChromiumAndroidDriver(
+            port,
+            worker_number=0,
+            driver_details=android.ContentShellDriverDetails(),
+            android_devices=port._devices)
+        driver1 = android.ChromiumAndroidDriver(
+            port,
+            worker_number=1,
+            driver_details=android.ContentShellDriverDetails(),
+            android_devices=port._devices)
 
-        self.assertEqual(['adb', '-s', '123456789ABCDEF0', 'shell'], driver0.cmd_line([]))
-        self.assertEqual(['adb', '-s', '123456789ABCDEF1', 'shell'], driver1.cmd_line(['anything']))
+        self.assertEqual(['adb', '-s', '123456789ABCDEF0', 'shell'],
+                         driver0.cmd_line([]))
+        self.assertEqual(['adb', '-s', '123456789ABCDEF1', 'shell'],
+                         driver1.cmd_line(['anything']))
 
 
 class ChromiumAndroidTwoPortsTest(unittest.TestCase):
@@ -241,14 +271,21 @@
 
     def test_options_with_two_ports(self):
         port0 = android.AndroidPort(
-            MockSystemHost(executive=MockExecutive()), 'android',
-            options=optparse.Values({'additional_driver_flag': ['--foo=bar']}))
+            MockSystemHost(executive=MockExecutive()),
+            'android',
+            options=optparse.Values({
+                'additional_driver_flag': ['--foo=bar']
+            }))
         port1 = android.AndroidPort(
-            MockSystemHost(executive=MockExecutive()), 'android',
-            options=optparse.Values({'driver_name': 'content_shell'}))
+            MockSystemHost(executive=MockExecutive()),
+            'android',
+            options=optparse.Values({
+                'driver_name': 'content_shell'
+            }))
 
         self.assertEqual(1, port0.driver_cmd_line().count('--foo=bar'))
-        self.assertEqual(0, port1.driver_cmd_line().count('--create-stdin-fifo'))
+        self.assertEqual(0,
+                         port1.driver_cmd_line().count('--create-stdin-fifo'))
 
 
 class ChromiumAndroidDriverTombstoneTest(unittest.TestCase):
@@ -265,7 +302,8 @@
             return_value={'level': 100})
         self._mock_battery.start()
 
-        self._port = android.AndroidPort(MockSystemHost(executive=MockExecutive()), 'android')
+        self._port = android.AndroidPort(
+            MockSystemHost(executive=MockExecutive()), 'android')
         self._driver = android.ChromiumAndroidDriver(
             self._port,
             worker_number=0,
@@ -284,12 +322,15 @@
 
     # Tests that we return an empty string and log an error when no tombstones could be found.
     def test_no_tombstones_found(self):
-        self._driver._device.RunShellCommand = mock.Mock(
-            return_value=['/data/tombstones/tombstone_*: No such file or directory'])
+        self._driver._device.RunShellCommand = mock.Mock(return_value=[
+            '/data/tombstones/tombstone_*: No such file or directory'
+        ])
         stacktrace = self._driver._get_last_stacktrace()
 
         self.assertEqual(1, len(self._errors))
-        self.assertEqual('The driver crashed, but we could not find any valid tombstone!', self._errors[0])
+        self.assertEqual(
+            'The driver crashed, but we could not find any valid tombstone!',
+            self._errors[0])
         self.assertEqual('', stacktrace)
 
     # Tests that an empty string will be returned if we cannot read the tombstone files.
@@ -299,48 +340,57 @@
         stacktrace = self._driver._get_last_stacktrace()
 
         self.assertEqual(1, len(self._errors))
-        self.assertEqual('The driver crashed, but we could not find any valid tombstone!', self._errors[0])
+        self.assertEqual(
+            'The driver crashed, but we could not find any valid tombstone!',
+            self._errors[0])
         self.assertEqual('', stacktrace)
 
     # Tests that invalid "ls" output will throw a warning when listing the tombstone files.
     def test_invalid_tombstone_list_entry_format(self):
-        self._driver._device.RunShellCommand = mock.Mock(
-            return_value=[
-                '-rw------- 1000 1000 3604 2013-11-19 16:15 tombstone_00',
-                '-- invalid entry --',
-                '-rw------- 1000 1000 3604 2013-11-19 16:16 tombstone_10'])
-        self._driver._device.ReadFile = mock.Mock(return_value='tombstone content')
+        self._driver._device.RunShellCommand = mock.Mock(return_value=[
+            '-rw------- 1000 1000 3604 2013-11-19 16:15 tombstone_00',
+            '-- invalid entry --',
+            '-rw------- 1000 1000 3604 2013-11-19 16:16 tombstone_10'
+        ])
+        self._driver._device.ReadFile = mock.Mock(
+            return_value='tombstone content')
         stacktrace = self._driver._get_last_stacktrace()
 
         self.assertEqual(1, len(self._warnings))
-        self.assertEqual(ChromiumAndroidDriverTombstoneTest.EXPECTED_STACKTRACE, stacktrace)
+        self.assertEqual(
+            ChromiumAndroidDriverTombstoneTest.EXPECTED_STACKTRACE, stacktrace)
 
     # Tests the case in which we can't find any valid tombstone entries at all. The tombstone
     # output used for the mock misses the permission part.
     def test_invalid_tombstone_list(self):
-        self._driver._device.RunShellCommand = mock.Mock(
-            return_value=[
-                '1000 1000 3604 2013-11-19 16:15 tombstone_00',
-                '1000 1000 3604 2013-11-19 16:15 tombstone_01',
-                '1000 1000 3604 2013-11-19 16:15 tombstone_02'])
-        self._driver._device.ReadFile = mock.Mock(return_value='tombstone content')
+        self._driver._device.RunShellCommand = mock.Mock(return_value=[
+            '1000 1000 3604 2013-11-19 16:15 tombstone_00',
+            '1000 1000 3604 2013-11-19 16:15 tombstone_01',
+            '1000 1000 3604 2013-11-19 16:15 tombstone_02'
+        ])
+        self._driver._device.ReadFile = mock.Mock(
+            return_value='tombstone content')
         stacktrace = self._driver._get_last_stacktrace()
 
         self.assertEqual(3, len(self._warnings))
         self.assertEqual(1, len(self._errors))
-        self.assertEqual('The driver crashed, but we could not find any valid tombstone!', self._errors[0])
+        self.assertEqual(
+            'The driver crashed, but we could not find any valid tombstone!',
+            self._errors[0])
         self.assertEqual('', stacktrace)
 
     # Tests that valid tombstone listings will return the contents of the most recent file.
     def test_read_valid_tombstone_file(self):
-        self._driver._device.RunShellCommand = mock.Mock(
-            return_value=[
-                '-rw------- 1000 1000 3604 2013-11-19 16:15 tombstone_00',
-                '-rw------- 1000 1000 3604 2013-11-19 16:16 tombstone_10',
-                '-rw------- 1000 1000 3604 2013-11-19 16:15 tombstone_02'])
-        self._driver._device.ReadFile = mock.Mock(return_value='tombstone content')
+        self._driver._device.RunShellCommand = mock.Mock(return_value=[
+            '-rw------- 1000 1000 3604 2013-11-19 16:15 tombstone_00',
+            '-rw------- 1000 1000 3604 2013-11-19 16:16 tombstone_10',
+            '-rw------- 1000 1000 3604 2013-11-19 16:15 tombstone_02'
+        ])
+        self._driver._device.ReadFile = mock.Mock(
+            return_value='tombstone content')
         stacktrace = self._driver._get_last_stacktrace()
 
         self.assertEqual(0, len(self._warnings))
         self.assertEqual(0, len(self._errors))
-        self.assertEqual(ChromiumAndroidDriverTombstoneTest.EXPECTED_STACKTRACE, stacktrace)
+        self.assertEqual(
+            ChromiumAndroidDriverTombstoneTest.EXPECTED_STACKTRACE, stacktrace)
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base.py b/third_party/blink/tools/blinkpy/web_tests/port/base.py
index 1799fe1..0b911946 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/base.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/base.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Abstract base class for Port classes.
 
 The Port classes encapsulate Port-specific (platform-specific) behavior
@@ -110,6 +109,7 @@
 # contain all the disc artifacts created by web tests
 ARTIFACTS_SUB_DIR = 'layout-test-results'
 
+
 class Port(object):
     """Abstract class for Port-specific hooks for the web_test package."""
 
@@ -131,20 +131,16 @@
         # a different operating system version. This isn't accurate, but will
         # work until we need to test and support baselines across multiple OS versions.
         ('retina', 'x86'),
-
         ('mac10.10', 'x86'),
         ('mac10.11', 'x86'),
         ('mac10.12', 'x86'),
         ('mac10.13', 'x86'),
         ('mac10.14', 'x86'),
         ('mac10.15', 'x86'),
-
         ('win7', 'x86'),
         ('win10', 'x86'),
         ('trusty', 'x86_64'),
-
         ('fuchsia', 'x86_64'),
-
         ('ios12.2', 'x86_64'),
         ('ios13.0', 'x86_64'),
     )
@@ -154,8 +150,8 @@
         # we don't have separate baselines for it (it shares the mac10.14
         # results in the platform/mac directory). This list will need to be
         # updated if/when we actually have separate baselines.
-        'mac': ['retina', 'mac10.10', 'mac10.11', 'mac10.12', 'mac10.13',
-                'mac10.14'],
+        'mac':
+        ['retina', 'mac10.10', 'mac10.11', 'mac10.12', 'mac10.13', 'mac10.14'],
         'win': ['win7', 'win10'],
         'linux': ['trusty'],
         'fuschia': ['fuchsia'],
@@ -204,7 +200,8 @@
     # WPT_REGEX captures: 1. the root directory of WPT relative to web_tests
     # (without a trailing slash), 2. the path of the test within WPT (without a
     # leading slash).
-    WPT_REGEX = re.compile(r'^(?:virtual/[^/]+/)?(external/wpt|wpt_internal)/(.*)$')
+    WPT_REGEX = re.compile(
+        r'^(?:virtual/[^/]+/)?(external/wpt|wpt_internal)/(.*)$')
 
     # Because this is an abstract base class, arguments to functions may be
     # unused in this class - pylint: disable=unused-argument
@@ -248,7 +245,8 @@
         self._dump_reader = None
 
         if not hasattr(options, 'configuration') or not options.configuration:
-            self.set_option_default('configuration', self.default_configuration())
+            self.set_option_default('configuration',
+                                    self.default_configuration())
         if not hasattr(options, 'target') or not options.target:
             self.set_option_default('target', self._options.configuration)
         self._test_configuration = None
@@ -257,13 +255,16 @@
 
     def __str__(self):
         return 'Port{name=%s, version=%s, architecture=%s, test_configuration=%s}' % (
-            self._name, self._version, self._architecture, self._test_configuration)
+            self._name, self._version, self._architecture,
+            self._test_configuration)
 
     def get_platform_tags(self):
         """Returns system condition tags that are used to find active expectations
            for a test run on a specific system"""
-        return frozenset([self._options.configuration.lower(), self._version,
-                          self.port_name, self._architecture])
+        return frozenset([
+            self._options.configuration.lower(), self._version, self.port_name,
+            self._architecture
+        ])
 
     @memoized
     def _flag_specific_config_name(self):
@@ -294,25 +295,33 @@
     @memoized
     def _flag_specific_configs(self):
         """Reads configuration from FlagSpecificConfig and returns a dictionary from name to args."""
-        config_file = self._filesystem.join(self.web_tests_dir(), 'FlagSpecificConfig')
+        config_file = self._filesystem.join(self.web_tests_dir(),
+                                            'FlagSpecificConfig')
         if not self._filesystem.exists(config_file):
             return {}
 
         try:
-            json_configs = json.loads(self._filesystem.read_text_file(config_file))
+            json_configs = json.loads(
+                self._filesystem.read_text_file(config_file))
         except ValueError as error:
-            raise ValueError('{} is not a valid JSON file: {}'.format(config_file, error))
+            raise ValueError('{} is not a valid JSON file: {}'.format(
+                config_file, error))
 
         configs = {}
         for config in json_configs:
             name = config['name']
             args = config['args']
             if not VALID_FILE_NAME_REGEX.match(name):
-                raise ValueError('{}: name "{}" contains invalid characters'.format(config_file, name))
+                raise ValueError(
+                    '{}: name "{}" contains invalid characters'.format(
+                        config_file, name))
             if name in configs:
-                raise ValueError('{} contains duplicated name {}.'.format(config_file, name))
+                raise ValueError('{} contains duplicated name {}.'.format(
+                    config_file, name))
             if args in configs.itervalues():
-                raise ValueError('{}: name "{}" has the same args as another entry.'.format(config_file, name))
+                raise ValueError(
+                    '{}: name "{}" has the same args as another entry.'.format(
+                        config_file, name))
             configs[name] = args
         return configs
 
@@ -324,14 +333,16 @@
            3. Zero or more flags passed by --additional-driver-flag.
         """
         flags = []
-        flag_file = self._filesystem.join(self.web_tests_dir(), 'additional-driver-flag.setting')
+        flag_file = self._filesystem.join(self.web_tests_dir(),
+                                          'additional-driver-flag.setting')
         if self._filesystem.exists(flag_file):
             flags = self._filesystem.read_text_file(flag_file).split()
 
         flag_specific_option = self.get_option('flag_specific')
         if flag_specific_option:
             configs = self._flag_specific_configs()
-            assert flag_specific_option in configs, '{} is not defined in FlagSpecificConfig'.format(flag_specific_option)
+            assert flag_specific_option in configs, '{} is not defined in FlagSpecificConfig'.format(
+                flag_specific_option)
             flags += configs[flag_specific_option]
 
         flags += self.get_option('additional_driver_flag', [])
@@ -344,15 +355,16 @@
                 '--run-web-tests',
                 '--ignore-certificate-errors-spki-list=' + WPT_FINGERPRINT +
                 ',' + SXG_FINGERPRINT + ',' + SXG_WPT_FINGERPRINT,
-                '--user-data-dir']
+                '--user-data-dir'
+            ]
 
         # If we're already repeating the tests more than once, then we're not
         # particularly concerned with speed. Resetting the shell between tests
         # increases test run time by 2-5X, but provides more consistent results
         # [less state leaks between tests].
-        if (self.get_option('reset_shell_between_tests') or
-                self.get_option('repeat_each') > 1 or
-                self.get_option('iterations') > 1):
+        if (self.get_option('reset_shell_between_tests')
+                or self.get_option('repeat_each') > 1
+                or self.get_option('iterations') > 1):
             flags += ['--reset-shell-between-tests']
         return flags
 
@@ -373,7 +385,8 @@
         """Returns the amount of time in seconds to wait before killing the process in driver.stop()."""
         # We want to wait for at least 3 seconds, but if we are really slow, we
         # want to be slow on cleanup as well (for things like ASAN, Valgrind, etc.)
-        return 3.0 * float(self.get_option('time_out_ms', '0')) / self.default_timeout_ms()
+        return (3.0 * float(self.get_option('time_out_ms', '0')) /
+                self.default_timeout_ms())
 
     def default_batch_size(self):
         """Returns the default batch size to use for this port."""
@@ -410,15 +423,15 @@
     def baseline_search_path(self):
         return (self.get_option('additional_platform_directory', []) +
                 self._flag_specific_baseline_search_path() +
-                self._compare_baseline() +
-                self.default_baseline_search_path())
+                self._compare_baseline() + self.default_baseline_search_path())
 
     def default_baseline_search_path(self):
         """Returns a list of absolute paths to directories to search under for baselines.
 
         The directories are searched in order.
         """
-        return map(self._absolute_baseline_path, self.FALLBACK_PATHS[self.version()])
+        return map(self._absolute_baseline_path,
+                   self.FALLBACK_PATHS[self.version()])
 
     @memoized
     def _compare_baseline(self):
@@ -428,8 +441,11 @@
             return factory.get(target_port).default_baseline_search_path()
         return []
 
-    def _check_file_exists(self, path_to_file, file_description,
-                           override_step=None, more_logging=True):
+    def _check_file_exists(self,
+                           path_to_file,
+                           file_description,
+                           override_step=None,
+                           more_logging=True):
         """Verifies that the file is present where expected, or logs an error.
 
         Args:
@@ -455,10 +471,12 @@
         if not self._check_file_exists(self._path_to_driver(), 'test driver'):
             return exit_codes.UNEXPECTED_ERROR_EXIT_STATUS
 
-        if not self._check_driver_build_up_to_date(self.get_option('configuration')):
+        if not self._check_driver_build_up_to_date(
+                self.get_option('configuration')):
             return exit_codes.UNEXPECTED_ERROR_EXIT_STATUS
 
-        if not self._check_file_exists(self._path_to_image_diff(), 'image_diff'):
+        if not self._check_file_exists(self._path_to_image_diff(),
+                                       'image_diff'):
             return exit_codes.UNEXPECTED_ERROR_EXIT_STATUS
 
         if self._dump_reader and not self._dump_reader.check_is_functional():
@@ -485,7 +503,8 @@
         if httpd_path:
             try:
                 env = self.setup_environ_for_server()
-                if self._executive.run_command([httpd_path, '-v'], env=env, return_exit_code=True) != 0:
+                if self._executive.run_command(
+                    [httpd_path, '-v'], env=env, return_exit_code=True) != 0:
                     _log.error('httpd seems broken. Cannot run http tests.')
                     return False
                 return True
@@ -517,7 +536,8 @@
         tempdir = self._filesystem.mkdtemp()
 
         expected_filename = self._filesystem.join(str(tempdir), 'expected.png')
-        self._filesystem.write_binary_file(expected_filename, expected_contents)
+        self._filesystem.write_binary_file(expected_filename,
+                                           expected_contents)
 
         actual_filename = self._filesystem.join(str(tempdir), 'actual.png')
         self._filesystem.write_binary_file(actual_filename, actual_contents)
@@ -526,7 +546,10 @@
 
         executable = self._path_to_image_diff()
         # Although we are handed 'old', 'new', image_diff wants 'new', 'old'.
-        command = [executable, '--diff', actual_filename, expected_filename, diff_filename]
+        command = [
+            executable, '--diff', actual_filename, expected_filename,
+            diff_filename
+        ]
         # Notifies image_diff to allow a tolerance when calculating the pixel
         # diff. To account for variances when the tests are ran on an actual
         # GPU.
@@ -536,7 +559,8 @@
         result = None
         err_str = None
         try:
-            exit_code = self._executive.run_command(command, return_exit_code=True)
+            exit_code = self._executive.run_command(
+                command, return_exit_code=True)
             if exit_code == 0:
                 # The images are the same.
                 result = None
@@ -567,11 +591,14 @@
         reference_files = self.reference_files(test_name)
         if reference_files:
             # FIXME: How should this handle more than one type of reftest?
-            baseline_dict['.' + reference_files[0][0]] = self.relative_test_filename(reference_files[0][1])
+            baseline_dict['.' + reference_files[0][0]] = \
+                self.relative_test_filename(reference_files[0][1])
 
         for extension in self.BASELINE_EXTENSIONS:
-            path = self.expected_filename(test_name, extension, return_default=False)
-            baseline_dict[extension] = self.relative_test_filename(path) if path else path
+            path = self.expected_filename(
+                test_name, extension, return_default=False)
+            baseline_dict[extension] = self.relative_test_filename(
+                path) if path else path
 
         return baseline_dict
 
@@ -608,7 +635,11 @@
             test_name_root, _ = self._filesystem.splitext(test_name)
         return test_name_root + suffix + extension
 
-    def expected_baselines(self, test_name, extension, all_baselines=False, match=True):
+    def expected_baselines(self,
+                           test_name,
+                           extension,
+                           all_baselines=False,
+                           match=True):
         """Given a test name, finds where the baseline results are located.
 
         Return values will be in the format appropriate for the current
@@ -639,12 +670,15 @@
                     unless None was returned.)
         """
         baseline_filename = self.output_filename(
-            test_name, self.BASELINE_SUFFIX if match else self.BASELINE_MISMATCH_SUFFIX, extension)
+            test_name,
+            self.BASELINE_SUFFIX if match else self.BASELINE_MISMATCH_SUFFIX,
+            extension)
         baseline_search_path = self.baseline_search_path()
 
         baselines = []
         for platform_dir in baseline_search_path:
-            if self._filesystem.exists(self._filesystem.join(platform_dir, baseline_filename)):
+            if self._filesystem.exists(
+                    self._filesystem.join(platform_dir, baseline_filename)):
                 baselines.append((platform_dir, baseline_filename))
 
             if not all_baselines and baselines:
@@ -653,7 +687,8 @@
         # If it wasn't found in a platform directory, return the expected
         # result in the test directory, even if no such file actually exists.
         platform_dir = self.web_tests_dir()
-        if self._filesystem.exists(self._filesystem.join(platform_dir, baseline_filename)):
+        if self._filesystem.exists(
+                self._filesystem.join(platform_dir, baseline_filename)):
             baselines.append((platform_dir, baseline_filename))
 
         if baselines:
@@ -661,8 +696,12 @@
 
         return [(None, baseline_filename)]
 
-    def expected_filename(self, test_name, extension,
-                          return_default=True, fallback_base_for_virtual=True, match=True):
+    def expected_filename(self,
+                          test_name,
+                          extension,
+                          return_default=True,
+                          fallback_base_for_virtual=True,
+                          match=True):
         """Given a test name, returns an absolute path to its expected results.
 
         If no expected results are found in any of the searched directories,
@@ -691,17 +730,20 @@
         """
         # The [0] means the first expected baseline (which is the one to be
         # used) in the fallback paths.
-        platform_dir, baseline_filename = self.expected_baselines(test_name, extension, match=match)[0]
+        platform_dir, baseline_filename = self.expected_baselines(
+            test_name, extension, match=match)[0]
         if platform_dir:
             return self._filesystem.join(platform_dir, baseline_filename)
 
         if fallback_base_for_virtual:
             actual_test_name = self.lookup_virtual_test_base(test_name)
             if actual_test_name:
-                return self.expected_filename(actual_test_name, extension, return_default, match=match)
+                return self.expected_filename(
+                    actual_test_name, extension, return_default, match=match)
 
         if return_default:
-            return self._filesystem.join(self.web_tests_dir(), baseline_filename)
+            return self._filesystem.join(self.web_tests_dir(),
+                                         baseline_filename)
         return None
 
     def fallback_expected_filename(self, test_name, extension):
@@ -711,16 +753,19 @@
         Returns:
             An absolute path to the next fallback baseline, or None if not found.
         """
-        baselines = self.expected_baselines(test_name, extension, all_baselines=True)
+        baselines = self.expected_baselines(
+            test_name, extension, all_baselines=True)
         if len(baselines) < 2:
             actual_test_name = self.lookup_virtual_test_base(test_name)
             if actual_test_name:
                 if len(baselines) == 0:
-                    return self.fallback_expected_filename(actual_test_name, extension)
+                    return self.fallback_expected_filename(
+                        actual_test_name, extension)
                 # In this case, baselines[0] is the current baseline of the
                 # virtual test, so the first base test baseline is the fallback
                 # baseline of the virtual test.
-                return self.expected_filename(actual_test_name, extension, return_default=False)
+                return self.expected_filename(
+                    actual_test_name, extension, return_default=False)
             return None
 
         platform_dir, baseline_filename = baselines[1]
@@ -735,7 +780,8 @@
         png_path = self.expected_filename(test_name, '.png')
 
         if self._filesystem.exists(png_path):
-            with self._filesystem.open_binary_file_for_reading(png_path) as filehandle:
+            with self._filesystem.open_binary_file_for_reading(
+                    png_path) as filehandle:
                 return read_checksum_from_png.read_checksum(filehandle)
 
         return None
@@ -775,7 +821,8 @@
         reftest_list = []
         for expectation in ('==', '!='):
             for extension in Port.supported_file_extensions:
-                path = self.expected_filename(test_name, extension, match=(expectation == '=='))
+                path = self.expected_filename(
+                    test_name, extension, match=(expectation == '=='))
                 if self._filesystem.exists(path):
                     reftest_list.append((expectation, path))
         if reftest_list:
@@ -787,8 +834,10 @@
             return []
         wpt_path = match.group(1)
         path_in_wpt = match.group(2)
-        for expectation, ref_path_in_wpt in self.wpt_manifest(wpt_path).extract_reference_list(path_in_wpt):
-            ref_absolute_path = self._filesystem.join(self.web_tests_dir(), wpt_path + ref_path_in_wpt)
+        for expectation, ref_path_in_wpt in self.wpt_manifest(
+                wpt_path).extract_reference_list(path_in_wpt):
+            ref_absolute_path = self._filesystem.join(
+                self.web_tests_dir(), wpt_path + ref_path_in_wpt)
             reftest_list.append((expectation, ref_absolute_path))
         return reftest_list
 
@@ -809,7 +858,8 @@
 
         if paths:
             tests.extend(self._virtual_tests_matching_paths(paths))
-            if (any(wpt_path in path for wpt_path in self.WPT_DIRS for path in paths)
+            if (any(wpt_path in path for wpt_path in self.WPT_DIRS
+                    for path in paths)
                     # TODO(robertma): Remove this special case when external/wpt is moved to wpt.
                     or any('external' in path for path in paths)):
                 tests.extend(self._wpt_test_urls_matching_paths(paths))
@@ -817,16 +867,19 @@
             tests.extend(self._all_virtual_tests())
             # '/' is used instead of filesystem.sep as the WPT manifest always
             # uses '/' for paths (it is not OS dependent).
-            tests.extend([wpt_path + '/' + test for wpt_path in self.WPT_DIRS
-                          for test in self.wpt_manifest(wpt_path).all_urls()])
+            tests.extend([
+                wpt_path + '/' + test for wpt_path in self.WPT_DIRS
+                for test in self.wpt_manifest(wpt_path).all_urls()
+            ])
         return tests
 
     def real_tests(self, paths):
         """Find all real tests in paths except WPT."""
         # When collecting test cases, skip these directories.
-        skipped_directories = set(
-            ['platform', 'resources', 'support', 'script-tests',
-             'reference', 'reftest'])
+        skipped_directories = set([
+            'platform', 'resources', 'support', 'script-tests', 'reference',
+            'reftest'
+        ])
         # Also ignore all WPT directories. Note that this is only an
         # optimization; is_non_wpt_test_file should skip WPT regardless.
         skipped_directories |= set(self.WPT_DIRS)
@@ -850,8 +903,16 @@
 
     # When collecting test cases, we include any file with these extensions.
     supported_file_extensions = set([
-        '.html', '.xml', '.xhtml', '.xht', '.pl',
-        '.htm', '.php', '.svg', '.mht', '.pdf',
+        '.html',
+        '.xml',
+        '.xhtml',
+        '.xht',
+        '.pl',
+        '.htm',
+        '.php',
+        '.svg',
+        '.mht',
+        '.pdf',
     ])
 
     def _has_supported_extension(self, filename):
@@ -862,24 +923,30 @@
     def is_non_wpt_test_file(self, dirname, filename):
         # Convert dirname to a relative path to web_tests with slashes
         # normalized and ensure it has a trailing slash.
-        normalized_test_dir = self.relative_test_filename(dirname) + self.TEST_PATH_SEPARATOR
-        if any(normalized_test_dir.startswith(d + self.TEST_PATH_SEPARATOR) for d in self.WPT_DIRS):
+        normalized_test_dir = self.relative_test_filename(
+            dirname) + self.TEST_PATH_SEPARATOR
+        if any(
+                normalized_test_dir.startswith(d + self.TEST_PATH_SEPARATOR)
+                for d in self.WPT_DIRS):
             return False
         extension = self._filesystem.splitext(filename)[1]
         if 'inspector-protocol' in dirname and extension == '.js':
             return True
         if 'devtools' in dirname and extension == '.js':
             return True
-        return (self._has_supported_extension(filename) and
-                not Port.is_reference_html_file(self._filesystem, dirname, filename))
+        return (self._has_supported_extension(filename)
+                and not Port.is_reference_html_file(self._filesystem, dirname,
+                                                    filename))
 
     @memoized
     def wpt_manifest(self, path):
         assert path in self.WPT_DIRS
         # Convert '/' to the platform-specific separator.
         path = self._filesystem.normpath(path)
-        manifest_path = self._filesystem.join(self.web_tests_dir(), path, MANIFEST_NAME)
-        if not self._filesystem.exists(manifest_path) or self.get_option('manifest_update', True):
+        manifest_path = self._filesystem.join(self.web_tests_dir(), path,
+                                              MANIFEST_NAME)
+        if not self._filesystem.exists(manifest_path) or self.get_option(
+                'manifest_update', True):
             _log.debug('Generating MANIFEST.json for %s...', path)
             WPTManifest.ensure_manifest(self, path)
         return WPTManifest(self._filesystem.read_text_file(manifest_path))
@@ -913,10 +980,8 @@
         subdirectories.
         """
         dirname, basename = self.split_test(test_name)
-        return (
-            self._natural_sort_key(dirname + self.TEST_PATH_SEPARATOR),
-            self._natural_sort_key(basename)
-        )
+        return (self._natural_sort_key(dirname + self.TEST_PATH_SEPARATOR),
+                self._natural_sort_key(basename))
 
     def _natural_sort_key(self, string_to_split):
         """Turns a string into a list of string and number chunks.
@@ -926,6 +991,7 @@
         http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html
         http://nedbatchelder.com/blog/200712.html#e20071211T054956
         """
+
         def tryint(val):
             try:
                 return int(val)
@@ -938,7 +1004,10 @@
         """Returns the list of top-level test directories."""
         web_tests_dir = self.web_tests_dir()
         fs = self._filesystem
-        return [d for d in fs.listdir(web_tests_dir) if fs.isdir(fs.join(web_tests_dir, d))]
+        return [
+            d for d in fs.listdir(web_tests_dir)
+            if fs.isdir(fs.join(web_tests_dir, d))
+        ]
 
     @memoized
     def test_isfile(self, test_name):
@@ -1011,7 +1080,7 @@
     def web_tests_dir(self):
         custom_web_tests_dir = self.get_option('layout_tests_directory')
         if custom_web_tests_dir:
-            return  self._filesystem.abspath(custom_web_tests_dir)
+            return self._filesystem.abspath(custom_web_tests_dir)
         return self._path_finder.web_tests_dir()
 
     def skips_test(self, test):
@@ -1021,7 +1090,8 @@
         only or because the test is marked as WontFix, but *not* if the test
         is only marked as Skip indicating a temporary skip.
         """
-        return self.skipped_due_to_smoke_tests(test) or self.skipped_in_never_fix_tests(test)
+        return self.skipped_due_to_smoke_tests(
+            test) or self.skipped_in_never_fix_tests(test)
 
     @memoized
     def _tests_from_file(self, filename):
@@ -1067,7 +1137,8 @@
         contents = self._filesystem.read_text_file(path)
         test_expectations = TestExpectations(tags=self.get_platform_tags())
         test_expectations.parse_tagged_list(contents)
-        return ResultType.Skip in test_expectations.expectations_for(test).results
+        return ResultType.Skip in test_expectations.expectations_for(
+            test).results
 
     def path_to_never_fix_tests_file(self):
         return self._filesystem.join(self.web_tests_dir(), 'NeverFixTests')
@@ -1129,7 +1200,8 @@
     @memoized
     def name_for_test(self, test_name):
         test_base = self.lookup_virtual_test_base(test_name)
-        if test_base and not self._filesystem.exists(self.abspath_for_test(test_name)):
+        if test_base and not self._filesystem.exists(
+                self.abspath_for_test(test_name)):
             return test_base
         return test_name
 
@@ -1144,7 +1216,8 @@
         """Returns the absolute path directory which will store all web tests outputted
         files. It may include a sub directory for artifacts and it may store performance test results."""
         if not self._results_directory:
-            option_val = self.get_option('results_directory') or self.default_results_directory()
+            option_val = self.get_option(
+                'results_directory') or self.default_results_directory()
             # TODO(crbug.com/1027708): There are several blink tests step
             # configuration files in the infra repository which append the
             # layout-test-results to the value passed in for the
@@ -1162,7 +1235,8 @@
         """Returns path to artifacts sub directory of the results directory. This
         directory will store test artifacts, which may include actual and expected
         output from web tests."""
-        return self._filesystem.join(self.results_directory(), ARTIFACTS_SUB_DIR)
+        return self._filesystem.join(self.results_directory(),
+                                     ARTIFACTS_SUB_DIR)
 
     def perf_results_directory(self):
         return self.results_directory()
@@ -1190,7 +1264,8 @@
             self._filesystem.rmtree(cachedir)
 
         if self._dump_reader:
-            self._filesystem.maybe_make_directory(self._dump_reader.crash_dumps_directory())
+            self._filesystem.maybe_make_directory(
+                self._dump_reader.crash_dumps_directory())
 
     def num_workers(self, requested_num_workers):
         """Returns the number of available workers (possibly less than the number requested)."""
@@ -1221,16 +1296,12 @@
         if 'TMPDIR' not in self.host.environ:
             self.host.environ['TMPDIR'] = tempfile.gettempdir()
         # CGIs are run directory-relative so they need an absolute TMPDIR
-        self.host.environ['TMPDIR'] = self._filesystem.abspath(self.host.environ['TMPDIR'])
+        self.host.environ['TMPDIR'] = self._filesystem.abspath(
+            self.host.environ['TMPDIR'])
         if self.host.platform.is_linux() or self.host.platform.is_freebsd():
             variables_to_copy += [
-                'XAUTHORITY',
-                'HOME',
-                'LANG',
-                'LD_LIBRARY_PATH',
-                'DBUS_SESSION_BUS_ADDRESS',
-                'XDG_DATA_DIRS',
-                'XDG_RUNTIME_DIR'
+                'XAUTHORITY', 'HOME', 'LANG', 'LD_LIBRARY_PATH',
+                'DBUS_SESSION_BUS_ADDRESS', 'XDG_DATA_DIRS', 'XDG_RUNTIME_DIR'
             ]
             clean_env['DISPLAY'] = self.host.environ.get('DISPLAY', ':1')
         if self.host.platform.is_mac():
@@ -1255,7 +1326,8 @@
 
     def show_results_html_file(self, results_filename):
         """Displays the given HTML file in a user's browser."""
-        return self.host.user.open_url(abspath_to_uri(self.host.platform, results_filename))
+        return self.host.user.open_url(
+            abspath_to_uri(self.host.platform, results_filename))
 
     def create_driver(self, worker_number, no_timeout=False):
         """Returns a newly created Driver subclass for starting/stopping the
@@ -1268,16 +1340,21 @@
         # be the case when the tests aren't run on the host platform.
         return False
 
-    def start_http_server(self, additional_dirs, number_of_drivers, output_dir=''):
+    def start_http_server(self,
+                          additional_dirs,
+                          number_of_drivers,
+                          output_dir=''):
         """Start a web server. Raise an error if it can't start or is already running.
 
         Ports can stub this out if they don't need a web server to be running.
         """
         assert not self._http_server, 'Already running an http server.'
         output_dir = output_dir or self.artifacts_directory()
-        server = apache_http.ApacheHTTP(self, output_dir,
-                                        additional_dirs=additional_dirs,
-                                        number_of_servers=(number_of_drivers * 4))
+        server = apache_http.ApacheHTTP(
+            self,
+            output_dir,
+            additional_dirs=additional_dirs,
+            number_of_servers=(number_of_drivers * 4))
         server.start()
         self._http_server = server
 
@@ -1288,7 +1365,10 @@
         """
         assert not self._websocket_server, 'Already running a websocket server.'
         output_dir = output_dir or self.artifacts_directory()
-        server = pywebsocket.PyWebSocket(self, output_dir, python_executable=self._options.python_executable)
+        server = pywebsocket.PyWebSocket(
+            self,
+            output_dir,
+            python_executable=self._options.python_executable)
         server.start()
         self._websocket_server = server
 
@@ -1322,18 +1402,23 @@
     def http_server_requires_http_protocol_options_unsafe(self):
         httpd_path = self.path_to_apache()
         intentional_syntax_error = 'INTENTIONAL_SYNTAX_ERROR'
-        cmd = [httpd_path,
-               '-t',
-               '-f', self.path_to_apache_config_file(),
-               '-C', 'ServerRoot "%s"' % self.apache_server_root(),
-               '-C', 'HttpProtocolOptions Unsafe',
-               '-C', intentional_syntax_error]
+        # yapf: disable
+        cmd = [
+            httpd_path,
+            '-t',
+            '-f', self.path_to_apache_config_file(),
+            '-C', 'ServerRoot "%s"' % self.apache_server_root(),
+            '-C', 'HttpProtocolOptions Unsafe',
+            '-C', intentional_syntax_error
+        ]
+        # yapf: enable
         env = self.setup_environ_for_server()
 
         def error_handler(err):
             pass
-        output = self._executive.run_command(cmd, env=env,
-                                             error_handler=error_handler)
+
+        output = self._executive.run_command(
+            cmd, env=env, error_handler=error_handler)
         # If apache complains about the intentional error, it apparently
         # accepted the HttpProtocolOptions directive, and we should add it.
         return intentional_syntax_error in output
@@ -1361,7 +1446,9 @@
     def test_configuration(self):
         """Returns the current TestConfiguration for the port."""
         if not self._test_configuration:
-            self._test_configuration = TestConfiguration(self._version, self._architecture, self._options.configuration.lower())
+            self._test_configuration = TestConfiguration(
+                self._version, self._architecture,
+                self._options.configuration.lower())
         return self._test_configuration
 
     # FIXME: Belongs on a Platform object.
@@ -1392,24 +1479,27 @@
         test_configurations = []
         for version, architecture in self.ALL_SYSTEMS:
             for build_type in self.ALL_BUILD_TYPES:
-                test_configurations.append(TestConfiguration(version, architecture, build_type))
+                test_configurations.append(
+                    TestConfiguration(version, architecture, build_type))
         return test_configurations
 
     def _flag_specific_expectations_path(self):
         config_name = self._flag_specific_config_name()
         if config_name:
-            return self._filesystem.join(
-                self.web_tests_dir(), self.FLAG_EXPECTATIONS_PREFIX, config_name)
+            return self._filesystem.join(self.web_tests_dir(),
+                                         self.FLAG_EXPECTATIONS_PREFIX,
+                                         config_name)
 
     def _flag_specific_baseline_search_path(self):
         config_name = self._flag_specific_config_name()
         if not config_name:
             return []
-        flag_dir = self._filesystem.join(
-            self.web_tests_dir(), 'flag-specific', config_name)
+        flag_dir = self._filesystem.join(self.web_tests_dir(), 'flag-specific',
+                                         config_name)
         platform_dirs = [
             self._filesystem.join(flag_dir, 'platform', platform_dir)
-            for platform_dir in self.FALLBACK_PATHS[self.version()]]
+            for platform_dir in self.FALLBACK_PATHS[self.version()]
+        ]
         return platform_dirs + [flag_dir]
 
     def expectations_dict(self):
@@ -1437,20 +1527,24 @@
         for path in self.get_option('additional_expectations', []):
             expanded_path = self._filesystem.expanduser(path)
             if self._filesystem.exists(expanded_path):
-                _log.debug("reading additional_expectations from path '%s'", path)
-                expectations[path] = self._filesystem.read_text_file(expanded_path)
+                _log.debug("reading additional_expectations from path '%s'",
+                           path)
+                expectations[path] = self._filesystem.read_text_file(
+                    expanded_path)
             else:
                 # TODO(rmhasan): Fix additional expectation paths for
                 # not_site_per_process_blink_web_tests, then change this back
                 # to raising exceptions for incorrect expectation paths.
-                _log.warning("additional_expectations path '%s' does not exist", path)
+                _log.warning(
+                    "additional_expectations path '%s' does not exist", path)
         return expectations
 
     def all_expectations_dict(self):
         """Returns an OrderedDict of name -> expectations strings."""
         expectations = self.expectations_dict()
 
-        flag_path = self._filesystem.join(self.web_tests_dir(), self.FLAG_EXPECTATIONS_PREFIX)
+        flag_path = self._filesystem.join(self.web_tests_dir(),
+                                          self.FLAG_EXPECTATIONS_PREFIX)
         if not self._filesystem.exists(flag_path):
             return expectations
 
@@ -1464,7 +1558,8 @@
                 try:
                     expectations[path] = self._filesystem.read_text_file(path)
                 except UnicodeDecodeError:
-                    _log.error('Failed to read expectations file: \'%s\'', path)
+                    _log.error('Failed to read expectations file: \'%s\'',
+                               path)
                     raise
 
         return expectations
@@ -1473,12 +1568,14 @@
         if not self.get_option('ignore_flaky_tests'):
             return {}
 
-        full_port_name = self.determine_full_port_name(self.host, self._options, self.port_name)
+        full_port_name = self.determine_full_port_name(
+            self.host, self._options, self.port_name)
         builder_category = self.get_option('ignore_builder_category', 'layout')
         factory = BotTestExpectationsFactory(self.host.builders)
         # FIXME: This only grabs release builder's flakiness data. If we're running debug,
         # when we should grab the debug builder's data.
-        expectations = factory.expectations_for_port(full_port_name, builder_category)
+        expectations = factory.expectations_for_port(full_port_name,
+                                                     builder_category)
 
         if not expectations:
             return {}
@@ -1502,7 +1599,8 @@
             self.path_to_generic_test_expectations_file(),
             self.path_to_webdriver_expectations_file(),
             self._filesystem.join(self.web_tests_dir(), 'NeverFixTests'),
-            self._filesystem.join(self.web_tests_dir(), 'StaleTestExpectations'),
+            self._filesystem.join(self.web_tests_dir(),
+                                  'StaleTestExpectations'),
             self._filesystem.join(self.web_tests_dir(), 'SlowTests'),
             self._flag_specific_expectations_path()
         ])
@@ -1524,7 +1622,8 @@
 
     @memoized
     def path_to_webdriver_expectations_file(self):
-        return self._filesystem.join(self.web_tests_dir(), 'WebDriverExpectations')
+        return self._filesystem.join(self.web_tests_dir(),
+                                     'WebDriverExpectations')
 
     def repository_path(self):
         """Returns the repository path for the chromium code base."""
@@ -1561,24 +1660,28 @@
 
         This is needed only by ports that use the apache_http_server module.
         """
-        config_file_from_env = self.host.environ.get('WEBKIT_HTTP_SERVER_CONF_PATH')
+        config_file_from_env = self.host.environ.get(
+            'WEBKIT_HTTP_SERVER_CONF_PATH')
         if config_file_from_env:
             if not self._filesystem.exists(config_file_from_env):
-                raise IOError('%s was not found on the system' % config_file_from_env)
+                raise IOError(
+                    '%s was not found on the system' % config_file_from_env)
             return config_file_from_env
 
         config_file_name = self._apache_config_file_name_for_platform()
-        return self._filesystem.join(self.apache_config_directory(), config_file_name)
+        return self._filesystem.join(self.apache_config_directory(),
+                                     config_file_name)
 
     def _apache_version(self):
         config = self._executive.run_command([self.path_to_apache(), '-v'])
         # Log version including patch level.
-        _log.debug('Found apache version %s', re.sub(
-            r'(?:.|\n)*Server version: Apache/(\d+\.\d+(?:\.\d+)?)(?:.|\n)*',
-            r'\1', config))
-        return re.sub(
-            r'(?:.|\n)*Server version: Apache/(\d+\.\d+)(?:.|\n)*',
-            r'\1', config)
+        _log.debug(
+            'Found apache version %s',
+            re.sub(
+                r'(?:.|\n)*Server version: Apache/(\d+\.\d+(?:\.\d+)?)(?:.|\n)*',
+                r'\1', config))
+        return re.sub(r'(?:.|\n)*Server version: Apache/(\d+\.\d+)(?:.|\n)*',
+                      r'\1', config)
 
     def _apache_config_file_name_for_platform(self):
         if self.host.platform.is_linux():
@@ -1586,7 +1689,8 @@
 
             custom_configurations = ['arch', 'debian', 'fedora', 'redhat']
             if distribution in custom_configurations:
-                return '%s-httpd-%s.conf' % (distribution, self._apache_version())
+                return '%s-httpd-%s.conf' % (distribution,
+                                             self._apache_version())
 
         return 'apache2-httpd-' + self._apache_version() + '.conf'
 
@@ -1605,7 +1709,8 @@
         """Return the absolute path to the top of the baseline tree for a
         given platform directory.
         """
-        return self._filesystem.join(self.web_tests_dir(), 'platform', platform_dir)
+        return self._filesystem.join(self.web_tests_dir(), 'platform',
+                                     platform_dir)
 
     def _driver_class(self):
         """Returns the port's driver implementation."""
@@ -1626,7 +1731,8 @@
             # serialize access to it across all the concurrently running drivers.
 
             llvm_symbolizer_path = self._path_from_chromium_base(
-                'third_party', 'llvm-build', 'Release+Asserts', 'bin', 'llvm-symbolizer')
+                'third_party', 'llvm-build', 'Release+Asserts', 'bin',
+                'llvm-symbolizer')
             if self._filesystem.exists(llvm_symbolizer_path):
                 env = self.host.environ.copy()
                 env['LLVM_SYMBOLIZER_PATH'] = llvm_symbolizer_path
@@ -1636,9 +1742,13 @@
                 'tools', 'valgrind', 'asan', 'asan_symbolize.py')
             sanitizer_strip_path_prefix = 'Release/../../'
             if self._filesystem.exists(sanitizer_filter_path):
-                stderr = self._executive.run_command(
-                    ['flock', sys.executable, sanitizer_filter_path, sanitizer_strip_path_prefix],
-                    input=stderr, decode_output=False, env=env)
+                stderr = self._executive.run_command([
+                    'flock', sys.executable, sanitizer_filter_path,
+                    sanitizer_strip_path_prefix
+                ],
+                                                     input=stderr,
+                                                     decode_output=False,
+                                                     env=env)
 
         name_str = name or '<unknown process name>'
         pid_str = str(pid or '<unknown>')
@@ -1655,10 +1765,10 @@
         else:
             stderr_lines = [u'<empty>']
 
-        return (stderr,
-                'crash log for %s (pid %s):\n%s\n%s\n' % (name_str, pid_str,
-                                                          '\n'.join(('STDOUT: ' + l) for l in stdout_lines),
-                                                          '\n'.join(('STDERR: ' + l) for l in stderr_lines)),
+        return (stderr, 'crash log for %s (pid %s):\n%s\n%s\n' %
+                (name_str, pid_str, '\n'.join(
+                    ('STDOUT: ' + l) for l in stdout_lines), '\n'.join(
+                        ('STDERR: ' + l) for l in stderr_lines)),
                 self._get_crash_site(stderr_lines))
 
     def _get_crash_site(self, stderr_lines):
@@ -1686,16 +1796,22 @@
 
     def virtual_test_suites(self):
         if self._virtual_test_suites is None:
-            path_to_virtual_test_suites = self._filesystem.join(self.web_tests_dir(), 'VirtualTestSuites')
-            assert self._filesystem.exists(path_to_virtual_test_suites), path_to_virtual_test_suites + ' not found'
+            path_to_virtual_test_suites = self._filesystem.join(
+                self.web_tests_dir(), 'VirtualTestSuites')
+            assert self._filesystem.exists(path_to_virtual_test_suites), \
+                path_to_virtual_test_suites + ' not found'
             try:
-                test_suite_json = json.loads(self._filesystem.read_text_file(path_to_virtual_test_suites))
+                test_suite_json = json.loads(
+                    self._filesystem.read_text_file(
+                        path_to_virtual_test_suites))
                 self._virtual_test_suites = []
                 for json_config in test_suite_json:
                     vts = VirtualTestSuite(**json_config)
-                    if any(vts.full_prefix == s.full_prefix for s in self._virtual_test_suites):
-                        raise ValueError('{} contains entries with the same prefix: {!r}. Please combine them'
-                                         .format(path_to_virtual_test_suites, json_config))
+                    if any(vts.full_prefix == s.full_prefix
+                           for s in self._virtual_test_suites):
+                        raise ValueError(
+                            '{} contains entries with the same prefix: {!r}. Please combine them'
+                            .format(path_to_virtual_test_suites, json_config))
                     self._virtual_test_suites.append(vts)
             except ValueError as error:
                 raise ValueError('{} is not a valid JSON file: {}'.format(
@@ -1718,33 +1834,42 @@
             # TODO(crbug.com/982208): If we can pass in the set of paths and
             # maps then this could be more efficient.
             if suite.bases:
-                tests.extend(map(lambda x : suite.full_prefix + x, self.real_tests(suite.bases)))
+                tests.extend(
+                    map(lambda x: suite.full_prefix + x,
+                        self.real_tests(suite.bases)))
 
         if suite_paths:
-            tests.extend(self._wpt_test_urls_matching_paths(suite_paths, suite_prefixes))
+            tests.extend(
+                self._wpt_test_urls_matching_paths(suite_paths,
+                                                   suite_prefixes))
         return tests
 
     def _all_virtual_tests_for_suite(self, suite):
         if not suite.bases:
             return []
         tests = []
-        tests.extend(map(lambda x : suite.full_prefix + x, self.real_tests(suite.bases)))
-        tests.extend(self._wpt_test_urls_matching_paths(suite.bases,
-                                                        [suite.full_prefix] * len(suite.bases)))
+        tests.extend(
+            map(lambda x: suite.full_prefix + x, self.real_tests(suite.bases)))
+        tests.extend(
+            self._wpt_test_urls_matching_paths(
+                suite.bases, [suite.full_prefix] * len(suite.bases)))
         return tests
 
     def _virtual_tests_matching_paths(self, paths):
         tests = []
         normalized_paths = [self.normalize_test_name(p) for p in paths]
         for suite in self.virtual_test_suites():
-            if not any(p.startswith(suite.full_prefix) for p in normalized_paths):
+            if not any(
+                    p.startswith(suite.full_prefix) for p in normalized_paths):
                 continue
             for test in self._all_virtual_tests_for_suite(suite):
                 if any(test.startswith(p) for p in normalized_paths):
                     tests.append(test)
 
         if any(self._path_has_wildcard(path) for path in paths):
-            _log.warning('WARNING: Wildcards in paths are not supported for virtual test suites.')
+            _log.warning(
+                'WARNING: Wildcards in paths are not supported for virtual test suites.'
+            )
 
         return tests
 
@@ -1764,15 +1889,18 @@
         # Generate the manifest files if needed and then read them. Do this once
         # for this whole method as the file is large and generation/loading is
         # slow.
-        wpts = [(wpt_path, self.wpt_manifest(wpt_path)) for wpt_path in self.WPT_DIRS]
+        wpts = [(wpt_path, self.wpt_manifest(wpt_path))
+                for wpt_path in self.WPT_DIRS]
 
-        _log.debug("Finding WPT tests that match %d path prefixes", len(filter_paths));
+        _log.debug("Finding WPT tests that match %d path prefixes",
+                   len(filter_paths))
 
         tests = []
         # This walks through the set of paths where we should look for tests.
         # For each path, a map can be provided that we replace 'path' with in
         # the result.
-        for filter_path, virtual_prefix in itertools.izip_longest(filter_paths, virtual_prefixes):
+        for filter_path, virtual_prefix in itertools.izip_longest(
+                filter_paths, virtual_prefixes):
             # This is to make sure "external[\\/]?" can also match to
             # external/wpt.
             # TODO(robertma): Remove this special case when external/wpt is
@@ -1810,9 +1938,11 @@
                     # to only match the exact directory name and not directories
                     # with the filter as a prefix.
                     if wpt_manifest.is_test_file(filter_path_from_wpt):
-                        filter_path_from_wpt = re.sub(r'\.js$', '.', filter_path_from_wpt)
+                        filter_path_from_wpt = re.sub(r'\.js$', '.',
+                                                      filter_path_from_wpt)
                     elif not wpt_manifest.is_test_url(filter_path_from_wpt):
-                        filter_path_from_wpt = filter_path_from_wpt.rstrip('/') + '/'
+                        filter_path_from_wpt = filter_path_from_wpt.rstrip(
+                            '/') + '/'
 
                 # We now have a path to an actual test directory or file on
                 # disk, in unix format, relative to the WPT directory.
@@ -1831,7 +1961,8 @@
                         # directory. If a |virtual_prefix| was given, we prepend
                         # that to the result.
                         prefix = virtual_prefix if virtual_prefix else ''
-                        tests.append(prefix + wpt_path + '/' + test_path_from_wpt)
+                        tests.append(prefix + wpt_path + '/' +
+                                     test_path_from_wpt)
         return tests
 
     def _lookup_virtual_suite(self, test_name):
@@ -1845,10 +1976,12 @@
         if not suite:
             return None
         assert test_name.startswith(suite.full_prefix)
-        maybe_base = self.normalize_test_name(test_name[len(suite.full_prefix):])
+        maybe_base = self.normalize_test_name(
+            test_name[len(suite.full_prefix):])
         for base in suite.bases:
             normalized_base = self.normalize_test_name(base)
-            if normalized_base.startswith(maybe_base) or maybe_base.startswith(normalized_base):
+            if normalized_base.startswith(maybe_base) or maybe_base.startswith(
+                    normalized_base):
                 return maybe_base
         return None
 
@@ -1867,8 +2000,7 @@
         target = target or self.get_option('target')
         return self._filesystem.join(
             self._path_from_chromium_base(),
-            self.get_option('build_directory') or 'out',
-            target, *comps)
+            self.get_option('build_directory') or 'out', target, *comps)
 
     def _check_driver_build_up_to_date(self, target):
         # FIXME: We should probably get rid of this check altogether as it has
@@ -1885,11 +2017,13 @@
             debug_mtime = self._filesystem.mtime(debug_path)
             release_mtime = self._filesystem.mtime(release_path)
 
-            if (debug_mtime > release_mtime and target == 'Release' or
-                    release_mtime > debug_mtime and target == 'Debug'):
+            if (debug_mtime > release_mtime and target == 'Release'
+                    or release_mtime > debug_mtime and target == 'Debug'):
                 most_recent_binary = 'Release' if target == 'Debug' else 'Debug'
-                _log.warning('You are running the %s binary. However the %s binary appears to be more recent. '
-                             'Please pass --%s.', target, most_recent_binary, most_recent_binary.lower())
+                _log.warning(
+                    'You are running the %s binary. However the %s binary appears to be more recent. '
+                    'Please pass --%s.', target, most_recent_binary,
+                    most_recent_binary.lower())
                 _log.warning('')
         # This will fail if we don't have both a debug and release binary.
         # That's fine because, in this case, we must already be running the
@@ -1914,12 +2048,14 @@
                     exists = True
                     break
             if not exists:
-                message = 'You are missing %s under %s.' % (font_file, font_dirs)
+                message = 'You are missing %s under %s.' % (font_file,
+                                                            font_dirs)
                 if package:
                     message += ' Try installing %s. See build instructions.' % package
 
                 _log.error(message)
-                raise TestRunException(exit_codes.SYS_DEPS_EXIT_STATUS, message)
+                raise TestRunException(exit_codes.SYS_DEPS_EXIT_STATUS,
+                                       message)
         return result
 
     @staticmethod
@@ -1960,8 +2096,8 @@
         names_after_split = test_name.split(
             Port.WEBDRIVER_SUBTEST_PYTEST_SEPARATOR)
 
-        assert len(names_after_split) <= 2, "%s has a length greater than 2 after split by ::" % (
-            test_name)
+        assert len(names_after_split) <= 2, \
+            "%s has a length greater than 2 after split by ::" % (test_name)
         if len(names_after_split) == 1:
             return (names_after_split[0], None)
 
@@ -1975,9 +2111,9 @@
 
 
 class VirtualTestSuite(object):
-
     def __init__(self, prefix=None, bases=None, args=None):
-        assert VALID_FILE_NAME_REGEX.match(prefix), "Virtual test suite prefix '{}' contains invalid characters".format(prefix)
+        assert VALID_FILE_NAME_REGEX.match(prefix), \
+            "Virtual test suite prefix '{}' contains invalid characters".format(prefix)
         assert isinstance(bases, list)
         assert args
         assert isinstance(args, list)
@@ -1986,4 +2122,5 @@
         self.args = args
 
     def __repr__(self):
-        return "VirtualTestSuite('%s', %s, %s)" % (self.full_prefix, self.bases, self.args)
+        return "VirtualTestSuite('%s', %s, %s)" % (self.full_prefix,
+                                                   self.bases, self.args)
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py
index fc9f1c40..16b12d7 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py
@@ -40,12 +40,15 @@
 from blinkpy.web_tests.port.base import Port, VirtualTestSuite
 from blinkpy.web_tests.port.test import add_unit_tests_to_mock_filesystem, WEB_TEST_DIR, TestPort
 
-
 MOCK_WEB_TESTS = '/mock-checkout/' + RELATIVE_WEB_TESTS
 
-class PortTest(LoggingTestCase):
 
-    def make_port(self, executive=None, with_tests=False, port_name=None, **kwargs):
+class PortTest(LoggingTestCase):
+    def make_port(self,
+                  executive=None,
+                  with_tests=False,
+                  port_name=None,
+                  **kwargs):
         host = MockSystemHost()
         if executive:
             host.executive = executive
@@ -64,14 +67,18 @@
         self.assertEqual(Port.WPT_DIRS.values()[-1], '/')
 
     def test_validate_wpt_regex(self):
-        self.assertEquals(Port.WPT_REGEX.match('external/wpt/foo/bar.html').groups(),
-                          ('external/wpt', 'foo/bar.html'))
-        self.assertEquals(Port.WPT_REGEX.match('virtual/test/external/wpt/foo/bar.html').groups(),
-                          ('external/wpt', 'foo/bar.html'))
-        self.assertEquals(Port.WPT_REGEX.match('wpt_internal/foo/bar.html').groups(),
-                          ('wpt_internal', 'foo/bar.html'))
-        self.assertEquals(Port.WPT_REGEX.match('virtual/test/wpt_internal/foo/bar.html').groups(),
-                          ('wpt_internal', 'foo/bar.html'))
+        self.assertEquals(
+            Port.WPT_REGEX.match('external/wpt/foo/bar.html').groups(),
+            ('external/wpt', 'foo/bar.html'))
+        self.assertEquals(
+            Port.WPT_REGEX.match('virtual/test/external/wpt/foo/bar.html').
+            groups(), ('external/wpt', 'foo/bar.html'))
+        self.assertEquals(
+            Port.WPT_REGEX.match('wpt_internal/foo/bar.html').groups(),
+            ('wpt_internal', 'foo/bar.html'))
+        self.assertEquals(
+            Port.WPT_REGEX.match('virtual/test/wpt_internal/foo/bar.html').
+            groups(), ('wpt_internal', 'foo/bar.html'))
 
     def test_setup_test_run(self):
         port = self.make_port()
@@ -80,8 +87,10 @@
 
     def test_test_dirs(self):
         port = self.make_port()
-        port.host.filesystem.write_text_file(port.web_tests_dir() + '/canvas/test', '')
-        port.host.filesystem.write_text_file(port.web_tests_dir() + '/css2.1/test', '')
+        port.host.filesystem.write_text_file(
+            port.web_tests_dir() + '/canvas/test', '')
+        port.host.filesystem.write_text_file(
+            port.web_tests_dir() + '/css2.1/test', '')
         dirs = port.test_dirs()
         self.assertIn('canvas', dirs)
         self.assertIn('css2.1', dirs)
@@ -105,48 +114,61 @@
 
         # Normal test filename
         test_file = 'fast/test.html'
-        self.assertEqual(port.output_filename(test_file, '-expected', '.txt'),
-                         'fast/test-expected.txt')
-        self.assertEqual(port.output_filename(test_file, '-expected-mismatch', '.png'),
-                         'fast/test-expected-mismatch.png')
+        self.assertEqual(
+            port.output_filename(test_file, '-expected', '.txt'),
+            'fast/test-expected.txt')
+        self.assertEqual(
+            port.output_filename(test_file, '-expected-mismatch', '.png'),
+            'fast/test-expected-mismatch.png')
 
         # Test filename with query string
         test_file = 'fast/test.html?wss&run_type=1'
-        self.assertEqual(port.output_filename(test_file, '-expected', '.txt'),
-                         'fast/test_wss_run_type=1-expected.txt')
-        self.assertEqual(port.output_filename(test_file, '-actual', '.png'),
-                         'fast/test_wss_run_type=1-actual.png')
+        self.assertEqual(
+            port.output_filename(test_file, '-expected', '.txt'),
+            'fast/test_wss_run_type=1-expected.txt')
+        self.assertEqual(
+            port.output_filename(test_file, '-actual', '.png'),
+            'fast/test_wss_run_type=1-actual.png')
 
         # Test filename with query string containing a dot
         test_file = 'fast/test.html?include=HTML.*'
-        self.assertEqual(port.output_filename(test_file, '-expected', '.txt'),
-                         'fast/test_include=HTML._-expected.txt')
-        self.assertEqual(port.output_filename(test_file, '-actual', '.png'),
-                         'fast/test_include=HTML._-actual.png')
+        self.assertEqual(
+            port.output_filename(test_file, '-expected', '.txt'),
+            'fast/test_include=HTML._-expected.txt')
+        self.assertEqual(
+            port.output_filename(test_file, '-actual', '.png'),
+            'fast/test_include=HTML._-actual.png')
 
     def test_expected_baselines_basic(self):
         port = self.make_port(port_name='foo')
         port.FALLBACK_PATHS = {'': ['foo']}
         test_file = 'fast/test.html'
-        port.host.filesystem.write_text_file(MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
+        port.host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
 
         # The default baseline doesn't exist.
-        self.assertEqual(port.expected_baselines(test_file, '.txt'),
-                         [(None, 'fast/test-expected.txt')])
-        self.assertIsNone(port.expected_filename(test_file, '.txt', return_default=False))
-        self.assertEqual(port.expected_filename(test_file, '.txt'),
-                         MOCK_WEB_TESTS + 'fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_baselines(test_file, '.txt'),
+            [(None, 'fast/test-expected.txt')])
+        self.assertIsNone(
+            port.expected_filename(test_file, '.txt', return_default=False))
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt'),
+            MOCK_WEB_TESTS + 'fast/test-expected.txt')
         self.assertIsNone(port.fallback_expected_filename(test_file, '.txt'))
 
         # The default baseline exists.
         port.host.filesystem.write_text_file(
             MOCK_WEB_TESTS + 'fast/test-expected.txt', 'foo')
-        self.assertEqual(port.expected_baselines(test_file, '.txt'),
-                         [(MOCK_WEB_TESTS[:-1], 'fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(test_file, '.txt', return_default=False),
-                         MOCK_WEB_TESTS + 'fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(test_file, '.txt'),
-                         MOCK_WEB_TESTS + 'fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_baselines(test_file, '.txt'),
+            [(MOCK_WEB_TESTS[:-1], 'fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt', return_default=False),
+            MOCK_WEB_TESTS + 'fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt'),
+            MOCK_WEB_TESTS + 'fast/test-expected.txt')
         self.assertIsNone(port.fallback_expected_filename(test_file, '.txt'))
         port.host.filesystem.remove(MOCK_WEB_TESTS + 'fast/test-expected.txt')
 
@@ -154,18 +176,22 @@
         port = self.make_port(port_name='foo')
         port.FALLBACK_PATHS = {'': ['foo']}
         test_file = 'fast/test.html'
-        port.host.filesystem.write_text_file(MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
+        port.host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
 
-        self.assertEqual(port.expected_baselines(test_file, '.txt', match=False),
-                         [(None, 'fast/test-expected-mismatch.txt')])
-        self.assertEqual(port.expected_filename(test_file, '.txt', match=False),
-                         MOCK_WEB_TESTS + 'fast/test-expected-mismatch.txt')
+        self.assertEqual(
+            port.expected_baselines(test_file, '.txt', match=False),
+            [(None, 'fast/test-expected-mismatch.txt')])
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt', match=False),
+            MOCK_WEB_TESTS + 'fast/test-expected-mismatch.txt')
 
     def test_expected_baselines_platform_specific(self):
         port = self.make_port(port_name='foo')
         port.FALLBACK_PATHS = {'': ['foo']}
         test_file = 'fast/test.html'
-        port.host.filesystem.write_text_file(MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
+        port.host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
 
         self.assertEqual(port.baseline_version_dir(),
                          MOCK_WEB_TESTS + 'platform/foo')
@@ -173,32 +199,40 @@
             MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt', 'foo')
 
         # The default baseline doesn't exist.
-        self.assertEqual(port.expected_baselines(test_file, '.txt'),
-                         [(MOCK_WEB_TESTS + 'platform/foo', 'fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(test_file, '.txt'),
-                         MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(test_file, '.txt', return_default=False),
-                         MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_baselines(test_file, '.txt'),
+            [(MOCK_WEB_TESTS + 'platform/foo', 'fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt'),
+            MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt', return_default=False),
+            MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
         self.assertIsNone(port.fallback_expected_filename(test_file, '.txt'))
 
         # The default baseline exists.
         port.host.filesystem.write_text_file(
             MOCK_WEB_TESTS + 'fast/test-expected.txt', 'foo')
-        self.assertEqual(port.expected_baselines(test_file, '.txt'),
-                         [(MOCK_WEB_TESTS + 'platform/foo', 'fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(test_file, '.txt'),
-                         MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(test_file, '.txt', return_default=False),
-                         MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
-        self.assertEquals(port.fallback_expected_filename(test_file, '.txt'),
-                          MOCK_WEB_TESTS + 'fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_baselines(test_file, '.txt'),
+            [(MOCK_WEB_TESTS + 'platform/foo', 'fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt'),
+            MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt', return_default=False),
+            MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
+        self.assertEquals(
+            port.fallback_expected_filename(test_file, '.txt'),
+            MOCK_WEB_TESTS + 'fast/test-expected.txt')
         port.host.filesystem.remove(MOCK_WEB_TESTS + 'fast/test-expected.txt')
 
     def test_expected_baselines_flag_specific(self):
         port = self.make_port(port_name='foo')
         port.FALLBACK_PATHS = {'': ['foo']}
         test_file = 'fast/test.html'
-        port.host.filesystem.write_text_file(MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
+        port.host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
 
         # pylint: disable=protected-access
         port._options.additional_platform_directory = []
@@ -206,38 +240,52 @@
         self.assertEqual(port.baseline_search_path(), [
             MOCK_WEB_TESTS + 'flag-specific/special-flag/platform/foo',
             MOCK_WEB_TESTS + 'flag-specific/special-flag',
-            MOCK_WEB_TESTS + 'platform/foo'])
-        self.assertEqual(port.baseline_version_dir(),
-                         MOCK_WEB_TESTS + 'flag-specific/special-flag/platform/foo')
+            MOCK_WEB_TESTS + 'platform/foo'
+        ])
+        self.assertEqual(
+            port.baseline_version_dir(),
+            MOCK_WEB_TESTS + 'flag-specific/special-flag/platform/foo')
 
         # Flag-specific baseline
         port.host.filesystem.write_text_file(
             MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt', 'foo')
         port.host.filesystem.write_text_file(
-            MOCK_WEB_TESTS + 'flag-specific/special-flag/fast/test-expected.txt', 'foo')
-        self.assertEqual(port.expected_baselines(test_file, '.txt'),
-                         [(MOCK_WEB_TESTS + 'flag-specific/special-flag', 'fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(test_file, '.txt'),
-                         MOCK_WEB_TESTS + 'flag-specific/special-flag/fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(test_file, '.txt', return_default=False),
-                         MOCK_WEB_TESTS + 'flag-specific/special-flag/fast/test-expected.txt')
-        self.assertEqual(port.fallback_expected_filename(test_file, '.txt'),
-                         MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
+            MOCK_WEB_TESTS +
+            'flag-specific/special-flag/fast/test-expected.txt', 'foo')
+        self.assertEqual(
+            port.expected_baselines(test_file, '.txt'),
+            [(MOCK_WEB_TESTS + 'flag-specific/special-flag',
+              'fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt'), MOCK_WEB_TESTS +
+            'flag-specific/special-flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt',
+                                   return_default=False), MOCK_WEB_TESTS +
+            'flag-specific/special-flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.fallback_expected_filename(test_file, '.txt'),
+            MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
 
         # Flag-specific platform-specific baseline
         port.host.filesystem.write_text_file(
-            MOCK_WEB_TESTS + 'flag-specific/special-flag/platform/foo/fast/test-expected.txt', 'foo')
+            MOCK_WEB_TESTS +
+            'flag-specific/special-flag/platform/foo/fast/test-expected.txt',
+            'foo')
         self.assertEqual(
             port.expected_baselines(test_file, '.txt'),
-            [(MOCK_WEB_TESTS + 'flag-specific/special-flag/platform/foo', 'fast/test-expected.txt')])
+            [(MOCK_WEB_TESTS + 'flag-specific/special-flag/platform/foo',
+              'fast/test-expected.txt')])
         self.assertEqual(
-            port.expected_filename(test_file, '.txt'),
-            MOCK_WEB_TESTS + 'flag-specific/special-flag/platform/foo/fast/test-expected.txt')
+            port.expected_filename(test_file, '.txt'), MOCK_WEB_TESTS +
+            'flag-specific/special-flag/platform/foo/fast/test-expected.txt')
         self.assertEqual(
-            port.expected_filename(test_file, '.txt', return_default=False),
-            MOCK_WEB_TESTS + 'flag-specific/special-flag/platform/foo/fast/test-expected.txt')
-        self.assertEqual(port.fallback_expected_filename(test_file, '.txt'),
-                         MOCK_WEB_TESTS + 'flag-specific/special-flag/fast/test-expected.txt')
+            port.expected_filename(test_file, '.txt',
+                                   return_default=False), MOCK_WEB_TESTS +
+            'flag-specific/special-flag/platform/foo/fast/test-expected.txt')
+        self.assertEqual(
+            port.fallback_expected_filename(test_file, '.txt'), MOCK_WEB_TESTS
+            + 'flag-specific/special-flag/fast/test-expected.txt')
 
     def test_expected_baselines_virtual(self):
         port = self.make_port(port_name='foo')
@@ -248,110 +296,175 @@
             '[{ "prefix": "flag", "bases": ["fast"], "args": ["--flag"]}]')
 
         # The default baseline for base test
-        self.assertEqual(port.expected_baselines(virtual_test, '.txt'),
-                         [(None, 'virtual/flag/fast/test-expected.txt')])
-        self.assertIsNone(port.expected_filename(virtual_test, '.txt', return_default=False))
-        self.assertEqual(port.expected_filename(virtual_test, '.txt'),
-                         MOCK_WEB_TESTS + 'fast/test-expected.txt')
-        self.assertIsNone(port.expected_filename(virtual_test, '.txt', return_default=False, fallback_base_for_virtual=False))
-        self.assertEqual(port.expected_filename(virtual_test, '.txt', fallback_base_for_virtual=False),
-                         MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
-        self.assertIsNone(port.fallback_expected_filename(virtual_test, '.txt'))
+        self.assertEqual(
+            port.expected_baselines(virtual_test, '.txt'),
+            [(None, 'virtual/flag/fast/test-expected.txt')])
+        self.assertIsNone(
+            port.expected_filename(virtual_test, '.txt', return_default=False))
+        self.assertEqual(
+            port.expected_filename(virtual_test, '.txt'),
+            MOCK_WEB_TESTS + 'fast/test-expected.txt')
+        self.assertIsNone(
+            port.expected_filename(
+                virtual_test,
+                '.txt',
+                return_default=False,
+                fallback_base_for_virtual=False))
+        self.assertEqual(
+            port.expected_filename(
+                virtual_test, '.txt', fallback_base_for_virtual=False),
+            MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
+        self.assertIsNone(
+            port.fallback_expected_filename(virtual_test, '.txt'))
 
         # Platform-specific baseline for base test
         port.host.filesystem.write_text_file(
             MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt', 'foo')
-        self.assertEqual(port.expected_baselines(virtual_test, '.txt'),
-                         [(None, 'virtual/flag/fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(virtual_test, '.txt', return_default=False),
-                         MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(virtual_test, '.txt'),
-                         MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
-        self.assertIsNone(port.expected_filename(virtual_test, '.txt', return_default=False, fallback_base_for_virtual=False))
-        self.assertEqual(port.expected_filename(virtual_test, '.txt', fallback_base_for_virtual=False),
-                         MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
-        self.assertEqual(port.fallback_expected_filename(virtual_test, '.txt'),
-                         MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_baselines(virtual_test, '.txt'),
+            [(None, 'virtual/flag/fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(virtual_test, '.txt', return_default=False),
+            MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(virtual_test, '.txt'),
+            MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
+        self.assertIsNone(
+            port.expected_filename(
+                virtual_test,
+                '.txt',
+                return_default=False,
+                fallback_base_for_virtual=False))
+        self.assertEqual(
+            port.expected_filename(
+                virtual_test, '.txt', fallback_base_for_virtual=False),
+            MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.fallback_expected_filename(virtual_test, '.txt'),
+            MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
 
         # The default baseline for virtual test
         port.host.filesystem.write_text_file(
             MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt', 'foo')
-        self.assertEqual(port.expected_baselines(virtual_test, '.txt'),
-                         [(MOCK_WEB_TESTS[:-1], 'virtual/flag/fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(virtual_test, '.txt', return_default=False),
-                         MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(virtual_test, '.txt'),
-                         MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(virtual_test, '.txt', return_default=False, fallback_base_for_virtual=False),
-                         MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(virtual_test, '.txt', fallback_base_for_virtual=False),
-                         MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
-        self.assertEqual(port.fallback_expected_filename(virtual_test, '.txt'),
-                         MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_baselines(virtual_test, '.txt'),
+            [(MOCK_WEB_TESTS[:-1], 'virtual/flag/fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(virtual_test, '.txt', return_default=False),
+            MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(virtual_test, '.txt'),
+            MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(
+                virtual_test,
+                '.txt',
+                return_default=False,
+                fallback_base_for_virtual=False),
+            MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(
+                virtual_test, '.txt', fallback_base_for_virtual=False),
+            MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.fallback_expected_filename(virtual_test, '.txt'),
+            MOCK_WEB_TESTS + 'platform/foo/fast/test-expected.txt')
 
         # Platform-specific baseline for virtual test
         port.host.filesystem.write_text_file(
-            MOCK_WEB_TESTS + 'platform/foo/virtual/flag/fast/test-expected.txt', 'foo')
-        self.assertEqual(port.expected_baselines(virtual_test, '.txt'),
-                         [(MOCK_WEB_TESTS + 'platform/foo', 'virtual/flag/fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(virtual_test, '.txt', return_default=False),
-                         MOCK_WEB_TESTS + 'platform/foo/virtual/flag/fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(virtual_test, '.txt'),
-                         MOCK_WEB_TESTS + 'platform/foo/virtual/flag/fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(virtual_test, '.txt', return_default=False, fallback_base_for_virtual=False),
-                         MOCK_WEB_TESTS + 'platform/foo/virtual/flag/fast/test-expected.txt')
-        self.assertEqual(port.expected_filename(virtual_test, '.txt', fallback_base_for_virtual=False),
-                         MOCK_WEB_TESTS + 'platform/foo/virtual/flag/fast/test-expected.txt')
-        self.assertEqual(port.fallback_expected_filename(virtual_test, '.txt'),
-                         MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
+            MOCK_WEB_TESTS +
+            'platform/foo/virtual/flag/fast/test-expected.txt', 'foo')
+        self.assertEqual(
+            port.expected_baselines(virtual_test, '.txt'),
+            [(MOCK_WEB_TESTS + 'platform/foo',
+              'virtual/flag/fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(virtual_test, '.txt',
+                                   return_default=False), MOCK_WEB_TESTS +
+            'platform/foo/virtual/flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(virtual_test, '.txt'), MOCK_WEB_TESTS +
+            'platform/foo/virtual/flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(
+                virtual_test,
+                '.txt',
+                return_default=False,
+                fallback_base_for_virtual=False), MOCK_WEB_TESTS +
+            'platform/foo/virtual/flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_filename(
+                virtual_test, '.txt',
+                fallback_base_for_virtual=False), MOCK_WEB_TESTS +
+            'platform/foo/virtual/flag/fast/test-expected.txt')
+        self.assertEqual(
+            port.fallback_expected_filename(virtual_test, '.txt'),
+            MOCK_WEB_TESTS + 'virtual/flag/fast/test-expected.txt')
 
     def test_additional_platform_directory(self):
         port = self.make_port(port_name='foo')
         port.FALLBACK_PATHS = {'': ['foo']}
-        port.host.filesystem.write_text_file(MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
+        port.host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'VirtualTestSuites', '[]')
         test_file = 'fast/test.html'
 
         # Simple additional platform directory
         port._options.additional_platform_directory = ['/tmp/local-baselines']  # pylint: disable=protected-access
         self.assertEqual(port.baseline_version_dir(), '/tmp/local-baselines')
 
-        self.assertEqual(port.expected_baselines(test_file, '.txt'),
-                         [(None, 'fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(test_file, '.txt', return_default=False), None)
-        self.assertEqual(port.expected_filename(test_file, '.txt'),
-                         MOCK_WEB_TESTS + 'fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_baselines(test_file, '.txt'),
+            [(None, 'fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt', return_default=False),
+            None)
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt'),
+            MOCK_WEB_TESTS + 'fast/test-expected.txt')
 
-        port.host.filesystem.write_text_file('/tmp/local-baselines/fast/test-expected.txt', 'foo')
-        self.assertEqual(port.expected_baselines(test_file, '.txt'),
-                         [('/tmp/local-baselines', 'fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(test_file, '.txt'),
-                         '/tmp/local-baselines/fast/test-expected.txt')
+        port.host.filesystem.write_text_file(
+            '/tmp/local-baselines/fast/test-expected.txt', 'foo')
+        self.assertEqual(
+            port.expected_baselines(test_file, '.txt'),
+            [('/tmp/local-baselines', 'fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt'),
+            '/tmp/local-baselines/fast/test-expected.txt')
 
         # Multiple additional platform directories
-        port._options.additional_platform_directory = ['/foo', '/tmp/local-baselines']  # pylint: disable=protected-access
+        port._options.additional_platform_directory = [  # pylint: disable=protected-access
+            '/foo', '/tmp/local-baselines'
+        ]
         self.assertEqual(port.baseline_version_dir(), '/foo')
 
-        self.assertEqual(port.expected_baselines(test_file, '.txt'),
-                         [('/tmp/local-baselines', 'fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(test_file, '.txt'),
-                         '/tmp/local-baselines/fast/test-expected.txt')
+        self.assertEqual(
+            port.expected_baselines(test_file, '.txt'),
+            [('/tmp/local-baselines', 'fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt'),
+            '/tmp/local-baselines/fast/test-expected.txt')
 
-        port.host.filesystem.write_text_file('/foo/fast/test-expected.txt', 'foo')
-        self.assertEqual(port.expected_baselines(test_file, '.txt'),
-                         [('/foo', 'fast/test-expected.txt')])
-        self.assertEqual(port.expected_filename(test_file, '.txt'),
-                         '/foo/fast/test-expected.txt')
+        port.host.filesystem.write_text_file('/foo/fast/test-expected.txt',
+                                             'foo')
+        self.assertEqual(
+            port.expected_baselines(test_file, '.txt'),
+            [('/foo', 'fast/test-expected.txt')])
+        self.assertEqual(
+            port.expected_filename(test_file, '.txt'),
+            '/foo/fast/test-expected.txt')
 
     def test_nonexistant_expectations(self):
         port = self.make_port(port_name='foo')
         port.expectations_files = lambda: [MOCK_WEB_TESTS + 'platform/exists/TestExpectations',
                                            MOCK_WEB_TESTS + 'platform/nonexistant/TestExpectations']
-        port.host.filesystem.write_text_file(MOCK_WEB_TESTS + 'platform/exists/TestExpectations', '')
+        port.host.filesystem.write_text_file(
+            MOCK_WEB_TESTS + 'platform/exists/TestExpectations', '')
         self.assertEqual('\n'.join(port.expectations_dict().keys()),
                          MOCK_WEB_TESTS + 'platform/exists/TestExpectations')
 
     def _make_port_for_test_additional_expectations(self, options_dict={}):
-        port = self.make_port(port_name='foo', options=optparse.Values(options_dict))
+        port = self.make_port(
+            port_name='foo', options=optparse.Values(options_dict))
         port.host.filesystem.write_text_file(
             MOCK_WEB_TESTS + 'platform/foo/TestExpectations', '')
         port.host.filesystem.write_text_file(
@@ -367,22 +480,31 @@
         self.assertEqual(port.expectations_dict().values(), [])
 
     def test_additional_expectations_1(self):
-        port = self._make_port_for_test_additional_expectations(
-            {'additional_expectations': ['/tmp/additional-expectations-1.txt']})
+        port = self._make_port_for_test_additional_expectations({
+            'additional_expectations': ['/tmp/additional-expectations-1.txt']
+        })
         self.assertEqual(port.expectations_dict().values(), ['content1\n'])
 
     def test_additional_expectations_2(self):
-        port = self._make_port_for_test_additional_expectations(
-            {'additional_expectations': ['/tmp/additional-expectations-1.txt',
-                                         '/tmp/additional-expectations-2.txt']})
-        self.assertEqual(port.expectations_dict().values(), ['content1\n', 'content2\n'])
+        port = self._make_port_for_test_additional_expectations({
+            'additional_expectations': [
+                '/tmp/additional-expectations-1.txt',
+                '/tmp/additional-expectations-2.txt'
+            ]
+        })
+        self.assertEqual(port.expectations_dict().values(),
+                         ['content1\n', 'content2\n'])
 
     def test_additional_expectations_additional_flag(self):
-        port = self._make_port_for_test_additional_expectations(
-            {'additional_expectations': ['/tmp/additional-expectations-1.txt',
-                                         '/tmp/additional-expectations-2.txt'],
-             'additional_driver_flag': ['--special-flag']})
-        self.assertEqual(port.expectations_dict().values(), ['content3', 'content1\n', 'content2\n'])
+        port = self._make_port_for_test_additional_expectations({
+            'additional_expectations': [
+                '/tmp/additional-expectations-1.txt',
+                '/tmp/additional-expectations-2.txt'
+            ],
+            'additional_driver_flag': ['--special-flag']
+        })
+        self.assertEqual(port.expectations_dict().values(),
+                         ['content3', 'content1\n', 'content2\n'])
 
     def test_flag_specific_expectations(self):
         port = self.make_port(port_name='foo')
@@ -396,7 +518,8 @@
         self.assertEqual(port.expectations_dict().values(), [])
         # all_expectations_dict() is an OrderedDict, but its order depends on
         # file system walking order.
-        self.assertEqual(sorted(port.all_expectations_dict().values()), ['aa', 'bb'])
+        self.assertEqual(
+            sorted(port.all_expectations_dict().values()), ['aa', 'bb'])
 
     def test_flag_specific_expectations_identify_unreadable_file(self):
         port = self.make_port(port_name='foo')
@@ -410,23 +533,30 @@
 
         # The UnicodeDecodeError does not indicate which file we failed to read,
         # so ensure that the file is identified in a log message.
-        self.assertLog(['ERROR: Failed to read expectations file: \'' +
-                        non_utf8_file + '\'\n'])
+        self.assertLog([
+            'ERROR: Failed to read expectations file: \'' + non_utf8_file +
+            '\'\n'
+        ])
 
     def test_flag_specific_config_name_from_options(self):
         port_a = self.make_port(options=optparse.Values({}))
         # pylint: disable=protected-access
-        self.assertEqual(port_a._specified_additional_driver_flags(), []);
+        self.assertEqual(port_a._specified_additional_driver_flags(), [])
         self.assertIsNone(port_a._flag_specific_config_name())
 
-        port_b = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--bb']}))
-        self.assertEqual(port_b._specified_additional_driver_flags(), ['--bb']);
+        port_b = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--bb']
+            }))
+        self.assertEqual(port_b._specified_additional_driver_flags(), ['--bb'])
         self.assertEqual(port_b._flag_specific_config_name(), 'bb')
 
-        port_c = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--cc', '--dd']}))
-        self.assertEqual(port_c._specified_additional_driver_flags(), ['--cc', '--dd']);
+        port_c = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--cc', '--dd']
+            }))
+        self.assertEqual(port_c._specified_additional_driver_flags(),
+                         ['--cc', '--dd'])
         self.assertEqual(port_c._flag_specific_config_name(), 'cc')
 
     def test_flag_specific_config_name_from_options_and_file(self):
@@ -435,128 +565,172 @@
         port_a = self.make_port(options=optparse.Values({}))
         port_a.host.filesystem.write_text_file(flag_file, '--aa')
         # pylint: disable=protected-access
-        self.assertEqual(port_a._specified_additional_driver_flags(), ['--aa']);
+        self.assertEqual(port_a._specified_additional_driver_flags(), ['--aa'])
         self.assertEqual(port_a._flag_specific_config_name(), 'aa')
 
-        port_b = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--bb']}))
+        port_b = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--bb']
+            }))
         port_b.host.filesystem.write_text_file(flag_file, '--aa')
-        self.assertEqual(port_b._specified_additional_driver_flags(), ['--aa', '--bb']);
+        self.assertEqual(port_b._specified_additional_driver_flags(),
+                         ['--aa', '--bb'])
         self.assertEqual(port_b._flag_specific_config_name(), 'aa')
 
-        port_c = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--bb', '--cc']}))
+        port_c = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--bb', '--cc']
+            }))
         port_c.host.filesystem.write_text_file(flag_file, '--bb --dd')
         # We don't remove duplicated flags at this time.
-        self.assertEqual(port_c._specified_additional_driver_flags(), ['--bb', '--dd', '--bb', '--cc']);
+        self.assertEqual(port_c._specified_additional_driver_flags(),
+                         ['--bb', '--dd', '--bb', '--cc'])
         self.assertEqual(port_c._flag_specific_config_name(), 'bb')
 
     def _write_flag_specific_config(self, port):
         port.host.filesystem.write_text_file(
-            port.host.filesystem.join(port.web_tests_dir(), 'FlagSpecificConfig'),
-            '['
+            port.host.filesystem.join(port.web_tests_dir(),
+                                      'FlagSpecificConfig'), '['
             '  {"name": "a", "args": ["--aa"]},'
             '  {"name": "b", "args": ["--bb", "--aa"]},'
             '  {"name": "c", "args": ["--bb", "--cc"]}'
             ']')
 
     def test_flag_specific_config_name_from_options_and_config(self):
-        port_a1 = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--aa']}))
+        port_a1 = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--aa']
+            }))
         self._write_flag_specific_config(port_a1)
         # pylint: disable=protected-access
         self.assertEqual(port_a1._flag_specific_config_name(), 'a')
 
-        port_a2 = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--aa', '--dd']}))
+        port_a2 = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--aa', '--dd']
+            }))
         self._write_flag_specific_config(port_a2)
         self.assertEqual(port_a2._flag_specific_config_name(), 'a')
 
-        port_a3 = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--aa', '--bb']}))
+        port_a3 = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--aa', '--bb']
+            }))
         self._write_flag_specific_config(port_a3)
         self.assertEqual(port_a3._flag_specific_config_name(), 'a')
 
-        port_b1 = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--bb', '--aa']}))
+        port_b1 = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--bb', '--aa']
+            }))
         self._write_flag_specific_config(port_b1)
         self.assertEqual(port_b1._flag_specific_config_name(), 'b')
 
-        port_b2 = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--bb', '--aa', '--cc']}))
+        port_b2 = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--bb', '--aa', '--cc']
+            }))
         self._write_flag_specific_config(port_b2)
         self.assertEqual(port_b2._flag_specific_config_name(), 'b')
 
-        port_b3 = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--bb', '--aa', '--dd']}))
+        port_b3 = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--bb', '--aa', '--dd']
+            }))
         self._write_flag_specific_config(port_b3)
         self.assertEqual(port_b3._flag_specific_config_name(), 'b')
 
-        port_c1 = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--bb', '--cc']}))
+        port_c1 = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--bb', '--cc']
+            }))
         self._write_flag_specific_config(port_c1)
         self.assertEqual(port_c1._flag_specific_config_name(), 'c')
 
-        port_c2 = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--bb', '--cc', '--aa']}))
+        port_c2 = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--bb', '--cc', '--aa']
+            }))
         self._write_flag_specific_config(port_c2)
         self.assertEqual(port_c2._flag_specific_config_name(), 'c')
 
     def test_flag_specific_fallback(self):
-        port_b = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--bb']}))
+        port_b = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--bb']
+            }))
         self._write_flag_specific_config(port_b)
         # No match. Fallback to first specified flag.
         self.assertEqual(port_b._flag_specific_config_name(), 'bb')
 
-        port_d = self.make_port(options=optparse.Values(
-            {'additional_driver_flag': ['--dd', '--ee']}))
+        port_d = self.make_port(
+            options=optparse.Values({
+                'additional_driver_flag': ['--dd', '--ee']
+            }))
         self._write_flag_specific_config(port_d)
         # pylint: disable=protected-access
         self.assertEqual(port_d._flag_specific_config_name(), 'dd')
 
     def test_flag_specific_option(self):
-        port_a = self.make_port(options=optparse.Values({'flag_specific': 'a'}))
+        port_a = self.make_port(
+            options=optparse.Values({
+                'flag_specific': 'a'
+            }))
         self._write_flag_specific_config(port_a)
         # pylint: disable=protected-access
         self.assertEqual(port_a._flag_specific_config_name(), 'a')
 
-        port_b = self.make_port(options=optparse.Values(
-            {'flag_specific': 'a', 'additional_driver_flag': ['--bb']}))
+        port_b = self.make_port(
+            options=optparse.Values({
+                'flag_specific': 'a',
+                'additional_driver_flag': ['--bb']
+            }))
         self._write_flag_specific_config(port_b)
         self.assertEqual(port_b._flag_specific_config_name(), 'a')
 
-        port_d = self.make_port(options=optparse.Values({'flag_specific': 'd'}))
+        port_d = self.make_port(
+            options=optparse.Values({
+                'flag_specific': 'd'
+            }))
         self._write_flag_specific_config(port_d)
         self.assertRaises(AssertionError, port_d._flag_specific_config_name)
 
     def test_duplicate_flag_specific_name(self):
         port = self.make_port()
         port.host.filesystem.write_text_file(
-            port.host.filesystem.join(port.web_tests_dir(), 'FlagSpecificConfig'),
-            '[{"name": "a", "args": ["--aa"]}, {"name": "a", "args": ["--aa", "--bb"]}]')
+            port.host.filesystem.join(port.web_tests_dir(),
+                                      'FlagSpecificConfig'),
+            '[{"name": "a", "args": ["--aa"]}, {"name": "a", "args": ["--aa", "--bb"]}]'
+        )
         # pylint: disable=protected-access
         self.assertRaises(ValueError, port._flag_specific_configs)
 
     def test_duplicate_flag_specific_args(self):
         port = self.make_port()
         port.host.filesystem.write_text_file(
-            port.host.filesystem.join(port.web_tests_dir(), 'FlagSpecificConfig'),
-            '[{"name": "a", "args": ["--aa"]}, {"name": "b", "args": ["--aa"]}]')
+            port.host.filesystem.join(port.web_tests_dir(),
+                                      'FlagSpecificConfig'),
+            '[{"name": "a", "args": ["--aa"]}, {"name": "b", "args": ["--aa"]}]'
+        )
         # pylint: disable=protected-access
         self.assertRaises(ValueError, port._flag_specific_configs)
 
     def test_invalid_flag_specific_name(self):
         port = self.make_port()
         port.host.filesystem.write_text_file(
-            port.host.filesystem.join(port.web_tests_dir(), 'FlagSpecificConfig'),
+            port.host.filesystem.join(port.web_tests_dir(),
+                                      'FlagSpecificConfig'),
             '[{"name": "a/", "args": ["--aa"]}]')
         # pylint: disable=protected-access
         self.assertRaises(ValueError, port._flag_specific_configs)
 
     def test_additional_env_var(self):
-        port = self.make_port(options=optparse.Values({'additional_env_var': ['FOO=BAR', 'BAR=FOO']}))
-        self.assertEqual(port.get_option('additional_env_var'), ['FOO=BAR', 'BAR=FOO'])
+        port = self.make_port(
+            options=optparse.Values({
+                'additional_env_var': ['FOO=BAR', 'BAR=FOO']
+            }))
+        self.assertEqual(
+            port.get_option('additional_env_var'), ['FOO=BAR', 'BAR=FOO'])
         environment = port.setup_environ_for_server()
         self.assertTrue(('FOO' in environment) & ('BAR' in environment))
         self.assertEqual(environment['FOO'], 'BAR')
@@ -600,7 +774,8 @@
         port = self.make_port(with_tests=True)
         port.set_option_default('manifest_update', False)
         filesystem = port.host.filesystem
-        filesystem.write_text_file(WEB_TEST_DIR + '/external/wpt/MANIFEST.json', '{}')
+        filesystem.write_text_file(
+            WEB_TEST_DIR + '/external/wpt/MANIFEST.json', '{}')
         filesystem.clear_written_files()
 
         port.wpt_manifest('external/wpt')
@@ -626,63 +801,90 @@
             json.dumps({
                 'items': {
                     'testharness': {
-                        'dom/ranges/Range-attributes.html': [['dom/ranges/Range-attributes.html', {}]],
-                        'dom/ranges/Range-attributes-slow.html': [['dom/ranges/Range-attributes-slow.html', {
-                            'timeout': 'long'
-                        }]],
+                        'dom/ranges/Range-attributes.html':
+                        [['dom/ranges/Range-attributes.html', {}]],
+                        'dom/ranges/Range-attributes-slow.html': [[
+                            'dom/ranges/Range-attributes-slow.html',
+                            {
+                                'timeout': 'long'
+                            }
+                        ]],
                         'console/console-is-a-namespace.any.js': [
                             ['console/console-is-a-namespace.any.html', {}],
-                            ['console/console-is-a-namespace.any.worker.html', {
-                                'timeout': 'long'
-                            }],
+                            [
+                                'console/console-is-a-namespace.any.worker.html',
+                                {
+                                    'timeout': 'long'
+                                }
+                            ],
                         ],
                         'html/parse.html': [
                             ['html/parse.html?run_type=uri', {}],
-                            ['html/parse.html?run_type=write', {
-                                'timeout': 'long'
-                            }],
+                            [
+                                'html/parse.html?run_type=write',
+                                {
+                                    'timeout': 'long'
+                                }
+                            ],
                         ],
                     },
                     'manual': {},
                     'reftest': {
-                        'html/dom/elements/global-attributes/dir_auto-EN-L.html': [[
+                        'html/dom/elements/global-attributes/dir_auto-EN-L.html':
+                        [[
                             'html/dom/elements/global-attributes/dir_auto-EN-L.html',
-                            [['/html/dom/elements/global-attributes/dir_auto-EN-L-ref.html', '==']], {
+                            [[
+                                '/html/dom/elements/global-attributes/dir_auto-EN-L-ref.html',
+                                '=='
+                            ]], {
                                 'timeout': 'long'
                             }
                         ]],
                     },
                     'crashtest': {
-                        'portals/portals-no-frame-crash.html': [['portals/portals-no-frame-crash.html', {}]],
+                        'portals/portals-no-frame-crash.html':
+                        [['portals/portals-no-frame-crash.html', {}]],
                     },
                 }
             }))
-        filesystem.write_text_file(WEB_TEST_DIR + '/external/wpt/dom/ranges/Range-attributes.html', '')
-        filesystem.write_text_file(WEB_TEST_DIR + '/external/wpt/dom/ranges/Range-attributes-slow.html', '')
-        filesystem.write_text_file(WEB_TEST_DIR + '/external/wpt/console/console-is-a-namespace.any.js', '')
-        filesystem.write_text_file(WEB_TEST_DIR + '/external/wpt/common/blank.html', 'foo')
+        filesystem.write_text_file(
+            WEB_TEST_DIR + '/external/wpt/dom/ranges/Range-attributes.html',
+            '')
+        filesystem.write_text_file(
+            WEB_TEST_DIR +
+            '/external/wpt/dom/ranges/Range-attributes-slow.html', '')
+        filesystem.write_text_file(
+            WEB_TEST_DIR +
+            '/external/wpt/console/console-is-a-namespace.any.js', '')
+        filesystem.write_text_file(
+            WEB_TEST_DIR + '/external/wpt/common/blank.html', 'foo')
 
-        filesystem.write_text_file(WEB_TEST_DIR + '/wpt_internal/MANIFEST.json', json.dumps({
-            'items': {
-                'testharness': {
-                    'dom/bar.html': [
-                        ['dom/bar.html', {}]
-                    ]
+        filesystem.write_text_file(
+            WEB_TEST_DIR + '/wpt_internal/MANIFEST.json',
+            json.dumps({
+                'items': {
+                    'testharness': {
+                        'dom/bar.html': [['dom/bar.html', {}]]
+                    }
                 }
-            }}))
-        filesystem.write_text_file(WEB_TEST_DIR + '/wpt_internal/dom/bar.html', 'baz')
+            }))
+        filesystem.write_text_file(WEB_TEST_DIR + '/wpt_internal/dom/bar.html',
+                                   'baz')
 
     def test_find_none_if_not_in_manifest(self):
         port = self.make_port(with_tests=True)
         PortTest._add_manifest_to_mock_file_system(port)
         self.assertNotIn('external/wpt/common/blank.html', port.tests([]))
-        self.assertNotIn('external/wpt/console/console-is-a-namespace.any.js', port.tests([]))
+        self.assertNotIn('external/wpt/console/console-is-a-namespace.any.js',
+                         port.tests([]))
 
     def test_find_one_if_in_manifest(self):
         port = self.make_port(with_tests=True)
         PortTest._add_manifest_to_mock_file_system(port)
-        self.assertIn('external/wpt/dom/ranges/Range-attributes.html', port.tests([]))
-        self.assertIn('external/wpt/console/console-is-a-namespace.any.html', port.tests([]))
+        self.assertIn('external/wpt/dom/ranges/Range-attributes.html',
+                      port.tests([]))
+        self.assertIn('external/wpt/console/console-is-a-namespace.any.html',
+                      port.tests([]))
 
     def test_wpt_tests_paths(self):
         port = self.make_port(with_tests=True)
@@ -705,28 +907,45 @@
         self.assertEqual(port.tests(['external/csswg-test']), [])
         self.assertEqual(sorted(port.tests(['external/wpt'])), all_wpt)
         self.assertEqual(sorted(port.tests(['external/wpt/'])), all_wpt)
-        self.assertEqual(sorted(port.tests(['external/wpt/console'])),
-                         ['external/wpt/console/console-is-a-namespace.any.html',
-                          'external/wpt/console/console-is-a-namespace.any.worker.html'])
-        self.assertEqual(sorted(port.tests(['external/wpt/console/'])),
-                         ['external/wpt/console/console-is-a-namespace.any.html',
-                          'external/wpt/console/console-is-a-namespace.any.worker.html'])
-        self.assertEqual(sorted(port.tests(['external/wpt/console/console-is-a-namespace.any.js'])),
-                         ['external/wpt/console/console-is-a-namespace.any.html',
-                          'external/wpt/console/console-is-a-namespace.any.worker.html'])
-        self.assertEqual(port.tests(['external/wpt/console/console-is-a-namespace.any.html']),
-                         ['external/wpt/console/console-is-a-namespace.any.html'])
-        self.assertEqual(sorted(port.tests(['external/wpt/dom'])),
-                         ['external/wpt/dom/ranges/Range-attributes-slow.html',
-                          'external/wpt/dom/ranges/Range-attributes.html'])
-        self.assertEqual(sorted(port.tests(['external/wpt/dom/'])),
-                         ['external/wpt/dom/ranges/Range-attributes-slow.html',
-                          'external/wpt/dom/ranges/Range-attributes.html'])
-        self.assertEqual(port.tests(['external/wpt/dom/ranges/Range-attributes.html']),
-                         ['external/wpt/dom/ranges/Range-attributes.html'])
+        self.assertEqual(
+            sorted(port.tests(['external/wpt/console'])), [
+                'external/wpt/console/console-is-a-namespace.any.html',
+                'external/wpt/console/console-is-a-namespace.any.worker.html'
+            ])
+        self.assertEqual(
+            sorted(port.tests(['external/wpt/console/'])), [
+                'external/wpt/console/console-is-a-namespace.any.html',
+                'external/wpt/console/console-is-a-namespace.any.worker.html'
+            ])
+        self.assertEqual(
+            sorted(
+                port.tests(
+                    ['external/wpt/console/console-is-a-namespace.any.js'])),
+            [
+                'external/wpt/console/console-is-a-namespace.any.html',
+                'external/wpt/console/console-is-a-namespace.any.worker.html'
+            ])
+        self.assertEqual(
+            port.tests(
+                ['external/wpt/console/console-is-a-namespace.any.html']),
+            ['external/wpt/console/console-is-a-namespace.any.html'])
+        self.assertEqual(
+            sorted(port.tests(['external/wpt/dom'])), [
+                'external/wpt/dom/ranges/Range-attributes-slow.html',
+                'external/wpt/dom/ranges/Range-attributes.html'
+            ])
+        self.assertEqual(
+            sorted(port.tests(['external/wpt/dom/'])), [
+                'external/wpt/dom/ranges/Range-attributes-slow.html',
+                'external/wpt/dom/ranges/Range-attributes.html'
+            ])
+        self.assertEqual(
+            port.tests(['external/wpt/dom/ranges/Range-attributes.html']),
+            ['external/wpt/dom/ranges/Range-attributes.html'])
 
         # wpt_internal should work the same.
-        self.assertEqual(port.tests(['wpt_internal']), ['wpt_internal/dom/bar.html'])
+        self.assertEqual(
+            port.tests(['wpt_internal']), ['wpt_internal/dom/bar.html'])
 
     def test_virtual_wpt_tests_paths(self):
         port = self.make_port(with_tests=True)
@@ -746,22 +965,38 @@
             'virtual/virtual_wpt_dom/external/wpt/dom/ranges/Range-attributes.html',
         ]
 
-        self.assertEqual(sorted(port.tests(['virtual/virtual_wpt/external/'])), all_wpt)
-        self.assertEqual(sorted(port.tests(['virtual/virtual_wpt/external/wpt/'])), all_wpt)
-        self.assertEqual(port.tests(['virtual/virtual_wpt/external/wpt/console']),
-                         ['virtual/virtual_wpt/external/wpt/console/console-is-a-namespace.any.worker.html',
-                          'virtual/virtual_wpt/external/wpt/console/console-is-a-namespace.any.html'])
+        self.assertEqual(
+            sorted(port.tests(['virtual/virtual_wpt/external/'])), all_wpt)
+        self.assertEqual(
+            sorted(port.tests(['virtual/virtual_wpt/external/wpt/'])), all_wpt)
+        self.assertEqual(
+            port.tests(['virtual/virtual_wpt/external/wpt/console']), [
+                'virtual/virtual_wpt/external/wpt/console/console-is-a-namespace.any.worker.html',
+                'virtual/virtual_wpt/external/wpt/console/console-is-a-namespace.any.html'
+            ])
 
-        self.assertEqual(sorted(port.tests(['virtual/virtual_wpt_dom/external/wpt/dom/'])), dom_wpt)
-        self.assertEqual(sorted(port.tests(['virtual/virtual_wpt_dom/external/wpt/dom/ranges/'])), dom_wpt)
-        self.assertEqual(port.tests(['virtual/virtual_wpt_dom/external/wpt/dom/ranges/Range-attributes.html']),
-                         ['virtual/virtual_wpt_dom/external/wpt/dom/ranges/Range-attributes.html'])
+        self.assertEqual(
+            sorted(port.tests(['virtual/virtual_wpt_dom/external/wpt/dom/'])),
+            dom_wpt)
+        self.assertEqual(
+            sorted(
+                port.tests(
+                    ['virtual/virtual_wpt_dom/external/wpt/dom/ranges/'])),
+            dom_wpt)
+        self.assertEqual(
+            port.tests([
+                'virtual/virtual_wpt_dom/external/wpt/dom/ranges/Range-attributes.html'
+            ]), [
+                'virtual/virtual_wpt_dom/external/wpt/dom/ranges/Range-attributes.html'
+            ])
 
         # wpt_internal should work the same.
-        self.assertEqual(port.tests(['virtual/virtual_wpt_dom/wpt_internal']),
-                         ['virtual/virtual_wpt_dom/wpt_internal/dom/bar.html'])
-        self.assertEqual(sorted(port.tests(['virtual/virtual_wpt_dom/'])),
-                         dom_wpt + ['virtual/virtual_wpt_dom/wpt_internal/dom/bar.html'])
+        self.assertEqual(
+            port.tests(['virtual/virtual_wpt_dom/wpt_internal']),
+            ['virtual/virtual_wpt_dom/wpt_internal/dom/bar.html'])
+        self.assertEqual(
+            sorted(port.tests(['virtual/virtual_wpt_dom/'])),
+            dom_wpt + ['virtual/virtual_wpt_dom/wpt_internal/dom/bar.html'])
 
     def test_is_non_wpt_test_file(self):
         port = self.make_port(with_tests=True)
@@ -773,9 +1008,12 @@
         self.assertFalse(port.is_non_wpt_test_file('', 'foo-expected.html'))
         self.assertFalse(port.is_non_wpt_test_file('', 'foo-expected.svg'))
         self.assertFalse(port.is_non_wpt_test_file('', 'foo-expected.xht'))
-        self.assertFalse(port.is_non_wpt_test_file('', 'foo-expected-mismatch.html'))
-        self.assertFalse(port.is_non_wpt_test_file('', 'foo-expected-mismatch.svg'))
-        self.assertFalse(port.is_non_wpt_test_file('', 'foo-expected-mismatch.xhtml'))
+        self.assertFalse(
+            port.is_non_wpt_test_file('', 'foo-expected-mismatch.html'))
+        self.assertFalse(
+            port.is_non_wpt_test_file('', 'foo-expected-mismatch.svg'))
+        self.assertFalse(
+            port.is_non_wpt_test_file('', 'foo-expected-mismatch.xhtml'))
         self.assertFalse(port.is_non_wpt_test_file('', 'foo-ref.html'))
         self.assertFalse(port.is_non_wpt_test_file('', 'foo-notref.html'))
         self.assertFalse(port.is_non_wpt_test_file('', 'foo-notref.xht'))
@@ -783,90 +1021,155 @@
         self.assertFalse(port.is_non_wpt_test_file('', 'ref-foo.html'))
         self.assertFalse(port.is_non_wpt_test_file('', 'notref-foo.xhr'))
 
-        self.assertFalse(port.is_non_wpt_test_file(WEB_TEST_DIR + '/external/wpt/common', 'blank.html'))
-        self.assertFalse(port.is_non_wpt_test_file(WEB_TEST_DIR + '/external/wpt/console', 'console-is-a-namespace.any.js'))
-        self.assertFalse(port.is_non_wpt_test_file(WEB_TEST_DIR + '/external/wpt', 'testharness_runner.html'))
-        self.assertTrue(port.is_non_wpt_test_file(WEB_TEST_DIR + '/external/wpt_automation', 'foo.html'))
-        self.assertFalse(port.is_non_wpt_test_file(WEB_TEST_DIR + '/wpt_internal/console', 'console-is-a-namespace.any.js'))
+        self.assertFalse(
+            port.is_non_wpt_test_file(WEB_TEST_DIR + '/external/wpt/common',
+                                      'blank.html'))
+        self.assertFalse(
+            port.is_non_wpt_test_file(WEB_TEST_DIR + '/external/wpt/console',
+                                      'console-is-a-namespace.any.js'))
+        self.assertFalse(
+            port.is_non_wpt_test_file(WEB_TEST_DIR + '/external/wpt',
+                                      'testharness_runner.html'))
+        self.assertTrue(
+            port.is_non_wpt_test_file(
+                WEB_TEST_DIR + '/external/wpt_automation', 'foo.html'))
+        self.assertFalse(
+            port.is_non_wpt_test_file(WEB_TEST_DIR + '/wpt_internal/console',
+                                      'console-is-a-namespace.any.js'))
 
     def test_is_wpt_test(self):
-        self.assertTrue(Port.is_wpt_test('external/wpt/dom/ranges/Range-attributes.html'))
-        self.assertTrue(Port.is_wpt_test('external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html'))
+        self.assertTrue(
+            Port.is_wpt_test('external/wpt/dom/ranges/Range-attributes.html'))
+        self.assertTrue(
+            Port.is_wpt_test(
+                'external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html'
+            ))
         self.assertFalse(Port.is_wpt_test('dom/domparsing/namespaces-1.html'))
         self.assertFalse(Port.is_wpt_test('rutabaga'))
 
-        self.assertTrue(Port.is_wpt_test('virtual/a-name/external/wpt/baz/qux.htm'))
+        self.assertTrue(
+            Port.is_wpt_test('virtual/a-name/external/wpt/baz/qux.htm'))
         self.assertFalse(Port.is_wpt_test('virtual/external/wpt/baz/qux.htm'))
-        self.assertFalse(Port.is_wpt_test('not-virtual/a-name/external/wpt/baz/qux.htm'))
+        self.assertFalse(
+            Port.is_wpt_test('not-virtual/a-name/external/wpt/baz/qux.htm'))
 
     def test_should_use_wptserve(self):
-        self.assertTrue(Port.should_use_wptserve('external/wpt/dom/interfaces.html'))
-        self.assertTrue(Port.should_use_wptserve('virtual/a-name/external/wpt/dom/interfaces.html'))
-        self.assertFalse(Port.should_use_wptserve('harness-tests/wpt/console_logging.html'))
-        self.assertFalse(Port.should_use_wptserve('dom/domparsing/namespaces-1.html'))
+        self.assertTrue(
+            Port.should_use_wptserve('external/wpt/dom/interfaces.html'))
+        self.assertTrue(
+            Port.should_use_wptserve(
+                'virtual/a-name/external/wpt/dom/interfaces.html'))
+        self.assertFalse(
+            Port.should_use_wptserve('harness-tests/wpt/console_logging.html'))
+        self.assertFalse(
+            Port.should_use_wptserve('dom/domparsing/namespaces-1.html'))
 
     def test_is_wpt_crash_test(self):
         port = self.make_port(with_tests=True)
         PortTest._add_manifest_to_mock_file_system(port)
 
-        self.assertTrue(port.is_wpt_crash_test('external/wpt/portals/portals-no-frame-crash.html'))
-        self.assertFalse(port.is_wpt_crash_test('external/wpt/nonexistent/i-dont-exist-crash.html'))
-        self.assertFalse(port.is_wpt_crash_test('external/wpt/dom/ranges/Range-attributes.html'))
-        self.assertFalse(port.is_wpt_crash_test('portals/portals-no-frame-crash.html'))
+        self.assertTrue(
+            port.is_wpt_crash_test(
+                'external/wpt/portals/portals-no-frame-crash.html'))
+        self.assertFalse(
+            port.is_wpt_crash_test(
+                'external/wpt/nonexistent/i-dont-exist-crash.html'))
+        self.assertFalse(
+            port.is_wpt_crash_test(
+                'external/wpt/dom/ranges/Range-attributes.html'))
+        self.assertFalse(
+            port.is_wpt_crash_test('portals/portals-no-frame-crash.html'))
 
     def test_is_slow_wpt_test(self):
         port = self.make_port(with_tests=True)
         PortTest._add_manifest_to_mock_file_system(port)
 
-        self.assertFalse(port.is_slow_wpt_test('external/wpt/dom/ranges/Range-attributes.html'))
-        self.assertTrue(port.is_slow_wpt_test('external/wpt/dom/ranges/Range-attributes-slow.html'))
-        self.assertTrue(port.is_slow_wpt_test('external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html'))
+        self.assertFalse(
+            port.is_slow_wpt_test(
+                'external/wpt/dom/ranges/Range-attributes.html'))
+        self.assertTrue(
+            port.is_slow_wpt_test(
+                'external/wpt/dom/ranges/Range-attributes-slow.html'))
+        self.assertTrue(
+            port.is_slow_wpt_test(
+                'external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html'
+            ))
 
     def test_is_slow_wpt_test_with_variations(self):
         port = self.make_port(with_tests=True)
         PortTest._add_manifest_to_mock_file_system(port)
 
-        self.assertFalse(port.is_slow_wpt_test('external/wpt/console/console-is-a-namespace.any.html'))
-        self.assertTrue(port.is_slow_wpt_test('external/wpt/console/console-is-a-namespace.any.worker.html'))
-        self.assertFalse(port.is_slow_wpt_test('external/wpt/html/parse.html?run_type=uri'))
-        self.assertTrue(port.is_slow_wpt_test('external/wpt/html/parse.html?run_type=write'))
+        self.assertFalse(
+            port.is_slow_wpt_test(
+                'external/wpt/console/console-is-a-namespace.any.html'))
+        self.assertTrue(
+            port.is_slow_wpt_test(
+                'external/wpt/console/console-is-a-namespace.any.worker.html'))
+        self.assertFalse(
+            port.is_slow_wpt_test('external/wpt/html/parse.html?run_type=uri'))
+        self.assertTrue(
+            port.is_slow_wpt_test(
+                'external/wpt/html/parse.html?run_type=write'))
 
     def test_is_slow_wpt_test_takes_virtual_tests(self):
         port = self.make_port(with_tests=True)
         PortTest._add_manifest_to_mock_file_system(port)
 
-        self.assertFalse(port.is_slow_wpt_test('virtual/virtual_wpt/external/wpt/dom/ranges/Range-attributes.html'))
-        self.assertTrue(port.is_slow_wpt_test('virtual/virtual_wpt/external/wpt/dom/ranges/Range-attributes-slow.html'))
+        self.assertFalse(
+            port.is_slow_wpt_test(
+                'virtual/virtual_wpt/external/wpt/dom/ranges/Range-attributes.html'
+            ))
+        self.assertTrue(
+            port.is_slow_wpt_test(
+                'virtual/virtual_wpt/external/wpt/dom/ranges/Range-attributes-slow.html'
+            ))
 
     def test_is_slow_wpt_test_returns_false_for_illegal_paths(self):
         port = self.make_port(with_tests=True)
         PortTest._add_manifest_to_mock_file_system(port)
 
-        self.assertFalse(port.is_slow_wpt_test('dom/ranges/Range-attributes.html'))
-        self.assertFalse(port.is_slow_wpt_test('dom/ranges/Range-attributes-slow.html'))
-        self.assertFalse(port.is_slow_wpt_test('/dom/ranges/Range-attributes.html'))
-        self.assertFalse(port.is_slow_wpt_test('/dom/ranges/Range-attributes-slow.html'))
+        self.assertFalse(
+            port.is_slow_wpt_test('dom/ranges/Range-attributes.html'))
+        self.assertFalse(
+            port.is_slow_wpt_test('dom/ranges/Range-attributes-slow.html'))
+        self.assertFalse(
+            port.is_slow_wpt_test('/dom/ranges/Range-attributes.html'))
+        self.assertFalse(
+            port.is_slow_wpt_test('/dom/ranges/Range-attributes-slow.html'))
 
     def test_reference_files(self):
         port = self.make_port(with_tests=True)
-        self.assertEqual(port.reference_files('passes/svgreftest.svg'),
-                         [('==', port.web_tests_dir() + '/passes/svgreftest-expected.svg')])
-        self.assertEqual(port.reference_files('passes/xhtreftest.svg'),
-                         [('==', port.web_tests_dir() + '/passes/xhtreftest-expected.html')])
-        self.assertEqual(port.reference_files('passes/phpreftest.php'),
-                         [('!=', port.web_tests_dir() + '/passes/phpreftest-expected-mismatch.svg')])
+        self.assertEqual(
+            port.reference_files('passes/svgreftest.svg'),
+            [('==', port.web_tests_dir() + '/passes/svgreftest-expected.svg')])
+        self.assertEqual(
+            port.reference_files('passes/xhtreftest.svg'),
+            [('==', port.web_tests_dir() + '/passes/xhtreftest-expected.html')
+             ])
+        self.assertEqual(
+            port.reference_files('passes/phpreftest.php'),
+            [('!=', port.web_tests_dir() +
+              '/passes/phpreftest-expected-mismatch.svg')])
 
     def test_reference_files_from_manifest(self):
         port = self.make_port(with_tests=True)
         PortTest._add_manifest_to_mock_file_system(port)
 
-        self.assertEqual(port.reference_files('external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html'),
-                         [('==', port.web_tests_dir() +
-                           '/external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L-ref.html')])
-        self.assertEqual(port.reference_files('virtual/layout_ng/' +
-                                              'external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html'),
-                         [('==', port.web_tests_dir() +
-                           '/external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L-ref.html')])
+        self.assertEqual(
+            port.reference_files(
+                'external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html'
+            ),
+            [('==', port.web_tests_dir() +
+              '/external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L-ref.html'
+              )])
+        self.assertEqual(
+            port.reference_files(
+                'virtual/layout_ng/' +
+                'external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L.html'
+            ),
+            [('==', port.web_tests_dir() +
+              '/external/wpt/html/dom/elements/global-attributes/dir_auto-EN-L-ref.html'
+              )])
 
     def test_http_server_supports_ipv6(self):
         port = self.make_port()
@@ -875,17 +1178,23 @@
         self.assertFalse(port.http_server_supports_ipv6())
 
     def test_http_server_requires_http_protocol_options_unsafe(self):
-        port = self.make_port(executive=MockExecutive(stderr=(
-            "Invalid command 'INTENTIONAL_SYNTAX_ERROR', perhaps misspelled or"
-            " defined by a module not included in the server configuration\n")))
+        port = self.make_port(
+            executive=MockExecutive(
+                stderr=
+                ("Invalid command 'INTENTIONAL_SYNTAX_ERROR', perhaps misspelled or"
+                 " defined by a module not included in the server configuration\n"
+                 )))
         port.path_to_apache = lambda: '/usr/sbin/httpd'
         self.assertTrue(
             port.http_server_requires_http_protocol_options_unsafe())
 
     def test_http_server_doesnt_require_http_protocol_options_unsafe(self):
-        port = self.make_port(executive=MockExecutive(stderr=(
-            "Invalid command 'HttpProtocolOptions', perhaps misspelled or"
-            " defined by a module not included in the server configuration\n")))
+        port = self.make_port(
+            executive=MockExecutive(
+                stderr=
+                ("Invalid command 'HttpProtocolOptions', perhaps misspelled or"
+                 " defined by a module not included in the server configuration\n"
+                 )))
         port.path_to_apache = lambda: '/usr/sbin/httpd'
         self.assertFalse(
             port.http_server_requires_http_protocol_options_unsafe())
@@ -916,11 +1225,16 @@
 
         self.assertTrue(port.test_exists('virtual'))
         self.assertFalse(port.test_exists('virtual/does_not_exist.html'))
-        self.assertTrue(port.test_exists('virtual/virtual_passes/passes/text.html'))
+        self.assertTrue(
+            port.test_exists('virtual/virtual_passes/passes/text.html'))
 
-        self.assertTrue(port.test_exists('virtual/virtual_empty_bases/physical1.html'))
-        self.assertTrue(port.test_exists('virtual/virtual_empty_bases/dir/physical2.html'))
-        self.assertFalse(port.test_exists('virtual/virtual_empty_bases/does_not_exist.html'))
+        self.assertTrue(
+            port.test_exists('virtual/virtual_empty_bases/physical1.html'))
+        self.assertTrue(
+            port.test_exists('virtual/virtual_empty_bases/dir/physical2.html'))
+        self.assertFalse(
+            port.test_exists(
+                'virtual/virtual_empty_bases/does_not_exist.html'))
 
     def test_test_isfile(self):
         port = self.make_port(with_tests=True)
@@ -929,12 +1243,17 @@
         self.assertFalse(port.test_isfile('passes/does_not_exist.html'))
 
         self.assertFalse(port.test_isfile('virtual'))
-        self.assertTrue(port.test_isfile('virtual/virtual_passes/passes/text.html'))
+        self.assertTrue(
+            port.test_isfile('virtual/virtual_passes/passes/text.html'))
         self.assertFalse(port.test_isfile('virtual/does_not_exist.html'))
 
-        self.assertTrue(port.test_isfile('virtual/virtual_empty_bases/physical1.html'))
-        self.assertTrue(port.test_isfile('virtual/virtual_empty_bases/dir/physical2.html'))
-        self.assertFalse(port.test_exists('virtual/virtual_empty_bases/does_not_exist.html'))
+        self.assertTrue(
+            port.test_isfile('virtual/virtual_empty_bases/physical1.html'))
+        self.assertTrue(
+            port.test_isfile('virtual/virtual_empty_bases/dir/physical2.html'))
+        self.assertFalse(
+            port.test_exists(
+                'virtual/virtual_empty_bases/does_not_exist.html'))
 
     def test_test_isdir(self):
         port = self.make_port(with_tests=True)
@@ -946,12 +1265,15 @@
         self.assertTrue(port.test_isdir('virtual'))
         self.assertFalse(port.test_isdir('virtual/does_not_exist.html'))
         self.assertFalse(port.test_isdir('virtual/does_not_exist/'))
-        self.assertFalse(port.test_isdir('virtual/virtual_passes/passes/text.html'))
+        self.assertFalse(
+            port.test_isdir('virtual/virtual_passes/passes/text.html'))
 
         self.assertTrue(port.test_isdir('virtual/virtual_empty_bases/'))
         self.assertTrue(port.test_isdir('virtual/virtual_empty_bases/dir'))
-        self.assertFalse(port.test_isdir('virtual/virtual_empty_bases/dir/physical2.html'))
-        self.assertFalse(port.test_isdir('virtual/virtual_empty_bases/does_not_exist/'))
+        self.assertFalse(
+            port.test_isdir('virtual/virtual_empty_bases/dir/physical2.html'))
+        self.assertFalse(
+            port.test_isdir('virtual/virtual_empty_bases/does_not_exist/'))
 
     def test_tests(self):
         port = self.make_port(with_tests=True)
@@ -968,43 +1290,72 @@
 
         # crbug.com/880609: test trailing slashes
         tests = port.tests(['virtual/virtual_passes'])
-        self.assertIn('virtual/virtual_passes/passes/test-virtual-passes.html', tests)
-        self.assertIn('virtual/virtual_passes/passes_two/test-virtual-passes.html', tests)
+        self.assertIn('virtual/virtual_passes/passes/test-virtual-passes.html',
+                      tests)
+        self.assertIn(
+            'virtual/virtual_passes/passes_two/test-virtual-passes.html',
+            tests)
 
         tests = port.tests(['virtual/virtual_passes/'])
-        self.assertIn('virtual/virtual_passes/passes/test-virtual-passes.html', tests)
-        self.assertIn('virtual/virtual_passes/passes_two/test-virtual-passes.html', tests)
+        self.assertIn('virtual/virtual_passes/passes/test-virtual-passes.html',
+                      tests)
+        self.assertIn(
+            'virtual/virtual_passes/passes_two/test-virtual-passes.html',
+            tests)
 
         tests = port.tests(['virtual/virtual_passes/passes'])
         self.assertNotIn('passes/text.html', tests)
-        self.assertIn('virtual/virtual_passes/passes/test-virtual-passes.html', tests)
-        self.assertNotIn('virtual/virtual_passes/passes_two/test-virtual-passes.html', tests)
+        self.assertIn('virtual/virtual_passes/passes/test-virtual-passes.html',
+                      tests)
+        self.assertNotIn(
+            'virtual/virtual_passes/passes_two/test-virtual-passes.html',
+            tests)
         self.assertNotIn('passes/test-virtual-passes.html', tests)
-        self.assertNotIn('virtual/virtual_passes/passes/test-virtual-virtual/passes.html', tests)
-        self.assertNotIn('virtual/virtual_passes/passes/virtual_passes/passes/test-virtual-passes.html', tests)
+        self.assertNotIn(
+            'virtual/virtual_passes/passes/test-virtual-virtual/passes.html',
+            tests)
+        self.assertNotIn(
+            'virtual/virtual_passes/passes/virtual_passes/passes/test-virtual-passes.html',
+            tests)
 
-        tests = port.tests(['virtual/virtual_passes/passes/test-virtual-passes.html'])
-        self.assertEquals(['virtual/virtual_passes/passes/test-virtual-passes.html'], tests)
+        tests = port.tests(
+            ['virtual/virtual_passes/passes/test-virtual-passes.html'])
+        self.assertEquals(
+            ['virtual/virtual_passes/passes/test-virtual-passes.html'], tests)
 
         tests = port.tests(['virtual/virtual_empty_bases'])
-        self.assertEquals(['virtual/virtual_empty_bases/physical1.html',
-                           'virtual/virtual_empty_bases/dir/physical2.html'], tests)
+        self.assertEquals([
+            'virtual/virtual_empty_bases/physical1.html',
+            'virtual/virtual_empty_bases/dir/physical2.html'
+        ], tests)
 
         tests = port.tests(['virtual/virtual_empty_bases/dir'])
-        self.assertEquals(['virtual/virtual_empty_bases/dir/physical2.html'], tests)
+        self.assertEquals(['virtual/virtual_empty_bases/dir/physical2.html'],
+                          tests)
 
         tests = port.tests(['virtual/virtual_empty_bases/dir/physical2.html'])
-        self.assertEquals(['virtual/virtual_empty_bases/dir/physical2.html'], tests)
+        self.assertEquals(['virtual/virtual_empty_bases/dir/physical2.html'],
+                          tests)
 
     def test_build_path(self):
         # Test for a protected method - pylint: disable=protected-access
         # Test that optional paths are used regardless of whether they exist.
-        options = optparse.Values({'configuration': 'Release', 'build_directory': 'xcodebuild'})
-        self.assertEqual(self.make_port(options=options)._build_path(), '/mock-checkout/xcodebuild/Release')
+        options = optparse.Values({
+            'configuration': 'Release',
+            'build_directory': 'xcodebuild'
+        })
+        self.assertEqual(
+            self.make_port(options=options)._build_path(),
+            '/mock-checkout/xcodebuild/Release')
 
         # Test that "out" is used as the default.
-        options = optparse.Values({'configuration': 'Release', 'build_directory': None})
-        self.assertEqual(self.make_port(options=options)._build_path(), '/mock-checkout/out/Release')
+        options = optparse.Values({
+            'configuration': 'Release',
+            'build_directory': None
+        })
+        self.assertEqual(
+            self.make_port(options=options)._build_path(),
+            '/mock-checkout/out/Release')
 
     def test_dont_require_http_server(self):
         port = self.make_port()
@@ -1019,7 +1370,8 @@
     def test_good_virtual_test_suite_file(self):
         port = self.make_port()
         port.host.filesystem.write_text_file(
-            port.host.filesystem.join(port.web_tests_dir(), 'VirtualTestSuites'),
+            port.host.filesystem.join(port.web_tests_dir(),
+                                      'VirtualTestSuites'),
             '[{"prefix": "bar", "bases": ["fast/bar"], "args": ["--bar"]}]')
 
         # If this call returns successfully, we found and loaded the web_tests/VirtualTestSuites.
@@ -1028,8 +1380,8 @@
     def test_duplicate_virtual_prefix_in_file(self):
         port = self.make_port()
         port.host.filesystem.write_text_file(
-            port.host.filesystem.join(port.web_tests_dir(), 'VirtualTestSuites'),
-            '['
+            port.host.filesystem.join(port.web_tests_dir(),
+                                      'VirtualTestSuites'), '['
             '{"prefix": "bar", "bases": ["fast/bar"], "args": ["--bar"]},'
             '{"prefix": "bar", "bases": ["fast/foo"], "args": ["--bar"]}'
             ']')
@@ -1039,98 +1391,165 @@
     def test_virtual_test_suite_file_is_not_json(self):
         port = self.make_port()
         port.host.filesystem.write_text_file(
-            port.host.filesystem.join(port.web_tests_dir(), 'VirtualTestSuites'),
-            '{[{[')
+            port.host.filesystem.join(port.web_tests_dir(),
+                                      'VirtualTestSuites'), '{[{[')
         self.assertRaises(ValueError, port.virtual_test_suites)
 
     def test_lookup_virtual_test_base(self):
         port = self.make_port(with_tests=True)
         self.assertIsNone(port.lookup_virtual_test_base('non/virtual'))
         self.assertIsNone(port.lookup_virtual_test_base('passes/text.html'))
-        self.assertIsNone(port.lookup_virtual_test_base('virtual/non-existing/test.html'))
+        self.assertIsNone(
+            port.lookup_virtual_test_base('virtual/non-existing/test.html'))
 
         # lookup_virtual_test_base() checks virtual prefix and bases, but doesn't
         # check existence of test.
-        self.assertEqual('passes/text.html', port.lookup_virtual_test_base('virtual/virtual_passes/passes/text.html'))
-        self.assertEqual('passes/any.html', port.lookup_virtual_test_base('virtual/virtual_passes/passes/any.html'))
-        self.assertEqual('passes_two/any.html', port.lookup_virtual_test_base('virtual/virtual_passes/passes_two/any.html'))
-        self.assertEqual('passes/', port.lookup_virtual_test_base('virtual/virtual_passes/passes/'))
-        self.assertEqual('passes/', port.lookup_virtual_test_base('virtual/virtual_passes/passes'))
-        self.assertIsNone(port.lookup_virtual_test_base('virtual/virtual_passes/'))
-        self.assertIsNone(port.lookup_virtual_test_base('virtual/virtual_passes'))
+        self.assertEqual(
+            'passes/text.html',
+            port.lookup_virtual_test_base(
+                'virtual/virtual_passes/passes/text.html'))
+        self.assertEqual(
+            'passes/any.html',
+            port.lookup_virtual_test_base(
+                'virtual/virtual_passes/passes/any.html'))
+        self.assertEqual(
+            'passes_two/any.html',
+            port.lookup_virtual_test_base(
+                'virtual/virtual_passes/passes_two/any.html'))
+        self.assertEqual(
+            'passes/',
+            port.lookup_virtual_test_base('virtual/virtual_passes/passes/'))
+        self.assertEqual(
+            'passes/',
+            port.lookup_virtual_test_base('virtual/virtual_passes/passes'))
+        self.assertIsNone(
+            port.lookup_virtual_test_base('virtual/virtual_passes/'))
+        self.assertIsNone(
+            port.lookup_virtual_test_base('virtual/virtual_passes'))
         # 'failures' is not a specified base of virtual/virtual_passes
-        self.assertIsNone(port.lookup_virtual_test_base('virtual/virtual_passes/failures/unexpected/text.html'))
-        self.assertEqual('failures/unexpected/text.html', port.lookup_virtual_test_base('virtual/virtual_failures/failures/unexpected/text.html'))
+        self.assertIsNone(
+            port.lookup_virtual_test_base(
+                'virtual/virtual_passes/failures/unexpected/text.html'))
+        self.assertEqual(
+            'failures/unexpected/text.html',
+            port.lookup_virtual_test_base(
+                'virtual/virtual_failures/failures/unexpected/text.html'))
         # 'failures/expected' is not a specified base of virtual/virtual_failures
-        self.assertIsNone(port.lookup_virtual_test_base('virtual/virtual_failures/failures/expected/image.html'))
+        self.assertIsNone(
+            port.lookup_virtual_test_base(
+                'virtual/virtual_failures/failures/expected/image.html'))
 
         # Partial match of base with multiple levels.
-        self.assertEqual('failures/', port.lookup_virtual_test_base('virtual/virtual_failures/failures/'))
-        self.assertEqual('failures/', port.lookup_virtual_test_base('virtual/virtual_failures/failures'))
-        self.assertIsNone(port.lookup_virtual_test_base('virtual/virtual_failures/'))
-        self.assertIsNone(port.lookup_virtual_test_base('virtual/virtual_failures'))
+        self.assertEqual(
+            'failures/',
+            port.lookup_virtual_test_base(
+                'virtual/virtual_failures/failures/'))
+        self.assertEqual(
+            'failures/',
+            port.lookup_virtual_test_base('virtual/virtual_failures/failures'))
+        self.assertIsNone(
+            port.lookup_virtual_test_base('virtual/virtual_failures/'))
+        self.assertIsNone(
+            port.lookup_virtual_test_base('virtual/virtual_failures'))
 
         # Empty bases.
-        self.assertIsNone(port.lookup_virtual_test_base('virtual/virtual_empty_bases/physical1.html'))
-        self.assertIsNone(port.lookup_virtual_test_base('virtual/virtual_empty_bases/passes/text.html'))
-        self.assertIsNone(port.lookup_virtual_test_base('virtual/virtual_empty_bases'))
+        self.assertIsNone(
+            port.lookup_virtual_test_base(
+                'virtual/virtual_empty_bases/physical1.html'))
+        self.assertIsNone(
+            port.lookup_virtual_test_base(
+                'virtual/virtual_empty_bases/passes/text.html'))
+        self.assertIsNone(
+            port.lookup_virtual_test_base('virtual/virtual_empty_bases'))
 
     def test_args_for_test(self):
         port = self.make_port(with_tests=True)
         self.assertEqual([], port.args_for_test('non/virtual'))
         self.assertEqual([], port.args_for_test('passes/text.html'))
-        self.assertEqual([], port.args_for_test('virtual/non-existing/test.html'))
+        self.assertEqual([],
+                         port.args_for_test('virtual/non-existing/test.html'))
 
-        self.assertEqual(['--virtual-arg'], port.args_for_test('virtual/virtual_passes/passes/text.html'))
-        self.assertEqual(['--virtual-arg'], port.args_for_test('virtual/virtual_passes/passes/any.html'))
-        self.assertEqual(['--virtual-arg'], port.args_for_test('virtual/virtual_passes/passes/'))
-        self.assertEqual(['--virtual-arg'], port.args_for_test('virtual/virtual_passes/passes'))
-        self.assertEqual(['--virtual-arg'], port.args_for_test('virtual/virtual_passes/'))
-        self.assertEqual(['--virtual-arg'], port.args_for_test('virtual/virtual_passes'))
+        self.assertEqual(
+            ['--virtual-arg'],
+            port.args_for_test('virtual/virtual_passes/passes/text.html'))
+        self.assertEqual(
+            ['--virtual-arg'],
+            port.args_for_test('virtual/virtual_passes/passes/any.html'))
+        self.assertEqual(['--virtual-arg'],
+                         port.args_for_test('virtual/virtual_passes/passes/'))
+        self.assertEqual(['--virtual-arg'],
+                         port.args_for_test('virtual/virtual_passes/passes'))
+        self.assertEqual(['--virtual-arg'],
+                         port.args_for_test('virtual/virtual_passes/'))
+        self.assertEqual(['--virtual-arg'],
+                         port.args_for_test('virtual/virtual_passes'))
 
     def test_missing_virtual_test_suite_file(self):
         port = self.make_port()
         self.assertRaises(AssertionError, port.virtual_test_suites)
 
     def test_default_results_directory(self):
-        port = self.make_port(options=optparse.Values({'target': 'Default', 'configuration': 'Release'}))
+        port = self.make_port(
+            options=optparse.Values({
+                'target': 'Default',
+                'configuration': 'Release'
+            }))
         # By default the results directory is in the build directory: out/<target>.
-        self.assertEqual(port.default_results_directory(), '/mock-checkout/out/Default')
+        self.assertEqual(port.default_results_directory(),
+                         '/mock-checkout/out/Default')
 
     def test_results_directory(self):
-        port = self.make_port(options=optparse.Values({'results_directory': 'some-directory/results'}))
+        port = self.make_port(
+            options=optparse.Values({
+                'results_directory':
+                'some-directory/results'
+            }))
         # A results directory can be given as an option, and it is relative to current working directory.
         self.assertEqual(port.host.filesystem.cwd, '/')
         self.assertEqual(port.results_directory(), '/some-directory/results')
 
     def _assert_config_file_for_platform(self, port, platform, config_file):
         port.host.platform = MockPlatformInfo(os_name=platform)
-        self.assertEqual(port._apache_config_file_name_for_platform(), config_file)  # pylint: disable=protected-access
+        self.assertEqual(
+            port._apache_config_file_name_for_platform(),  # pylint: disable=protected-access
+            config_file)
 
-    def _assert_config_file_for_linux_distribution(self, port, distribution, config_file):
-        port.host.platform = MockPlatformInfo(os_name='linux', linux_distribution=distribution)
-        self.assertEqual(port._apache_config_file_name_for_platform(), config_file)  # pylint: disable=protected-access
+    def _assert_config_file_for_linux_distribution(self, port, distribution,
+                                                   config_file):
+        port.host.platform = MockPlatformInfo(
+            os_name='linux', linux_distribution=distribution)
+        self.assertEqual(
+            port._apache_config_file_name_for_platform(),  # pylint: disable=protected-access
+            config_file)
 
     def test_apache_config_file_name_for_platform(self):
         port = self.make_port()
         port._apache_version = lambda: '2.2'  # pylint: disable=protected-access
-        self._assert_config_file_for_platform(port, 'linux', 'apache2-httpd-2.2.conf')
-        self._assert_config_file_for_linux_distribution(port, 'arch', 'arch-httpd-2.2.conf')
-        self._assert_config_file_for_linux_distribution(port, 'debian', 'debian-httpd-2.2.conf')
-        self._assert_config_file_for_linux_distribution(port, 'fedora', 'fedora-httpd-2.2.conf')
-        self._assert_config_file_for_linux_distribution(port, 'slackware', 'apache2-httpd-2.2.conf')
-        self._assert_config_file_for_linux_distribution(port, 'redhat', 'redhat-httpd-2.2.conf')
+        self._assert_config_file_for_platform(port, 'linux',
+                                              'apache2-httpd-2.2.conf')
+        self._assert_config_file_for_linux_distribution(
+            port, 'arch', 'arch-httpd-2.2.conf')
+        self._assert_config_file_for_linux_distribution(
+            port, 'debian', 'debian-httpd-2.2.conf')
+        self._assert_config_file_for_linux_distribution(
+            port, 'fedora', 'fedora-httpd-2.2.conf')
+        self._assert_config_file_for_linux_distribution(
+            port, 'slackware', 'apache2-httpd-2.2.conf')
+        self._assert_config_file_for_linux_distribution(
+            port, 'redhat', 'redhat-httpd-2.2.conf')
 
-        self._assert_config_file_for_platform(port, 'mac', 'apache2-httpd-2.2.conf')
-        self._assert_config_file_for_platform(port, 'win32', 'apache2-httpd-2.2.conf')
-        self._assert_config_file_for_platform(port, 'barf', 'apache2-httpd-2.2.conf')
+        self._assert_config_file_for_platform(port, 'mac',
+                                              'apache2-httpd-2.2.conf')
+        self._assert_config_file_for_platform(port, 'win32',
+                                              'apache2-httpd-2.2.conf')
+        self._assert_config_file_for_platform(port, 'barf',
+                                              'apache2-httpd-2.2.conf')
 
     def test_skips_test_in_smoke_tests(self):
         port = self.make_port(with_tests=True)
         port.default_smoke_test_only = lambda: True
-        port.host.filesystem.write_text_file(
-            port.path_to_smoke_tests_file(),
-            'passes/text.html\n')
+        port.host.filesystem.write_text_file(port.path_to_smoke_tests_file(),
+                                             'passes/text.html\n')
         self.assertTrue(port.skips_test('failures/expected/image.html'))
 
     def test_skips_test_no_skip_smoke_tests_file(self):
@@ -1161,7 +1580,8 @@
 
     def test_split_webdriver_test_name(self):
         self.assertEqual(
-            Port.split_webdriver_test_name("tests/accept_alert/accept.py>>foo"),
+            Port.split_webdriver_test_name(
+                "tests/accept_alert/accept.py>>foo"),
             ("tests/accept_alert/accept.py", "foo"))
         self.assertEqual(
             Port.split_webdriver_test_name("tests/accept_alert/accept.py"),
@@ -1180,8 +1600,7 @@
     def test_add_webdriver_subtest_suffix(self):
         self.assertEqual(
             Port.add_webdriver_subtest_suffix("abd", "bar"), "abd>>bar")
-        self.assertEqual(
-            Port.add_webdriver_subtest_suffix("abd", None), "abd")
+        self.assertEqual(Port.add_webdriver_subtest_suffix("abd", None), "abd")
 
     def test_add_webdriver_subtest_pytest_suffix(self):
         wb_test_name = "abd"
@@ -1194,13 +1613,15 @@
 
 
 class NaturalCompareTest(unittest.TestCase):
-
     def setUp(self):
         self._port = TestPort(MockSystemHost())
 
     def assert_cmp(self, x, y, result):
         # pylint: disable=protected-access
-        self.assertEqual(cmp(self._port._natural_sort_key(x), self._port._natural_sort_key(y)), result)
+        self.assertEqual(
+            cmp(
+                self._port._natural_sort_key(x),
+                self._port._natural_sort_key(y)), result)
 
     def test_natural_compare(self):
         self.assert_cmp('a', 'a', 0)
@@ -1221,12 +1642,12 @@
 
 
 class KeyCompareTest(unittest.TestCase):
-
     def setUp(self):
         self._port = TestPort(MockSystemHost())
 
     def assert_cmp(self, x, y, result):
-        self.assertEqual(cmp(self._port.test_key(x), self._port.test_key(y)), result)
+        self.assertEqual(
+            cmp(self._port.test_key(x), self._port.test_key(y)), result)
 
     def test_test_key(self):
         self.assert_cmp('/a', '/a', 0)
@@ -1240,9 +1661,9 @@
 
 
 class VirtualTestSuiteTest(unittest.TestCase):
-
     def test_basic(self):
-        suite = VirtualTestSuite(prefix='suite', bases=['base/foo', 'base/bar'], args=['--args'])
+        suite = VirtualTestSuite(
+            prefix='suite', bases=['base/foo', 'base/bar'], args=['--args'])
         self.assertEqual(suite.full_prefix, 'virtual/suite/')
         self.assertEqual(suite.bases, ['base/foo', 'base/bar'])
         self.assertEqual(suite.args, ['--args'])
@@ -1254,4 +1675,9 @@
         self.assertEqual(suite.args, ['--args'])
 
     def test_no_slash(self):
-        self.assertRaises(AssertionError, VirtualTestSuite, prefix='suite/bar', bases=['base/foo'], args=['--args'])
+        self.assertRaises(
+            AssertionError,
+            VirtualTestSuite,
+            prefix='suite/bar',
+            bases=['base/foo'],
+            args=['--args'])
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/browser_test.py b/third_party/blink/tools/blinkpy/web_tests/port/browser_test.py
index ea77371..a373941c3 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/browser_test.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/browser_test.py
@@ -58,8 +58,8 @@
         to src/chrome/test/data/printing/layout_tests.
         """
         # pylint: disable=no-member
-        return self._path_from_chromium_base(
-            'chrome', 'test', 'data', 'printing', 'layout_tests')
+        return self._path_from_chromium_base('chrome', 'test', 'data',
+                                             'printing', 'layout_tests')
 
     def check_sys_deps(self):
         """This function is meant to be a no-op since we don't want to actually
@@ -86,7 +86,6 @@
 
 
 class BrowserTestMacPort(BrowserTestPortOverrides, mac.MacPort):
-
     def _path_to_driver(self, target=None):
         return self._build_path_with_target(target, self.driver_name())
 
@@ -99,7 +98,6 @@
 
 
 class BrowserTestWinPort(BrowserTestPortOverrides, win.WinPort):
-
     def default_timeout_ms(self):
         timeout_ms = 20 * 1000
         if self.get_option('configuration') == 'Debug':  # pylint: disable=no-member
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/browser_test_driver.py b/third_party/blink/tools/blinkpy/web_tests/port/browser_test_driver.py
index 505af53..2a52d5b 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/browser_test_driver.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/browser_test_driver.py
@@ -34,7 +34,8 @@
 
     def __init__(self, port, worker_number, no_timeout=False):
         """Invokes the constructor of Driver."""
-        super(BrowserTestDriver, self).__init__(port, worker_number, no_timeout)
+        super(BrowserTestDriver, self).__init__(port, worker_number,
+                                                no_timeout)
 
     def start(self, per_test_args, deadline):
         """Same as Driver.start() however, it has an extra step. It waits for
@@ -77,7 +78,9 @@
         """Command line arguments to run the browser test."""
         cmd = self._command_wrapper(self._port.get_option('wrapper'))
         cmd.append(self._port._path_to_driver())
-        cmd.append('--gtest_filter=PrintPreviewPdfGeneratedBrowserTest.MANUAL_LayoutTestDriver')
+        cmd.append(
+            '--gtest_filter=PrintPreviewPdfGeneratedBrowserTest.MANUAL_LayoutTestDriver'
+        )
         cmd.append('--run-manual')
         cmd.append('--single-process-tests')
         cmd.extend(per_test_args)
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/browser_test_driver_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/browser_test_driver_unittest.py
index 9f70f05..fb4d3e0 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/browser_test_driver_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/browser_test_driver_unittest.py
@@ -35,12 +35,11 @@
 
 
 class BrowserTestDriverTest(unittest.TestCase):
-
     def test_read_stdin_path(self):
         port = TestPort(MockHost())
         driver = BrowserTestDriver(port, 0)
-        driver._server_process = MockServerProcess(lines=[
-            'StdinPath: /foo/bar', '#EOF'])
+        driver._server_process = MockServerProcess(
+            lines=['StdinPath: /foo/bar', '#EOF'])
         content_block = driver._read_block(0)
         self.assertEqual(content_block.stdin_path, '/foo/bar')
         driver._stdin_directory = None
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/browser_test_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/browser_test_unittest.py
index b1a4437..075cbc9 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/browser_test_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/browser_test_unittest.py
@@ -37,22 +37,34 @@
 
 
 class _BrowserTestTestCaseMixin(object):
-
     def test_driver_name_option(self):
-        self.assertTrue(self.make_port()._path_to_driver().endswith(self.driver_name_endswith))
+        self.assertTrue(self.make_port()._path_to_driver().endswith(
+            self.driver_name_endswith))
 
     def test_default_timeout_ms(self):
-        self.assertEqual(self.make_port(options=optparse.Values({'configuration': 'Release'})).default_timeout_ms(),
-                         self.timeout_ms)
-        self.assertEqual(self.make_port(options=optparse.Values({'configuration': 'Debug'})).default_timeout_ms(),
-                         3 * self.timeout_ms)
+        self.assertEqual(
+            self.make_port(
+                options=optparse.Values({
+                    'configuration': 'Release'
+                })).default_timeout_ms(), self.timeout_ms)
+        self.assertEqual(
+            self.make_port(
+                options=optparse.Values({
+                    'configuration': 'Debug'
+                })).default_timeout_ms(), 3 * self.timeout_ms)
 
     def test_driver_type(self):
-        self.assertTrue(isinstance(self.make_port(options=optparse.Values({'driver_name': 'browser_tests'})
-                                                  ).create_driver(1), browser_test_driver.BrowserTestDriver))
+        self.assertTrue(
+            isinstance(
+                self.make_port(
+                    options=optparse.Values({
+                        'driver_name': 'browser_tests'
+                    })).create_driver(1),
+                browser_test_driver.BrowserTestDriver))
 
     def test_web_tests_dir(self):
-        self.assertTrue(self.make_port().web_tests_dir().endswith('chrome/test/data/printing/layout_tests'))
+        self.assertTrue(self.make_port().web_tests_dir().endswith(
+            'chrome/test/data/printing/layout_tests'))
 
     def test_virtual_test_suites(self):
         # The browser_tests port do not use virtual test suites, so we are just testing the stub.
@@ -63,7 +75,8 @@
         pass
 
 
-class BrowserTestLinuxTest(_BrowserTestTestCaseMixin, port_testcase.PortTestCase):
+class BrowserTestLinuxTest(_BrowserTestTestCaseMixin,
+                           port_testcase.PortTestCase):
     port_name = 'linux'
     port_maker = browser_test.BrowserTestLinuxPort
     os_name = 'linux'
@@ -72,7 +85,8 @@
     timeout_ms = 10 * 1000
 
 
-class BrowserTestWinTest(_BrowserTestTestCaseMixin, port_testcase.PortTestCase):
+class BrowserTestWinTest(_BrowserTestTestCaseMixin,
+                         port_testcase.PortTestCase):
     port_name = 'win'
     port_maker = browser_test.BrowserTestWinPort
     os_name = 'win'
@@ -81,7 +95,8 @@
     timeout_ms = 20 * 1000
 
 
-class BrowserTestMacTest(_BrowserTestTestCaseMixin, port_testcase.PortTestCase):
+class BrowserTestMacTest(_BrowserTestTestCaseMixin,
+                         port_testcase.PortTestCase):
     os_name = 'mac'
     os_version = 'mac10.11'
     port_name = 'mac'
@@ -90,5 +105,8 @@
     timeout_ms = 20 * 1000
 
     def test_driver_path(self):
-        test_port = self.make_port(options=optparse.Values({'driver_name': 'browser_tests'}))
+        test_port = self.make_port(
+            options=optparse.Values({
+                'driver_name': 'browser_tests'
+            }))
         self.assertNotIn('.app/Contents/MacOS', test_port._path_to_driver())
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/driver.py b/third_party/blink/tools/blinkpy/web_tests/port/driver.py
index 7861da0..e8bb4f4 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/driver.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/driver.py
@@ -35,10 +35,8 @@
 from blinkpy.common.system import path
 from blinkpy.common.system.profiler import ProfilerFactory
 
-
 _log = logging.getLogger(__name__)
 
-
 DRIVER_START_TIMEOUT_SECS = 30
 
 
@@ -100,7 +98,6 @@
 
 
 class DriverInput(object):
-
     def __init__(self, test_name, timeout, image_hash, args):
         self.test_name = test_name
         self.timeout = timeout  # in ms
@@ -113,9 +110,23 @@
     and post-processing of data.
     """
 
-    def __init__(self, text, image, image_hash, audio, crash=False,
-                 test_time=0, measurements=None, timeout=False, error='', crashed_process_name='??',
-                 crashed_pid=None, crash_log=None, crash_site=None, leak=False, leak_log=None, pid=None):
+    def __init__(self,
+                 text,
+                 image,
+                 image_hash,
+                 audio,
+                 crash=False,
+                 test_time=0,
+                 measurements=None,
+                 timeout=False,
+                 error='',
+                 crashed_process_name='??',
+                 crashed_pid=None,
+                 crash_log=None,
+                 crash_site=None,
+                 leak=False,
+                 leak_log=None,
+                 pid=None):
         # FIXME: Args could be renamed to better clarify what they do.
         self.text = text
         self.image = image  # May be empty-string if the test crashes.
@@ -222,8 +233,10 @@
         deadline = test_begin_time + int(driver_input.timeout) / 1000.0
 
         self._server_process.write(command)
-        text, audio = self._read_first_block(deadline)  # First block is either text or audio
-        image, actual_image_hash = self._read_optional_image_block(deadline)  # The second (optional) block is image data.
+        # First block is either text or audio
+        text, audio = self._read_first_block(deadline)
+        # The second (optional) block is image data.
+        image, actual_image_hash = self._read_optional_image_block(deadline)
 
         crashed = self.has_crashed()
         timed_out = self._server_process.timed_out
@@ -231,7 +244,8 @@
         leaked = self._leaked
 
         if not crashed:
-            sanitizer = self._port.output_contains_sanitizer_messages(self.error_from_test)
+            sanitizer = self._port.output_contains_sanitizer_messages(
+                self.error_from_test)
             if sanitizer:
                 self.error_from_test = 'OUTPUT CONTAINS "' + sanitizer + \
                     '", so we are treating this test as if it crashed, even though it did not.\n\n' + self.error_from_test
@@ -243,7 +257,8 @@
             # We call stop() even if we crashed or timed out in order to get any remaining stdout/stderr output.
             # In the timeout case, we kill the hung process as well.
             # Add a delay to allow process to finish post-run hooks, such as dumping code coverage data.
-            out, err = self._server_process.stop(self._port.get_option('driver_kill_timeout_secs'))
+            out, err = self._server_process.stop(
+                self._port.get_option('driver_kill_timeout_secs'))
             if out:
                 text += out
             if err:
@@ -253,31 +268,47 @@
         crash_log = None
         crash_site = None
         if crashed:
-            self.error_from_test, crash_log, crash_site = self._get_crash_log(text, self.error_from_test, newer_than=start_time)
+            self.error_from_test, crash_log, crash_site = self._get_crash_log(
+                text, self.error_from_test, newer_than=start_time)
 
             # If we don't find a crash log use a placeholder error message instead.
             if not crash_log:
-                pid_str = str(self._crashed_pid) if self._crashed_pid else 'unknown pid'
-                crash_log = 'No crash log found for %s:%s.\n' % (self._crashed_process_name, pid_str)
+                pid_str = str(
+                    self._crashed_pid) if self._crashed_pid else 'unknown pid'
+                crash_log = 'No crash log found for %s:%s.\n' % (
+                    self._crashed_process_name, pid_str)
                 # If we were unresponsive append a message informing there may not have been a crash.
                 if self._subprocess_was_unresponsive:
                     crash_log += 'Process failed to become responsive before timing out.\n'
 
                 # Print stdout and stderr to the placeholder crash log; we want as much context as possible.
                 if self.error_from_test:
-                    crash_log += '\nstdout:\n%s\nstderr:\n%s\n' % (text, self.error_from_test)
+                    crash_log += '\nstdout:\n%s\nstderr:\n%s\n' % (
+                        text, self.error_from_test)
 
-        return DriverOutput(text, image, actual_image_hash, audio,
-                            crash=crashed, test_time=time.time() - test_begin_time, measurements=self._measurements,
-                            timeout=timed_out, error=self.error_from_test,
-                            crashed_process_name=self._crashed_process_name,
-                            crashed_pid=self._crashed_pid, crash_log=crash_log, crash_site=crash_site,
-                            leak=leaked, leak_log=self._leak_log,
-                            pid=pid)
+        return DriverOutput(
+            text,
+            image,
+            actual_image_hash,
+            audio,
+            crash=crashed,
+            test_time=time.time() - test_begin_time,
+            measurements=self._measurements,
+            timeout=timed_out,
+            error=self.error_from_test,
+            crashed_process_name=self._crashed_process_name,
+            crashed_pid=self._crashed_pid,
+            crash_log=crash_log,
+            crash_site=crash_site,
+            leak=leaked,
+            leak_log=self._leak_log,
+            pid=pid)
 
     def _get_crash_log(self, stdout, stderr, newer_than):
         # pylint: disable=protected-access
-        return self._port._get_crash_log(self._crashed_process_name, self._crashed_pid, stdout, stderr, newer_than)
+        return self._port._get_crash_log(self._crashed_process_name,
+                                         self._crashed_pid, stdout, stderr,
+                                         newer_than)
 
     # FIXME: Seems this could just be inlined into callers.
     @classmethod
@@ -295,7 +326,8 @@
     WPT_HOST_AND_PORTS = ('web-platform.test', 8001, 8444)
 
     def is_http_test(self, test_name):
-        return test_name.startswith(self.HTTP_DIR) and not test_name.startswith(self.HTTP_LOCAL_DIR)
+        return (test_name.startswith(self.HTTP_DIR)
+                and not test_name.startswith(self.HTTP_LOCAL_DIR))
 
     def test_to_uri(self, test_name):
         """Convert a test name to a URI.
@@ -310,7 +342,8 @@
         using_wptserve = self._port.should_use_wptserve(test_name)
 
         if not self.is_http_test(test_name) and not using_wptserve:
-            return path.abspath_to_uri(self._port.host.platform, self._port.abspath_for_test(test_name))
+            return path.abspath_to_uri(self._port.host.platform,
+                                       self._port.abspath_for_test(test_name))
 
         if using_wptserve:
             for wpt_path, url_prefix in self.WPT_DIRS.items():
@@ -334,13 +367,17 @@
         relative_path = test_name[len(test_dir_prefix):]
 
         if '/https/' in test_name or '.https.' in test_name or '.serviceworker.' in test_name:
-            return 'https://%s:%d%s%s' % (hostname, secure_port, test_url_prefix, relative_path)
-        return 'http://%s:%d%s%s' % (hostname, insecure_port, test_url_prefix, relative_path)
+            return 'https://%s:%d%s%s' % (hostname, secure_port,
+                                          test_url_prefix, relative_path)
+        return 'http://%s:%d%s%s' % (hostname, insecure_port, test_url_prefix,
+                                     relative_path)
 
     def _get_uri_prefixes(self, hostname, insecure_port, secure_port):
         """Returns the HTTP and HTTPS URI prefix for a hostname."""
-        return ['http://%s:%d/' % (hostname, insecure_port),
-                'https://%s:%d/' % (hostname, secure_port)]
+        return [
+            'http://%s:%d/' % (hostname, insecure_port),
+            'https://%s:%d/' % (hostname, secure_port)
+        ]
 
     def uri_to_test(self, uri):
         """Return the base web test name for a given URI.
@@ -351,7 +388,8 @@
         """
 
         if uri.startswith('file:///'):
-            prefix = path.abspath_to_uri(self._port.host.platform, self._port.web_tests_dir())
+            prefix = path.abspath_to_uri(self._port.host.platform,
+                                         self._port.web_tests_dir())
             if not prefix.endswith('/'):
                 prefix += '/'
             return uri[len(prefix):]
@@ -391,7 +429,8 @@
 
     def _start(self, per_test_args, wait_for_ready=True):
         self.stop()
-        self._driver_tempdir = self._port.host.filesystem.mkdtemp(prefix='%s-' % self._port.driver_name())
+        self._driver_tempdir = self._port.host.filesystem.mkdtemp(
+            prefix='%s-' % self._port.driver_name())
         server_name = self._port.driver_name()
         environment = self._port.setup_environ_for_server()
         environment = self._setup_environ_for_driver(environment)
@@ -400,29 +439,38 @@
         self._leaked = False
         cmd_line = self.cmd_line(per_test_args)
         self._server_process = self._port.server_process_constructor(
-            self._port, server_name, cmd_line, environment, more_logging=self._port.get_option('driver_logging'))
+            self._port,
+            server_name,
+            cmd_line,
+            environment,
+            more_logging=self._port.get_option('driver_logging'))
         self._server_process.start()
         self._current_cmd_line = cmd_line
 
         if wait_for_ready:
             deadline = time.time() + DRIVER_START_TIMEOUT_SECS
-            if not self._wait_for_server_process_output(self._server_process, deadline, '#READY'):
+            if not self._wait_for_server_process_output(
+                    self._server_process, deadline, '#READY'):
                 _log.error('content_shell took too long to startup.')
 
     def _wait_for_server_process_output(self, server_process, deadline, text):
         output = ''
         line = server_process.read_stdout_line(deadline)
         output += server_process.pop_all_buffered_stderr()
-        while not server_process.timed_out and not server_process.has_crashed() and not text in line.rstrip():
+        while (not server_process.timed_out
+               and not server_process.has_crashed()
+               and not text in line.rstrip()):
             output += line
             line = server_process.read_stdout_line(deadline)
             output += server_process.pop_all_buffered_stderr()
 
         if server_process.timed_out:
-            _log.error('Timed out while waiting for the %s process: \n"%s"', server_process.name(), output)
+            _log.error('Timed out while waiting for the %s process: \n"%s"',
+                       server_process.name(), output)
             return False
         if server_process.has_crashed():
-            _log.error('The %s process crashed while starting: \n"%s"', server_process.name(), output)
+            _log.error('The %s process crashed while starting: \n"%s"',
+                       server_process.name(), output)
             return False
 
         return True
@@ -469,7 +517,9 @@
         # By appending the features to --enable-features, they will be enabled if
         # they are not also explicitly disabled (as base::FeatureList disables a
         # feature that appears in both --disable-features and --enable-features).
-        cmd.append('--enable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure')
+        cmd.append(
+            '--enable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure'
+        )
 
         cmd.extend(per_test_args)
         cmd = coalesce_repeated_switches(cmd)
@@ -485,16 +535,20 @@
         elif (error_line.startswith('#CRASHED - ')
               or error_line.startswith('#PROCESS UNRESPONSIVE - ')):
             # WebKitTestRunner uses this to report that the WebProcess subprocess crashed.
-            match = re.match(r'#(?:CRASHED|PROCESS UNRESPONSIVE) - (\S+)', error_line)
-            self._crashed_process_name = match.group(1) if match else 'WebProcess'
+            match = re.match(r'#(?:CRASHED|PROCESS UNRESPONSIVE) - (\S+)',
+                             error_line)
+            self._crashed_process_name = (match.group(1)
+                                          if match else 'WebProcess')
             match = re.search(r'pid (\d+)', error_line)
             pid = int(match.group(1)) if match else None
             self._crashed_pid = pid
             # FIXME: delete this after we're sure this code is working :)
-            _log.debug('%s crash, pid = %s, error_line = %s', self._crashed_process_name, str(pid), error_line)
+            _log.debug('%s crash, pid = %s, error_line = %s',
+                       self._crashed_process_name, str(pid), error_line)
             if error_line.startswith('#PROCESS UNRESPONSIVE - '):
                 self._subprocess_was_unresponsive = True
-                self._port.sample_process(self._crashed_process_name, self._crashed_pid)
+                self._port.sample_process(self._crashed_process_name,
+                                          self._crashed_pid)
                 # We want to show this since it's not a regular crash and probably we don't have a crash log.
                 self.error_from_test += error_line
             return True
@@ -509,10 +563,12 @@
 
     def _command_from_driver_input(self, driver_input):
         # FIXME: performance tests pass in full URLs instead of test names.
-        if driver_input.test_name.startswith(
-                'http://') or driver_input.test_name.startswith('https://') or driver_input.test_name == ('about:blank'):
+        if (driver_input.test_name.startswith('http://')
+                or driver_input.test_name.startswith('https://')
+                or driver_input.test_name == ('about:blank')):
             command = driver_input.test_name
-        elif self.is_http_test(driver_input.test_name) or self._port.should_use_wptserve(driver_input.test_name):
+        elif (self.is_http_test(driver_input.test_name)
+              or self._port.should_use_wptserve(driver_input.test_name)):
             command = self.test_to_uri(driver_input.test_name)
         else:
             command = self._port.abspath_for_test(driver_input.test_name)
@@ -542,8 +598,14 @@
             return (block.decoded_content, block.content_hash)
         return (None, block.content_hash)
 
-    def _read_header(self, block, line, header_text, header_attr, header_filter=None):
-        if line.startswith(header_text) and getattr(block, header_attr) is None:
+    def _read_header(self,
+                     block,
+                     line,
+                     header_text,
+                     header_attr,
+                     header_filter=None):
+        if (line.startswith(header_text)
+                and getattr(block, header_attr) is None):
             value = line.split()[1]
             if header_filter:
                 value = header_filter(value)
@@ -553,9 +615,11 @@
 
     def _process_stdout_line(self, block, line):
         if (self._read_header(block, line, 'Content-Type: ', 'content_type')
-                or self._read_header(block, line, 'Content-Transfer-Encoding: ', 'encoding')
-                or self._read_header(block, line, 'Content-Length: ', '_content_length', int)
-                or self._read_header(block, line, 'ActualHash: ', 'content_hash')
+                or self._read_header(block, line,
+                                     'Content-Transfer-Encoding: ', 'encoding')
+                or self._read_header(block, line, 'Content-Length: ',
+                                     '_content_length', int) or
+                self._read_header(block, line, 'ActualHash: ', 'content_hash')
                 or self._read_header(block, line, 'DumpMalloc: ', 'malloc')
                 or self._read_header(block, line, 'DumpJSHeap: ', 'js_heap')
                 or self._read_header(block, line, 'StdinPath', 'stdin_path')):
@@ -587,7 +651,8 @@
                 out_line = None
                 err_line = self._server_process.read_stderr_line(deadline)
             else:
-                out_line, err_line = self._server_process.read_either_stdout_or_stderr_line(deadline)
+                out_line, err_line = self._server_process.read_either_stdout_or_stderr_line(
+                    deadline)
 
             if self._server_process.timed_out or self.has_crashed():
                 break
@@ -602,7 +667,8 @@
             if out_line:
                 if out_line[-1] != '\n':
                     _log.error(
-                        'Last character read from DRT stdout line was not a newline!  This indicates either a NRWT or DRT bug.')
+                        'Last character read from DRT stdout line was not a newline!  This indicates either a NRWT or DRT bug.'
+                    )
                 # pylint: disable=protected-access
                 content_length_before_header_check = block._content_length
                 self._process_stdout_line(block, out_line)
@@ -610,10 +676,12 @@
                 # Don't wait until we're done with headers, just read the binary blob right now.
                 if content_length_before_header_check != block._content_length:
                     if block._content_length > 0:
-                        block.content = self._server_process.read_stdout(deadline, block._content_length)
+                        block.content = self._server_process.read_stdout(
+                            deadline, block._content_length)
                     else:
-                        _log.error('Received content of type %s with Content-Length of 0!  This indicates a bug in %s.',
-                                   block.content_type, self._server_process.name())
+                        _log.error(
+                            'Received content of type %s with Content-Length of 0!  This indicates a bug in %s.',
+                            block.content_type, self._server_process.name())
 
             if err_line:
                 if self._check_for_driver_crash(err_line):
@@ -627,14 +695,14 @@
 
 
 class ContentBlock(object):
-
     def __init__(self):
         self.content_type = None
         self.encoding = None
         self.content_hash = None
         self._content_length = None
         # Content is treated as binary data even though the text output is usually UTF-8.
-        self.content = str()  # FIXME: Should be bytearray() once we require Python 2.6.
+        # FIXME: Should be bytearray() once we require Python 2.6.
+        self.content = str()
         self.decoded_content = None
         self.malloc = None
         self.js_heap = None
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/driver_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/driver_unittest.py
index 9e5d1bf..ef67ba7 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/driver_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/driver_unittest.py
@@ -41,10 +41,14 @@
     # pylint: disable=protected-access
 
     def make_port(self):
-        return Port(MockSystemHost(), 'test', optparse.Values({'configuration': 'Release'}))
+        return Port(MockSystemHost(), 'test',
+                    optparse.Values({
+                        'configuration': 'Release'
+                    }))
 
     def _assert_wrapper(self, wrapper_string, expected_wrapper):
-        wrapper = Driver(self.make_port(), None)._command_wrapper(wrapper_string)
+        wrapper = Driver(self.make_port(),
+                         None)._command_wrapper(wrapper_string)
         self.assertEqual(wrapper, expected_wrapper)
 
     def test_command_wrapper(self):
@@ -53,49 +57,88 @@
 
         # Validate that shlex works as expected.
         command_with_spaces = 'valgrind --smc-check=\'check with spaces!\' --foo'
-        expected_parse = ['valgrind', '--smc-check=check with spaces!', '--foo']
+        expected_parse = [
+            'valgrind', '--smc-check=check with spaces!', '--foo'
+        ]
         self._assert_wrapper(command_with_spaces, expected_parse)
 
     def test_test_to_uri(self):
         port = self.make_port()
         driver = Driver(port, None)
-        self.assertEqual(driver.test_to_uri('foo/bar.html'), 'file://%s/foo/bar.html' % port.web_tests_dir())
-        self.assertEqual(driver.test_to_uri('http/tests/foo.html'), 'http://127.0.0.1:8000/foo.html')
-        self.assertEqual(driver.test_to_uri('http/tests/https/bar.html'), 'https://127.0.0.1:8443/https/bar.html')
-        self.assertEqual(driver.test_to_uri('http/tests/bar.https.html'), 'https://127.0.0.1:8443/bar.https.html')
-        self.assertEqual(driver.test_to_uri('http/tests/barhttps.html'), 'http://127.0.0.1:8000/barhttps.html')
-        self.assertEqual(driver.test_to_uri('external/wpt/foo/bar.html'),
-                         'http://web-platform.test:8001/foo/bar.html')
-        self.assertEqual(driver.test_to_uri('external/wpt/foo/bar.https.html'),
-                         'https://web-platform.test:8444/foo/bar.https.html')
-        self.assertEqual(driver.test_to_uri('external/wpt/foo/bar.serviceworker.html'),
-                         'https://web-platform.test:8444/foo/bar.serviceworker.html')
-        self.assertEqual(driver.test_to_uri('wpt_internal/foo/bar.html'),
-                         'http://web-platform.test:8001/wpt_internal/foo/bar.html')
-        self.assertEqual(driver.test_to_uri('wpt_internal/foo/bar.https.html'),
-                         'https://web-platform.test:8444/wpt_internal/foo/bar.https.html')
-        self.assertEqual(driver.test_to_uri('wpt_internal/foo/bar.serviceworker.html'),
-                         'https://web-platform.test:8444/wpt_internal/foo/bar.serviceworker.html')
+        self.assertEqual(
+            driver.test_to_uri('foo/bar.html'),
+            'file://%s/foo/bar.html' % port.web_tests_dir())
+        self.assertEqual(
+            driver.test_to_uri('http/tests/foo.html'),
+            'http://127.0.0.1:8000/foo.html')
+        self.assertEqual(
+            driver.test_to_uri('http/tests/https/bar.html'),
+            'https://127.0.0.1:8443/https/bar.html')
+        self.assertEqual(
+            driver.test_to_uri('http/tests/bar.https.html'),
+            'https://127.0.0.1:8443/bar.https.html')
+        self.assertEqual(
+            driver.test_to_uri('http/tests/barhttps.html'),
+            'http://127.0.0.1:8000/barhttps.html')
+        self.assertEqual(
+            driver.test_to_uri('external/wpt/foo/bar.html'),
+            'http://web-platform.test:8001/foo/bar.html')
+        self.assertEqual(
+            driver.test_to_uri('external/wpt/foo/bar.https.html'),
+            'https://web-platform.test:8444/foo/bar.https.html')
+        self.assertEqual(
+            driver.test_to_uri('external/wpt/foo/bar.serviceworker.html'),
+            'https://web-platform.test:8444/foo/bar.serviceworker.html')
+        self.assertEqual(
+            driver.test_to_uri('wpt_internal/foo/bar.html'),
+            'http://web-platform.test:8001/wpt_internal/foo/bar.html')
+        self.assertEqual(
+            driver.test_to_uri('wpt_internal/foo/bar.https.html'),
+            'https://web-platform.test:8444/wpt_internal/foo/bar.https.html')
+        self.assertEqual(
+            driver.test_to_uri('wpt_internal/foo/bar.serviceworker.html'),
+            'https://web-platform.test:8444/wpt_internal/foo/bar.serviceworker.html'
+        )
 
     def test_uri_to_test(self):
         port = self.make_port()
         driver = Driver(port, None)
-        self.assertEqual(driver.uri_to_test('file://%s/foo/bar.html' % port.web_tests_dir()), 'foo/bar.html')
-        self.assertEqual(driver.uri_to_test('http://127.0.0.1:8000/foo.html'), 'http/tests/foo.html')
-        self.assertEqual(driver.uri_to_test('https://127.0.0.1:8443/https/bar.html'), 'http/tests/https/bar.html')
-        self.assertEqual(driver.uri_to_test('https://127.0.0.1:8443/bar.https.html'), 'http/tests/bar.https.html')
-        self.assertEqual(driver.uri_to_test('http://web-platform.test:8001/foo/bar.html'),
-                         'external/wpt/foo/bar.html')
-        self.assertEqual(driver.uri_to_test('https://web-platform.test:8444/foo/bar.https.html'),
-                         'external/wpt/foo/bar.https.html')
-        self.assertEqual(driver.uri_to_test('https://web-platform.test:8444/foo/bar.serviceworker.html'),
-                         'external/wpt/foo/bar.serviceworker.html')
-        self.assertEqual(driver.uri_to_test('http://web-platform.test:8001/wpt_internal/foo/bar.html'),
-                         'wpt_internal/foo/bar.html')
-        self.assertEqual(driver.uri_to_test('https://web-platform.test:8444/wpt_internal/foo/bar.https.html'),
-                         'wpt_internal/foo/bar.https.html')
-        self.assertEqual(driver.uri_to_test('https://web-platform.test:8444/wpt_internal/foo/bar.serviceworker.html'),
-                         'wpt_internal/foo/bar.serviceworker.html')
+        self.assertEqual(
+            driver.uri_to_test(
+                'file://%s/foo/bar.html' % port.web_tests_dir()),
+            'foo/bar.html')
+        self.assertEqual(
+            driver.uri_to_test('http://127.0.0.1:8000/foo.html'),
+            'http/tests/foo.html')
+        self.assertEqual(
+            driver.uri_to_test('https://127.0.0.1:8443/https/bar.html'),
+            'http/tests/https/bar.html')
+        self.assertEqual(
+            driver.uri_to_test('https://127.0.0.1:8443/bar.https.html'),
+            'http/tests/bar.https.html')
+        self.assertEqual(
+            driver.uri_to_test('http://web-platform.test:8001/foo/bar.html'),
+            'external/wpt/foo/bar.html')
+        self.assertEqual(
+            driver.uri_to_test(
+                'https://web-platform.test:8444/foo/bar.https.html'),
+            'external/wpt/foo/bar.https.html')
+        self.assertEqual(
+            driver.uri_to_test(
+                'https://web-platform.test:8444/foo/bar.serviceworker.html'),
+            'external/wpt/foo/bar.serviceworker.html')
+        self.assertEqual(
+            driver.uri_to_test(
+                'http://web-platform.test:8001/wpt_internal/foo/bar.html'),
+            'wpt_internal/foo/bar.html')
+        self.assertEqual(
+            driver.uri_to_test(
+                'https://web-platform.test:8444/wpt_internal/foo/bar.https.html'
+            ), 'wpt_internal/foo/bar.https.html')
+        self.assertEqual(
+            driver.uri_to_test(
+                'https://web-platform.test:8444/wpt_internal/foo/bar.serviceworker.html'
+            ), 'wpt_internal/foo/bar.serviceworker.html')
 
     def test_read_block(self):
         port = self.make_port()
@@ -153,7 +196,8 @@
         port = self.make_port()
         driver = Driver(port, 0, no_timeout=True)
         cmd_line = driver.cmd_line([])
-        self.assertEqual(cmd_line[0], '/mock-checkout/out/Release/content_shell')
+        self.assertEqual(cmd_line[0],
+                         '/mock-checkout/out/Release/content_shell')
         self.assertEqual(cmd_line[-1], '-')
         self.assertIn('--no-timeout', cmd_line)
 
@@ -162,7 +206,6 @@
         driver = Driver(port, 0)
 
         class FakeServerProcess(object):
-
             def __init__(self, crashed):
                 self.crashed = crashed
 
@@ -178,8 +221,15 @@
             def stop(self, timeout=0.0):
                 pass
 
-        def assert_crash(driver, error_line, crashed, name, pid, unresponsive=False, leaked=False):
-            self.assertEqual(driver._check_for_driver_crash(error_line), crashed)
+        def assert_crash(driver,
+                         error_line,
+                         crashed,
+                         name,
+                         pid,
+                         unresponsive=False,
+                         leaked=False):
+            self.assertEqual(
+                driver._check_for_driver_crash(error_line), crashed)
             self.assertEqual(driver._crashed_process_name, name)
             self.assertEqual(driver._crashed_pid, pid)
             self.assertEqual(driver._subprocess_was_unresponsive, unresponsive)
@@ -201,35 +251,42 @@
         driver._server_process = FakeServerProcess(False)
         driver._subprocess_was_unresponsive = False
         driver._leaked = False
-        assert_crash(driver, '#CRASHED - WebProcess\n', True, 'WebProcess', None)
+        assert_crash(driver, '#CRASHED - WebProcess\n', True, 'WebProcess',
+                     None)
 
         driver._crashed_process_name = None
         driver._crashed_pid = None
         driver._server_process = FakeServerProcess(False)
         driver._subprocess_was_unresponsive = False
         driver._leaked = False
-        assert_crash(driver, '#CRASHED - WebProcess (pid 8675)\n', True, 'WebProcess', 8675)
+        assert_crash(driver, '#CRASHED - WebProcess (pid 8675)\n', True,
+                     'WebProcess', 8675)
 
         driver._crashed_process_name = None
         driver._crashed_pid = None
         driver._server_process = FakeServerProcess(False)
         driver._subprocess_was_unresponsive = False
         driver._leaked = False
-        assert_crash(driver, '#PROCESS UNRESPONSIVE - WebProcess (pid 8675)\n', True, 'WebProcess', 8675, True)
+        assert_crash(driver, '#PROCESS UNRESPONSIVE - WebProcess (pid 8675)\n',
+                     True, 'WebProcess', 8675, True)
 
         driver._crashed_process_name = None
         driver._crashed_pid = None
         driver._server_process = FakeServerProcess(False)
         driver._subprocess_was_unresponsive = False
         driver._leaked = False
-        assert_crash(driver, '#CRASHED - renderer (pid 8675)\n', True, 'renderer', 8675)
+        assert_crash(driver, '#CRASHED - renderer (pid 8675)\n', True,
+                     'renderer', 8675)
 
         driver._crashed_process_name = None
         driver._crashed_pid = None
         driver._server_process = FakeServerProcess(False)
         driver._subprocess_was_unresponsive = False
         driver._leaked = False
-        assert_crash(driver, '#LEAK - renderer pid 8675 ({"numberOfLiveDocuments":[2,3]})\n', False, None, None, False, True)
+        assert_crash(
+            driver,
+            '#LEAK - renderer pid 8675 ({"numberOfLiveDocuments":[2,3]})\n',
+            False, None, None, False, True)
 
         driver._crashed_process_name = None
         driver._crashed_pid = None
@@ -291,23 +348,23 @@
             ['--A', '--X', '--enable-features=X,Y'])
 
     def test_multiple_enable_features(self):
-        self._assert_coalesced_switches(
-            ['--A', '--enable-features=Z,X',
-             '--enable-features=Y', '--X', '--enable-features=X,Y',
-             '--enable-features=X', '--enable-features=X,X'],
-            ['--A', '--X', '--enable-features=X,Y,Z'])
+        self._assert_coalesced_switches([
+            '--A', '--enable-features=Z,X', '--enable-features=Y', '--X',
+            '--enable-features=X,Y', '--enable-features=X',
+            '--enable-features=X,X'
+        ], ['--A', '--X', '--enable-features=X,Y,Z'])
 
     def test_multiple_disable_features(self):
-        self._assert_coalesced_switches(
-            ['--A', '--disable-features=Z,X',
-             '--disable-features=Y', '--X', '--disable-features=X,Y',
-             '--disable-features=X', '--disable-features=X,X'],
-            ['--A', '--X', '--disable-features=X,Y,Z'])
+        self._assert_coalesced_switches([
+            '--A', '--disable-features=Z,X', '--disable-features=Y', '--X',
+            '--disable-features=X,Y', '--disable-features=X',
+            '--disable-features=X,X'
+        ], ['--A', '--X', '--disable-features=X,Y,Z'])
 
     def test_enable_and_disable_features(self):
         # The coalescing of --enable-features and --disable-features is
         # independent (may both enable and disable the same feature).
-        self._assert_coalesced_switches(
-            ['--A', '--disable-features=Z', '--disable-features=E,X',
-             '--enable-features=Y', '--X', '--enable-features=X,Y'],
-            ['--A', '--X', '--enable-features=X,Y', '--disable-features=E,X,Z'])
+        self._assert_coalesced_switches([
+            '--A', '--disable-features=Z', '--disable-features=E,X',
+            '--enable-features=Y', '--X', '--enable-features=X,Y'
+        ], ['--A', '--X', '--enable-features=X,Y', '--disable-features=E,X,Z'])
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/factory.py b/third_party/blink/tools/blinkpy/web_tests/port/factory.py
index 5c19cdc3..50691180 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/factory.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/factory.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Factory method to retrieve the appropriate port implementation."""
 
 import fnmatch
@@ -77,7 +76,8 @@
             port_class_name = module.get_port_class_name(class_name)
             if port_class_name is not None:
                 cls = module.__dict__[port_class_name]
-                port_name = cls.determine_full_port_name(self._host, options, class_name)
+                port_name = cls.determine_full_port_name(
+                    self._host, options, class_name)
                 return cls(self._host, port_name, options=options, **kwargs)
         else:
             for port_class in self.PORT_CLASSES:
@@ -85,8 +85,10 @@
                 module = __import__(module_name, globals(), locals(), [], -1)
                 cls = module.__dict__[class_name]
                 if port_name.startswith(cls.port_name):
-                    port_name = cls.determine_full_port_name(self._host, options, port_name)
-                    return cls(self._host, port_name, options=options, **kwargs)
+                    port_name = cls.determine_full_port_name(
+                        self._host, options, port_name)
+                    return cls(
+                        self._host, port_name, options=options, **kwargs)
         raise NotImplementedError('unsupported platform: "%s"' % port_name)
 
     def all_port_names(self, platform=None):
@@ -103,42 +105,66 @@
         return fnmatch.filter(self._host.builders.all_port_names(), platform)
 
     def get_from_builder_name(self, builder_name):
-        port_name = self._host.builders.port_name_for_builder_name(builder_name)
+        port_name = self._host.builders.port_name_for_builder_name(
+            builder_name)
         assert port_name, 'unrecognized builder name: "%s"' % builder_name
         return self.get(port_name, options=_builder_options(builder_name))
 
 
 def platform_options(use_globs=False):
     return [
-        optparse.make_option('--android', action='store_const', dest='platform',
-                             const=('android*' if use_globs else 'android'),
-                             help=('Alias for --platform=android*' if use_globs else 'Alias for --platform=android')),
-
-        optparse.make_option('--platform', action='store',
-                             help=('Glob-style list of platform/ports to use (e.g., "mac*")'
-                                   if use_globs else 'Platform to use (e.g., "mac-lion")')),
+        optparse.make_option(
+            '--android',
+            action='store_const',
+            dest='platform',
+            const=('android*' if use_globs else 'android'),
+            help=('Alias for --platform=android*'
+                  if use_globs else 'Alias for --platform=android')),
+        optparse.make_option(
+            '--platform',
+            action='store',
+            help=('Glob-style list of platform/ports to use (e.g., "mac*")'
+                  if use_globs else 'Platform to use (e.g., "mac-lion")')),
     ]
 
 
 def configuration_options():
     return [
-        optparse.make_option('--debug', action='store_const', const='Debug', dest='configuration',
-                             help='Set the configuration to Debug'),
-        optparse.make_option('-t', '--target', dest='target',
-                             help='Specify the target build subdirectory under src/out/'),
-        optparse.make_option('--release', action='store_const', const='Release', dest='configuration',
-                             help='Set the configuration to Release'),
-        optparse.make_option('--no-xvfb', action='store_false', dest='use_xvfb', default=True,
-                             help='Do not run tests with Xvfb'),
+        optparse.make_option(
+            '--debug',
+            action='store_const',
+            const='Debug',
+            dest='configuration',
+            help='Set the configuration to Debug'),
+        optparse.make_option(
+            '-t',
+            '--target',
+            dest='target',
+            help='Specify the target build subdirectory under src/out/'),
+        optparse.make_option(
+            '--release',
+            action='store_const',
+            const='Release',
+            dest='configuration',
+            help='Set the configuration to Release'),
+        optparse.make_option(
+            '--no-xvfb',
+            action='store_false',
+            dest='use_xvfb',
+            default=True,
+            help='Do not run tests with Xvfb'),
     ]
 
 
 def wpt_options():
     return [
-        optparse.make_option('--no-manifest-update', dest='manifest_update',
-                             action='store_false', default=True,
-                             help=('Do not update the web-platform-tests '
-                                   'MANIFEST.json unless it does not exist.')),
+        optparse.make_option(
+            '--no-manifest-update',
+            dest='manifest_update',
+            action='store_false',
+            default=True,
+            help=('Do not update the web-platform-tests '
+                  'MANIFEST.json unless it does not exist.')),
     ]
 
 
@@ -159,9 +185,12 @@
 
 def _builder_options(builder_name):
     return optparse.Values({
-        'builder_name': builder_name,
-        'configuration': 'Debug' if re.search(r'[d|D](ebu|b)g', builder_name) else 'Release',
-        'target': None,
+        'builder_name':
+        builder_name,
+        'configuration':
+        'Debug' if re.search(r'[d|D](ebu|b)g', builder_name) else 'Release',
+        'target':
+        None,
     })
 
 
@@ -175,7 +204,8 @@
         expected_configuration = getattr(options, 'configuration')
         if expected_configuration not in (None, gn_configuration):
             raise ValueError('Configuration does not match the GN build args. '
-                             'Expected "%s" but got "%s".' % (expected_configuration, gn_configuration))
+                             'Expected "%s" but got "%s".' %
+                             (expected_configuration, gn_configuration))
         options.configuration = gn_configuration
         return
 
@@ -184,10 +214,11 @@
     elif options.target in ('Release', 'Release_x64'):
         options.configuration = 'Release'
     else:
-        raise ValueError('Could not determine build configuration type.\n'
-                         'Either switch to one of the default target directories,\n'
-                         'use args.gn, or specify --debug or --release explicitly.\n'
-                         'If the directory is out/<dir>, then pass -t <dir>.')
+        raise ValueError(
+            'Could not determine build configuration type.\n'
+            'Either switch to one of the default target directories,\n'
+            'use args.gn, or specify --debug or --release explicitly.\n'
+            'If the directory is out/<dir>, then pass -t <dir>.')
 
 
 def _read_configuration_from_gn(fs, options):
@@ -197,7 +228,8 @@
     finder = PathFinder(fs)
     path = fs.join(finder.chromium_base(), build_directory, target, 'args.gn')
     if not fs.exists(path):
-        path = fs.join(finder.chromium_base(), build_directory, target, 'toolchain.ninja')
+        path = fs.join(finder.chromium_base(), build_directory, target,
+                       'toolchain.ninja')
         if not fs.exists(path):
             # This does not appear to be a GN-based build directory, so we don't know
             # how to interpret it.
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/factory_mock.py b/third_party/blink/tools/blinkpy/web_tests/port/factory_mock.py
index 421d16c..81cfaff 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/factory_mock.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/factory_mock.py
@@ -6,7 +6,6 @@
 
 
 class MockPortFactory(object):
-
     def __init__(self, host):
         self._host = host
 
@@ -14,5 +13,6 @@
         return TestPort(port_name=port_name, host=self._host)
 
     def get_from_builder_name(self, builder_name):
-        port_name = self._host.builders.port_name_for_builder_name(builder_name)
+        port_name = self._host.builders.port_name_for_builder_name(
+            builder_name)
         return self.get(port_name)
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/factory_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/factory_unittest.py
index 38c24a7..b39c9da 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/factory_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/factory_unittest.py
@@ -41,24 +41,36 @@
 
 class FactoryTest(unittest.TestCase):
     """Test that the factory creates the proper port object for given combination of port_name, host.platform, and options."""
+
     # FIXME: The ports themselves should expose what options they require,
     # instead of passing generic "options".
 
     def setUp(self):
         self.webkit_options = optparse.Values({})
 
-    def assert_port(self, port_name=None, os_name=None, os_version=None, options=None, cls=None):
+    def assert_port(self,
+                    port_name=None,
+                    os_name=None,
+                    os_version=None,
+                    options=None,
+                    cls=None):
         host = MockHost(os_name=os_name, os_version=os_version)
         port = factory.PortFactory(host).get(port_name, options=options)
         self.assertIsInstance(port, cls)
 
     def test_mac(self):
-        self.assert_port(port_name='mac', os_name='mac', os_version='mac10.11',
-                         cls=mac.MacPort)
+        self.assert_port(
+            port_name='mac',
+            os_name='mac',
+            os_version='mac10.11',
+            cls=mac.MacPort)
 
     def test_linux(self):
-        self.assert_port(port_name='linux', os_name='linux', os_version='trusty',
-                         cls=linux.LinuxPort)
+        self.assert_port(
+            port_name='linux',
+            os_name='linux',
+            os_version='trusty',
+            cls=linux.LinuxPort)
 
     def test_android(self):
         self.assert_port(port_name='android', cls=android.AndroidPort)
@@ -66,8 +78,8 @@
     def test_win(self):
         self.assert_port(port_name='win-win7', cls=win.WinPort)
         self.assert_port(port_name='win-win10', cls=win.WinPort)
-        self.assert_port(port_name='win', os_name='win', os_version='win7',
-                         cls=win.WinPort)
+        self.assert_port(
+            port_name='win', os_name='win', os_version='win7', cls=win.WinPort)
 
     def test_unknown_specified(self):
         with self.assertRaises(NotImplementedError):
@@ -85,16 +97,21 @@
                 'specifiers': ['Mac10.12', 'Release'],
             }
         })
-        self.assertEqual(factory.PortFactory(host).get_from_builder_name('My Fake Mac10.12 Builder').name(),
-                         'mac-mac10.12')
+        self.assertEqual(
+            factory.PortFactory(host).get_from_builder_name(
+                'My Fake Mac10.12 Builder').name(), 'mac-mac10.12')
 
     def get_port(self, target=None, configuration=None, files=None):
         host = MockHost()
         finder = PathFinder(host.filesystem)
         files = files or {}
         for path, contents in files.items():
-            host.filesystem.write_text_file(finder.path_from_chromium_base(path), contents)
-        options = optparse.Values({'target': target, 'configuration': configuration})
+            host.filesystem.write_text_file(
+                finder.path_from_chromium_base(path), contents)
+        options = optparse.Values({
+            'target': target,
+            'configuration': configuration
+        })
         return factory.PortFactory(host).get(options=options)
 
     def test_default_target_and_configuration(self):
@@ -128,26 +145,33 @@
         self.assertEqual(port._options.target, 'Release_x64')
 
     def test_release_args_gn(self):
-        port = self.get_port(target='foo', files={'out/foo/args.gn': 'is_debug = false'})
+        port = self.get_port(
+            target='foo', files={'out/foo/args.gn': 'is_debug = false'})
         self.assertEqual(port._options.configuration, 'Release')
         self.assertEqual(port._options.target, 'foo')
 
         # Also test that we handle multi-line args files properly.
-        port = self.get_port(target='foo', files={'out/foo/args.gn': 'is_debug = false\nfoo = bar\n'})
+        port = self.get_port(
+            target='foo',
+            files={'out/foo/args.gn': 'is_debug = false\nfoo = bar\n'})
         self.assertEqual(port._options.configuration, 'Release')
         self.assertEqual(port._options.target, 'foo')
 
-        port = self.get_port(target='foo', files={'out/foo/args.gn': 'foo=bar\nis_debug=false\n'})
+        port = self.get_port(
+            target='foo',
+            files={'out/foo/args.gn': 'foo=bar\nis_debug=false\n'})
         self.assertEqual(port._options.configuration, 'Release')
         self.assertEqual(port._options.target, 'foo')
 
     def test_debug_args_gn(self):
-        port = self.get_port(target='foo', files={'out/foo/args.gn': 'is_debug = true'})
+        port = self.get_port(
+            target='foo', files={'out/foo/args.gn': 'is_debug = true'})
         self.assertEqual(port._options.configuration, 'Debug')
         self.assertEqual(port._options.target, 'foo')
 
     def test_default_gn_build(self):
-        port = self.get_port(target='Default', files={'out/Default/toolchain.ninja': ''})
+        port = self.get_port(
+            target='Default', files={'out/Default/toolchain.ninja': ''})
         self.assertEqual(port._options.configuration, 'Debug')
         self.assertEqual(port._options.target, 'Default')
 
@@ -162,5 +186,7 @@
 
     def test_both_configuration_and_target_is_an_error(self):
         with self.assertRaises(ValueError):
-            self.get_port(target='Debug', configuration='Release',
-                          files={'out/Debug/toolchain.ninja': ''})
+            self.get_port(
+                target='Debug',
+                configuration='Release',
+                files={'out/Debug/toolchain.ninja': ''})
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
index 2f53dd1..710c52e 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
@@ -43,12 +43,12 @@
 from blinkpy.web_tests.port import linux
 from blinkpy.web_tests.port import server_process
 
-
 # Modules loaded dynamically in _import_fuchsia_runner().
 # pylint: disable=invalid-name
 fuchsia_target = None
 qemu_target = None
 symbolizer = None
+
 # pylint: enable=invalid-name
 
 
@@ -94,7 +94,6 @@
 
 PROCESS_START_TIMEOUT = 20
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -113,8 +112,7 @@
     def __init__(self, process, prefix):
         self._process = process
         self._thread = threading.Thread(
-            target=_subprocess_log_thread,
-            args=(process.stdout, prefix))
+            target=_subprocess_log_thread, args=(process.stdout, prefix))
         self._thread.daemon = True
         self._thread.start()
 
@@ -124,6 +122,7 @@
     def close(self):
         self._process.kill()
 
+
 class _TargetHost(object):
     def __init__(self, build_path, build_ids_path, ports_to_forward,
                  target_device, results_directory):
@@ -158,9 +157,10 @@
         # Tell SSH to forward all server ports from the Fuchsia device to
         # the host.
         forwarding_flags = [
-          '-O', 'forward',  # Send SSH mux control signal.
-          '-N',  # Don't execute command
-          '-T'  # Don't allocate terminal.
+            '-O',
+            'forward',  # Send SSH mux control signal.
+            '-N',  # Don't execute command
+            '-T'  # Don't allocate terminal.
         ]
         for port in ports_to_forward:
             forwarding_flags += ['-R', '%d:localhost:%d' % (port, port)]
@@ -173,10 +173,9 @@
                                                       stderr=subprocess.STDOUT)
 
         listener_log_path = os.path.join(results_directory, 'system.log')
-        listener_log = open(listener_log_path,'w')
-        self.symbolizer = symbolizer.RunSymbolizer(self._listener.stdout,
-                                                   listener_log,
-                                                   [build_ids_path])
+        listener_log = open(listener_log_path, 'w')
+        self.symbolizer = symbolizer.RunSymbolizer(
+            self._listener.stdout, listener_log, [build_ids_path])
 
         package_path = os.path.join(build_path, CONTENT_SHELL_PACKAGE_PATH)
         self._target.InstallPackage([package_path])
@@ -189,7 +188,9 @@
 
     def run_command(self, command):
         return self.target_command_runner.RunCommandPiped(
-            command, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+            command,
+            stdin=subprocess.PIPE,
+            stdout=subprocess.PIPE,
             stderr=subprocess.PIPE)
 
     def cleanup(self):
@@ -204,9 +205,12 @@
 class FuchsiaPort(base.Port):
     port_name = 'fuchsia'
 
-    SUPPORTED_VERSIONS = ('fuchsia',)
+    SUPPORTED_VERSIONS = ('fuchsia', )
 
-    FALLBACK_PATHS = {'fuchsia': ['fuchsia'] + linux.LinuxPort.latest_platform_fallback_path()}
+    FALLBACK_PATHS = {
+        'fuchsia':
+        ['fuchsia'] + linux.LinuxPort.latest_platform_fallback_path()
+    }
 
     def __init__(self, host, port_name, **kwargs):
         super(FuchsiaPort, self).__init__(host, port_name, **kwargs)
@@ -240,15 +244,15 @@
     def setup_test_run(self):
         super(FuchsiaPort, self).setup_test_run()
         try:
-            self._target_host = _TargetHost(
-                self._build_path(), self.get_build_ids_path(),
-                self.SERVER_PORTS, self._target_device,
-                self.results_directory())
+            self._target_host = _TargetHost(self._build_path(),
+                                            self.get_build_ids_path(),
+                                            self.SERVER_PORTS,
+                                            self._target_device,
+                                            self.results_directory())
 
             if self.get_option('zircon_logging'):
                 self._zircon_logger = SubprocessOutputLogger(
-                    self._target_host.run_command(['dlog', '-f']),
-                    'Zircon')
+                    self._target_host.run_command(['dlog', '-f']), 'Zircon')
 
             # Save fuchsia_target in _options, so it can be shared with other
             # workers.
@@ -285,8 +289,8 @@
         additional_dirs['/gen'] = self.generated_sources_directory()
         additional_dirs['/third_party/blink'] = \
             self._path_from_chromium_base('third_party', 'blink')
-        super(FuchsiaPort, self).start_http_server(
-            additional_dirs, number_of_drivers)
+        super(FuchsiaPort, self).start_http_server(additional_dirs,
+                                                   number_of_drivers)
 
     def path_to_apache(self):
         return self._host_port.path_to_apache()
@@ -307,26 +311,27 @@
 
 class ChromiumFuchsiaDriver(driver.Driver):
     def __init__(self, port, worker_number, no_timeout=False):
-        super(ChromiumFuchsiaDriver, self).__init__(
-            port, worker_number, no_timeout)
+        super(ChromiumFuchsiaDriver, self).__init__(port, worker_number,
+                                                    no_timeout)
 
     def _base_cmd_line(self):
-        cmd = ['run', 'fuchsia-pkg://fuchsia.com/content_shell#meta/content_shell.cmx']
+        cmd = [
+            'run',
+            'fuchsia-pkg://fuchsia.com/content_shell#meta/content_shell.cmx'
+        ]
         if self._port._target_device == 'qemu':
             cmd.append('--ozone-platform=headless')
         # Use Scenic on AEMU
         elif self._port._target_device == 'aemu':
             cmd.extend([
-                '--ozone-platform=scenic',
-                '--enable-oop-rasterization',
-                '--use-gl=stub',
-                '--enable-features=UseSkiaRenderer,Vulkan'
+                '--ozone-platform=scenic', '--enable-oop-rasterization',
+                '--use-gl=stub', '--enable-features=UseSkiaRenderer,Vulkan'
             ])
         return cmd
 
     def _command_from_driver_input(self, driver_input):
-        command = super(ChromiumFuchsiaDriver, self)._command_from_driver_input(
-            driver_input)
+        command = super(ChromiumFuchsiaDriver,
+                        self)._command_from_driver_input(driver_input)
         if command.startswith('/'):
             relative_test_filename = \
                 os.path.relpath(command, self._port.web_tests_dir())
@@ -337,8 +342,13 @@
 
 # Custom version of ServerProcess that runs processes on a remote device.
 class FuchsiaServerProcess(server_process.ServerProcess):
-    def __init__(self, port_obj, name, cmd, env=None,
-                 treat_no_data_as_crash=False, more_logging=False):
+    def __init__(self,
+                 port_obj,
+                 name,
+                 cmd,
+                 env=None,
+                 treat_no_data_as_crash=False,
+                 more_logging=False):
         super(FuchsiaServerProcess, self).__init__(
             port_obj, name, cmd, env, treat_no_data_as_crash, more_logging)
         self._symbolizer_proc = None
@@ -384,13 +394,14 @@
         proc.stdin = stdin_pipe
         # Run symbolizer to filter the stderr stream.
         self._symbolizer_proc = symbolizer.RunSymbolizer(
-            proc.stderr, subprocess.PIPE, [self._port.get_build_ids_path()]);
+            proc.stderr, subprocess.PIPE, [self._port.get_build_ids_path()])
         proc.stderr = self._symbolizer_proc.stdout
 
         self._set_proc(proc)
 
     def stop(self, timeout_secs=0.0, kill_tree=False):
-        result = super(FuchsiaServerProcess, self).stop(timeout_secs, kill_tree)
+        result = super(FuchsiaServerProcess, self).stop(
+            timeout_secs, kill_tree)
         if self._symbolizer_proc:
             self._symbolizer_proc.kill()
         return result
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/ios.py b/third_party/blink/tools/blinkpy/web_tests/port/ios.py
index 86c93ef..e496d70 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/ios.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/ios.py
@@ -25,14 +25,12 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Chromium iOS implementation of the Port interface."""
 
 import logging
 
 from blinkpy.web_tests.port import base
 
-
 _log = logging.getLogger(__name__)
 
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/linux.py b/third_party/blink/tools/blinkpy/web_tests/port/linux.py
index 7c6695d..01205b6 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/linux.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/linux.py
@@ -34,17 +34,17 @@
 from blinkpy.web_tests.port import base
 from blinkpy.web_tests.port import win
 
-
 _log = logging.getLogger(__name__)
 
 
 class LinuxPort(base.Port):
     port_name = 'linux'
 
-    SUPPORTED_VERSIONS = ('trusty',)
+    SUPPORTED_VERSIONS = ('trusty', )
 
     FALLBACK_PATHS = {}
-    FALLBACK_PATHS['trusty'] = ['linux'] + win.WinPort.latest_platform_fallback_path()
+    FALLBACK_PATHS['trusty'] = (
+        ['linux'] + win.WinPort.latest_platform_fallback_path())
 
     BUILD_REQUIREMENTS_URL = 'https://chromium.googlesource.com/chromium/src/+/master/docs/linux/build_instructions.md'
 
@@ -75,7 +75,11 @@
     def additional_driver_flags(self):
         flags = super(LinuxPort, self).additional_driver_flags()
         if not self.get_option('disable_breakpad'):
-            flags += ['--enable-crash-reporter', '--crash-dumps-dir=%s' % self._dump_reader.crash_dumps_directory()]
+            flags += [
+                '--enable-crash-reporter',
+                '--crash-dumps-dir=%s' %
+                self._dump_reader.crash_dumps_directory()
+            ]
         return flags
 
     def check_build(self, needs_http, printer):
@@ -84,13 +88,16 @@
         if result:
             _log.error('For complete Linux build requirements, please see:')
             _log.error('')
-            _log.error('    https://chromium.googlesource.com/chromium/src/+/master/docs/linux/build_instructions.md')
+            _log.error(
+                '    https://chromium.googlesource.com/chromium/src/+/master/docs/linux/build_instructions.md'
+            )
         return result
 
     def look_for_new_crash_logs(self, crashed_processes, start_time):
         if self.get_option('disable_breakpad'):
             return None
-        return self._dump_reader.look_for_new_crash_logs(crashed_processes, start_time)
+        return self._dump_reader.look_for_new_crash_logs(
+            crashed_processes, start_time)
 
     def clobber_old_port_specific_results(self):
         if not self.get_option('disable_breakpad'):
@@ -174,15 +181,21 @@
         # See: https://crbug.com/715848
         env = self.host.environ.copy()
         if env.get('TMPDIR') and env['TMPDIR'] != '/tmp':
-            _log.info('Overriding TMPDIR to "/tmp" for Xvfb, was: %s', env['TMPDIR'])
+            _log.info('Overriding TMPDIR to "/tmp" for Xvfb, was: %s',
+                      env['TMPDIR'])
             env['TMPDIR'] = '/tmp'
 
         _log.debug('Starting Xvfb with display "%s".', display)
         self._xvfb_stdout = tempfile.NamedTemporaryFile(delete=False)
         self._xvfb_stderr = tempfile.NamedTemporaryFile(delete=False)
         self._xvfb_process = self.host.executive.popen(
-            ['Xvfb', display, '-screen', '0', '1280x800x24', '-ac', '-dpi', '96'],
-            stdout=self._xvfb_stdout, stderr=self._xvfb_stderr, env=env)
+            [
+                'Xvfb', display, '-screen', '0', '1280x800x24', '-ac', '-dpi',
+                '96'
+            ],
+            stdout=self._xvfb_stdout,
+            stderr=self._xvfb_stderr,
+            env=env)
 
         # By setting DISPLAY here, the individual worker processes will
         # get the right DISPLAY. Note, if this environment could be passed
@@ -199,17 +212,22 @@
                 break
             # We don't explicitly set the display, as we want to check the
             # environment value.
-            exit_code = self.host.executive.run_command(
-                ['xdpyinfo'], return_exit_code=True)
+            exit_code = self.host.executive.run_command(['xdpyinfo'],
+                                                        return_exit_code=True)
             if exit_code == 0:
-                _log.debug('Successfully started Xvfb with display "%s".', display)
+                _log.debug('Successfully started Xvfb with display "%s".',
+                           display)
                 return True
-            _log.warn('xdpyinfo check failed with exit code %s while starting Xvfb on "%s".', exit_code, display)
+            _log.warn(
+                'xdpyinfo check failed with exit code %s while starting Xvfb on "%s".',
+                exit_code, display)
             self.host.sleep(0.1)
 
         retcode = self._xvfb_process.poll()
         self._stop_xvfb(save_logs=True)
-        _log.critical('Failed to start Xvfb on display "%s" (xvfb retcode: %r).', display, retcode)
+        _log.critical(
+            'Failed to start Xvfb on display "%s" (xvfb retcode: %r).',
+            display, retcode)
         return False
 
     def _find_display(self):
@@ -237,19 +255,25 @@
             start_time = self.host.time()
             while self.host.time() - start_time < self.XVFB_START_STOP_TIMEOUT:
                 if self._xvfb_process.poll() is not None:
-                    _log.debug('Xvfb exited with code %d.', self._xvfb_process.poll())
+                    _log.debug('Xvfb exited with code %d.',
+                               self._xvfb_process.poll())
                     break
                 self.host.sleep(0.1)
             else:
-                _log.debug('Killing Xvfb process pid %d.', self._xvfb_process.pid)
+                _log.debug('Killing Xvfb process pid %d.',
+                           self._xvfb_process.pid)
                 self._xvfb_process.kill()
                 self._xvfb_process.wait()
-        if save_logs and self._xvfb_stdout and self.host.filesystem.exists(self._xvfb_stdout.name):
-            for line in self.host.filesystem.read_text_file(self._xvfb_stdout.name).splitlines():
+        if save_logs and self._xvfb_stdout and self.host.filesystem.exists(
+                self._xvfb_stdout.name):
+            for line in self.host.filesystem.read_text_file(
+                    self._xvfb_stdout.name).splitlines():
                 _log.warn('Xvfb stdout:  %s', line)
             self.host.filesystem.remove(self._xvfb_stdout.name)
-        if save_logs and self._xvfb_stderr and self.host.filesystem.exists(self._xvfb_stderr.name):
-            for line in self.host.filesystem.read_text_file(self._xvfb_stderr.name).splitlines():
+        if save_logs and self._xvfb_stderr and self.host.filesystem.exists(
+                self._xvfb_stderr.name):
+            for line in self.host.filesystem.read_text_file(
+                    self._xvfb_stderr.name).splitlines():
                 _log.warn('Xvfb stderr:  %s', line)
             self.host.filesystem.remove(self._xvfb_stderr.name)
         self._xvfb_stdout = self._xvfb_stderr = self._xvfb_process = None
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/linux_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/linux_unittest.py
index b23920cf..482527e0 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/linux_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/linux_unittest.py
@@ -44,37 +44,45 @@
     full_port_name = 'linux-trusty'
     port_maker = linux.LinuxPort
 
-    def assert_version_properties(self, port_name, os_version, expected_name,
+    def assert_version_properties(self,
+                                  port_name,
+                                  os_version,
+                                  expected_name,
                                   expected_version,
                                   driver_file_output=None):
-        host = MockSystemHost(os_name=self.os_name, os_version=(os_version or self.os_version))
+        host = MockSystemHost(
+            os_name=self.os_name, os_version=(os_version or self.os_version))
         host.filesystem.isfile = lambda x: 'content_shell' in x
         if driver_file_output:
             host.executive = MockExecutive(driver_file_output)
-        port = self.make_port(host=host, port_name=port_name, os_version=os_version)
+        port = self.make_port(
+            host=host, port_name=port_name, os_version=os_version)
         self.assertEqual(port.name(), expected_name)
         self.assertEqual(port.version(), expected_version)
 
     def test_versions(self):
-        self.assertTrue(self.make_port().name() in ('linux-trusty',))
+        self.assertTrue(self.make_port().name() in ('linux-trusty', ))
 
-        self.assert_version_properties('linux', 'trusty', 'linux-trusty', 'trusty')
-        self.assert_version_properties('linux-trusty', None, 'linux-trusty', 'trusty')
+        self.assert_version_properties('linux', 'trusty', 'linux-trusty',
+                                       'trusty')
+        self.assert_version_properties('linux-trusty', None, 'linux-trusty',
+                                       'trusty')
         with self.assertRaises(AssertionError):
-            self.assert_version_properties('linux-utopic', None, 'ignored', 'ignored', 'ignored')
+            self.assert_version_properties('linux-utopic', None, 'ignored',
+                                           'ignored', 'ignored')
 
     def assert_baseline_paths(self, port_name, os_version, *expected_paths):
         port = self.make_port(port_name=port_name, os_version=os_version)
-        self.assertEqual(
-            port.baseline_version_dir(),
-            port._absolute_baseline_path(expected_paths[0]))  # pylint: disable=protected-access
+        self.assertEqual(port.baseline_version_dir(),
+                         port._absolute_baseline_path(expected_paths[0]))  # pylint: disable=protected-access
         self.assertEqual(len(port.baseline_search_path()), len(expected_paths))
         for i, path in enumerate(expected_paths):
             self.assertTrue(port.baseline_search_path()[i].endswith(path))
 
     def test_get_platform_tags(self):
         port = self.make_port()
-        self.assertEqual(port.get_platform_tags(), {'linux', 'trusty', 'x86_64', 'release'})
+        self.assertEqual(port.get_platform_tags(),
+                         {'linux', 'trusty', 'x86_64', 'release'})
 
     def test_baseline_paths(self):
         self.assert_baseline_paths('linux', 'trusty', 'linux', '/win')
@@ -91,13 +99,18 @@
 
     def test_driver_name_option(self):
         # pylint: disable=protected-access
-        self.assertTrue(self.make_port()._path_to_driver().endswith('content_shell'))
-        port = self.make_port(options=optparse.Values({'driver_name': 'OtherDriver'}))
+        self.assertTrue(
+            self.make_port()._path_to_driver().endswith('content_shell'))
+        port = self.make_port(
+            options=optparse.Values({
+                'driver_name': 'OtherDriver'
+            }))
         self.assertTrue(port._path_to_driver().endswith('OtherDriver'))
 
     def test_path_to_image_diff(self):
         # pylint: disable=protected-access
-        self.assertEqual(self.make_port()._path_to_image_diff(), '/mock-checkout/out/Release/image_diff')
+        self.assertEqual(self.make_port()._path_to_image_diff(),
+                         '/mock-checkout/out/Release/image_diff')
 
     def test_dummy_home_dir_is_created_and_cleaned_up(self):
         def run_command_fake(args):
@@ -115,7 +128,9 @@
         temp_home_dir = port.host.environ['HOME']
         self.assertNotEqual(temp_home_dir, '/home/user')
         self.assertTrue(port.host.filesystem.isdir(temp_home_dir))
-        self.assertTrue(port.host.filesystem.isfile(port.host.filesystem.join(temp_home_dir, '.Xauthority')))
+        self.assertTrue(
+            port.host.filesystem.isfile(
+                port.host.filesystem.join(temp_home_dir, '.Xauthority')))
 
         # Clean up; HOME should be reset and the temp dir should be cleaned up.
         port.clean_up_test_run()
@@ -132,13 +147,14 @@
         port.host.executive = MockExecutive(run_command_fn=run_command_fake)
 
         self.assertIsNone(port.setup_test_run())
-        self.assertEqual(
-            port.host.executive.calls,
+        self.assertEqual(port.host.executive.calls, [
+            ['xdpyinfo', '-display', ':99'],
             [
-                ['xdpyinfo', '-display', ':99'],
-                ['Xvfb', ':99', '-screen', '0', '1280x800x24', '-ac', '-dpi', '96'],
-                ['xdpyinfo'],
-            ])
+                'Xvfb', ':99', '-screen', '0', '1280x800x24', '-ac', '-dpi',
+                '96'
+            ],
+            ['xdpyinfo'],
+        ])
         env = port.setup_environ_for_server()
         self.assertEqual(env['DISPLAY'], ':99')
 
@@ -153,14 +169,17 @@
         port.host.executive = MockExecutive(run_command_fn=run_command_fake)
 
         self.assertIsNone(port.setup_test_run())
-        self.assertEqual(
-            port.host.executive.calls,
+        self.assertEqual(port.host.executive.calls, [
+            ['xdpyinfo', '-display', ':99'],
             [
-                ['xdpyinfo', '-display', ':99'],
-                ['Xvfb', ':99', '-screen', '0', '1280x800x24', '-ac', '-dpi', '96'],
-                ['xdpyinfo'],
-            ])
-        self.assertEqual(port.host.executive.full_calls[1].kwargs['env'].get('TMPDIR'), '/tmp')
+                'Xvfb', ':99', '-screen', '0', '1280x800x24', '-ac', '-dpi',
+                '96'
+            ],
+            ['xdpyinfo'],
+        ])
+        self.assertEqual(
+            port.host.executive.full_calls[1].kwargs['env'].get('TMPDIR'),
+            '/tmp')
         env = port.setup_environ_for_server()
         self.assertEqual(env['DISPLAY'], ':99')
 
@@ -182,7 +201,10 @@
                 ['xdpyinfo', '-display', ':100'],
                 ['xdpyinfo', '-display', ':101'],
                 ['xdpyinfo', '-display', ':102'],
-                ['Xvfb', ':102', '-screen', '0', '1280x800x24', '-ac', '-dpi', '96'],
+                [
+                    'Xvfb', ':102', '-screen', '0', '1280x800x24', '-ac',
+                    '-dpi', '96'
+                ],
                 ['xdpyinfo'],
             ])
         env = port.setup_environ_for_server()
@@ -205,16 +227,17 @@
         port.host.executive = MockExecutive(run_command_fn=run_command_fake)
 
         self.assertIsNone(port.setup_test_run())
-        self.assertEqual(
-            port.host.executive.calls,
+        self.assertEqual(port.host.executive.calls, [
+            ['xdpyinfo', '-display', ':99'],
             [
-                ['xdpyinfo', '-display', ':99'],
-                ['Xvfb', ':99', '-screen', '0', '1280x800x24', '-ac', '-dpi', '96'],
-                ['xdpyinfo'],
-                ['xdpyinfo'],
-                ['xdpyinfo'],
-                ['xdpyinfo'],
-            ])
+                'Xvfb', ':99', '-screen', '0', '1280x800x24', '-ac', '-dpi',
+                '96'
+            ],
+            ['xdpyinfo'],
+            ['xdpyinfo'],
+            ['xdpyinfo'],
+            ['xdpyinfo'],
+        ])
         env = port.setup_environ_for_server()
         self.assertEqual(env['DISPLAY'], ':99')
 
@@ -230,21 +253,21 @@
         self.set_logging_level(logging.DEBUG)
 
         self.assertEqual(port.setup_test_run(), SYS_DEPS_EXIT_STATUS)
-        self.assertEqual(
-            port.host.executive.calls,
+        self.assertEqual(port.host.executive.calls, [
+            ['xdpyinfo', '-display', ':99'],
             [
-                ['xdpyinfo', '-display', ':99'],
-                ['Xvfb', ':99', '-screen', '0', '1280x800x24', '-ac', '-dpi', '96'],
-            ] + [['xdpyinfo']] * 51)
+                'Xvfb', ':99', '-screen', '0', '1280x800x24', '-ac', '-dpi',
+                '96'
+            ],
+        ] + [['xdpyinfo']] * 51)
         env = port.setup_environ_for_server()
         self.assertEqual(env['DISPLAY'], ':99')
-        self.assertLog(
-            ['DEBUG: Starting Xvfb with display ":99".\n'] +
-            ['WARNING: xdpyinfo check failed with exit code 1 while starting Xvfb on ":99".\n'] * 51 +
-            [
-                'DEBUG: Killing Xvfb process pid 42.\n',
-                'CRITICAL: Failed to start Xvfb on display ":99" (xvfb retcode: None).\n',
-            ])
+        self.assertLog(['DEBUG: Starting Xvfb with display ":99".\n'] + [
+            'WARNING: xdpyinfo check failed with exit code 1 while starting Xvfb on ":99".\n'
+        ] * 51 + [
+            'DEBUG: Killing Xvfb process pid 42.\n',
+            'CRITICAL: Failed to start Xvfb on display ":99" (xvfb retcode: None).\n',
+        ])
 
     def test_setup_test_runs_terminates_if_xvfb_proc_fails(self):
         def run_command_fake(args):
@@ -263,12 +286,10 @@
         self.set_logging_level(logging.DEBUG)
 
         self.assertEqual(port.setup_test_run(), SYS_DEPS_EXIT_STATUS)
-        self.assertEqual(
-            port.host.executive.calls,
-            [
-                ['xdpyinfo', '-display', ':99'],
-                ['Xvfb', ':99', '-screen', '0', '1280x800x24', '-ac', '-dpi', '96']
-            ])
+        self.assertEqual(port.host.executive.calls, [[
+            'xdpyinfo', '-display', ':99'
+        ], ['Xvfb', ':99', '-screen', '0', '1280x800x24', '-ac', '-dpi', '96']
+                                                     ])
         self.assertLog([
             'DEBUG: Starting Xvfb with display ":99".\n',
             'CRITICAL: Failed to start Xvfb on display ":99" (xvfb retcode: 3).\n'
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/mac.py b/third_party/blink/tools/blinkpy/web_tests/port/mac.py
index ba5ee14c..6f79ed0 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/mac.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/mac.py
@@ -25,19 +25,18 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Chromium Mac implementation of the Port interface."""
 
 import logging
 
 from blinkpy.web_tests.port import base
 
-
 _log = logging.getLogger(__name__)
 
 
 class MacPort(base.Port):
-    SUPPORTED_VERSIONS = ('mac10.10', 'mac10.11', 'mac10.12', 'mac10.13', 'mac10.14', 'mac10.15', 'retina')
+    SUPPORTED_VERSIONS = ('mac10.10', 'mac10.11', 'mac10.12', 'mac10.13',
+                          'mac10.14', 'mac10.15', 'retina')
     port_name = 'mac'
 
     # FIXME: We treat Retina (High-DPI) devices as if they are running a
@@ -80,7 +79,9 @@
         if result:
             _log.error('For complete Mac build requirements, please see:')
             _log.error('')
-            _log.error('    https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md')
+            _log.error(
+                '    https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md'
+            )
 
         return result
 
@@ -92,12 +93,17 @@
     #
 
     def path_to_apache(self):
-        return self._path_from_chromium_base(
-            'third_party', 'apache-mac', 'bin', 'httpd')
+        return self._path_from_chromium_base('third_party', 'apache-mac',
+                                             'bin', 'httpd')
 
     def path_to_apache_config_file(self):
-        config_file_basename = 'apache2-httpd-%s-php7.conf' % (self._apache_version(),)
-        return self._filesystem.join(self.apache_config_directory(), config_file_basename)
+        config_file_basename = 'apache2-httpd-%s-php7.conf' % (
+            self._apache_version(), )
+        return self._filesystem.join(self.apache_config_directory(),
+                                     config_file_basename)
 
     def _path_to_driver(self, target=None):
-        return self._build_path_with_target(target, self.driver_name() + '.app', 'Contents', 'MacOS', self.driver_name())
+        return self._build_path_with_target(target,
+                                            self.driver_name() + '.app',
+                                            'Contents', 'MacOS',
+                                            self.driver_name())
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/mac_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/mac_unittest.py
index ed4d465..c99069f 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/mac_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/mac_unittest.py
@@ -40,7 +40,8 @@
     port_maker = mac.MacPort
 
     def assert_name(self, port_name, os_version_string, expected):
-        port = self.make_port(os_version=os_version_string, port_name=port_name)
+        port = self.make_port(
+            os_version=os_version_string, port_name=port_name)
         self.assertEqual(expected, port.name())
 
     def test_operating_system(self):
@@ -48,19 +49,24 @@
 
     def test_get_platform_tags(self):
         port = self.make_port()
-        self.assertEqual(port.get_platform_tags(), {'mac', 'mac10.12', 'x86', 'release'})
+        self.assertEqual(port.get_platform_tags(),
+                         {'mac', 'mac10.12', 'x86', 'release'})
 
     def test_driver_name_option(self):
-        self.assertTrue(self.make_port()._path_to_driver().endswith('Content Shell'))
-        port = self.make_port(options=optparse.Values(dict(driver_name='OtherDriver')))
+        self.assertTrue(
+            self.make_port()._path_to_driver().endswith('Content Shell'))
+        port = self.make_port(
+            options=optparse.Values(dict(driver_name='OtherDriver')))
         self.assertTrue(port._path_to_driver().endswith('OtherDriver'))  # pylint: disable=protected-access
 
     def test_path_to_image_diff(self):
-        self.assertEqual(self.make_port()._path_to_image_diff(), '/mock-checkout/out/Release/image_diff')
+        self.assertEqual(self.make_port()._path_to_image_diff(),
+                         '/mock-checkout/out/Release/image_diff')
 
     def test_path_to_apache_config_file(self):
         port = self.make_port()
         port._apache_version = lambda: '2.4'  # pylint: disable=protected-access
         self.assertEqual(
             port.path_to_apache_config_file(),
-            '/mock-checkout/third_party/blink/tools/apache_config/apache2-httpd-2.4-php7.conf')
+            '/mock-checkout/third_party/blink/tools/apache_config/apache2-httpd-2.4-php7.conf'
+        )
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/mock_drt.py b/third_party/blink/tools/blinkpy/web_tests/port/mock_drt.py
index 14da2a2e..15ac8d3 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/mock_drt.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/mock_drt.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """This is an implementation of the Port interface that overrides other
 ports and changes the Driver binary to "MockDRT".
 
@@ -43,7 +42,9 @@
 
 # Since we execute this script directly as part of the unit tests, we need to ensure
 # that blink/tools is in sys.path for the next imports to work correctly.
-tools_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
+tools_dir = os.path.dirname(
+    os.path.dirname(
+        os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
 if tools_dir not in sys.path:
     sys.path.insert(0, tools_dir)
 
@@ -63,9 +64,11 @@
         return port_name
 
     def __init__(self, host, port_name, **kwargs):
-        self.__delegate = PortFactory(host).get(port_name.replace('mock-', ''), **kwargs)
+        self.__delegate = PortFactory(host).get(
+            port_name.replace('mock-', ''), **kwargs)
         self.__delegate_driver_class = self.__delegate._driver_class
-        self.__delegate._driver_class = types.MethodType(self._driver_class, self.__delegate)
+        self.__delegate._driver_class = types.MethodType(
+            self._driver_class, self.__delegate)
 
     def __getattr__(self, name):
         return getattr(self.__delegate, name)
@@ -80,21 +83,24 @@
         return self._mocked_driver_maker
 
     def _mocked_driver_maker(self, port, worker_number, no_timeout=False):
-        path_to_this_file = self.host.filesystem.abspath(__file__.replace('.pyc', '.py'))
-        driver = self.__delegate_driver_class()(self, worker_number, no_timeout)
-        driver.cmd_line = self._overriding_cmd_line(driver.cmd_line,
-                                                    self.__delegate._path_to_driver(),
-                                                    sys.executable,
-                                                    path_to_this_file,
-                                                    self.__delegate.name())
+        path_to_this_file = self.host.filesystem.abspath(
+            __file__.replace('.pyc', '.py'))
+        driver = self.__delegate_driver_class()(self, worker_number,
+                                                no_timeout)
+        driver.cmd_line = self._overriding_cmd_line(
+            driver.cmd_line, self.__delegate._path_to_driver(), sys.executable,
+            path_to_this_file, self.__delegate.name())
         return driver
 
     @staticmethod
-    def _overriding_cmd_line(original_cmd_line, driver_path, python_exe, this_file, port_name):
+    def _overriding_cmd_line(original_cmd_line, driver_path, python_exe,
+                             this_file, port_name):
         def new_cmd_line(per_test_args):
             cmd_line = original_cmd_line(per_test_args)
             index = cmd_line.index(driver_path)
-            cmd_line[index:index + 1] = [python_exe, this_file, '--platform', port_name]
+            cmd_line[index:index + 1] = [
+                python_exe, this_file, '--platform', port_name
+            ]
             return cmd_line
 
         return new_cmd_line
@@ -148,14 +154,15 @@
         return None
 
     options = optparse.Values({
-        'actual_directory': get_arg('--actual-directory'),
-        'platform': get_arg('--platform'),
+        'actual_directory':
+        get_arg('--actual-directory'),
+        'platform':
+        get_arg('--platform'),
     })
     return (options, argv)
 
 
 class MockDRT(object):
-
     def __init__(self, options, args, host, stdin, stdout, stderr):
         self._options = options
         self._args = args
@@ -167,7 +174,8 @@
         port_name = None
         if options.platform:
             port_name = options.platform
-        self._port = PortFactory(host).get(port_name=port_name, options=options)
+        self._port = PortFactory(host).get(
+            port_name=port_name, options=options)
         self._driver = self._port.create_driver(0)
 
     def run(self):
@@ -179,8 +187,9 @@
                 return 0
             driver_input = self.input_from_line(line)
             dirname, basename = self._port.split_test(driver_input.test_name)
-            is_reftest = (self._port.reference_files(driver_input.test_name) or
-                          self._port.is_reference_html_file(self._port.host.filesystem, dirname, basename))
+            is_reftest = (self._port.reference_files(driver_input.test_name)
+                          or self._port.is_reference_html_file(
+                              self._port.host.filesystem, dirname, basename))
             output = self.output_for_test(driver_input, is_reftest)
             self.write_test_output(driver_input, output, is_reftest)
 
@@ -220,21 +229,27 @@
             actual_image = port.expected_image(test_input.test_name)
 
         if self._options.actual_directory:
-            actual_path = port.host.filesystem.join(self._options.actual_directory, test_input.test_name)
+            actual_path = port.host.filesystem.join(
+                self._options.actual_directory, test_input.test_name)
             root, _ = port.host.filesystem.splitext(actual_path)
             text_path = root + '-actual.txt'
             if port.host.filesystem.exists(text_path):
                 actual_text = port.host.filesystem.read_binary_file(text_path)
             audio_path = root + '-actual.wav'
             if port.host.filesystem.exists(audio_path):
-                actual_audio = port.host.filesystem.read_binary_file(audio_path)
+                actual_audio = port.host.filesystem.read_binary_file(
+                    audio_path)
             image_path = root + '-actual.png'
             if port.host.filesystem.exists(image_path):
-                actual_image = port.host.filesystem.read_binary_file(image_path)
-                with port.host.filesystem.open_binary_file_for_reading(image_path) as filehandle:
-                    actual_checksum = read_checksum_from_png.read_checksum(filehandle)
+                actual_image = port.host.filesystem.read_binary_file(
+                    image_path)
+                with port.host.filesystem.open_binary_file_for_reading(
+                        image_path) as filehandle:
+                    actual_checksum = read_checksum_from_png.read_checksum(
+                        filehandle)
 
-        return DriverOutput(actual_text, actual_image, actual_checksum, actual_audio)
+        return DriverOutput(actual_text, actual_image, actual_checksum,
+                            actual_audio)
 
     def write_test_output(self, test_input, output, is_reftest):
         if output.audio:
@@ -268,4 +283,5 @@
 if __name__ == '__main__':
     # Note that the Mock in MockDRT refers to the fact that it is emulating a
     # real DRT, and as such, it needs access to a real SystemHost, not a MockSystemHost.
-    sys.exit(main(sys.argv[1:], SystemHost(), sys.stdin, sys.stdout, sys.stderr))
+    sys.exit(
+        main(sys.argv[1:], SystemHost(), sys.stdin, sys.stdout, sys.stderr))
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/mock_drt_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/mock_drt_unittest.py
index 80552d03..40998dc 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/mock_drt_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/mock_drt_unittest.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit tests for MockDRT."""
 
 import io
@@ -40,14 +39,19 @@
 
 
 class MockDRTPortTest(port_testcase.PortTestCase):
-
-    def make_port(self, host=None, options=optparse.Values({'configuration': 'Release'})):
+    def make_port(self,
+                  host=None,
+                  options=optparse.Values({
+                      'configuration': 'Release'
+                  })):
         host = host or MockSystemHost()
         test.add_unit_tests_to_mock_filesystem(host.filesystem)
-        return mock_drt.MockDRTPort(host, port_name='mock-mac', options=options)
+        return mock_drt.MockDRTPort(
+            host, port_name='mock-mac', options=options)
 
     def test_port_name_in_constructor(self):
-        self.assertTrue(mock_drt.MockDRTPort(MockSystemHost(), port_name='mock-test'))
+        self.assertTrue(
+            mock_drt.MockDRTPort(MockSystemHost(), port_name='mock-test'))
 
     def test_check_sys_deps(self):
         pass
@@ -78,7 +82,6 @@
 
 
 class MockDRTTest(unittest.TestCase):
-
     def input_line(self, port, test_name, checksum=None):
         url = port.create_driver(0).test_to_uri(test_name)
         if url.startswith('file://'):
@@ -90,8 +93,13 @@
     def make_drt(self, options, args, host, stdin, stdout, stderr):
         return mock_drt.MockDRT(options, args, host, stdin, stdout, stderr)
 
-    def make_input_output(self, port, test_name, expected_checksum, drt_output,
-                          drt_input=None, expected_text=None):
+    def make_input_output(self,
+                          port,
+                          test_name,
+                          expected_checksum,
+                          drt_output,
+                          drt_input=None,
+                          expected_text=None):
         if not expected_checksum:
             expected_checksum = port.expected_checksum(test_name)
         if not drt_input:
@@ -99,8 +107,8 @@
         text_output = expected_text or port.expected_text(test_name) or ''
 
         if not drt_output:
-            drt_output = self.expected_output(port, test_name,
-                                              text_output, expected_checksum)
+            drt_output = self.expected_output(port, test_name, text_output,
+                                              expected_checksum)
         return (drt_input, drt_output)
 
     def expected_output(self, port, test_name, text_output, expected_checksum):
@@ -109,19 +117,31 @@
             output.append(text_output)
         output.append('#EOF\n')
         if expected_checksum:
-            output.extend(['\n',
-                           'ActualHash: %s\n' % expected_checksum,
-                           'ExpectedHash: %s\n' % expected_checksum])
+            output.extend([
+                '\n',
+                'ActualHash: %s\n' % expected_checksum,
+                'ExpectedHash: %s\n' % expected_checksum
+            ])
         output.append('#EOF\n')
         return output
 
-    def assertTest(self, test_name, expected_checksum=None, drt_output=None, host=None, expected_text=None):
+    def assertTest(self,
+                   test_name,
+                   expected_checksum=None,
+                   drt_output=None,
+                   host=None,
+                   expected_text=None):
         port_name = 'test'
         host = host or MockSystemHost()
         test.add_unit_tests_to_mock_filesystem(host.filesystem)
         port = PortFactory(host).get(port_name)
         drt_input, drt_output = self.make_input_output(
-            port, test_name, expected_checksum, drt_output, drt_input=None, expected_text=expected_text)
+            port,
+            test_name,
+            expected_checksum,
+            drt_output,
+            drt_input=None,
+            expected_text=expected_text)
 
         args = ['--run-web-tests', '--platform', port_name, '-']
         stdin = io.BytesIO(drt_input)
@@ -155,18 +175,19 @@
         self.assertTest('http/tests/passes/text.html')
 
     def test_pixeltest__fails(self):
-        self.assertTest('failures/expected/image_checksum.html',
-                        expected_checksum='image_checksum-checksum',
-                        drt_output=[
-                            '#READY\n',
-                            'Content-Type: text/plain\n',
-                            'image_checksum-txt',
-                            '#EOF\n',
-                            '\n',
-                            'ActualHash: image_checksum-checksum\n',
-                            'ExpectedHash: image_checksum-checksum\n',
-                            '#EOF\n',
-                        ])
+        self.assertTest(
+            'failures/expected/image_checksum.html',
+            expected_checksum='image_checksum-checksum',
+            drt_output=[
+                '#READY\n',
+                'Content-Type: text/plain\n',
+                'image_checksum-txt',
+                '#EOF\n',
+                '\n',
+                'ActualHash: image_checksum-checksum\n',
+                'ExpectedHash: image_checksum-checksum\n',
+                '#EOF\n',
+            ])
 
     def test_textonly(self):
         self.assertTest('passes/image.html')
@@ -175,22 +196,29 @@
         self.assertTest('passes/checksum_in_image.html')
 
     def test_reftest_match(self):
-        self.assertTest('passes/reftest.html', expected_checksum='mock-checksum', expected_text='reference text\n')
+        self.assertTest(
+            'passes/reftest.html',
+            expected_checksum='mock-checksum',
+            expected_text='reference text\n')
 
     def test_reftest_mismatch(self):
-        self.assertTest('passes/mismatch.html', expected_checksum='mock-checksum', expected_text='reference text\n')
+        self.assertTest(
+            'passes/mismatch.html',
+            expected_checksum='mock-checksum',
+            expected_text='reference text\n')
 
     def test_audio(self):
-        self.assertTest('passes/audio.html',
-                        drt_output=[
-                            '#READY\n',
-                            'Content-Type: audio/wav\n',
-                            'Content-Transfer-Encoding: base64\n',
-                            'YXVkaW8td2F2',
-                            '\n',
-                            '#EOF\n',
-                            '#EOF\n',
-                        ])
+        self.assertTest(
+            'passes/audio.html',
+            drt_output=[
+                '#READY\n',
+                'Content-Type: audio/wav\n',
+                'Content-Transfer-Encoding: base64\n',
+                'YXVkaW8td2F2',
+                '\n',
+                '#EOF\n',
+                '#EOF\n',
+            ])
 
     def test_virtual(self):
         self.assertTest('virtual/passes/text.html')
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/port_testcase.py b/third_party/blink/tools/blinkpy/web_tests/port/port_testcase.py
index a5e63b0b..d7ff65a 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/port_testcase.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/port_testcase.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit testing base class for Port implementations."""
 
 import collections
@@ -40,7 +39,6 @@
 
 
 class FakePrinter(object):
-
     def write_update(self, msg):
         pass
 
@@ -55,7 +53,7 @@
     # pylint: disable=protected-access
 
     HTTP_PORTS = (8000, 8080, 8443)
-    WEBSOCKET_PORTS = (8880,)
+    WEBSOCKET_PORTS = (8880, )
 
     # Subclasses override this to point to their Port subclass.
     os_name = None
@@ -64,11 +62,23 @@
     port_name = None
     full_port_name = None
 
-    def make_port(self, host=None, port_name=None, options=None, os_name=None, os_version=None, **kwargs):
-        host = host or MockSystemHost(os_name=(os_name or self.os_name), os_version=(os_version or self.os_version))
-        options = options or optparse.Values({'configuration': 'Release', 'use_xvfb': True})
+    def make_port(self,
+                  host=None,
+                  port_name=None,
+                  options=None,
+                  os_name=None,
+                  os_version=None,
+                  **kwargs):
+        host = host or MockSystemHost(
+            os_name=(os_name or self.os_name),
+            os_version=(os_version or self.os_version))
+        options = options or optparse.Values({
+            'configuration': 'Release',
+            'use_xvfb': True
+        })
         port_name = port_name or self.port_name
-        port_name = self.port_maker.determine_full_port_name(host, options, port_name)
+        port_name = self.port_maker.determine_full_port_name(
+            host, options, port_name)
         return self.port_maker(host, port_name, options=options, **kwargs)
 
     def test_check_build(self):
@@ -91,8 +101,9 @@
         # And here, after changing it so that the driver binary is not found,
         # we get an error exit status and message about build requirements.
         port._check_file_exists = lambda path, desc: False
-        self.assertEqual(port.check_build(needs_http=True, printer=FakePrinter()),
-                         exit_codes.UNEXPECTED_ERROR_EXIT_STATUS)
+        self.assertEqual(
+            port.check_build(needs_http=True, printer=FakePrinter()),
+            exit_codes.UNEXPECTED_ERROR_EXIT_STATUS)
         logs = ''.join(self.logMessages())
         self.assertIn('build requirements', logs)
 
@@ -117,14 +128,23 @@
         self.assertEqual(port.default_max_locked_shards(), 1)
 
     def test_default_timeout_ms(self):
-        self.assertEqual(self.make_port(options=optparse.Values({'configuration': 'Release'})).default_timeout_ms(), 6000)
-        self.assertEqual(self.make_port(options=optparse.Values({'configuration': 'Debug'})).default_timeout_ms(), 18000)
+        self.assertEqual(
+            self.make_port(
+                options=optparse.Values({
+                    'configuration': 'Release'
+                })).default_timeout_ms(), 6000)
+        self.assertEqual(
+            self.make_port(
+                options=optparse.Values({
+                    'configuration': 'Debug'
+                })).default_timeout_ms(), 18000)
 
     def test_driver_cmd_line(self):
         port = self.make_port()
         self.assertTrue(len(port.driver_cmd_line()))
 
-        options = optparse.Values(dict(additional_driver_flag=['--foo=bar', '--foo=baz']))
+        options = optparse.Values(
+            dict(additional_driver_flag=['--foo=bar', '--foo=baz']))
         port = self.make_port(options=options)
         cmd_line = port.driver_cmd_line()
         self.assertTrue('--foo=bar' in cmd_line)
@@ -149,7 +169,6 @@
         self.assertEqual(port.diff_image('foo', ''), ('foo', None))
 
     def test_diff_image(self):
-
         def _path_to_image_diff():
             return '/path/to/image_diff'
 
@@ -164,7 +183,8 @@
 
         # Images are different.
         port._executive = MockExecutive(run_command_fn=mock_run_command)  # pylint: disable=protected-access
-        self.assertEqual(mock_image_diff, port.diff_image('EXPECTED', 'ACTUAL')[0])
+        self.assertEqual(mock_image_diff,
+                         port.diff_image('EXPECTED', 'ACTUAL')[0])
 
         # Images are the same.
         port._executive = MockExecutive(exit_code=0)  # pylint: disable=protected-access
@@ -182,8 +202,11 @@
     def test_diff_image_crashed(self):
         port = self.make_port()
         port._executive = MockExecutive(exit_code=2)  # pylint: disable=protected-access
-        self.assertEqual(port.diff_image('EXPECTED', 'ACTUAL'),
-                         (None, 'Image diff returned an exit code of 2. See http://crbug.com/278596'))
+        self.assertEqual(
+            port.diff_image('EXPECTED', 'ACTUAL'),
+            (None,
+             'Image diff returned an exit code of 2. See http://crbug.com/278596'
+             ))
 
     def test_test_configuration(self):
         port = self.make_port()
@@ -191,58 +214,68 @@
 
     def test_get_crash_log_all_none(self):
         port = self.make_port()
-        stderr, details, crash_site = port._get_crash_log(None, None, None, None, newer_than=None)
+        stderr, details, crash_site = port._get_crash_log(
+            None, None, None, None, newer_than=None)
         self.assertIsNone(stderr)
-        self.assertEqual(details,
-                         'crash log for <unknown process name> (pid <unknown>):\n'
-                         'STDOUT: <empty>\n'
-                         'STDERR: <empty>\n')
+        self.assertEqual(
+            details, 'crash log for <unknown process name> (pid <unknown>):\n'
+            'STDOUT: <empty>\n'
+            'STDERR: <empty>\n')
         self.assertIsNone(crash_site)
 
     def test_get_crash_log_simple(self):
         port = self.make_port()
-        stderr, details, crash_site = port._get_crash_log('foo', 1234, 'out bar\nout baz', 'err bar\nerr baz\n', newer_than=None)
+        stderr, details, crash_site = port._get_crash_log(
+            'foo',
+            1234,
+            'out bar\nout baz',
+            'err bar\nerr baz\n',
+            newer_than=None)
         self.assertEqual(stderr, 'err bar\nerr baz\n')
-        self.assertEqual(details,
-                         'crash log for foo (pid 1234):\n'
-                         'STDOUT: out bar\n'
-                         'STDOUT: out baz\n'
-                         'STDERR: err bar\n'
-                         'STDERR: err baz\n')
+        self.assertEqual(
+            details, 'crash log for foo (pid 1234):\n'
+            'STDOUT: out bar\n'
+            'STDOUT: out baz\n'
+            'STDERR: err bar\n'
+            'STDERR: err baz\n')
         self.assertIsNone(crash_site)
 
     def test_get_crash_log_non_ascii(self):
         port = self.make_port()
-        stderr, details, crash_site = port._get_crash_log('foo', 1234, 'foo\xa6bar', 'foo\xa6bar', newer_than=None)
+        stderr, details, crash_site = port._get_crash_log(
+            'foo', 1234, 'foo\xa6bar', 'foo\xa6bar', newer_than=None)
         self.assertEqual(stderr, 'foo\xa6bar')
-        self.assertEqual(details,
-                         u'crash log for foo (pid 1234):\n'
-                         u'STDOUT: foo\ufffdbar\n'
-                         u'STDERR: foo\ufffdbar\n')
+        self.assertEqual(
+            details, u'crash log for foo (pid 1234):\n'
+            u'STDOUT: foo\ufffdbar\n'
+            u'STDERR: foo\ufffdbar\n')
         self.assertIsNone(crash_site)
 
     def test_get_crash_log_newer_than(self):
         port = self.make_port()
-        stderr, details, crash_site = port._get_crash_log('foo', 1234, 'foo\xa6bar', 'foo\xa6bar', newer_than=1.0)
+        stderr, details, crash_site = port._get_crash_log(
+            'foo', 1234, 'foo\xa6bar', 'foo\xa6bar', newer_than=1.0)
         self.assertEqual(stderr, 'foo\xa6bar')
-        self.assertEqual(details,
-                         u'crash log for foo (pid 1234):\n'
-                         u'STDOUT: foo\ufffdbar\n'
-                         u'STDERR: foo\ufffdbar\n')
+        self.assertEqual(
+            details, u'crash log for foo (pid 1234):\n'
+            u'STDOUT: foo\ufffdbar\n'
+            u'STDERR: foo\ufffdbar\n')
         self.assertIsNone(crash_site)
 
     def test_get_crash_log_crash_site(self):
         port = self.make_port()
-        stderr, details, crash_site = port._get_crash_log('foo',
-                                                          1234,
-                                                          'out bar',
-                                                          '[1:2:3:4:FATAL:example.cc(567)] Check failed.',
-                                                          newer_than=None)
-        self.assertEqual(stderr, '[1:2:3:4:FATAL:example.cc(567)] Check failed.')
-        self.assertEqual(details,
-                         'crash log for foo (pid 1234):\n'
-                         'STDOUT: out bar\n'
-                         'STDERR: [1:2:3:4:FATAL:example.cc(567)] Check failed.\n')
+        stderr, details, crash_site = port._get_crash_log(
+            'foo',
+            1234,
+            'out bar',
+            '[1:2:3:4:FATAL:example.cc(567)] Check failed.',
+            newer_than=None)
+        self.assertEqual(stderr,
+                         '[1:2:3:4:FATAL:example.cc(567)] Check failed.')
+        self.assertEqual(
+            details, 'crash log for foo (pid 1234):\n'
+            'STDOUT: out bar\n'
+            'STDERR: [1:2:3:4:FATAL:example.cc(567)] Check failed.\n')
         self.assertEqual(crash_site, 'example.cc(567)')
 
     def test_expectations_files(self):
@@ -251,7 +284,8 @@
             port.path_to_generic_test_expectations_file(),
             port.path_to_webdriver_expectations_file(),
             port.host.filesystem.join(port.web_tests_dir(), 'NeverFixTests'),
-            port.host.filesystem.join(port.web_tests_dir(), 'StaleTestExpectations'),
+            port.host.filesystem.join(port.web_tests_dir(),
+                                      'StaleTestExpectations'),
             port.host.filesystem.join(port.web_tests_dir(), 'SlowTests'),
         ])
 
@@ -260,42 +294,54 @@
         for path in port.expectations_files():
             port.host.filesystem.write_text_file(path, '')
         ordered_dict = port.expectations_dict()
-        self.assertEqual(port.path_to_generic_test_expectations_file(), ordered_dict.keys()[0])
+        self.assertEqual(port.path_to_generic_test_expectations_file(),
+                         ordered_dict.keys()[0])
 
-        options = optparse.Values(dict(additional_expectations=['/tmp/foo', '/tmp/bar']))
+        options = optparse.Values(
+            dict(additional_expectations=['/tmp/foo', '/tmp/bar']))
         port = self.make_port(options=options)
         for path in port.expectations_files():
             port.host.filesystem.write_text_file(path, '')
         port.host.filesystem.write_text_file('/tmp/foo', 'foo')
         port.host.filesystem.write_text_file('/tmp/bar', 'bar')
         ordered_dict = port.expectations_dict()
-        self.assertEqual(ordered_dict.keys()[-2:], options.additional_expectations)
+        self.assertEqual(ordered_dict.keys()[-2:],
+                         options.additional_expectations)
         self.assertEqual(ordered_dict.values()[-2:], ['foo', 'bar'])
 
     def test_path_to_apache_config_file(self):
         # Specific behavior may vary by port, so unit test sub-classes may override this.
         port = self.make_port()
 
-        port.host.environ['WEBKIT_HTTP_SERVER_CONF_PATH'] = '/path/to/httpd.conf'
+        port.host.environ[
+            'WEBKIT_HTTP_SERVER_CONF_PATH'] = '/path/to/httpd.conf'
         with self.assertRaises(IOError):
             port.path_to_apache_config_file()
-        port.host.filesystem.write_text_file('/existing/httpd.conf', 'Hello, world!')
-        port.host.environ['WEBKIT_HTTP_SERVER_CONF_PATH'] = '/existing/httpd.conf'
-        self.assertEqual(port.path_to_apache_config_file(), '/existing/httpd.conf')
+        port.host.filesystem.write_text_file('/existing/httpd.conf',
+                                             'Hello, world!')
+        port.host.environ[
+            'WEBKIT_HTTP_SERVER_CONF_PATH'] = '/existing/httpd.conf'
+        self.assertEqual(port.path_to_apache_config_file(),
+                         '/existing/httpd.conf')
 
         # Mock out _apache_config_file_name_for_platform to avoid mocking platform info.
         port._apache_config_file_name_for_platform = lambda: 'httpd.conf'
         del port.host.environ['WEBKIT_HTTP_SERVER_CONF_PATH']
         self.assertEqual(
             port.path_to_apache_config_file(),
-            port.host.filesystem.join(port.apache_config_directory(), 'httpd.conf'))
+            port.host.filesystem.join(port.apache_config_directory(),
+                                      'httpd.conf'))
 
         # Check that even if we mock out _apache_config_file_name, the environment variable takes precedence.
-        port.host.environ['WEBKIT_HTTP_SERVER_CONF_PATH'] = '/existing/httpd.conf'
-        self.assertEqual(port.path_to_apache_config_file(), '/existing/httpd.conf')
+        port.host.environ[
+            'WEBKIT_HTTP_SERVER_CONF_PATH'] = '/existing/httpd.conf'
+        self.assertEqual(port.path_to_apache_config_file(),
+                         '/existing/httpd.conf')
 
     def test_additional_platform_directory(self):
-        port = self.make_port(options=optparse.Values(dict(additional_platform_directory=['/tmp/foo'])))
+        port = self.make_port(
+            options=optparse.Values(
+                dict(additional_platform_directory=['/tmp/foo'])))
         self.assertEqual(port.baseline_search_path()[0], '/tmp/foo')
 
     def test_virtual_test_suites(self):
@@ -303,4 +349,5 @@
         # use a real SystemHost(). We don't care what virtual_test_suites() returns as long
         # as it is iterable.
         port = self.make_port(host=SystemHost(), port_name=self.full_port_name)
-        self.assertTrue(isinstance(port.virtual_test_suites(), collections.Iterable))
+        self.assertTrue(
+            isinstance(port.virtual_test_suites(), collections.Iterable))
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/server_process.py b/third_party/blink/tools/blinkpy/web_tests/port/server_process.py
index 82fa4a4..935df4e5 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/server_process.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/server_process.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Package that implements the ServerProcess wrapper class"""
 
 import errno
@@ -53,10 +52,8 @@
     import select
     _quote_cmd = lambda cmdline: ' '.join(pipes.quote(arg) for arg in cmdline)
 
-
 _log = logging.getLogger(__name__)
 
-
 _trailing_spaces_re = re.compile('(.*[^ ])?( +)$')
 
 
@@ -79,7 +76,12 @@
     as necessary to keep issuing commands.
     """
 
-    def __init__(self, port_obj, name, cmd, env=None, treat_no_data_as_crash=False,
+    def __init__(self,
+                 port_obj,
+                 name,
+                 cmd,
+                 env=None,
+                 treat_no_data_as_crash=False,
                  more_logging=False):
         self._port = port_obj
         self._name = name  # Should be the command name (e.g. content_shell, image_diff)
@@ -131,13 +133,16 @@
         if self._logging:
             env_str = ''
             if self._env:
-                env_str += '\n'.join('%s=%s' % (k, v) for k, v in self._env.items()) + '\n'
+                env_str += '\n'.join('%s=%s' % (k, v)
+                                     for k, v in self._env.items()) + '\n'
             _log.info('CMD: \n%s%s\n', env_str, _quote_cmd(self._cmd))
-        proc = self._host.executive.popen(self._cmd, stdin=self._host.executive.PIPE,
-                                          stdout=self._host.executive.PIPE,
-                                          stderr=self._host.executive.PIPE,
-                                          close_fds=close_fds,
-                                          env=self._env)
+        proc = self._host.executive.popen(
+            self._cmd,
+            stdin=self._host.executive.PIPE,
+            stdout=self._host.executive.PIPE,
+            stderr=self._host.executive.PIPE,
+            close_fds=close_fds,
+            env=self._env)
         self._set_proc(proc)
 
     def _set_proc(self, proc):
@@ -227,7 +232,9 @@
 
     def read_stdout(self, deadline, size):
         if size <= 0:
-            raise ValueError('ServerProcess.read() called with a non-positive size: %d ' % size)
+            raise ValueError(
+                'ServerProcess.read() called with a non-positive size: %d ' %
+                size)
 
         def retrieve_bytes_from_stdout_buffer():
             if len(self._output) >= size:
@@ -255,14 +262,18 @@
         return string[:index], string[index:]
 
     def _pop_output_bytes(self, bytes_count):
-        output, self._output = self._split_string_after_index(self._output, bytes_count)
+        output, self._output = self._split_string_after_index(
+            self._output, bytes_count)
         return output
 
     def _pop_error_bytes(self, bytes_count):
-        output, self._error = self._split_string_after_index(self._error, bytes_count)
+        output, self._error = self._split_string_after_index(
+            self._error, bytes_count)
         return output
 
-    def _wait_for_data_and_update_buffers_using_select(self, deadline, stopping=False):
+    def _wait_for_data_and_update_buffers_using_select(self,
+                                                       deadline,
+                                                       stopping=False):
         if self._proc.stdout.closed or self._proc.stderr.closed:
             # If the process crashed and is using FIFOs, like Chromium Android, the
             # stdout and stderr pipes will be closed.
@@ -272,7 +283,8 @@
         err_fd = self._proc.stderr.fileno()
         select_fds = (out_fd, err_fd)
         try:
-            read_fds, _, _ = select.select(select_fds, [], select_fds, max(deadline - time.time(), 0))
+            read_fds, _, _ = select.select(select_fds, [], select_fds,
+                                           max(deadline - time.time(), 0))
         except select.error as error:
             # We can ignore EINVAL since it's likely the process just crashed and we'll
             # figure that out the next time through the loop in _read().
@@ -288,14 +300,16 @@
             # Linux because it's relatively harmless either way.
             if out_fd in read_fds:
                 data = self._proc.stdout.read()
-                if not data and not stopping and (self._treat_no_data_as_crash or self._proc.poll()):
+                if not data and not stopping and (self._treat_no_data_as_crash
+                                                  or self._proc.poll()):
                     self._crashed = True
                 self._log_data('OUT', data)
                 self._output += data
 
             if err_fd in read_fds:
                 data = self._proc.stderr.read()
-                if not data and not stopping and (self._treat_no_data_as_crash or self._proc.poll()):
+                if not data and not stopping and (self._treat_no_data_as_crash
+                                                  or self._proc.poll()):
                     self._crashed = True
                 self._log_data('ERR', data)
                 self._error += data
@@ -333,7 +347,8 @@
                 _, buf = win32file.ReadFile(handle, avail, None)
                 return buf
         except Exception as error:  # pylint: disable=broad-except
-            if error[0] not in (109, errno.ESHUTDOWN):  # 109 == win32 ERROR_BROKEN_PIPE
+            # 109 == win32 ERROR_BROKEN_PIPE
+            if error[0] not in (109, errno.ESHUTDOWN):
                 raise
         return None
 
@@ -360,7 +375,8 @@
                 return bytes
 
             if self._use_win32_apis:
-                self._wait_for_data_and_update_buffers_using_win32_apis(deadline)
+                self._wait_for_data_and_update_buffers_using_win32_apis(
+                    deadline)
             else:
                 self._wait_for_data_and_update_buffers_using_select(deadline)
 
@@ -384,7 +400,8 @@
             while self._proc.poll() is None and time.time() < deadline:
                 time.sleep(0.01)
             if self._proc.poll() is None:
-                _log.warning('stopping %s(pid %d) timed out, killing it', self._name, self._proc.pid)
+                _log.warning('stopping %s(pid %d) timed out, killing it',
+                             self._name, self._proc.pid)
 
         if self._proc.poll() is None:
             self._kill(kill_tree)
@@ -396,7 +413,8 @@
             if self._use_win32_apis:
                 self._wait_for_data_and_update_buffers_using_win32_apis(now)
             else:
-                self._wait_for_data_and_update_buffers_using_select(now, stopping=True)
+                self._wait_for_data_and_update_buffers_using_select(
+                    now, stopping=True)
         out, err = self._output, self._error
         self._reset()
         return (out, err)
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/server_process_mock.py b/third_party/blink/tools/blinkpy/web_tests/port/server_process_mock.py
index 110f7773..f41dc763 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/server_process_mock.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/server_process_mock.py
@@ -28,9 +28,14 @@
 
 
 class MockServerProcess(object):
-
-    def __init__(self, port_obj=None, name=None, cmd=None, env=None,
-                 treat_no_data_as_crash=False, more_logging=False, lines=None,
+    def __init__(self,
+                 port_obj=None,
+                 name=None,
+                 cmd=None,
+                 env=None,
+                 treat_no_data_as_crash=False,
+                 more_logging=False,
+                 lines=None,
                  crashed=False):
         # port_obj and name are unused, but are maintained for compatibility
         # with server_process.ServerProcess.
@@ -62,7 +67,8 @@
             remaining_size = size - len(first_line) - 1
             if not remaining_size:
                 return first_line + '\n'
-            return first_line + '\n' + self.read_stdout(deadline, remaining_size)
+            return first_line + '\n' + self.read_stdout(
+                deadline, remaining_size)
         result = self.lines[0][:size]
         self.lines[0] = self.lines[0][size:]
         return result
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/server_process_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/server_process_unittest.py
index db34eb7..af3353a 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/server_process_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/server_process_unittest.py
@@ -37,7 +37,6 @@
 
 
 class TrivialMockPort(object):
-
     def __init__(self):
         self.host = MockSystemHost()
         self.host.executive.kill_process = lambda x: None
@@ -48,7 +47,6 @@
 
 
 class MockFile(object):
-
     def __init__(self, server_process):
         self._server_process = server_process
         self.closed = False
@@ -68,7 +66,6 @@
 
 
 class MockProc(object):
-
     def __init__(self, server_process):
         self.stdin = MockFile(server_process)
         self.stdout = MockFile(server_process)
@@ -83,7 +80,6 @@
 
 
 class FakeServerProcess(server_process.ServerProcess):
-
     def _start(self):
         self._proc = MockProc(self)
         self.stdin = self._proc.stdin
@@ -94,10 +90,11 @@
 
 
 class TestServerProcess(unittest.TestCase):
-
     def test_basic(self):
-        cmd = [sys.executable, '-c',
-               'import sys; import time; time.sleep(0.02); print "stdout"; sys.stdout.flush(); print >>sys.stderr, "stderr"']
+        cmd = [
+            sys.executable, '-c',
+            'import sys; import time; time.sleep(0.02); print "stdout"; sys.stdout.flush(); print >>sys.stderr, "stderr"'
+        ]
         host = SystemHost()
         factory = PortFactory(host)
         port = factory.get()
@@ -127,7 +124,8 @@
 
     def test_cleanup(self):
         port_obj = TrivialMockPort()
-        server_process = FakeServerProcess(port_obj=port_obj, name="test", cmd=["test"])
+        server_process = FakeServerProcess(
+            port_obj=port_obj, name="test", cmd=["test"])
         server_process._start()
         server_process.stop()
         self.assertTrue(server_process.stdin.closed)
@@ -138,7 +136,8 @@
         port_obj = TrivialMockPort()
 
         port_obj.host.platform.os_name = 'win'
-        server_process = FakeServerProcess(port_obj=port_obj, name="test", cmd=["test"])
+        server_process = FakeServerProcess(
+            port_obj=port_obj, name="test", cmd=["test"])
         server_process.write("should break")
         self.assertTrue(server_process.has_crashed())
         self.assertIsNotNone(server_process.pid())
@@ -146,7 +145,8 @@
         self.assertEqual(server_process.broken_pipes, [server_process.stdin])
 
         port_obj.host.platform.os_name = 'mac'
-        server_process = FakeServerProcess(port_obj=port_obj, name="test", cmd=["test"])
+        server_process = FakeServerProcess(
+            port_obj=port_obj, name="test", cmd=["test"])
         server_process.write("should break")
         self.assertTrue(server_process.has_crashed())
         self.assertIsNone(server_process._proc)
@@ -154,22 +154,18 @@
 
 
 class TestQuoteData(unittest.TestCase):
-
     def test_plain(self):
         qd = server_process.quote_data
         self.assertEqual(qd("foo"), ["foo"])
 
     def test_trailing_spaces(self):
         qd = server_process.quote_data
-        self.assertEqual(qd("foo  "),
-                         ["foo\x20\x20"])
+        self.assertEqual(qd("foo  "), ["foo\x20\x20"])
 
     def test_newlines(self):
         qd = server_process.quote_data
-        self.assertEqual(qd("foo \nbar\n"),
-                         ["foo\x20\\n", "bar\\n"])
+        self.assertEqual(qd("foo \nbar\n"), ["foo\x20\\n", "bar\\n"])
 
     def test_binary_data(self):
         qd = server_process.quote_data
-        self.assertEqual(qd("\x00\x01ab"),
-                         ["\\x00\\x01ab"])
+        self.assertEqual(qd("\x00\x01ab"), ["\\x00\\x01ab"])
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/test.py b/third_party/blink/tools/blinkpy/web_tests/port/test.py
index f995ca5..a90f724b 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/test.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/test.py
@@ -36,7 +36,6 @@
 from blinkpy.web_tests.port.driver import DeviceFailure, Driver, DriverOutput
 from blinkpy.w3c.wpt_manifest import BASE_MANIFEST_NAME
 
-
 # Here we use a non-standard location for the web tests, to ensure that
 # this works. The path contains a '.' in the name because we've seen bugs
 # related to this before.
@@ -47,7 +46,6 @@
 # This sets basic expectations for a test. Each individual expectation
 # can be overridden by a keyword argument in TestList.add().
 class TestInstance(object):
-
     def __init__(self, name):
         self.name = name
         self.base = name[(name.rfind('/') + 1):name.rfind('.')]
@@ -80,7 +78,6 @@
 # This is an in-memory list of tests, what we want them to produce, and
 # what we want to claim are the expected results.
 class TestList(object):
-
     def __init__(self):
         self.tests = {}
 
@@ -90,19 +87,40 @@
             test.__dict__[key] = value
         self.tests[name] = test
 
-    def add_reference(self, name, actual_checksum='checksum', actual_image='FAIL'):
-        self.add(name, actual_checksum=actual_checksum, actual_image=actual_image,
-                 actual_text=None, expected_text=None, expected_image=None)
+    def add_reference(self,
+                      name,
+                      actual_checksum='checksum',
+                      actual_image='FAIL'):
+        self.add(
+            name,
+            actual_checksum=actual_checksum,
+            actual_image=actual_image,
+            actual_text=None,
+            expected_text=None,
+            expected_image=None)
 
-    def add_reftest(self, name, reference_name, same_image=True,
-                    actual_text=None, expected_text=None, crash=False, error=''):
-        self.add(name, actual_checksum='checksum', actual_image='FAIL', expected_image=None,
-                 actual_text=actual_text, expected_text=expected_text,
-                 crash=crash, error=error)
+    def add_reftest(self,
+                    name,
+                    reference_name,
+                    same_image=True,
+                    actual_text=None,
+                    expected_text=None,
+                    crash=False,
+                    error=''):
+        self.add(
+            name,
+            actual_checksum='checksum',
+            actual_image='FAIL',
+            expected_image=None,
+            actual_text=actual_text,
+            expected_text=expected_text,
+            crash=crash,
+            error=error)
         if same_image:
             self.add_reference(reference_name)
         else:
-            self.add_reference(reference_name, actual_checksum='diff', actual_image='DIFF')
+            self.add_reference(
+                reference_name, actual_checksum='diff', actual_image='DIFF')
 
     def keys(self):
         return self.tests.keys()
@@ -113,6 +131,7 @@
     def __getitem__(self, item):
         return self.tests[item]
 
+
 #
 # These numbers may need to be updated whenever we add or delete tests. This includes virtual tests.
 #
@@ -133,91 +152,138 @@
     tests.add('failures/expected/device_failure.html', device_failure=True)
     tests.add('failures/expected/timeout.html', timeout=True)
     tests.add('failures/expected/leak.html', leak=True)
-    tests.add('failures/expected/image.html',
-              actual_image='image_fail-pngtEXtchecksum\x00checksum_fail',
-              expected_image='image-pngtEXtchecksum\x00checksum-png')
-    tests.add('failures/expected/image_checksum.html',
-              actual_checksum='image_checksum_fail-checksum',
-              actual_image='image_checksum_fail-png')
-    tests.add('failures/expected/audio.html',
-              actual_audio=base64.b64encode('audio_fail-wav'), expected_audio='audio-wav',
-              actual_text=None, expected_text=None,
-              actual_image=None, expected_image=None,
-              actual_checksum=None)
-    tests.add('failures/unexpected/image-mismatch.html',
-              actual_image='image_fail-pngtEXtchecksum\x00checksum_fail',
-              expected_image='image-pngtEXtchecksum\x00checksum-png')
-    tests.add('failures/unexpected/no-image-generated.html',
-              expected_image='image-pngtEXtchecksum\x00checksum-png',
-              actual_image=None, actual_checksum=None)
-    tests.add('failures/unexpected/no-image-baseline.html',
-              actual_image='image_fail-pngtEXtchecksum\x00checksum_fail',
-              expected_image=None)
-    tests.add('failures/unexpected/audio-mismatch.html',
-              actual_audio=base64.b64encode('audio_fail-wav'), expected_audio='audio-wav',
-              actual_text=None, expected_text=None,
-              actual_image=None, expected_image=None,
-              actual_checksum=None)
-    tests.add('failures/unexpected/no-audio-baseline.html',
-              actual_audio=base64.b64encode('audio_fail-wav'),
-              actual_text=None, expected_text=None,
-              actual_image=None, expected_image=None,
-              actual_checksum=None)
-    tests.add('failures/unexpected/no-audio-generated.html',
-              expected_audio=base64.b64encode('audio_fail-wav'),
-              actual_text=None, expected_text=None,
-              actual_image=None, expected_image=None,
-              actual_checksum=None)
+    tests.add(
+        'failures/expected/image.html',
+        actual_image='image_fail-pngtEXtchecksum\x00checksum_fail',
+        expected_image='image-pngtEXtchecksum\x00checksum-png')
+    tests.add(
+        'failures/expected/image_checksum.html',
+        actual_checksum='image_checksum_fail-checksum',
+        actual_image='image_checksum_fail-png')
+    tests.add(
+        'failures/expected/audio.html',
+        actual_audio=base64.b64encode('audio_fail-wav'),
+        expected_audio='audio-wav',
+        actual_text=None,
+        expected_text=None,
+        actual_image=None,
+        expected_image=None,
+        actual_checksum=None)
+    tests.add(
+        'failures/unexpected/image-mismatch.html',
+        actual_image='image_fail-pngtEXtchecksum\x00checksum_fail',
+        expected_image='image-pngtEXtchecksum\x00checksum-png')
+    tests.add(
+        'failures/unexpected/no-image-generated.html',
+        expected_image='image-pngtEXtchecksum\x00checksum-png',
+        actual_image=None,
+        actual_checksum=None)
+    tests.add(
+        'failures/unexpected/no-image-baseline.html',
+        actual_image='image_fail-pngtEXtchecksum\x00checksum_fail',
+        expected_image=None)
+    tests.add(
+        'failures/unexpected/audio-mismatch.html',
+        actual_audio=base64.b64encode('audio_fail-wav'),
+        expected_audio='audio-wav',
+        actual_text=None,
+        expected_text=None,
+        actual_image=None,
+        expected_image=None,
+        actual_checksum=None)
+    tests.add(
+        'failures/unexpected/no-audio-baseline.html',
+        actual_audio=base64.b64encode('audio_fail-wav'),
+        actual_text=None,
+        expected_text=None,
+        actual_image=None,
+        expected_image=None,
+        actual_checksum=None)
+    tests.add(
+        'failures/unexpected/no-audio-generated.html',
+        expected_audio=base64.b64encode('audio_fail-wav'),
+        actual_text=None,
+        expected_text=None,
+        actual_image=None,
+        expected_image=None,
+        actual_checksum=None)
     tests.add(
         'failures/unexpected/text-mismatch-overlay.html',
         actual_text='"invalidations": [\nfail',
         expected_text='"invalidations": [\npass')
-    tests.add('failures/unexpected/no-text-baseline.html', actual_text='"invalidations": [\nfail', expected_text=None)
-    tests.add('failures/unexpected/no-text-generated.html', actual_text=None, expected_text='"invalidations": [\npass')
+    tests.add(
+        'failures/unexpected/no-text-baseline.html',
+        actual_text='"invalidations": [\nfail',
+        expected_text=None)
+    tests.add(
+        'failures/unexpected/no-text-generated.html',
+        actual_text=None,
+        expected_text='"invalidations": [\npass')
     tests.add('failures/expected/keyboard.html', keyboard=True)
-    tests.add('failures/expected/newlines_leading.html',
-              expected_text='\nfoo\n', actual_text='foo\n')
-    tests.add('failures/expected/newlines_trailing.html',
-              expected_text='foo\n\n', actual_text='foo\n')
-    tests.add('failures/expected/newlines_with_excess_CR.html',
-              expected_text='foo\r\r\r\n', actual_text='foo\n')
+    tests.add(
+        'failures/expected/newlines_leading.html',
+        expected_text='\nfoo\n',
+        actual_text='foo\n')
+    tests.add(
+        'failures/expected/newlines_trailing.html',
+        expected_text='foo\n\n',
+        actual_text='foo\n')
+    tests.add(
+        'failures/expected/newlines_with_excess_CR.html',
+        expected_text='foo\r\r\r\n',
+        actual_text='foo\n')
     tests.add('failures/expected/text.html', actual_text='text_fail-png')
     tests.add('failures/expected/crash_then_text.html')
     tests.add('failures/expected/skip_text.html', actual_text='text diff')
     tests.add('failures/flaky/text.html')
     tests.add('failures/unexpected/*/text.html', actual_text='text_fail-png')
     tests.add('failures/unexpected/missing_text.html', expected_text=None)
-    tests.add('failures/unexpected/missing_check.html', expected_image='missing-check-png')
+    tests.add(
+        'failures/unexpected/missing_check.html',
+        expected_image='missing-check-png')
     tests.add('failures/unexpected/missing_image.html', expected_image=None)
-    tests.add('failures/unexpected/missing_render_tree_dump.html', actual_text="""layer at (0,0) size 800x600
+    tests.add(
+        'failures/unexpected/missing_render_tree_dump.html',
+        actual_text="""layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x34
   RenderBlock {HTML} at (0,0) size 800x34
     RenderBody {BODY} at (8,8) size 784x18
       RenderText {#text} at (0,0) size 133x18
         text run at (0,0) width 133: "This is an image test!"
-""", expected_text=None)
+""",
+        expected_text=None)
     tests.add('failures/unexpected/crash.html', crash=True)
     tests.add('failures/unexpected/crash-with-sample.html', crash=True)
     tests.add('failures/unexpected/crash-with-delayed-log.html', crash=True)
-    tests.add('failures/unexpected/crash-with-stderr.html', crash=True,
-              error='mock-std-error-output')
-    tests.add('failures/unexpected/web-process-crash-with-stderr.html', web_process_crash=True,
-              error='mock-std-error-output')
+    tests.add(
+        'failures/unexpected/crash-with-stderr.html',
+        crash=True,
+        error='mock-std-error-output')
+    tests.add(
+        'failures/unexpected/web-process-crash-with-stderr.html',
+        web_process_crash=True,
+        error='mock-std-error-output')
     tests.add('failures/unexpected/pass.html')
-    tests.add('failures/unexpected/text-checksum.html',
-              actual_text='text-checksum_fail-txt',
-              actual_checksum='text-checksum_fail-checksum')
-    tests.add('failures/unexpected/text-image-checksum.html',
-              actual_text='text-image-checksum_fail-txt',
-              actual_image='text-image-checksum_fail-pngtEXtchecksum\x00checksum_fail',
-              actual_checksum='text-image-checksum_fail-checksum')
-    tests.add('failures/unexpected/checksum-with-matching-image.html',
-              actual_checksum='text-image-checksum_fail-checksum')
-    tests.add('failures/unexpected/image-only.html',
-              expected_text=None, actual_text=None,
-              actual_image='image-only_fail-pngtEXtchecksum\x00checksum_fail',
-              actual_checksum='image-only_fail-checksum')
+    tests.add(
+        'failures/unexpected/text-checksum.html',
+        actual_text='text-checksum_fail-txt',
+        actual_checksum='text-checksum_fail-checksum')
+    tests.add(
+        'failures/unexpected/text-image-checksum.html',
+        actual_text='text-image-checksum_fail-txt',
+        actual_image=
+        'text-image-checksum_fail-pngtEXtchecksum\x00checksum_fail',
+        actual_checksum='text-image-checksum_fail-checksum')
+    tests.add(
+        'failures/unexpected/checksum-with-matching-image.html',
+        actual_checksum='text-image-checksum_fail-checksum')
+    tests.add(
+        'failures/unexpected/image-only.html',
+        expected_text=None,
+        actual_text=None,
+        actual_image='image-only_fail-pngtEXtchecksum\x00checksum_fail',
+        actual_checksum='image-only_fail-checksum')
     tests.add('failures/unexpected/skip_pass.html')
     tests.add('failures/unexpected/text.html', actual_text='text_fail-txt')
     tests.add('failures/unexpected/text_then_crash.html')
@@ -229,54 +295,105 @@
     tests.add('passes/args.html')
     tests.add('passes/error.html', error='stuff going to stderr')
     tests.add('passes/image.html', actual_text=None, expected_text=None)
-    tests.add('passes/audio.html',
-              actual_audio=base64.b64encode('audio-wav'), expected_audio='audio-wav',
-              actual_text=None, expected_text=None,
-              actual_image=None, expected_image=None,
-              actual_checksum=None, expected_checksum=None)
+    tests.add(
+        'passes/audio.html',
+        actual_audio=base64.b64encode('audio-wav'),
+        expected_audio='audio-wav',
+        actual_text=None,
+        expected_text=None,
+        actual_image=None,
+        expected_image=None,
+        actual_checksum=None,
+        expected_checksum=None)
     tests.add('passes/platform_image.html')
-    tests.add('passes/checksum_in_image.html',
-              expected_image='tEXtchecksum\x00checksum_in_image-checksum')
+    tests.add(
+        'passes/checksum_in_image.html',
+        expected_image='tEXtchecksum\x00checksum_in_image-checksum')
     tests.add('passes/skipped/skip.html')
-    tests.add('failures/unexpected/testharness.html',
-              actual_text='This is a testharness.js-based test.\nFAIL: bah\nHarness: the test ran to completion.')
+    tests.add(
+        'failures/unexpected/testharness.html',
+        actual_text=
+        'This is a testharness.js-based test.\nFAIL: bah\nHarness: the test ran to completion.'
+    )
 
     # Note that here the checksums don't match/ but the images do, so this test passes "unexpectedly".
     # See https://bugs.webkit.org/show_bug.cgi?id=69444 .
-    tests.add('failures/unexpected/checksum.html', actual_checksum='checksum_fail-checksum')
+    tests.add(
+        'failures/unexpected/checksum.html',
+        actual_checksum='checksum_fail-checksum')
 
     # Text output files contain "\r\n" on Windows.  This may be
     # helpfully filtered to "\r\r\n" by our Python/Cygwin tooling.
-    tests.add('passes/text.html',
-              expected_text='\nfoo\n\n', actual_text='\nfoo\r\n\r\r\n')
+    tests.add(
+        'passes/text.html',
+        expected_text='\nfoo\n\n',
+        actual_text='\nfoo\r\n\r\r\n')
 
     # For reftests.
     tests.add_reftest('passes/reftest.html', 'passes/reftest-expected.html')
     # This adds a different virtual reference to ensure that that also works.
     tests.add_reference('virtual/virtual_passes/passes/reftest-expected.html')
 
-    tests.add_reftest('passes/reftest-with-text.html', 'passes/reftest-with-text-expected.html',
-                      actual_text='reftest', expected_text='reftest')
-    tests.add_reftest('passes/mismatch.html', 'passes/mismatch-expected-mismatch.html', same_image=False)
-    tests.add_reftest('passes/svgreftest.svg', 'passes/svgreftest-expected.svg')
-    tests.add_reftest('passes/xhtreftest.xht', 'passes/xhtreftest-expected.html')
-    tests.add_reftest('passes/phpreftest.php', 'passes/phpreftest-expected-mismatch.svg', same_image=False)
-    tests.add_reftest('failures/expected/reftest.html', 'failures/expected/reftest-expected.html', same_image=False)
-    tests.add_reftest('failures/unexpected/reftest-with-matching-text.html',
-                      'failures/unexpected/reftest-with-matching-text-expected.html',
-                      same_image=False, actual_text='reftest', expected_text='reftest')
-    tests.add_reftest('failures/unexpected/reftest-with-mismatching-text.html',
-                      'failures/unexpected/reftest-with-mismatching-text-expected.html',
-                      actual_text='reftest', expected_text='reftest-different')
-    tests.add_reftest('failures/expected/mismatch.html', 'failures/expected/mismatch-expected-mismatch.html')
-    tests.add_reftest('failures/unexpected/crash-reftest.html', 'failures/unexpected/crash-reftest-expected.html', crash=True)
-    tests.add_reftest('failures/unexpected/reftest.html', 'failures/unexpected/reftest-expected.html', same_image=False)
-    tests.add_reftest('failures/unexpected/reftest-mismatch-with-text-mismatch-with-stderr.html',
-                      'failures/unexpected/reftest-mismatch-with-text-mismatch-with-stderr-expected.html',
-                      same_image=False, actual_text='actual', expected_text='expected', error='oops')
-    tests.add_reftest('failures/unexpected/mismatch.html', 'failures/unexpected/mismatch-expected-mismatch.html')
-    tests.add('failures/unexpected/reftest-nopixel.html', actual_checksum=None, actual_image=None, expected_image=None)
-    tests.add('failures/unexpected/reftest-nopixel-expected.html', actual_checksum=None, actual_image=None)
+    tests.add_reftest(
+        'passes/reftest-with-text.html',
+        'passes/reftest-with-text-expected.html',
+        actual_text='reftest',
+        expected_text='reftest')
+    tests.add_reftest(
+        'passes/mismatch.html',
+        'passes/mismatch-expected-mismatch.html',
+        same_image=False)
+    tests.add_reftest('passes/svgreftest.svg',
+                      'passes/svgreftest-expected.svg')
+    tests.add_reftest('passes/xhtreftest.xht',
+                      'passes/xhtreftest-expected.html')
+    tests.add_reftest(
+        'passes/phpreftest.php',
+        'passes/phpreftest-expected-mismatch.svg',
+        same_image=False)
+    tests.add_reftest(
+        'failures/expected/reftest.html',
+        'failures/expected/reftest-expected.html',
+        same_image=False)
+    tests.add_reftest(
+        'failures/unexpected/reftest-with-matching-text.html',
+        'failures/unexpected/reftest-with-matching-text-expected.html',
+        same_image=False,
+        actual_text='reftest',
+        expected_text='reftest')
+    tests.add_reftest(
+        'failures/unexpected/reftest-with-mismatching-text.html',
+        'failures/unexpected/reftest-with-mismatching-text-expected.html',
+        actual_text='reftest',
+        expected_text='reftest-different')
+    tests.add_reftest('failures/expected/mismatch.html',
+                      'failures/expected/mismatch-expected-mismatch.html')
+    tests.add_reftest(
+        'failures/unexpected/crash-reftest.html',
+        'failures/unexpected/crash-reftest-expected.html',
+        crash=True)
+    tests.add_reftest(
+        'failures/unexpected/reftest.html',
+        'failures/unexpected/reftest-expected.html',
+        same_image=False)
+    tests.add_reftest(
+        'failures/unexpected/reftest-mismatch-with-text-mismatch-with-stderr.html',
+        'failures/unexpected/reftest-mismatch-with-text-mismatch-with-stderr-expected.html',
+        same_image=False,
+        actual_text='actual',
+        expected_text='expected',
+        error='oops')
+    tests.add_reftest('failures/unexpected/mismatch.html',
+                      'failures/unexpected/mismatch-expected-mismatch.html')
+    tests.add(
+        'failures/unexpected/reftest-nopixel.html',
+        actual_checksum=None,
+        actual_image=None,
+        expected_image=None)
+    tests.add(
+        'failures/unexpected/reftest-nopixel-expected.html',
+        actual_checksum=None,
+        actual_image=None)
 
     tests.add('websocket/tests/passes/text.html')
 
@@ -295,18 +412,24 @@
 
     tests.add('passes_two/test-virtual-passes.html')
 
-    tests.add('passes/testharness.html',
-              actual_text='This is a testharness.js-based test.\nPASS: bah\n'
-                          'Harness: the test ran to completion.',
-              expected_text=None,
-              actual_checksum=None, actual_image=None,
-              expected_checksum=None, expected_image=None)
-    tests.add('failures/unexpected/testharness.html',
-              actual_text='This is a testharness.js-based test.\nFAIL: bah\n'
-                          'Harness: the test ran to completion.',
-              expected_text=None,
-              actual_checksum=None, actual_image=None,
-              expected_checksum=None, expected_image=None)
+    tests.add(
+        'passes/testharness.html',
+        actual_text='This is a testharness.js-based test.\nPASS: bah\n'
+        'Harness: the test ran to completion.',
+        expected_text=None,
+        actual_checksum=None,
+        actual_image=None,
+        expected_checksum=None,
+        expected_image=None)
+    tests.add(
+        'failures/unexpected/testharness.html',
+        actual_text='This is a testharness.js-based test.\nFAIL: bah\n'
+        'Harness: the test ran to completion.',
+        expected_text=None,
+        actual_checksum=None,
+        actual_image=None,
+        expected_checksum=None,
+        expected_image=None)
 
     tests.add('virtual/virtual_empty_bases/physical1.html')
     tests.add('virtual/virtual_empty_bases/dir/physical2.html')
@@ -321,7 +444,8 @@
     # Add the test_expectations file.
     filesystem.maybe_make_directory(WEB_TEST_DIR)
     if not filesystem.exists(WEB_TEST_DIR + '/TestExpectations'):
-        filesystem.write_text_file(WEB_TEST_DIR + '/TestExpectations', """
+        filesystem.write_text_file(
+            WEB_TEST_DIR + '/TestExpectations', """
 # results: [ Pass Failure Crash Timeout Skip ]
 failures/expected/audio.html [ Failure ]
 failures/expected/crash.html [ Crash ]
@@ -348,7 +472,8 @@
 """)
 
     if not filesystem.exists(WEB_TEST_DIR + '/NeverFixTests'):
-        filesystem.write_text_file(WEB_TEST_DIR + '/NeverFixTests', """
+        filesystem.write_text_file(
+            WEB_TEST_DIR + '/NeverFixTests', """
 # results: [ Pass Failure Crash Timeout Skip ]
 failures/expected/keyboard.html [ Skip ]
 failures/expected/exception.html [ Skip ]
@@ -361,10 +486,12 @@
     #files[WEB_TEST_DIR + '/userscripts/resources/iframe.html'] = 'iframe'
 
     def add_file(test, suffix, contents):
-        dirname = filesystem.join(WEB_TEST_DIR, test.name[0:test.name.rfind('/')])
+        dirname = filesystem.join(WEB_TEST_DIR,
+                                  test.name[0:test.name.rfind('/')])
         base = test.base
         filesystem.maybe_make_directory(dirname)
-        filesystem.write_binary_file(filesystem.join(dirname, base + suffix), contents)
+        filesystem.write_binary_file(
+            filesystem.join(dirname, base + suffix), contents)
 
     # Add each test and the expected output, if any.
     test_list = unit_test_list()
@@ -377,12 +504,15 @@
         if test.expected_image:
             add_file(test, '-expected.png', test.expected_image)
 
-    filesystem.write_text_file(filesystem.join(WEB_TEST_DIR, 'virtual', 'virtual_passes',
-                                               'passes', 'args-expected.txt'), 'args-txt --virtual-arg')
+    filesystem.write_text_file(
+        filesystem.join(WEB_TEST_DIR, 'virtual', 'virtual_passes', 'passes',
+                        'args-expected.txt'), 'args-txt --virtual-arg')
 
-    filesystem.maybe_make_directory(filesystem.join(WEB_TEST_DIR, 'external', 'wpt'))
-    filesystem.write_text_file(filesystem.join(WEB_TEST_DIR, 'external', BASE_MANIFEST_NAME),
-                               '{"manifest": "base"}')
+    filesystem.maybe_make_directory(
+        filesystem.join(WEB_TEST_DIR, 'external', 'wpt'))
+    filesystem.write_text_file(
+        filesystem.join(WEB_TEST_DIR, 'external', BASE_MANIFEST_NAME),
+        '{"manifest": "base"}')
 
     # Clear the list of written files so that we can watch what happens during testing.
     filesystem.clear_written_files()
@@ -398,7 +528,8 @@
         'mac10.10': ['test-mac-mac10.10', 'test-mac-mac10.11'],
         'mac10.11': ['test-mac-mac10.11'],
         'trusty': ['test-linux-trusty', 'test-win-win10'],
-        'precise': ['test-linux-precise', 'test-linux-trusty', 'test-win-win10'],
+        'precise':
+        ['test-linux-precise', 'test-linux-trusty', 'test-win-win10'],
     }
 
     @classmethod
@@ -408,7 +539,8 @@
         return port_name
 
     def __init__(self, host, port_name=None, **kwargs):
-        Port.__init__(self, host, port_name or TestPort.default_port_name, **kwargs)
+        Port.__init__(self, host, port_name or TestPort.default_port_name,
+                      **kwargs)
         self._tests = unit_test_list()
         self._flakes = set()
 
@@ -445,12 +577,9 @@
         if self._operating_system == 'linux':
             self._architecture = 'x86_64'
 
-        self.all_systems = (('mac10.10', 'x86'),
-                            ('mac10.11', 'x86'),
-                            ('win7', 'x86'),
-                            ('win10', 'x86'),
-                            ('precise', 'x86_64'),
-                            ('trusty', 'x86_64'))
+        self.all_systems = (('mac10.10', 'x86'), ('mac10.11', 'x86'),
+                            ('win7', 'x86'), ('win10', 'x86'),
+                            ('precise', 'x86_64'), ('trusty', 'x86_64'))
 
         self.all_build_types = ('debug', 'release')
 
@@ -470,7 +599,8 @@
                 sample_file = cp[0].replace('.html', '_sample.txt')
                 self._filesystem.maybe_make_directory(
                     self._filesystem.dirname(sample_file))
-                self._filesystem.write_binary_file(sample_file, 'crash sample file')
+                self._filesystem.write_binary_file(sample_file,
+                                                   'crash sample file')
                 sample_files[cp[0]] = sample_file
         return sample_files
 
@@ -478,7 +608,8 @@
         flags = [f[2:] for f in self._specified_additional_driver_flags()]
         if not flags:
             return None
-        return self._filesystem.join(self.web_tests_dir(), 'FlagExpectations', flags[0])
+        return self._filesystem.join(self.web_tests_dir(), 'FlagExpectations',
+                                     flags[0])
 
     def look_for_new_crash_logs(self, crashed_processes, start_time):
         del start_time
@@ -512,7 +643,8 @@
         if not actual_contents or not expected_contents:
             return (True, None)
         if diffed:
-            return ('< %s\n---\n> %s\n' % (expected_contents, actual_contents), None)
+            return ('< %s\n---\n> %s\n' % (expected_contents, actual_contents),
+                    None)
         return (None, None)
 
     def web_tests_dir(self):
@@ -558,7 +690,8 @@
         return '/usr/sbin/httpd'
 
     def path_to_apache_config_file(self):
-        return self._filesystem.join(self.apache_config_directory(), 'httpd.conf')
+        return self._filesystem.join(self.apache_config_directory(),
+                                     'httpd.conf')
 
     def path_to_generic_test_expectations_file(self):
         return self._generic_expectations_path
@@ -570,10 +703,11 @@
         test_configurations = []
         for version, architecture in self.all_systems:
             for build_type in self.all_build_types:
-                test_configurations.append(TestConfiguration(
-                    version=version,
-                    architecture=architecture,
-                    build_type=build_type))
+                test_configurations.append(
+                    TestConfiguration(
+                        version=version,
+                        architecture=architecture,
+                        build_type=build_type))
         return test_configurations
 
     def configuration_specifier_macros(self):
@@ -581,12 +715,30 @@
 
     def virtual_test_suites(self):
         return [
-            VirtualTestSuite(prefix='virtual_passes', bases=['passes', 'passes_two'], args=['--virtual-arg']),
-            VirtualTestSuite(prefix='skipped', bases=['failures/expected'], args=['--virtual-arg-skipped']),
-            VirtualTestSuite(prefix='virtual_failures', bases=['failures/unexpected'], args=['--virtual-arg-failures']),
-            VirtualTestSuite(prefix='virtual_wpt', bases=['external/wpt'], args=['--virtual-arg-wpt']),
-            VirtualTestSuite(prefix='virtual_wpt_dom', bases=['external/wpt/dom', 'wpt_internal/dom'], args=['--virtual-arg-wpt-dom']),
-            VirtualTestSuite(prefix='virtual_empty_bases', bases=[], args=['--virtual-arg-empty-bases']),
+            VirtualTestSuite(
+                prefix='virtual_passes',
+                bases=['passes', 'passes_two'],
+                args=['--virtual-arg']),
+            VirtualTestSuite(
+                prefix='skipped',
+                bases=['failures/expected'],
+                args=['--virtual-arg-skipped']),
+            VirtualTestSuite(
+                prefix='virtual_failures',
+                bases=['failures/unexpected'],
+                args=['--virtual-arg-failures']),
+            VirtualTestSuite(
+                prefix='virtual_wpt',
+                bases=['external/wpt'],
+                args=['--virtual-arg-wpt']),
+            VirtualTestSuite(
+                prefix='virtual_wpt_dom',
+                bases=['external/wpt/dom', 'wpt_internal/dom'],
+                args=['--virtual-arg-wpt-dom']),
+            VirtualTestSuite(
+                prefix='virtual_empty_bases',
+                bases=[],
+                args=['--virtual-arg-empty-bases']),
         ]
 
 
@@ -674,7 +826,8 @@
 
         if crashed_process_name:
             crash_logs = CrashLogs(self._port.host)
-            crash_log = crash_logs.find_newest_log(crashed_process_name, None) or crash_log
+            crash_log = crash_logs.find_newest_log(crashed_process_name,
+                                                   None) or crash_log
 
         if 'crash-reftest.html' in test_name:
             crashed_process_name = self._port.driver_name()
@@ -685,11 +838,21 @@
             image = None
         else:
             image = test.actual_image
-        return DriverOutput(actual_text, image, test.actual_checksum, audio,
-                            crash=(crash or web_process_crash), crashed_process_name=crashed_process_name,
-                            crashed_pid=crashed_pid, crash_log=crash_log,
-                            test_time=time.time() - start_time, timeout=test.timeout, error=test.error, pid=self.pid,
-                            leak=test.leak, leak_log=leak_log)
+        return DriverOutput(
+            actual_text,
+            image,
+            test.actual_checksum,
+            audio,
+            crash=(crash or web_process_crash),
+            crashed_process_name=crashed_process_name,
+            crashed_pid=crashed_pid,
+            crash_log=crash_log,
+            test_time=time.time() - start_time,
+            timeout=test.timeout,
+            error=test.error,
+            pid=self.pid,
+            leak=test.leak,
+            leak_log=leak_log)
 
     def stop(self, timeout_secs=0.0):
         self.started = False
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/win.py b/third_party/blink/tools/blinkpy/web_tests/port/win.py
index a7d82dd..1253a09 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/win.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/win.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Windows implementation of the Port interface."""
 
 import errno
@@ -44,7 +43,6 @@
 from blinkpy.web_tests.models import test_run_results
 from blinkpy.web_tests.port import base
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -76,7 +74,8 @@
     def __init__(self, host, port_name, **kwargs):
         super(WinPort, self).__init__(host, port_name, **kwargs)
         self._version = port_name[port_name.index('win-') + len('win-'):]
-        assert self._version in self.SUPPORTED_VERSIONS, '%s is not in %s' % (self._version, self.SUPPORTED_VERSIONS)
+        assert self._version in self.SUPPORTED_VERSIONS, \
+            '%s is not in %s' % (self._version, self.SUPPORTED_VERSIONS)
         if self.get_option('disable_breakpad'):
             self._dump_reader = None
         else:
@@ -85,7 +84,11 @@
     def additional_driver_flags(self):
         flags = super(WinPort, self).additional_driver_flags()
         if not self.get_option('disable_breakpad'):
-            flags += ['--enable-crash-reporter', '--crash-dumps-dir=%s' % self._dump_reader.crash_dumps_directory()]
+            flags += [
+                '--enable-crash-reporter',
+                '--crash-dumps-dir=%s' %
+                self._dump_reader.crash_dumps_directory()
+            ]
         return flags
 
     def check_httpd(self):
@@ -99,7 +102,9 @@
                 res = self._check_reg(r'.cgi\Shell\ExecCGI\Command') and res
                 res = self._check_reg(r'.pl\Shell\ExecCGI\Command') and res
             else:
-                _log.warning('Could not check the registry; http may not work correctly.')
+                _log.warning(
+                    'Could not check the registry; http may not work correctly.'
+                )
 
         return res
 
@@ -115,7 +120,8 @@
 
             # In order to keep multiple checkouts from stepping on each other, we simply check that an
             # existing entry points to a valid path and has the right command line.
-            if len(args) == 2 and self._filesystem.exists(args[0]) and args[0].endswith('perl.exe') and args[1] == '-wT':
+            if (len(args) == 2 and self._filesystem.exists(args[0])
+                    and args[0].endswith('perl.exe') and args[1] == '-wT'):
                 return True
         except WindowsError as error:  # WindowsError is not defined on non-Windows platforms - pylint: disable=undefined-variable
             if error.errno != errno.ENOENT:
@@ -124,9 +130,11 @@
 
         # Note that we write to HKCU so that we don't need privileged access
         # to the registry, and that will get reflected in HKCR when it is read, above.
-        cmdline = self._path_from_chromium_base(
-            'third_party', 'perl', 'perl', 'bin', 'perl.exe') + ' -wT'
-        hkey = _winreg.CreateKeyEx(_winreg.HKEY_CURRENT_USER, 'Software\\Classes\\' + sub_key, 0, _winreg.KEY_WRITE)
+        cmdline = self._path_from_chromium_base('third_party', 'perl', 'perl',
+                                                'bin', 'perl.exe') + ' -wT'
+        hkey = _winreg.CreateKeyEx(_winreg.HKEY_CURRENT_USER,
+                                   'Software\\Classes\\' + sub_key, 0,
+                                   _winreg.KEY_WRITE)
         _winreg.SetValue(hkey, '', _winreg.REG_SZ, cmdline)
         _winreg.CloseKey(hkey)
         return True
@@ -136,7 +144,8 @@
         if 'TEMP' not in self.host.environ:
             self.host.environ['TEMP'] = tempfile.gettempdir()
         # CGIs are run directory-relative so they need an absolute TEMP
-        self.host.environ['TEMP'] = self._filesystem.abspath(self.host.environ['TEMP'])
+        self.host.environ['TEMP'] = self._filesystem.abspath(
+            self.host.environ['TEMP'])
         # Make TMP an alias for TEMP
         self.host.environ['TMP'] = self.host.environ['TEMP']
         env = super(WinPort, self).setup_environ_for_server()
@@ -152,7 +161,9 @@
         if result:
             _log.error('For complete Windows build requirements, please see:')
             _log.error('')
-            _log.error('    https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md')
+            _log.error(
+                '    https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md'
+            )
         return result
 
     def operating_system(self):
@@ -169,11 +180,12 @@
         return val
 
     def path_to_apache(self):
-        return self._path_from_chromium_base(
-            'third_party', 'apache-win32', 'bin', 'httpd.exe')
+        return self._path_from_chromium_base('third_party', 'apache-win32',
+                                             'bin', 'httpd.exe')
 
     def path_to_apache_config_file(self):
-        return self._filesystem.join(self.apache_config_directory(), 'win-httpd.conf')
+        return self._filesystem.join(self.apache_config_directory(),
+                                     'win-httpd.conf')
 
     #
     # PROTECTED ROUTINES
@@ -190,7 +202,8 @@
     def look_for_new_crash_logs(self, crashed_processes, start_time):
         if self.get_option('disable_breakpad'):
             return None
-        return self._dump_reader.look_for_new_crash_logs(crashed_processes, start_time)
+        return self._dump_reader.look_for_new_crash_logs(
+            crashed_processes, start_time)
 
     def clobber_old_port_specific_results(self):
         if not self.get_option('disable_breakpad'):
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/win_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/win_unittest.py
index bee0d49c..2f990e89 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/win_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/win_unittest.py
@@ -50,12 +50,14 @@
         self.assertEqual(orig_environ['PATH'], port.host.environ.get('PATH'))
 
     def assert_name(self, port_name, os_version_string, expected):
-        port = self.make_port(port_name=port_name, os_version=os_version_string)
+        port = self.make_port(
+            port_name=port_name, os_version=os_version_string)
         self.assertEqual(expected, port.name())
 
     def test_get_platform_tags(self):
         port = self.make_port()
-        self.assertEqual(port.get_platform_tags(), {'win', 'win7', 'x86', 'release'})
+        self.assertEqual(port.get_platform_tags(),
+                         {'win', 'win7', 'x86', 'release'})
 
     def test_versions(self):
         port = self.make_port()
@@ -93,9 +95,8 @@
 
     def assert_baseline_paths(self, port_name, *expected_paths):
         port = self.make_port(port_name=port_name)
-        self.assertEqual(
-            port.baseline_version_dir(),
-            port._absolute_baseline_path(expected_paths[0]))  # pylint: disable=protected-access
+        self.assertEqual(port.baseline_version_dir(),
+                         port._absolute_baseline_path(expected_paths[0]))  # pylint: disable=protected-access
         self.assertEqual(len(port.baseline_search_path()), len(expected_paths))
         for i, path in enumerate(expected_paths):
             self.assertTrue(port.baseline_search_path()[i].endswith(path))
@@ -108,14 +109,20 @@
         self.assertEqual('win', self.make_port().operating_system())
 
     def test_driver_name_option(self):
-        self.assertTrue(self.make_port()._path_to_driver().endswith('content_shell.exe'))
         self.assertTrue(
-            self.make_port(options=optparse.Values({'driver_name': 'OtherDriver'}))._path_to_driver().endswith('OtherDriver.exe'))
+            self.make_port()._path_to_driver().endswith('content_shell.exe'))
+        self.assertTrue(
+            self.make_port(
+                options=optparse.Values({
+                    'driver_name': 'OtherDriver'
+                }))._path_to_driver().endswith('OtherDriver.exe'))
 
     def test_path_to_image_diff(self):
-        self.assertEqual(self.make_port()._path_to_image_diff(), '/mock-checkout/out/Release/image_diff.exe')
+        self.assertEqual(self.make_port()._path_to_image_diff(),
+                         '/mock-checkout/out/Release/image_diff.exe')
 
     def test_path_to_apache_config_file(self):
         self.assertEqual(
             self.make_port().path_to_apache_config_file(),
-            '/mock-checkout/third_party/blink/tools/apache_config/win-httpd.conf')
+            '/mock-checkout/third_party/blink/tools/apache_config/win-httpd.conf'
+        )
diff --git a/third_party/blink/tools/blinkpy/web_tests/print_web_test_times.py b/third_party/blink/tools/blinkpy/web_tests/print_web_test_times.py
index 26d1937b..5614335 100644
--- a/third_party/blink/tools/blinkpy/web_tests/print_web_test_times.py
+++ b/third_party/blink/tools/blinkpy/web_tests/print_web_test_times.py
@@ -35,12 +35,23 @@
 
 def main(host, argv):
     parser = optparse.OptionParser(usage='%prog [times_ms.json]')
-    parser.add_option('-f', '--forward', action='store', type='int',
-                      help='group times by first N directories of test')
-    parser.add_option('-b', '--backward', action='store', type='int',
-                      help='group times by last N directories of test')
-    parser.add_option('--fastest', action='store', type='float',
-                      help='print a list of tests that will take N % of the time')
+    parser.add_option(
+        '-f',
+        '--forward',
+        action='store',
+        type='int',
+        help='group times by first N directories of test')
+    parser.add_option(
+        '-b',
+        '--backward',
+        action='store',
+        type='int',
+        help='group times by last N directories of test')
+    parser.add_option(
+        '--fastest',
+        action='store',
+        type='float',
+        help='print a list of tests that will take N % of the time')
 
     epilog = """
        You can print out aggregate times per directory using the -f and -b
@@ -59,7 +70,8 @@
     if args and args[0]:
         times_ms_path = args[0]
     else:
-        times_ms_path = host.filesystem.join(port.artifacts_directory(), 'times_ms.json')
+        times_ms_path = host.filesystem.join(port.artifacts_directory(),
+                                             'times_ms.json')
 
     times_trie = json.loads(host.filesystem.read_text_file(times_ms_path))
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/print_web_test_times_unittest.py b/third_party/blink/tools/blinkpy/web_tests/print_web_test_times_unittest.py
index d865089..425b8b9b 100644
--- a/third_party/blink/tools/blinkpy/web_tests/print_web_test_times_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/print_web_test_times_unittest.py
@@ -33,7 +33,6 @@
 
 
 class PrintWebTestTimesTest(unittest.TestCase):
-
     def check(self, args, expected_output, files=None):
         host = MockHost()
         fs = host.filesystem
@@ -41,7 +40,8 @@
         if files:
             fs.files = files
         else:
-            fs.write_text_file(fs.join(artifacts_directory, 'times_ms.json'), """
+            fs.write_text_file(
+                fs.join(artifacts_directory, 'times_ms.json'), """
                 {"foo": {"foo1": {"fast1.html": 10,
                                   "fast2.html": 10,
                                   "slow1.html": 80},
@@ -57,29 +57,25 @@
 
     def test_fastest_overall(self):
         # This is the fastest 10% of the tests overall (ignoring dir structure, equivalent to -f 0).
-        self.check(['--fastest', '10'],
-                   'bar/bar1/fast5.html 10\n'
+        self.check(['--fastest', '10'], 'bar/bar1/fast5.html 10\n'
                    'bar/bar1/fast6.html 10\n'
                    'foo/foo1/fast1.html 10\n')
 
     def test_fastest_forward_1(self):
         # Note that we don't get anything from foo/foo2, as foo/foo1 used up the budget for foo.
-        self.check(['-f', '1', '--fastest', '10'],
-                   'bar/bar1/fast5.html 10\n'
+        self.check(['-f', '1', '--fastest', '10'], 'bar/bar1/fast5.html 10\n'
                    'foo/foo1/fast1.html 10\n'
                    'foo/foo1/fast2.html 10\n')
 
     def test_fastest_back_1(self):
         # Here we get one test from each dir, showing that we are going properly breadth-first.
-        self.check(['-b', '1', '--fastest', '10'],
-                   'bar/bar1/fast5.html 10\n'
+        self.check(['-b', '1', '--fastest', '10'], 'bar/bar1/fast5.html 10\n'
                    'foo/foo1/fast1.html 10\n'
                    'foo/foo2/fast3.html 10\n')
 
     def test_no_args(self):
         # This should be every test, sorted lexicographically.
-        self.check([],
-                   'bar/bar1/fast5.html 10\n'
+        self.check([], 'bar/bar1/fast5.html 10\n'
                    'bar/bar1/fast6.html 10\n'
                    'bar/bar1/slow3.html 80\n'
                    'foo/foo1/fast1.html 10\n'
@@ -93,17 +89,15 @@
         self.check(['-f', '0'], '300\n')
 
     def test_forward_one(self):
-        self.check(['-f', '1'],
-                   'bar 100\n'
-                   'foo 200\n')
+        self.check(['-f', '1'], 'bar 100\n' 'foo 200\n')
 
     def test_backward_one(self):
-        self.check(['-b', '1'],
-                   'bar/bar1 100\n'
+        self.check(['-b', '1'], 'bar/bar1 100\n'
                    'foo/foo1 100\n'
                    'foo/foo2 100\n')
 
     def test_path_to_file(self):
         # Tests that we can use a custom file rather than the port's default.
-        self.check(['/tmp/times_ms.json'], 'foo/bar.html 1\n',
+        self.check(['/tmp/times_ms.json'],
+                   'foo/bar.html 1\n',
                    files={'/tmp/times_ms.json': '{"foo":{"bar.html": 1}}'})
diff --git a/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py b/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py
index 450978f0..4489017 100644
--- a/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py
+++ b/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py
@@ -101,22 +101,23 @@
 def parse_args(args):
     option_group_definitions = []
 
-    option_group_definitions.append(
-        ('Platform options', platform_options()))
+    option_group_definitions.append(('Platform options', platform_options()))
 
-    option_group_definitions.append(
-        ('Configuration options', configuration_options()))
+    option_group_definitions.append(('Configuration options',
+                                     configuration_options()))
 
-    option_group_definitions.append(
-        ('Printing Options', printing.print_options()))
+    option_group_definitions.append(('Printing Options',
+                                     printing.print_options()))
 
-    option_group_definitions.append(
-        ('web-platform-tests (WPT) Options', wpt_options()))
+    option_group_definitions.append(('web-platform-tests (WPT) Options',
+                                     wpt_options()))
 
-    option_group_definitions.append(('Python Server Options', python_server_options()))
+    option_group_definitions.append(('Python Server Options',
+                                     python_server_options()))
 
-    option_group_definitions.append(
-        ('Android-specific Options', [
+    option_group_definitions.append((
+        'Android-specific Options',
+        [
             optparse.make_option(
                 '--adb-device',
                 action='append',
@@ -134,72 +135,80 @@
                       'is to log as part of --debug-rwt-logging)')),
         ]))
 
-    option_group_definitions.append(
-        ('Fuchsia-specific Options', [
-            optparse.make_option(
-                '--zircon-logging',
-                dest='zircon_logging',
-                action='store_true',
-                default=True,
-                help=('Log Zircon debug messages (enabled by default).')),
-            optparse.make_option(
-                '--no-zircon-logging',
-                dest='zircon_logging',
-                action='store_false',
-                default=True,
-                help=('Do not log Zircon debug messages.')),
-            optparse.make_option(
-                '--device',
-                choices=['aemu','qemu'],
-                default='qemu',
-                help=('Choose device to launch Fuchsia with.')),
-        ]))
+    option_group_definitions.append(('Fuchsia-specific Options', [
+        optparse.make_option(
+            '--zircon-logging',
+            dest='zircon_logging',
+            action='store_true',
+            default=True,
+            help=('Log Zircon debug messages (enabled by default).')),
+        optparse.make_option(
+            '--no-zircon-logging',
+            dest='zircon_logging',
+            action='store_false',
+            default=True,
+            help=('Do not log Zircon debug messages.')),
+        optparse.make_option(
+            '--device',
+            choices=['aemu', 'qemu'],
+            default='qemu',
+            help=('Choose device to launch Fuchsia with.')),
+    ]))
 
-    option_group_definitions.append(
-        ('Results Options', [
+    option_group_definitions.append((
+        'Results Options',
+        [
             optparse.make_option(
                 '--additional-driver-flag',
                 '--additional-drt-flag',
                 dest='additional_driver_flag',
                 action='append',
                 default=[],
-                help=('Additional command line flag to pass to the driver. Specify multiple '
-                      'times to add multiple flags.')),
+                help=
+                ('Additional command line flag to pass to the driver. Specify multiple '
+                 'times to add multiple flags.')),
             optparse.make_option(
                 '--flag-specific',
                 dest='flag_specific',
                 action='store',
                 default=None,
-                help=('Name of a flag-specific configuration defined in FlagSpecificConfig, '
-                      ' as a shortcut of --additional-driver-flag options.')),
+                help=
+                ('Name of a flag-specific configuration defined in FlagSpecificConfig, '
+                 ' as a shortcut of --additional-driver-flag options.')),
             optparse.make_option(
                 '--additional-expectations',
                 action='append',
                 default=[],
-                help=('Path to a test_expectations file that will override previous '
-                      'expectations. Specify multiple times for multiple sets of overrides.')),
+                help=
+                ('Path to a test_expectations file that will override previous '
+                 'expectations. Specify multiple times for multiple sets of overrides.'
+                 )),
             optparse.make_option(
                 '--ignore-default-expectations',
                 action='store_true',
-                help=('Do not use the default set of TestExpectations files.')),
+                help=(
+                    'Do not use the default set of TestExpectations files.')),
             optparse.make_option(
                 '--no-expectations',
                 action='store_true',
-                help=('Do not use TestExpectations, only run the tests without '
-                      'reporting any results. Useful for generating code '
-                      'coverage reports.')),
+                help=(
+                    'Do not use TestExpectations, only run the tests without '
+                    'reporting any results. Useful for generating code '
+                    'coverage reports.')),
             optparse.make_option(
                 '--additional-platform-directory',
                 action='append',
                 default=[],
-                help=('Additional directory where to look for test baselines (will take '
-                      'precedence over platform baselines). Specify multiple times to add '
-                      'multiple search path entries.')),
+                help=
+                ('Additional directory where to look for test baselines (will take '
+                 'precedence over platform baselines). Specify multiple times to add '
+                 'multiple search path entries.')),
             optparse.make_option(
                 '--build-directory',
                 default='out',
-                help=('Path to the directory where build files are kept, not including '
-                      'configuration. In general this will be "out".')),
+                help=
+                ('Path to the directory where build files are kept, not including '
+                 'configuration. In general this will be "out".')),
             optparse.make_option(
                 '--clobber-old-results',
                 action='store_true',
@@ -214,43 +223,49 @@
                 '--copy-baselines',
                 action='store_true',
                 default=False,
-                help=('If the actual result is different from the current baseline, '
-                      'copy the current baseline into the *most-specific-platform* '
-                      'directory, or the flag-specific generic-platform directory if '
-                      '--additional-driver-flag is specified. See --reset-results.')),
+                help=
+                ('If the actual result is different from the current baseline, '
+                 'copy the current baseline into the *most-specific-platform* '
+                 'directory, or the flag-specific generic-platform directory if '
+                 '--additional-driver-flag is specified. See --reset-results.'
+                 )),
             optparse.make_option(
                 '--driver-name',
                 type='string',
                 help='Alternative driver binary to use'),
             optparse.make_option(
-                '--json-test-results',              # New name from json_results_generator
-                '--write-full-results-to',          # Old argument name
-                '--isolated-script-test-output',    # Isolated API
+                '--json-test-results',  # New name from json_results_generator
+                '--write-full-results-to',  # Old argument name
+                '--isolated-script-test-output',  # Isolated API
                 help='Path to write the JSON test results for *all* tests.'),
             # FIXME(tansell): Remove this option if nobody is found who needs it.
             optparse.make_option(
                 '--json-failing-test-results',
-                help='Path to write the JSON test results for only *failing* tests.'),
+                help=
+                'Path to write the JSON test results for only *failing* tests.'
+            ),
             optparse.make_option(
                 '--no-show-results',
                 dest='show_results',
                 action='store_false',
                 default=True,
-                help="Don't launch a browser with results after the tests are done"),
+                help=
+                "Don't launch a browser with results after the tests are done"
+            ),
             optparse.make_option(
                 '--reset-results',
                 action='store_true',
                 default=False,
-                help=('Reset baselines to the generated results in their existing location or the default '
-                      'location if no baseline exists. For virtual tests, reset the virtual baselines. '
-                      'If --additional-driver-flag is specified, reset the flag-specific baselines. '
-                      'If --copy-baselines is specified, the copied baselines will be reset.')),
+                help=
+                ('Reset baselines to the generated results in their existing location or the default '
+                 'location if no baseline exists. For virtual tests, reset the virtual baselines. '
+                 'If --additional-driver-flag is specified, reset the flag-specific baselines. '
+                 'If --copy-baselines is specified, the copied baselines will be reset.'
+                 )),
             optparse.make_option(
-                '--results-directory',
-                help='Location of test results'),
+                '--results-directory', help='Location of test results'),
             optparse.make_option(
-                '--smoke',
-                action='store_true',
+                '--smoke', action='store_true',
                 help='Run just the SmokeTests'),
             optparse.make_option(
                 '--no-smoke',
@@ -259,8 +274,9 @@
                 help='Do not run just the SmokeTests'),
         ]))
 
-    option_group_definitions.append(
-        ('Testing Options', [
+    option_group_definitions.append((
+        'Testing Options',
+        [
             optparse.make_option(
                 '--additional-env-var',
                 type='string',
@@ -280,7 +296,9 @@
                 action='store_false',
                 help="Don't check to see if the build is up to date."),
             optparse.make_option(
-                '--child-processes', '--jobs', '-j',
+                '--child-processes',
+                '--jobs',
+                '-j',
                 help='Number of drivers to run in parallel.'),
             optparse.make_option(
                 '--disable-breakpad',
@@ -302,32 +320,39 @@
                 '--exit-after-n-crashes-or-timeouts',
                 type='int',
                 default=None,
-                help='Exit after the first N crashes instead of running all tests'),
+                help=
+                'Exit after the first N crashes instead of running all tests'),
             optparse.make_option(
                 '--exit-after-n-failures',
                 type='int',
                 default=None,
-                help='Exit after the first N failures instead of running all tests'),
+                help=
+                'Exit after the first N failures instead of running all tests'
+            ),
             optparse.make_option(
                 '--fuzzy-diff',
                 action='store_true',
                 default=False,
-                help=('When running tests on an actual GPU, variance in pixel '
-                      'output can leads image differences causing failed expectations. '
-                      'Instead a fuzzy diff is used to account for this variance. '
-                      'See tools/imagediff/image_diff.cc')),
+                help=
+                ('When running tests on an actual GPU, variance in pixel '
+                 'output can leads image differences causing failed expectations. '
+                 'Instead a fuzzy diff is used to account for this variance. '
+                 'See tools/imagediff/image_diff.cc')),
             optparse.make_option(
                 '--ignore-builder-category',
                 action='store',
-                help=('The category of builders to use with the --ignore-flaky-tests option '
-                      "('layout' or 'deps').")),
+                help=
+                ('The category of builders to use with the --ignore-flaky-tests option '
+                 "('layout' or 'deps').")),
             optparse.make_option(
                 '--ignore-flaky-tests',
                 action='store',
-                help=('Control whether tests that are flaky on the bots get ignored. '
-                      "'very-flaky' == Ignore any tests that flaked more than once on the bot. "
-                      "'maybe-flaky' == Ignore any tests that flaked once on the bot. "
-                      "'unexpected' == Ignore any tests that had unexpected results on the bot.")),
+                help=
+                ('Control whether tests that are flaky on the bots get ignored. '
+                 "'very-flaky' == Ignore any tests that flaked more than once on the bot. "
+                 "'maybe-flaky' == Ignore any tests that flaked once on the bot. "
+                 "'unexpected' == Ignore any tests that had unexpected results on the bot."
+                 )),
             optparse.make_option(
                 '--iterations',
                 '--isolated-script-test-repeat',
@@ -335,7 +360,8 @@
                 '--gtest_repeat',
                 type='int',
                 default=1,
-                help='Number of times to run the set of tests (e.g. ABCABCABC)'),
+                help='Number of times to run the set of tests (e.g. ABCABCABC)'
+            ),
             optparse.make_option(
                 '--layout-tests-directory',
                 help=('Path to a custom web tests directory')),
@@ -353,12 +379,13 @@
                 '--order',
                 action='store',
                 default='random',
-                help=('Determine the order in which the test cases will be run. '
-                      "'none' == use the order in which the tests were listed "
-                      'either in arguments or test list, '
-                      "'random' == pseudo-random order (default). Seed can be specified "
-                      'via --seed, otherwise it will default to the current unix timestamp. '
-                      "'natural' == use the natural order")),
+                help=
+                ('Determine the order in which the test cases will be run. '
+                 "'none' == use the order in which the tests were listed "
+                 'either in arguments or test list, '
+                 "'random' == pseudo-random order (default). Seed can be specified "
+                 'via --seed, otherwise it will default to the current unix timestamp. '
+                 "'natural' == use the natural order")),
             optparse.make_option(
                 '--profile',
                 action='store_true',
@@ -366,21 +393,27 @@
             optparse.make_option(
                 '--profiler',
                 action='store',
-                help='Output per-test profile information, using the specified profiler.'),
+                help=
+                'Output per-test profile information, using the specified profiler.'
+            ),
             optparse.make_option(
                 '--restart-shell-between-tests',
                 type='choice',
                 action='store',
-                choices=['always', 'never', 'on_retry',],
+                choices=[
+                    'always',
+                    'never',
+                    'on_retry',
+                ],
                 default='on_retry',
-                help=(
-                    'Restarting the shell between tests produces more '
-                    'consistent results, as it prevents state from carrying over '
-                    'from previous tests. It also increases test run time by at '
-                    'least 2X. By default, the shell is restarted when tests get '
-                    'retried, since leaking state between retries can sometimes '
-                    'mask underlying flakiness, and the whole point of retries is '
-                    'to look for flakiness.')),
+                help=
+                ('Restarting the shell between tests produces more '
+                 'consistent results, as it prevents state from carrying over '
+                 'from previous tests. It also increases test run time by at '
+                 'least 2X. By default, the shell is restarted when tests get '
+                 'retried, since leaking state between retries can sometimes '
+                 'mask underlying flakiness, and the whole point of retries is '
+                 'to look for flakiness.')),
             optparse.make_option(
                 '--repeat-each',
                 type='int',
@@ -402,7 +435,8 @@
                 dest='num_retries',
                 action='store_const',
                 const=0,
-                help="Don't retry any failures (equivalent to --num-retries=0)."),
+                help="Don't retry any failures (equivalent to --num-retries=0)."
+            ),
             optparse.make_option(
                 '--total-shards',
                 type=int,
@@ -424,11 +458,13 @@
                 '--skipped',
                 action='store',
                 default=None,
-                help=('Control how tests marked SKIP are run. '
-                      '"default" == Skip tests unless explicitly listed on the command line, '
-                      '"ignore" == Run them anyway, '
-                      '"only" == only run the SKIP tests, '
-                      '"always" == always skip, even if listed on the command line.')),
+                help=
+                ('Control how tests marked SKIP are run. '
+                 '"default" == Skip tests unless explicitly listed on the command line, '
+                 '"ignore" == Run them anyway, '
+                 '"only" == only run the SKIP tests, '
+                 '"always" == always skip, even if listed on the command line.'
+                 )),
             optparse.make_option(
                 '--isolated-script-test-also-run-disabled-tests',
                 # TODO(crbug.com/893235): Remove the gtest alias when FindIt no longer uses it.
@@ -441,69 +477,84 @@
                 '--skip-failing-tests',
                 action='store_true',
                 default=False,
-                help=('Skip tests that are expected to fail. Note: When using this option, '
-                      'you might miss new crashes in these tests.')),
+                help=
+                ('Skip tests that are expected to fail. Note: When using this option, '
+                 'you might miss new crashes in these tests.')),
             optparse.make_option(
                 '--skip-timeouts',
                 action='store_true',
                 default=False,
-                help=('Skip tests marked TIMEOUT. Use it to speed up running the entire '
-                      'test suite.')),
+                help=
+                ('Skip tests marked TIMEOUT. Use it to speed up running the entire '
+                 'test suite.')),
             optparse.make_option(
                 '--fastest',
                 action='store',
                 type='float',
-                help='Run the N% fastest tests as well as any tests listed on the command line'),
+                help=
+                'Run the N% fastest tests as well as any tests listed on the command line'
+            ),
             optparse.make_option(
                 '--test-list',
                 action='append',
                 metavar='FILE',
-                help='read list of tests to run from file, as if they were specified on the command line'),
+                help=
+                'read list of tests to run from file, as if they were specified on the command line'
+            ),
             optparse.make_option(
                 '--isolated-script-test-filter',
                 action='append',
                 type='string',
-                help='A list of test globs to run or skip, separated by TWO colons, e.g. fast::css/test.html; '
-                     'prefix the glob with "-" to skip it'),
+                help=
+                'A list of test globs to run or skip, separated by TWO colons, e.g. fast::css/test.html; '
+                'prefix the glob with "-" to skip it'),
             # TODO(crbug.com/893235): Remove gtest_filter when FindIt no longer uses it.
             optparse.make_option(
                 '--gtest_filter',
                 type='string',
                 help='A colon-separated list of tests to run. Wildcards are '
-                     'NOT supported. It is the same as listing the tests as '
-                     'positional arguments.'),
+                'NOT supported. It is the same as listing the tests as '
+                'positional arguments.'),
             optparse.make_option(
-                '--time-out-ms',
-                help='Set the timeout for each test'),
+                '--time-out-ms', help='Set the timeout for each test'),
             optparse.make_option(
                 '--wrapper',
-                help=('wrapper command to insert before invocations of the driver; option '
-                      'is split on whitespace before running. (Example: --wrapper="valgrind '
-                      '--smc-check=all")')),
+                help=
+                ('wrapper command to insert before invocations of the driver; option '
+                 'is split on whitespace before running. (Example: --wrapper="valgrind '
+                 '--smc-check=all")')),
             # FIXME: Display the default number of child processes that will run.
             optparse.make_option(
-                '-f', '--fully-parallel',
+                '-f',
+                '--fully-parallel',
                 action='store_true',
                 help='run all tests in parallel'),
             optparse.make_option(
                 '--virtual-parallel',
                 action='store_true',
-                help='When running in parallel, include virtual tests. Useful for running a single '
-                     'virtual test suite, but will be slower in other cases.'),
+                help=
+                'When running in parallel, include virtual tests. Useful for running a single '
+                'virtual test suite, but will be slower in other cases.'),
             optparse.make_option(
-                '-i', '--ignore-tests',
+                '-i',
+                '--ignore-tests',
                 action='append',
                 default=[],
-                help='directories or test to ignore (may specify multiple times)'),
+                help=
+                'directories or test to ignore (may specify multiple times)'),
             optparse.make_option(
-                '-n', '--dry-run',
+                '-n',
+                '--dry-run',
                 action='store_true',
                 default=False,
-                help='Do everything but actually run the tests or upload results.'),
+                help=
+                'Do everything but actually run the tests or upload results.'),
             optparse.make_option(
-                '-w', '--watch',
+                '-w',
+                '--watch',
                 action='store_true',
-                help='Re-run tests quickly (e.g. avoid restarting the server)'),
+                help='Re-run tests quickly (e.g. avoid restarting the server)'
+            ),
             optparse.make_option(
                 '--zero-tests-executed-ok',
                 action='store_true',
@@ -513,15 +564,18 @@
                 '--driver-kill-timeout-secs',
                 type=float,
                 default=1.0,
-                help=('Number of seconds to wait before killing a driver, and the main '
-                      'use case is to leave enough time to allow the process to '
-                      'finish post-run hooks, such as dumping code coverage data. '
-                      'Default is 1 second, can be overriden for specific use cases.'))
+                help=
+                ('Number of seconds to wait before killing a driver, and the main '
+                 'use case is to leave enough time to allow the process to '
+                 'finish post-run hooks, such as dumping code coverage data. '
+                 'Default is 1 second, can be overriden for specific use cases.'
+                 ))
         ]))
 
     # FIXME: Move these into json_results_generator.py.
-    option_group_definitions.append(
-        ('Result JSON Options', [
+    option_group_definitions.append((
+        'Result JSON Options',
+        [
             # TODO(qyearsley): --build-name is unused and should be removed.
             optparse.make_option('--build-name', help=optparse.SUPPRESS_HELP),
             optparse.make_option(
@@ -536,7 +590,7 @@
                 '--builder-name',
                 default='',
                 help='The name of the builder shown on the waterfall running '
-                     'this script, e.g. "Mac10.13 Tests".'),
+                'this script, e.g. "Mac10.13 Tests".'),
             # TODO(qyearsley): This is not actually a Buildbot master since
             # Buildbot is gone; all instances of the term "master" in this
             # code-base should be removed after test-results.appspot.com is
@@ -546,13 +600,14 @@
                 '--test-results-server',
                 default='',
                 help='If specified, upload results JSON files to this '
-                     'App Engine server.'),
+                'App Engine server.'),
         ]))
 
     option_parser = optparse.OptionParser(
         prog='run_web_tests.py',
         usage='%prog [options] [tests]',
-        description='Runs Blink web tests as described in docs/testing/web_tests.md')
+        description=
+        'Runs Blink web tests as described in docs/testing/web_tests.md')
 
     for group_name, group_options in option_group_definitions:
         option_group = optparse.OptionGroup(option_parser, group_name)
@@ -589,8 +644,9 @@
         options.child_processes = port.host.environ.get(
             'WEBKIT_TEST_CHILD_PROCESSES', str(port.default_child_processes()))
     if not options.max_locked_shards:
-        options.max_locked_shards = int(port.host.environ.get(
-            'WEBKIT_TEST_MAX_LOCKED_SHARDS', str(port.default_max_locked_shards())))
+        options.max_locked_shards = int(
+            port.host.environ.get('WEBKIT_TEST_MAX_LOCKED_SHARDS',
+                                  str(port.default_max_locked_shards())))
 
     if not options.configuration:
         options.configuration = port.default_configuration()
@@ -603,7 +659,8 @@
     if options.additional_platform_directory:
         additional_platform_directories = []
         for path in options.additional_platform_directory:
-            additional_platform_directories.append(port.host.filesystem.abspath(path))
+            additional_platform_directories.append(
+                port.host.filesystem.abspath(path))
         options.additional_platform_directory = additional_platform_directories
 
     if not args and not options.test_list and options.smoke is None:
@@ -617,7 +674,8 @@
 
         if not options.test_list:
             options.test_list = []
-        options.test_list.append(port.host.filesystem.join(port.web_tests_dir(), 'SmokeTests'))
+        options.test_list.append(
+            port.host.filesystem.join(port.web_tests_dir(), 'SmokeTests'))
         if not options.skipped:
             options.skipped = 'always'
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/run_web_tests_unittest.py b/third_party/blink/tools/blinkpy/web_tests/run_web_tests_unittest.py
index 92b632f..08f18a7b 100644
--- a/third_party/blink/tools/blinkpy/web_tests/run_web_tests_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/run_web_tests_unittest.py
@@ -50,8 +50,8 @@
 from blinkpy.web_tests.port import test
 from blinkpy.web_tests.views.printing import Printer
 
-_MOCK_ROOT = os.path.join(
-    path_finder.get_chromium_src_dir(), 'third_party', 'pymock')
+_MOCK_ROOT = os.path.join(path_finder.get_chromium_src_dir(), 'third_party',
+                          'pymock')
 sys.path.insert(0, _MOCK_ROOT)
 import mock  # pylint: disable=wrong-import-position
 
@@ -67,18 +67,21 @@
     args.extend(extra_args)
     if not tests_included:
         # We use the glob to test that globbing works.
-        args.extend(['passes',
-                     'http/tests',
-                     'websocket/tests',
-                     'failures/expected/*'])
+        args.extend(
+            ['passes', 'http/tests', 'websocket/tests', 'failures/expected/*'])
     return run_web_tests.parse_args(args)
 
 
-def passing_run(extra_args=None, port_obj=None, tests_included=False, host=None, shared_port=True):
+def passing_run(extra_args=None,
+                port_obj=None,
+                tests_included=False,
+                host=None,
+                shared_port=True):
     options, parsed_args = parse_args(extra_args, tests_included)
     if not port_obj:
         host = host or MockHost()
-        port_obj = host.port_factory.get(port_name=options.platform, options=options)
+        port_obj = host.port_factory.get(
+            port_name=options.platform, options=options)
 
     if shared_port:
         port_obj.host.port_factory.get = lambda *args, **kwargs: port_obj
@@ -88,14 +91,20 @@
     return run_details.exit_code == 0
 
 
-def logging_run(extra_args=None, port_obj=None, tests_included=False, host=None, shared_port=True):
-    options, parsed_args = parse_args(extra_args=extra_args,
-                                      tests_included=tests_included)
+def logging_run(extra_args=None,
+                port_obj=None,
+                tests_included=False,
+                host=None,
+                shared_port=True):
+    options, parsed_args = parse_args(
+        extra_args=extra_args, tests_included=tests_included)
     host = host or MockHost()
     if not port_obj:
-        port_obj = host.port_factory.get(port_name=options.platform, options=options)
+        port_obj = host.port_factory.get(
+            port_name=options.platform, options=options)
 
-    run_details, output = run_and_capture(port_obj, options, parsed_args, shared_port)
+    run_details, output = run_and_capture(port_obj, options, parsed_args,
+                                          shared_port)
     return (run_details, output, host.user)
 
 
@@ -132,7 +141,8 @@
     options, parsed_args = parse_args(args, tests_included=True)
 
     host = host or MockHost()
-    port_obj = port_obj or host.port_factory.get(port_name=options.platform, options=options)
+    port_obj = port_obj or host.port_factory.get(
+        port_name=options.platform, options=options)
 
     printer = Printer(host, options, StringIO.StringIO())
     run_details = run_web_tests.run(port_obj, options, parsed_args, printer)
@@ -147,13 +157,13 @@
 
 
 def parse_full_results(full_results_text):
-    json_to_eval = full_results_text.replace('ADD_RESULTS(', '').replace(');', '')
+    json_to_eval = full_results_text.replace('ADD_RESULTS(', '').replace(
+        ');', '')
     compressed_results = json.loads(json_to_eval)
     return compressed_results
 
 
 class StreamTestingMixin(object):
-
     def assert_contains(self, stream, string):
         self.assertIn(string, stream.getvalue())
 
@@ -162,7 +172,6 @@
 
 
 class RunTest(unittest.TestCase, StreamTestingMixin):
-
     def setUp(self):
         # A real PlatformInfo object is used here instead of a
         # MockPlatformInfo because we need to actually check for
@@ -171,7 +180,10 @@
 
     def test_basic(self):
         options, args = parse_args(
-            extra_args=['--json-failing-test-results', '/tmp/json_failing_test_results.json'],
+            extra_args=[
+                '--json-failing-test-results',
+                '/tmp/json_failing_test_results.json'
+            ],
             tests_included=True)
         logging_stream = StringIO.StringIO()
         host = MockHost()
@@ -181,56 +193,73 @@
 
         # These numbers will need to be updated whenever we add new tests.
         self.assertEqual(details.initial_results.total, test.TOTAL_TESTS)
-        self.assertEqual(details.initial_results.expected_skips, test.TOTAL_SKIPS)
+        self.assertEqual(details.initial_results.expected_skips,
+                         test.TOTAL_SKIPS)
         self.assertEqual(
             len(details.initial_results.unexpected_results_by_name),
             test.UNEXPECTED_PASSES + test.UNEXPECTED_FAILURES)
         self.assertEqual(details.exit_code, test.UNEXPECTED_FAILURES)
-        self.assertEqual(details.all_retry_results[0].total, test.UNEXPECTED_FAILURES)
+        self.assertEqual(details.all_retry_results[0].total,
+                         test.UNEXPECTED_FAILURES)
 
         expected_tests = (
-            details.initial_results.total
-            - details.initial_results.expected_skips
-            - len(details.initial_results.unexpected_results_by_name))
+            details.initial_results.total -
+            details.initial_results.expected_skips - len(
+                details.initial_results.unexpected_results_by_name))
         expected_summary_str = ''
         if details.initial_results.expected_failures > 0:
             expected_summary_str = " (%d passed, %d didn't)" % (
                 expected_tests - details.initial_results.expected_failures,
                 details.initial_results.expected_failures)
         one_line_summary = "%d tests ran as expected%s, %d didn't:\n" % (
-            expected_tests,
-            expected_summary_str,
+            expected_tests, expected_summary_str,
             len(details.initial_results.unexpected_results_by_name))
         self.assertIn(one_line_summary, logging_stream.buflist)
 
         # Ensure the results were summarized properly.
-        self.assertEqual(details.summarized_failing_results['num_regressions'], details.exit_code)
+        self.assertEqual(details.summarized_failing_results['num_regressions'],
+                         details.exit_code)
 
         # Ensure the results were written out and displayed.
-        failing_results_text = host.filesystem.read_text_file('/tmp/layout-test-results/failing_results.json')
-        json_to_eval = failing_results_text.replace('ADD_RESULTS(', '').replace(');', '')
-        self.assertEqual(json.loads(json_to_eval), details.summarized_failing_results)
+        failing_results_text = host.filesystem.read_text_file(
+            '/tmp/layout-test-results/failing_results.json')
+        json_to_eval = failing_results_text.replace('ADD_RESULTS(',
+                                                    '').replace(');', '')
+        self.assertEqual(
+            json.loads(json_to_eval), details.summarized_failing_results)
 
-        full_results_text = host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json')
-        self.assertEqual(json.loads(full_results_text), details.summarized_full_results)
+        full_results_text = host.filesystem.read_text_file(
+            '/tmp/layout-test-results/full_results.json')
+        self.assertEqual(
+            json.loads(full_results_text), details.summarized_full_results)
 
-        self.assertEqual(host.user.opened_urls, [abspath_to_uri(MockHost().platform, '/tmp/layout-test-results/results.html')])
+        self.assertEqual(host.user.opened_urls, [
+            abspath_to_uri(MockHost().platform,
+                           '/tmp/layout-test-results/results.html')
+        ])
 
     def test_max_locked_shards(self):
         # Tests for the default of using one locked shard even in the case of more than one child process.
-        _, regular_output, _ = logging_run(['--debug-rwt-logging', '--jobs', '2'], shared_port=False)
-        self.assertTrue(any('1 locked' in line for line in regular_output.buflist))
+        _, regular_output, _ = logging_run(
+            ['--debug-rwt-logging', '--jobs', '2'], shared_port=False)
+        self.assertTrue(
+            any('1 locked' in line for line in regular_output.buflist))
 
     def test_child_processes_2(self):
         _, regular_output, _ = logging_run(
             ['--debug-rwt-logging', '--jobs', '2'], shared_port=False)
-        self.assertTrue(any(['Running 2 ' in line for line in regular_output.buflist]))
+        self.assertTrue(
+            any(['Running 2 ' in line for line in regular_output.buflist]))
 
     def test_child_processes_min(self):
-        _, regular_output, _ = logging_run(
-            ['--debug-rwt-logging', '--jobs', '2', '-i', 'passes/virtual_passes', 'passes'],
-            tests_included=True, shared_port=False)
-        self.assertTrue(any(['Running 1 ' in line for line in regular_output.buflist]))
+        _, regular_output, _ = logging_run([
+            '--debug-rwt-logging', '--jobs', '2', '-i',
+            'passes/virtual_passes', 'passes'
+        ],
+                                           tests_included=True,
+                                           shared_port=False)
+        self.assertTrue(
+            any(['Running 1 ' in line for line in regular_output.buflist]))
 
     def test_dryrun(self):
         tests_run = get_tests_run(['--dry-run'])
@@ -240,7 +269,11 @@
         self.assertEqual(tests_run, [])
 
     def test_enable_sanitizer(self):
-        self.assertTrue(passing_run(['--enable-sanitizer', '--order', 'natural', 'failures/expected/text.html']))
+        self.assertTrue(
+            passing_run([
+                '--enable-sanitizer', '--order', 'natural',
+                'failures/expected/text.html'
+            ]))
 
     def test_exception_raised(self):
         # Exceptions raised by a worker are treated differently depending on
@@ -253,30 +286,43 @@
         # WorkerExceptions (a subclass of BaseException), which have a string capture of the stack which can
         # be printed, but don't display properly in the unit test exception handlers.
         with self.assertRaises(BaseException):
-            logging_run(['failures/expected/exception.html', '--jobs', '1'], tests_included=True)
+            logging_run(['failures/expected/exception.html', '--jobs', '1'],
+                        tests_included=True)
 
         with self.assertRaises(BaseException):
-            logging_run(
-                ['--jobs', '2', '--skipped=ignore', 'failures/expected/exception.html', 'passes/text.html'],
-                tests_included=True,
-                shared_port=False)
+            logging_run([
+                '--jobs', '2', '--skipped=ignore',
+                'failures/expected/exception.html', 'passes/text.html'
+            ],
+                        tests_included=True,
+                        shared_port=False)
 
     def test_device_failure(self):
         # Test that we handle a device going offline during a test properly.
-        details, regular_output, _ = logging_run(['failures/expected/device_failure.html'], tests_included=True)
+        details, regular_output, _ = logging_run(
+            ['failures/expected/device_failure.html'], tests_included=True)
         self.assertEqual(details.exit_code, 0)
         self.assertTrue('worker/0 has failed' in regular_output.getvalue())
 
     def test_keyboard_interrupt(self):
         # Note that this also tests running a test marked as SKIP if
         # you specify it explicitly.
-        details, _, _ = logging_run(['failures/expected/keyboard.html', '--jobs', '1'], tests_included=True)
+        details, _, _ = logging_run(
+            ['failures/expected/keyboard.html', '--jobs', '1'],
+            tests_included=True)
         self.assertEqual(details.exit_code, exit_codes.INTERRUPTED_EXIT_STATUS)
 
-        _, regular_output, _ = logging_run(
-            ['failures/expected/keyboard.html', 'passes/text.html', '--jobs', '2', '--skipped=ignore'],
-            tests_included=True, shared_port=False)
-        self.assertTrue(any(['Interrupted, exiting' in line for line in regular_output.buflist]))
+        _, regular_output, _ = logging_run([
+            'failures/expected/keyboard.html', 'passes/text.html', '--jobs',
+            '2', '--skipped=ignore'
+        ],
+                                           tests_included=True,
+                                           shared_port=False)
+        self.assertTrue(
+            any([
+                'Interrupted, exiting' in line
+                for line in regular_output.buflist
+            ]))
 
     def test_no_tests_found(self):
         details, err, _ = logging_run(['resources'], tests_included=True)
@@ -289,7 +335,9 @@
         self.assert_contains(err, 'No tests to run.\n')
 
     def test_no_tests_found_3(self):
-        details, err, _ = logging_run(['--shard-index', '4', '--total-shards', '400', 'foo/bar.html'], tests_included=True)
+        details, err, _ = logging_run(
+            ['--shard-index', '4', '--total-shards', '400', 'foo/bar.html'],
+            tests_included=True)
         self.assertEqual(details.exit_code, exit_codes.NO_TESTS_EXIT_STATUS)
         self.assert_contains(err, 'No tests to run.\n')
 
@@ -300,37 +348,41 @@
         self.assert_contains(err, 'No tests to run.\n')
 
     def test_no_tests_found_with_ok_flag_shards(self):
-        details, err, _ = logging_run(
-            ['--shard-index', '4', '--total-shards', '40', 'foo/bar.html', '--zero-tests-executed-ok'], tests_included=True)
+        details, err, _ = logging_run([
+            '--shard-index', '4', '--total-shards', '40', 'foo/bar.html',
+            '--zero-tests-executed-ok'
+        ],
+                                      tests_included=True)
         self.assertEqual(details.exit_code, exit_codes.OK_EXIT_STATUS)
         self.assert_contains(err, 'No tests to run.\n')
 
     def test_natural_order(self):
         tests_to_run = [
-            'passes/audio.html',
-            'failures/expected/text.html',
-            'failures/unexpected/missing_text.html',
-            'passes/args.html'
+            'passes/audio.html', 'failures/expected/text.html',
+            'failures/unexpected/missing_text.html', 'passes/args.html'
         ]
         tests_run = get_tests_run(['--order=natural'] + tests_to_run)
         self.assertEqual([
             'failures/expected/text.html',
-            'failures/unexpected/missing_text.html',
-            'passes/args.html',
+            'failures/unexpected/missing_text.html', 'passes/args.html',
             'passes/audio.html'
         ], tests_run)
 
     def test_natural_order_test_specified_multiple_times(self):
-        tests_to_run = ['passes/args.html', 'passes/audio.html', 'passes/audio.html', 'passes/args.html']
+        tests_to_run = [
+            'passes/args.html', 'passes/audio.html', 'passes/audio.html',
+            'passes/args.html'
+        ]
         tests_run = get_tests_run(['--order=natural'] + tests_to_run)
-        self.assertEqual(['passes/args.html', 'passes/args.html', 'passes/audio.html', 'passes/audio.html'], tests_run)
+        self.assertEqual([
+            'passes/args.html', 'passes/args.html', 'passes/audio.html',
+            'passes/audio.html'
+        ], tests_run)
 
     def test_random_order(self):
         tests_to_run = [
-            'passes/audio.html',
-            'failures/expected/text.html',
-            'failures/unexpected/missing_text.html',
-            'passes/args.html'
+            'passes/audio.html', 'failures/expected/text.html',
+            'failures/unexpected/missing_text.html', 'passes/args.html'
         ]
         tests_run = get_tests_run(['--order=random'] + tests_to_run)
         self.assertEqual(sorted(tests_to_run), sorted(tests_run))
@@ -342,7 +394,8 @@
             'passes/args.html',
             'passes/audio.html',
         ]
-        tests_run = get_tests_run(['--order=random', '--seed=5'] + sorted(tests_to_run))
+        tests_run = get_tests_run(['--order=random', '--seed=5'] +
+                                  sorted(tests_to_run))
         expected_order = [
             'failures/expected/text.html',
             'failures/unexpected/missing_text.html',
@@ -360,54 +413,79 @@
             'passes/audio.html',
         ])
 
-        run_1 = get_tests_run(['--order=random'] + tests_to_run, host=MockHost(time_return_val=10))
-        run_2 = get_tests_run(['--order=random'] + tests_to_run, host=MockHost(time_return_val=10))
+        run_1 = get_tests_run(
+            ['--order=random'] + tests_to_run,
+            host=MockHost(time_return_val=10))
+        run_2 = get_tests_run(
+            ['--order=random'] + tests_to_run,
+            host=MockHost(time_return_val=10))
         self.assertEqual(run_1, run_2)
 
-        run_3 = get_tests_run(['--order=random'] + tests_to_run, host=MockHost(time_return_val=20))
+        run_3 = get_tests_run(
+            ['--order=random'] + tests_to_run,
+            host=MockHost(time_return_val=20))
         self.assertNotEqual(run_1, run_3)
 
     def test_random_order_test_specified_multiple_times(self):
-        tests_to_run = ['passes/args.html', 'passes/audio.html', 'passes/audio.html', 'passes/args.html']
+        tests_to_run = [
+            'passes/args.html', 'passes/audio.html', 'passes/audio.html',
+            'passes/args.html'
+        ]
         tests_run = get_tests_run(['--order=random'] + tests_to_run)
         self.assertEqual(tests_run.count('passes/audio.html'), 2)
         self.assertEqual(tests_run.count('passes/args.html'), 2)
 
     def test_no_order(self):
         tests_to_run = [
-            'passes/audio.html',
-            'failures/expected/text.html',
-            'failures/unexpected/missing_text.html',
-            'passes/args.html'
+            'passes/audio.html', 'failures/expected/text.html',
+            'failures/unexpected/missing_text.html', 'passes/args.html'
         ]
         tests_run = get_tests_run(['--order=none'] + tests_to_run)
         self.assertEqual(tests_to_run, tests_run)
 
     def test_no_order_test_specified_multiple_times(self):
-        tests_to_run = ['passes/args.html', 'passes/audio.html', 'passes/audio.html', 'passes/args.html']
+        tests_to_run = [
+            'passes/args.html', 'passes/audio.html', 'passes/audio.html',
+            'passes/args.html'
+        ]
         tests_run = get_tests_run(['--order=none'] + tests_to_run)
         self.assertEqual(tests_to_run, tests_run)
 
     def test_no_order_with_directory_entries_in_natural_order(self):
         tests_to_run = ['http/tests/ssl', 'perf/foo', 'http/tests/passes']
         tests_run = get_tests_run(['--order=none'] + tests_to_run)
-        self.assertEqual(tests_run, ['http/tests/ssl/text.html', 'perf/foo/test.html',
-                                     'http/tests/passes/image.html', 'http/tests/passes/text.html'])
+        self.assertEqual(tests_run, [
+            'http/tests/ssl/text.html', 'perf/foo/test.html',
+            'http/tests/passes/image.html', 'http/tests/passes/text.html'
+        ])
 
     def test_repeat_each(self):
         tests_to_run = ['passes/image.html', 'passes/text.html']
-        tests_run = get_tests_run(['--repeat-each', '2', '--order', 'natural'] + tests_to_run)
-        self.assertEqual(tests_run, ['passes/image.html', 'passes/image.html', 'passes/text.html', 'passes/text.html'])
+        tests_run = get_tests_run(
+            ['--repeat-each', '2', '--order', 'natural'] + tests_to_run)
+        self.assertEqual(tests_run, [
+            'passes/image.html', 'passes/image.html', 'passes/text.html',
+            'passes/text.html'
+        ])
 
     def test_gtest_repeat(self):
         tests_to_run = ['passes/image.html', 'passes/text.html']
-        tests_run = get_tests_run(['--gtest_repeat', '2', '--order', 'natural'] + tests_to_run)
-        self.assertEqual(tests_run, ['passes/image.html', 'passes/text.html', 'passes/image.html', 'passes/text.html'])
+        tests_run = get_tests_run(
+            ['--gtest_repeat', '2', '--order', 'natural'] + tests_to_run)
+        self.assertEqual(tests_run, [
+            'passes/image.html', 'passes/text.html', 'passes/image.html',
+            'passes/text.html'
+        ])
 
     def test_gtest_repeat_overrides_iterations(self):
         tests_to_run = ['passes/image.html', 'passes/text.html']
-        tests_run = get_tests_run(['--iterations', '4', '--gtest_repeat', '2', '--order', 'natural'] + tests_to_run)
-        self.assertEqual(tests_run, ['passes/image.html', 'passes/text.html', 'passes/image.html', 'passes/text.html'])
+        tests_run = get_tests_run(
+            ['--iterations', '4', '--gtest_repeat', '2', '--order', 'natural'
+             ] + tests_to_run)
+        self.assertEqual(tests_run, [
+            'passes/image.html', 'passes/text.html', 'passes/image.html',
+            'passes/text.html'
+        ])
 
     def test_ignore_flag(self):
         # Note that passes/image.html is expected to be run since we specified it directly.
@@ -421,8 +499,9 @@
         num_tests_run_by_default = len(tests_run)
 
         # Check that nothing changes when we specify skipped=default.
-        self.assertEqual(len(get_tests_run(['--skipped=default', 'passes'])),
-                         num_tests_run_by_default)
+        self.assertEqual(
+            len(get_tests_run(['--skipped=default', 'passes'])),
+            num_tests_run_by_default)
 
         # Now check that we run one more test (the skipped one).
         tests_run = get_tests_run(['--skipped=ignore', 'passes'])
@@ -430,44 +509,64 @@
         self.assertEqual(len(tests_run), num_tests_run_by_default + 1)
 
         # Now check that we only run the skipped test.
-        self.assertEqual(get_tests_run(['--skipped=only', 'passes']), ['passes/skipped/skip.html'])
+        self.assertEqual(
+            get_tests_run(['--skipped=only', 'passes']),
+            ['passes/skipped/skip.html'])
 
         # Now check that we don't run anything.
-        self.assertEqual(get_tests_run(['--skipped=always', 'passes/skipped/skip.html']), [])
+        self.assertEqual(
+            get_tests_run(['--skipped=always', 'passes/skipped/skip.html']),
+            [])
 
     def test_isolated_script_test_also_run_disabled_tests(self):
         self.assertEqual(
-            sorted(get_tests_run(['--isolated-script-test-also-run-disabled-tests', 'passes'])),
-            sorted(get_tests_run(['--skipped=ignore', 'passes']))
-        )
+            sorted(
+                get_tests_run([
+                    '--isolated-script-test-also-run-disabled-tests', 'passes'
+                ])), sorted(get_tests_run(['--skipped=ignore', 'passes'])))
 
     def test_gtest_also_run_disabled_tests(self):
         self.assertEqual(
-            sorted(get_tests_run(['--gtest_also_run_disabled_tests', 'passes'])),
-            sorted(get_tests_run(['--skipped=ignore', 'passes']))
-        )
+            sorted(
+                get_tests_run(['--gtest_also_run_disabled_tests', 'passes'])),
+            sorted(get_tests_run(['--skipped=ignore', 'passes'])))
 
     def test_iterations(self):
         tests_to_run = ['passes/image.html', 'passes/text.html']
-        tests_run = get_tests_run(['--iterations', '2', '--order', 'natural'] + tests_to_run)
-        self.assertEqual(tests_run, ['passes/image.html', 'passes/text.html', 'passes/image.html', 'passes/text.html'])
+        tests_run = get_tests_run(['--iterations', '2', '--order', 'natural'] +
+                                  tests_to_run)
+        self.assertEqual(tests_run, [
+            'passes/image.html', 'passes/text.html', 'passes/image.html',
+            'passes/text.html'
+        ])
 
     def test_repeat_each_iterations_num_tests(self):
         # The total number of tests should be: number_of_tests *
         # repeat_each * iterations
         host = MockHost()
-        _, err, _ = logging_run(
-            ['--iterations', '2', '--repeat-each', '4', '--debug-rwt-logging', 'passes/text.html', 'failures/expected/text.html'],
-            tests_included=True, host=host)
-        self.assert_contains(err, "All 16 tests ran as expected (8 passed, 8 didn't).\n")
+        _, err, _ = logging_run([
+            '--iterations', '2', '--repeat-each', '4', '--debug-rwt-logging',
+            'passes/text.html', 'failures/expected/text.html'
+        ],
+                                tests_included=True,
+                                host=host)
+        self.assert_contains(
+            err, "All 16 tests ran as expected (8 passed, 8 didn't).\n")
 
     def test_skip_failing_tests(self):
         # This tests that we skip both known failing and known flaky tests. Because there are
         # no known flaky tests in the default test_expectations, we add additional expectations.
         host = MockHost()
-        host.filesystem.write_text_file('/tmp/overrides.txt', '# results: [ Failure Pass ]\npasses/image.html [ Failure Pass ]\n')
+        host.filesystem.write_text_file(
+            '/tmp/overrides.txt',
+            '# results: [ Failure Pass ]\npasses/image.html [ Failure Pass ]\n'
+        )
 
-        batches = get_test_batches(['--skip-failing-tests', '--additional-expectations', '/tmp/overrides.txt'], host=host)
+        batches = get_test_batches([
+            '--skip-failing-tests', '--additional-expectations',
+            '/tmp/overrides.txt'
+        ],
+                                   host=host)
         has_passes_text = False
         for batch in batches:
             self.assertNotIn('failures/expected/text.html', batch)
@@ -480,21 +579,28 @@
         self.assertEqual(tests_run, ['passes/text.html'])
 
     def test_single_file_with_prefix(self):
-        tests_run = get_tests_run([WEB_TESTS_LAST_COMPONENT + '/passes/text.html'])
+        tests_run = get_tests_run(
+            [WEB_TESTS_LAST_COMPONENT + '/passes/text.html'])
         self.assertEqual(['passes/text.html'], tests_run)
 
     def test_no_flag_specific_files_json_results(self):
         host = MockHost()
         port = host.port_factory.get('test-win-win7')
         host.filesystem.write_text_file(
-            '/tmp/overrides.txt', '# results: [ Timeout ]\nfailures/expected/text.html [ Timeout ]')
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/expected/text.html', '--num-retries', '1',
-             '--additional-driver-flag', '--composite-after-paint', '--additional-expectations',
-             '/tmp/overrides.txt'],
-            tests_included=True, host=host))
+            '/tmp/overrides.txt',
+            '# results: [ Timeout ]\nfailures/expected/text.html [ Timeout ]')
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural', 'failures/expected/text.html',
+                '--num-retries', '1', '--additional-driver-flag',
+                '--composite-after-paint', '--additional-expectations',
+                '/tmp/overrides.txt'
+            ],
+                        tests_included=True,
+                        host=host))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         test_results = results['tests']['failures']['expected']['text.html']
         self.assertNotIn('flag_name', results)
         self.assertNotIn('flag_expectations', test_results)
@@ -506,15 +612,21 @@
         flag_exp_path = host.filesystem.join(
             port.web_tests_dir(), 'FlagExpectations', 'composite-after-paint')
         host.filesystem.write_text_file(
-            '/tmp/overrides.txt', '# results: [ Timeout ]\nfailures/expected/text.html [ Timeout ]')
+            '/tmp/overrides.txt',
+            '# results: [ Timeout ]\nfailures/expected/text.html [ Timeout ]')
         host.filesystem.write_text_file(flag_exp_path, '')
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/expected/text.html', '--num-retries', '1',
-             '--additional-driver-flag', '--composite-after-paint', '--additional-expectations',
-             '/tmp/overrides.txt'],
-            tests_included=True, host=host))
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural', 'failures/expected/text.html',
+                '--num-retries', '1', '--additional-driver-flag',
+                '--composite-after-paint', '--additional-expectations',
+                '/tmp/overrides.txt'
+            ],
+                        tests_included=True,
+                        host=host))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         test_results = results['tests']['failures']['expected']['text.html']
         self.assertEqual(results['flag_name'], '/composite-after-paint')
         self.assertNotIn('flag_expectations', test_results)
@@ -526,21 +638,28 @@
         flag_exp_path = host.filesystem.join(
             port.web_tests_dir(), 'FlagExpectations', 'composite-after-paint')
         host.filesystem.write_text_file(
-            '/tmp/overrides.txt', '# results: [ Timeout ]\nfailures/expected/text.html [ Timeout ]')
+            '/tmp/overrides.txt',
+            '# results: [ Timeout ]\nfailures/expected/text.html [ Timeout ]')
         host.filesystem.write_text_file(
             flag_exp_path,
             '# results: [ Slow ]\nfailures/expected/text.html [ Slow ]')
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/expected/text.html', '--num-retries', '1',
-             '--additional-driver-flag', '--composite-after-paint', '--additional-expectations',
-             '/tmp/overrides.txt'],
-            tests_included=True, host=host))
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural', 'failures/expected/text.html',
+                '--num-retries', '1', '--additional-driver-flag',
+                '--composite-after-paint', '--additional-expectations',
+                '/tmp/overrides.txt'
+            ],
+                        tests_included=True,
+                        host=host))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         test_results = results['tests']['failures']['expected']['text.html']
         self.assertEqual(results['flag_name'], '/composite-after-paint')
         self.assertEqual(test_results['flag_expectations'], ['PASS'])
-        self.assertEqual(test_results['base_expectations'], ['FAIL', 'TIMEOUT'])
+        self.assertEqual(test_results['base_expectations'],
+                         ['FAIL', 'TIMEOUT'])
 
     def test_flag_and_base_expectations_in_json_results(self):
         host = MockHost()
@@ -548,21 +667,29 @@
         flag_exp_path = host.filesystem.join(
             port.web_tests_dir(), 'FlagExpectations', 'composite-after-paint')
         host.filesystem.write_text_file(
-            '/tmp/overrides.txt', '# results: [ Timeout ]\nfailures/expected/text.html [ Timeout ]')
+            '/tmp/overrides.txt',
+            '# results: [ Timeout ]\nfailures/expected/text.html [ Timeout ]')
         host.filesystem.write_text_file(
             flag_exp_path,
-            '# results: [ Crash Failure ]\nfailures/expected/text.html [ Crash Failure ]')
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/expected/text.html', '--num-retries', '1',
-             '--additional-driver-flag', '--composite-after-paint', '--additional-expectations',
-             '/tmp/overrides.txt'],
-            tests_included=True, host=host))
+            '# results: [ Crash Failure ]\nfailures/expected/text.html [ Crash Failure ]'
+        )
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural', 'failures/expected/text.html',
+                '--num-retries', '1', '--additional-driver-flag',
+                '--composite-after-paint', '--additional-expectations',
+                '/tmp/overrides.txt'
+            ],
+                        tests_included=True,
+                        host=host))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         test_results = results['tests']['failures']['expected']['text.html']
         self.assertEqual(results['flag_name'], '/composite-after-paint')
         self.assertEqual(test_results['flag_expectations'], ['FAIL', 'CRASH'])
-        self.assertEqual(test_results['base_expectations'], ['FAIL', 'TIMEOUT'])
+        self.assertEqual(test_results['base_expectations'],
+                         ['FAIL', 'TIMEOUT'])
 
     def test_flag_and_default_base_expectations_in_json_results(self):
         host = MockHost()
@@ -570,13 +697,18 @@
         flag_exp_path = host.filesystem.join(
             port.web_tests_dir(), 'FlagExpectations', 'composite-after-paint')
         host.filesystem.write_text_file(
-            flag_exp_path, '# results: [ Failure ]\npasses/args.html [ Failure ]')
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'passes/args.html', '--num-retries', '1',
-             '--additional-driver-flag', '--composite-after-paint'],
-            tests_included=True, host=host))
+            flag_exp_path,
+            '# results: [ Failure ]\npasses/args.html [ Failure ]')
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural', 'passes/args.html', '--num-retries', '1',
+                '--additional-driver-flag', '--composite-after-paint'
+            ],
+                        tests_included=True,
+                        host=host))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         test_results = results['tests']['passes']['args.html']
         self.assertEqual(results['flag_name'], '/composite-after-paint')
         self.assertEqual(test_results['flag_expectations'], ['FAIL'])
@@ -586,57 +718,80 @@
         host = MockHost()
         self.assertTrue(passing_run(host=host))
         self.assertEqual(
-            host.filesystem.read_text_file('/tmp/layout-test-results/passes/error-stderr.txt'),
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/passes/error-stderr.txt'),
             'stuff going to stderr')
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         test_results = results['tests']['passes']['error.html']
-        self.assertEqual(test_results['artifacts']['stderr'], ['layout-test-results/passes/error-stderr.txt'])
+        self.assertEqual(test_results['artifacts']['stderr'],
+                         ['layout-test-results/passes/error-stderr.txt'])
 
     def test_crash_log_is_saved(self):
         host = MockHost()
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/unexpected/crash.html', '--num-retries', '1'],
-            tests_included=True, host=host))
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural', 'failures/unexpected/crash.html',
+                '--num-retries', '1'
+            ],
+                        tests_included=True,
+                        host=host))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         self.assertEqual(
             host.filesystem.read_text_file(
-                '/tmp/layout-test-results/failures/unexpected/crash-crash-log.txt'),
-                'crash log')
+                '/tmp/layout-test-results/failures/unexpected/crash-crash-log.txt'
+            ), 'crash log')
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         test_results = results['tests']['failures']['unexpected']['crash.html']
         self.assertEqual(test_results['artifacts']['crash_log'], [
             'layout-test-results/failures/unexpected/crash-crash-log.txt',
-            'layout-test-results/retry_1/failures/unexpected/crash-crash-log.txt'])
+            'layout-test-results/retry_1/failures/unexpected/crash-crash-log.txt'
+        ])
 
     def test_crash_log_is_saved_after_delay(self):
         host = MockHost()
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/unexpected/crash-with-delayed-log.html',
-            '--num-retries', '1'],
-            tests_included=True, host=host))
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural',
+                'failures/unexpected/crash-with-delayed-log.html',
+                '--num-retries', '1'
+            ],
+                        tests_included=True,
+                        host=host))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         self.assertEqual(
             host.filesystem.read_text_file(
-                '/tmp/layout-test-results/failures/unexpected/crash-with-delayed-log-crash-log.txt'),
-                'delayed crash log')
+                '/tmp/layout-test-results/failures/unexpected/crash-with-delayed-log-crash-log.txt'
+            ), 'delayed crash log')
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['crash-with-delayed-log.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'crash-with-delayed-log.html']
         self.assertEqual(test_results['artifacts']['crash_log'], [
             'layout-test-results/failures/unexpected/crash-with-delayed-log-crash-log.txt',
-            'layout-test-results/retry_1/failures/unexpected/crash-with-delayed-log-crash-log.txt'])
+            'layout-test-results/retry_1/failures/unexpected/crash-with-delayed-log-crash-log.txt'
+        ])
 
     def test_reftest_mismatch_with_text_mismatch_only_writes_stderr_once(self):
         # test that there is no exception when two failure types, FailureTextMismatch and
         # FailureReftestMismatch both have the same stderr to print out.
         host = MockHost()
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/unexpected/reftest-mismatch-with-text-mismatch-with-stderr.html',],
-            tests_included=True, host=host))
+        self.assertTrue(
+            logging_run([
+                '--order',
+                'natural',
+                'failures/unexpected/reftest-mismatch-with-text-mismatch-with-stderr.html',
+            ],
+                        tests_included=True,
+                        host=host))
 
     @unittest.skip('Need to make subprocesses use mock filesystem')
     def test_crash_log_is_saved_after_delay_using_multiple_jobs(self):
@@ -644,70 +799,100 @@
         # the non mock file system. We should figure out how to make all subprocesses
         # use the mock file system.
         host = MockHost()
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/unexpected/crash-with-delayed-log.html',
-            'passes/args.html', '-j', '2'],
-            tests_included=True, host=host))
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural',
+                'failures/unexpected/crash-with-delayed-log.html',
+                'passes/args.html', '-j', '2'
+            ],
+                        tests_included=True,
+                        host=host))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['crash-with-delayed-log.html']
-        self.assertEqual(test_results['artifacts']['crash_log'], [
-            'failures/unexpected/crash-with-delayed-log-crash-log.txt'])
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'crash-with-delayed-log.html']
+        self.assertEqual(
+            test_results['artifacts']['crash_log'],
+            ['failures/unexpected/crash-with-delayed-log-crash-log.txt'])
 
     def test_crash_sample_file_is_saved(self):
         host = MockHost()
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/unexpected/crash-with-sample.html',
-             '--num-retries', '1'],
-            tests_included=True, host=host))
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural',
+                'failures/unexpected/crash-with-sample.html', '--num-retries',
+                '1'
+            ],
+                        tests_included=True,
+                        host=host))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         self.assertEqual(
             host.filesystem.read_text_file(
-                '/tmp/layout-test-results/failures/unexpected/crash-with-sample-sample.txt'),
-                'crash sample file')
+                '/tmp/layout-test-results/failures/unexpected/crash-with-sample-sample.txt'
+            ), 'crash sample file')
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['crash-with-sample.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'crash-with-sample.html']
         self.assertEqual(test_results['artifacts']['sample_file'], [
             'layout-test-results/failures/unexpected/crash-with-sample-sample.txt',
-            'layout-test-results/retry_1/failures/unexpected/crash-with-sample-sample.txt'])
+            'layout-test-results/retry_1/failures/unexpected/crash-with-sample-sample.txt'
+        ])
 
     @unittest.skip('Need to make subprocesses use mock filesystem')
     def test_crash_sample_file_is_saved_multiple_jobs(self):
         host = MockHost()
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/unexpected/crash-with-sample.html',
-             'passes/image.html', '--num-retries', '1', '-j', '2'],
-            tests_included=True, host=host))
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural',
+                'failures/unexpected/crash-with-sample.html',
+                'passes/image.html', '--num-retries', '1', '-j', '2'
+            ],
+                        tests_included=True,
+                        host=host))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['crash-with-sample.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'crash-with-sample.html']
         self.assertEqual(test_results['artifacts']['sample_file'], [
             'layout-test-results/failures/unexpected/crash-with-sample-sample.txt',
-            'layout-test-results/retry_1/failures/unexpected/crash-with-sample-sample.txt'])
+            'layout-test-results/retry_1/failures/unexpected/crash-with-sample-sample.txt'
+        ])
 
     def test_reftest_crash_log_is_saved(self):
         host = MockHost()
-        self.assertTrue(logging_run(
-            ['--order', 'natural', 'failures/unexpected/crash-reftest.html', '--num-retries', '1'],
-            tests_included=True, host=host))
+        self.assertTrue(
+            logging_run([
+                '--order', 'natural', 'failures/unexpected/crash-reftest.html',
+                '--num-retries', '1'
+            ],
+                        tests_included=True,
+                        host=host))
         self.assertEqual(
             host.filesystem.read_text_file(
-                '/tmp/layout-test-results/failures/unexpected/crash-reftest-crash-log.txt'),
-            'reftest crash log')
+                '/tmp/layout-test-results/failures/unexpected/crash-reftest-crash-log.txt'
+            ), 'reftest crash log')
         self.assertEqual(
             host.filesystem.read_text_file(
-                '/tmp/layout-test-results/retry_1/failures/unexpected/crash-reftest-crash-log.txt'),
-            'reftest crash log')
+                '/tmp/layout-test-results/retry_1/failures/unexpected/crash-reftest-crash-log.txt'
+            ), 'reftest crash log')
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['crash-reftest.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'crash-reftest.html']
         self.assertEqual(test_results['artifacts']['crash_log'], [
             'layout-test-results/failures/unexpected/crash-reftest-crash-log.txt',
-            'layout-test-results/retry_1/failures/unexpected/crash-reftest-crash-log.txt'])
+            'layout-test-results/retry_1/failures/unexpected/crash-reftest-crash-log.txt'
+        ])
 
     def test_test_list(self):
         host = MockHost()
@@ -716,75 +901,112 @@
         tests_run = get_tests_run(['--test-list=%s' % filename], host=host)
         self.assertEqual(['passes/text.html'], tests_run)
         host.filesystem.remove(filename)
-        details, err, _ = logging_run(['--test-list=%s' % filename], tests_included=True, host=host)
+        details, err, _ = logging_run(['--test-list=%s' % filename],
+                                      tests_included=True,
+                                      host=host)
         self.assertEqual(details.exit_code, exit_codes.NO_TESTS_EXIT_STATUS)
         self.assert_not_empty(err)
 
     def test_test_list_with_prefix(self):
         host = MockHost()
         filename = '/tmp/foo.txt'
-        host.filesystem.write_text_file(filename, WEB_TESTS_LAST_COMPONENT + '/passes/text.html')
+        host.filesystem.write_text_file(
+            filename, WEB_TESTS_LAST_COMPONENT + '/passes/text.html')
         tests_run = get_tests_run(['--test-list=%s' % filename], host=host)
         self.assertEqual(['passes/text.html'], tests_run)
 
     def test_isolated_script_test_filter(self):
         host = MockHost()
-        tests_run = get_tests_run(
-            ['--isolated-script-test-filter=passes/text.html::passes/image.html', 'passes/error.html'],
-            host=host
-        )
+        tests_run = get_tests_run([
+            '--isolated-script-test-filter=passes/text.html::passes/image.html',
+            'passes/error.html'
+        ],
+                                  host=host)
         self.assertEqual(sorted(tests_run), [])
 
-        tests_run = get_tests_run(
-            ['--isolated-script-test-filter=passes/error.html::passes/image.html', 'passes/error.html'],
-            host=host
-        )
+        tests_run = get_tests_run([
+            '--isolated-script-test-filter=passes/error.html::passes/image.html',
+            'passes/error.html'
+        ],
+                                  host=host)
         self.assertEqual(sorted(tests_run), ['passes/error.html'])
 
-        tests_run = get_tests_run(
-            ['--isolated-script-test-filter=-passes/error.html::passes/image.html'],
-            host=host
-        )
+        tests_run = get_tests_run([
+            '--isolated-script-test-filter=-passes/error.html::passes/image.html'
+        ],
+                                  host=host)
         self.assertEqual(sorted(tests_run), ['passes/image.html'])
 
-        tests_run = get_tests_run(
-            ['--isolated-script-test-filter=passes/error.html::passes/image.html',
-             '--isolated-script-test-filter=-passes/error.html'],
-            host=host
-        )
+        tests_run = get_tests_run([
+            '--isolated-script-test-filter=passes/error.html::passes/image.html',
+            '--isolated-script-test-filter=-passes/error.html'
+        ],
+                                  host=host)
         self.assertEqual(sorted(tests_run), ['passes/image.html'])
 
     def test_gtest_filter(self):
         host = MockHost()
-        tests_run = get_tests_run(['--gtest_filter=passes/text.html:passes/image.html', 'passes/error.html'], host=host)
-        self.assertEqual(sorted(tests_run), ['passes/error.html', 'passes/image.html', 'passes/text.html'])
+        tests_run = get_tests_run([
+            '--gtest_filter=passes/text.html:passes/image.html',
+            'passes/error.html'
+        ],
+                                  host=host)
+        self.assertEqual(
+            sorted(tests_run),
+            ['passes/error.html', 'passes/image.html', 'passes/text.html'])
 
     def test_sharding_even(self):
         # Test that we actually select the right part
-        tests_to_run = ['passes/error.html', 'passes/image.html', 'passes/platform_image.html', 'passes/text.html']
+        tests_to_run = [
+            'passes/error.html', 'passes/image.html',
+            'passes/platform_image.html', 'passes/text.html'
+        ]
 
         with mock.patch('__builtin__.hash', len):
             # Shard 0 of 2
-            tests_run = get_tests_run(['--shard-index', '0', '--total-shards', '2', '--order', 'natural'] + tests_to_run)
-            self.assertEqual(tests_run, ['passes/platform_image.html', 'passes/text.html'])
+            tests_run = get_tests_run([
+                '--shard-index', '0', '--total-shards', '2', '--order',
+                'natural'
+            ] + tests_to_run)
+            self.assertEqual(
+                tests_run, ['passes/platform_image.html', 'passes/text.html'])
             # Shard 1 of 2
-            tests_run = get_tests_run(['--shard-index', '1', '--total-shards', '2', '--order', 'natural'] + tests_to_run)
-            self.assertEqual(tests_run, ['passes/error.html', 'passes/image.html'])
+            tests_run = get_tests_run([
+                '--shard-index', '1', '--total-shards', '2', '--order',
+                'natural'
+            ] + tests_to_run)
+            self.assertEqual(tests_run,
+                             ['passes/error.html', 'passes/image.html'])
 
     def test_sharding_uneven(self):
-        tests_to_run = ['passes/error.html', 'passes/image.html', 'passes/platform_image.html', 'passes/text.html',
-                        'perf/foo/test.html']
+        tests_to_run = [
+            'passes/error.html', 'passes/image.html',
+            'passes/platform_image.html', 'passes/text.html',
+            'perf/foo/test.html'
+        ]
 
         with mock.patch('__builtin__.hash', len):
             # Shard 0 of 3
-            tests_run = get_tests_run(['--shard-index', '0', '--total-shards', '3', '--order', 'natural'] + tests_to_run)
+            tests_run = get_tests_run([
+                '--shard-index', '0', '--total-shards', '3', '--order',
+                'natural'
+            ] + tests_to_run)
             self.assertEqual(tests_run, ['perf/foo/test.html'])
             # Shard 1 of 3
-            tests_run = get_tests_run(['--shard-index', '1', '--total-shards', '3', '--order', 'natural'] + tests_to_run)
+            tests_run = get_tests_run([
+                '--shard-index', '1', '--total-shards', '3', '--order',
+                'natural'
+            ] + tests_to_run)
             self.assertEqual(tests_run, ['passes/text.html'])
             # Shard 2 of 3
-            tests_run = get_tests_run(['--shard-index', '2', '--total-shards', '3', '--order', 'natural'] + tests_to_run)
-            self.assertEqual(tests_run, ['passes/error.html', 'passes/image.html', 'passes/platform_image.html'])
+            tests_run = get_tests_run([
+                '--shard-index', '2', '--total-shards', '3', '--order',
+                'natural'
+            ] + tests_to_run)
+            self.assertEqual(tests_run, [
+                'passes/error.html', 'passes/image.html',
+                'passes/platform_image.html'
+            ])
 
     def test_sharding_incorrect_arguments(self):
         with self.assertRaises(ValueError):
@@ -795,35 +1017,47 @@
             get_tests_run(['--shard-index', '3', '--total-shards', '3'])
 
     def test_sharding_environ(self):
-        tests_to_run = ['passes/error.html', 'passes/image.html', 'passes/platform_image.html', 'passes/text.html']
+        tests_to_run = [
+            'passes/error.html', 'passes/image.html',
+            'passes/platform_image.html', 'passes/text.html'
+        ]
         host = MockHost()
 
         with mock.patch('__builtin__.hash', len):
             host.environ['GTEST_SHARD_INDEX'] = '0'
             host.environ['GTEST_TOTAL_SHARDS'] = '2'
-            shard_0_tests_run = get_tests_run(['--order', 'natural'] + tests_to_run, host=host)
-            self.assertEqual(shard_0_tests_run, ['passes/platform_image.html', 'passes/text.html'])
+            shard_0_tests_run = get_tests_run(
+                ['--order', 'natural'] + tests_to_run, host=host)
+            self.assertEqual(
+                shard_0_tests_run,
+                ['passes/platform_image.html', 'passes/text.html'])
 
             host.environ['GTEST_SHARD_INDEX'] = '1'
             host.environ['GTEST_TOTAL_SHARDS'] = '2'
-            shard_1_tests_run = get_tests_run(['--order', 'natural'] + tests_to_run, host=host)
-            self.assertEqual(shard_1_tests_run, ['passes/error.html', 'passes/image.html'])
+            shard_1_tests_run = get_tests_run(
+                ['--order', 'natural'] + tests_to_run, host=host)
+            self.assertEqual(shard_1_tests_run,
+                             ['passes/error.html', 'passes/image.html'])
 
     def test_smoke_test(self):
         host = MockHost()
         smoke_test_filename = test.WEB_TEST_DIR + '/SmokeTests'
-        host.filesystem.write_text_file(smoke_test_filename, 'passes/text.html\n')
+        host.filesystem.write_text_file(smoke_test_filename,
+                                        'passes/text.html\n')
 
         # Test the default smoke testing.
         tests_run = get_tests_run(['--smoke', '--order', 'natural'], host=host)
         self.assertEqual(['passes/text.html'], tests_run)
 
         # Test running the smoke tests plus some manually-specified tests.
-        tests_run = get_tests_run(['--smoke', 'passes/image.html', '--order', 'natural'], host=host)
+        tests_run = get_tests_run(
+            ['--smoke', 'passes/image.html', '--order', 'natural'], host=host)
         self.assertEqual(['passes/image.html', 'passes/text.html'], tests_run)
 
         # Test running the smoke tests plus some manually-specified tests.
-        tests_run = get_tests_run(['--no-smoke', 'passes/image.html', '--order', 'natural'], host=host)
+        tests_run = get_tests_run(
+            ['--no-smoke', 'passes/image.html', '--order', 'natural'],
+            host=host)
         self.assertEqual(['passes/image.html'], tests_run)
 
         # Test that we don't run just the smoke tests by default on a normal test port.
@@ -833,48 +1067,60 @@
         # Create a port that does run only the smoke tests by default, and verify that works as expected.
         port_obj = host.port_factory.get('test')
         port_obj.default_smoke_test_only = lambda: True
-        tests_run = get_tests_run(['--order', 'natural'], host=host, port_obj=port_obj)
+        tests_run = get_tests_run(['--order', 'natural'],
+                                  host=host,
+                                  port_obj=port_obj)
         self.assertEqual(['passes/text.html'], tests_run)
 
         # Verify that --no-smoke continues to work on a smoke-by-default port.
-        tests_run = get_tests_run(['--no-smoke', 'passes/image.html', '--order', 'natural'],
-                                  host=host, port_obj=port_obj)
+        tests_run = get_tests_run(
+            ['--no-smoke', 'passes/image.html', '--order', 'natural'],
+            host=host,
+            port_obj=port_obj)
         self.assertNotIn('passes/text.html', tests_run)
 
     def test_smoke_test_default_retry(self):
         host = MockHost()
         smoke_test_filename = test.WEB_TEST_DIR + '/SmokeTests'
         host.filesystem.write_text_file(
-            smoke_test_filename, 'failures/unexpected/text-image-checksum.html\n')
+            smoke_test_filename,
+            'failures/unexpected/text-image-checksum.html\n')
 
         # Retry if additional tests are given.
-        _, err, __ = logging_run(['--smoke', 'passes/image.html'], host=host, tests_included=True)
+        _, err, __ = logging_run(['--smoke', 'passes/image.html'],
+                                 host=host,
+                                 tests_included=True)
         self.assertIn('Retrying', err.getvalue())
 
     def test_missing_and_unexpected_results(self):
         # Test that we update expectations in place. If the expectation
         # is missing, update the expected generic location.
         host = MockHost()
-        details, _, _ = logging_run(['--no-show-results',
-                                     'failures/unexpected/missing_text.html',
-                                     'failures/unexpected/text-image-checksum.html'],
-                                    tests_included=True, host=host)
+        details, _, _ = logging_run([
+            '--no-show-results', 'failures/unexpected/missing_text.html',
+            'failures/unexpected/text-image-checksum.html'
+        ],
+                                    tests_included=True,
+                                    host=host)
         self.assertEqual(details.exit_code, 2)
-        results = json.loads(host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        results['tests']['failures']['unexpected']['text-image-checksum.html'].pop('artifacts')
+        results = json.loads(
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        results['tests']['failures']['unexpected'][
+            'text-image-checksum.html'].pop('artifacts')
         self.assertEqual(
-            results['tests']['failures']['unexpected']['text-image-checksum.html'],
-            {
+            results['tests']['failures']['unexpected']
+            ['text-image-checksum.html'], {
                 'expected': 'PASS',
                 'actual': 'FAIL',
                 'is_unexpected': True,
                 'is_regression': True,
                 'text_mismatch': 'general text mismatch',
             })
-        results['tests']['failures']['unexpected']['missing_text.html'].pop('artifacts')
+        results['tests']['failures']['unexpected']['missing_text.html'].pop(
+            'artifacts')
         self.assertEqual(
-            results['tests']['failures']['unexpected']['missing_text.html'],
-            {
+            results['tests']['failures']['unexpected']['missing_text.html'], {
                 'expected': 'PASS',
                 'actual': 'FAIL',
                 'is_unexpected': True,
@@ -890,93 +1136,134 @@
         # initial failure for simplicity and consistency w/ the flakiness
         # dashboard, even if the second failure is worse.
 
-        details, _, _ = logging_run(['--num-retries=3', 'failures/unexpected/text_then_crash.html'], tests_included=True)
+        details, _, _ = logging_run(
+            ['--num-retries=3', 'failures/unexpected/text_then_crash.html'],
+            tests_included=True)
         self.assertEqual(details.exit_code, 1)
-        self.assertEqual(details.summarized_failing_results['tests']['failures']['unexpected']['text_then_crash.html']['actual'],
-                         'FAIL CRASH CRASH CRASH')
+        self.assertEqual(
+            details.summarized_failing_results['tests']['failures']
+            ['unexpected']['text_then_crash.html']['actual'],
+            'FAIL CRASH CRASH CRASH')
 
         # If we get a test that fails two different ways -- but the second one is expected --
         # we should treat it as a flaky result and report the initial unexpected failure type
         # to the dashboard. However, the test should be considered passing.
-        details, _, _ = logging_run(['--num-retries=3', 'failures/expected/crash_then_text.html'], tests_included=True)
+        details, _, _ = logging_run(
+            ['--num-retries=3', 'failures/expected/crash_then_text.html'],
+            tests_included=True)
         self.assertEqual(details.exit_code, 0)
-        self.assertEqual(details.summarized_failing_results['tests']['failures']['expected']['crash_then_text.html']['actual'],
-                         'CRASH FAIL')
+        self.assertEqual(
+            details.summarized_failing_results['tests']['failures']['expected']
+            ['crash_then_text.html']['actual'], 'CRASH FAIL')
 
     def test_watch(self):
         host = MockHost()
         host.user.set_canned_responses(['r', 'r', 'q'])
-        _, output, _ = logging_run(['--watch', 'failures/unexpected/text.html'], tests_included=True, host=host)
+        _, output, _ = logging_run(
+            ['--watch', 'failures/unexpected/text.html'],
+            tests_included=True,
+            host=host)
         output_string = output.getvalue()
         self.assertIn(
-            'Link to pretty diff:\nfile:///tmp/layout-test-results/failures/unexpected/text-pretty-diff.html', output_string)
-        self.assertEqual(output_string.count('[1/1] failures/unexpected/text.html failed unexpectedly (text diff)'), 3)
+            'Link to pretty diff:\nfile:///tmp/layout-test-results/failures/unexpected/text-pretty-diff.html',
+            output_string)
+        self.assertEqual(
+            output_string.count(
+                '[1/1] failures/unexpected/text.html failed unexpectedly (text diff)'
+            ), 3)
 
     def test_crash_with_stderr(self):
         host = MockHost()
-        logging_run(['failures/unexpected/crash-with-stderr.html'], tests_included=True, host=host)
-        full_results = json.loads(host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        self.assertEqual(full_results['tests']['failures']['unexpected']['crash-with-stderr.html']['has_stderr'], True)
+        logging_run(['failures/unexpected/crash-with-stderr.html'],
+                    tests_included=True,
+                    host=host)
+        full_results = json.loads(
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        self.assertEqual(
+            full_results['tests']['failures']['unexpected']
+            ['crash-with-stderr.html']['has_stderr'], True)
 
     def test_no_image_failure_with_image_diff(self):
         host = MockHost()
-        logging_run(
-            ['failures/unexpected/checksum-with-matching-image.html'], tests_included=True, host=host)
-        self.assertTrue(host.filesystem.read_text_file(
-            '/tmp/layout-test-results/full_results.json').find('"num_regressions":0') != -1)
+        logging_run(['failures/unexpected/checksum-with-matching-image.html'],
+                    tests_included=True,
+                    host=host)
+        self.assertTrue(
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json').find(
+                    '"num_regressions":0') != -1)
 
     def test_exit_after_n_failures_upload(self):
         host = MockHost()
-        details, regular_output, _ = logging_run(
-            ['failures/unexpected/text-image-checksum.html', 'passes/text.html',
-             '--exit-after-n-failures', '1', '--order', 'natural'],
-            tests_included=True, host=host)
+        details, regular_output, _ = logging_run([
+            'failures/unexpected/text-image-checksum.html', 'passes/text.html',
+            '--exit-after-n-failures', '1', '--order', 'natural'
+        ],
+                                                 tests_included=True,
+                                                 host=host)
 
         # By returning False, we know that the incremental results were generated and then deleted.
-        self.assertFalse(host.filesystem.exists('/tmp/layout-test-results/incremental_results.json'))
+        self.assertFalse(
+            host.filesystem.exists(
+                '/tmp/layout-test-results/incremental_results.json'))
 
         self.assertEqual(details.exit_code, exit_codes.EARLY_EXIT_STATUS)
 
         # This checks that passes/text.html is considered Skip-ped.
-        self.assertIn('"skipped":1', host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+        self.assertIn(
+            '"skipped":1',
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
 
         # This checks that we told the user we bailed out.
-        self.assertTrue('Exiting early after 1 failures. 1 tests run.\n' in regular_output.getvalue())
+        self.assertTrue('Exiting early after 1 failures. 1 tests run.\n' in
+                        regular_output.getvalue())
 
         # This checks that neither test ran as expected.
         # FIXME: This log message is confusing; tests that were skipped should be called out separately.
-        self.assertTrue('0 tests ran as expected, 2 didn\'t:\n' in regular_output.getvalue())
+        self.assertTrue('0 tests ran as expected, 2 didn\'t:\n' in
+                        regular_output.getvalue())
 
     def test_exit_after_n_failures(self):
         # Unexpected failures should result in tests stopping.
-        tests_run = get_tests_run(['failures/unexpected/text-image-checksum.html',
-                                   'passes/text.html', '--exit-after-n-failures', '1',
-                                   '--order', 'natural'])
-        self.assertEqual(['failures/unexpected/text-image-checksum.html'], tests_run)
+        tests_run = get_tests_run([
+            'failures/unexpected/text-image-checksum.html', 'passes/text.html',
+            '--exit-after-n-failures', '1', '--order', 'natural'
+        ])
+        self.assertEqual(['failures/unexpected/text-image-checksum.html'],
+                         tests_run)
 
         # But we'll keep going for expected ones.
-        tests_run = get_tests_run(['failures/expected/text.html', 'passes/text.html',
-                                   '--exit-after-n-failures', '1',
-                                   '--order', 'natural'])
-        self.assertEqual(['failures/expected/text.html', 'passes/text.html'], tests_run)
+        tests_run = get_tests_run([
+            'failures/expected/text.html', 'passes/text.html',
+            '--exit-after-n-failures', '1', '--order', 'natural'
+        ])
+        self.assertEqual(['failures/expected/text.html', 'passes/text.html'],
+                         tests_run)
 
     def test_exit_after_n_crashes(self):
         # Unexpected crashes should result in tests stopping.
-        tests_run = get_tests_run(['--order', 'natural', 'failures/unexpected/crash.html',
-                                   'passes/text.html', '--exit-after-n-crashes-or-timeouts', '1'])
+        tests_run = get_tests_run([
+            '--order', 'natural', 'failures/unexpected/crash.html',
+            'passes/text.html', '--exit-after-n-crashes-or-timeouts', '1'
+        ])
         self.assertEqual(['failures/unexpected/crash.html'], tests_run)
 
         # Same with timeouts.
-        tests_run = get_tests_run(['failures/unexpected/timeout.html', 'passes/text.html',
-                                   '--exit-after-n-crashes-or-timeouts', '1',
-                                   '--order', 'natural'])
+        tests_run = get_tests_run([
+            'failures/unexpected/timeout.html', 'passes/text.html',
+            '--exit-after-n-crashes-or-timeouts', '1', '--order', 'natural'
+        ])
         self.assertEqual(['failures/unexpected/timeout.html'], tests_run)
 
         # But we'll keep going for expected ones.
-        tests_run = get_tests_run(['failures/expected/crash.html', 'passes/text.html',
-                                   '--exit-after-n-crashes-or-timeouts', '1',
-                                   '--order', 'natural'])
-        self.assertEqual(['failures/expected/crash.html', 'passes/text.html'], tests_run)
+        tests_run = get_tests_run([
+            'failures/expected/crash.html', 'passes/text.html',
+            '--exit-after-n-crashes-or-timeouts', '1', '--order', 'natural'
+        ])
+        self.assertEqual(['failures/expected/crash.html', 'passes/text.html'],
+                         tests_run)
 
     def test_results_directory_absolute(self):
         # We run a configuration that should fail, to generate output, then
@@ -984,10 +1271,16 @@
 
         host = MockHost()
         with host.filesystem.mkdtemp() as tmpdir:
-            _, _, user = logging_run(['--results-directory=' + str(tmpdir), '--order', 'natural'],
-                                     tests_included=True, host=host)
-            self.assertEqual(user.opened_urls, [abspath_to_uri(host.platform, host.filesystem.join(
-                tmpdir, 'layout-test-results', 'results.html'))])
+            _, _, user = logging_run(
+                ['--results-directory=' + str(tmpdir), '--order', 'natural'],
+                tests_included=True,
+                host=host)
+            self.assertEqual(user.opened_urls, [
+                abspath_to_uri(
+                    host.platform,
+                    host.filesystem.join(tmpdir, 'layout-test-results',
+                                         'results.html'))
+            ])
 
     def test_results_directory_default(self):
         # We run a configuration that should fail, to generate output, then
@@ -995,7 +1288,10 @@
 
         # This is the default location.
         _, _, user = logging_run(tests_included=True)
-        self.assertEqual(user.opened_urls, [abspath_to_uri(MockHost().platform, '/tmp/layout-test-results/results.html')])
+        self.assertEqual(user.opened_urls, [
+            abspath_to_uri(MockHost().platform,
+                           '/tmp/layout-test-results/results.html')
+        ])
 
     def test_results_directory_relative(self):
         # We run a configuration that should fail, to generate output, then
@@ -1003,57 +1299,98 @@
         host = MockHost()
         host.filesystem.maybe_make_directory('/tmp/cwd')
         host.filesystem.chdir('/tmp/cwd')
-        _, _, user = logging_run(['--results-directory=foo'], tests_included=True, host=host)
-        self.assertEqual(user.opened_urls, [abspath_to_uri(host.platform, '/tmp/cwd/foo/layout-test-results/results.html')])
+        _, _, user = logging_run(['--results-directory=foo'],
+                                 tests_included=True,
+                                 host=host)
+        self.assertEqual(user.opened_urls, [
+            abspath_to_uri(host.platform,
+                           '/tmp/cwd/foo/layout-test-results/results.html')
+        ])
 
     def test_retrying_default_value(self):
         # Do not retry when the test list is explicit.
         host = MockHost()
-        details, err, _ = logging_run(['failures/unexpected/text-image-checksum.html'], tests_included=True, host=host)
+        details, err, _ = logging_run(
+            ['failures/unexpected/text-image-checksum.html'],
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         self.assertNotIn('Retrying', err.getvalue())
 
         # Retry 3 times by default when the test list is not explicit.
         host = MockHost()
-        details, err, _ = logging_run(['failures/unexpected'], tests_included=True, host=host)
-        self.assertEqual(details.exit_code, test.UNEXPECTED_NON_VIRTUAL_FAILURES)
+        details, err, _ = logging_run(['failures/unexpected'],
+                                      tests_included=True,
+                                      host=host)
+        self.assertEqual(details.exit_code,
+                         test.UNEXPECTED_NON_VIRTUAL_FAILURES)
         self.assertIn('Retrying', err.getvalue())
         self.assertTrue(
-            host.filesystem.exists('/tmp/layout-test-results/retry_1/failures/unexpected/text-image-checksum-actual.txt'))
+            host.filesystem.exists(
+                '/tmp/layout-test-results/retry_1/failures/unexpected/text-image-checksum-actual.txt'
+            ))
         self.assertTrue(
-            host.filesystem.exists('/tmp/layout-test-results/retry_2/failures/unexpected/text-image-checksum-actual.txt'))
+            host.filesystem.exists(
+                '/tmp/layout-test-results/retry_2/failures/unexpected/text-image-checksum-actual.txt'
+            ))
         self.assertTrue(
-            host.filesystem.exists('/tmp/layout-test-results/retry_3/failures/unexpected/text-image-checksum-actual.txt'))
+            host.filesystem.exists(
+                '/tmp/layout-test-results/retry_3/failures/unexpected/text-image-checksum-actual.txt'
+            ))
 
     def test_retrying_default_value_test_list(self):
         host = MockHost()
         filename = '/tmp/foo.txt'
-        host.filesystem.write_text_file(filename, 'failures/unexpected/text-image-checksum.html\nfailures/unexpected/crash.html')
-        details, err, _ = logging_run(['--test-list=%s' % filename, '--order', 'natural'],
-                                      tests_included=True, host=host)
+        host.filesystem.write_text_file(
+            filename,
+            'failures/unexpected/text-image-checksum.html\nfailures/unexpected/crash.html'
+        )
+        details, err, _ = logging_run(
+            ['--test-list=%s' % filename, '--order', 'natural'],
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 2)
         self.assertIn('Retrying', err.getvalue())
 
         host = MockHost()
         filename = '/tmp/foo.txt'
         host.filesystem.write_text_file(filename, 'failures')
-        details, err, _ = logging_run(['--test-list=%s' % filename], tests_included=True, host=host)
-        self.assertEqual(details.exit_code, test.UNEXPECTED_NON_VIRTUAL_FAILURES)
+        details, err, _ = logging_run(['--test-list=%s' % filename],
+                                      tests_included=True,
+                                      host=host)
+        self.assertEqual(details.exit_code,
+                         test.UNEXPECTED_NON_VIRTUAL_FAILURES)
         self.assertIn('Retrying', err.getvalue())
 
     def test_retrying_and_flaky_tests(self):
         host = MockHost()
-        details, err, _ = logging_run(['--num-retries=3', 'failures/flaky'], tests_included=True, host=host)
+        details, err, _ = logging_run(['--num-retries=3', 'failures/flaky'],
+                                      tests_included=True,
+                                      host=host)
         self.assertEqual(details.exit_code, 0)
         self.assertIn('Retrying', err.getvalue())
-        self.assertTrue(host.filesystem.exists('/tmp/layout-test-results/failures/flaky/text-actual.txt'))
-        self.assertFalse(host.filesystem.exists('/tmp/layout-test-results/retry_1/failures/flaky/text-actual.txt'))
-        self.assertFalse(host.filesystem.exists('/tmp/layout-test-results/retry_2/failures/flaky/text-actual.txt'))
-        self.assertFalse(host.filesystem.exists('/tmp/layout-test-results/retry_3/failures/flaky/text-actual.txt'))
+        self.assertTrue(
+            host.filesystem.exists(
+                '/tmp/layout-test-results/failures/flaky/text-actual.txt'))
+        self.assertFalse(
+            host.filesystem.exists(
+                '/tmp/layout-test-results/retry_1/failures/flaky/text-actual.txt'
+            ))
+        self.assertFalse(
+            host.filesystem.exists(
+                '/tmp/layout-test-results/retry_2/failures/flaky/text-actual.txt'
+            ))
+        self.assertFalse(
+            host.filesystem.exists(
+                '/tmp/layout-test-results/retry_3/failures/flaky/text-actual.txt'
+            ))
 
     def test_retrying_crashed_tests(self):
         host = MockHost()
-        details, err, _ = logging_run(['--num-retries=3', 'failures/unexpected/crash.html'], tests_included=True, host=host)
+        details, err, _ = logging_run(
+            ['--num-retries=3', 'failures/unexpected/crash.html'],
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         self.assertIn('Retrying', err.getvalue())
 
@@ -1061,159 +1398,206 @@
         host = MockHost()
         details, err, _ = logging_run(
             ['--num-retries=1', 'failures/unexpected/leak.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         self.assertIn('Retrying', err.getvalue())
-        self.assertEqual(host.filesystem.read_text_file(
-            '/tmp/layout-test-results/failures/unexpected/leak-leak-log.txt'),
-            'leak detected')
+        self.assertEqual(
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/failures/unexpected/leak-leak-log.txt'
+            ), 'leak detected')
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
         test_results = results['tests']['failures']['unexpected']['leak.html']
         self.assertEqual(test_results['artifacts']['leak_log'], [
             'layout-test-results/failures/unexpected/leak-leak-log.txt',
-            'layout-test-results/retry_1/failures/unexpected/leak-leak-log.txt'])
+            'layout-test-results/retry_1/failures/unexpected/leak-leak-log.txt'
+        ])
 
     def test_unexpected_text_mismatch(self):
         host = MockHost()
-        details, _, _ = logging_run(
-            ['--num-retries=1', 'failures/unexpected/text-mismatch-overlay.html'],
-            tests_included=True, host=host)
+        details, _, _ = logging_run([
+            '--num-retries=1', 'failures/unexpected/text-mismatch-overlay.html'
+        ],
+                                    tests_included=True,
+                                    host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['text-mismatch-overlay.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'text-mismatch-overlay.html']
         self.assertEqual(test_results['artifacts']['actual_text'], [
             'layout-test-results/failures/unexpected/text-mismatch-overlay-actual.txt',
-            'layout-test-results/retry_1/failures/unexpected/text-mismatch-overlay-actual.txt'])
+            'layout-test-results/retry_1/failures/unexpected/text-mismatch-overlay-actual.txt'
+        ])
         self.assertEqual(test_results['artifacts']['expected_text'], [
             'layout-test-results/failures/unexpected/text-mismatch-overlay-expected.txt',
-            'layout-test-results/retry_1/failures/unexpected/text-mismatch-overlay-expected.txt'])
+            'layout-test-results/retry_1/failures/unexpected/text-mismatch-overlay-expected.txt'
+        ])
         self.assertEqual(test_results['artifacts']['text_diff'], [
             'layout-test-results/failures/unexpected/text-mismatch-overlay-diff.txt',
-            'layout-test-results/retry_1/failures/unexpected/text-mismatch-overlay-diff.txt'])
+            'layout-test-results/retry_1/failures/unexpected/text-mismatch-overlay-diff.txt'
+        ])
         self.assertEqual(test_results['artifacts']['pretty_text_diff'], [
             'layout-test-results/failures/unexpected/text-mismatch-overlay-pretty-diff.html',
-            'layout-test-results/retry_1/failures/unexpected/text-mismatch-overlay-pretty-diff.html'])
+            'layout-test-results/retry_1/failures/unexpected/text-mismatch-overlay-pretty-diff.html'
+        ])
         self.assertEqual(test_results['artifacts']['overlay'], [
             'layout-test-results/failures/unexpected/text-mismatch-overlay-overlay.html',
-            'layout-test-results/retry_1/failures/unexpected/text-mismatch-overlay-overlay.html'])
+            'layout-test-results/retry_1/failures/unexpected/text-mismatch-overlay-overlay.html'
+        ])
 
     def test_unexpected_no_text_baseline(self):
         host = MockHost()
         details, _, _ = logging_run(
             ['--num-retries=1', 'failures/unexpected/no-text-baseline.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['no-text-baseline.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'no-text-baseline.html']
         self.assertEqual(test_results['artifacts']['actual_text'], [
             'layout-test-results/failures/unexpected/no-text-baseline-actual.txt',
-            'layout-test-results/retry_1/failures/unexpected/no-text-baseline-actual.txt'])
+            'layout-test-results/retry_1/failures/unexpected/no-text-baseline-actual.txt'
+        ])
         self.assertNotIn('expected_text', test_results['artifacts'])
         self.assertEqual(test_results['artifacts']['text_diff'], [
             'layout-test-results/failures/unexpected/no-text-baseline-diff.txt',
-            'layout-test-results/retry_1/failures/unexpected/no-text-baseline-diff.txt'])
+            'layout-test-results/retry_1/failures/unexpected/no-text-baseline-diff.txt'
+        ])
         self.assertEqual(test_results['artifacts']['pretty_text_diff'], [
             'layout-test-results/failures/unexpected/no-text-baseline-pretty-diff.html',
-            'layout-test-results/retry_1/failures/unexpected/no-text-baseline-pretty-diff.html'])
+            'layout-test-results/retry_1/failures/unexpected/no-text-baseline-pretty-diff.html'
+        ])
         self.assertNotIn('overlay', test_results['artifacts'])
 
     def test_unexpected_no_text_generated(self):
         host = MockHost()
         details, _, _ = logging_run(
             ['--num-retries=1', 'failures/unexpected/no-text-generated.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['no-text-generated.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'no-text-generated.html']
         self.assertEqual(test_results['artifacts']['expected_text'], [
             'layout-test-results/failures/unexpected/no-text-generated-expected.txt',
-            'layout-test-results/retry_1/failures/unexpected/no-text-generated-expected.txt'])
+            'layout-test-results/retry_1/failures/unexpected/no-text-generated-expected.txt'
+        ])
         self.assertNotIn('actual_text', test_results['artifacts'])
         self.assertEqual(test_results['artifacts']['text_diff'], [
             'layout-test-results/failures/unexpected/no-text-generated-diff.txt',
-            'layout-test-results/retry_1/failures/unexpected/no-text-generated-diff.txt'])
+            'layout-test-results/retry_1/failures/unexpected/no-text-generated-diff.txt'
+        ])
         self.assertEqual(test_results['artifacts']['pretty_text_diff'], [
             'layout-test-results/failures/unexpected/no-text-generated-pretty-diff.html',
-            'layout-test-results/retry_1/failures/unexpected/no-text-generated-pretty-diff.html'])
+            'layout-test-results/retry_1/failures/unexpected/no-text-generated-pretty-diff.html'
+        ])
         self.assertNotIn('overlay', test_results['artifacts'])
 
     def test_reftest_mismatching_image(self):
         host = MockHost()
         details, _, _ = logging_run(
             ['--num-retries=1', 'failures/unexpected/reftest.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['reftest.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'reftest.html']
         self.assertEqual(test_results['artifacts']['actual_image'], [
             'layout-test-results/failures/unexpected/reftest-actual.png',
-            'layout-test-results/retry_1/failures/unexpected/reftest-actual.png'])
+            'layout-test-results/retry_1/failures/unexpected/reftest-actual.png'
+        ])
         self.assertEqual(test_results['artifacts']['expected_image'], [
             'layout-test-results/failures/unexpected/reftest-expected.png',
-            'layout-test-results/retry_1/failures/unexpected/reftest-expected.png'])
+            'layout-test-results/retry_1/failures/unexpected/reftest-expected.png'
+        ])
         self.assertEqual(test_results['artifacts']['image_diff'], [
             'layout-test-results/failures/unexpected/reftest-diff.png',
-            'layout-test-results/retry_1/failures/unexpected/reftest-diff.png'])
+            'layout-test-results/retry_1/failures/unexpected/reftest-diff.png'
+        ])
         self.assertEqual(test_results['artifacts']['pretty_image_diff'], [
             'layout-test-results/failures/unexpected/reftest-diffs.html',
-            'layout-test-results/retry_1/failures/unexpected/reftest-diffs.html'])
-        self.assertEqual(test_results['artifacts']['reference_file_mismatch'],  [
+            'layout-test-results/retry_1/failures/unexpected/reftest-diffs.html'
+        ])
+        self.assertEqual(test_results['artifacts']['reference_file_mismatch'], [
             'layout-test-results/failures/unexpected/reftest-expected.html',
-            'layout-test-results/retry_1/failures/unexpected/reftest-expected.html'])
+            'layout-test-results/retry_1/failures/unexpected/reftest-expected.html'
+        ])
 
     def test_reftest_failure_matching_image(self):
         host = MockHost()
-        details, _, _ = logging_run(
-            ['failures/unexpected/mismatch.html'],
-            tests_included=True, host=host)
+        details, _, _ = logging_run(['failures/unexpected/mismatch.html'],
+                                    tests_included=True,
+                                    host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['mismatch.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'mismatch.html']
         self.assertIn('reference_file_match', test_results['artifacts'])
-        self.assertEqual(test_results['artifacts']['reference_file_match'],
-                         ['layout-test-results/failures/unexpected/mismatch-expected-mismatch.html'])
+        self.assertEqual(test_results['artifacts']['reference_file_match'], [
+            'layout-test-results/failures/unexpected/mismatch-expected-mismatch.html'
+        ])
 
     def test_unexpected_image_mismatch(self):
         host = MockHost()
         details, _, _ = logging_run(
             ['--num-retries=1', 'failures/unexpected/image-mismatch.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['image-mismatch.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'image-mismatch.html']
         self.assertEqual(test_results['artifacts']['actual_image'], [
             'layout-test-results/failures/unexpected/image-mismatch-actual.png',
-            'layout-test-results/retry_1/failures/unexpected/image-mismatch-actual.png'])
+            'layout-test-results/retry_1/failures/unexpected/image-mismatch-actual.png'
+        ])
         self.assertEqual(test_results['artifacts']['expected_image'], [
             'layout-test-results/failures/unexpected/image-mismatch-expected.png',
-            'layout-test-results/retry_1/failures/unexpected/image-mismatch-expected.png'])
+            'layout-test-results/retry_1/failures/unexpected/image-mismatch-expected.png'
+        ])
         self.assertEqual(test_results['artifacts']['image_diff'], [
             'layout-test-results/failures/unexpected/image-mismatch-diff.png',
-            'layout-test-results/retry_1/failures/unexpected/image-mismatch-diff.png'])
+            'layout-test-results/retry_1/failures/unexpected/image-mismatch-diff.png'
+        ])
         self.assertEqual(test_results['artifacts']['pretty_image_diff'], [
             'layout-test-results/failures/unexpected/image-mismatch-diffs.html',
-            'layout-test-results/retry_1/failures/unexpected/image-mismatch-diffs.html'])
+            'layout-test-results/retry_1/failures/unexpected/image-mismatch-diffs.html'
+        ])
 
     def test_unexpected_no_image_generated(self):
         host = MockHost()
         details, _, _ = logging_run(
             ['--num-retries=1', 'failures/unexpected/no-image-generated.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['no-image-generated.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'no-image-generated.html']
         self.assertNotIn('actual_image', test_results['artifacts'])
         self.assertEqual(test_results['artifacts']['expected_image'], [
             'layout-test-results/failures/unexpected/no-image-generated-expected.png',
-            'layout-test-results/retry_1/failures/unexpected/no-image-generated-expected.png'])
+            'layout-test-results/retry_1/failures/unexpected/no-image-generated-expected.png'
+        ])
         self.assertNotIn('image_diff', test_results['artifacts'])
         self.assertNotIn('pretty_image_diff', test_results['artifacts'])
 
@@ -1221,15 +1605,19 @@
         host = MockHost()
         details, _, _ = logging_run(
             ['--num-retries=1', 'failures/unexpected/no-image-baseline.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['no-image-baseline.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'no-image-baseline.html']
         self.assertNotIn('expected_image', test_results['artifacts'])
         self.assertEqual(test_results['artifacts']['actual_image'], [
             'layout-test-results/failures/unexpected/no-image-baseline-actual.png',
-            'layout-test-results/retry_1/failures/unexpected/no-image-baseline-actual.png'])
+            'layout-test-results/retry_1/failures/unexpected/no-image-baseline-actual.png'
+        ])
         self.assertNotIn('image_diff', test_results['artifacts'])
         self.assertNotIn('pretty_image_diff', test_results['artifacts'])
 
@@ -1237,107 +1625,157 @@
         host = MockHost()
         details, _, _ = logging_run(
             ['--num-retries=1', 'failures/unexpected/audio-mismatch.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['audio-mismatch.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'audio-mismatch.html']
         self.assertEqual(test_results['artifacts']['actual_audio'], [
             'layout-test-results/failures/unexpected/audio-mismatch-actual.wav',
-            'layout-test-results/retry_1/failures/unexpected/audio-mismatch-actual.wav'])
+            'layout-test-results/retry_1/failures/unexpected/audio-mismatch-actual.wav'
+        ])
         self.assertEqual(test_results['artifacts']['expected_audio'], [
             'layout-test-results/failures/unexpected/audio-mismatch-expected.wav',
-            'layout-test-results/retry_1/failures/unexpected/audio-mismatch-expected.wav'])
+            'layout-test-results/retry_1/failures/unexpected/audio-mismatch-expected.wav'
+        ])
 
     def test_unexpected_audio_missing_baseline(self):
         host = MockHost()
         details, _, _ = logging_run(
             ['--num-retries=1', 'failures/unexpected/no-audio-baseline.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['no-audio-baseline.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'no-audio-baseline.html']
         self.assertEqual(test_results['artifacts']['actual_audio'], [
             'layout-test-results/failures/unexpected/no-audio-baseline-actual.wav',
-            'layout-test-results/retry_1/failures/unexpected/no-audio-baseline-actual.wav'])
+            'layout-test-results/retry_1/failures/unexpected/no-audio-baseline-actual.wav'
+        ])
 
     def test_unexpected_no_audio_generated(self):
         host = MockHost()
         details, _, _ = logging_run(
             ['--num-retries=1', 'failures/unexpected/no-audio-generated.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 1)
         results = json.loads(
-            host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json'))
-        test_results = results['tests']['failures']['unexpected']['no-audio-generated.html']
+            host.filesystem.read_text_file(
+                '/tmp/layout-test-results/full_results.json'))
+        test_results = results['tests']['failures']['unexpected'][
+            'no-audio-generated.html']
         self.assertEqual(test_results['artifacts']['expected_audio'], [
             'layout-test-results/failures/unexpected/no-audio-generated-expected.wav',
-            'layout-test-results/retry_1/failures/unexpected/no-audio-generated-expected.wav'])
+            'layout-test-results/retry_1/failures/unexpected/no-audio-generated-expected.wav'
+        ])
 
     def test_retrying_uses_retry_directories(self):
         host = MockHost()
-        details, _, _ = logging_run(['--num-retries=3', 'failures/unexpected/text-image-checksum.html'],
-                                    tests_included=True, host=host)
+        details, _, _ = logging_run([
+            '--num-retries=3', 'failures/unexpected/text-image-checksum.html'
+        ],
+                                    tests_included=True,
+                                    host=host)
         self.assertEqual(details.exit_code, 1)
-        self.assertTrue(host.filesystem.exists('/tmp/layout-test-results/failures/unexpected/text-image-checksum-actual.txt'))
         self.assertTrue(
-            host.filesystem.exists('/tmp/layout-test-results/retry_1/failures/unexpected/text-image-checksum-actual.txt'))
+            host.filesystem.exists(
+                '/tmp/layout-test-results/failures/unexpected/text-image-checksum-actual.txt'
+            ))
         self.assertTrue(
-            host.filesystem.exists('/tmp/layout-test-results/retry_2/failures/unexpected/text-image-checksum-actual.txt'))
+            host.filesystem.exists(
+                '/tmp/layout-test-results/retry_1/failures/unexpected/text-image-checksum-actual.txt'
+            ))
         self.assertTrue(
-            host.filesystem.exists('/tmp/layout-test-results/retry_3/failures/unexpected/text-image-checksum-actual.txt'))
+            host.filesystem.exists(
+                '/tmp/layout-test-results/retry_2/failures/unexpected/text-image-checksum-actual.txt'
+            ))
+        self.assertTrue(
+            host.filesystem.exists(
+                '/tmp/layout-test-results/retry_3/failures/unexpected/text-image-checksum-actual.txt'
+            ))
 
     def test_retrying_alias_flag(self):
         host = MockHost()
-        _, err, __ = logging_run(['--test-launcher-retry-limit=3', 'failures/unexpected/crash.html'],
-                                 tests_included=True, host=host)
+        _, err, __ = logging_run([
+            '--test-launcher-retry-limit=3', 'failures/unexpected/crash.html'
+        ],
+                                 tests_included=True,
+                                 host=host)
         self.assertIn('Retrying', err.getvalue())
 
     def test_clobber_old_results(self):
         host = MockHost()
-        details, _, _ = logging_run(['--num-retries=3', 'failures/unexpected/text-image-checksum.html'],
-                                    tests_included=True, host=host)
+        details, _, _ = logging_run([
+            '--num-retries=3', 'failures/unexpected/text-image-checksum.html'
+        ],
+                                    tests_included=True,
+                                    host=host)
         # See tests above for what files exist at this point.
 
         # Now we test that --clobber-old-results does remove the old retries.
-        details, err, _ = logging_run(['--no-retry-failures', '--clobber-old-results',
-                                       'failures/unexpected/text-image-checksum.html'],
-                                      tests_included=True, host=host)
+        details, err, _ = logging_run([
+            '--no-retry-failures', '--clobber-old-results',
+            'failures/unexpected/text-image-checksum.html'
+        ],
+                                      tests_included=True,
+                                      host=host)
         self.assertEqual(details.exit_code, 1)
         self.assertTrue('Clobbering old results' in err.getvalue())
-        self.assertIn('failures/unexpected/text-image-checksum.html', err.getvalue())
-        self.assertTrue(host.filesystem.exists('/tmp/layout-test-results/failures/unexpected/text-image-checksum-actual.txt'))
-        self.assertFalse(host.filesystem.exists('/tmp/layout-test-results/retry_1'))
-        self.assertFalse(host.filesystem.exists('/tmp/layout-test-results/retry_2'))
-        self.assertFalse(host.filesystem.exists('/tmp/layout-test-results/retry_3'))
+        self.assertIn('failures/unexpected/text-image-checksum.html',
+                      err.getvalue())
+        self.assertTrue(
+            host.filesystem.exists(
+                '/tmp/layout-test-results/failures/unexpected/text-image-checksum-actual.txt'
+            ))
+        self.assertFalse(
+            host.filesystem.exists('/tmp/layout-test-results/retry_1'))
+        self.assertFalse(
+            host.filesystem.exists('/tmp/layout-test-results/retry_2'))
+        self.assertFalse(
+            host.filesystem.exists('/tmp/layout-test-results/retry_3'))
 
     def test_run_order__inline(self):
         # These next tests test that we run the tests in ascending alphabetical
         # order per directory. HTTP tests are sharded separately from other tests,
         # so we have to test both.
-        tests_run = get_tests_run(['--order', 'natural', '-i', 'passes/virtual_passes', 'passes'])
+        tests_run = get_tests_run(
+            ['--order', 'natural', '-i', 'passes/virtual_passes', 'passes'])
         self.assertEqual(tests_run, sorted(tests_run))
 
         tests_run = get_tests_run(['--order', 'natural', 'http/tests/passes'])
         self.assertEqual(tests_run, sorted(tests_run))
 
     def test_virtual(self):
-        self.assertTrue(passing_run(['--order', 'natural', 'passes/text.html', 'passes/args.html',
-                                     'virtual/passes/text.html', 'virtual/passes/args.html']))
+        self.assertTrue(
+            passing_run([
+                '--order', 'natural', 'passes/text.html', 'passes/args.html',
+                'virtual/passes/text.html', 'virtual/passes/args.html'
+            ]))
 
     def test_virtual_warns_when_wildcard_used(self):
-        virtual_test_warning_msg = ('WARNING: Wildcards in paths are not supported for '
-                                    'virtual test suites.')
+        virtual_test_warning_msg = (
+            'WARNING: Wildcards in paths are not supported for '
+            'virtual test suites.')
 
-        run_details, err, _ = logging_run(['passes/args.html', 'virtual/passes/'],
-                                          tests_included=True)
-        self.assertEqual(len(run_details.summarized_full_results['tests']['passes'].keys()), 1)
+        run_details, err, _ = logging_run(
+            ['passes/args.html', 'virtual/passes/'], tests_included=True)
+        self.assertEqual(
+            len(run_details.summarized_full_results['tests']['passes'].keys()),
+            1)
         self.assertFalse(virtual_test_warning_msg in err.getvalue())
 
-        run_details, err, _ = logging_run(['passes/args.html', 'virtual/passes/*'],
-                                          tests_included=True)
-        self.assertEqual(len(run_details.summarized_full_results['tests']['passes'].keys()), 1)
+        run_details, err, _ = logging_run(
+            ['passes/args.html', 'virtual/passes/*'], tests_included=True)
+        self.assertEqual(
+            len(run_details.summarized_full_results['tests']['passes'].keys()),
+            1)
         self.assertTrue(virtual_test_warning_msg in err.getvalue())
 
     def test_reftest_run(self):
@@ -1350,26 +1788,36 @@
 
     def test_reftest_driver_should_run_expected_html(self):
         tests_run = get_test_results(['passes/reftest.html'])
-        self.assertEqual(tests_run[0].references, ['passes/reftest-expected.html'])
+        self.assertEqual(tests_run[0].references,
+                         ['passes/reftest-expected.html'])
 
     def test_reftest_driver_should_run_expected_mismatch_html(self):
         tests_run = get_test_results(['passes/mismatch.html'])
-        self.assertEqual(tests_run[0].references, ['passes/mismatch-expected-mismatch.html'])
+        self.assertEqual(tests_run[0].references,
+                         ['passes/mismatch-expected-mismatch.html'])
 
     def test_reftest_crash(self):
-        test_results = get_test_results(['failures/unexpected/crash-reftest.html'])
+        test_results = get_test_results(
+            ['failures/unexpected/crash-reftest.html'])
         # The list of references should be empty since the test crashed and we didn't run any references.
         self.assertEqual(test_results[0].references, [])
 
     def test_reftest_with_virtual_reference(self):
-        _, err, _ = logging_run(['--details', 'virtual/virtual_passes/passes/reftest.html'], tests_included=True)
-        self.assertTrue('ref: virtual/virtual_passes/passes/reftest-expected.html' in err.getvalue())
-        self.assertTrue(re.search(r'args: --virtual-arg\s*ref:', err.getvalue()))
+        _, err, _ = logging_run(
+            ['--details', 'virtual/virtual_passes/passes/reftest.html'],
+            tests_included=True)
+        self.assertTrue(
+            'ref: virtual/virtual_passes/passes/reftest-expected.html' in err.
+            getvalue())
+        self.assertTrue(
+            re.search(r'args: --virtual-arg\s*ref:', err.getvalue()))
 
     def test_reftest_matching_text_expectation(self):
         test_name = 'passes/reftest-with-text.html'
         host = MockHost()
-        run_details, _, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, _, _ = logging_run([test_name],
+                                        tests_included=True,
+                                        host=host)
         self.assertEqual(run_details.exit_code, 0)
         self.assertEqual(run_details.initial_results.total, 1)
         test_result = run_details.initial_results.all_results[0]
@@ -1379,7 +1827,9 @@
     def test_reftest_mismatching_text_expectation(self):
         test_name = 'failures/unexpected/reftest-with-mismatching-text.html'
         host = MockHost()
-        run_details, _, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, _, _ = logging_run([test_name],
+                                        tests_included=True,
+                                        host=host)
         self.assertNotEqual(run_details.exit_code, 0)
         self.assertEqual(run_details.initial_results.total, 1)
         test_result = run_details.initial_results.all_results[0]
@@ -1390,7 +1840,9 @@
     def test_reftest_mismatching_pixel_matching_text(self):
         test_name = 'failures/unexpected/reftest-with-matching-text.html'
         host = MockHost()
-        run_details, _, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, _, _ = logging_run([test_name],
+                                        tests_included=True,
+                                        host=host)
         self.assertNotEqual(run_details.exit_code, 0)
         self.assertEqual(run_details.initial_results.total, 1)
         test_result = run_details.initial_results.all_results[0]
@@ -1401,8 +1853,12 @@
     def test_reftest_mismatching_both_text_and_pixel(self):
         test_name = 'failures/unexpected/reftest.html'
         host = MockHost()
-        host.filesystem.write_text_file(test.WEB_TEST_DIR + '/failures/unexpected/reftest-expected.txt', 'mismatch')
-        run_details, _, _ = logging_run([test_name], tests_included=True, host=host)
+        host.filesystem.write_text_file(
+            test.WEB_TEST_DIR + '/failures/unexpected/reftest-expected.txt',
+            'mismatch')
+        run_details, _, _ = logging_run([test_name],
+                                        tests_included=True,
+                                        host=host)
         self.assertNotEqual(run_details.exit_code, 0)
         self.assertEqual(run_details.initial_results.total, 1)
         test_result = run_details.initial_results.all_results[0]
@@ -1417,14 +1873,20 @@
         extra_wav = test.WEB_TEST_DIR + '/passes/image-expected.wav'
         host.filesystem.write_text_file(extra_wav, 'Extra wav')
         test_name = 'passes/image.html'
-        run_details, log_stream, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, log_stream, _ = logging_run([test_name],
+                                                 tests_included=True,
+                                                 host=host)
         self.assertNotEqual(run_details.exit_code, 0)
         self.assertEqual(run_details.initial_results.total, 1)
         test_result = run_details.initial_results.all_results[0]
         self.assertEqual(test_result.test_name, test_name)
         self.assertEqual(len(test_result.failures), 2)
-        self.assertTrue(test_failures.has_failure_type(test_failures.FailureTextNotGenerated, test_result.failures))
-        self.assertTrue(test_failures.has_failure_type(test_failures.FailureAudioNotGenerated, test_result.failures))
+        self.assertTrue(
+            test_failures.has_failure_type(
+                test_failures.FailureTextNotGenerated, test_result.failures))
+        self.assertTrue(
+            test_failures.has_failure_type(
+                test_failures.FailureAudioNotGenerated, test_result.failures))
         self.assert_contains(log_stream, 'Please remove %s' % extra_txt)
         self.assert_contains(log_stream, 'Please remove %s' % extra_wav)
 
@@ -1435,7 +1897,9 @@
         platform_baseline = test.WEB_TEST_DIR + '/platform/test-mac-mac10.10/passes/image-expected.txt'
         host.filesystem.write_text_file(platform_baseline, '')
         test_name = 'passes/image.html'
-        run_details, log_stream, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, log_stream, _ = logging_run([test_name],
+                                                 tests_included=True,
+                                                 host=host)
         self.assertEqual(run_details.exit_code, 0)
         self.assertEqual(run_details.initial_results.total, 1)
         test_result = run_details.initial_results.all_results[0]
@@ -1450,13 +1914,17 @@
         extra_wav = test.WEB_TEST_DIR + '/passes/reftest-expected.wav'
         host.filesystem.write_text_file(extra_wav, 'Extra wav')
         test_name = 'passes/reftest.html'
-        run_details, log_stream, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, log_stream, _ = logging_run([test_name],
+                                                 tests_included=True,
+                                                 host=host)
         self.assertNotEqual(run_details.exit_code, 0)
         self.assertEqual(run_details.initial_results.total, 1)
         test_result = run_details.initial_results.all_results[0]
         self.assertEqual(test_result.test_name, test_name)
         self.assertEqual(len(test_result.failures), 1)
-        self.assertTrue(test_failures.has_failure_type(test_failures.FailureAudioNotGenerated, test_result.failures))
+        self.assertTrue(
+            test_failures.has_failure_type(
+                test_failures.FailureAudioNotGenerated, test_result.failures))
         # For now extra png baseline is only reported in an error message.
         self.assert_contains(log_stream, 'Please remove %s' % extra_png)
         self.assert_contains(log_stream, 'Please remove %s' % extra_wav)
@@ -1468,13 +1936,17 @@
         extra_wav = test.WEB_TEST_DIR + '/passes/reftest-with-text-expected.wav'
         host.filesystem.write_text_file(extra_wav, 'Extra wav')
         test_name = 'passes/reftest-with-text.html'
-        run_details, log_stream, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, log_stream, _ = logging_run([test_name],
+                                                 tests_included=True,
+                                                 host=host)
         self.assertNotEqual(run_details.exit_code, 0)
         self.assertEqual(run_details.initial_results.total, 1)
         test_result = run_details.initial_results.all_results[0]
         self.assertEqual(test_result.test_name, test_name)
         self.assertEqual(len(test_result.failures), 1)
-        self.assertTrue(test_failures.has_failure_type(test_failures.FailureAudioNotGenerated, test_result.failures))
+        self.assertTrue(
+            test_failures.has_failure_type(
+                test_failures.FailureAudioNotGenerated, test_result.failures))
         # For now extra png baseline is only reported in an error message.
         self.assert_contains(log_stream, 'Please remove %s' % extra_png)
         self.assert_contains(log_stream, 'Please remove %s' % extra_wav)
@@ -1484,7 +1956,9 @@
         extra_png = test.WEB_TEST_DIR + '/passes/reftest-expected.png'
         host.filesystem.write_text_file(extra_png, 'Extra png')
         test_name = 'passes/reftest.html'
-        run_details, log_stream, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, log_stream, _ = logging_run([test_name],
+                                                 tests_included=True,
+                                                 host=host)
         self.assertEqual(run_details.exit_code, 0)
         # For now extra png baseline is only reported in an error message.
         self.assert_contains(log_stream, 'Please remove %s' % extra_png)
@@ -1496,18 +1970,26 @@
         extra_txt = test.WEB_TEST_DIR + '/passes/testharness-expected.txt'
         host.filesystem.write_text_file(
             extra_txt,
-            'This is a testharness.js-based test.\nPASS: bah\nHarness: the test ran to completion.')
+            'This is a testharness.js-based test.\nPASS: bah\nHarness: the test ran to completion.'
+        )
         extra_wav = test.WEB_TEST_DIR + '/passes/testharness-expected.wav'
         host.filesystem.write_text_file(extra_wav, 'Extra wav')
         test_name = 'passes/testharness.html'
-        run_details, log_stream, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, log_stream, _ = logging_run([test_name],
+                                                 tests_included=True,
+                                                 host=host)
         self.assertNotEqual(run_details.exit_code, 0)
         self.assertEqual(run_details.initial_results.total, 1)
         test_result = run_details.initial_results.all_results[0]
         self.assertEqual(test_result.test_name, test_name)
         self.assertEqual(len(test_result.failures), 2)
-        self.assertTrue(test_failures.has_failure_type(test_failures.FailureImageHashNotGenerated, test_result.failures))
-        self.assertTrue(test_failures.has_failure_type(test_failures.FailureAudioNotGenerated, test_result.failures))
+        self.assertTrue(
+            test_failures.has_failure_type(
+                test_failures.FailureImageHashNotGenerated,
+                test_result.failures))
+        self.assertTrue(
+            test_failures.has_failure_type(
+                test_failures.FailureAudioNotGenerated, test_result.failures))
         # For now extra txt baseline for all-pass testharness test is only reported in an error message.
         self.assert_contains(log_stream, 'Please remove %s' % extra_png)
         self.assert_contains(log_stream, 'Please remove %s' % extra_txt)
@@ -1518,9 +2000,12 @@
         extra_txt = test.WEB_TEST_DIR + '/passes/testharness-expected.txt'
         host.filesystem.write_text_file(
             extra_txt,
-            'This is a testharness.js-based test.\nPASS: bah\nHarness: the test ran to completion.')
+            'This is a testharness.js-based test.\nPASS: bah\nHarness: the test ran to completion.'
+        )
         test_name = 'passes/testharness.html'
-        run_details, log_stream, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, log_stream, _ = logging_run([test_name],
+                                                 tests_included=True,
+                                                 host=host)
         self.assertEqual(run_details.exit_code, 0)
         # For now extra txt baseline for all-pass testharness test is only reported in an error message.
         self.assert_contains(log_stream, 'Please remove %s' % extra_txt)
@@ -1530,15 +2015,20 @@
         extra_txt = test.WEB_TEST_DIR + '/passes/testharness-expected.txt'
         host.filesystem.write_text_file(
             extra_txt,
-            'This is a testharness.js-based test.\nFAIL: bah\nHarness: the test ran to completion.')
+            'This is a testharness.js-based test.\nFAIL: bah\nHarness: the test ran to completion.'
+        )
         test_name = 'passes/testharness.html'
-        run_details, log_stream, _ = logging_run([test_name], tests_included=True, host=host)
+        run_details, log_stream, _ = logging_run([test_name],
+                                                 tests_included=True,
+                                                 host=host)
         self.assertNotEqual(run_details.exit_code, 0)
         self.assertEqual(run_details.initial_results.total, 1)
         test_result = run_details.initial_results.all_results[0]
         self.assertEqual(test_result.test_name, test_name)
         self.assertEqual(len(test_result.failures), 1)
-        self.assertTrue(test_failures.has_failure_type(test_failures.FailureTextMismatch, test_result.failures))
+        self.assertTrue(
+            test_failures.has_failure_type(test_failures.FailureTextMismatch,
+                                           test_result.failures))
         self.assert_contains(log_stream, 'Please remove %s' % extra_txt)
 
     def test_passing_testharness_overriding_baseline(self):
@@ -1550,42 +2040,76 @@
         platform_baseline = test.WEB_TEST_DIR + '/platform/test-mac-mac10.10/passes/testharness-expected.txt'
         host.filesystem.write_text_file(
             platform_baseline,
-            'This is a testharness.js-based test.\nPASS: bah\nHarness: the test ran to completion.')
-        run_details, log_stream, _ = logging_run(
-            ['passes/testharness.html'], tests_included=True, host=host)
+            'This is a testharness.js-based test.\nPASS: bah\nHarness: the test ran to completion.'
+        )
+        run_details, log_stream, _ = logging_run(['passes/testharness.html'],
+                                                 tests_included=True,
+                                                 host=host)
         self.assertEqual(run_details.exit_code, 0)
         self.assertNotIn('Please remove', log_stream.getvalue())
 
     def test_additional_platform_directory(self):
-        self.assertTrue(passing_run(['--additional-platform-directory', '/tmp/foo', '--order', 'natural']))
-        self.assertTrue(passing_run(['--additional-platform-directory', '/tmp/../foo', '--order', 'natural']))
-        self.assertTrue(passing_run(['--additional-platform-directory', '/tmp/foo', '--additional-platform-directory',
-                                     '/tmp/bar', '--order', 'natural']))
-        self.assertTrue(passing_run(['--additional-platform-directory', 'foo', '--order', 'natural']))
+        self.assertTrue(
+            passing_run([
+                '--additional-platform-directory', '/tmp/foo', '--order',
+                'natural'
+            ]))
+        self.assertTrue(
+            passing_run([
+                '--additional-platform-directory', '/tmp/../foo', '--order',
+                'natural'
+            ]))
+        self.assertTrue(
+            passing_run([
+                '--additional-platform-directory', '/tmp/foo',
+                '--additional-platform-directory', '/tmp/bar', '--order',
+                'natural'
+            ]))
+        self.assertTrue(
+            passing_run([
+                '--additional-platform-directory', 'foo', '--order', 'natural'
+            ]))
 
     def test_additional_expectations(self):
         host = MockHost()
-        host.filesystem.write_text_file('/tmp/overrides.txt', '# results: [ Failure ]\nfailures/unexpected/mismatch.html [ Failure ]\n')
-        self.assertTrue(passing_run(['--additional-expectations', '/tmp/overrides.txt', 'failures/unexpected/mismatch.html'],
-                                    tests_included=True, host=host))
+        host.filesystem.write_text_file(
+            '/tmp/overrides.txt',
+            '# results: [ Failure ]\nfailures/unexpected/mismatch.html [ Failure ]\n'
+        )
+        self.assertTrue(
+            passing_run([
+                '--additional-expectations', '/tmp/overrides.txt',
+                'failures/unexpected/mismatch.html'
+            ],
+                        tests_included=True,
+                        host=host))
 
     def test_platform_directories_ignored_when_searching_for_tests(self):
         tests_run = get_tests_run(['--platform', 'test-mac-mac10.10'])
-        self.assertNotIn('platform/test-mac-mac10.10/http/test.html', tests_run)
+        self.assertNotIn('platform/test-mac-mac10.10/http/test.html',
+                         tests_run)
         self.assertNotIn('platform/test-win-win7/http/test.html', tests_run)
 
     def test_platform_directories_not_searched_for_additional_tests(self):
         tests_run = get_tests_run(['--platform', 'test-mac-mac10.10', 'http'])
-        self.assertNotIn('platform/test-mac-mac10.10/http/test.html', tests_run)
+        self.assertNotIn('platform/test-mac-mac10.10/http/test.html',
+                         tests_run)
         self.assertNotIn('platform/test-win-win7/http/test.html', tests_run)
 
     def test_output_diffs(self):
         host = MockHost()
-        logging_run(['failures/unexpected/text-image-checksum.html'], tests_included=True, host=host)
+        logging_run(['failures/unexpected/text-image-checksum.html'],
+                    tests_included=True,
+                    host=host)
         written_files = host.filesystem.written_files
-        self.assertTrue(any(path.endswith('-diff.txt') for path in written_files.keys()))
-        self.assertTrue(any(path.endswith('-pretty-diff.html') for path in written_files.keys()))
-        self.assertFalse(any(path.endswith('-wdiff.html') for path in written_files))
+        self.assertTrue(
+            any(path.endswith('-diff.txt') for path in written_files.keys()))
+        self.assertTrue(
+            any(
+                path.endswith('-pretty-diff.html')
+                for path in written_files.keys()))
+        self.assertFalse(
+            any(path.endswith('-wdiff.html') for path in written_files))
 
     def test_unsupported_platform(self):
         stderr = StringIO.StringIO()
@@ -1600,10 +2124,14 @@
         # see the verbose log output. However, we can't use logging_run() because using
         # output_capture to capture stderr latter results in a nonpicklable host.
 
-        options, parsed_args = parse_args(['--verbose', '--fully-parallel', '--jobs',
-                                           '2', 'passes/text.html', 'passes/image.html'], tests_included=True)
+        options, parsed_args = parse_args([
+            '--verbose', '--fully-parallel', '--jobs', '2', 'passes/text.html',
+            'passes/image.html'
+        ],
+                                          tests_included=True)
         host = MockHost()
-        port_obj = host.port_factory.get(port_name=options.platform, options=options)
+        port_obj = host.port_factory.get(
+            port_name=options.platform, options=options)
         logging_stream = StringIO.StringIO()
         printer = Printer(host, options, logging_stream)
         run_web_tests.run(port_obj, options, parsed_args, printer)
@@ -1614,15 +2142,22 @@
         # FIXME: Figure out how to either use a mock-test port to
         # get output or mack mock ports work again.
         host = Host()
-        _, err, _ = logging_run(['--platform', 'mock-win', '--driver-logging', 'fast/harness/results.html'],
-                                tests_included=True, host=host)
+        _, err, _ = logging_run([
+            '--platform', 'mock-win', '--driver-logging',
+            'fast/harness/results.html'
+        ],
+                                tests_included=True,
+                                host=host)
         self.assertIn('OUT:', err.getvalue())
 
     def _check_json_test_results(self, host, details):
         self.assertEqual(details.exit_code, 0)
         self.assertTrue(host.filesystem.exists('/tmp/json_results.json'))
-        json_failing_test_results = host.filesystem.read_text_file('/tmp/json_results.json')
-        self.assertEqual(json.loads(json_failing_test_results), details.summarized_full_results)
+        json_failing_test_results = host.filesystem.read_text_file(
+            '/tmp/json_results.json')
+        self.assertEqual(
+            json.loads(json_failing_test_results),
+            details.summarized_full_results)
 
     def test_json_test_results(self):
         host = MockHost()
@@ -1639,20 +2174,29 @@
     def test_json_test_results_alias_isolated_script_test_output(self):
         host = MockHost()
         details, _, _ = logging_run(
-            ['--isolated-script-test-output', '/tmp/json_results.json'], host=host)
+            ['--isolated-script-test-output', '/tmp/json_results.json'],
+            host=host)
         self._check_json_test_results(host, details)
 
     def test_json_failing_test_results(self):
         host = MockHost()
         details, _, _ = logging_run(
-            ['--json-failing-test-results', '/tmp/json_failing_results.json'], host=host)
+            ['--json-failing-test-results', '/tmp/json_failing_results.json'],
+            host=host)
         self.assertEqual(details.exit_code, 0)
-        self.assertTrue(host.filesystem.exists('/tmp/json_failing_results.json'))
-        json_failing_test_results = host.filesystem.read_text_file('/tmp/json_failing_results.json')
-        self.assertEqual(json.loads(json_failing_test_results), details.summarized_failing_results)
+        self.assertTrue(
+            host.filesystem.exists('/tmp/json_failing_results.json'))
+        json_failing_test_results = host.filesystem.read_text_file(
+            '/tmp/json_failing_results.json')
+        self.assertEqual(
+            json.loads(json_failing_test_results),
+            details.summarized_failing_results)
 
     def test_no_default_expectations(self):
-        self.assertFalse(passing_run(['--ignore-default-expectations', 'failures/expected/text.html']))
+        self.assertFalse(
+            passing_run([
+                '--ignore-default-expectations', 'failures/expected/text.html'
+            ]))
 
 
 class RebaselineTest(unittest.TestCase, StreamTestingMixin):
@@ -1663,7 +2207,8 @@
     which fetch new baselines from elsewhere rather than generating them.
     """
 
-    def assert_baselines(self, written_files, log_stream, expected_file_base, expected_extensions):
+    def assert_baselines(self, written_files, log_stream, expected_file_base,
+                         expected_extensions):
         """Asserts that the written_files contains baselines for one test.
 
         Args:
@@ -1689,16 +2234,19 @@
         # Test that we update baselines in place when the test fails
         # (text and image mismatch).
         host = MockHost()
-        details, log_stream, _ = logging_run(
-            ['--reset-results', 'failures/unexpected/text-image-checksum.html'],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--reset-results', 'failures/unexpected/text-image-checksum.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         # The run exit code is 0, indicating success; since we're resetting
         # baselines, it's OK for actual results to not match baselines.
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 7)
         self.assert_baselines(
-            written_files, log_stream,
+            written_files,
+            log_stream,
             'failures/unexpected/text-image-checksum',
             expected_extensions=['.txt', '.png'])
 
@@ -1708,38 +2256,39 @@
         host = MockHost()
         details, log_stream, _ = logging_run(
             ['failures/unexpected/text-image-checksum.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         written_files = host.filesystem.written_files
         # In a normal test run where actual results don't match baselines, the
         # exit code indicates failure.
         self.assertEqual(details.exit_code, 1)
         self.assert_baselines(
-            written_files, log_stream, 'failures/unexpected/text-image-checksum',
+            written_files,
+            log_stream,
+            'failures/unexpected/text-image-checksum',
             expected_extensions=[])
 
     def test_reset_results_missing_results(self):
         # Test that we create new baselines at the generic location for
         # if we are missing baselines.
         host = MockHost()
-        details, log_stream, _ = logging_run(
-            [
-                '--reset-results',
-                'failures/unexpected/missing_text.html',
-                'failures/unexpected/missing_image.html',
-                'failures/unexpected/missing_render_tree_dump.html'
-            ],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--reset-results', 'failures/unexpected/missing_text.html',
+            'failures/unexpected/missing_image.html',
+            'failures/unexpected/missing_render_tree_dump.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 8)
+        self.assert_baselines(written_files, log_stream,
+                              'failures/unexpected/missing_text', ['.txt'])
+        self.assert_baselines(written_files, log_stream,
+                              'failures/unexpected/missing_image', ['.png'])
         self.assert_baselines(
-            written_files, log_stream,
-            'failures/unexpected/missing_text', ['.txt'])
-        self.assert_baselines(
-            written_files, log_stream,
-            'failures/unexpected/missing_image', ['.png'])
-        self.assert_baselines(
-            written_files, log_stream,
+            written_files,
+            log_stream,
             'failures/unexpected/missing_render_tree_dump',
             expected_extensions=['.txt'])
 
@@ -1747,48 +2296,50 @@
         # Tests that we create new result for a failing testharness test without
         # baselines, but don't create one for a passing one.
         host = MockHost()
-        details, log_stream, _ = logging_run(
-            [
-                '--reset-results',
-                'failures/unexpected/testharness.html',
-                'passes/testharness.html'
-            ],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--reset-results', 'failures/unexpected/testharness.html',
+            'passes/testharness.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 6)
-        self.assert_baselines(written_files, log_stream, 'failures/unexpected/testharness', ['.txt'])
-        self.assert_baselines(written_files, log_stream, 'passes/testharness', [])
+        self.assert_baselines(written_files, log_stream,
+                              'failures/unexpected/testharness', ['.txt'])
+        self.assert_baselines(written_files, log_stream, 'passes/testharness',
+                              [])
 
     def test_reset_results_testharness_existing_baseline(self):
         # Tests that we update existing baseline for a testharness test.
         host = MockHost()
         host.filesystem.write_text_file(
-            test.WEB_TEST_DIR + '/failures/unexpected/testharness-expected.txt', 'foo')
+            test.WEB_TEST_DIR +
+            '/failures/unexpected/testharness-expected.txt', 'foo')
         details, log_stream, _ = logging_run(
-            [
-                '--reset-results',
-                'failures/unexpected/testharness.html'
-            ],
-            tests_included=True, host=host)
+            ['--reset-results', 'failures/unexpected/testharness.html'],
+            tests_included=True,
+            host=host)
         self.assertEqual(details.exit_code, 0)
         written_files = host.filesystem.written_files
         self.assertEqual(len(written_files.keys()), 6)
-        self.assert_baselines(written_files, log_stream, 'failures/unexpected/testharness', ['.txt'])
+        self.assert_baselines(written_files, log_stream,
+                              'failures/unexpected/testharness', ['.txt'])
 
     def test_reset_results_image_only(self):
         # Tests that we don't create new text results for an image-only test.
         host = MockHost()
-        details, log_stream, _ = logging_run(
-            [
-                '--reset-results',
-                'failures/unexpected/image-only.html',
-            ],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--reset-results',
+            'failures/unexpected/image-only.html',
+        ],
+                                             tests_included=True,
+                                             host=host)
         self.assertEqual(details.exit_code, 0)
         written_files = host.filesystem.written_files
         self.assertEqual(len(written_files.keys()), 6)
-        self.assert_baselines(written_files, log_stream, 'failures/unexpected/image-only', ['.png'])
+        self.assert_baselines(written_files, log_stream,
+                              'failures/unexpected/image-only', ['.png'])
 
     def test_copy_baselines(self):
         # Test that we update the baselines in the version-specific directories
@@ -1801,21 +2352,22 @@
             # in blinkpy.web_tests.port.test. This is added so that we also
             # check that the text baseline isn't written if it matches.
             'text-image-checksum_fail-txt')
-        details, log_stream, _ = logging_run(
-            [
-                '--copy-baselines',
-                'failures/unexpected/text-image-checksum.html'
-            ],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--copy-baselines', 'failures/unexpected/text-image-checksum.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 1)
         self.assertEqual(len(written_files.keys()), 11)
         self.assert_contains(
             log_stream,
-            'Copying baseline to "platform/test-mac-mac10.10/failures/unexpected/text-image-checksum-expected.png"')
+            'Copying baseline to "platform/test-mac-mac10.10/failures/unexpected/text-image-checksum-expected.png"'
+        )
         self.assert_contains(
             log_stream,
-            'Not copying baseline to "platform/test-mac-mac10.10/failures/unexpected/text-image-checksum-expected.txt"')
+            'Not copying baseline to "platform/test-mac-mac10.10/failures/unexpected/text-image-checksum-expected.txt"'
+        )
 
     def test_reset_results_with_copy_baselines(self):
         # Test that we update the baselines in the version-specific directories
@@ -1828,17 +2380,18 @@
             # in blinkpy.web_tests.port.test. This is added so that we also
             # check that the text baseline isn't written if it matches.
             'text-image-checksum_fail-txt')
-        details, log_stream, _ = logging_run(
-            [
-                '--reset-results', '--copy-baselines',
-                'failures/unexpected/text-image-checksum.html'
-            ],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--reset-results', '--copy-baselines',
+            'failures/unexpected/text-image-checksum.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 7)
         self.assert_baselines(
-            written_files, log_stream,
+            written_files,
+            log_stream,
             'platform/test-mac-mac10.10/failures/unexpected/text-image-checksum',
             expected_extensions=['.png'])
 
@@ -1848,25 +2401,34 @@
         host = MockHost()
         details, log_stream, _ = logging_run(
             ['--reset-results', 'passes/reftest.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 5)
         self.assert_baselines(
-            written_files, log_stream, 'passes/reftest', expected_extensions=[])
+            written_files,
+            log_stream,
+            'passes/reftest',
+            expected_extensions=[])
 
     def test_reset_results_reftest_with_text(self):
         # In this case, there is a text baseline present; a new baseline is
         # written even though this is a reference test.
         host = MockHost()
-        details, log_stream, _ = logging_run(
-            ['--reset-results', 'failures/unexpected/reftest-with-mismatching-text.html'],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--reset-results',
+            'failures/unexpected/reftest-with-mismatching-text.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 6)
         self.assert_baselines(
-            written_files, log_stream, 'failures/unexpected/reftest-with-mismatching-text',
+            written_files,
+            log_stream,
+            'failures/unexpected/reftest-with-mismatching-text',
             expected_extensions=['.txt'])
 
     def test_reset_results_remove_extra_baselines(self):
@@ -1877,14 +2439,17 @@
         host.filesystem.write_text_file(extra_wav, 'Extra wav')
         details, log_stream, _ = logging_run(
             ['--reset-results', 'failures/unexpected/image-only.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 8)
         self.assertIsNone(written_files[extra_txt])
         self.assertIsNone(written_files[extra_wav])
         self.assert_baselines(
-            written_files, log_stream, 'failures/unexpected/image-only',
+            written_files,
+            log_stream,
+            'failures/unexpected/image-only',
             expected_extensions=['.png'])
 
     def test_reset_results_reftest_remove_extra_baselines(self):
@@ -1896,7 +2461,8 @@
         extra_txt = test.WEB_TEST_DIR + '/passes/reftest-expected.txt'
         host.filesystem.write_text_file(extra_txt, 'reftest')
         details, _, _ = logging_run(['--reset-results', 'passes/reftest.html'],
-                                    tests_included=True, host=host)
+                                    tests_included=True,
+                                    host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 8)
@@ -1910,14 +2476,18 @@
         host.filesystem.write_text_file(extra_png, 'Extra png')
         extra_wav = test.WEB_TEST_DIR + '/passes/reftest-with-text-expected.wav'
         host.filesystem.write_text_file(extra_wav, 'Extra wav')
-        details, _, _ = logging_run(['--reset-results', 'passes/reftest-with-text.html'],
-                                    tests_included=True, host=host)
+        details, _, _ = logging_run(
+            ['--reset-results', 'passes/reftest-with-text.html'],
+            tests_included=True,
+            host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 7)
         self.assertIsNone(written_files[extra_png])
         self.assertIsNone(written_files[extra_wav])
-        self.assertNotIn(test.WEB_TEST_DIR + '/passes/reftest-with-text-expected.txt', written_files)
+        self.assertNotIn(
+            test.WEB_TEST_DIR + '/passes/reftest-with-text-expected.txt',
+            written_files)
 
     def test_reset_results_passing_testharness_remove_extra_baselines(self):
         host = MockHost()
@@ -1927,26 +2497,32 @@
         host.filesystem.write_text_file(extra_txt, 'Extra txt')
         details, log_stream, _ = logging_run(
             ['--reset-results', 'passes/testharness.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 7)
         self.assertIsNone(written_files[extra_png])
         self.assertIsNone(written_files[extra_txt])
         self.assert_baselines(
-            written_files, log_stream, 'passes/testharness',
+            written_files,
+            log_stream,
+            'passes/testharness',
             expected_extensions=[])
 
     def test_reset_results_failing_testharness(self):
         host = MockHost()
         details, log_stream, _ = logging_run(
             ['--reset-results', 'failures/unexpected/testharness.html'],
-            tests_included=True, host=host)
+            tests_included=True,
+            host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 6)
         self.assert_baselines(
-            written_files, log_stream, 'failures/unexpected/testharness',
+            written_files,
+            log_stream,
+            'failures/unexpected/testharness',
             expected_extensions=['.txt'])
 
     def test_new_flag_specific_baseline(self):
@@ -1960,17 +2536,19 @@
             # in blinkpy.web_tests.port.test. This is added so that we also
             # check that the text baseline isn't written if it matches.
             'text-image-checksum_fail-txt')
-        details, log_stream, _ = logging_run(
-            ['--additional-driver-flag=--flag',
-             '--reset-results',
-             'failures/unexpected/text-image-checksum.html'],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--additional-driver-flag=--flag', '--reset-results',
+            'failures/unexpected/text-image-checksum.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 7)
         # We should create new image baseline only.
         self.assert_baselines(
-            written_files, log_stream,
+            written_files,
+            log_stream,
             'flag-specific/flag/failures/unexpected/text-image-checksum',
             expected_extensions=['.png'])
 
@@ -1985,20 +2563,23 @@
             # in blinkpy.web_tests.port.test. This is added so that we also
             # check that the text baseline isn't written if it matches.
             'text-image-checksum_fail-txt')
-        details, log_stream, _ = logging_run(
-            ['--additional-driver-flag=--flag',
-             '--copy-baselines',
-             'failures/unexpected/text-image-checksum.html'],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--additional-driver-flag=--flag', '--copy-baselines',
+            'failures/unexpected/text-image-checksum.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 1)
         self.assertEqual(len(written_files.keys()), 11)
         self.assert_contains(
             log_stream,
-            'Copying baseline to "flag-specific/flag/failures/unexpected/text-image-checksum-expected.png"')
+            'Copying baseline to "flag-specific/flag/failures/unexpected/text-image-checksum-expected.png"'
+        )
         self.assert_contains(
             log_stream,
-            'Not copying baseline to "flag-specific/flag/failures/unexpected/text-image-checksum-expected.txt"')
+            'Not copying baseline to "flag-specific/flag/failures/unexpected/text-image-checksum-expected.txt"'
+        )
 
     def test_new_flag_specific_baseline_optimize(self):
         # Test removing existing baselines under flag-specific directory if the
@@ -2014,22 +2595,26 @@
             'text-image-checksum_fail-txt')
         flag_specific_baseline_txt = (
             test.WEB_TEST_DIR +
-            '/flag-specific/flag/failures/unexpected/text-image-checksum-expected.txt')
+            '/flag-specific/flag/failures/unexpected/text-image-checksum-expected.txt'
+        )
         host.filesystem.write_text_file(
-            flag_specific_baseline_txt, 'existing-baseline-different-from-fallback')
+            flag_specific_baseline_txt,
+            'existing-baseline-different-from-fallback')
 
-        details, log_stream, _ = logging_run(
-            ['--additional-driver-flag=--flag',
-             '--reset-results',
-             'failures/unexpected/text-image-checksum.html'],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--additional-driver-flag=--flag', '--reset-results',
+            'failures/unexpected/text-image-checksum.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         self.assertEqual(details.exit_code, 0)
         self.assertFalse(host.filesystem.exists(flag_specific_baseline_txt))
         written_files = host.filesystem.written_files
         self.assertEqual(len(written_files.keys()), 8)
         # We should create new image baseline only.
         self.assert_baselines(
-            written_files, log_stream,
+            written_files,
+            log_stream,
             'flag-specific/flag/failures/unexpected/text-image-checksum',
             expected_extensions=['.png'])
 
@@ -2044,16 +2629,19 @@
             # in blinkpy.web_tests.port.test. This is added so that we also
             # check that the text baseline isn't written if it matches.
             'text-image-checksum_fail-txt')
-        details, log_stream, _ = logging_run(
-            ['--reset-results',
-             'virtual/virtual_failures/failures/unexpected/text-image-checksum.html'],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--reset-results',
+            'virtual/virtual_failures/failures/unexpected/text-image-checksum.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 9)
         # We should create new image baseline only.
         self.assert_baselines(
-            written_files, log_stream,
+            written_files,
+            log_stream,
             'virtual/virtual_failures/failures/unexpected/text-image-checksum',
             expected_extensions=['.png'])
 
@@ -2067,18 +2655,18 @@
             '/platform/test-mac-mac10.10/failures/unexpected/text-image-checksum-expected.png',
             'wrong-png-baseline')
 
-        details, log_stream, _ = logging_run(
-            [
-                '--reset-results',
-                'failures/unexpected/text-image-checksum.html'
-            ],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--reset-results', 'failures/unexpected/text-image-checksum.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 7)
         # We should reset the platform image baseline.
         self.assert_baselines(
-            written_files, log_stream,
+            written_files,
+            log_stream,
             'platform/test-mac-mac10.10/failures/unexpected/text-image-checksum',
             expected_extensions=['.png'])
 
@@ -2092,20 +2680,21 @@
             '/platform/test-mac-mac10.10/failures/unexpected/text-image-checksum-expected.png',
             'wrong-png-baseline')
         host.filesystem.remove(
-            test.WEB_TEST_DIR + '/failures/unexpected/text-image-checksum-expected.png')
+            test.WEB_TEST_DIR +
+            '/failures/unexpected/text-image-checksum-expected.png')
 
-        details, log_stream, _ = logging_run(
-            [
-                '--reset-results',
-                'failures/unexpected/text-image-checksum.html'
-            ],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--reset-results', 'failures/unexpected/text-image-checksum.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         written_files = host.filesystem.written_files
         self.assertEqual(details.exit_code, 0)
         self.assertEqual(len(written_files.keys()), 8)
         # We should reset the platform image baseline.
         self.assert_baselines(
-            written_files, log_stream,
+            written_files,
+            log_stream,
             'platform/test-mac-mac10.10/failures/unexpected/text-image-checksum',
             expected_extensions=['.png'])
 
@@ -2123,27 +2712,30 @@
             'text-image-checksum_fail-txt')
         virtual_baseline_txt = (
             test.WEB_TEST_DIR +
-            '/virtual/virtual_failures/failures/unexpected/text-image-checksum-expected.txt')
+            '/virtual/virtual_failures/failures/unexpected/text-image-checksum-expected.txt'
+        )
         host.filesystem.write_text_file(
             virtual_baseline_txt, 'existing-baseline-different-from-fallback')
 
-        details, log_stream, _ = logging_run(
-            ['--reset-results',
-             'virtual/virtual_failures/failures/unexpected/text-image-checksum.html'],
-            tests_included=True, host=host)
+        details, log_stream, _ = logging_run([
+            '--reset-results',
+            'virtual/virtual_failures/failures/unexpected/text-image-checksum.html'
+        ],
+                                             tests_included=True,
+                                             host=host)
         self.assertEqual(details.exit_code, 0)
         self.assertFalse(host.filesystem.exists(virtual_baseline_txt))
         written_files = host.filesystem.written_files
         self.assertEqual(len(written_files.keys()), 10)
         # We should create new image baseline only.
         self.assert_baselines(
-            written_files, log_stream,
+            written_files,
+            log_stream,
             'virtual/virtual_failures/failures/unexpected/text-image-checksum',
             expected_extensions=['.png'])
 
 
 class MainTest(unittest.TestCase):
-
     def test_exception_handling(self):
         orig_run_fn = run_web_tests.run
 
@@ -2152,7 +2744,6 @@
             raise KeyboardInterrupt
 
         def successful_run(port, options, args, printer):
-
             class FakeRunDetails(object):
                 exit_code = exit_codes.UNEXPECTED_ERROR_EXIT_STATUS
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/servers/apache_http.py b/third_party/blink/tools/blinkpy/web_tests/servers/apache_http.py
index 1a6acca8..8a253dbe4 100644
--- a/third_party/blink/tools/blinkpy/web_tests/servers/apache_http.py
+++ b/third_party/blink/tools/blinkpy/web_tests/servers/apache_http.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Start and stop the Apache HTTP server as it is used by the web tests."""
 
 import logging
@@ -33,41 +32,56 @@
 
 from blinkpy.web_tests.servers import server_base
 
-
 _log = logging.getLogger(__name__)
 
 
 class ApacheHTTP(server_base.ServerBase):
-
-    def __init__(self, port_obj, output_dir, additional_dirs, number_of_servers):
+    def __init__(self, port_obj, output_dir, additional_dirs,
+                 number_of_servers):
         super(ApacheHTTP, self).__init__(port_obj, output_dir)
         # We use the name "httpd" instead of "apache" to make our paths (e.g. the pid file: /tmp/WebKit/httpd.pid)
         # match old-run-webkit-tests: https://bugs.webkit.org/show_bug.cgi?id=63956
         self._name = 'httpd'
         self._log_prefixes = ('access_log', 'error_log')
-        self._mappings = [{'port': 8000, 'scheme': 'http'},
-                          {'port': 8080, 'scheme': 'http'},
-                          {'port': 8443, 'scheme': 'https', 'sslcert': True}]
+        self._mappings = [{
+            'port': 8000,
+            'scheme': 'http'
+        }, {
+            'port': 8080,
+            'scheme': 'http'
+        }, {
+            'port': 8443,
+            'scheme': 'https',
+            'sslcert': True
+        }]
         self._number_of_servers = number_of_servers
 
-        self._pid_file = self._filesystem.join(self._runtime_path, '%s.pid' % self._name)
+        self._pid_file = self._filesystem.join(self._runtime_path,
+                                               '%s.pid' % self._name)
 
         executable = self._port_obj.path_to_apache()
 
         test_dir = self._port_obj.web_tests_dir()
         document_root = self._filesystem.join(test_dir, 'http', 'tests')
-        forms_test_resources_dir = self._filesystem.join(test_dir, 'fast', 'forms', 'resources')
+        forms_test_resources_dir = self._filesystem.join(
+            test_dir, 'fast', 'forms', 'resources')
         media_resources_dir = self._filesystem.join(test_dir, 'media')
-        reporting_observer_resources_dir = self._filesystem.join(test_dir, 'reporting-observer', 'resources')
-        webaudio_resources_dir = self._filesystem.join(test_dir, 'webaudio', 'resources')
-        mime_types_path = self._filesystem.join(self._port_obj.apache_config_directory(), 'mime.types')
-        cert_file = self._filesystem.join(self._port_obj.apache_config_directory(), 'webkit-httpd.pem')
+        reporting_observer_resources_dir = self._filesystem.join(
+            test_dir, 'reporting-observer', 'resources')
+        webaudio_resources_dir = self._filesystem.join(test_dir, 'webaudio',
+                                                       'resources')
+        mime_types_path = self._filesystem.join(
+            self._port_obj.apache_config_directory(), 'mime.types')
+        cert_file = self._filesystem.join(
+            self._port_obj.apache_config_directory(), 'webkit-httpd.pem')
         inspector_sources_dir = self._port_obj.inspector_build_directory()
         generated_sources_dir = self._port_obj.generated_sources_directory()
         php_ini_dir = self._filesystem.join(test_dir, "http", "conf")
 
-        self._access_log_path = self._filesystem.join(output_dir, 'access_log.txt')
-        self._error_log_path = self._filesystem.join(output_dir, 'error_log.txt')
+        self._access_log_path = self._filesystem.join(output_dir,
+                                                      'access_log.txt')
+        self._error_log_path = self._filesystem.join(output_dir,
+                                                     'error_log.txt')
 
         self._is_win = self._port_obj.host.platform.is_win()
 
@@ -80,6 +94,7 @@
         assert self._filesystem.exists(generated_sources_dir), \
             "'%s' does not exist." % generated_sources_dir
 
+        # yapf: disable
         start_cmd = [
             executable,
             '-f', '%s' % self._port_obj.path_to_apache_config_file(),
@@ -111,16 +126,23 @@
             '-c', 'SSLCertificateFile "%s"' % cert_file,
             '-c', 'DefaultType None',
         ]
+        # yapf: enable
 
         if self._is_win:
-            start_cmd += ['-c', 'ThreadsPerChild %d' % (self._number_of_servers * 8)]
+            start_cmd += [
+                '-c',
+                'ThreadsPerChild %d' % (self._number_of_servers * 8)
+            ]
         else:
-            start_cmd += ['-c', 'StartServers %d' % self._number_of_servers,
-                          '-c', 'MinSpareServers %d' % self._number_of_servers,
-                          '-c', 'MaxSpareServers %d' % self._number_of_servers,
-                          '-C', 'User "%s"' % self._port_obj.host.environ.get('USERNAME',
-                                                                              self._port_obj.host.environ.get('USER', '')),
-                          '-k', 'start']
+            start_cmd += [
+                '-c',
+                'StartServers %d' % self._number_of_servers, '-c',
+                'MinSpareServers %d' % self._number_of_servers, '-c',
+                'MaxSpareServers %d' % self._number_of_servers, '-C',
+                'User "%s"' % self._port_obj.host.environ.get(
+                    'USERNAME', self._port_obj.host.environ.get('USER', '')),
+                '-k', 'start'
+            ]
 
         if self._port_obj.http_server_requires_http_protocol_options_unsafe():
             start_cmd += ['-c', 'HttpProtocolOptions Unsafe']
@@ -152,26 +174,36 @@
         if additional_dirs:
             self._start_cmd = start_cmd
             for alias, path in additional_dirs.iteritems():
-                start_cmd += ['-c', 'Alias %s "%s"' % (alias, path),
-                              # Disable CGI handler for additional dirs.
-                              '-c', '<Location %s>' % alias,
-                              '-c', 'RemoveHandler .cgi .pl',
-                              '-c', '</Location>']
+                start_cmd += [
+                    '-c',
+                    'Alias %s "%s"' % (alias, path),
+                    # Disable CGI handler for additional dirs.
+                    '-c',
+                    '<Location %s>' % alias,
+                    '-c',
+                    'RemoveHandler .cgi .pl',
+                    '-c',
+                    '</Location>'
+                ]
 
         self._start_cmd = start_cmd
 
     def _spawn_process(self):
-        _log.debug('Starting %s server, cmd="%s"', self._name, str(self._start_cmd))
+        _log.debug('Starting %s server, cmd="%s"', self._name,
+                   str(self._start_cmd))
         self._process = self._executive.popen(self._start_cmd)
         retval = self._process.returncode
         if retval:
-            raise server_base.ServerError('Failed to start %s: %s' % (self._name, retval))
+            raise server_base.ServerError(
+                'Failed to start %s: %s' % (self._name, retval))
 
         # For some reason apache isn't guaranteed to have created the pid file before
         # the process exits, so we wait a little while longer.
-        if not self._wait_for_action(lambda: self._filesystem.exists(self._pid_file)):
+        if not self._wait_for_action(
+                lambda: self._filesystem.exists(self._pid_file)):
             self._log_errors_from_subprocess()
-            raise server_base.ServerError('Failed to start %s: no pid file found' % self._name)
+            raise server_base.ServerError(
+                'Failed to start %s: no pid file found' % self._name)
 
         return int(self._filesystem.read_text_file(self._pid_file))
 
@@ -189,18 +221,22 @@
             self._executive.kill_process(self._pid)
             return
 
-        proc = self._executive.popen([self._port_obj.path_to_apache(),
-                                      '-f', self._port_obj.path_to_apache_config_file(),
-                                      '-C', 'ServerRoot "%s"' % self._port_obj.apache_server_root(),
-                                      '-c', 'PidFile "%s"' % self._pid_file,
-                                      '-k', 'stop'])
+        proc = self._executive.popen([
+            self._port_obj.path_to_apache(), '-f',
+            self._port_obj.path_to_apache_config_file(), '-C',
+            'ServerRoot "%s"' % self._port_obj.apache_server_root(), '-c',
+            'PidFile "%s"' % self._pid_file, '-k', 'stop'
+        ])
         _, err = proc.communicate()
         retval = proc.returncode
         if retval or (err and len(err)):
-            raise server_base.ServerError('Failed to stop %s: %s %s' % (self._name, err))
+            raise server_base.ServerError(
+                'Failed to stop %s: %s %s' % (self._name, err))
 
         # For some reason apache isn't guaranteed to have actually stopped after
         # the stop command returns, so we wait a little while longer for the
         # pid file to be removed.
-        if not self._wait_for_action(lambda: not self._filesystem.exists(self._pid_file)):
-            raise server_base.ServerError('Failed to stop %s: pid file still exists' % self._name)
+        if not self._wait_for_action(
+                lambda: not self._filesystem.exists(self._pid_file)):
+            raise server_base.ServerError(
+                'Failed to stop %s: pid file still exists' % self._name)
diff --git a/third_party/blink/tools/blinkpy/web_tests/servers/apache_http_unittest.py b/third_party/blink/tools/blinkpy/web_tests/servers/apache_http_unittest.py
index 6fd29f1..74f15b3 100644
--- a/third_party/blink/tools/blinkpy/web_tests/servers/apache_http_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/servers/apache_http_unittest.py
@@ -37,7 +37,6 @@
 
 
 class TestApacheHTTP(unittest.TestCase):
-
     def test_start_cmd(self):
         # Fails on win - see https://bugs.webkit.org/show_bug.cgi?id=84726
         if sys.platform == 'win32':
@@ -50,13 +49,16 @@
         host = MockHost()
         host.executive = MockExecutive(should_log=True)
         test_port = test.TestPort(host)
-        host.filesystem.write_text_file(test_port.path_to_apache_config_file(), '')
+        host.filesystem.write_text_file(test_port.path_to_apache_config_file(),
+                                        '')
         output_dir = '/mock/output_dir'
         host.filesystem.maybe_make_directory(output_dir)
-        host.filesystem.maybe_make_directory('/mock-checkout/out/Release/resources/inspector')
+        host.filesystem.maybe_make_directory(
+            '/mock-checkout/out/Release/resources/inspector')
         host.filesystem.maybe_make_directory('/mock-checkout/out/Release/gen')
 
-        server = ApacheHTTP(test_port, output_dir, additional_dirs=[], number_of_servers=4)
+        server = ApacheHTTP(
+            test_port, output_dir, additional_dirs=[], number_of_servers=4)
         server._check_that_all_ports_are_available = lambda: True
         server._is_server_running_on_all_ports = lambda: True
         server._wait_for_action = fake_pid
diff --git a/third_party/blink/tools/blinkpy/web_tests/servers/cli_wrapper.py b/third_party/blink/tools/blinkpy/web_tests/servers/cli_wrapper.py
index c7d54cb..c90bbe7 100644
--- a/third_party/blink/tools/blinkpy/web_tests/servers/cli_wrapper.py
+++ b/third_party/blink/tools/blinkpy/web_tests/servers/cli_wrapper.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """A utility module for making standalone scripts to start servers.
 
 Scripts in tools/ can use this module to start servers that are normally used
@@ -43,7 +42,6 @@
 from blinkpy.web_tests.port.factory import python_server_options
 from blinkpy.web_tests.port.base import ARTIFACTS_SUB_DIR
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -60,25 +58,36 @@
     return option, args
 
 
-def main(server_constructor, sleep_fn=None, argv=None, description=None, **kwargs):
+def main(server_constructor,
+         sleep_fn=None,
+         argv=None,
+         description=None,
+         **kwargs):
     host = Host()
     # Signals will interrupt sleep, so we can use a long duration.
     sleep_fn = sleep_fn or (lambda: host.sleep(10))
 
-    parser = optparse.OptionParser(description=description, formatter=RawTextHelpFormatter())
-    parser.add_option('--output-dir', type=str, default=None,
-                      help='output directory, for log files etc.')
-    parser.add_option('-v', '--verbose', action='store_true', help='print debug logs')
+    parser = optparse.OptionParser(
+        description=description, formatter=RawTextHelpFormatter())
+    parser.add_option(
+        '--output-dir',
+        type=str,
+        default=None,
+        help='output directory, for log files etc.')
+    parser.add_option(
+        '-v', '--verbose', action='store_true', help='print debug logs')
     for opt in configuration_options():
         parser.add_option(opt)
     options, _ = parser.parse_args(argv)
 
-    configure_logging(logging_level=logging.DEBUG if options.verbose else logging.INFO,
-                      include_time=options.verbose)
+    configure_logging(
+        logging_level=logging.DEBUG if options.verbose else logging.INFO,
+        include_time=options.verbose)
 
     port_obj = host.port_factory.get(options=options)
     if not options.output_dir:
-        options.output_dir = host.filesystem.join(port_obj.default_results_directory(), ARTIFACTS_SUB_DIR)
+        options.output_dir = host.filesystem.join(
+            port_obj.default_results_directory(), ARTIFACTS_SUB_DIR)
 
     # Create the output directory if it doesn't already exist.
     host.filesystem.maybe_make_directory(options.output_dir)
diff --git a/third_party/blink/tools/blinkpy/web_tests/servers/cli_wrapper_unittest.py b/third_party/blink/tools/blinkpy/web_tests/servers/cli_wrapper_unittest.py
index cc9136f8..b1585aa 100644
--- a/third_party/blink/tools/blinkpy/web_tests/servers/cli_wrapper_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/servers/cli_wrapper_unittest.py
@@ -8,7 +8,6 @@
 
 
 class MockServer(object):
-
     def __init__(self, *args, **kwargs):
         self.args = args
         self.kwargs = kwargs
@@ -23,7 +22,6 @@
 
 
 class CliWrapperTest(unittest.TestCase):
-
     def setUp(self):
         self.server = None
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/servers/pywebsocket.py b/third_party/blink/tools/blinkpy/web_tests/servers/pywebsocket.py
index d970e65f..c312e8a 100644
--- a/third_party/blink/tools/blinkpy/web_tests/servers/pywebsocket.py
+++ b/third_party/blink/tools/blinkpy/web_tests/servers/pywebsocket.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """A class to help start/stop the PyWebSocket server as used by the web tests."""
 
 import os
@@ -35,29 +34,33 @@
 from blinkpy.common.path_finder import PathFinder
 from blinkpy.web_tests.servers import server_base
 
-
 _WS_LOG_PREFIX = 'pywebsocket.ws.log-'
 
 _DEFAULT_WS_PORT = 8880
 
 
 class PyWebSocket(server_base.ServerBase):
-
     def __init__(self, port_obj, output_dir, python_executable=sys.executable):
         super(PyWebSocket, self).__init__(port_obj, output_dir)
         self._name = 'pywebsocket'
-        self._log_prefixes = (_WS_LOG_PREFIX,)
+        self._log_prefixes = (_WS_LOG_PREFIX, )
         self._mappings = [{'port': _DEFAULT_WS_PORT, 'scheme': 'ws'}]
-        self._pid_file = self._filesystem.join(self._runtime_path, '%s.pid' % self._name)
+        self._pid_file = self._filesystem.join(self._runtime_path,
+                                               '%s.pid' % self._name)
 
         self._port = _DEFAULT_WS_PORT
         self._web_tests = self._port_obj.web_tests_dir()
-        self._web_socket_tests = self._filesystem.join(self._web_tests, 'http', 'tests', 'websocket')
+        self._web_socket_tests = self._filesystem.join(self._web_tests, 'http',
+                                                       'tests', 'websocket')
         time_str = time.strftime('%d%b%Y-%H%M%S')
         log_file_name = _WS_LOG_PREFIX + time_str
-        self._error_log = self._filesystem.join(self._output_dir, log_file_name + '-err.txt')
-        pywebsocket_base = PathFinder(self._filesystem).path_from_chromium_base('third_party', 'pywebsocket3', 'src')
-        pywebsocket_script = self._filesystem.join(pywebsocket_base, 'mod_pywebsocket', 'standalone.py')
+        self._error_log = self._filesystem.join(self._output_dir,
+                                                log_file_name + '-err.txt')
+        pywebsocket_base = PathFinder(
+            self._filesystem).path_from_chromium_base('third_party',
+                                                      'pywebsocket3', 'src')
+        pywebsocket_script = self._filesystem.join(
+            pywebsocket_base, 'mod_pywebsocket', 'standalone.py')
 
         self._start_cmd = [
             python_executable,
@@ -80,4 +83,5 @@
         ]
         # TODO(burnik): Check if this is really needed (and why). If not, just set PYTHONPATH.
         self._env = self._port_obj.setup_environ_for_server()
-        self._env['PYTHONPATH'] = (pywebsocket_base + os.pathsep + self._env.get('PYTHONPATH', ''))
+        self._env['PYTHONPATH'] = (
+            pywebsocket_base + os.pathsep + self._env.get('PYTHONPATH', ''))
diff --git a/third_party/blink/tools/blinkpy/web_tests/servers/server_base.py b/third_party/blink/tools/blinkpy/web_tests/servers/server_base.py
index c56eba4a..0a317303 100644
--- a/third_party/blink/tools/blinkpy/web_tests/servers/server_base.py
+++ b/third_party/blink/tools/blinkpy/web_tests/servers/server_base.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Base class used to start servers used by the web tests."""
 
 import errno
@@ -33,7 +32,6 @@
 import socket
 import tempfile
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -91,7 +89,8 @@
         # Stop any stale servers left over from previous instances.
         if self._filesystem.exists(self._pid_file):
             try:
-                self._pid = int(self._filesystem.read_text_file(self._pid_file))
+                self._pid = int(
+                    self._filesystem.read_text_file(self._pid_file))
                 _log.debug('stale %s pid file, pid %d', self._name, self._pid)
                 self._stop_running_server()
             except (ValueError, UnicodeDecodeError):
@@ -106,7 +105,8 @@
         self._pid = self._spawn_process()
 
         if self._wait_for_action(self._is_server_running_on_all_ports):
-            _log.debug('%s successfully started (pid = %d)', self._name, self._pid)
+            _log.debug('%s successfully started (pid = %d)', self._name,
+                       self._pid)
         else:
             self._log_errors_from_subprocess()
             self._stop_running_server()
@@ -118,7 +118,8 @@
         try:
             if self._filesystem.exists(self._pid_file):
                 try:
-                    actual_pid = int(self._filesystem.read_text_file(self._pid_file))
+                    actual_pid = int(
+                        self._filesystem.read_text_file(self._pid_file))
                 except (ValueError, UnicodeDecodeError):
                     # These could be raised if the pid file is corrupt.
                     pass
@@ -129,7 +130,8 @@
                 return
 
             if not actual_pid:
-                _log.warning('Failed to stop %s: pid file is missing', self._name)
+                _log.warning('Failed to stop %s: pid file is missing',
+                             self._name)
                 return
             if self._pid != actual_pid:
                 _log.warning('Failed to stop %s: pid file contains %d, not %d',
@@ -139,7 +141,8 @@
                 self._pid = None
                 return
 
-            _log.debug('Attempting to shut down %s server at pid %d', self._name, self._pid)
+            _log.debug('Attempting to shut down %s server at pid %d',
+                       self._name, self._pid)
             self._stop_running_server()
             _log.debug('%s server at pid %d stopped', self._name, self._pid)
             self._pid = None
@@ -163,15 +166,17 @@
             try:
                 self._remove_log_files(self._output_dir, log_prefix)
             except OSError:
-                _log.warning('Failed to remove old %s %s files', self._name, log_prefix)
+                _log.warning('Failed to remove old %s %s files', self._name,
+                             log_prefix)
 
     def _spawn_process(self):
         _log.debug('Starting %s server, cmd="%s"', self._name, self._start_cmd)
-        self._process = self._executive.popen(self._start_cmd,
-                                              env=self._env,
-                                              cwd=self._cwd,
-                                              stdout=self._stdout,
-                                              stderr=self._stderr)
+        self._process = self._executive.popen(
+            self._start_cmd,
+            env=self._env,
+            cwd=self._cwd,
+            stdout=self._stdout,
+            stderr=self._stderr)
         pid = self._process.pid
         self._filesystem.write_text_file(self._pid_file, str(pid))
         return pid
@@ -205,7 +210,8 @@
     def _log_errors_from_subprocess(self):
         _log.error('logging %s errors, if any', self._name)
         if self._process:
-            _log.error('%s returncode %s', self._name, str(self._process.returncode))
+            _log.error('%s returncode %s', self._name,
+                       str(self._process.returncode))
             if self._process.stderr:
                 stderr_text = self._process.stderr.read()
                 if stderr_text:
@@ -218,10 +224,13 @@
                 _log.error('%s no stderr handle', self._name)
         else:
             _log.error('%s no process', self._name)
-        if self._error_log_path and self._filesystem.exists(self._error_log_path):
-            error_log_text = self._filesystem.read_text_file(self._error_log_path)
+        if self._error_log_path and self._filesystem.exists(
+                self._error_log_path):
+            error_log_text = self._filesystem.read_text_file(
+                self._error_log_path)
             if error_log_text:
-                _log.error('%s error log (%s) contents:', self._name, self._error_log_path)
+                _log.error('%s error log (%s) contents:', self._name,
+                           self._error_log_path)
                 for line in error_log_text.splitlines():
                     _log.error('  %s', line)
             else:
@@ -247,7 +256,8 @@
         """Returns whether the server is running on all the desired ports."""
 
         # TODO(dpranke): crbug/378444 maybe pid is unreliable on win?
-        if not self._platform.is_win() and not self._executive.check_running_pid(self._pid):
+        if (not self._platform.is_win()
+                and not self._executive.check_running_pid(self._pid)):
             _log.debug("Server isn't running at all")
             self._log_errors_from_subprocess()
             raise ServerError('Server exited')
@@ -262,7 +272,8 @@
             except IOError as error:
                 if error.errno not in (errno.ECONNREFUSED, errno.ECONNRESET):
                     raise
-                _log.debug('Server NOT running on %s://localhost:%d : %s', scheme, port, error)
+                _log.debug('Server NOT running on %s://localhost:%d : %s',
+                           scheme, port, error)
                 return False
             finally:
                 s.close()
@@ -279,7 +290,8 @@
             except IOError as error:
                 if error.errno in (errno.EALREADY, errno.EADDRINUSE):
                     raise ServerError('Port %d is already in use.' % port)
-                elif self._platform.is_win() and error.errno in (errno.WSAEACCES,):  # pylint: disable=no-member
+                elif self._platform.is_win() and error.errno in (
+                        errno.WSAEACCES, ):  # pylint: disable=no-member
                     raise ServerError('Port %d is already in use.' % port)
                 else:
                     raise
diff --git a/third_party/blink/tools/blinkpy/web_tests/servers/server_base_unittest.py b/third_party/blink/tools/blinkpy/web_tests/servers/server_base_unittest.py
index 5292415a..e915cb3 100644
--- a/third_party/blink/tools/blinkpy/web_tests/servers/server_base_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/servers/server_base_unittest.py
@@ -34,7 +34,6 @@
 
 
 class TestServerBase(unittest.TestCase):
-
     def test_corrupt_pid_file(self):
         # This tests that if the pid file is corrupt or invalid,
         # both start() and stop() deal with it correctly and delete the file.
diff --git a/third_party/blink/tools/blinkpy/web_tests/servers/wptserve.py b/third_party/blink/tools/blinkpy/web_tests/servers/wptserve.py
index 01261e4..1985b6e1 100644
--- a/third_party/blink/tools/blinkpy/web_tests/servers/wptserve.py
+++ b/third_party/blink/tools/blinkpy/web_tests/servers/wptserve.py
@@ -1,7 +1,6 @@
 # Copyright 2015 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.
-
 """Start and stop the WPTserve servers as they're used by the web tests."""
 
 import datetime
@@ -11,12 +10,10 @@
 from blinkpy.common.path_finder import PathFinder
 from blinkpy.web_tests.servers import server_base
 
-
 _log = logging.getLogger(__name__)
 
 
 class WPTServe(server_base.ServerBase):
-
     def __init__(self, port_obj, output_dir):
         super(WPTServe, self).__init__(port_obj, output_dir)
         # These ports must match wpt_support/wpt.config.json
@@ -24,11 +21,24 @@
         ws_port, wss_port = (9001, 9444)
         self._name = 'wptserve'
         self._log_prefixes = ('wptserve_stderr', )
-        self._mappings = [{'port': http_port, 'scheme': 'http'},
-                          {'port': http_alt_port, 'scheme': 'http'},
-                          {'port': https_port, 'scheme': 'https', 'sslcert': True},
-                          {'port': ws_port, 'scheme': 'ws'},
-                          {'port': wss_port, 'scheme': 'wss', 'sslcert': True}]
+        self._mappings = [{
+            'port': http_port,
+            'scheme': 'http'
+        }, {
+            'port': http_alt_port,
+            'scheme': 'http'
+        }, {
+            'port': https_port,
+            'scheme': 'https',
+            'sslcert': True
+        }, {
+            'port': ws_port,
+            'scheme': 'ws'
+        }, {
+            'port': wss_port,
+            'scheme': 'wss',
+            'sslcert': True
+        }]
 
         # TODO(burnik): We can probably avoid PID files for WPT in the future.
         fs = self._filesystem
@@ -36,16 +46,20 @@
         self._config_file = fs.join(self._runtime_path, 'wpt.config.json')
 
         finder = PathFinder(fs)
-        path_to_pywebsocket = finder.path_from_chromium_base('third_party', 'pywebsocket3', 'src')
-        self.path_to_wpt_support = finder.path_from_blink_tools('blinkpy', 'third_party', 'wpt')
+        path_to_pywebsocket = finder.path_from_chromium_base(
+            'third_party', 'pywebsocket3', 'src')
+        self.path_to_wpt_support = finder.path_from_blink_tools(
+            'blinkpy', 'third_party', 'wpt')
         path_to_wpt_root = fs.join(self.path_to_wpt_support, 'wpt')
-        path_to_wpt_tests = fs.abspath(fs.join(self._port_obj.web_tests_dir(), 'external', 'wpt'))
-        path_to_ws_handlers = fs.join(path_to_wpt_tests, 'websockets', 'handlers')
+        path_to_wpt_tests = fs.abspath(
+            fs.join(self._port_obj.web_tests_dir(), 'external', 'wpt'))
+        path_to_ws_handlers = fs.join(path_to_wpt_tests, 'websockets',
+                                      'handlers')
         wpt_script = fs.join(path_to_wpt_root, 'wpt')
-        start_cmd = [self._port_obj.host.executable,
-                     '-u', wpt_script, 'serve',
-                     '--config', self._config_file,
-                     '--doc_root', path_to_wpt_tests]
+        start_cmd = [
+            self._port_obj.host.executable, '-u', wpt_script, 'serve',
+            '--config', self._config_file, '--doc_root', path_to_wpt_tests
+        ]
 
         # Some users (e.g. run_webdriver_tests.py) do not need WebSocket
         # handlers, so we only add the flag if the directory exists.
@@ -58,22 +72,25 @@
         self._env.update({'PYTHONPATH': path_to_pywebsocket})
         self._start_cmd = start_cmd
 
-        self._error_log_path = self._filesystem.join(output_dir, 'wptserve_stderr.txt')
+        self._error_log_path = self._filesystem.join(output_dir,
+                                                     'wptserve_stderr.txt')
 
         expiration_date = datetime.date(2025, 1, 4)
         if datetime.date.today() > expiration_date - datetime.timedelta(30):
             _log.error(
                 'Pre-generated keys and certificates are going to be expired at %s.'
-                ' Please re-generate them by following steps in %s/README.chromium.', expiration_date.strftime('%b %d %Y'),
-                self.path_to_wpt_support)
+                ' Please re-generate them by following steps in %s/README.chromium.',
+                expiration_date.strftime('%b %d %Y'), self.path_to_wpt_support)
 
     def _prepare_config(self):
         fs = self._filesystem
         template_path = fs.join(self.path_to_wpt_support, 'wpt.config.json')
         config = json.loads(fs.read_text_file(template_path))
         config['aliases'].append({
-            'url-path': '/gen/',
-            'local-dir': self._port_obj.generated_sources_directory()
+            'url-path':
+            '/gen/',
+            'local-dir':
+            self._port_obj.generated_sources_directory()
         })
 
         with fs.open_text_file_for_writing(self._config_file) as f:
diff --git a/third_party/blink/tools/blinkpy/web_tests/servers/wptserve_unittest.py b/third_party/blink/tools/blinkpy/web_tests/servers/wptserve_unittest.py
index 59680b1f..48fd4fec 100644
--- a/third_party/blink/tools/blinkpy/web_tests/servers/wptserve_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/servers/wptserve_unittest.py
@@ -12,15 +12,13 @@
 
 
 class TestWPTServe(LoggingTestCase):
-
     def setUp(self):
         super(TestWPTServe, self).setUp()
         self.host = MockHost()
         self.port = test.TestPort(self.host)
         self.host.filesystem.write_text_file(
             '/mock-checkout/third_party/blink/tools/blinkpy/third_party/wpt/wpt.config.json',
-            '{"ports": {}, "aliases": []}'
-        )
+            '{"ports": {}, "aliases": []}')
 
     # pylint: disable=protected-access
 
@@ -56,21 +54,23 @@
 
     def test_init_env(self):
         server = WPTServe(self.port, '/foo')
-        self.assertEqual(server._env, {
-            'MOCK_ENVIRON_COPY': '1',
-            'PATH': '/bin:/mock/bin',
-            'PYTHONPATH': '/mock-checkout/third_party/pywebsocket3/src'
-        })
+        self.assertEqual(
+            server._env, {
+                'MOCK_ENVIRON_COPY': '1',
+                'PATH': '/bin:/mock/bin',
+                'PYTHONPATH': '/mock-checkout/third_party/pywebsocket3/src'
+            })
 
     def test_prepare_config(self):
         server = WPTServe(self.port, '/foo')
         server._prepare_config()
-        config = json.loads(self.port._filesystem.read_text_file(server._config_file))
+        config = json.loads(
+            self.port._filesystem.read_text_file(server._config_file))
         self.assertEqual(len(config['aliases']), 1)
-        self.assertDictEqual(
-            config['aliases'][0],
-            {'url-path': '/gen/', 'local-dir': '/mock-checkout/out/Release/gen'}
-        )
+        self.assertDictEqual(config['aliases'][0], {
+            'url-path': '/gen/',
+            'local-dir': '/mock-checkout/out/Release/gen'
+        })
 
     def test_start_with_stale_pid(self):
         # Allow asserting about debug logs.
@@ -98,7 +98,8 @@
             'DEBUG: pid 7 is not running\n',
         ])
         self.assertTrue(logs[-2].startswith('DEBUG: Starting wptserve server'))
-        self.assertEqual(logs[-1], 'DEBUG: wptserve successfully started (pid = 42)\n')
+        self.assertEqual(logs[-1],
+                         'DEBUG: wptserve successfully started (pid = 42)\n')
 
     def test_start_with_unkillable_zombie_process(self):
         # Allow asserting about debug logs.
@@ -123,14 +124,13 @@
         # then give up and just try to start a new process anyway.
         logs = self.logMessages()
         self.assertEqual(len(logs), 44)
-        self.assertEqual(
-            logs[:2],
-            [
-                'DEBUG: stale wptserve pid file, pid 7\n',
-                'DEBUG: pid 7 is running, killing it\n'
-            ])
+        self.assertEqual(logs[:2], [
+            'DEBUG: stale wptserve pid file, pid 7\n',
+            'DEBUG: pid 7 is running, killing it\n'
+        ])
         self.assertTrue(logs[-2].startswith('DEBUG: Starting wptserve server'))
-        self.assertEqual(logs[-1], 'DEBUG: wptserve successfully started (pid = 42)\n')
+        self.assertEqual(logs[-1],
+                         'DEBUG: wptserve successfully started (pid = 42)\n')
 
     def test_stop_running_server_removes_temp_files(self):
         server = WPTServe(self.port, '/foo')
diff --git a/third_party/blink/tools/blinkpy/web_tests/try_flag.py b/third_party/blink/tools/blinkpy/web_tests/try_flag.py
index 083c074..07e0255 100644
--- a/third_party/blink/tools/blinkpy/web_tests/try_flag.py
+++ b/third_party/blink/tools/blinkpy/web_tests/try_flag.py
@@ -1,7 +1,6 @@
 # Copyright 2017 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-
 """Triggers and processes results from flag try jobs.
 
 For more information, see: http://bit.ly/flag-try-jobs
@@ -16,7 +15,6 @@
 from blinkpy.web_tests.models.test_configuration import TestConfiguration
 from blinkpy.web_tests.models.typ_types import Expectation, TestExpectations, ResultType
 
-
 # TODO(skobes): use blinkpy/config/builders.json instead of hardcoding these.
 BUILDER_CONFIGS = {
     'linux-rel': TestConfiguration('Linux', '', 'release'),
@@ -32,7 +30,6 @@
 
 
 class TryFlag(object):
-
     def __init__(self, argv, host, git_cl):
         self._args = parse_args(argv)
         self._host = host
@@ -66,26 +63,35 @@
         content = self._filesystem.read_text_file(path)
         test_expectations = TestExpectations()
         test_expectations.parse_tagged_list(content)
-        return {test_name for test_name in test_expectations.individual_exps.keys()}
+        return {
+            test_name
+            for test_name in test_expectations.individual_exps.keys()
+        }
 
     def trigger(self):
         self._force_flag_for_test_runner()
         if self._args.regenerate:
             self._clear_expectations()
-        self._git_cl.run(['upload', '--bypass-hooks', '-f',
-                          '-m', 'Flag try job for %s.' % self._args.flag])
+        self._git_cl.run([
+            'upload', '--bypass-hooks', '-f', '-m',
+            'Flag try job for %s.' % self._args.flag
+        ])
         for builder in sorted(BUILDER_BUCKETS):
             bucket = BUILDER_BUCKETS[builder]
             self._git_cl.trigger_try_jobs([builder], bucket)
 
     def _create_expectation_line(self, result, test_configuration):
-        expected_results = set([res for res in result.actual_results().split()])
+        expected_results = set(
+            [res for res in result.actual_results().split()])
         tag = test_configuration.version
         reason = ''
         if self._args.bug:
             reason = 'crbug.com/' + self._args.bug
         return Expectation(
-            test=result.test_name(), results=expected_results, tags=set([tag]), reason=reason)
+            test=result.test_name(),
+            results=expected_results,
+            tags=set([tag]),
+            reason=reason)
 
     def _process_result(self, build, result):
         if not result.did_run_as_expected():
@@ -96,12 +102,14 @@
     def update(self):
         self._host.print_('Fetching results...')
         # TODO: Get jobs from the _tryflag branch. Current branch for now.
-        jobs = self._git_cl.latest_try_jobs(builder_names=BUILDER_CONFIGS.keys())
+        jobs = self._git_cl.latest_try_jobs(
+            builder_names=BUILDER_CONFIGS.keys())
         results_fetcher = self._host.results_fetcher
         for build in sorted(jobs):
-            self._host.print_('-- %s: %s/results.html' % (
-                BUILDER_CONFIGS[build.builder_name].version,
-                results_fetcher.results_url(build.builder_name, build.build_number)))
+            self._host.print_('-- %s: %s/results.html' %
+                              (BUILDER_CONFIGS[build.builder_name].version,
+                               results_fetcher.results_url(
+                                   build.builder_name, build.build_number)))
             results = results_fetcher.fetch_results(build, True)
             results.for_each_test(
                 lambda result, b=build: self._process_result(b, result))
@@ -143,10 +151,14 @@
         formatter_class=argparse.RawDescriptionHelpFormatter)
     parser.add_argument('action', help='"trigger" or "update"')
     parser.add_argument('--bug', help='crbug number for expectation lines')
-    parser.add_argument('--flag', required=True,
-                        help='flag to force-enable in run_web_tests.py')
-    parser.add_argument('--regenerate', action='store_true',
-                        help='clear the flag expectations before triggering')
+    parser.add_argument(
+        '--flag',
+        required=True,
+        help='flag to force-enable in run_web_tests.py')
+    parser.add_argument(
+        '--regenerate',
+        action='store_true',
+        help='clear the flag expectations before triggering')
     return parser.parse_args(argv)
 
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/try_flag_unittest.py b/third_party/blink/tools/blinkpy/web_tests/try_flag_unittest.py
index 6f42ff4a..a58b8be 100644
--- a/third_party/blink/tools/blinkpy/web_tests/try_flag_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/try_flag_unittest.py
@@ -14,7 +14,6 @@
 
 
 class TryFlagTest(unittest.TestCase):
-
     def __init__(self, *args, **kwargs):
         self.linux_build = Build('linux-rel', 100)
         self.mac_build = Build('mac-rel', 101)
@@ -43,7 +42,9 @@
         TryFlag(cmd, host, git_cl).run()
 
         expected_added_paths = {flag_file}
-        expected_commits = [['Flag try job: force --foo for run_web_tests.py.']]
+        expected_commits = [[
+            'Flag try job: force --foo for run_web_tests.py.'
+        ]]
 
         if regenerate:
             expected_added_paths.add(flag_expectations_file)
@@ -53,70 +54,74 @@
         self.assertEqual(git.added_paths, expected_added_paths)
         self.assertEqual(git.local_commits(), expected_commits)
 
-        self.assertEqual(git_cl.calls, [
-            ['git', 'cl', 'upload', '--bypass-hooks', '-f',
-             '-m', 'Flag try job for --foo.'],
-            ['git', 'cl', 'try', '-B', 'luci.chromium.try',
-             '-b', 'linux-rel'],
-            ['git', 'cl', 'try', '-B', 'luci.chromium.try',
-             '-b', 'mac-rel'],
-            ['git', 'cl', 'try', '-B', 'luci.chromium.try',
-             '-b', 'win7-rel']
-        ])
+        self.assertEqual(git_cl.calls, [[
+            'git', 'cl', 'upload', '--bypass-hooks', '-f', '-m',
+            'Flag try job for --foo.'
+        ], [
+            'git', 'cl', 'try', '-B', 'luci.chromium.try', '-b', 'linux-rel'
+        ], [
+            'git', 'cl', 'try', '-B', 'luci.chromium.try', '-b', 'mac-rel'
+        ], ['git', 'cl', 'try', '-B', 'luci.chromium.try', '-b', 'win7-rel']])
 
     def test_trigger(self):
         self._run_trigger_test(regenerate=False)
         self._run_trigger_test(regenerate=True)
 
     def _setup_mock_results(self, results_fetcher):
-        results_fetcher.set_results(self.linux_build, WebTestResults({
-            'tests': {
-                'something': {
-                    'fail-everywhere.html': {
-                        'expected': 'FAIL',
-                        'actual': 'FAIL',
-                        'is_unexpected': True
-                    },
-                    'fail-win-and-linux.html': {
-                        'expected': 'FAIL',
-                        'actual': 'FAIL',
-                        'is_unexpected': True
+        results_fetcher.set_results(
+            self.linux_build,
+            WebTestResults({
+                'tests': {
+                    'something': {
+                        'fail-everywhere.html': {
+                            'expected': 'FAIL',
+                            'actual': 'FAIL',
+                            'is_unexpected': True
+                        },
+                        'fail-win-and-linux.html': {
+                            'expected': 'FAIL',
+                            'actual': 'FAIL',
+                            'is_unexpected': True
+                        }
                     }
                 }
-            }
-        }))
-        results_fetcher.set_results(self.win_build, WebTestResults({
-            'tests': {
-                'something': {
-                    'fail-everywhere.html': {
-                        'expected': 'FAIL',
-                        'actual': 'FAIL',
-                        'is_unexpected': True
-                    },
-                    'fail-win-and-linux.html': {
-                        'expected': 'FAIL',
-                        'actual': 'FAIL',
-                        'is_unexpected': True
+            }))
+        results_fetcher.set_results(
+            self.win_build,
+            WebTestResults({
+                'tests': {
+                    'something': {
+                        'fail-everywhere.html': {
+                            'expected': 'FAIL',
+                            'actual': 'FAIL',
+                            'is_unexpected': True
+                        },
+                        'fail-win-and-linux.html': {
+                            'expected': 'FAIL',
+                            'actual': 'FAIL',
+                            'is_unexpected': True
+                        }
                     }
                 }
-            }
-        }))
-        results_fetcher.set_results(self.mac_build, WebTestResults({
-            'tests': {
-                'something': {
-                    'pass-unexpectedly-mac.html': {
-                        'expected': 'FAIL',
-                        'actual': 'PASS',
-                        'is_unexpected': True
-                    },
-                    'fail-everywhere.html': {
-                        'expected': 'FAIL',
-                        'actual': 'FAIL',
-                        'is_unexpected': True
+            }))
+        results_fetcher.set_results(
+            self.mac_build,
+            WebTestResults({
+                'tests': {
+                    'something': {
+                        'pass-unexpectedly-mac.html': {
+                            'expected': 'FAIL',
+                            'actual': 'PASS',
+                            'is_unexpected': True
+                        },
+                        'fail-everywhere.html': {
+                            'expected': 'FAIL',
+                            'actual': 'FAIL',
+                            'is_unexpected': True
+                        }
                     }
                 }
-            }
-        }))
+            }))
 
     def test_update(self):
         host = MockHost()
@@ -127,7 +132,8 @@
             'FlagExpectations', 'foo')
         filesystem.write_text_file(
             flag_expectations_file,
-            '# results: [ Failure ]\nsomething/pass-unexpectedly-mac.html [ Failure ]')
+            '# results: [ Failure ]\nsomething/pass-unexpectedly-mac.html [ Failure ]'
+        )
 
         self._setup_mock_results(host.results_fetcher)
         cmd = ['update', '--flag=--foo']
@@ -136,29 +142,24 @@
         def results_url(build):
             return '%s/%s/%s/%s/layout-test-results/results.html' % (
                 'https://test-results.appspot.com/data/layout_results',
-                build.builder_name,
-                build.build_number,
-                'blink_web_tests%20%28with%20patch%29'
-            )
-        self.assertEqual(host.stdout.getvalue(), '\n'.join([
-            'Fetching results...',
-            '-- Linux: %s' % results_url(self.linux_build),
-            '-- Mac: %s' % results_url(self.mac_build),
-            '-- Win: %s' % results_url(self.win_build),
-            '',
-            '### 1 unexpected passes:',
-            '',
-            '[ Mac ] something/pass-unexpectedly-mac.html [ Pass ]',
-            '',
-            '### 5 unexpected failures:',
-            '',
-            '[ Linux ] something/fail-everywhere.html [ Failure ]',
-            '[ Mac ] something/fail-everywhere.html [ Failure ]',
-            '[ Win ] something/fail-everywhere.html [ Failure ]',
-            '[ Linux ] something/fail-win-and-linux.html [ Failure ]',
-            '[ Win ] something/fail-win-and-linux.html [ Failure ]',
-            ''
-        ]))
+                build.builder_name, build.build_number,
+                'blink_web_tests%20%28with%20patch%29')
+
+        self.assertEqual(
+            host.stdout.getvalue(), '\n'.join([
+                'Fetching results...',
+                '-- Linux: %s' % results_url(self.linux_build),
+                '-- Mac: %s' % results_url(self.mac_build),
+                '-- Win: %s' % results_url(self.win_build), '',
+                '### 1 unexpected passes:', '',
+                '[ Mac ] something/pass-unexpectedly-mac.html [ Pass ]', '',
+                '### 5 unexpected failures:', '',
+                '[ Linux ] something/fail-everywhere.html [ Failure ]',
+                '[ Mac ] something/fail-everywhere.html [ Failure ]',
+                '[ Win ] something/fail-everywhere.html [ Failure ]',
+                '[ Linux ] something/fail-win-and-linux.html [ Failure ]',
+                '[ Win ] something/fail-win-and-linux.html [ Failure ]', ''
+            ]))
 
     def test_update_irrelevant_unexpected_pass(self):
         host = MockHost()
diff --git a/third_party/blink/tools/blinkpy/web_tests/update_expectations.py b/third_party/blink/tools/blinkpy/web_tests/update_expectations.py
index 6213fd9..8e5611d 100644
--- a/third_party/blink/tools/blinkpy/web_tests/update_expectations.py
+++ b/third_party/blink/tools/blinkpy/web_tests/update_expectations.py
@@ -1,7 +1,6 @@
 # Copyright 2016 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.
-
 """Updates TestExpectations based on results in builder bots.
 
 Scans the TestExpectations file and uses results from actual builder bots runs
@@ -42,40 +41,49 @@
 
 CHROMIUM_BUG_PREFIX = 'crbug.com/'
 
+
 def main(host, bot_test_expectations_factory, argv):
     parser = argparse.ArgumentParser(
         epilog=__doc__, formatter_class=argparse.RawTextHelpFormatter)
-    parser.add_argument('--type',
-                        choices=['flake', 'fail', 'all'],
-                        default='all',
-                        help='type of expectations to update (default: %(default)s)')
-    parser.add_argument('--verbose', '-v',
-                        action='store_true',
-                        default=False,
-                        help='enable more verbose logging')
-    parser.add_argument('--remove-missing',
-                        action='store_true',
-                        default=False,
-                        help='also remove lines if there were no results, '
-                             'e.g. Android-only expectations for tests '
-                             'that are not in SmokeTests')
-    parser.add_argument('--show-results', '-s',
-                        action='store_true',
-                        default=False,
-                        help='Open results dashboard for all removed lines')
+    parser.add_argument(
+        '--type',
+        choices=['flake', 'fail', 'all'],
+        default='all',
+        help='type of expectations to update (default: %(default)s)')
+    parser.add_argument(
+        '--verbose',
+        '-v',
+        action='store_true',
+        default=False,
+        help='enable more verbose logging')
+    parser.add_argument(
+        '--remove-missing',
+        action='store_true',
+        default=False,
+        help='also remove lines if there were no results, '
+        'e.g. Android-only expectations for tests '
+        'that are not in SmokeTests')
+    parser.add_argument(
+        '--show-results',
+        '-s',
+        action='store_true',
+        default=False,
+        help='Open results dashboard for all removed lines')
     args = parser.parse_args(argv)
 
-    logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO, format='%(levelname)s: %(message)s')
+    logging.basicConfig(
+        level=logging.DEBUG if args.verbose else logging.INFO,
+        format='%(levelname)s: %(message)s')
 
     port = host.port_factory.get()
     expectations_file = port.path_to_generic_test_expectations_file()
     if not host.filesystem.isfile(expectations_file):
-        _log.warning("Didn't find generic expectations file at: " + expectations_file)
+        _log.warning("Didn't find generic expectations file at: " +
+                     expectations_file)
         return 1
 
-    remover = ExpectationsRemover(
-        host, port, bot_test_expectations_factory, webbrowser,
-        args.type, args.remove_missing)
+    remover = ExpectationsRemover(host, port, bot_test_expectations_factory,
+                                  webbrowser, args.type, args.remove_missing)
 
     test_expectations = remover.get_updated_test_expectations()
     if args.show_results:
@@ -87,9 +95,13 @@
 
 
 class ExpectationsRemover(object):
-
-    def __init__(self, host, port, bot_test_expectations_factory, browser,
-                 type_flag='all', remove_missing=False):
+    def __init__(self,
+                 host,
+                 port,
+                 bot_test_expectations_factory,
+                 browser,
+                 type_flag='all',
+                 remove_missing=False):
         self._host = host
         self._port = port
         self._expectations_factory = bot_test_expectations_factory
@@ -142,7 +154,8 @@
 
         # Initialize OS version to OS dictionary.
         if not self._version_to_os:
-            for os, os_versions in self._port.configuration_specifier_macros().items():
+            for os, os_versions in \
+                self._port.configuration_specifier_macros().items():
                 for version in os_versions:
                     self._version_to_os[version.lower()] = os.lower()
 
@@ -153,10 +166,15 @@
         configurations = []
         for config in self._port.all_test_configurations():
             if set(expectation.tags).issubset(
-                  set([self._version_to_os[config.version.lower()], config.version.lower(), config.build_type.lower()])):
+                    set([
+                        self._version_to_os[config.version.lower()],
+                        config.version.lower(),
+                        config.build_type.lower()
+                    ])):
                 configurations.append(config)
         for config in configurations:
-            builder_name = self._host.builders.builder_name_for_specifiers(config.version, config.build_type)
+            builder_name = self._host.builders.builder_name_for_specifiers(
+                config.version, config.build_type)
             if not builder_name:
                 _log.debug('No builder with config %s', config)
                 # For many configurations, there is no matching builder in
@@ -168,7 +186,8 @@
             builders_checked.append(builder_name)
 
             if builder_name not in self._builder_results_by_path.keys():
-                _log.error('Failed to find results for builder "%s"', builder_name)
+                _log.error('Failed to find results for builder "%s"',
+                           builder_name)
                 return False
 
             results_by_path = self._builder_results_by_path[builder_name]
@@ -181,10 +200,12 @@
 
             results_for_single_test = set(results_by_path[expectation.test])
             expectations_met = expected_results & results_for_single_test
-            if expectations_met != set([ResultType.Pass]) and expectations_met != set([]):
+            if (expectations_met != set([ResultType.Pass])
+                    and expectations_met != set([])):
                 return False
         if builders_checked:
-            _log.debug('Checked builders:\n  %s', '\n  '.join(builders_checked))
+            _log.debug('Checked builders:\n  %s',
+                       '\n  '.join(builders_checked))
         else:
             _log.warning('No matching builders for line, deleting line.')
         return True
@@ -208,20 +229,20 @@
         """
         builder_results_by_path = {}
         for builder_name in self._host.builders.all_continuous_builder_names():
-            expectations_for_builder = (
-                self._expectations_factory.expectations_for_builder(builder_name)
-            )
+            expectations_for_builder = (self._expectations_factory.
+                                        expectations_for_builder(builder_name))
 
             if not expectations_for_builder:
                 # This is not fatal since we may not need to check these
                 # results. If we do need these results we'll log an error later
                 # when trying to check against them.
-                _log.warning('Downloaded results are missing results for builder "%s"', builder_name)
+                _log.warning(
+                    'Downloaded results are missing results for builder "%s"',
+                    builder_name)
                 continue
 
             builder_results_by_path[builder_name] = (
-                expectations_for_builder.all_results_by_path()
-            )
+                expectations_for_builder.all_results_by_path())
         return builder_results_by_path
 
     def get_updated_test_expectations(self):
@@ -235,9 +256,11 @@
             A TestExpectations object with the passing lines filtered out.
         """
         generic_exp_path = self._port.path_to_generic_test_expectations_file()
-        raw_test_expectations = self._host.filesystem.read_text_file(generic_exp_path)
+        raw_test_expectations = self._host.filesystem.read_text_file(
+            generic_exp_path)
         expectations_dict = {generic_exp_path: raw_test_expectations}
-        test_expectations = TestExpectations(port=self._port, expectations_dict=expectations_dict)
+        test_expectations = TestExpectations(
+            port=self._port, expectations_dict=expectations_dict)
         removed_exps = []
         lines = []
 
@@ -246,19 +269,25 @@
             if not exp.test or exp.is_glob:
                 continue
 
-            if  self._can_delete_line(exp):
+            if self._can_delete_line(exp):
                 reason = exp.reason or ''
-                self._bug_numbers.update(
-                    [reason[len(CHROMIUM_BUG_PREFIX):] for reason in reason.split()
-                     if reason.startswith(CHROMIUM_BUG_PREFIX)])
+                self._bug_numbers.update([
+                    reason[len(CHROMIUM_BUG_PREFIX):]
+                    for reason in reason.split()
+                    if reason.startswith(CHROMIUM_BUG_PREFIX)
+                ])
                 self._removed_test_names.add(exp.test)
                 removed_exps.append(exp)
                 _log.info('Deleting line "%s"' % exp.to_string().strip())
 
         if removed_exps:
-            test_expectations.remove_expectations(generic_exp_path, removed_exps)
+            test_expectations.remove_expectations(generic_exp_path,
+                                                  removed_exps)
 
-        return '\n'.join([e.to_string() for e in test_expectations.get_updated_lines(generic_exp_path)])
+        return '\n'.join([
+            e.to_string()
+            for e in test_expectations.get_updated_lines(generic_exp_path)
+        ])
 
     def show_removed_results(self):
         """Opens a browser showing the removed lines in the results dashboard.
@@ -279,13 +308,13 @@
             expectation_type = self._type + ' '
         dashboard_url = self._flakiness_dashboard_url()
         bugs = ', '.join(sorted(self._bug_numbers))
-        message = ('Remove %sTestExpectations which are not failing in the specified way.\n\n'
-                   'This change was made by the update_expectations.py script.\n\n'
-                   'Recent test results history:\n%s\n\n'
-                   'Bug: %s') % (expectation_type, dashboard_url, bugs)
+        message = (
+            'Remove %sTestExpectations which are not failing in the specified way.\n\n'
+            'This change was made by the update_expectations.py script.\n\n'
+            'Recent test results history:\n%s\n\n'
+            'Bug: %s') % (expectation_type, dashboard_url, bugs)
         _log.info('Suggested commit description:\n' + message)
 
     def _flakiness_dashboard_url(self):
         removed_test_names = ','.join(sorted(self._removed_test_names))
         return FlakyTests.FLAKINESS_DASHBOARD_URL % removed_test_names
-
diff --git a/third_party/blink/tools/blinkpy/web_tests/update_expectations_unittest.py b/third_party/blink/tools/blinkpy/web_tests/update_expectations_unittest.py
index e295dbd7..56006e83 100644
--- a/third_party/blink/tools/blinkpy/web_tests/update_expectations_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/update_expectations_unittest.py
@@ -18,7 +18,6 @@
 
 
 class FakeBotTestExpectations(object):
-
     def __init__(self, results_by_path):
         self._results = {}
 
@@ -31,7 +30,6 @@
 
 
 class FakeBotTestExpectationsFactory(object):
-
     def __init__(self):
         """The distinct results seen in at least one run of the test.
 
@@ -54,7 +52,6 @@
 
 
 class FakePortFactory(PortFactory):
-
     def __init__(self, host, all_build_types=None, all_systems=None):
         super(FakePortFactory, self).__init__(host)
         self._all_build_types = all_build_types or ()
@@ -78,7 +75,6 @@
 
 
 class MockWebBrowser(object):
-
     def __init__(self):
         self.opened_url = None
 
@@ -107,25 +103,20 @@
         super(UpdateTestExpectationsTest, self).tearDown()
 
     def _write_tests_into_filesystem(self, filesystem):
-        test_list = ['test/a.html',
-                     'test/b.html',
-                     'test/c.html',
-                     'test/d.html',
-                     'test/e.html',
-                     'test/f.html',
-                     'test/g.html']
+        test_list = [
+            'test/a.html', 'test/b.html', 'test/c.html', 'test/d.html',
+            'test/e.html', 'test/f.html', 'test/g.html'
+        ]
         for test in test_list:
             path = filesystem.join(WEB_TEST_DIR, test)
             filesystem.write_binary_file(path, '')
 
-    def _create_expectations_remover(self, type_flag='all', remove_missing=False):
+    def _create_expectations_remover(self,
+                                     type_flag='all',
+                                     remove_missing=False):
         return ExpectationsRemover(
-            self._host,
-            self._port,
-            self._expectation_factory,
-            self._mock_web_browser,
-            type_flag,
-            remove_missing)
+            self._host, self._port, self._expectation_factory,
+            self._mock_web_browser, type_flag, remove_missing)
 
     def _parse_expectations(self, expectations):
         path = self._port.path_to_generic_test_expectations_file()
@@ -154,16 +145,16 @@
             test/b.html [ Timeout ]
             test/c.html [ Failure Timeout ]""")
 
-        self._expectations_remover = (
-            self._create_expectations_remover(self.FLAKE_TYPE))
+        self._expectations_remover = (self._create_expectations_remover(
+            self.FLAKE_TYPE))
         self._define_builders({
             'WebKit Linux Trusty': {
                 'port_name': 'linux-trusty',
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -178,8 +169,7 @@
         }
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(
-            updated_expectations, test_expectations_before)
+        self.assertEquals(updated_expectations, test_expectations_before)
 
     def test_fail_mode_doesnt_remove_non_fails(self):
         """Tests that lines that aren't failing are not touched.
@@ -187,8 +177,7 @@
         Lines are failing if they contain only 'Failure', 'Timeout', or
         'Crash' results.
         """
-        test_expectations_before = _strip_multiline_string_spaces(
-            """
+        test_expectations_before = _strip_multiline_string_spaces("""
             # results: [ Pass Failure Timeout ]
             # Even though the results show all passing, none of the
             # expectations are failing so we shouldn't remove any.
@@ -202,8 +191,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -216,17 +205,15 @@
                 'test/f.html': ['PASS', 'PASS'],
             }
         }
-        self._expectations_remover = (
-            self._create_expectations_remover(self.FAIL_TYPE))
+        self._expectations_remover = (self._create_expectations_remover(
+            self.FAIL_TYPE))
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(
-            updated_expectations, test_expectations_before)
+        self.assertEquals(updated_expectations, test_expectations_before)
 
     def test_dont_remove_directory_flake(self):
         """Tests that flake lines with directories are untouched."""
-        test_expectations_before = _strip_multiline_string_spaces(
-            """
+        test_expectations_before = _strip_multiline_string_spaces("""
             # results: [ Failure Pass ]
             # This expectation is for a whole directory.
             test/* [ Failure Pass ]""")
@@ -237,8 +224,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -251,17 +238,15 @@
                 'test/f.html': ['PASS', 'PASS'],
             }
         }
-        self._expectations_remover = (
-            self._create_expectations_remover(self.FLAKE_TYPE))
+        self._expectations_remover = (self._create_expectations_remover(
+            self.FLAKE_TYPE))
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(
-            updated_expectations, test_expectations_before)
+        self.assertEquals(updated_expectations, test_expectations_before)
 
     def test_dont_remove_directory_fail(self):
         """Tests that fail lines with directories are untouched."""
-        test_expectations_before = _strip_multiline_string_spaces(
-            """
+        test_expectations_before = _strip_multiline_string_spaces("""
             # results: [ Failure ]
             # This expectation is for a whole directory.
             test/* [ Failure ]""")
@@ -272,8 +257,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -286,12 +271,11 @@
                 'test/f.html': ['PASS', 'PASS'],
             }
         }
-        self._expectations_remover = (
-            self._create_expectations_remover(self.FAIL_TYPE))
+        self._expectations_remover = (self._create_expectations_remover(
+            self.FAIL_TYPE))
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(
-            updated_expectations, test_expectations_before)
+        self.assertEquals(updated_expectations, test_expectations_before)
 
     def test_dont_remove_skip(self):
         """Tests that lines with Skip are untouched.
@@ -300,8 +284,7 @@
         which is indistinguishable from "All Passing" so don't remove since we
         don't know what the results actually are.
         """
-        test_expectations_before = _strip_multiline_string_spaces(
-            """
+        test_expectations_before = _strip_multiline_string_spaces("""
             # results: [ Skip ]
             # Skip expectations should never be removed.
             test/a.html [ Skip ]
@@ -314,8 +297,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -327,8 +310,7 @@
         self._expectations_remover = self._create_expectations_remover()
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(
-            updated_expectations, test_expectations_before)
+        self.assertEquals(updated_expectations, test_expectations_before)
 
     def test_all_failure_result_types(self):
         """Tests that all failure types are treated as failure."""
@@ -349,8 +331,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -366,8 +348,9 @@
         self._expectations_remover = self._create_expectations_remover()
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(updated_expectations, _strip_multiline_string_spaces(
-            """# results: [ Failure Pass ]
+        self.assertEquals(
+            updated_expectations,
+            _strip_multiline_string_spaces("""# results: [ Failure Pass ]
             test/a.html [ Failure Pass ]
             test/b.html [ Failure Pass ]
             test/c.html [ Failure Pass ]
@@ -391,8 +374,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -402,8 +385,8 @@
                 'test/c.html': ['PASS', 'PASS'],
             }
         }
-        self._expectations_remover = (
-            self._create_expectations_remover(self.FAIL_TYPE))
+        self._expectations_remover = (self._create_expectations_remover(
+            self.FAIL_TYPE))
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
         # The line with test/d.html is not removed since
@@ -412,7 +395,7 @@
         self.assertEquals(
             updated_expectations,
             _strip_multiline_string_spaces(
-            """# results: [ Timeout Crash Failure ]
+                """# results: [ Timeout Crash Failure ]
             test/d.html [ Failure ]"""))
 
     def test_basic_one_builder(self):
@@ -440,8 +423,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -456,8 +439,10 @@
         self._expectations_remover = self._create_expectations_remover()
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(updated_expectations, _strip_multiline_string_spaces(
-            """# results: [ Failure Pass Crash Timeout ]
+        self.assertEquals(
+            updated_expectations,
+            _strip_multiline_string_spaces(
+                """# results: [ Failure Pass Crash Timeout ]
             # Keep since we have both crashes and passes.
             test/e.html [ Crash Pass ]"""))
 
@@ -474,8 +459,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -483,12 +468,13 @@
                 'test/a.html': ['FAIL', 'FAIL', 'FAIL'],
             }
         }
-        self._expectations_remover = (
-            self._create_expectations_remover(self.FLAKE_TYPE))
+        self._expectations_remover = (self._create_expectations_remover(
+            self.FLAKE_TYPE))
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(updated_expectations, _strip_multiline_string_spaces(
-            """# results: [ Failure Pass ]
+        self.assertEquals(
+            updated_expectations,
+            _strip_multiline_string_spaces("""# results: [ Failure Pass ]
             # Keep since it's all failures.
             test/a.html [ Failure Pass ]"""))
 
@@ -498,8 +484,7 @@
         Expectations that are failing in a different way than specified should
         be removed, even if there is no passing result.
         """
-        test_expectations_before = (
-            """# results: [ Failure Pass ]
+        test_expectations_before = ("""# results: [ Failure Pass ]
             # Remove all since CRASH and TIMEOUT aren't considered Failure.
             test/a.html [ Failure Pass ]
             test/b.html [ Failure Pass ]
@@ -512,8 +497,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -527,7 +512,8 @@
         self._expectations_remover = self._create_expectations_remover()
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(updated_expectations, ('# results: [ Failure Pass ]'))
+        self.assertEquals(updated_expectations,
+                          ('# results: [ Failure Pass ]'))
 
     def test_empty_test_expectations(self):
         """Running on an empty TestExpectations file outputs an empty file."""
@@ -539,8 +525,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -578,9 +564,8 @@
             },
         })
 
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('mac10.10', 'x86'),
-                                  ('trusty', 'x86_64'))
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('mac10.10', 'x86'), ('trusty', 'x86_64'))
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -604,8 +589,9 @@
         self._expectations_remover = self._create_expectations_remover()
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(updated_expectations, _strip_multiline_string_spaces(
-            """# results: [ Failure Pass ]
+        self.assertEquals(
+            updated_expectations,
+            _strip_multiline_string_spaces("""# results: [ Failure Pass ]
             # Keep these two since they're failing on the Mac builder.
             test/c.html [ Failure Pass ]
             test/d.html [ Failure ]
@@ -653,7 +639,7 @@
                 'specifiers': ['Win7', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
+        self._port.all_build_types = ('release', )
         self._port.all_systems = (
             ('mac10.10', 'x86'),
             ('mac10.11', 'x86'),
@@ -707,7 +693,9 @@
         self._expectations_remover = self._create_expectations_remover()
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(updated_expectations, _strip_multiline_string_spaces("""
+        self.assertEquals(
+            updated_expectations,
+            _strip_multiline_string_spaces("""
             # tags: [ Linux Mac Win Mac ]
             # results: [ Failure Pass ]
             # Keep these two since they're failing in the Mac10.10 results.
@@ -758,8 +746,7 @@
             },
         })
         self._port.all_build_types = ('release', 'debug')
-        self._port.all_systems = (('win7', 'x86'),
-                                  ('trusty', 'x86_64'))
+        self._port.all_systems = (('win7', 'x86'), ('trusty', 'x86_64'))
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -815,8 +802,10 @@
         self._expectations_remover = self._create_expectations_remover()
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(updated_expectations, _strip_multiline_string_spaces(
-            """# Keep these two since they fail in debug.
+        self.assertEquals(
+            updated_expectations,
+            _strip_multiline_string_spaces(
+                """# Keep these two since they fail in debug.
             # tags: [ Linux ]
             # tags: [ Debug Release ]
             # results: [ Failure Pass ]
@@ -852,8 +841,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -868,7 +857,8 @@
         self._expectations_remover = self._create_expectations_remover()
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(updated_expectations, (_strip_multiline_string_spaces("""
+        self.assertEquals(updated_expectations,
+                          (_strip_multiline_string_spaces("""
             # results: [ Failure Pass ]
             # Comment A - Keep since these aren't part of any test.
             # Comment B - Keep since these aren't part of any test.
@@ -907,8 +897,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -942,8 +932,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -953,7 +943,9 @@
             remove_missing=True)
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
-        self.assertEquals(updated_expectations, _strip_multiline_string_spaces("""
+        self.assertEquals(
+            updated_expectations,
+            _strip_multiline_string_spaces("""
             # results: [ Failure Timeout Pass Crash Skip ]
             # A Skip expectation probably won't have any results but we
             # shouldn't consider those passing so this line should remain.
@@ -1031,7 +1023,8 @@
         updated_expectations = (
             self._expectations_remover.get_updated_test_expectations())
         self.assertEquals(
-            updated_expectations, _strip_multiline_string_spaces("""
+            updated_expectations,
+            _strip_multiline_string_spaces("""
             # tags: [ Win Linux ]
             # tags: [ Release ]
             # results: [ Failure Pass ]
@@ -1092,8 +1085,7 @@
         # (3) The first line needs and is missing results for Linux (dbg).
         # (4) The third line needs and is missing results for Win Release.
         self._port.all_build_types = ('release', 'debug')
-        self._port.all_systems = (('win7', 'x86'),
-                                  ('trusty', 'x86_64'))
+        self._port.all_systems = (('win7', 'x86'), ('trusty', 'x86_64'))
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -1144,7 +1136,7 @@
         host.port_factory = FakePortFactory(
             host,
             all_build_types=('release', 'debug'),
-            all_systems=(('trusty', 'x86_64'),))
+            all_systems=(('trusty', 'x86_64'), ))
 
         # Write out a fake TestExpectations file.
         test_expectation_path = (
@@ -1161,9 +1153,7 @@
             test/c.html [ Failure ]
             # Keep since there's a failure on debug bot.
             [ Linux ] test/d.html [ Failure ]""")
-        files = {
-            test_expectation_path: test_expectations
-        }
+        files = {test_expectation_path: test_expectations}
         host.filesystem = MockFileSystem(files)
         self._write_tests_into_filesystem(host.filesystem)
 
@@ -1186,7 +1176,8 @@
 
         main(host, expectation_factory, [])
         self.assertEqual(
-            host.filesystem.files[test_expectation_path], _strip_multiline_string_spaces("""
+            host.filesystem.files[test_expectation_path],
+            _strip_multiline_string_spaces("""
             # tags: [ Linux ]
             # tags: [ Release ]
             # results: [ Failure Pass ]
@@ -1223,7 +1214,8 @@
         self.assertEqual(return_code, 1)
 
         self.assertLog([
-            "WARNING: Didn't find generic expectations file at: %s\n" % test_expectation_path
+            "WARNING: Didn't find generic expectations file at: %s\n" %
+            test_expectation_path
         ])
         self.assertFalse(host.filesystem.isfile(test_expectation_path))
 
@@ -1249,7 +1241,7 @@
         host.port_factory = FakePortFactory(
             host,
             all_build_types=('release', 'debug'),
-            all_systems=(('trusty', 'x86_64'),))
+            all_systems=(('trusty', 'x86_64'), ))
 
         # Write out a fake TestExpectations file.
         test_expectation_path = (
@@ -1260,9 +1252,7 @@
             # results: [ Failure Pass ]
             [ Linux ] test/a.html [ Failure Pass ]"""
 
-        files = {
-            test_expectation_path: test_expectations
-        }
+        files = {test_expectation_path: test_expectations}
         host.filesystem = MockFileSystem(files)
         self._write_tests_into_filesystem(host.filesystem)
 
@@ -1280,7 +1270,8 @@
         main(host, expectation_factory, [])
 
         self.assertTrue(host.filesystem.isfile(test_expectation_path))
-        self.assertEqual(host.filesystem.files[test_expectation_path], """
+        self.assertEqual(
+            host.filesystem.files[test_expectation_path], """
             # Remove since passing on both bots.
             # tags: [ Linux ]
             # results: [ Failure Pass ]""")
@@ -1309,8 +1300,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -1325,8 +1316,8 @@
         self._expectations_remover.get_updated_test_expectations()
         self._expectations_remover.show_removed_results()
         self.assertEqual(
-            FlakyTests.FLAKINESS_DASHBOARD_URL
-                % 'test/a.html,test/b.html,test/d.html',
+            FlakyTests.FLAKINESS_DASHBOARD_URL %
+            'test/a.html,test/b.html,test/d.html',
             self._mock_web_browser.opened_url)
 
     def test_flake_mode_suggested_commit_description(self):
@@ -1347,8 +1338,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -1358,8 +1349,8 @@
                 'test/c.html': ['PASS', 'PASS', 'PASS'],
             }
         }
-        self._expectations_remover = (
-            self._create_expectations_remover(self.FLAKE_TYPE))
+        self._expectations_remover = (self._create_expectations_remover(
+            self.FLAKE_TYPE))
         self._expectations_remover.get_updated_test_expectations()
         self._expectations_remover.print_suggested_commit_description()
         self.assertLog([
@@ -1377,8 +1368,7 @@
     def test_fail_mode_suggested_commit_description(self):
         """Tests display of the suggested commit message.
         """
-        test_expectations_before = (
-            """# Keep since it's not a fail.
+        test_expectations_before = ("""# Keep since it's not a fail.
             # results: [ Failure Pass ]
             crbug.com/1111 test/a.html [ Failure Pass ]
             # Remove since it's passing all runs.
@@ -1390,8 +1380,8 @@
                 'specifiers': ['Trusty', 'Release']
             },
         })
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
@@ -1400,8 +1390,8 @@
                 'test/b.html': ['PASS', 'PASS', 'PASS'],
             }
         }
-        self._expectations_remover = (
-            self._create_expectations_remover(self.FAIL_TYPE))
+        self._expectations_remover = (self._create_expectations_remover(
+            self.FAIL_TYPE))
         self._expectations_remover.get_updated_test_expectations()
         self._expectations_remover.print_suggested_commit_description()
         self.assertLog([
@@ -1418,8 +1408,7 @@
     def test_suggested_commit_description(self):
         """Tests display of the suggested commit message.
         """
-        test_expectations_before = (
-            """
+        test_expectations_before = ("""
             # results: [ Failure Pass Crash Timeout ]
             # Remove this since it's passing all runs.
             crbug.com/1111 test/a.html [ Failure Pass ]
@@ -1437,8 +1426,8 @@
             },
         })
 
-        self._port.all_build_types = ('release',)
-        self._port.all_systems = (('trusty', 'x86_64'),)
+        self._port.all_build_types = ('release', )
+        self._port.all_systems = (('trusty', 'x86_64'), )
 
         self._parse_expectations(test_expectations_before)
         self._expectation_factory.all_results_by_builder = {
diff --git a/third_party/blink/tools/blinkpy/web_tests/views/metered_stream.py b/third_party/blink/tools/blinkpy/web_tests/views/metered_stream.py
index ed0320e..ed834fb 100644
--- a/third_party/blink/tools/blinkpy/web_tests/views/metered_stream.py
+++ b/third_party/blink/tools/blinkpy/web_tests/views/metered_stream.py
@@ -50,7 +50,13 @@
     def _ensure_newline(txt):
         return txt if txt.endswith('\n') else txt + '\n'
 
-    def __init__(self, stream=None, verbose=False, logger=None, time_fn=None, pid=None, number_of_columns=None):
+    def __init__(self,
+                 stream=None,
+                 verbose=False,
+                 logger=None,
+                 time_fn=None,
+                 pid=None,
+                 number_of_columns=None):
         self._stream = stream or sys.stderr
         self._verbose = verbose
         self._time_fn = time_fn or time.time
@@ -97,8 +103,9 @@
             self._erase_last_partial_line()
         if self._verbose:
             now_tuple = time.localtime(now)
-            msg = '%02d:%02d:%02d.%03d %d %s' % (now_tuple.tm_hour, now_tuple.tm_min, now_tuple.tm_sec,
-                                                 int((now * 1000) % 1000), pid, self._ensure_newline(txt))
+            msg = '%02d:%02d:%02d.%03d %d %s' % (
+                now_tuple.tm_hour, now_tuple.tm_min, now_tuple.tm_sec,
+                int((now * 1000) % 1000), pid, self._ensure_newline(txt))
         elif self._isatty:
             msg = txt
         else:
@@ -106,7 +113,8 @@
 
         # This is the easiest way to make sure a byte stream is printable as ascii
         # with all non-ascii characters replaced.
-        uni_msg = msg if isinstance(msg, unicode) else msg.decode('ascii', errors='replace')
+        uni_msg = msg if isinstance(msg, unicode) else msg.decode(
+            'ascii', errors='replace')
         self._stream.write(uni_msg.encode('ascii', errors='replace'))
 
     def writeln(self, txt, now=None, pid=None):
@@ -127,11 +135,11 @@
 
 
 class _LogHandler(logging.Handler):
-
     def __init__(self, meter):
         logging.Handler.__init__(self)
         self._meter = meter
         self.name = LOG_HANDLER_NAME
 
     def emit(self, record):
-        self._meter.writeln(record.getMessage(), record.created, record.process)
+        self._meter.writeln(record.getMessage(), record.created,
+                            record.process)
diff --git a/third_party/blink/tools/blinkpy/web_tests/views/metered_stream_unittest.py b/third_party/blink/tools/blinkpy/web_tests/views/metered_stream_unittest.py
index eb2f098e..3e8290b 100644
--- a/third_party/blink/tools/blinkpy/web_tests/views/metered_stream_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/views/metered_stream_unittest.py
@@ -51,7 +51,8 @@
         # add a dummy time counter for a default behavior.
         self.times = range(10)
 
-        self.meter = MeteredStream(self.stream, self.verbose, self.logger, self.time_fn, 8675)
+        self.meter = MeteredStream(self.stream, self.verbose, self.logger,
+                                   self.time_fn, 8675)
 
     def tearDown(self):
         if self.meter:
@@ -71,7 +72,8 @@
         root_logger.addHandler(handler)
         root_logger.setLevel(logging.DEBUG)
         try:
-            self.meter = MeteredStream(self.stream, self.verbose, None, self.time_fn, 8675)
+            self.meter = MeteredStream(self.stream, self.verbose, None,
+                                       self.time_fn, 8675)
             self.meter.write_throttled_update('foo')
             self.meter.write_update('bar')
             self.meter.write('baz')
@@ -114,20 +116,23 @@
 
     def test_basic(self):
         buflist = self._basic([0, 1, 1.05, 1.1, 2])
-        self.assertEqual(buflist, ['foo',
-                                   MeteredStream._erasure('foo'), 'bar',
-                                   MeteredStream._erasure('bar'), 'baz 2',
-                                   MeteredStream._erasure('baz 2'), 'done\n'])
+        self.assertEqual(buflist, [
+            'foo',
+            MeteredStream._erasure('foo'), 'bar',
+            MeteredStream._erasure('bar'), 'baz 2',
+            MeteredStream._erasure('baz 2'), 'done\n'
+        ])
 
     def test_log_after_update(self):
         buflist = self._log_after_update()
-        self.assertEqual(buflist, ['foo',
-                                   MeteredStream._erasure('foo'), 'bar\n'])
+        self.assertEqual(buflist,
+                         ['foo', MeteredStream._erasure('foo'), 'bar\n'])
 
     def test_bytestream(self):
         self.meter.write('German umlauts: \xe4\xf6\xfc')
         self.meter.write(u'German umlauts: \xe4\xf6\xfc')
-        self.assertEqual(self.buflist, ['German umlauts: ???', 'German umlauts: ???'])
+        self.assertEqual(self.buflist,
+                         ['German umlauts: ???', 'German umlauts: ???'])
 
 
 class VerboseTest(RegularTest):
@@ -149,7 +154,8 @@
         self.assertTrue(re.match(r'\d\d:\d\d:00.000 8675 foo\n', buflist[0]))
 
         # The second argument should have a real timestamp and pid, so we just check the format.
-        self.assertTrue(re.match(r'\d\d:\d\d:\d\d.\d\d\d \d+ bar\n', buflist[1]))
+        self.assertTrue(
+            re.match(r'\d\d:\d\d:\d\d.\d\d\d \d+ bar\n', buflist[1]))
 
         self.assertEqual(len(buflist), 2)
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/views/printing.py b/third_party/blink/tools/blinkpy/web_tests/views/printing.py
index 3d08d17c..c073c58 100644
--- a/third_party/blink/tools/blinkpy/web_tests/views/printing.py
+++ b/third_party/blink/tools/blinkpy/web_tests/views/printing.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Package that handles non-debug, non-file output for run_web_tests.py."""
 
 import logging
@@ -42,16 +41,36 @@
 
 def print_options():
     return [
-        optparse.make_option('--debug-rwt-logging', action='store_true', default=False,
-                             help='print timestamps and debug information for run_web_tests.py itself'),
-        optparse.make_option('--details', action='store_true', default=False,
-                             help='print detailed results for every test'),
-        optparse.make_option('-q', '--quiet', action='store_true', default=False,
-                             help='run quietly (errors, warnings, and progress only)'),
-        optparse.make_option('--timing', action='store_true', default=False,
-                             help='display test times (summary plus per-test w/ --verbose)'),
-        optparse.make_option('-v', '--verbose', action='store_true', default=False,
-                             help='print a summarized result for every test (one line per test)'),
+        optparse.make_option(
+            '--debug-rwt-logging',
+            action='store_true',
+            default=False,
+            help=
+            'print timestamps and debug information for run_web_tests.py itself'
+        ),
+        optparse.make_option(
+            '--details',
+            action='store_true',
+            default=False,
+            help='print detailed results for every test'),
+        optparse.make_option(
+            '-q',
+            '--quiet',
+            action='store_true',
+            default=False,
+            help='run quietly (errors, warnings, and progress only)'),
+        optparse.make_option(
+            '--timing',
+            action='store_true',
+            default=False,
+            help='display test times (summary plus per-test w/ --verbose)'),
+        optparse.make_option(
+            '-v',
+            '--verbose',
+            action='store_true',
+            default=False,
+            help='print a summarized result for every test (one line per test)'
+        ),
     ]
 
 
@@ -64,9 +83,13 @@
         self._host = host
         self._options = options
         logger = logging.getLogger()
-        logger.setLevel(logging.DEBUG if options.debug_rwt_logging else logging.INFO)
-        self._meter = MeteredStream(regular_output, options.debug_rwt_logging, logger,
-                                    number_of_columns=host.platform.terminal_width())
+        logger.setLevel(logging.DEBUG if options.
+                        debug_rwt_logging else logging.INFO)
+        self._meter = MeteredStream(
+            regular_output,
+            options.debug_rwt_logging,
+            logger,
+            number_of_columns=host.platform.terminal_width())
         self._running_tests = []
         self._completed_tests = []
 
@@ -78,48 +101,68 @@
 
     def print_config(self, port):
         self._print_default("Using port '%s'" % port.name())
-        self._print_default('Test configuration: %s' % port.test_configuration())
-        self._print_default('View the test results at file://%s/results.html' % port.artifacts_directory())
+        self._print_default(
+            'Test configuration: %s' % port.test_configuration())
+        self._print_default('View the test results at file://%s/results.html' %
+                            port.artifacts_directory())
         if self._options.order == 'random':
-            self._print_default('Using random order with seed: %d' % self._options.seed)
+            self._print_default(
+                'Using random order with seed: %d' % self._options.seed)
 
         fs = self._host.filesystem
         fallback_path = [fs.split(x)[1] for x in port.baseline_search_path()]
-        self._print_default('Baseline search path: %s -> generic' % ' -> '.join(fallback_path))
+        self._print_default(
+            'Baseline search path: %s -> generic' % ' -> '.join(fallback_path))
         self._print_default('Using %s build' % self._options.configuration)
-        self._print_default('Regular timeout: %s, slow test timeout: %s' %
-                            (self._options.time_out_ms, self._options.slow_time_out_ms))
+        self._print_default(
+            'Regular timeout: %s, slow test timeout: %s' %
+            (self._options.time_out_ms, self._options.slow_time_out_ms))
 
-        self._print_default('Command line: ' + ' '.join(port.driver_cmd_line()))
+        self._print_default('Command line: ' +
+                            ' '.join(port.driver_cmd_line()))
         self._print_default('')
 
-    def print_found(self, num_all_test_files, num_shard_test_files, num_to_run, repeat_each, iterations):
-        found_str = 'Found %s' % grammar.pluralize('test', num_shard_test_files)
+    def print_found(self, num_all_test_files, num_shard_test_files, num_to_run,
+                    repeat_each, iterations):
+        found_str = 'Found %s' % grammar.pluralize('test',
+                                                   num_shard_test_files)
         if num_all_test_files != num_shard_test_files:
             found_str += ' (total %d)' % num_all_test_files
         found_str += '; running %d' % num_to_run
         if repeat_each * iterations > 1:
-            found_str += ' (%d times each: --repeat-each=%d --iterations=%d)' % (repeat_each * iterations, repeat_each, iterations)
+            found_str += ' (%d times each: --repeat-each=%d --iterations=%d)' % (
+                repeat_each * iterations, repeat_each, iterations)
         found_str += ', skipping %d' % (num_shard_test_files - num_to_run)
         self._print_default(found_str + '.')
 
     def print_expected(self, run_results, tests_with_result_type_callback):
-        self._print_expected_results_of_type(run_results, test_expectations.PASS, 'passes', tests_with_result_type_callback)
-        self._print_expected_results_of_type(run_results, test_expectations.FAIL, 'failures', tests_with_result_type_callback)
-        self._print_expected_results_of_type(run_results, test_expectations.FLAKY, 'flaky', tests_with_result_type_callback)
+        self._print_expected_results_of_type(run_results,
+                                             test_expectations.PASS, 'passes',
+                                             tests_with_result_type_callback)
+        self._print_expected_results_of_type(
+            run_results, test_expectations.FAIL, 'failures',
+            tests_with_result_type_callback)
+        self._print_expected_results_of_type(run_results,
+                                             test_expectations.FLAKY, 'flaky',
+                                             tests_with_result_type_callback)
         self._print_debug('')
 
-    def print_workers_and_shards(self, port, num_workers, num_shards, num_locked_shards):
+    def print_workers_and_shards(self, port, num_workers, num_shards,
+                                 num_locked_shards):
         driver_name = port.driver_name()
         if num_workers == 1:
             self._print_default('Running 1 %s.' % driver_name)
             self._print_debug('(%s).' % grammar.pluralize('shard', num_shards))
         else:
-            self._print_default('Running %d %ss in parallel.' % (num_workers, driver_name))
-            self._print_debug('(%d shards; %d locked).' % (num_shards, num_locked_shards))
+            self._print_default(
+                'Running %d %ss in parallel.' % (num_workers, driver_name))
+            self._print_debug(
+                '(%d shards; %d locked).' % (num_shards, num_locked_shards))
         self._print_default('')
 
-    def _print_expected_results_of_type(self, run_results, result_type, result_type_str, tests_with_result_type_callback):
+    def _print_expected_results_of_type(self, run_results, result_type,
+                                        result_type_str,
+                                        tests_with_result_type_callback):
         tests = tests_with_result_type_callback(result_type)
         self._print_debug('Expect: %5d %-8s' % (len(tests), result_type_str))
 
@@ -143,20 +186,27 @@
         stats = {}
         cuml_time = 0
         for result in run_results.results_by_name.values():
-            stats.setdefault(result.worker_name, {'num_tests': 0, 'total_time': 0})
+            stats.setdefault(result.worker_name, {
+                'num_tests': 0,
+                'total_time': 0
+            })
             stats[result.worker_name]['num_tests'] += 1
             stats[result.worker_name]['total_time'] += result.total_run_time
             cuml_time += result.total_run_time
 
         for worker_name in stats:
-            self._print_debug('    %10s: %5d tests, %6.2f secs' % (worker_name, stats[
-                              worker_name]['num_tests'], stats[worker_name]['total_time']))
-        self._print_debug('   %6.2f cumulative, %6.2f optimal' % (cuml_time, cuml_time / num_workers))
+            self._print_debug('    %10s: %5d tests, %6.2f secs' %
+                              (worker_name, stats[worker_name]['num_tests'],
+                               stats[worker_name]['total_time']))
+        self._print_debug('   %6.2f cumulative, %6.2f optimal' %
+                          (cuml_time, cuml_time / num_workers))
         self._print_debug('')
 
     def print_summary(self, total_time, run_results):
         if self._options.timing:
-            parallel_time = sum(result.total_run_time for result in run_results.results_by_name.values())
+            parallel_time = sum(
+                result.total_run_time
+                for result in run_results.results_by_name.values())
 
             # There is serial overhead in web_test_runner.run() that we can't easily account for when
             # really running in parallel, but taking the min() ensures that in the worst case
@@ -164,7 +214,8 @@
             serial_time = total_time - min(run_results.run_time, parallel_time)
 
             speedup = (parallel_time + serial_time) / total_time
-            timing_summary = ' in %.2fs (%.2fs in rwt, %.2gx)' % (total_time, serial_time, speedup)
+            timing_summary = ' in %.2fs (%.2fs in rwt, %.2gx)' % (
+                total_time, serial_time, speedup)
         else:
             timing_summary = ''
 
@@ -183,30 +234,38 @@
         expected_summary_str = ''
         if run_results.expected_failures > 0:
             expected_summary_str = " (%d passed, %d didn't)" % (
-                expected - run_results.expected_failures, run_results.expected_failures)
+                expected - run_results.expected_failures,
+                run_results.expected_failures)
 
         summary = ''
         if unexpected == 0:
             if expected == total:
                 if expected > 1:
-                    summary = 'All %d tests ran as expected%s%s.' % (expected, expected_summary_str, timing_summary)
+                    summary = 'All %d tests ran as expected%s%s.' % (
+                        expected, expected_summary_str, timing_summary)
                 else:
-                    summary = 'The test ran as expected%s%s.' % (expected_summary_str, timing_summary)
+                    summary = 'The test ran as expected%s%s.' % (
+                        expected_summary_str, timing_summary)
             else:
                 summary = '%s ran as expected%s%s%s.' % (grammar.pluralize(
-                    'test', expected), expected_summary_str, incomplete_str, timing_summary)
+                    'test', expected), expected_summary_str, incomplete_str,
+                                                         timing_summary)
             self._print_quiet(summary)
         else:
-            self._print_quiet("%s ran as expected%s, %d didn't%s%s:" % (grammar.pluralize(
-                'test', expected), expected_summary_str, unexpected, incomplete_str, timing_summary))
+            self._print_quiet(
+                "%s ran as expected%s, %d didn't%s%s:" %
+                (grammar.pluralize('test', expected), expected_summary_str,
+                 unexpected, incomplete_str, timing_summary))
             for test_name in sorted(run_results.unexpected_results_by_name):
                 self._print_quiet('    %s' % test_name)
 
     def _test_status_line(self, test_name, suffix):
         format_string = '[%d/%d] %s%s'
-        status_line = format_string % (self.num_completed, self.num_tests, test_name, suffix)
+        status_line = format_string % (self.num_completed, self.num_tests,
+                                       test_name, suffix)
         if len(status_line) > self._meter.number_of_columns():
-            overflow_columns = len(status_line) - self._meter.number_of_columns()
+            overflow_columns = (
+                len(status_line) - self._meter.number_of_columns())
             ellipsis = '...'
             if len(test_name) < overflow_columns + len(ellipsis) + 2:
                 # We don't have enough space even if we elide, just show the test filename.
@@ -215,8 +274,10 @@
             else:
                 new_length = len(test_name) - overflow_columns - len(ellipsis)
                 prefix = int(new_length / 2)
-                test_name = test_name[:prefix] + ellipsis + test_name[-(new_length - prefix):]
-        return format_string % (self.num_completed, self.num_tests, test_name, suffix)
+                test_name = (test_name[:prefix] + ellipsis +
+                             test_name[-(new_length - prefix):])
+        return format_string % (self.num_completed, self.num_tests, test_name,
+                                suffix)
 
     def print_started_test(self, test_name):
         self._running_tests.append(test_name)
@@ -234,8 +295,9 @@
         self.num_completed += 1
         test_name = result.test_name
 
-        result_message = self._result_message(result.type, result.failures, expected,
-                                              self._options.timing, result.test_run_time)
+        result_message = self._result_message(result.type, result.failures,
+                                              expected, self._options.timing,
+                                              result.test_run_time)
 
         if self._options.details:
             self._print_test_trace(port, result, exp_str, got_str)
@@ -250,17 +312,20 @@
                 self._completed_tests.append([test_name, result_message])
 
             for test_name, result_message in self._completed_tests:
-                self._meter.write_throttled_update(self._test_status_line(test_name, result_message))
+                self._meter.write_throttled_update(
+                    self._test_status_line(test_name, result_message))
             self._completed_tests = []
         self._running_tests.remove(test_name)
 
-    def _result_message(self, result_type, failures, expected, timing, test_run_time):
+    def _result_message(self, result_type, failures, expected, timing,
+                        test_run_time):
         exp_string = ' unexpectedly' if not expected else ''
         timing_string = ' %.4fs' % test_run_time if timing else ''
         if result_type == ResultType.Pass:
             return ' passed%s%s' % (exp_string, timing_string)
         else:
-            return ' failed%s (%s)%s' % (exp_string, ', '.join(failure.message() for failure in failures), timing_string)
+            return ' failed%s (%s)%s' % (exp_string, ', '.join(
+                failure.message() for failure in failures), timing_string)
 
     def _print_test_trace(self, port, result, exp_str, got_str):
         test_name = result.test_name
@@ -276,7 +341,8 @@
         references = port.reference_files(test_name)
         if references:
             for _, filename in references:
-                self._print_default('  ref: %s' % port.relative_test_filename(filename))
+                self._print_default(
+                    '  ref: %s' % port.relative_test_filename(filename))
         else:
             for extension in ('.txt', '.png', '.wav'):
                 self._print_baseline(port, test_name, extension)
diff --git a/third_party/blink/tools/blinkpy/web_tests/views/printing_unittest.py b/third_party/blink/tools/blinkpy/web_tests/views/printing_unittest.py
index 3d74286a..c284d9f 100644
--- a/third_party/blink/tools/blinkpy/web_tests/views/printing_unittest.py
+++ b/third_party/blink/tools/blinkpy/web_tests/views/printing_unittest.py
@@ -25,7 +25,6 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 """Unit tests for printing.py."""
 
 import optparse
@@ -48,14 +47,12 @@
 
 
 class TestUtilityFunctions(unittest.TestCase):
-
     def test_print_options(self):
         options, _ = get_options([])
         self.assertIsNotNone(options)
 
 
 class FakeRunResults(object):
-
     def __init__(self, total=1, expected=1, unexpected=0, fake_results=None):
         fake_results = fake_results or []
         self.total = total
@@ -75,14 +72,12 @@
 
 
 class FakeShard(object):
-
     def __init__(self, shard_name, total_run_time):
         self.shard_name = shard_name
         self.total_run_time = total_run_time
 
 
 class Testprinter(unittest.TestCase):
-
     def assertNotEmpty(self, stream):
         self.assertTrue(stream.getvalue())
 
@@ -111,7 +106,8 @@
             failures = [test_failures.FailureTimeout()]
         elif result_type == ResultType.Crash:
             failures = [test_failures.FailureCrash()]
-        return test_results.TestResult(test_name, failures=failures, test_run_time=run_time)
+        return test_results.TestResult(
+            test_name, failures=failures, test_run_time=run_time)
 
     def test_configure_and_cleanup(self):
         # This test verifies that calling cleanup repeatedly and deleting
@@ -131,9 +127,12 @@
         printer._options.seed = 1234
         printer.print_config(self._port)
         self.assertIn("Using port 'test-mac-mac10.10'", err.getvalue())
-        self.assertIn('Test configuration: <mac10.10, x86, release>', err.getvalue())
+        self.assertIn('Test configuration: <mac10.10, x86, release>',
+                      err.getvalue())
         self.assertIn('View the test results at file:///tmp', err.getvalue())
-        self.assertIn('Baseline search path: test-mac-mac10.10 -> test-mac-mac10.11 -> generic', err.getvalue())
+        self.assertIn(
+            'Baseline search path: test-mac-mac10.10 -> test-mac-mac10.11 -> generic',
+            err.getvalue())
         self.assertIn('Using Release build', err.getvalue())
         self.assertIn('Command line:', err.getvalue())
         self.assertIn('Regular timeout: ', err.getvalue())
@@ -142,7 +141,9 @@
         self.reset(err)
         printer._options.quiet = True
         printer.print_config(self._port)
-        self.assertNotIn('Baseline search path: test-mac-mac10.10 -> test-mac-mac10.11 -> generic', err.getvalue())
+        self.assertNotIn(
+            'Baseline search path: test-mac-mac10.10 -> test-mac-mac10.11 -> generic',
+            err.getvalue())
 
     def test_print_summary(self):
         def run_test(total, exp, unexp, shards, result):
@@ -154,53 +155,86 @@
 
         # Without times:
         run_test(1, 1, 0, [], ['The test ran as expected.\n'])
-        run_test(2, 1, 1, [], ['\n', "1 test ran as expected, 1 didn't:\n", '    test0\n'])
-        run_test(3, 2, 1, [], ['\n', "2 tests ran as expected, 1 didn't:\n", '    test0\n'])
-        run_test(3, 2, 0, [], ['\n', "2 tests ran as expected (1 didn't run).\n"])
+        run_test(2, 1, 1, [],
+                 ['\n', "1 test ran as expected, 1 didn't:\n", '    test0\n'])
+        run_test(3, 2, 1, [],
+                 ['\n', "2 tests ran as expected, 1 didn't:\n", '    test0\n'])
+        run_test(3, 2, 0, [],
+                 ['\n', "2 tests ran as expected (1 didn't run).\n"])
 
         # With times:
         fake_shards = [FakeShard('foo', 1), FakeShard('bar', 2)]
-        run_test(1, 1, 0, fake_shards, ['The test ran as expected in 5.00s (2.00s in rwt, 1x).\n'])
-        run_test(2, 1, 1, fake_shards, ['\n', "1 test ran as expected, 1 didn't in 5.00s (2.00s in rwt, 1x):\n", '    test0\n'])
-        run_test(3, 2, 1, fake_shards, ['\n', "2 tests ran as expected, 1 didn't in 5.00s (2.00s in rwt, 1x):\n", '    test0\n'])
-        run_test(3, 2, 0, fake_shards, ['\n', "2 tests ran as expected (1 didn't run) in 5.00s (2.00s in rwt, 1x).\n"])
+        run_test(1, 1, 0, fake_shards,
+                 ['The test ran as expected in 5.00s (2.00s in rwt, 1x).\n'])
+        run_test(2, 1, 1, fake_shards, [
+            '\n',
+            "1 test ran as expected, 1 didn't in 5.00s (2.00s in rwt, 1x):\n",
+            '    test0\n'
+        ])
+        run_test(3, 2, 1, fake_shards, [
+            '\n',
+            "2 tests ran as expected, 1 didn't in 5.00s (2.00s in rwt, 1x):\n",
+            '    test0\n'
+        ])
+        run_test(3, 2, 0, fake_shards, [
+            '\n',
+            "2 tests ran as expected (1 didn't run) in 5.00s (2.00s in rwt, 1x).\n"
+        ])
 
     def test_test_status_line(self):
         printer, _ = self.get_printer()
         printer._meter.number_of_columns = lambda: 80
         actual = printer._test_status_line(
-            'fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
+            'fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html',
+            ' passed')
         self.assertEqual(80, len(actual))
-        self.assertEqual(actual, '[0/0] fast/dom/HTMLFormElement/associa...after-index-assertion-fail1.html passed')
+        self.assertEqual(
+            actual,
+            '[0/0] fast/dom/HTMLFormElement/associa...after-index-assertion-fail1.html passed'
+        )
 
         printer._meter.number_of_columns = lambda: 89
         actual = printer._test_status_line(
-            'fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
+            'fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html',
+            ' passed')
         self.assertEqual(89, len(actual))
-        self.assertEqual(actual, '[0/0] fast/dom/HTMLFormElement/associated-...ents-after-index-assertion-fail1.html passed')
+        self.assertEqual(
+            actual,
+            '[0/0] fast/dom/HTMLFormElement/associated-...ents-after-index-assertion-fail1.html passed'
+        )
 
         printer._meter.number_of_columns = lambda: sys.maxsize
         actual = printer._test_status_line(
-            'fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
+            'fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html',
+            ' passed')
         self.assertEqual(90, len(actual))
-        self.assertEqual(actual, '[0/0] fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html passed')
+        self.assertEqual(
+            actual,
+            '[0/0] fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html passed'
+        )
 
         printer._meter.number_of_columns = lambda: 18
         actual = printer._test_status_line(
-            'fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
+            'fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html',
+            ' passed')
         self.assertEqual(18, len(actual))
         self.assertEqual(actual, '[0/0] f...l passed')
 
         printer._meter.number_of_columns = lambda: 10
         actual = printer._test_status_line(
-            'fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html', ' passed')
-        self.assertEqual(actual, '[0/0] associated-elements-after-index-assertion-fail1.html passed')
+            'fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html',
+            ' passed')
+        self.assertEqual(
+            actual,
+            '[0/0] associated-elements-after-index-assertion-fail1.html passed'
+        )
 
     def test_details(self):
         printer, err = self.get_printer(['--details'])
         result = self.get_result('passes/image.html')
         printer.print_started_test('passes/image.html')
-        printer.print_finished_test(self._port, result, expected=False, exp_str='', got_str='')
+        printer.print_finished_test(
+            self._port, result, expected=False, exp_str='', got_str='')
         self.assertNotEmpty(err)
 
     def test_print_found(self):
@@ -208,26 +242,32 @@
 
         self.reset(err)
         printer.print_found(100, 100, 10, 1, 1)
-        self.assertWritten(err, ['Found 100 tests; running 10, skipping 90.\n'])
+        self.assertWritten(err,
+                           ['Found 100 tests; running 10, skipping 90.\n'])
 
         self.reset(err)
         printer.print_found(100, 20, 10, 1, 1)
-        self.assertWritten(err, ['Found 20 tests (total 100); running 10, skipping 10.\n'])
+        self.assertWritten(
+            err, ['Found 20 tests (total 100); running 10, skipping 10.\n'])
 
         self.reset(err)
         printer.print_found(100, 100, 10, 2, 3)
-        self.assertWritten(err, ['Found 100 tests; running 10 (6 times each: --repeat-each=2 --iterations=3), skipping 90.\n'])
+        self.assertWritten(err, [
+            'Found 100 tests; running 10 (6 times each: --repeat-each=2 --iterations=3), skipping 90.\n'
+        ])
 
     def test_debug_rwt_logging_is_throttled(self):
         printer, err = self.get_printer(['--debug-rwt-logging'])
 
         result = self.get_result('passes/image.html')
         printer.print_started_test('passes/image.html')
-        printer.print_finished_test(self._port, result, expected=True, exp_str='', got_str='')
+        printer.print_finished_test(
+            self._port, result, expected=True, exp_str='', got_str='')
 
         printer.print_started_test('passes/text.html')
         result = self.get_result('passes/text.html')
-        printer.print_finished_test(self._port, result, expected=True, exp_str='', got_str='')
+        printer.print_finished_test(
+            self._port, result, expected=True, exp_str='', got_str='')
 
         # Only the first test's start should be printed.
         lines = err.buflist
diff --git a/third_party/blink/tools/blinkpy/web_tests/web_tests_history.py b/third_party/blink/tools/blinkpy/web_tests/web_tests_history.py
index 8d09f4d0..4cd3a4d 100644
--- a/third_party/blink/tools/blinkpy/web_tests/web_tests_history.py
+++ b/third_party/blink/tools/blinkpy/web_tests/web_tests_history.py
@@ -47,13 +47,19 @@
             description='''Examine the version history of web tests to check
             if they were created before the Blink fork; and if so, whether all
             contributions were made by Googlers.''')
-        parser.add_argument('--verbose', '-v', action='count', default=0, help='show verbose logging (can be repeated, e.g. -vv)')
+        parser.add_argument(
+            '--verbose',
+            '-v',
+            action='count',
+            default=0,
+            help='show verbose logging (can be repeated, e.g. -vv)')
         parser.add_argument(
             'paths',
             metavar='PATH',
             type=str,
             nargs='*',
-            help='test path relative to web_tests (same as the arguments for run_web_tests.py); '
+            help=
+            'test path relative to web_tests (same as the arguments for run_web_tests.py); '
             'if no path is provided, the script will check all files.')
         return parser.parse_args(args)
 
@@ -63,7 +69,8 @@
 
     def run_git_log(self, path):
         # Follow rename and copy.
-        output = self.git(['log', '--follow', '-M', '-C', '--format=' + self.FORMAT, path])
+        output = self.git(
+            ['log', '--follow', '-M', '-C', '--format=' + self.FORMAT, path])
         commits = []
         for line in output.splitlines():
             parts = line.split()
@@ -100,7 +107,10 @@
             return 1
         _log.info("Total test files discovered: %d", len(files))
 
-        pool = multiprocessing.Pool(processes=multiprocessing.cpu_count(), initializer=_init, initargs=(self, ))
+        pool = multiprocessing.Pool(
+            processes=multiprocessing.cpu_count(),
+            initializer=_init,
+            initargs=(self, ))
 
         # Capture SIGTERM/INT to exit gracefully without leaving workers behind.
         def _handler(signum, _):
@@ -133,10 +143,12 @@
         return 0
 
     def _is_test(self, path):
-        return self.port.is_non_wpt_test_file(self.filesystem.dirname(path), self.filesystem.basename(path))
+        return self.port.is_non_wpt_test_file(
+            self.filesystem.dirname(path), self.filesystem.basename(path))
 
     def process(self):
-        if len(self.options.paths) == 1 and self._is_test(self.options.paths[0]):
+        if len(self.options.paths) == 1 and self._is_test(
+                self.options.paths[0]):
             return self._process_single(self.options.paths[0])
         return self._process_many(self.options.paths)
 
@@ -154,7 +166,8 @@
 
 def _run(path):
     try:
-        abs_path = _checker.filesystem.join(_checker.port.web_tests_dir(), path)
+        abs_path = _checker.filesystem.join(_checker.port.web_tests_dir(),
+                                            path)
         commits = _checker.run_git_log(abs_path)
         return _checker.analyze(path, commits)
     except Exception as e:
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index de3234e..8ee5d26 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -97,6 +97,12 @@
 crbug.com/591099 external/wpt/css/css-shapes/shape-outside/supported-shapes/polygon/shape-outside-polygon-017.html [ Failure ]
 
 ### external/wpt/css/css-sizing/
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-001.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-002.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-003.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-004.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-005.tentative.html [ Failure ]
+crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-006.tentative.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-sizing/clone-nowrap-intrinsic-size-bidi.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-sizing/intrinsic-percent-non-replaced-004.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-sizing/intrinsic-percent-non-replaced-005.html [ Failure ]
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests
index 09a8522..cf4a306 100644
--- a/third_party/blink/web_tests/NeverFixTests
+++ b/third_party/blink/web_tests/NeverFixTests
@@ -1814,6 +1814,8 @@
 external/wpt/offscreen-canvas/text/2d.text.draw.fill.rtl-manual.worker.js [ Skip ]
 external/wpt/offscreen-canvas/text/2d.text.draw.kern.consistent-manual.worker.js [ Skip ]
 external/wpt/offscreen-canvas/text/2d.text.draw.stroke.basic-manual.worker.js [ Skip ]
+external/wpt/orientation-event/motion/page-visibility-manual.https.html [ Skip ]
+external/wpt/orientation-event/orientation/page-visibility-manual.https.html [ Skip ]
 external/wpt/orientation-event/free-fall-manual.https.html [ Skip ]
 external/wpt/orientation-event/screen-upmost-manual.https.html [ Skip ]
 external/wpt/orientation-event/screen-upright-manual.https.html [ Skip ]
diff --git a/third_party/blink/web_tests/SmokeTests b/third_party/blink/web_tests/SmokeTests
index 096c1e53..61af213 100644
--- a/third_party/blink/web_tests/SmokeTests
+++ b/third_party/blink/web_tests/SmokeTests
@@ -65,8 +65,6 @@
 custom-elements/array-squat-crash.html
 custom-elements/imports/upgrade-order.html
 custom-elements/spec/state-failed-create.html
-device_orientation/motion/add-listener-from-callback.html
-device_orientation/orientation/create-event.html
 dom/attr/parent-adopt-node.html
 dom/comment/remove.html
 dom/document_fragment/parent-node-interface.html
@@ -271,7 +269,9 @@
 external/wpt/mediasession/setactionhandler.html
 external/wpt/navigation-timing/nav2_test_instance_accessible_from_the_start.html
 external/wpt/navigation-timing/test_navigation_redirectCount_none.html
-external/wpt/orientation-event/devicemotionevent-init.html
+external/wpt/orientation-event/motion/add-listener-from-callback.https.html
+external/wpt/orientation-event/orientation/create-event.https.html
+external/wpt/orientation-event/devicemotionevent-init.https.html
 external/wpt/pointerevents/pointerevent_touch-action-illegal.html
 external/wpt/preload/avoid-delaying-onload-link-preload.html
 external/wpt/referrer-policy/generic/subresource-test/attr-referrer-invalid-value.html
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 4cab361..c8533b7 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -95,6 +95,14 @@
 
 crbug.com/1050826 external/wpt/mixed-content/gen/top.http-rp/opt-in/object-tag.https.html [ Timeout ]
 
+# Tests temporarily disabled until the video.requestAnimationFrame =>
+# video.requestVideoFrameCallback rename is completed. See crbug.com/1012063.
+
+external/wpt/video-raf/video-request-animation-frame.html [ Failure ]
+external/wpt/video-raf/video-request-animation-frame-parallel.html [ Failure ]
+external/wpt/video-raf/video-request-animation-frame-repeating.html [ Failure ]
+external/wpt/video-raf/idlharness.window.html [ Failure ]
+
 # Tests temporarily disabled with Site Isolation - uninvestigated bugs:
 # TODO(lukasza, alexmos): Burn down this list.
 crbug.com/608015 http/tests/inspector-protocol/access-inspected-object.js [ Failure Timeout ]
@@ -3143,6 +3151,8 @@
 crbug.com/1067277 external/wpt/css/css-content/element-replacement-on-replaced-element.tentative.html [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 [ Win10 ] external/wpt/webrtc/RTCRtpSender-replaceTrack.https.html [ Timeout ]
+crbug.com/626703 [ Win ] virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCRtpSender-replaceTrack.https.html [ Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-text/line-break/line-break-normal-015a.xht [ Failure ]
 crbug.com/626703 [ Mac ] external/wpt/css/css-text/line-break/line-break-normal-015a.xht [ Failure ]
 crbug.com/626703 [ Win ] external/wpt/css/css-text/line-break/line-break-normal-015a.xht [ Failure ]
@@ -5028,7 +5038,7 @@
 crbug.com/778467 [ Fuchsia ] mhtml/mhtml_in_iframe.html [ Failure ]
 
 # These tests load resources from file:///gen/... .
-crbug.com/919639 [ Fuchsia ] device_orientation/motion/add-listener-from-callback.html [ Failure ]
+crbug.com/919639 [ Fuchsia ] external/wpt/orientation-event/motion/add-listener-from-callback.https.html [ Failure ]
 crbug.com/919639 [ Fuchsia ] fast/speech/scripted/speechrecognition-re-restart.html [ Failure ]
 crbug.com/919639 [ Fuchsia ] presentation/presentationconnectionavailableevent-ctor-mock.html [ Failure ]
 crbug.com/919639 [ Fuchsia ] webmidi/permission.html [ Failure ]
diff --git a/third_party/blink/web_tests/css3/flexbox/flex-item-stretch-image.html b/third_party/blink/web_tests/css3/flexbox/flex-item-stretch-image.html
index 0b9f6e8..e8d88432 100644
--- a/third_party/blink/web_tests/css3/flexbox/flex-item-stretch-image.html
+++ b/third_party/blink/web_tests/css3/flexbox/flex-item-stretch-image.html
@@ -26,6 +26,10 @@
 <body onload="checkLayout('.flexbox')">
 <div id=log></div>
 
+<!-- Blink's behavior here is incorrect, see https://crbug.com/721123.
+     When that bug is fixed, please delete this test, as this is correctly
+     tested by external/wpt/css/css-flexbox/flexitem-stretch-image.html -->
+
 <div class="flexbox">
   <img data-expected-display="block" data-expected-width="345" style="flex: 1 0 auto;" src="../../images/resources/blue-100.png">
   <img data-expected-display="block" data-expected-width="255" data-expected-height="100" style="flex: 1 0 auto;" src="../../images/resources/green-10.png">
diff --git a/third_party/blink/web_tests/css3/masking/clip-path-reference-box-2.html b/third_party/blink/web_tests/css3/masking/clip-path-reference-box-2.html
deleted file mode 100644
index dc55911..0000000
--- a/third_party/blink/web_tests/css3/masking/clip-path-reference-box-2.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE html>
-<style>
-.clipped {
-  width: 100px;
-  height: 200px;
-  background-color: green;
-  -webkit-clip-path: polygon(0% 0%,100% 0%,100% 50%,0% 50%);
-  clip-path: polygon(0% 0%,100% 0%,100% 50%,0% 50%);
-}
-</style>
-<div class="clipped">
-  <div style="float:left; margin-left:-100px; margin-top:-100px;">&nbsp;</div>
-</div>
diff --git a/third_party/blink/web_tests/device_orientation/motion/add-child-listener.html b/third_party/blink/web_tests/device_orientation/motion/add-child-listener.html
deleted file mode 100644
index c67ef30..0000000
--- a/third_party/blink/web_tests/device_orientation/motion/add-child-listener.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script>
-'use strict';
-
-test(function() {
-  var childFrame = document.createElement('iframe');
-  document.body.appendChild(childFrame);
-  let childWindow = childFrame.contentWindow;
-  document.body.removeChild(childFrame);
-  childWindow.addEventListener('devicemotion', function() {});
-}, 'Tests that an event listener can be safely added to a child frame that has been detached from the parent.');
-</script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/motion/add-during-dispatch.html b/third_party/blink/web_tests/device_orientation/motion/add-during-dispatch.html
deleted file mode 100644
index 9aee041..0000000
--- a/third_party/blink/web_tests/device_orientation/motion/add-during-dispatch.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
-<script>
-'use strict';
-
-sensor_test(async (t, sensorProvider) => {
-  const motionData = generateMotionData(1, 2, 3,
-                                        4, 5, 6,
-                                        7, 8, 9);
-  setMockMotionData(sensorProvider, motionData);
-  waitForMotion(motionData);
-
-  return new Promise((resolve, reject) => {
-    let result = reject;
-    window.addEventListener('devicemotion', event => result());
-    result = resolve;
-  });
-}, 'Test no fire listeners added during event dispatch.');
-</script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/absolute-fallback.html b/third_party/blink/web_tests/device_orientation/orientation/absolute-fallback.html
deleted file mode 100644
index b1b9863..0000000
--- a/third_party/blink/web_tests/device_orientation/orientation/absolute-fallback.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
-<script>
-'use strict';
-
-sensor_test(async (t, sensorProvider) => {
-  const orientationData = generateOrientationData(1.1, 2.2, 3.3, true);
-
-  // Make the relative orientation sensor unavailable and set mock data for
-  // the absolute one.
-  sensorProvider.getSensorTypeSettings('RelativeOrientationEulerAngles').unavailable = true;
-  setMockOrientationData(sensorProvider, orientationData);
-  return waitForOrientation(orientationData);
-}, 'Tests that deviceorientation falls back to using absolute orientation data if relative is unavailable.');
-</script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/basic-operation-absolute.html b/third_party/blink/web_tests/device_orientation/orientation/basic-operation-absolute.html
deleted file mode 100644
index bff0931..0000000
--- a/third_party/blink/web_tests/device_orientation/orientation/basic-operation-absolute.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
-<script>
-'use strict';
-
-sensor_test(async (t, sensorProvider) => {
-  const orientationData = generateOrientationData(1.1, 2.2, 3.3, true);
-
-  setMockOrientationData(sensorProvider, orientationData);
-  return waitForAbsoluteOrientation(orientationData);
-}, 'Tests basic operation of deviceorientationabsolute event using mock data.');
-</script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/basic-operation.html b/third_party/blink/web_tests/device_orientation/orientation/basic-operation.html
deleted file mode 100644
index 533a1284..0000000
--- a/third_party/blink/web_tests/device_orientation/orientation/basic-operation.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
-<script>
-'use strict';
-
-sensor_test(async (t, sensorProvider) => {
-  const orientationData = generateOrientationData(1.1, 2.2, 3.3, false);
-
-  setMockOrientationData(sensorProvider, orientationData);
-  return waitForOrientation(orientationData);
-}, 'Tests basic operation of deviceorientation event using mock data.');
-</script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/updates.html b/third_party/blink/web_tests/device_orientation/orientation/updates.html
deleted file mode 100644
index ba06a6a..0000000
--- a/third_party/blink/web_tests/device_orientation/orientation/updates.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
-<script>
-'use strict';
-
-sensor_test(async (t, sensorProvider) => {
-  const orientationData1 = generateOrientationData(1.1, 2.2, 3.3, false);
-  const orientationData2 = generateOrientationData(11.1, 22.2, 33.3, false);
-
-  setMockOrientationData(sensorProvider, orientationData1);
-  await waitForOrientation(orientationData1);
-
-  setMockOrientationData(sensorProvider, orientationData2);
-  return waitForOrientation(orientationData2);
-}, 'Tests that updates to the orientation causes new events to fire.');
-</script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/resources/device-orientation-helpers.js b/third_party/blink/web_tests/device_orientation/resources/device-orientation-helpers.js
index 747407e2..31749b7 100644
--- a/third_party/blink/web_tests/device_orientation/resources/device-orientation-helpers.js
+++ b/third_party/blink/web_tests/device_orientation/resources/device-orientation-helpers.js
@@ -1,12 +1,5 @@
 'use strict';
 
-const MOTION_ROTATION_EPSILON = 1e-8;
-
-function assertTestRunner() {
-  assert_true(window.testRunner instanceof Object,
-    "This test can not be run without the window.testRunner.");
-}
-
 function generateMotionData(accelerationX, accelerationY, accelerationZ,
                             accelerationIncludingGravityX,
                             accelerationIncludingGravityY,
@@ -68,30 +61,6 @@
   ]);
 }
 
-function checkMotion(event, expectedMotionData) {
-  assert_equals(event.acceleration.x, expectedMotionData.accelerationX, "acceleration.x");
-  assert_equals(event.acceleration.y, expectedMotionData.accelerationY, "acceleration.y");
-  assert_equals(event.acceleration.z, expectedMotionData.accelerationZ, "acceleration.z");
-
-  assert_equals(event.accelerationIncludingGravity.x, expectedMotionData.accelerationIncludingGravityX, "accelerationIncludingGravity.x");
-  assert_equals(event.accelerationIncludingGravity.y, expectedMotionData.accelerationIncludingGravityY, "accelerationIncludingGravity.y");
-  assert_equals(event.accelerationIncludingGravity.z, expectedMotionData.accelerationIncludingGravityZ, "accelerationIncludingGravity.z");
-
-  assert_approx_equals(event.rotationRate.alpha, expectedMotionData.rotationRateAlpha, MOTION_ROTATION_EPSILON, "rotationRate.alpha");
-  assert_approx_equals(event.rotationRate.beta, expectedMotionData.rotationRateBeta, MOTION_ROTATION_EPSILON, "rotationRate.beta");
-  assert_approx_equals(event.rotationRate.gamma, expectedMotionData.rotationRateGamma, MOTION_ROTATION_EPSILON, "rotationRate.gamma");
-
-  assert_equals(event.interval, expectedMotionData.interval, "interval");
-}
-
-function checkOrientation(event, expectedOrientationData) {
-  assert_equals(event.alpha, expectedOrientationData.alpha, "alpha");
-  assert_equals(event.beta, expectedOrientationData.beta, "beta");
-  assert_equals(event.gamma, expectedOrientationData.gamma, "gamma");
-
-  assert_equals(event.absolute, expectedOrientationData.absolute, "absolute");
-}
-
 function waitForOrientation(expectedOrientationData, targetWindow = window) {
   return waitForEvent(
       new DeviceOrientationEvent('deviceorientation', {
@@ -103,17 +72,6 @@
       targetWindow);
 }
 
-function waitForAbsoluteOrientation(expectedOrientationData, targetWindow = window) {
-  return waitForEvent(
-      new DeviceOrientationEvent('deviceorientationabsolute', {
-        alpha: expectedOrientationData.alpha,
-        beta: expectedOrientationData.beta,
-        gamma: expectedOrientationData.gamma,
-        absolute: expectedOrientationData.absolute,
-      }),
-      targetWindow);
-}
-
 function waitForMotion(expectedMotionData, targetWindow = window) {
   return waitForEvent(
       new DeviceMotionEvent('devicemotion', {
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
index 01c2e67..912b32e 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
@@ -71391,6 +71391,78 @@
      {}
     ]
    ],
+   "css/css-sizing/aspect-ratio/flex-aspect-ratio-001.tentative.html": [
+    [
+     "css/css-sizing/aspect-ratio/flex-aspect-ratio-001.tentative.html",
+     [
+      [
+       "/css/reference/ref-filled-green-100px-square.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-sizing/aspect-ratio/flex-aspect-ratio-002.tentative.html": [
+    [
+     "css/css-sizing/aspect-ratio/flex-aspect-ratio-002.tentative.html",
+     [
+      [
+       "/css/reference/ref-filled-green-100px-square.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-sizing/aspect-ratio/flex-aspect-ratio-003.tentative.html": [
+    [
+     "css/css-sizing/aspect-ratio/flex-aspect-ratio-003.tentative.html",
+     [
+      [
+       "/css/reference/ref-filled-green-100px-square.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-sizing/aspect-ratio/flex-aspect-ratio-004.tentative.html": [
+    [
+     "css/css-sizing/aspect-ratio/flex-aspect-ratio-004.tentative.html",
+     [
+      [
+       "/css/reference/ref-filled-green-100px-square.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-sizing/aspect-ratio/flex-aspect-ratio-005.tentative.html": [
+    [
+     "css/css-sizing/aspect-ratio/flex-aspect-ratio-005.tentative.html",
+     [
+      [
+       "/css/reference/ref-filled-green-100px-square.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-sizing/aspect-ratio/flex-aspect-ratio-006.tentative.html": [
+    [
+     "css/css-sizing/aspect-ratio/flex-aspect-ratio-006.tentative.html",
+     [
+      [
+       "/css/reference/ref-filled-green-100px-square.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-sizing/auto-scrollbar-inside-stf-abspos.html": [
     [
      "css/css-sizing/auto-scrollbar-inside-stf-abspos.html",
@@ -97049,6 +97121,18 @@
      {}
     ]
    ],
+   "css/css-will-change/will-change-abspos-cb-002.html": [
+    [
+     "css/css-will-change/will-change-abspos-cb-002.html",
+     [
+      [
+       "/css/css-will-change/will-change-abspos-cb-002-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-will-change/will-change-abspos-cb-dynamic-001.html": [
     [
      "css/css-will-change/will-change-abspos-cb-dynamic-001.html",
@@ -97061,6 +97145,54 @@
      {}
     ]
    ],
+   "css/css-will-change/will-change-fixedpos-cb-001.html": [
+    [
+     "css/css-will-change/will-change-fixedpos-cb-001.html",
+     [
+      [
+       "/css/css-will-change/will-change-fixedpos-cb-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-will-change/will-change-fixedpos-cb-002.html": [
+    [
+     "css/css-will-change/will-change-fixedpos-cb-002.html",
+     [
+      [
+       "/css/css-will-change/will-change-fixedpos-cb-002-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-will-change/will-change-fixedpos-cb-003.html": [
+    [
+     "css/css-will-change/will-change-fixedpos-cb-003.html",
+     [
+      [
+       "/css/css-will-change/will-change-fixedpos-cb-003-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-will-change/will-change-stacking-context-001.html": [
+    [
+     "css/css-will-change/will-change-stacking-context-001.html",
+     [
+      [
+       "/css/css-will-change/will-change-stacking-context-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-will-change/will-change-transform-image.html": [
     [
      "css/css-will-change/will-change-transform-image.html",
@@ -108989,6 +109121,18 @@
      {}
     ]
    ],
+   "css/filter-effects/filter-effect-remove-unattached.html": [
+    [
+     "css/filter-effects/filter-effect-remove-unattached.html",
+     [
+      [
+       "/css/filter-effects/reference/filter-effect-remove-unattached-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/filter-effects/filter-external-001-test.html": [
     [
      "css/filter-effects/filter-external-001-test.html",
@@ -122453,6 +122597,18 @@
      {}
     ]
    ],
+   "html/editing/editing-0/contenteditable/contenteditable-with-empty-block.html": [
+    [
+     "html/editing/editing-0/contenteditable/contenteditable-with-empty-block.html",
+     [
+      [
+       "/html/editing/editing-0/contenteditable/contenteditable-with-empty-block-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-001.html": [
     [
      "html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-001.html",
@@ -157976,6 +158132,21 @@
    "css/css-will-change/will-change-abspos-cb-001-ref.html": [
     []
    ],
+   "css/css-will-change/will-change-abspos-cb-002-ref.html": [
+    []
+   ],
+   "css/css-will-change/will-change-fixedpos-cb-001-ref.html": [
+    []
+   ],
+   "css/css-will-change/will-change-fixedpos-cb-002-ref.html": [
+    []
+   ],
+   "css/css-will-change/will-change-fixedpos-cb-003-ref.html": [
+    []
+   ],
+   "css/css-will-change/will-change-stacking-context-001-ref.html": [
+    []
+   ],
    "css/css-will-change/will-change-transform-image-ref.html": [
     []
    ],
@@ -160457,6 +160628,9 @@
    "css/filter-effects/reference/empty-element-with-filter-ref.html": [
     []
    ],
+   "css/filter-effects/reference/filter-effect-remove-unattached-ref.html": [
+    []
+   ],
    "css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html": [
     []
    ],
@@ -160505,6 +160679,9 @@
    "css/filter-effects/reference/svg-relative-urls-002-ref.html": [
     []
    ],
+   "css/filter-effects/resources/reference.png": [
+    []
+   ],
    "css/filter-effects/support/1x1-green.png": [
     []
    ],
@@ -170771,6 +170948,9 @@
    "html/editing/editing-0/contenteditable/OWNERS": [
     []
    ],
+   "html/editing/editing-0/contenteditable/contenteditable-with-empty-block-ref.html": [
+    []
+   ],
    "html/editing/editing-0/making-entire-documents-editable-the-designmode-idl-attribute/OWNERS": [
     []
    ],
@@ -172565,6 +172745,9 @@
    "html/semantics/embedded-content/the-img-element/image-loading-lazy-slow-ref.html": [
     []
    ],
+   "html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset-expected.txt": [
+    []
+   ],
    "html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip-ref.html": [
     []
    ],
@@ -181703,9 +181886,6 @@
    "shadow-dom/resources/shadow-dom.js": [
     []
    ],
-   "shadow-dom/slots-imperative-slot-api.tentative-expected.txt": [
-    []
-   ],
    "shadow-dom/untriaged/README": [
     []
    ],
@@ -267289,6 +267469,12 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset.html": [
+    [
+     "html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset.html",
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/the-img-element/image-loading-lazy.html": [
     [
      "html/semantics/embedded-content/the-img-element/image-loading-lazy.html",
@@ -274800,6 +274986,16 @@
      {}
     ]
    ],
+   "html/webappapis/timers/cleartimeout-clearinterval.any.js": [
+    [
+     "html/webappapis/timers/cleartimeout-clearinterval.any.html",
+     {}
+    ],
+    [
+     "html/webappapis/timers/cleartimeout-clearinterval.any.worker.html",
+     {}
+    ]
+   ],
    "html/webappapis/timers/evil-spec-example.html": [
     [
      "html/webappapis/timers/evil-spec-example.html",
@@ -411483,6 +411679,30 @@
    "0dbbb2f9404da7cfa89f2e75af3ca06cfbe4be7e",
    "testharness"
   ],
+  "css/css-sizing/aspect-ratio/flex-aspect-ratio-001.tentative.html": [
+   "3b477e299ad763a1c0108e16f05981c76c25bb77",
+   "reftest"
+  ],
+  "css/css-sizing/aspect-ratio/flex-aspect-ratio-002.tentative.html": [
+   "d7714f07e774baadc5231b43c5cf71d08dcea487",
+   "reftest"
+  ],
+  "css/css-sizing/aspect-ratio/flex-aspect-ratio-003.tentative.html": [
+   "85775fa8c067c942ce97aa668ac4179949c06dd6",
+   "reftest"
+  ],
+  "css/css-sizing/aspect-ratio/flex-aspect-ratio-004.tentative.html": [
+   "05b569ac607185b186221bbdb8edfb40fa153662",
+   "reftest"
+  ],
+  "css/css-sizing/aspect-ratio/flex-aspect-ratio-005.tentative.html": [
+   "2b13df2184fcbdd869bd5e954d87c70c449a2365",
+   "reftest"
+  ],
+  "css/css-sizing/aspect-ratio/flex-aspect-ratio-006.tentative.html": [
+   "f4667cfc1fd689c7e11bfb38dc64ff3212064a29",
+   "reftest"
+  ],
   "css/css-sizing/aspect-ratio/parsing/contain-intrinsic-size-computed.html": [
    "3cd562fb9ce10a0f5c82b4884046c91e2b9428b0",
    "testharness"
@@ -433395,14 +433615,54 @@
    "d59e443310fa84f94533c7b18ce67d6c82cf1fc7",
    "reftest"
   ],
+  "css/css-will-change/will-change-abspos-cb-002-ref.html": [
+   "9dfc24c526bc2decc452a73a0065b5ae39faf5e6",
+   "support"
+  ],
+  "css/css-will-change/will-change-abspos-cb-002.html": [
+   "537f671cdce8321fe81f1281a3faa5b5ecbe64db",
+   "reftest"
+  ],
   "css/css-will-change/will-change-abspos-cb-dynamic-001.html": [
    "d2503256bcfe2336068914fb780463d4987608b5",
    "reftest"
   ],
+  "css/css-will-change/will-change-fixedpos-cb-001-ref.html": [
+   "9dfc24c526bc2decc452a73a0065b5ae39faf5e6",
+   "support"
+  ],
+  "css/css-will-change/will-change-fixedpos-cb-001.html": [
+   "249413b6d79d1fc27e8642863b1fae1abfc88cd7",
+   "reftest"
+  ],
+  "css/css-will-change/will-change-fixedpos-cb-002-ref.html": [
+   "7823c16075e133cf57731d196cee180d9a03cae4",
+   "support"
+  ],
+  "css/css-will-change/will-change-fixedpos-cb-002.html": [
+   "00cba5ecf864d439e2413184af6255cc4b15bfc2",
+   "reftest"
+  ],
+  "css/css-will-change/will-change-fixedpos-cb-003-ref.html": [
+   "05957327c331a953cc907eeb5ffd2ba117f6f227",
+   "support"
+  ],
+  "css/css-will-change/will-change-fixedpos-cb-003.html": [
+   "e7dcf2c880deca3402a03af201e14b4a95bca307",
+   "reftest"
+  ],
   "css/css-will-change/will-change-inherit-dynamic.html": [
    "b01844aea5c66eb2f4d0e7698ab9032d8ddb1079",
    "testharness"
   ],
+  "css/css-will-change/will-change-stacking-context-001-ref.html": [
+   "38138ebcac3d73796e00173f6a84ba7edaa17cd2",
+   "support"
+  ],
+  "css/css-will-change/will-change-stacking-context-001.html": [
+   "9720953205b1cd2863649f2b69e6e01b5107acb2",
+   "reftest"
+  ],
   "css/css-will-change/will-change-transform-image-ref.html": [
    "d42d5b7fea22d3d2bc2abf782b1efc78f261f69e",
    "support"
@@ -442207,6 +442467,10 @@
    "77793d767d49ef322dfc3a7256193a578461e556",
    "reftest"
   ],
+  "css/filter-effects/filter-effect-remove-unattached.html": [
+   "cfb11af605e777e968818f424110a6cdea5b4a48",
+   "reftest"
+  ],
   "css/filter-effects/filter-external-001-ref.html": [
    "794674da48456eeaee84710ddff8c2197de7cf9e",
    "support"
@@ -442599,6 +442863,10 @@
    "cf2c997f6c0d60cac9896c0b0014189cea7790bc",
    "support"
   ],
+  "css/filter-effects/reference/filter-effect-remove-unattached-ref.html": [
+   "5f9f7a76ec71bfa5abe4a0a82bc126af8fa0ad5a",
+   "support"
+  ],
   "css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html": [
    "c9da47b1b434303f0111e8d1f03d5518e8f573fc",
    "support"
@@ -442663,6 +442931,10 @@
    "344ee53e032e1bd588e971e16af2af5d0a6bcf41",
    "support"
   ],
+  "css/filter-effects/resources/reference.png": [
+   "68641b76771abf086dc213b353ac2088fffb931a",
+   "support"
+  ],
   "css/filter-effects/root-element-with-opacity-filter-001.html": [
    "577e2bd4c032799a159c1c7542812e66081bfcea",
    "reftest"
@@ -470547,6 +470819,14 @@
    "209686680e91472bf064f7b37972c54f47bc8a15",
    "testharness"
   ],
+  "html/editing/editing-0/contenteditable/contenteditable-with-empty-block-ref.html": [
+   "fe68571013cc4cb98227fec47bdb0f8cd2e74410",
+   "support"
+  ],
+  "html/editing/editing-0/contenteditable/contenteditable-with-empty-block.html": [
+   "7bcc6110723643f3a26f39420586e5ead549d7eb",
+   "reftest"
+  ],
   "html/editing/editing-0/contenteditable/selection-in-contentEditable-at-turning-designMode-on-off.tentative.html": [
    "9502196b8459fc53eb5086e0f3d0d6613024fc01",
    "testharness"
@@ -476691,6 +476971,14 @@
    "a972100528360511b93dcdc42fa0f596142ec2e2",
    "reftest"
   ],
+  "html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset-expected.txt": [
+   "af5406c113f22d2d9811417dbca6336e3c5c4fa0",
+   "support"
+  ],
+  "html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset.html": [
+   "21c11c7233c7b8f845a31b6aa25dda14ca381960",
+   "testharness"
+  ],
   "html/semantics/embedded-content/the-img-element/image-loading-lazy-subframe-detached-crash.html": [
    "86a290d50db16d9f19d08bb8a9ad07b0aa52f66d",
    "crashtest"
@@ -484115,6 +484403,10 @@
    "1a69b55d3f58f62846bcc88a3e72925d33682c67",
    "support"
   ],
+  "html/webappapis/timers/cleartimeout-clearinterval.any.js": [
+   "44551aa8a1bb802e65cd48a0dd7586e0e564e2e8",
+   "testharness"
+  ],
   "html/webappapis/timers/evil-spec-example.html": [
    "77a8746908d74257e27ef6f936a0266bb4298a44",
    "testharness"
@@ -512471,12 +512763,8 @@
    "e705e18f4a9747d0ffffe0909bfa4d85bd8f7ad4",
    "testharness"
   ],
-  "shadow-dom/slots-imperative-slot-api.tentative-expected.txt": [
-   "2d032ce4d6a52c2bd3f133a176ddfdae05c51a63",
-   "support"
-  ],
   "shadow-dom/slots-imperative-slot-api.tentative.html": [
-   "6d3997b085c99b5163f1f1a747b792a5dbca9dea",
+   "6343886da036d8ba09daf8d7d0fe2a8cd7949d48",
    "testharness"
   ],
   "shadow-dom/slots-outside-shadow-dom.html": [
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-reference-box-002.html b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-reference-box-002.html
new file mode 100644
index 0000000..a45e453
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-reference-box-002.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>CSS Masking: clip path with floated element</title>
+<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com">
+<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#the-clip-path">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=418484">
+<link rel="match" href="reference/clip-path-reference-box-002-ref.html">
+<meta name="assert" content="Check that the 'clip-path' property uses the border box as the reference box.">
+
+<style>
+.clipped {
+  width: 100px;
+  height: 200px;
+  background-color: green;
+  clip-path: polygon(0% 0%,100% 0%,100% 50%,0% 50%);
+}
+</style>
+<div class="clipped">
+  <div style="float:left; margin-left:-100px; margin-top:-100px;">&nbsp;</div>
+</div>
diff --git a/third_party/blink/web_tests/css3/masking/clip-path-reference-box-2-expected.html b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/reference/clip-path-reference-box-002-ref.html
similarity index 100%
rename from third_party/blink/web_tests/css3/masking/clip-path-reference-box-2-expected.html
rename to third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/reference/clip-path-reference-box-002-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-001.tentative.html
new file mode 100644
index 0000000..3b477e29
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-001.tentative.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: Row flexbox main size</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#line-sizing" title="9.2.3.B">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: flex;">
+  <div style="background: green; height: 100px; aspect-ratio: 1/1; min-width: 0;"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-002.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-002.tentative.html
new file mode 100644
index 0000000..d7714f0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-002.tentative.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: Row flexbox min-width</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: flex;">
+  <!-- transferred size: 100px. content size suggestion: 200px.
+       min-width: min(100, 200). -->
+  <div style="background: green; height: 100px; aspect-ratio: 1/1; flex-basis: 0;">
+    <div style="width: 200px;"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-003.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-003.tentative.html
new file mode 100644
index 0000000..85775fa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-003.tentative.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: Column flexbox main size</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#line-sizing" title="9.2.3.B">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: flex; flex-direction: column;">
+  <div style="background: green; width: 100px; aspect-ratio: 1/1; min-height: 0;"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-004.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-004.tentative.html
new file mode 100644
index 0000000..05b569a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-004.tentative.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: Column flexbox min-height</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: flex; flex-direction: column;">
+  <!-- transferred size: 100px. content size suggestion: 200px.
+       min-height: min(100, 200). -->
+  <div style="background: green; width: 100px; aspect-ratio: 1/1; flex-basis: 0;">
+    <div style="height: 200px;"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-005.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-005.tentative.html
new file mode 100644
index 0000000..2b13df2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-005.tentative.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: Non-square aspect ratio in Flexbox</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#line-sizing" title="9.2.3.B">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: flex;">
+  <div style="background: green; height: 100px; aspect-ratio: 1/2; min-width: 0;"></div>
+  <div style="background: green; width: 50px; height: 100px;"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-006.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-006.tentative.html
new file mode 100644
index 0000000..f4667cf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/aspect-ratio/flex-aspect-ratio-006.tentative.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: Vertical writing mode in Flexbox</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#line-sizing" title="9.2.3.B">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: flex;">
+  <div style="background: green; height: 100px; aspect-ratio: 1/2; min-width: 0; writing-mode: vertical-lr;"></div>
+  <div style="background: green; width: 50px; height: 100px;"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-002-ref.html
new file mode 100644
index 0000000..9dfc24c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-002-ref.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<style>
+  div {
+    border: 1px solid green;
+    background: green;
+    margin-top: 100px;
+    width: 100px;
+    height: 100px;
+  }
+</style>
+<div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-002.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-002.html
new file mode 100644
index 0000000..537f671
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-abspos-cb-002.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: will-change: filter should generate a containing block for absolute positioned elements.</title>
+<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=960953">
+<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
+<link rel="match" href="will-change-abspos-cb-002-ref.html">
+<style>
+  .container {
+    border: 1px solid green;
+    background: red;
+    width: 100px;
+    height: 100px;
+    margin-top: 100px;
+    will-change: filter;
+  }
+  .abspos {
+    position: absolute;
+    top: 0;
+    left: 0;
+    background: green;
+    height: 100px;
+    width: 100px;
+  }
+</style>
+<div class="container">
+  <div class="abspos"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-001-ref.html
new file mode 100644
index 0000000..9dfc24c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-001-ref.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<style>
+  div {
+    border: 1px solid green;
+    background: green;
+    margin-top: 100px;
+    width: 100px;
+    height: 100px;
+  }
+</style>
+<div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-001.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-001.html
new file mode 100644
index 0000000..249413b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-001.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: will-change: filter should generate a containing block for fixed positioned elements.</title>
+<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=960953">
+<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
+<link rel="match" href="will-change-fixedpos-cb-001-ref.html">
+<style>
+  .container {
+    border: 1px solid green;
+    background: red;
+    width: 100px;
+    height: 100px;
+    margin-top: 100px;
+    will-change: filter;
+  }
+  .fixedpos {
+    position: fixed;
+    top: 0;
+    left: 0;
+    background: green;
+    height: 100px;
+    width: 100px;
+  }
+</style>
+<div class="container">
+  <div class="fixedpos"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-002-ref.html
new file mode 100644
index 0000000..7823c16
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-002-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<style>
+  div {
+    background: green;
+    margin-left: 100px;
+    width: 100px;
+    height: 100px;
+  }
+</style>
+<div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-002.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-002.html
new file mode 100644
index 0000000..00cba5ecf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-002.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: will-change: filter on an inline should generate a containing block for fixed positioned elements.</title>
+<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=960953">
+<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
+<link rel="match" href="will-change-fixedpos-cb-002-ref.html">
+<style>
+  .inline {
+    margin-left: 100px;
+    will-change: filter;
+  }
+  .fixedpos {
+    position: fixed;
+    top: 0;
+    left: 0;
+    background: green;
+    height: 100px;
+    width: 100px;
+  }
+</style>
+<span class="inline">
+  <!-- "FAIL" should be hidden by the green box and should not be visible. -->
+  FAIL
+  <div class="fixedpos"></div>
+</span>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-003-ref.html
new file mode 100644
index 0000000..05957327c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-003-ref.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<style>
+  body {
+    margin: 0;
+  }
+  .hidden {
+    width: 100px;
+    height: 100px;
+    margin-left: 100px;
+    margin-top: 200px;
+  }
+  .fixedpos {
+    position: fixed;
+    top: 100px;
+    left: 100px;
+    background: green;
+    height: 100px;
+    width: 100px;
+  }
+  .spacer {
+    height: 2000px;
+  }
+</style>
+<div class="hidden"></div>
+<div class="fixedpos"></div>
+<div class="spacer"></div>
+<script>
+  window.onload = function() { window.scrollTo(0, 100); };
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-003.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-003.html
new file mode 100644
index 0000000..e7dcf2c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-fixedpos-cb-003.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: will-change: filter on the root should not generate a containing block for fixed positioned elements.</title>
+<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=960953">
+<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
+<link rel="match" href="will-change-fixedpos-cb-003-ref.html">
+<style>
+  html {
+    will-change: filter;
+  }
+  body {
+    margin: 0;
+  }
+  .hidden {
+    width: 100px;
+    height: 100px;
+    background: red;
+    margin-left: 100px;
+    margin-top: 200px;
+  }
+  .fixedpos {
+    position: fixed;
+    top: 100px;
+    left: 100px;
+    background: green;
+    height: 100px;
+    width: 100px;
+  }
+  .spacer {
+    height: 2000px;
+  }
+</style>
+<!-- This object should be fully hidden by the fixed position object. -->
+<div class="hidden"></div>
+<div class="fixedpos"></div>
+<div class="spacer"></div>
+<script>
+  window.onload = function() { window.scrollTo(0, 100); };
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-001-ref.html
new file mode 100644
index 0000000..38138eb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-001-ref.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<style>
+  div {
+    background: green;
+    width: 100px;
+    height: 100px;
+  }
+</style>
+<div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-001.html b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-001.html
new file mode 100644
index 0000000..9720953
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-will-change/will-change-stacking-context-001.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: will-change: filter should create a stacking context.</title>
+<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=960953">
+<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty">
+<link rel="match" href="will-change-stacking-context-001-ref.html">
+<style>
+  .indicator {
+    position: absolute;
+    background-color: green;
+    z-index: 1;
+  }
+  .willchange {
+    will-change: filter;
+    z-index: 0;
+  }
+  .child {
+    position: relative;
+    background-color: red;
+    z-index: 2;
+  }
+  .box {
+    width: 100px;
+    height: 100px;
+  }
+</style>
+
+<div class="indicator box"></div>
+<div class="willchange box">
+  <!-- Because will-change: filter creates a stacking context, this child
+       remains on bottom even though it has a higher z-index than the indicator
+       box. -->
+  <div class="child box"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById-expected.txt b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById-expected.txt
new file mode 100644
index 0000000..1046305
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/dom/nodes/DocumentFragment-getElementById-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+PASS The method must exist
+PASS It must return null when there are no matches
+PASS It must return the first element when there are matches
+FAIL Empty string ID values assert_equals: Even if there is an element with an empty-string ID attribute, it must not be returned expected null but got Element node <div id=""></div>
+PASS It must return the first element when there are matches, using a template
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/generic-sensor/resources/generic-sensor-helpers.js b/third_party/blink/web_tests/external/wpt/generic-sensor/resources/generic-sensor-helpers.js
index ad11e58..aff6d17 100644
--- a/third_party/blink/web_tests/external/wpt/generic-sensor/resources/generic-sensor-helpers.js
+++ b/third_party/blink/web_tests/external/wpt/generic-sensor/resources/generic-sensor-helpers.js
@@ -100,29 +100,3 @@
 function verifyProximitySensorReading(pattern, {distance, max, near, timestamp}, isNull) {
   return verifySensorReading(pattern, [distance, max, near], timestamp, isNull);
 }
-
-// A "sliding window" that iterates over |data| and returns one item at a
-// time, advancing and wrapping around as needed. |data| must be an array of
-// arrays.
-class RingBuffer {
-  constructor(data) {
-    this.bufferPosition_ = 0;
-    // Validate |data|'s format and deep-copy every element.
-    this.data_ = Array.from(data, element => {
-      if (!Array.isArray(element)) {
-        throw new TypeError('Every |data| element must be an array.');
-      }
-      return Array.from(element);
-    })
-  }
-
-  next() {
-    const value = this.data_[this.bufferPosition_];
-    this.bufferPosition_ = (this.bufferPosition_ + 1) % this.data_.length;
-    return { done: false, value: value };
-  }
-
-  [Symbol.iterator]() {
-    return this;
-  }
-}
diff --git a/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/contenteditable-with-empty-block-ref.html b/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/contenteditable-with-empty-block-ref.html
new file mode 100644
index 0000000..fe685710
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/contenteditable-with-empty-block-ref.html
@@ -0,0 +1,7 @@
+<!doctype html>
+<title>Test reference</title>
+<div>
+  Foo
+  <div></div>
+  Bar
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/contenteditable-with-empty-block.html b/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/contenteditable-with-empty-block.html
new file mode 100644
index 0000000..7bcc611
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/contenteditable-with-empty-block.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<title>contenteditable doesn't cause inner empty blocks to grow.</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1628770">
+<link rel="match" href="contenteditable-with-empty-block-ref.html">
+<div contenteditable>
+  Foo
+  <div></div>
+  Bar
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset-expected.txt
new file mode 100644
index 0000000..af5406c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL loading='lazy' image with srcset assert_equals: lazy-load images with srcset shouldn't be loaded yet expected 0 but got 2
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset.html b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset.html
new file mode 100644
index 0000000..21c11c72
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-srcset.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<head>
+<title>loading='lazy' image with srcset</title>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/images.html#update-the-image-data">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/images.html#will-lazy-load-image-steps">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<div style="height:1000vh;"></div>
+<img srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAG0lEQVR42mP8z0A%2BYKJA76jmUc2jmkc1U0EzACKcASfOgGoMAAAAAElFTkSuQmCC" loading="lazy">
+<img loading="lazy" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAG0lEQVR42mP8z0A%2BYKJA76jmUc2jmkc1U0EzACKcASfOgGoMAAAAAElFTkSuQmCC">
+<script>
+promise_test(async t => {
+  let loaded_images = 0;
+  const imgs = document.querySelectorAll("img");
+  imgs.forEach(img => {
+    img.addEventListener("load", () => { loaded_images++; }, { once: true });
+  });
+
+  await new Promise(resolve => window.addEventListener("load", resolve));
+
+  assert_equals(loaded_images, 0,
+                "lazy-load images with srcset shouldn't be loaded yet");
+
+  const promises = [
+    new Promise(resolve => imgs[0].addEventListener("load", resolve)),
+    new Promise(resolve => imgs[1].addEventListener("load", resolve)),
+  ];
+
+  imgs[1].scrollIntoView();
+  await Promise.all(promises);
+
+  imgs.forEach(img => {
+    assert_true(img.complete,
+                "Now the lazy-load image with srcset should be loaded");
+  });
+});
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/timers/cleartimeout-clearinterval.any.js b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/cleartimeout-clearinterval.any.js
new file mode 100644
index 0000000..44551aa8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/webappapis/timers/cleartimeout-clearinterval.any.js
@@ -0,0 +1,29 @@
+async_test((t) => {
+  const handle = setTimeout(
+    t.step_func(() => {
+      assert_unreached("Timeout was not canceled");
+    }),
+    0
+  );
+
+  clearInterval(handle);
+
+  setTimeout(() => {
+    t.done();
+  }, 100);
+}, "Clear timeout with clearInterval");
+
+async_test((t) => {
+  const handle = setInterval(
+    t.step_func(() => {
+      assert_unreached("Interval was not canceled");
+    }),
+    0
+  );
+
+  clearTimeout(handle);
+
+  setTimeout(() => {
+    t.done();
+  }, 100);
+}, "Clear interval with clearTimeout");
diff --git a/third_party/blink/web_tests/external/wpt/lint.whitelist b/third_party/blink/web_tests/external/wpt/lint.whitelist
index bd5a5d5..526d6b7 100644
--- a/third_party/blink/web_tests/external/wpt/lint.whitelist
+++ b/third_party/blink/web_tests/external/wpt/lint.whitelist
@@ -300,6 +300,7 @@
 SET TIMEOUT: html/cross-origin-embedder-policy/resources/navigate-require-corp-same-site.sub.html
 SET TIMEOUT: html/dom/documents/dom-tree-accessors/Document.currentScript.html
 SET TIMEOUT: html/webappapis/timers/*
+SET TIMEOUT: orientation-event/resources/orientation-event-helpers.js
 SET TIMEOUT: portals/history/resources/portal-harness.js
 SET TIMEOUT: resources/chromium/*
 SET TIMEOUT: resources/test/tests/functional/add_cleanup.html
@@ -703,6 +704,7 @@
 MISSING DEPENDENCY: webxr/resources/webxr_util.js
 MISSING DEPENDENCY: contacts/resources/helpers.js
 MISSING DEPENDENCY: generic-sensor/resources/generic-sensor-helpers.js
+MISSING DEPENDENCY: orientation-event/resources/orientation-event-helpers.js
 
 # Tests that are false positives for using Ahem as a system font
 AHEM SYSTEM FONT: acid/acid3/test.html
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/README.md b/third_party/blink/web_tests/external/wpt/orientation-event/README.md
new file mode 100644
index 0000000..14ea2f5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/README.md
@@ -0,0 +1,8 @@
+The `resources/orientation-event-helpers.js` tests depend on the implementation of
+the `GenericSensorTest` interface which is defined in [README.md](../generic-sensor/README.md).
+
+The Chromium implementation of the `GenericSensorTest` interface is located in
+[generic_sensor_mocks.js](../resources/chromium/generic_sensor_mocks.js).
+
+Other browser vendors should provide their own implementations of
+the `GenericSensorTest` interface.
diff --git a/third_party/blink/web_tests/http/tests/security/powerfulFeatureRestrictions/device-orientation-events-of-detached-documents.https.html b/third_party/blink/web_tests/external/wpt/orientation-event/device-orientation-events-of-detached-documents.https.html
similarity index 77%
rename from third_party/blink/web_tests/http/tests/security/powerfulFeatureRestrictions/device-orientation-events-of-detached-documents.https.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/device-orientation-events-of-detached-documents.https.html
index fa7efc0..c7ad5eca 100644
--- a/third_party/blink/web_tests/http/tests/security/powerfulFeatureRestrictions/device-orientation-events-of-detached-documents.https.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/device-orientation-events-of-detached-documents.https.html
@@ -2,13 +2,15 @@
 <title>Device sensor event listeners for `window` of detached documents.</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<body></body>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/orientation-event-helpers.js"></script>
 <script>
 
-promise_test(async t => {
+sensor_test(async t => {
   const childFrame = document.createElement('iframe');
-  childFrame.src = "/resources/dummy.html";
-  setTimeout(() => document.body.append(childFrame));
+  childFrame.src = "/common/blank.html";
+  document.body.append(childFrame);
 
   const childLoadWatcher = new EventWatcher(t, childFrame, ["load"]);
   await childLoadWatcher.wait_for("load");
diff --git a/third_party/blink/web_tests/http/tests/security/powerfulFeatureRestrictions/device-orientation-events-unavailable-on-insecure-origins.html b/third_party/blink/web_tests/external/wpt/orientation-event/device-orientation-events-unavailable-on-insecure-origins.html
similarity index 67%
rename from third_party/blink/web_tests/http/tests/security/powerfulFeatureRestrictions/device-orientation-events-unavailable-on-insecure-origins.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/device-orientation-events-unavailable-on-insecure-origins.html
index e46ee412..e931c8d 100644
--- a/third_party/blink/web_tests/http/tests/security/powerfulFeatureRestrictions/device-orientation-events-unavailable-on-insecure-origins.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/device-orientation-events-unavailable-on-insecure-origins.html
@@ -2,22 +2,18 @@
 <title>Device Sensor Events not exposed to insecure origins</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/resources/get-host-info.js"></script>
-<script src="/resources/sensor-helpers.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/orientation-event-helpers.js"></script>
 <script>
 
-// Cannot use `step_timeout()` because we need the `sensor_test` infrastructure below,
-// which, however, is using `promise_test` internally. Cannot use `promise_rejects`
-// either, as `sensor_test` does not expose the `test_object`.
-function waitForLackOfEvent(eventName) {
-  return new Promise((resolve, reject) => {
+function waitForLackOfEvent(t, eventName) {
+  return new Promise(async (resolve, reject) => {
     window.addEventListener(eventName, reject);
-    window.setTimeout(() => {
-      window.removeEventListener(eventName, reject);
-      resolve();
-    }, 1000);
+    await new Promise(r => t.step_timeout(r, 1000));
+    window.removeEventListener(eventName, reject);
+    resolve();
   });
 }
 
@@ -36,7 +32,7 @@
     assert_false('ondeviceorientationabsolute' in window);
   }, 'Event interfaces and event handlers are not exposed on `window`.');
 
-  sensor_test((t, sensorProvider) => {
+  sensor_test(async (t, sensorProvider) => {
     const FAKE_ACCELERATION_DATA = [1, 2, 3];
     const FAKE_LINEAR_ACCELERATION_DATA = [4, 5, 6];
     const FAKE_GYROSCOPE_DATA = [7, 8, 9];
@@ -44,21 +40,21 @@
     setMockSensorDataForType(sensorProvider, 'LinearAccelerationSensor', FAKE_LINEAR_ACCELERATION_DATA);
     setMockSensorDataForType(sensorProvider, 'Gyroscope', FAKE_GYROSCOPE_DATA);
 
-    return waitForLackOfEvent('devicemotion');
+    return waitForLackOfEvent(t, 'devicemotion');
   }, 'addEventListener() for `devicemotion` does not crash but the handler never fires.');
 
-  sensor_test((t, sensorProvider) => {
+  sensor_test(async (t, sensorProvider) => {
     const FAKE_ORIENTATION_DATA = [1.1, 2.2, 3.3];
     setMockSensorDataForType(sensorProvider, 'RelativeOrientationEulerAngles', FAKE_ORIENTATION_DATA);
 
-    return waitForLackOfEvent('deviceorientation');
+    return waitForLackOfEvent(t, 'deviceorientation');
   }, 'addEventListener() for `deviceorientation` does not crash but the handler never fires.');
 
-  sensor_test((t, sensorProvider) => {
+  sensor_test(async (t, sensorProvider) => {
     const FAKE_ORIENTATION_DATA = [1.1, 2.2, 3.3];
     setMockSensorDataForType(sensorProvider, 'AbsoluteOrientationEulerAngles', FAKE_ORIENTATION_DATA);
 
-    return waitForLackOfEvent('deviceorientationabsolute');
+    return waitForLackOfEvent(t, 'deviceorientationabsolute');
   }, 'addEventListener() for `deviceorientationabsolute` does not crash but the handler never fires.');
 }
 </script>
diff --git a/third_party/blink/web_tests/http/tests/security/powerfulFeatureRestrictions/device-orientation-on-secure-origin.https.html b/third_party/blink/web_tests/external/wpt/orientation-event/device-orientation-on-secure-origin.https.html
similarity index 90%
rename from third_party/blink/web_tests/http/tests/security/powerfulFeatureRestrictions/device-orientation-on-secure-origin.https.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/device-orientation-on-secure-origin.https.html
index 5f21be2f..f72a5685 100644
--- a/third_party/blink/web_tests/http/tests/security/powerfulFeatureRestrictions/device-orientation-on-secure-origin.https.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/device-orientation-on-secure-origin.https.html
@@ -2,10 +2,10 @@
 <title>Device Sensor Events on Secure Origin</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/resources/get-host-info.js"></script>
-<script src="/resources/sensor-helpers.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/orientation-event-helpers.js"></script>
 <script>
 
 test(() => {
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/motion/add-child-listener.https.html b/third_party/blink/web_tests/external/wpt/orientation-event/motion/add-child-listener.https.html
new file mode 100644
index 0000000..c2fb41b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/motion/add-child-listener.https.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+'use strict';
+
+test(() => {
+  const childFrame = document.createElement('iframe');
+  document.body.appendChild(childFrame);
+  const childWindow = childFrame.contentWindow;
+  document.body.removeChild(childFrame);
+  childWindow.addEventListener('devicemotion', () => {});
+}, 'Tests that an event listener can be safely added to a child frame that has been detached from the parent.');
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/motion/add-during-dispatch.https.html b/third_party/blink/web_tests/external/wpt/orientation-event/motion/add-during-dispatch.https.html
new file mode 100644
index 0000000..d40b557a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/motion/add-during-dispatch.https.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
+<script>
+'use strict';
+
+sensor_test(async (t, sensorProvider) => {
+  const motionData = generateMotionData(1, 2, 3,
+                                        4, 5, 6,
+                                        7, 8, 9);
+  setMockMotionData(sensorProvider, motionData);
+  waitForMotion(motionData);
+
+  return new Promise((resolve, reject) => {
+    let result = reject;
+    window.addEventListener('devicemotion', event => result());
+    result = resolve;
+  });
+}, 'Test no fire listeners added during event dispatch.');
+</script>
diff --git a/third_party/blink/web_tests/device_orientation/motion/add-listener-from-callback.html b/third_party/blink/web_tests/external/wpt/orientation-event/motion/add-listener-from-callback.https.html
similarity index 74%
rename from third_party/blink/web_tests/device_orientation/motion/add-listener-from-callback.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/motion/add-listener-from-callback.https.html
index f92d4a8..30a4735d 100644
--- a/third_party/blink/web_tests/device_orientation/motion/add-listener-from-callback.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/motion/add-listener-from-callback.https.html
@@ -1,12 +1,9 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
 <script>
 'use strict';
 
@@ -47,5 +44,3 @@
   assert_equals(secondEventCount, 1, "Too many events fired for the second listener");
 }, 'Tests that adding a new devicemotion event listener from a callback works as expected.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/motion/create-event.html b/third_party/blink/web_tests/external/wpt/orientation-event/motion/create-event.https.html
similarity index 83%
rename from third_party/blink/web_tests/device_orientation/motion/create-event.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/motion/create-event.https.html
index 33a851c..7efcf40 100644
--- a/third_party/blink/web_tests/device_orientation/motion/create-event.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/motion/create-event.https.html
@@ -1,14 +1,12 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script>
 'use strict';
 
 test(test => {
-  var event = document.createEvent('DeviceMotionEvent');
-  var newEvent = new CustomEvent("devicemotion", {
+  const event = document.createEvent('DeviceMotionEvent');
+  const newEvent = new CustomEvent("devicemotion", {
       bubbles: false, cancelable: false,
       acceleration: {x:1.5,y:2.5,z:3.5},
       accelerationIncludingGravity: {x:4.5,y:5.5,z:6.5},
@@ -41,5 +39,3 @@
   assert_equals(typeof event.interval, 'number');
 }, 'Tests that document.createEvent() works with DeviceMotionEvent.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/motion/multiple-event-listeners.html b/third_party/blink/web_tests/external/wpt/orientation-event/motion/multiple-event-listeners.https.html
similarity index 72%
rename from third_party/blink/web_tests/device_orientation/motion/multiple-event-listeners.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/motion/multiple-event-listeners.https.html
index e5177f8..ad851ee 100644
--- a/third_party/blink/web_tests/device_orientation/motion/multiple-event-listeners.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/motion/multiple-event-listeners.https.html
@@ -1,12 +1,9 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
 <script>
 'use strict';
 
@@ -38,5 +35,3 @@
   return waitForMotion(motionData2);
 }, 'Tests using multiple event handlers for the Device Motion API.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/motion/null-values.html b/third_party/blink/web_tests/external/wpt/orientation-event/motion/null-values.https.html
similarity index 71%
rename from third_party/blink/web_tests/device_orientation/motion/null-values.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/motion/null-values.https.html
index eb563958..4da64c0 100644
--- a/third_party/blink/web_tests/device_orientation/motion/null-values.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/motion/null-values.https.html
@@ -1,12 +1,9 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
 <script>
 'use strict';
 
@@ -40,5 +37,3 @@
   return waitForMotion(motionData4);
 }, 'Tests using null values for some or all of the event properties.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/motion/optional-event-properties.html b/third_party/blink/web_tests/external/wpt/orientation-event/motion/optional-event-properties.https.html
similarity index 93%
rename from third_party/blink/web_tests/device_orientation/motion/optional-event-properties.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/motion/optional-event-properties.https.html
index 3dd0a60..0a73721c 100644
--- a/third_party/blink/web_tests/device_orientation/motion/optional-event-properties.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/motion/optional-event-properties.https.html
@@ -1,19 +1,18 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script>
 'use strict';
 
 function ObjectThrowingException() {};
-ObjectThrowingException.prototype.valueOf = function() { throw new Error('valueOf threw exception'); }
-ObjectThrowingException.prototype.__defineGetter__("x", function() { throw new Error('x getter exception'); });
-ObjectThrowingException.prototype.__defineGetter__("alpha", function() { throw new Error('alpha getter exception'); });
-var objectThrowingException = new ObjectThrowingException();
+ObjectThrowingException.prototype.valueOf = () => { throw new Error('valueOf threw exception'); }
+ObjectThrowingException.prototype.__defineGetter__("x", () => { throw new Error('x getter exception'); });
+ObjectThrowingException.prototype.__defineGetter__("alpha", () => { throw new Error('alpha getter exception'); });
+const objectThrowingException = new ObjectThrowingException();
 
 test(test => {
   event = document.createEvent('DeviceMotionEvent');
+  assert_equals(event.type, "");
   assert_equals(event.acceleration, null);
   assert_equals(event.accelerationIncludingGravity, null);
   assert_equals(event.rotationRate, null);
@@ -21,10 +20,11 @@
 }, 'Tests creating a DeviceMotionEvent.');
 
 test(test => {
-  event = new DeviceMotionEvent('', {acceleration: {x: 0, y: 1, z: 2},
+  event = new DeviceMotionEvent('foo', {acceleration: {x: 0, y: 1, z: 2},
                                      accelerationIncludingGravity: {x: 3, y: 4, z: 5},
                                      rotationRate: {alpha: 6, beta: 7, gamma: 8},
                                      interval: 9});
+  assert_equals(event.type, "foo");
   assert_equals(event.acceleration.x, 0);
   assert_equals(event.acceleration.y, 1);
   assert_equals(event.acceleration.z, 2);
@@ -255,5 +255,3 @@
   assert_equals(event.interval, 0);
 }, 'Tests some fields are undefined.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/motion/page-visibility-manual.https.html b/third_party/blink/web_tests/external/wpt/orientation-event/motion/page-visibility-manual.https.html
new file mode 100644
index 0000000..37e48ce9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/motion/page-visibility-manual.https.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta name="timeout" content="long">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+'use strict';
+
+promise_test(t => {
+  return new Promise((resolve, reject) => {
+    document.addEventListener("visibilitychange", () => {
+      assert_true(document.hidden, "document is hidden");
+      window.addEventListener(
+          'devicemotion',
+          event => {
+            if (document.hidden) {
+              reject();
+            } else {
+              resolve();
+            }
+          },
+          { once: true });
+    }, { once: true });
+  });
+}, 'Tests to check that devicemotion events are not fired when the page is not visible.');
+</script>
+
+<p>Switch the page to the background, then switch back to it.</p>
diff --git a/third_party/blink/web_tests/device_orientation/motion/window-property.html b/third_party/blink/web_tests/external/wpt/orientation-event/motion/window-property.https.html
similarity index 78%
rename from third_party/blink/web_tests/device_orientation/motion/window-property.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/motion/window-property.https.html
index 7e66b379..56e55dd 100644
--- a/third_party/blink/web_tests/device_orientation/motion/window-property.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/motion/window-property.https.html
@@ -1,14 +1,12 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script>
 'use strict';
 
 function hasDeviceMotionEventProperty()
 {
-  for (var property in window) {
+  for (let property in window) {
     if (property == "DeviceMotionEvent")
       return true;
   }
@@ -17,7 +15,7 @@
 
 function hasOnDeviceMotionProperty()
 {
-  for (var property in window) {
+  for (let property in window) {
     if (property == "ondevicemotion")
       return true;
   }
@@ -36,5 +34,3 @@
   assert_true(window.hasOwnProperty('ondevicemotion'));
 }, 'Tests that the window.DeviceMotionEvent and window.ondevicemotion properties are present.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/orientation/absolute-fallback.https.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/absolute-fallback.https.html
new file mode 100644
index 0000000..de0770a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/absolute-fallback.https.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
+<script>
+'use strict';
+
+sensor_test(async (t, sensorProvider) => {
+  const orientationData = generateOrientationData(1.1, 2.2, 3.3, true);
+
+  // Make the relative orientation sensor unavailable and set mock data for
+  // the absolute one.
+  sensorProvider.setGetSensorShouldFail('RelativeOrientationEulerAngles', true);
+  setMockOrientationData(sensorProvider, orientationData);
+  return waitForOrientation(orientationData);
+}, 'Tests that deviceorientation falls back to using absolute orientation data if relative is unavailable.');
+</script>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/add-listener-from-callback.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/add-listener-from-callback.https.html
similarity index 73%
rename from third_party/blink/web_tests/device_orientation/orientation/add-listener-from-callback.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/orientation/add-listener-from-callback.https.html
index 6c485379..827801b2 100644
--- a/third_party/blink/web_tests/device_orientation/orientation/add-listener-from-callback.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/add-listener-from-callback.https.html
@@ -1,12 +1,9 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
 <script>
 'use strict';
 
@@ -45,5 +42,3 @@
   assert_equals(secondEventCount, 1, "Too many events fired for the second listener");
 }, 'Tests that adding a new deviceorientation event listener from a callback works as expected.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/orientation/basic-operation-absolute.https.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/basic-operation-absolute.https.html
new file mode 100644
index 0000000..bc35e14
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/basic-operation-absolute.https.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
+<script>
+'use strict';
+
+sensor_test(async (t, sensorProvider) => {
+  const orientationData = generateOrientationData(1.1, 2.2, 3.3, true);
+
+  setMockOrientationData(sensorProvider, orientationData);
+  return waitForAbsoluteOrientation(orientationData);
+}, 'Tests basic operation of deviceorientationabsolute event using mock data.');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/orientation/basic-operation.https.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/basic-operation.https.html
new file mode 100644
index 0000000..eb57d141
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/basic-operation.https.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
+<script>
+'use strict';
+
+sensor_test(async (t, sensorProvider) => {
+  const orientationData = generateOrientationData(1.1, 2.2, 3.3, false);
+
+  setMockOrientationData(sensorProvider, orientationData);
+  return waitForOrientation(orientationData);
+}, 'Tests basic operation of deviceorientation event using mock data.');
+</script>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/create-event.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/create-event.https.html
similarity index 79%
rename from third_party/blink/web_tests/device_orientation/orientation/create-event.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/orientation/create-event.https.html
index 4b2b56d..f1e5c0f 100644
--- a/third_party/blink/web_tests/device_orientation/orientation/create-event.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/create-event.https.html
@@ -1,14 +1,12 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script>
 'use strict';
 
 test(test => {
-  var event = document.createEvent('DeviceOrientationEvent');
-  var newEvent = new CustomEvent("deviceorientation", {
+  const event = document.createEvent('DeviceOrientationEvent');
+  const newEvent = new CustomEvent("deviceorientation", {
       bubbles: false, cancelable: false,
       alpha: 1.0,
       beta: 2.0,
@@ -40,5 +38,3 @@
   assert_false(newEvent.cancelable);
 }, 'Tests that document.createEvent() works with DeviceOrientationEvent.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/multiple-event-listeners.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/multiple-event-listeners.https.html
similarity index 70%
rename from third_party/blink/web_tests/device_orientation/orientation/multiple-event-listeners.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/orientation/multiple-event-listeners.https.html
index 10d23660..3a8add23 100644
--- a/third_party/blink/web_tests/device_orientation/orientation/multiple-event-listeners.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/multiple-event-listeners.https.html
@@ -1,12 +1,9 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
 <script>
 'use strict';
 
@@ -33,5 +30,3 @@
   return waitForOrientation(orientationData2);
 }, 'Tests using multiple event handlers for the Device Orientation API.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/no-synchronous-events.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/no-synchronous-events.https.html
similarity index 60%
rename from third_party/blink/web_tests/device_orientation/orientation/no-synchronous-events.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/orientation/no-synchronous-events.https.html
index d57b1c9..e5d76211 100644
--- a/third_party/blink/web_tests/device_orientation/orientation/no-synchronous-events.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/no-synchronous-events.https.html
@@ -1,17 +1,14 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
 <script>
 'use strict';
 
 sensor_test(async (t, sensorProvider) => {
-  var orientationData = generateOrientationData(1.1, 2.2, 3.3, false);
+  const orientationData = generateOrientationData(1.1, 2.2, 3.3, false);
 
   let setMockDataPromise = setMockOrientationData(sensorProvider, orientationData);
   // Add an empty listener to make sure the event pump is running and the mock
@@ -28,5 +25,3 @@
   });
 }, 'Tests that events are never fired synchronously from a call to window.addEventListener().');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/null-values.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/null-values.https.html
similarity index 69%
rename from third_party/blink/web_tests/device_orientation/orientation/null-values.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/orientation/null-values.https.html
index ec8dfab..df18f35 100644
--- a/third_party/blink/web_tests/device_orientation/orientation/null-values.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/null-values.https.html
@@ -1,12 +1,10 @@
 <!DOCTYPE html>
 <html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../http/tests/resources/sensor-helpers.js"></script>
-<script src="../resources/device-orientation-helpers.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/services/device/public/mojom/sensor_provider.mojom.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
 <script>
 'use strict';
 
@@ -31,5 +29,4 @@
   return waitForOrientation(orientationData4);
 }, 'Tests using null values for some of the event properties.');
 </script>
-</body>
 </html>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/optional-event-properties.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/optional-event-properties.https.html
similarity index 88%
rename from third_party/blink/web_tests/device_orientation/orientation/optional-event-properties.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/orientation/optional-event-properties.https.html
index aa48bef..150ce5ca 100644
--- a/third_party/blink/web_tests/device_orientation/orientation/optional-event-properties.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/optional-event-properties.https.html
@@ -1,13 +1,12 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script>
 'use strict';
 
 test(test => {
   event = document.createEvent('DeviceOrientationEvent');
+  assert_equals(event.type, "");
   assert_equals(event.alpha, null);
   assert_equals(event.beta, null);
   assert_equals(event.gamma, null);
@@ -15,7 +14,8 @@
 }, 'Tests creating a DeviceOrientationEvent.');
 
 test(test => {
-  event = new DeviceOrientationEvent('', {alpha: 0, beta: 1, gamma: 2, absolute: false});
+  event = new DeviceOrientationEvent('foo', {alpha: 0, beta: 1, gamma: 2, absolute: false});
+  assert_equals(event.type, "foo");
   assert_equals(event.alpha, 0);
   assert_equals(event.beta, 1);
   assert_equals(event.gamma, 2);
@@ -71,5 +71,3 @@
   assert_false(event.absolute);
 }, 'Tests all values are null.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/orientation/page-visibility-manual.https.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/page-visibility-manual.https.html
new file mode 100644
index 0000000..033f1760
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/page-visibility-manual.https.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta name="timeout" content="long">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+'use strict';
+
+promise_test(t => {
+  return new Promise((resolve, reject) => {
+    document.addEventListener("visibilitychange", () => {
+      assert_true(document.hidden, "document is hidden");
+      window.addEventListener(
+          'deviceorientation',
+          event => {
+            if (document.hidden) {
+              reject();
+            } else {
+              resolve();
+            }
+          },
+          { once: true });
+    }, { once: true });
+  });
+}, 'Tests to check that deviceorientation events are not fired when the page is not visible.');
+</script>
+
+<p>Switch the page to the background, then switch back to it.</p>
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/orientation/updates.https.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/updates.https.html
new file mode 100644
index 0000000..09472e6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/updates.https.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="../resources/orientation-event-helpers.js"></script>
+<script>
+'use strict';
+
+sensor_test(async (t, sensorProvider) => {
+  const orientationData1 = generateOrientationData(1.1, 2.2, 3.3, false);
+  const orientationData2 = generateOrientationData(11.1, 22.2, 33.3, false);
+
+  setMockOrientationData(sensorProvider, orientationData1);
+  await waitForOrientation(orientationData1);
+
+  setMockOrientationData(sensorProvider, orientationData2);
+  return waitForOrientation(orientationData2);
+}, 'Tests that updates to the orientation causes new events to fire.');
+</script>
diff --git a/third_party/blink/web_tests/device_orientation/orientation/window-property.html b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/window-property.https.html
similarity index 85%
rename from third_party/blink/web_tests/device_orientation/orientation/window-property.html
rename to third_party/blink/web_tests/external/wpt/orientation-event/orientation/window-property.https.html
index 02e43d8c..200efc1 100644
--- a/third_party/blink/web_tests/device_orientation/orientation/window-property.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/orientation/window-property.https.html
@@ -1,14 +1,12 @@
 <!DOCTYPE html>
-<html>
-<body>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script>
 'use strict';
 
 function hasProperty(orientationProperty)
 {
-  for (var property in window) {
+  for (let property in window) {
     if (property == orientationProperty)
       return true;
   }
@@ -31,5 +29,3 @@
   assert_true(window.hasOwnProperty('ondeviceorientationabsolute'));
 }, 'Tests that the window.DeviceOrientationEvent and window.ondeviceorientation and window.ondeviceorientationabsolute properties are present.');
 </script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/resources/orientation-event-helpers.js b/third_party/blink/web_tests/external/wpt/orientation-event/resources/orientation-event-helpers.js
new file mode 100644
index 0000000..528dfa9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/resources/orientation-event-helpers.js
@@ -0,0 +1,247 @@
+'use strict';
+
+// These tests rely on the User Agent providing an implementation of
+// platform sensor backends.
+//
+// In Chromium-based browsers this implementation is provided by a polyfill
+// in order to reduce the amount of test-only code shipped to users. To enable
+// these tests the browser must be run with these options:
+//
+//   --enable-blink-features=MojoJS,MojoJSTest
+const loadChromiumResources = async () => {
+  if (!('MojoInterfaceInterceptor' in self)) {
+    // Do nothing on non-Chromium-based browsers or when the Mojo bindings are
+    // not present in the global namespace.
+    return;
+  }
+
+  const resources = [
+    '/gen/layout_test_data/mojo/public/js/mojo_bindings.js',
+    '/gen/mojo/public/mojom/base/string16.mojom.js',
+    '/gen/services/device/public/mojom/sensor.mojom.js',
+    '/gen/services/device/public/mojom/sensor_provider.mojom.js',
+    '/resources/chromium/generic_sensor_mocks.js',
+  ];
+
+  await Promise.all(resources.map(path => {
+    const script = document.createElement('script');
+    script.src = path;
+    script.async = false;
+    const promise = new Promise((resolve, reject) => {
+      script.onload = resolve;
+      script.onerror = reject;
+    });
+    document.head.appendChild(script);
+    return promise;
+  }));
+};
+
+async function initialize_generic_sensor_tests() {
+  if (typeof GenericSensorTest === 'undefined') {
+    await loadChromiumResources();
+  }
+  assert_true(
+    typeof GenericSensorTest !== 'undefined',
+    'Mojo testing interface is not available.'
+  );
+  let sensorTest = new GenericSensorTest();
+  await sensorTest.initialize();
+  return sensorTest;
+}
+
+function sensor_test(func, name, properties) {
+  promise_test(async (t) => {
+    let sensorTest = await initialize_generic_sensor_tests();
+    try {
+      await func(t, sensorTest.getSensorProvider());
+    } finally {
+      await sensorTest.reset();
+    };
+  }, name, properties);
+}
+
+const MOTION_ROTATION_EPSILON = 1e-8;
+
+function generateMotionData(accelerationX, accelerationY, accelerationZ,
+                            accelerationIncludingGravityX,
+                            accelerationIncludingGravityY,
+                            accelerationIncludingGravityZ,
+                            rotationRateAlpha, rotationRateBeta, rotationRateGamma,
+                            interval = 16) {
+  const motionData = {accelerationX: accelerationX,
+                    accelerationY: accelerationY,
+                    accelerationZ: accelerationZ,
+                    accelerationIncludingGravityX: accelerationIncludingGravityX,
+                    accelerationIncludingGravityY: accelerationIncludingGravityY,
+                    accelerationIncludingGravityZ: accelerationIncludingGravityZ,
+                    rotationRateAlpha: rotationRateAlpha,
+                    rotationRateBeta: rotationRateBeta,
+                    rotationRateGamma: rotationRateGamma,
+                    interval: interval};
+  return motionData;
+}
+
+function generateOrientationData(alpha, beta, gamma, absolute) {
+  const orientationData = {alpha: alpha,
+                         beta: beta,
+                         gamma: gamma,
+                         absolute: absolute};
+  return orientationData;
+}
+
+async function setMockSensorDataForType(sensorProvider, sensorType, mockDataArray) {
+  const createdSensor = await sensorProvider.getCreatedSensor(sensorType);
+  return createdSensor.setSensorReading([mockDataArray]);
+}
+
+// Device[Orientation|Motion]EventPump treat NaN as a missing value.
+let nullToNan = x => (x === null ? NaN : x);
+
+function setMockMotionData(sensorProvider, motionData) {
+  const degToRad = Math.PI / 180;
+  return Promise.all([
+      setMockSensorDataForType(sensorProvider, "Accelerometer", [
+          nullToNan(motionData.accelerationIncludingGravityX),
+          nullToNan(motionData.accelerationIncludingGravityY),
+          nullToNan(motionData.accelerationIncludingGravityZ),
+      ]),
+      setMockSensorDataForType(sensorProvider, "LinearAccelerationSensor", [
+          nullToNan(motionData.accelerationX),
+          nullToNan(motionData.accelerationY),
+          nullToNan(motionData.accelerationZ),
+      ]),
+      setMockSensorDataForType(sensorProvider, "Gyroscope", [
+          nullToNan(motionData.rotationRateAlpha) * degToRad,
+          nullToNan(motionData.rotationRateBeta) * degToRad,
+          nullToNan(motionData.rotationRateGamma) * degToRad,
+      ]),
+  ]);
+}
+
+function setMockOrientationData(sensorProvider, orientationData) {
+  let sensorType = orientationData.absolute
+      ? "AbsoluteOrientationEulerAngles" : "RelativeOrientationEulerAngles";
+  return setMockSensorDataForType(sensorProvider, sensorType, [
+      nullToNan(orientationData.beta),
+      nullToNan(orientationData.gamma),
+      nullToNan(orientationData.alpha),
+  ]);
+}
+
+function checkMotion(event, expectedMotionData) {
+  assert_equals(event.acceleration.x, expectedMotionData.accelerationX, "acceleration.x");
+  assert_equals(event.acceleration.y, expectedMotionData.accelerationY, "acceleration.y");
+  assert_equals(event.acceleration.z, expectedMotionData.accelerationZ, "acceleration.z");
+
+  assert_equals(event.accelerationIncludingGravity.x, expectedMotionData.accelerationIncludingGravityX, "accelerationIncludingGravity.x");
+  assert_equals(event.accelerationIncludingGravity.y, expectedMotionData.accelerationIncludingGravityY, "accelerationIncludingGravity.y");
+  assert_equals(event.accelerationIncludingGravity.z, expectedMotionData.accelerationIncludingGravityZ, "accelerationIncludingGravity.z");
+
+  assert_approx_equals(event.rotationRate.alpha, expectedMotionData.rotationRateAlpha, MOTION_ROTATION_EPSILON, "rotationRate.alpha");
+  assert_approx_equals(event.rotationRate.beta, expectedMotionData.rotationRateBeta, MOTION_ROTATION_EPSILON, "rotationRate.beta");
+  assert_approx_equals(event.rotationRate.gamma, expectedMotionData.rotationRateGamma, MOTION_ROTATION_EPSILON, "rotationRate.gamma");
+
+  assert_equals(event.interval, expectedMotionData.interval, "interval");
+}
+
+function checkOrientation(event, expectedOrientationData) {
+  assert_equals(event.alpha, expectedOrientationData.alpha, "alpha");
+  assert_equals(event.beta, expectedOrientationData.beta, "beta");
+  assert_equals(event.gamma, expectedOrientationData.gamma, "gamma");
+
+  assert_equals(event.absolute, expectedOrientationData.absolute, "absolute");
+}
+
+// Returns a promise that will be resolved when an event equal to the given
+// event is fired.
+function waitForEvent(expectedEvent, targetWindow = window) {
+  const stringify = (thing, targetWindow) => {
+    if (thing instanceof targetWindow.Object && thing.constructor !== targetWindow.Object) {
+      let str = '{';
+      for (let key of Object.keys(Object.getPrototypeOf(thing))) {
+        str += JSON.stringify(key) + ': ' + stringify(thing[key], targetWindow) + ', ';
+      }
+      return str + '}';
+    } else if (thing instanceof Number) {
+      return thing.toFixed(6);
+    }
+    return JSON.stringify(thing);
+  };
+
+  return new Promise((resolve, reject) => {
+    let events = [];
+    let timeoutId = null;
+
+    const expectedEventString = stringify(expectedEvent, window);
+    function listener(event) {
+      const eventString = stringify(event, targetWindow);
+      if (eventString === expectedEventString) {
+        targetWindow.clearTimeout(timeoutId);
+        targetWindow.removeEventListener(expectedEvent.type, listener);
+        resolve();
+      } else {
+        events.push(eventString);
+      }
+    }
+    targetWindow.addEventListener(expectedEvent.type, listener);
+
+    timeoutId = targetWindow.setTimeout(() => {
+      targetWindow.removeEventListener(expectedEvent.type, listener);
+      let errorMessage = 'Timeout waiting for expected event: ' + expectedEventString;
+      if (events.length == 0) {
+        errorMessage += ', no events were fired';
+      } else {
+        errorMessage += ', received events: '
+        for (let event of events) {
+          errorMessage += event + ', ';
+        }
+      }
+      reject(errorMessage);
+    }, 500);
+  });
+}
+
+function waitForOrientation(expectedOrientationData, targetWindow = window) {
+  return waitForEvent(
+      new DeviceOrientationEvent('deviceorientation', {
+        alpha: expectedOrientationData.alpha,
+        beta: expectedOrientationData.beta,
+        gamma: expectedOrientationData.gamma,
+        absolute: expectedOrientationData.absolute,
+      }),
+      targetWindow);
+}
+
+function waitForAbsoluteOrientation(expectedOrientationData, targetWindow = window) {
+  return waitForEvent(
+      new DeviceOrientationEvent('deviceorientationabsolute', {
+        alpha: expectedOrientationData.alpha,
+        beta: expectedOrientationData.beta,
+        gamma: expectedOrientationData.gamma,
+        absolute: expectedOrientationData.absolute,
+      }),
+      targetWindow);
+}
+
+function waitForMotion(expectedMotionData, targetWindow = window) {
+  return waitForEvent(
+      new DeviceMotionEvent('devicemotion', {
+        acceleration: {
+          x: expectedMotionData.accelerationX,
+          y: expectedMotionData.accelerationY,
+          z: expectedMotionData.accelerationZ,
+        },
+        accelerationIncludingGravity: {
+          x: expectedMotionData.accelerationIncludingGravityX,
+          y: expectedMotionData.accelerationIncludingGravityY,
+          z: expectedMotionData.accelerationIncludingGravityZ,
+        },
+        rotationRate: {
+          alpha: expectedMotionData.rotationRateAlpha,
+          beta: expectedMotionData.rotationRateBeta,
+          gamma: expectedMotionData.rotationRateGamma,
+        },
+        interval: expectedMotionData.interval,
+      }),
+      targetWindow);
+}
diff --git a/third_party/blink/web_tests/external/wpt/resources/chromium/generic_sensor_mocks.js b/third_party/blink/web_tests/external/wpt/resources/chromium/generic_sensor_mocks.js
index 8f13420..3ee748c9 100644
--- a/third_party/blink/web_tests/external/wpt/resources/chromium/generic_sensor_mocks.js
+++ b/third_party/blink/web_tests/external/wpt/resources/chromium/generic_sensor_mocks.js
@@ -1,5 +1,31 @@
 'use strict';
 
+// A "sliding window" that iterates over |data| and returns one item at a
+// time, advancing and wrapping around as needed. |data| must be an array of
+// arrays.
+class RingBuffer {
+  constructor(data) {
+    this.bufferPosition_ = 0;
+    // Validate |data|'s format and deep-copy every element.
+    this.data_ = Array.from(data, element => {
+      if (!Array.isArray(element)) {
+        throw new TypeError('Every |data| element must be an array.');
+      }
+      return Array.from(element);
+    })
+  }
+
+  next() {
+    const value = this.data_[this.bufferPosition_];
+    this.bufferPosition_ = (this.bufferPosition_ + 1) % this.data_.length;
+    return { done: false, value: value };
+  }
+
+  [Symbol.iterator]() {
+    return this;
+  }
+}
+
 var GenericSensorTest = (() => {
   // Default sensor frequency in default configurations.
   const DEFAULT_FREQUENCY = 5;
@@ -10,6 +36,7 @@
     constructor(sensorRequest, handle, offset, size, reportingMode) {
       this.client_ = null;
       this.startShouldFail_ = false;
+      this.notifyOnReadingChange_ = true;
       this.reportingMode_ = reportingMode;
       this.sensorReadingTimerId_ = null;
       this.readingData_ = null;
@@ -59,6 +86,13 @@
         this.stopReading();
     }
 
+    // ConfigureReadingChangeNotifications(bool enabled)
+    // Configures whether to report a reading change when in ON_CHANGE
+    // reporting mode.
+    configureReadingChangeNotifications(notifyOnReadingChange) {
+      this.notifyOnReadingChange_ = notifyOnReadingChange;
+    }
+
     // Mock functions
 
     // Resets mock Sensor state.
@@ -66,6 +100,7 @@
       this.stopReading();
       this.startShouldFail_ = false;
       this.requestedFrequencies_ = [];
+      this.notifyOnReadingChange_ = true;
       this.readingData_ = null;
       this.buffer_.fill(0);
       this.binding_.close();
@@ -100,7 +135,8 @@
         // For all tests sensor reading should have monotonically
         // increasing timestamp in seconds.
         this.buffer_[1] = window.performance.now() * 0.001;
-        if (this.reportingMode_ === device.mojom.ReportingMode.ON_CHANGE) {
+        if (this.reportingMode_ === device.mojom.ReportingMode.ON_CHANGE &&
+            this.notifyOnReadingChange_) {
           this.client_.sensorReadingChanged();
         }
       }, timeout);
diff --git a/third_party/blink/web_tests/fast/canvas/canvas-drawImage-live-video.html b/third_party/blink/web_tests/fast/canvas/canvas-drawImage-live-video.html
index 81986f77..337822d 100644
--- a/third_party/blink/web_tests/fast/canvas/canvas-drawImage-live-video.html
+++ b/third_party/blink/web_tests/fast/canvas/canvas-drawImage-live-video.html
@@ -26,7 +26,7 @@
     function drawFirstFrame() {
       video.removeEventListener("canplaythrough", drawFirstFrame, true);
       ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
-      video.requestAnimationFrame(t.step_func(processFirstFrame));
+      video.requestVideoFrameCallback(t.step_func(processFirstFrame));
       video.play();
     }
 
@@ -35,7 +35,7 @@
     function processFirstFrame() {
       ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
       referenceImageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
-      video.requestAnimationFrame(t.step_func_done(processSecondFrame));
+      video.requestVideoFrameCallback(t.step_func_done(processSecondFrame));
     }
 
     function processSecondFrame() {
diff --git a/third_party/blink/web_tests/fast/peerconnection/RTCPeerConnection-insertable-streams-simulcast.html b/third_party/blink/web_tests/fast/peerconnection/RTCPeerConnection-insertable-streams-simulcast.html
new file mode 100644
index 0000000..a0346967
--- /dev/null
+++ b/third_party/blink/web_tests/fast/peerconnection/RTCPeerConnection-insertable-streams-simulcast.html
@@ -0,0 +1,84 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCPeerConnection Simulcast Tests</title>
+<script src="../../external/wpt/webrtc/third_party/sdp/sdp.js"></script>
+<script src="../../external/wpt/webrtc/simulcast/simulcast.js"></script>
+<script src="../../external/wpt/webrtc/RTCPeerConnection-helper.js"></script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script>
+// Test based on wpt/webrtc/simulcast/basic.https.html
+promise_test(async t => {
+  const rids = [0, 1, 2];
+  const pc1 = new RTCPeerConnection({forceEncodedVideoInsertableStreams:true});
+  t.add_cleanup(() => pc1.close());
+  const pc2 = new RTCPeerConnection({forceEncodedVideoInsertableStreams:true});
+  t.add_cleanup(() => pc2.close());
+
+  exchangeIceCandidates(pc1, pc2);
+
+  const metadataToBeLoaded = [];
+  let receiverSSRCs = []
+  pc2.ontrack = t.step_func(e => {
+    const receiverTransformer = new TransformStream({
+      async transform(chunk, controller) {
+        if (receiverSSRCs.indexOf(chunk.synchronizationSource) == -1)
+          receiverSSRCs.push(chunk.synchronizationSource);
+        controller.enqueue(chunk);
+      }
+    });
+    const receiverStreams = e.receiver.createEncodedVideoStreams();
+    receiverStreams.readableStream
+        .pipeThrough(receiverTransformer)
+        .pipeTo(receiverStreams.writableStream);
+
+    const stream = e.streams[0];
+    const v = document.createElement('video');
+    v.autoplay = true;
+    v.srcObject = stream;
+    v.id = stream.id
+    metadataToBeLoaded.push(new Promise((resolve) => {
+        v.addEventListener('loadedmetadata', () => {
+            resolve();
+        });
+    }));
+  });
+
+  const stream = await navigator.mediaDevices.getUserMedia({video: {width: 1280, height: 720}});
+  t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+  const transceiver = pc1.addTransceiver(stream.getVideoTracks()[0], {
+    streams: [stream],
+    sendEncodings: rids.map(rid => {rid}),
+  });
+  const senderStreams = transceiver.sender.createEncodedVideoStreams();
+  let senderSSRCs = [];
+  const senderTransformer = new TransformStream({
+    async transform(chunk, controller) {
+      if (senderSSRCs.indexOf(chunk.synchronizationSource) == -1)
+        senderSSRCs.push(chunk.synchronizationSource);
+      controller.enqueue(chunk);
+    }
+  });
+  senderStreams.readableStream
+      .pipeThrough(senderTransformer)
+      .pipeTo(senderStreams.writableStream);
+
+  const offer = await pc1.createOffer();
+  await pc1.setLocalDescription(offer),
+  await pc2.setRemoteDescription({
+    type: 'offer',
+    sdp: swapRidAndMidExtensionsInSimulcastOffer(offer, rids),
+  });
+  const answer = await pc2.createAnswer();
+  await pc2.setLocalDescription(answer);
+  await pc1.setRemoteDescription({
+    type: 'answer',
+    sdp: swapRidAndMidExtensionsInSimulcastAnswer(answer, pc1.localDescription, rids),
+  });
+  assert_equals(metadataToBeLoaded.length, 3);
+  await Promise.all(metadataToBeLoaded);
+  // Ensure that frames from the 3 simulcast layers are exposed.
+  assert_equals(senderSSRCs.length, 3);
+  assert_equals(receiverSSRCs.length, 3);
+}, 'Basic simulcast setup with three spatial layers');
+</script>
diff --git a/third_party/blink/web_tests/fullscreen/resources/video.html b/third_party/blink/web_tests/fullscreen/resources/video.html
index 92f6b6a..4f36b84 100644
--- a/third_party/blink/web_tests/fullscreen/resources/video.html
+++ b/third_party/blink/web_tests/fullscreen/resources/video.html
@@ -7,7 +7,7 @@
 
 function fullscreenChanged() {
     parent.postMessage("SUCCEED - entered full screen!", "*");
-    video.requestAnimationFrame(framePainted);
+    video.requestVideoFrameCallback(framePainted);
 }
 
 function framePainted() {
diff --git a/third_party/blink/web_tests/http/tests/media/video-frame-size-change.html b/third_party/blink/web_tests/http/tests/media/video-frame-size-change.html
index 5b29faf..11f7b2e 100644
--- a/third_party/blink/web_tests/http/tests/media/video-frame-size-change.html
+++ b/third_party/blink/web_tests/http/tests/media/video-frame-size-change.html
@@ -50,10 +50,10 @@
     response = await fetch('/media/resources/media-source/webm/test-v-128k-640x480-30fps-10kfr.webm');
     let videoData480p = await response.arrayBuffer();
 
-    // Queue a requestAnimationFrame() before appending buffers in order not to
+    // Queue a requestVideoFrameCallback() before appending buffers in order not to
     // miss any frames.
     let singleSizeVideo = document.getElementById('single_size');
-    singleSizeVideo.requestAnimationFrame(waitForRender);
+    singleSizeVideo.requestVideoFrameCallback(waitForRender);
 
     // Set up the first video with content of a single size.
     let ss_sourceBuffer = await setupMse(singleSizeVideo, 'video/webm; codecs="vp8"');
@@ -62,8 +62,8 @@
 
     // Wait for a frame of the first size to be painted. Then seek beyond the first size.
     let mixedSizeVideo = document.getElementById('mixed_size');
-    mixedSizeVideo.requestAnimationFrame(_=> {
-      mixedSizeVideo.requestAnimationFrame(waitForRender);
+    mixedSizeVideo.requestVideoFrameCallback(_=> {
+      mixedSizeVideo.requestVideoFrameCallback(waitForRender);
       mixedSizeVideo.currentTime = 2;
     });
 
diff --git a/third_party/blink/web_tests/media/suspend-util.js b/third_party/blink/web_tests/media/suspend-util.js
index 4aea9bd..d00ff7f 100644
--- a/third_party/blink/web_tests/media/suspend-util.js
+++ b/third_party/blink/web_tests/media/suspend-util.js
@@ -63,7 +63,7 @@
   });
 
   if (expectSuspend == UPON_VISIBILITY) {
-    video.requestAnimationFrame(t.step_func(function() {
+    video.requestVideoFrameCallback(t.step_func(function() {
       assert_false(
           internals.isMediaElementSuspended(video),
           'Element should not have been suspended by the first frame.');
diff --git a/third_party/blink/web_tests/scrollbars/mock-scrollbars-expected.html b/third_party/blink/web_tests/scrollbars/mock-scrollbars-expected.html
index cf2bde2..22a69582 100644
--- a/third_party/blink/web_tests/scrollbars/mock-scrollbars-expected.html
+++ b/third_party/blink/web_tests/scrollbars/mock-scrollbars-expected.html
@@ -1,14 +1,13 @@
 <!DOCTYPE html>
+<script>
+  if (window.internals)
+    internals.useMockOverlayScrollbars();
+  onload = ()=> {
+    child.style.display = "block";
+  }
+</script>
 <style>body { overflow:hidden; }</style>
 <p>The scrollable container below should not appear to be scrollable.</p>
 <div id="child" style="display:none; overflow:scroll; width:200px; height:200px;">
   <div style="box-sizing:border-box; border:solid; width:100%; height:100%;"></div>
 </div>
-<script>
-onload = ()=> {
-  if (!window.internals)
-    return;
-  internals.useMockOverlayScrollbars();
-  child.style.display = "block";
-}
-</script>
diff --git a/third_party/blink/web_tests/scrollbars/mock-scrollbars.html b/third_party/blink/web_tests/scrollbars/mock-scrollbars.html
index c472a63..14143f1 100644
--- a/third_party/blink/web_tests/scrollbars/mock-scrollbars.html
+++ b/third_party/blink/web_tests/scrollbars/mock-scrollbars.html
@@ -1,13 +1,10 @@
 <!DOCTYPE html>
+<script>
+  if (window.internals)
+    internals.useMockOverlayScrollbars();
+</script>
 <style>body { overflow:hidden; }</style>
 <p>The scrollable container below should not appear to be scrollable.</p>
 <div style="overflow:scroll; width:200px; height:200px;">
   <div style="box-sizing:border-box; border:solid; width:100%; height:100%;"></div>
 </div>
-<script>
-onload = ()=> {
-  if (!window.internals)
-    return;
-  internals.useMockOverlayScrollbars();
-}
-</script>
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
index 08f20d1c..985bd91 100644
--- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -1148,7 +1148,7 @@
     property autoplay
     property buffered
     property canPlayType
-    property cancelAnimationFrame
+    property cancelVideoFrameCallback
     property captureStream
     property controls
     property controlsList
@@ -1184,8 +1184,8 @@
     property preload
     property readyState
     property remote
-    property requestAnimationFrame
     property requestPictureInPicture
+    property requestVideoFrameCallback
     property seekable
     property seeking
     property setMediaKeys
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 3ea4343b..60a024e0 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -4275,11 +4275,11 @@
     getter webkitDroppedFrameCount
     getter webkitSupportsFullscreen
     getter width
-    method cancelAnimationFrame
+    method cancelVideoFrameCallback
     method constructor
     method getVideoPlaybackQuality
-    method requestAnimationFrame
     method requestPictureInPicture
+    method requestVideoFrameCallback
     method webkitEnterFullScreen
     method webkitEnterFullscreen
     method webkitExitFullScreen
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 344f93e..b2d4d4e 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -24643,6 +24643,19 @@
   </summary>
 </histogram>
 
+<histogram base="true" name="ChromeOS.SystemTray.AnimationSmoothness" units="%"
+    expires_after="2021-04-13">
+<!-- Name completed by histogram suffixes
+     name="SystemTrayTransitionType" -->
+
+  <owner>amehfooz@chromium.org</owner>
+  <owner>tengs@chromium.org</owner>
+  <summary>
+    Tracks the animation smoothness for the collapse / expand animation of the
+    system tray.
+  </summary>
+</histogram>
+
 <histogram name="ChromeOS.SystemTray.FeaturePodCountOnOpen" units="count"
     expires_after="2020-10-04">
   <owner>tengs@chromium.org</owner>
@@ -200951,6 +200964,14 @@
   <affected-histogram name="Mobile.SystemNotification.Dismiss.Age"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="SystemTrayTransitionType" separator=".">
+  <suffix name="TransitionToCollapsed"
+      label="Transition to the collapsed system tray"/>
+  <suffix name="TransitionToExpanded"
+      label="Transition to the expanded system tray"/>
+  <affected-histogram name="ChromeOS.SystemTray.AnimationSmoothness"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="SyzygyStartupTime" separator="_">
   <obsolete>
     No longer logged.
diff --git a/tools/perf/core/shard_maps/timing_data/android-pixel2-perf_timing.json b/tools/perf/core/shard_maps/timing_data/android-pixel2-perf_timing.json
index 37f7c48..d632b72d 100644
--- a/tools/perf/core/shard_maps/timing_data/android-pixel2-perf_timing.json
+++ b/tools/perf/core/shard_maps/timing_data/android-pixel2-perf_timing.json
@@ -612,10 +612,6 @@
         "name": "blink_perf.events/hit-test-lots-of-layers.html"
     },
     {
-        "duration": "36.0",
-        "name": "blink_perf.events/is-input-pending-all-events.html"
-    },
-    {
         "duration": "38.0",
         "name": "blink_perf.events/is-input-pending-default-events.html"
     },
diff --git a/tools/perf/core/shard_maps/timing_data/android-pixel2_webview-perf_timing.json b/tools/perf/core/shard_maps/timing_data/android-pixel2_webview-perf_timing.json
index 29e071f..ce164d6 100644
--- a/tools/perf/core/shard_maps/timing_data/android-pixel2_webview-perf_timing.json
+++ b/tools/perf/core/shard_maps/timing_data/android-pixel2_webview-perf_timing.json
@@ -612,10 +612,6 @@
         "name": "blink_perf.events/hit-test-lots-of-layers.html"
     },
     {
-        "duration": "32.0",
-        "name": "blink_perf.events/is-input-pending-all-events.html"
-    },
-    {
         "duration": "29.0",
         "name": "blink_perf.events/is-input-pending-default-events.html"
     },
diff --git a/tools/perf/core/shard_maps/timing_data/android_nexus5x_webview_perf_timing.json b/tools/perf/core/shard_maps/timing_data/android_nexus5x_webview_perf_timing.json
index 1b2de5d9..6b2b4c6 100644
--- a/tools/perf/core/shard_maps/timing_data/android_nexus5x_webview_perf_timing.json
+++ b/tools/perf/core/shard_maps/timing_data/android_nexus5x_webview_perf_timing.json
@@ -613,10 +613,6 @@
     },
     {
         "duration": "13.0",
-        "name": "blink_perf.events/is-input-pending-all-events.html"
-    },
-    {
-        "duration": "13.0",
         "name": "blink_perf.events/is-input-pending-default-events.html"
     },
     {
diff --git a/tools/perf/core/shard_maps/timing_data/linux-perf_timing.json b/tools/perf/core/shard_maps/timing_data/linux-perf_timing.json
index 75fd8b8..686d88f0 100644
--- a/tools/perf/core/shard_maps/timing_data/linux-perf_timing.json
+++ b/tools/perf/core/shard_maps/timing_data/linux-perf_timing.json
@@ -613,10 +613,6 @@
     },
     {
         "duration": "12.0",
-        "name": "blink_perf.events/is-input-pending-all-events.html"
-    },
-    {
-        "duration": "12.0",
         "name": "blink_perf.events/is-input-pending-default-events.html"
     },
     {
diff --git a/tools/perf/core/shard_maps/timing_data/mac-10_12_laptop_low_end-perf_timing.json b/tools/perf/core/shard_maps/timing_data/mac-10_12_laptop_low_end-perf_timing.json
index 4c5dbad..e2fcf53 100644
--- a/tools/perf/core/shard_maps/timing_data/mac-10_12_laptop_low_end-perf_timing.json
+++ b/tools/perf/core/shard_maps/timing_data/mac-10_12_laptop_low_end-perf_timing.json
@@ -653,10 +653,6 @@
     },
     {
         "duration": "16.0",
-        "name": "blink_perf.events/is-input-pending-all-events.html"
-    },
-    {
-        "duration": "16.0",
         "name": "blink_perf.events/is-input-pending-default-events.html"
     },
     {
diff --git a/tools/perf/core/shard_maps/timing_data/mac-10_13_laptop_high_end-perf_timing.json b/tools/perf/core/shard_maps/timing_data/mac-10_13_laptop_high_end-perf_timing.json
index 4863339..677040f9 100644
--- a/tools/perf/core/shard_maps/timing_data/mac-10_13_laptop_high_end-perf_timing.json
+++ b/tools/perf/core/shard_maps/timing_data/mac-10_13_laptop_high_end-perf_timing.json
@@ -621,10 +621,6 @@
     },
     {
         "duration": "14.0",
-        "name": "blink_perf.events/is-input-pending-all-events.html"
-    },
-    {
-        "duration": "14.0",
         "name": "blink_perf.events/is-input-pending-default-events.html"
     },
     {
diff --git a/tools/perf/core/shard_maps/timing_data/win-10-perf_timing.json b/tools/perf/core/shard_maps/timing_data/win-10-perf_timing.json
index 1bdc724..d4c6961 100644
--- a/tools/perf/core/shard_maps/timing_data/win-10-perf_timing.json
+++ b/tools/perf/core/shard_maps/timing_data/win-10-perf_timing.json
@@ -613,10 +613,6 @@
     },
     {
         "duration": "18.0",
-        "name": "blink_perf.events/is-input-pending-all-events.html"
-    },
-    {
-        "duration": "18.0",
         "name": "blink_perf.events/is-input-pending-default-events.html"
     },
     {
diff --git a/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf_timing.json b/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf_timing.json
index 9f94a4d..3e215d7 100644
--- a/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf_timing.json
+++ b/tools/perf/core/shard_maps/timing_data/win-10_laptop_low_end-perf_timing.json
@@ -612,10 +612,6 @@
         "name": "blink_perf.events/hit-test-lots-of-layers.html"
     },
     {
-        "duration": "20.0",
-        "name": "blink_perf.events/is-input-pending-all-events.html"
-    },
-    {
         "duration": "22.0",
         "name": "blink_perf.events/is-input-pending-default-events.html"
     },
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config
index f53b19af..669443f 100644
--- a/tools/perf/expectations.config
+++ b/tools/perf/expectations.config
@@ -72,8 +72,6 @@
 crbug.com/986423 [ android-nexus-5x android-webview ] blink_perf.events/EventsDispatchingInDeeplyNestedV1ShadowTrees.html [ Skip ]
 crbug.com/986423 [ android-nexus-5x android-webview ] blink_perf.events/EventsDispatchingInV0ShadowTrees.html [ Skip ]
 crbug.com/986423 [ android-nexus-5x android-webview ] blink_perf.events/EventsDispatchingInV1ShadowTrees.html [ Skip ]
-crbug.com/1069468 blink_perf.events/is-input-pending-all-events.html [ Skip ]
-crbug.com/1069468 blink_perf.events/is-input-pending-default-events.html [ Skip ]
 
 # Benchmark: blink_perf.layout
 crbug.com/551950 [ android-low-end ] blink_perf.layout/* [ Skip ]
diff --git a/tools/win/trim_heap/OWNERS b/tools/win/trim_heap/OWNERS
index 9969d28..5f4cc19 100644
--- a/tools/win/trim_heap/OWNERS
+++ b/tools/win/trim_heap/OWNERS
@@ -1,3 +1,3 @@
 brucedawson@chromium.org
 davidbienvenu@chromium.org
-jessemckenna@chromium.org
+jessemckenna@google.com
diff --git a/ui/accessibility/extensions/strings/accessibility_extensions_strings_ne.xtb b/ui/accessibility/extensions/strings/accessibility_extensions_strings_ne.xtb
index de59210..fb1d5944 100644
--- a/ui/accessibility/extensions/strings/accessibility_extensions_strings_ne.xtb
+++ b/ui/accessibility/extensions/strings/accessibility_extensions_strings_ne.xtb
@@ -52,7 +52,7 @@
 <translation id="633394792577263429">शब्दहरू अनुसार सार्न&lt;span class='key'&gt;Control&lt;/span&gt; लाई तल सामत्नुहोस्।</translation>
 <translation id="6550675742724504774">विकल्पहरू</translation>
 <translation id="6838518108677880446">सेटअप गर्नुहोस्</translation>
-<translation id="690628312087070417">जब क्यारेट एक ठूलो दूरी अनुपातमा उफ्रन्छ:</translation>
+<translation id="690628312087070417">जब क्यारेट एक ठुलो दूरी अनुपातमा उफ्रन्छ:</translation>
 <translation id="6965382102122355670">ठिक छ</translation>
 <translation id="7379645913608427028">डिग्री</translation>
 <translation id="7384431257964758081">उच्च कन्ट्रास्ट सक्षम गरिएको छ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
index 604b28d5..117a8b8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
@@ -543,7 +543,7 @@
 <translation id="7238097264433196391">यन्त्रको नाम</translation>
 <translation id="7248671827512403053">अनुप्रयोग</translation>
 <translation id="7268659760406822741">उपलब्ध सेवाहरू</translation>
-<translation id="7283041136720745563">तपाईंको Google ड्राइभको कोटा पर्याप्त ठूलो छैन।</translation>
+<translation id="7283041136720745563">तपाईंको Google ड्राइभको कोटा पर्याप्त ठुलो छैन।</translation>
 <translation id="7295662345261934369">अरूसँग आदान प्रदान गर्नुहोस्</translation>
 <translation id="7339898014177206373">नयाँ विन्डो</translation>
 <translation id="7348749398828259943">US Workman अन्तर्राष्ट्रिय किबोर्ड</translation>
@@ -590,7 +590,7 @@
 <translation id="7805768142964895445">स्थिति</translation>
 <translation id="7821462174190887129"><ph name="FILE_COUNT" /> फेला पर्‍यो।
     <ph name="LINE_BREAK1" />
-    तपाईंको Google ड्राइभ कोटा पर्याप्त ठूलो छैन। थप <ph name="FILE_SIZE" /> आवश्यक छ।
+    तपाईंको Google ड्राइभ कोटा पर्याप्त ठुलो छैन। थप <ph name="FILE_SIZE" /> आवश्यक छ।
     <ph name="LINE_BREAK2" />
     अझ थोरै तस्बिरहरू चयन गरी हेर्नुहोस्।</translation>
 <translation id="7825423931463735974">तामिल किबोर्ड (तामिल99)</translation>
diff --git a/ui/views/corewm/desktop_capture_controller_unittest.cc b/ui/views/corewm/desktop_capture_controller_unittest.cc
index 2e4d5119..23141710 100644
--- a/ui/views/corewm/desktop_capture_controller_unittest.cc
+++ b/ui/views/corewm/desktop_capture_controller_unittest.cc
@@ -103,7 +103,7 @@
   params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
   params.bounds = gfx::Rect(50, 50, 650, 650);
   params.native_widget = test::CreatePlatformNativeWidgetImpl(
-      params, widget1.get(), test::kStubCapture, nullptr);
+      widget1.get(), test::kStubCapture, nullptr);
   widget1->Init(std::move(params));
   internal::RootView* root1 =
       static_cast<internal::RootView*>(widget1->GetRootView());
@@ -125,7 +125,7 @@
   params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
   params.bounds = gfx::Rect(50, 50, 650, 650);
   params.native_widget = test::CreatePlatformNativeWidgetImpl(
-      params, widget2.get(), test::kStubCapture, nullptr);
+      widget2.get(), test::kStubCapture, nullptr);
   widget2->Init(std::move(params));
 
   internal::RootView* root2 =
diff --git a/ui/views/test/native_widget_factory.cc b/ui/views/test/native_widget_factory.cc
index a62e7e2..9fad4ff7 100644
--- a/ui/views/test/native_widget_factory.cc
+++ b/ui/views/test/native_widget_factory.cc
@@ -18,7 +18,6 @@
 namespace test {
 
 NativeWidget* CreatePlatformNativeWidgetImpl(
-    const Widget::InitParams& init_params,
     Widget* widget,
     uint32_t type,
     bool* destroyed) {
diff --git a/ui/views/test/native_widget_factory.h b/ui/views/test/native_widget_factory.h
index f36754a..3dab12c 100644
--- a/ui/views/test/native_widget_factory.h
+++ b/ui/views/test/native_widget_factory.h
@@ -25,7 +25,6 @@
 // If |destroyed| is non-null it it set to true from the destructor of the
 // NativeWidget.
 NativeWidget* CreatePlatformNativeWidgetImpl(
-    const Widget::InitParams& init_params,
     Widget* widget,
     uint32_t behavior,
     bool* destroyed);
diff --git a/ui/views/test/widget_test.cc b/ui/views/test/widget_test.cc
index f9fea984..b166b556 100644
--- a/ui/views/test/widget_test.cc
+++ b/ui/views/test/widget_test.cc
@@ -28,7 +28,7 @@
   Widget* widget = new Widget;
   Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
   params.native_widget =
-      CreatePlatformNativeWidgetImpl(params, widget, kStubCapture, nullptr);
+      CreatePlatformNativeWidgetImpl(widget, kStubCapture, nullptr);
   widget->Init(std::move(params));
   return widget;
 }
@@ -38,7 +38,7 @@
   Widget::InitParams params =
       CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
   params.native_widget =
-      CreatePlatformNativeWidgetImpl(params, widget, kStubCapture, nullptr);
+      CreatePlatformNativeWidgetImpl(widget, kStubCapture, nullptr);
   widget->Init(std::move(params));
   return widget;
 }
@@ -49,7 +49,7 @@
   params.parent = parent_native_view;
   Widget* child = new Widget;
   params.native_widget =
-      CreatePlatformNativeWidgetImpl(params, child, kStubCapture, nullptr);
+      CreatePlatformNativeWidgetImpl(child, kStubCapture, nullptr);
   child->Init(std::move(params));
   child->SetContentsView(new View);
   return child;
@@ -71,10 +71,6 @@
   return child;
 }
 
-Widget* WidgetTest::CreateChildNativeWidget() {
-  return CreateChildNativeWidgetWithParent(nullptr);
-}
-
 View* WidgetTest::GetMousePressedHandler(internal::RootView* root_view) {
   return root_view->mouse_pressed_handler_;
 }
diff --git a/ui/views/test/widget_test.h b/ui/views/test/widget_test.h
index fe2472c..11df8427 100644
--- a/ui/views/test/widget_test.h
+++ b/ui/views/test/widget_test.h
@@ -62,7 +62,6 @@
   // still provide one.
   Widget* CreateTopLevelNativeWidget();
   Widget* CreateChildNativeWidgetWithParent(Widget* parent);
-  Widget* CreateChildNativeWidget();
 
   View* GetMousePressedHandler(internal::RootView* root_view);
 
diff --git a/ui/views/widget/any_widget_observer_unittest.cc b/ui/views/widget/any_widget_observer_unittest.cc
index 4a1bf692..344fd094 100644
--- a/ui/views/widget/any_widget_observer_unittest.cc
+++ b/ui/views/widget/any_widget_observer_unittest.cc
@@ -83,7 +83,7 @@
     Widget* widget = new Widget;
     Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
     params.native_widget = views::test::CreatePlatformNativeWidgetImpl(
-        params, widget, views::test::kStubCapture, nullptr);
+        widget, views::test::kStubCapture, nullptr);
     params.name = name;
     widget->Init(std::move(params));
     return widget;
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc
index a28f778..286926c5 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc
@@ -286,8 +286,8 @@
   Widget::InitParams params(Widget::InitParams::TYPE_CONTROL);
   params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
   params.parent = parent;
-  params.native_widget = CreatePlatformNativeWidgetImpl(params, widget.get(),
-                                                        kStubCapture, nullptr);
+  params.native_widget =
+      CreatePlatformNativeWidgetImpl(widget.get(), kStubCapture, nullptr);
   widget->Init(std::move(params));
   widget->Show();
   return widget;
diff --git a/ui/views/widget/desktop_widget_unittest.cc b/ui/views/widget/desktop_widget_unittest.cc
index 6295852..7eb0473 100644
--- a/ui/views/widget/desktop_widget_unittest.cc
+++ b/ui/views/widget/desktop_widget_unittest.cc
@@ -64,7 +64,7 @@
   params2.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
   params2.child = true;
   params2.native_widget = test::CreatePlatformNativeWidgetImpl(
-      params2, &widget2, test::kStubCapture, nullptr);
+      &widget2, test::kStubCapture, nullptr);
   widget2.Init(std::move(params2));
 
   Widget::InitParams params3 = CreateParams(Widget::InitParams::TYPE_CONTROL);
@@ -73,7 +73,7 @@
   params3.child = true;
   params3.bounds = gfx::Rect(origin, gfx::Size(500, work_area.height() - 200));
   params3.native_widget = test::CreatePlatformNativeWidgetImpl(
-      params3, &widget3, test::kStubCapture, nullptr);
+      &widget3, test::kStubCapture, nullptr);
   widget3.Init(std::move(params3));
 
   // The origin of the 3rd window should be the sum of all parent origins.
@@ -147,7 +147,7 @@
   params2.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
   params2.child = true;
   params2.native_widget = test::CreatePlatformNativeWidgetImpl(
-      params2, &widget2, test::kStubCapture, nullptr);
+      &widget2, test::kStubCapture, nullptr);
   widget2.Init(std::move(params2));
 
   // The bounds of the child window should be fully in the parent.
diff --git a/ui/views/widget/native_widget_aura_interactive_uitest.cc b/ui/views/widget/native_widget_aura_interactive_uitest.cc
index 6715dff..0d7d803 100644
--- a/ui/views/widget/native_widget_aura_interactive_uitest.cc
+++ b/ui/views/widget/native_widget_aura_interactive_uitest.cc
@@ -58,7 +58,7 @@
   Widget::InitParams params1(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
   params1.context = GetContext();
   params1.native_widget =
-      CreatePlatformNativeWidgetImpl(params1, widget1, kDefault, nullptr);
+      CreatePlatformNativeWidgetImpl(widget1, kDefault, nullptr);
   params1.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
   widget1->Init(std::move(params1));
   Textfield* textfield1 = new Textfield;
@@ -68,7 +68,7 @@
   Widget::InitParams params2(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
   params2.context = GetContext();
   params2.native_widget =
-      CreatePlatformNativeWidgetImpl(params2, widget2, kDefault, nullptr);
+      CreatePlatformNativeWidgetImpl(widget2, kDefault, nullptr);
   params2.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
   widget2->Init(std::move(params2));
   Textfield* textfield2a = new Textfield;
diff --git a/ui/views/widget/native_widget_mac_unittest.mm b/ui/views/widget/native_widget_mac_unittest.mm
index 90c1111..9009c049d 100644
--- a/ui/views/widget/native_widget_mac_unittest.mm
+++ b/ui/views/widget/native_widget_mac_unittest.mm
@@ -1624,8 +1624,8 @@
     Widget::InitParams init_params(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
     init_params.parent = parent->GetNativeView();
     init_params.bounds = gfx::Rect(100, 100, 100, 100);
-    init_params.native_widget = CreatePlatformNativeWidgetImpl(
-        init_params, child, kStubCapture, nullptr);
+    init_params.native_widget =
+        CreatePlatformNativeWidgetImpl(child, kStubCapture, nullptr);
     child->Init(std::move(init_params));
     child->Show();
 
@@ -1814,7 +1814,7 @@
   Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
   Widget* widget = new Widget;
   params.native_widget =
-      CreatePlatformNativeWidgetImpl(params, widget, kStubCapture, nullptr);
+      CreatePlatformNativeWidgetImpl(widget, kStubCapture, nullptr);
   CustomTitleWidgetDelegate delegate(widget);
   params.delegate = &delegate;
   params.bounds = gfx::Rect(0, 0, 800, 600);
diff --git a/ui/views/widget/widget_interactive_uitest.cc b/ui/views/widget/widget_interactive_uitest.cc
index 1eaf7ae..c50929e 100644
--- a/ui/views/widget/widget_interactive_uitest.cc
+++ b/ui/views/widget/widget_interactive_uitest.cc
@@ -1659,22 +1659,12 @@
   void TestCapture(bool use_desktop_native_widget) {
     CaptureLostState capture_state1;
     CaptureLostTrackingWidget widget1(&capture_state1);
-    Widget::InitParams params1 =
-        CreateParams(views::Widget::InitParams::TYPE_WINDOW);
-    params1.native_widget =
-        CreateNativeWidget(params1, use_desktop_native_widget, &widget1);
-    params1.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
-    widget1.Init(std::move(params1));
+    InitPlatformWidget(&widget1, use_desktop_native_widget);
     widget1.Show();
 
     CaptureLostState capture_state2;
     CaptureLostTrackingWidget widget2(&capture_state2);
-    Widget::InitParams params2 =
-        CreateParams(views::Widget::InitParams::TYPE_WINDOW);
-    params2.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
-    params2.native_widget =
-        CreateNativeWidget(params2, use_desktop_native_widget, &widget2);
-    widget2.Init(std::move(params2));
+    InitPlatformWidget(&widget2, use_desktop_native_widget);
     widget2.Show();
 
     // Set capture to widget2 and verity it gets it.
@@ -1699,13 +1689,16 @@
     EXPECT_FALSE(capture_state2.GetAndClearGotCaptureLost());
   }
 
-  NativeWidget* CreateNativeWidget(const Widget::InitParams& params,
-                                   bool create_desktop_native_widget,
-                                   Widget* widget) {
+  void InitPlatformWidget(Widget* widget, bool use_desktop_native_widget) {
+    Widget::InitParams params =
+        CreateParams(views::Widget::InitParams::TYPE_WINDOW);
     // The test base class by default returns DesktopNativeWidgetAura.
-    if (create_desktop_native_widget)
-      return nullptr;
-    return CreatePlatformNativeWidgetImpl(params, widget, kDefault, nullptr);
+    params.native_widget =
+        use_desktop_native_widget
+            ? nullptr
+            : CreatePlatformNativeWidgetImpl(widget, kDefault, nullptr);
+    params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+    widget->Init(std::move(params));
   }
 
  private:
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index fbfa30c..3f12629 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -351,7 +351,7 @@
   Widget* widget = new OwnershipTestWidget(&state);
   Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
   params.native_widget = CreatePlatformNativeWidgetImpl(
-      params, widget, kStubCapture, &state.native_widget_deleted);
+      widget, kStubCapture, &state.native_widget_deleted);
   widget->Init(std::move(params));
 
   // Now destroy the native widget.
@@ -371,7 +371,7 @@
   Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
   params.parent = toplevel->GetNativeView();
   params.native_widget = CreatePlatformNativeWidgetImpl(
-      params, widget, kStubCapture, &state.native_widget_deleted);
+      widget, kStubCapture, &state.native_widget_deleted);
   widget->Init(std::move(params));
 
   // Now destroy the native widget. This is achieved by closing the toplevel.
@@ -394,7 +394,7 @@
   Widget* widget = new OwnershipTestWidget(&state);
   Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
   params.native_widget = CreatePlatformNativeWidgetImpl(
-      params, widget, kStubCapture, &state.native_widget_deleted);
+      widget, kStubCapture, &state.native_widget_deleted);
   widget->Init(std::move(params));
 
   // Now simulate a destroy of the platform native widget from the OS:
@@ -416,7 +416,7 @@
   Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
   params.parent = toplevel->GetNativeView();
   params.native_widget = CreatePlatformNativeWidgetImpl(
-      params, widget, kStubCapture, &state.native_widget_deleted);
+      widget, kStubCapture, &state.native_widget_deleted);
   widget->Init(std::move(params));
 
   // Destroy the widget (achieved by closing the toplevel).
@@ -441,7 +441,7 @@
   Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
   params.parent = toplevel->GetNativeView();
   params.native_widget = CreatePlatformNativeWidgetImpl(
-      params, widget, kStubCapture, &state.native_widget_deleted);
+      widget, kStubCapture, &state.native_widget_deleted);
   widget->Init(std::move(params));
 
   // Destroy the widget.
@@ -479,7 +479,7 @@
   auto widget = std::make_unique<OwnershipTestWidget>(state());
   Widget::InitParams params = CreateParamsForTestWidget();
   params.native_widget = CreatePlatformNativeWidgetImpl(
-      params, widget.get(), kStubCapture, &state()->native_widget_deleted);
+      widget.get(), kStubCapture, &state()->native_widget_deleted);
   widget->Init(std::move(params));
 
   // Now delete the Widget, which should delete the NativeWidget.
@@ -497,7 +497,7 @@
   Widget::InitParams params = CreateParamsForTestWidget();
   params.parent = toplevel->GetNativeView();
   params.native_widget = CreatePlatformNativeWidgetImpl(
-      params, widget.get(), kStubCapture, &state()->native_widget_deleted);
+      widget.get(), kStubCapture, &state()->native_widget_deleted);
   widget->Init(std::move(params));
 
   // Now close the toplevel, which deletes the view hierarchy.
@@ -516,7 +516,7 @@
   auto widget = std::make_unique<OwnershipTestWidget>(state());
   Widget::InitParams params = CreateParamsForTestWidget();
   params.native_widget = CreatePlatformNativeWidgetImpl(
-      params, widget.get(), kStubCapture, &state()->native_widget_deleted);
+      widget.get(), kStubCapture, &state()->native_widget_deleted);
   params.delegate = new WidgetDelegateView();
   widget->Init(std::move(params));
 
@@ -1962,8 +1962,8 @@
         CreateParams(Widget::InitParams::TYPE_WINDOW);
 
     if (!desktop_native_widget) {
-      init_params.native_widget = CreatePlatformNativeWidgetImpl(
-          init_params, widget.get(), kStubCapture, nullptr);
+      init_params.native_widget =
+          CreatePlatformNativeWidgetImpl(widget.get(), kStubCapture, nullptr);
     }
     widget->Init(std::move(init_params));
 
@@ -2074,8 +2074,8 @@
   // Deletes itself when the Widget is destroyed.
   params.delegate = new GetNativeThemeFromDestructorView;
   if (!is_first_run) {
-    params.native_widget = CreatePlatformNativeWidgetImpl(
-        params, widget.get(), kStubCapture, nullptr);
+    params.native_widget =
+        CreatePlatformNativeWidgetImpl(widget.get(), kStubCapture, nullptr);
     needs_second_run = true;
   }
   widget->Init(std::move(params));
@@ -2984,8 +2984,8 @@
     Widget::InitParams params =
         CreateParams(views::Widget::InitParams::TYPE_WINDOW);
     if (!top_level_has_desktop_native_widget_aura) {
-      params.native_widget = CreatePlatformNativeWidgetImpl(
-          params, top_level, kStubCapture, nullptr);
+      params.native_widget =
+          CreatePlatformNativeWidgetImpl(top_level, kStubCapture, nullptr);
     }
     top_level->Init(std::move(params));
     top_level->GetRootView()->AddChildView(
@@ -2997,8 +2997,8 @@
         CreateParams(views::Widget::InitParams::TYPE_POPUP);
     child_params.parent = top_level->GetNativeView();
     if (!child_has_desktop_native_widget_aura) {
-      child_params.native_widget = CreatePlatformNativeWidgetImpl(
-          child_params, child, kStubCapture, nullptr);
+      child_params.native_widget =
+          CreatePlatformNativeWidgetImpl(child, kStubCapture, nullptr);
     }
     child->Init(std::move(child_params));
     child->GetRootView()->AddChildView(
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/CookieManagerTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/CookieManagerTest.java
index fda8534..a9be620 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/CookieManagerTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/CookieManagerTest.java
@@ -158,29 +158,11 @@
     }
 
     private boolean setCookie(String value) throws Exception {
-        Boolean[] resultHolder = new Boolean[1];
-        CallbackHelper callbackHelper = new CallbackHelper();
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            mCookieManager.setCookie(mBaseUri, value, (Boolean result) -> {
-                resultHolder[0] = result;
-                callbackHelper.notifyCalled();
-            });
-        });
-        callbackHelper.waitForFirst();
-        return resultHolder[0];
+        return mActivityTestRule.setCookie(mCookieManager, mBaseUri, value);
     }
 
     private String getCookie() throws Exception {
-        String[] resultHolder = new String[1];
-        CallbackHelper callbackHelper = new CallbackHelper();
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            mCookieManager.getCookie(mBaseUri, (String result) -> {
-                resultHolder[0] = result;
-                callbackHelper.notifyCalled();
-            });
-        });
-        callbackHelper.waitForFirst();
-        return resultHolder[0];
+        return mActivityTestRule.getCookie(mCookieManager, mBaseUri);
     }
 
     private static class CookieChangedCallbackHelper extends CookieChangedCallback {
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
index 353339a5..f235a62 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
@@ -9,6 +9,7 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.rule.ActivityTestRule;
@@ -29,6 +30,7 @@
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 import org.chromium.net.test.EmbeddedTestServer;
 import org.chromium.net.test.EmbeddedTestServerRule;
+import org.chromium.weblayer.CookieManager;
 import org.chromium.weblayer.NavigationController;
 import org.chromium.weblayer.Tab;
 import org.chromium.weblayer.WebLayer;
@@ -284,4 +286,30 @@
     public Fragment getFragment() {
         return TestThreadUtils.runOnUiThreadBlockingNoException(() -> getActivity().getFragment());
     }
+
+    public boolean setCookie(CookieManager cookieManager, Uri uri, String value) throws Exception {
+        Boolean[] resultHolder = new Boolean[1];
+        CallbackHelper callbackHelper = new CallbackHelper();
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            cookieManager.setCookie(uri, value, (Boolean result) -> {
+                resultHolder[0] = result;
+                callbackHelper.notifyCalled();
+            });
+        });
+        callbackHelper.waitForFirst();
+        return resultHolder[0];
+    }
+
+    public String getCookie(CookieManager cookieManager, Uri uri) throws Exception {
+        String[] resultHolder = new String[1];
+        CallbackHelper callbackHelper = new CallbackHelper();
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            cookieManager.getCookie(uri, (String result) -> {
+                resultHolder[0] = result;
+                callbackHelper.notifyCalled();
+            });
+        });
+        callbackHelper.waitForFirst();
+        return resultHolder[0];
+    }
 }
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ProfileTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ProfileTest.java
index 9eccc256..6db8062 100644
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ProfileTest.java
+++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ProfileTest.java
@@ -4,7 +4,9 @@
 
 package org.chromium.weblayer.test;
 
+import android.net.Uri;
 import android.support.test.filters.SmallTest;
+import android.webkit.ValueCallback;
 
 import org.junit.Assert;
 import org.junit.Rule;
@@ -16,6 +18,7 @@
 import org.chromium.content_public.browser.test.util.CriteriaHelper;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 import org.chromium.weblayer.Callback;
+import org.chromium.weblayer.CookieManager;
 import org.chromium.weblayer.Profile;
 import org.chromium.weblayer.WebLayer;
 import org.chromium.weblayer.shell.InstrumentationActivity;
@@ -143,6 +146,88 @@
         Assert.assertFalse(Arrays.asList(enumerateAllProfileNames(weblayer)).contains(profileName));
     }
 
+    private Profile launchAndDestroyActivity(
+            String profileName, ValueCallback<InstrumentationActivity> callback) {
+        final InstrumentationActivity activity = mActivityTestRule.launchWithProfile(profileName);
+        final Profile profile = TestThreadUtils.runOnUiThreadBlockingNoException(
+                () -> activity.getBrowser().getProfile());
+
+        callback.onReceiveValue(activity);
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> activity.finish());
+        CriteriaHelper.pollUiThread(new Criteria() {
+            @Override
+            public boolean isSatisfied() {
+                return activity.isDestroyed();
+            }
+        });
+        return profile;
+    }
+
+    private void destroyAndDeleteDataFromDisk(Profile profile) throws Exception {
+        final CallbackHelper callbackHelper = new CallbackHelper();
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> profile.destroyAndDeleteDataFromDisk(callbackHelper::notifyCalled));
+        callbackHelper.waitForFirst();
+    }
+
+    @Test
+    @SmallTest
+    public void testReuseProfile() throws Exception {
+        final String profileName = "ReusedProfile";
+        final Uri uri = Uri.parse("https://foo.bar");
+        final String expectedCookie = "foo=bar";
+        {
+            // Create profile and activity and set a cookie.
+            launchAndDestroyActivity(profileName, (InstrumentationActivity activity) -> {
+                CookieManager cookieManager = TestThreadUtils.runOnUiThreadBlockingNoException(
+                        () -> { return activity.getBrowser().getProfile().getCookieManager(); });
+                try {
+                    boolean result =
+                            mActivityTestRule.setCookie(cookieManager, uri, expectedCookie);
+                    Assert.assertTrue(result);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+        }
+
+        {
+            // Without deleting proifle data, create profile and activity again, and check the
+            // cookie is there.
+            Profile profile =
+                    launchAndDestroyActivity(profileName, (InstrumentationActivity activity) -> {
+                        CookieManager cookieManager =
+                                TestThreadUtils.runOnUiThreadBlockingNoException(() -> {
+                                    return activity.getBrowser().getProfile().getCookieManager();
+                                });
+                        try {
+                            String cookie = mActivityTestRule.getCookie(cookieManager, uri);
+                            Assert.assertEquals(expectedCookie, cookie);
+                        } catch (Exception e) {
+                            throw new RuntimeException(e);
+                        }
+                    });
+
+            destroyAndDeleteDataFromDisk(profile);
+        }
+
+        {
+            // After deleting profile data, create profile and activity again, and check the cookie
+            // is deleted as well.
+            launchAndDestroyActivity(profileName, (InstrumentationActivity activity) -> {
+                CookieManager cookieManager = TestThreadUtils.runOnUiThreadBlockingNoException(
+                        () -> { return activity.getBrowser().getProfile().getCookieManager(); });
+                try {
+                    String cookie = mActivityTestRule.getCookie(cookieManager, uri);
+                    Assert.assertEquals("", cookie);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+        }
+    }
+
     private static String[] enumerateAllProfileNames(final WebLayer weblayer) throws Exception {
         final String[][] holder = new String[1][];
         final CallbackHelper callbackHelper = new CallbackHelper();
diff --git a/weblayer/browser/profile_disk_operations.cc b/weblayer/browser/profile_disk_operations.cc
index 0edd530..ae062a12 100644
--- a/weblayer/browser/profile_disk_operations.cc
+++ b/weblayer/browser/profile_disk_operations.cc
@@ -7,20 +7,31 @@
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
 #include "base/path_service.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "build/build_config.h"
 #include "weblayer/common/weblayer_paths.h"
 
 namespace weblayer {
 
+// Variables named |name| is a string passed in from the embedder to identify a
+// profile. It can only contain alphanumeric and underscore.
+//
+// Variables named |dir_name| generally refers to the directory name of the
+// profile. It may be the |name| exactly, or it may be <name>.<number>, if a
+// profile is created with a name matching a profile marked for deletion.
+// |dir_name| is an implementation detail of this file and should not be exposed
+// as a concept out of this file.
+
 namespace {
 
-bool IsNameValid(const std::string& name) {
-  for (char c : name) {
-    if (!(base::IsAsciiDigit(c) || base::IsAsciiAlpha(c) || c == '_'))
-      return false;
-  }
-  return true;
+// Cannot be part of a valid name. This prevents the client ever specifying a
+// name that collides a different one with a suffix.
+constexpr char kSuffixDelimiter = '.';
+
+bool IsValidProfileNameChar(char c) {
+  return base::IsAsciiDigit(c) || base::IsAsciiAlpha(c) || c == '_';
 }
 
 // Return the data path directory to profiles.
@@ -30,22 +41,48 @@
   return path.AppendASCII("profiles");
 }
 
+base::FilePath GetProfileMarkerRootDataDir() {
+  base::FilePath path;
+  CHECK(base::PathService::Get(DIR_USER_DATA, &path));
+  path = path.AppendASCII("profiles_to_delete");
+  base::CreateDirectory(path);
+  return path;
+}
+
+base::FilePath GetDataPathFromDirName(const std::string& dir_name) {
+  return GetProfileRootDataDir().AppendASCII(dir_name.c_str());
+}
+
+#if defined(OS_POSIX)
+base::FilePath GetCachePathFromDirName(const std::string& dir_name) {
+  base::FilePath cache_path;
+  CHECK(base::PathService::Get(base::DIR_CACHE, &cache_path));
+  cache_path = cache_path.AppendASCII("profiles").AppendASCII(dir_name.c_str());
+  return cache_path;
+}
+#endif  // OS_POSIX
+
 }  // namespace
 
 ProfileInfo CreateProfileInfo(const std::string& name) {
-  CHECK(IsNameValid(name));
+  CHECK(internal::IsProfileNameValid(name));
   if (name.empty())
     return {name, base::FilePath(), base::FilePath()};
 
-  base::FilePath data_path = GetProfileRootDataDir().AppendASCII(name.c_str());
-  if (!base::PathExists(data_path))
-    base::CreateDirectory(data_path);
+  std::string dir_name = name;
+  int suffix = 0;
+  while (internal::IsProfileMarkedForDeletion(dir_name)) {
+    suffix++;
+    dir_name = name;
+    dir_name.append(1, kSuffixDelimiter).append(base::NumberToString(suffix));
+  }
+
+  base::FilePath data_path = GetDataPathFromDirName(dir_name);
+  base::CreateDirectory(data_path);
   base::FilePath cache_path = data_path;
 #if defined(OS_POSIX)
-  CHECK(base::PathService::Get(base::DIR_CACHE, &cache_path));
-  cache_path = cache_path.AppendASCII("profiles").AppendASCII(name.c_str());
-  if (!base::PathExists(cache_path))
-    base::CreateDirectory(cache_path);
+  cache_path = GetCachePathFromDirName(dir_name);
+  base::CreateDirectory(cache_path);
 #endif
   return {name, data_path, cache_path};
 }
@@ -61,13 +98,25 @@
   return base_path;
 }
 
-void NukeProfileFromDisk(const ProfileInfo& info) {
+void MarkProfileAsDeleted(const ProfileInfo& info) {
+  if (info.name.empty())
+    return;
+
+  base::FilePath data_root_path = GetProfileRootDataDir();
+  base::FilePath marker_path = GetProfileMarkerRootDataDir();
+  CHECK(data_root_path.AppendRelativePath(info.data_path, &marker_path));
+  base::File file(marker_path,
+                  base::File::FLAG_CREATE | base::File::FLAG_WRITE);
+}
+
+void TryNukeProfileFromDisk(const ProfileInfo& info) {
   if (info.name.empty()) {
     // Incognito. Just delete session data.
     base::DeleteFileRecursively(ComputeBrowserPersisterDataBaseDir(info));
     return;
   }
 
+  // This may fail, but that is ok since the marker is not deleted.
   base::DeleteFileRecursively(info.data_path);
 #if defined(OS_POSIX)
   base::DeleteFileRecursively(info.cache_path);
@@ -81,11 +130,80 @@
                                   base::FileEnumerator::DIRECTORIES);
   for (base::FilePath path = enumerator.Next(); !path.empty();
        path = enumerator.Next()) {
-    std::string name = enumerator.GetInfo().GetName().MaybeAsASCII();
-    if (IsNameValid(name))
+    std::string dir_name = enumerator.GetInfo().GetName().MaybeAsASCII();
+    std::string name = internal::CheckDirNameAndExtractName(dir_name);
+    if (!name.empty() && !internal::IsProfileMarkedForDeletion(dir_name))
       profile_names.push_back(name);
   }
   return profile_names;
 }
 
+void NukeProfilesMarkedForDeletion() {
+  base::FilePath marker_root_dir = GetProfileMarkerRootDataDir();
+  base::FileEnumerator enumerator(marker_root_dir, /*recursive=*/false,
+                                  base::FileEnumerator::FILES);
+  for (base::FilePath marker_path = enumerator.Next(); !marker_path.empty();
+       marker_path = enumerator.Next()) {
+    std::string dir_name = enumerator.GetInfo().GetName().MaybeAsASCII();
+    if (!internal::CheckDirNameAndExtractName(dir_name).empty()) {
+      // Delete cache and data directory first before deleting marker.
+      bool delete_success = true;
+#if defined(OS_POSIX)
+      delete_success |=
+          base::DeleteFileRecursively(GetCachePathFromDirName(dir_name));
+#endif  // OS_POSIX
+      delete_success |=
+          base::DeleteFileRecursively(GetDataPathFromDirName(dir_name));
+      // Only delete the marker if deletion is successful.
+      if (delete_success) {
+        base::DeleteFile(marker_path, /*recursive=*/false);
+      }
+    }
+  }
+}
+
+namespace internal {
+
+// Note empty name is valid for the incognito profile.
+bool IsProfileNameValid(const std::string& name) {
+  for (char c : name) {
+    if (!IsValidProfileNameChar(c))
+      return false;
+  }
+  return true;
+}
+
+// If |dir_name| is valid, then return the |name|. Otherwise return the empty
+// string.
+std::string CheckDirNameAndExtractName(const std::string& dir_name) {
+  std::vector<std::string> parts =
+      base::SplitString(dir_name, std::string(1, kSuffixDelimiter),
+                        base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
+  if (parts.size() == 0 || parts.size() > 2)
+    return std::string();
+
+  if (!IsProfileNameValid(parts[0]))
+    return std::string();
+
+  if (parts.size() > 1) {
+    if (parts[1].empty())
+      return std::string();
+
+    for (char c : parts[1]) {
+      if (!base::IsAsciiDigit(c))
+        return std::string();
+    }
+  }
+
+  return parts[0];
+}
+
+bool IsProfileMarkedForDeletion(const std::string& dir_name) {
+  base::FilePath marker =
+      GetProfileMarkerRootDataDir().AppendASCII(dir_name.c_str());
+  return base::PathExists(marker);
+}
+
+}  // namespace internal
+
 }  // namespace weblayer
diff --git a/weblayer/browser/profile_disk_operations.h b/weblayer/browser/profile_disk_operations.h
index 4ff55b1c..38a9fbd 100644
--- a/weblayer/browser/profile_disk_operations.h
+++ b/weblayer/browser/profile_disk_operations.h
@@ -26,15 +26,31 @@
 };
 
 // |name| must be a valid profile name. Ensures that both data and cache path
-// directories are created.
+// directories are created. The paths returned may be different from the name
+// to avoid reusing directories that are marked as deleted.
 ProfileInfo CreateProfileInfo(const std::string& name);
 
 base::FilePath ComputeBrowserPersisterDataBaseDir(const ProfileInfo& info);
-void NukeProfileFromDisk(const ProfileInfo& info);
+void MarkProfileAsDeleted(const ProfileInfo& info);
+void TryNukeProfileFromDisk(const ProfileInfo& info);
 
 // Return names of profiles on disk. Invalid profile names are ignored.
+// Profiles marked as deleted are ignored.
 std::vector<std::string> ListProfileNames();
 
+// This should be called before any |MarkProfileAsDeleted| for a single process
+// to avoid races.
+void NukeProfilesMarkedForDeletion();
+
+// Functions exposed for testing.
+namespace internal {
+
+bool IsProfileNameValid(const std::string& name);
+std::string CheckDirNameAndExtractName(const std::string& dir_name);
+bool IsProfileMarkedForDeletion(const std::string& dir_name);
+
+}  // namespace internal
+
 }  // namespace weblayer
 
 #endif  // WEBLAYER_BROWSER_PROFILE_DISK_OPERATIONS_H_
diff --git a/weblayer/browser/profile_disk_operations_unittests.cc b/weblayer/browser/profile_disk_operations_unittests.cc
new file mode 100644
index 0000000..051ecdf8
--- /dev/null
+++ b/weblayer/browser/profile_disk_operations_unittests.cc
@@ -0,0 +1,164 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <algorithm>
+#include <string>
+#include <vector>
+
+#include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/strings/string_number_conversions.h"
+#include "build/build_config.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "weblayer/browser/profile_disk_operations.h"
+#include "weblayer/common/weblayer_paths.h"
+
+namespace weblayer {
+
+class ProfileDiskOperationsTest : public testing::Test {
+ public:
+  void SetUp() override {
+    CHECK(data_temp_dir_.CreateUniqueTempDir());
+    base::PathService::Override(DIR_USER_DATA, data_temp_dir_.GetPath());
+#if defined(OS_POSIX)
+    CHECK(cache_temp_dir_.CreateUniqueTempDir());
+    base::PathService::Override(base::DIR_CACHE, cache_temp_dir_.GetPath());
+#endif
+  }
+
+ protected:
+  base::ScopedTempDir data_temp_dir_;
+#if defined(OS_POSIX)
+  base::ScopedTempDir cache_temp_dir_;
+#endif
+};
+
+TEST_F(ProfileDiskOperationsTest, IsProfileNameValid) {
+  EXPECT_TRUE(internal::IsProfileNameValid("foo"));
+  EXPECT_TRUE(internal::IsProfileNameValid("123"));
+  EXPECT_TRUE(internal::IsProfileNameValid(std::string()));
+
+  EXPECT_FALSE(internal::IsProfileNameValid("foo.bar"));
+  EXPECT_FALSE(internal::IsProfileNameValid("foo~"));
+  EXPECT_FALSE(internal::IsProfileNameValid("foo-"));
+}
+
+TEST_F(ProfileDiskOperationsTest, CheckDirnameAndExtractName) {
+  EXPECT_EQ(std::string("foo123"),
+            internal::CheckDirNameAndExtractName("foo123"));
+  EXPECT_EQ(std::string("foo"), internal::CheckDirNameAndExtractName("foo.1"));
+  EXPECT_EQ(std::string("foo"), internal::CheckDirNameAndExtractName("foo.2"));
+  EXPECT_EQ(std::string("foo"),
+            internal::CheckDirNameAndExtractName("foo.123"));
+
+  EXPECT_EQ(std::string(), internal::CheckDirNameAndExtractName("foo."));
+  EXPECT_EQ(std::string(), internal::CheckDirNameAndExtractName("foo~"));
+  EXPECT_EQ(std::string(), internal::CheckDirNameAndExtractName("foo~.1"));
+  EXPECT_EQ(std::string(), internal::CheckDirNameAndExtractName("foo.bar"));
+  EXPECT_EQ(std::string(), internal::CheckDirNameAndExtractName("foo.1.2"));
+  EXPECT_EQ(std::string(), internal::CheckDirNameAndExtractName(std::string()));
+  EXPECT_EQ(std::string(), internal::CheckDirNameAndExtractName(".1"));
+}
+
+TEST_F(ProfileDiskOperationsTest, BasicListProfileNames) {
+  std::vector<std::string> names{"foo", "bar", "baz"};
+  for (const auto& name : names) {
+    ProfileInfo info = CreateProfileInfo(name);
+    EXPECT_FALSE(info.data_path.empty());
+    EXPECT_FALSE(info.cache_path.empty());
+  }
+  std::vector<std::string> listed_names = ListProfileNames();
+  EXPECT_EQ(names.size(), listed_names.size());
+  for (const auto& name : names) {
+    auto itr = std::find(listed_names.begin(), listed_names.end(), name);
+    EXPECT_TRUE(itr != listed_names.end());
+  }
+}
+
+TEST_F(ProfileDiskOperationsTest, MarkProfileAsDeleted) {
+  std::vector<std::string> names{"foo", "bar", "baz"};
+  std::vector<ProfileInfo> infos;
+  for (const auto& name : names) {
+    ProfileInfo info = CreateProfileInfo(name);
+    infos.push_back(info);
+    EXPECT_FALSE(info.data_path.empty());
+    EXPECT_FALSE(info.cache_path.empty());
+  }
+  for (const auto& info : infos) {
+    MarkProfileAsDeleted(info);
+    EXPECT_TRUE(internal::IsProfileMarkedForDeletion(
+        info.data_path.BaseName().MaybeAsASCII()));
+  }
+  std::vector<std::string> listed_names = ListProfileNames();
+  EXPECT_TRUE(listed_names.empty());
+}
+
+TEST_F(ProfileDiskOperationsTest, ReuseProfileName) {
+  constexpr int kRepeat = 3;
+  for (int i = 0; i < kRepeat; ++i) {
+    ProfileInfo info = CreateProfileInfo("foo");
+    MarkProfileAsDeleted(info);
+    EXPECT_TRUE(internal::IsProfileMarkedForDeletion(
+        info.data_path.BaseName().MaybeAsASCII()));
+
+    std::string expected_base_name("foo");
+    if (i != 0) {
+      expected_base_name += ".";
+      expected_base_name += base::NumberToString(i);
+    }
+    EXPECT_EQ(expected_base_name, info.data_path.BaseName().MaybeAsASCII());
+    EXPECT_EQ(expected_base_name, info.cache_path.BaseName().MaybeAsASCII());
+
+    std::vector<std::string> listed_names = ListProfileNames();
+    EXPECT_TRUE(listed_names.empty());
+  }
+}
+
+TEST_F(ProfileDiskOperationsTest, NukeProfile) {
+  std::vector<ProfileInfo> deleted_infos;
+  constexpr int kRepeat = 3;
+  for (int i = 0; i < kRepeat; ++i) {
+    ProfileInfo info = CreateProfileInfo("foo");
+    MarkProfileAsDeleted(info);
+    deleted_infos.push_back(info);
+  }
+
+  {
+    ProfileInfo info = CreateProfileInfo("bar");
+    MarkProfileAsDeleted(info);
+    deleted_infos.push_back(info);
+  }
+
+  {
+    ProfileInfo info = CreateProfileInfo("baz");
+    MarkProfileAsDeleted(info);
+    deleted_infos.push_back(info);
+  }
+
+  ProfileInfo kept_info = CreateProfileInfo("kept");
+
+  for (auto& info : deleted_infos) {
+    EXPECT_TRUE(base::PathExists(info.data_path));
+    EXPECT_TRUE(base::PathExists(info.cache_path));
+  }
+  EXPECT_TRUE(base::PathExists(kept_info.data_path));
+  EXPECT_TRUE(base::PathExists(kept_info.cache_path));
+
+  NukeProfilesMarkedForDeletion();
+
+  for (auto& info : deleted_infos) {
+    EXPECT_FALSE(base::PathExists(info.data_path));
+    EXPECT_FALSE(base::PathExists(info.cache_path));
+  }
+  EXPECT_TRUE(base::PathExists(kept_info.data_path));
+  EXPECT_TRUE(base::PathExists(kept_info.cache_path));
+
+  ProfileInfo info = CreateProfileInfo("bar");
+  EXPECT_EQ(std::string("bar"), info.data_path.BaseName().MaybeAsASCII());
+  EXPECT_EQ(std::string("bar"), info.cache_path.BaseName().MaybeAsASCII());
+}
+
+}  // namespace weblayer
diff --git a/weblayer/browser/profile_impl.cc b/weblayer/browser/profile_impl.cc
index 34c05c8..62795b32 100644
--- a/weblayer/browser/profile_impl.cc
+++ b/weblayer/browser/profile_impl.cc
@@ -49,8 +49,18 @@
 
 namespace {
 
-#if defined(OS_ANDROID)
+bool g_first_profile_created = false;
 
+// TaskRunner used by MarkProfileAsDeleted and NukeProfilesMarkedForDeletion to
+// esnure that Nuke happens before any Mark in this process.
+base::SequencedTaskRunner* GetBackgroundDiskOperationTaskRunner() {
+  static const base::NoDestructor<scoped_refptr<base::SequencedTaskRunner>>
+      task_runner(base::ThreadPool::CreateSingleThreadTaskRunner(
+          {base::MayBlock(), base::TaskPriority::BEST_EFFORT}));
+  return task_runner.get()->get();
+}
+
+#if defined(OS_ANDROID)
 void PassFilePathsToJavaCallback(
     const base::android::ScopedJavaGlobalRef<jobject>& callback,
     const std::vector<std::string>& file_paths) {
@@ -104,6 +114,13 @@
     base::ScopedAllowBlocking allow_blocking;
     info_ = CreateProfileInfo(name);
   }
+
+  if (!g_first_profile_created) {
+    g_first_profile_created = true;
+    GetBackgroundDiskOperationTaskRunner()->PostTask(
+        FROM_HERE, base::BindOnce(&NukeProfilesMarkedForDeletion));
+  }
+
   // Ensure WebCacheManager is created so that it starts observing
   // OnRenderProcessHostCreated events.
   web_cache::WebCacheManager::GetInstance();
@@ -198,13 +215,10 @@
 void ProfileImpl::DoNukeData(std::unique_ptr<ProfileImpl> profile,
                              base::OnceClosure done_callback) {
   ProfileInfo info = profile->info_;
-
   profile.reset();
-  base::ThreadPool::PostTaskAndReply(
-      FROM_HERE,
-      {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
-       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
-      base::BindOnce(&NukeProfileFromDisk, info), std::move(done_callback));
+  GetBackgroundDiskOperationTaskRunner()->PostTaskAndReply(
+      FROM_HERE, base::BindOnce(&TryNukeProfileFromDisk, info),
+      std::move(done_callback));
 }
 
 void ProfileImpl::ClearRendererCache() {
@@ -254,6 +268,16 @@
   if (profile->num_browser_impl_ > 0)
     return profile;
 
+  GetBackgroundDiskOperationTaskRunner()->PostTaskAndReply(
+      FROM_HERE, base::BindOnce(&MarkProfileAsDeleted, profile->info_),
+      base::BindOnce(&ProfileImpl::OnProfileMarked, std::move(profile),
+                     std::move(done_callback)));
+  return nullptr;
+}
+
+// static
+void ProfileImpl::OnProfileMarked(std::unique_ptr<ProfileImpl> profile,
+                                  base::OnceClosure done_callback) {
   // Try to finish all writes and remove all data before nuking the profile.
   static_cast<BrowserContextImpl*>(profile->GetBrowserContext())
       ->pref_service()
@@ -267,7 +291,6 @@
                      std::move(profile), std::move(done_callback)));
   int remove_all_mask = 0x8fffffff;
   clearer->ClearData(remove_all_mask, base::Time::Min(), base::Time::Max());
-  return nullptr;
 }
 
 #if defined(OS_ANDROID)
diff --git a/weblayer/browser/profile_impl.h b/weblayer/browser/profile_impl.h
index 6e4d5ec..104fa695 100644
--- a/weblayer/browser/profile_impl.h
+++ b/weblayer/browser/profile_impl.h
@@ -99,6 +99,8 @@
  private:
   class DataClearer;
 
+  static void OnProfileMarked(std::unique_ptr<ProfileImpl> profile,
+                              base::OnceClosure done_callback);
   static void NukeDataAfterRemovingData(std::unique_ptr<ProfileImpl> profile,
                                         base::OnceClosure done_callback);
   static void DoNukeData(std::unique_ptr<ProfileImpl> profile,
diff --git a/weblayer/test/BUILD.gn b/weblayer/test/BUILD.gn
index ca6cfa16..7c37ff0 100644
--- a/weblayer/test/BUILD.gn
+++ b/weblayer/test/BUILD.gn
@@ -182,3 +182,20 @@
     ]
   }
 }
+
+source_set("run_all_unittests") {
+  testonly = true
+  sources = [ "run_all_unittests.cc" ]
+  public_deps = [
+    "//base/test:test_support",
+    "//content/test:test_support",
+  ]
+}
+
+test("weblayer_unittests") {
+  deps = [
+    ":run_all_unittests",
+    "//weblayer:weblayer_lib_base",
+  ]
+  sources = [ "../browser/profile_disk_operations_unittests.cc" ]
+}
diff --git a/weblayer/test/run_all_unittests.cc b/weblayer/test/run_all_unittests.cc
new file mode 100644
index 0000000..61567f9
--- /dev/null
+++ b/weblayer/test/run_all_unittests.cc
@@ -0,0 +1,29 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/bind.h"
+#include "base/test/launcher/unit_test_launcher.h"
+#include "content/public/test/content_test_suite_base.h"
+#include "content/public/test/unittest_test_suite.h"
+
+namespace weblayer {
+
+class WebLayerTestSuite : public content::ContentTestSuiteBase {
+ public:
+  WebLayerTestSuite(int argc, char** argv) : ContentTestSuiteBase(argc, argv) {}
+  ~WebLayerTestSuite() override = default;
+
+  WebLayerTestSuite(const WebLayerTestSuite&) = delete;
+  WebLayerTestSuite& operator=(const WebLayerTestSuite&) = delete;
+};
+
+}  // namespace weblayer
+
+int main(int argc, char** argv) {
+  content::UnitTestTestSuite test_suite(
+      new weblayer::WebLayerTestSuite(argc, argv));
+  return base::LaunchUnitTests(argc, argv,
+                               base::BindOnce(&content::UnitTestTestSuite::Run,
+                                              base::Unretained(&test_suite)));
+}