diff --git a/BUILD.gn b/BUILD.gn
index 9a9456e..1ffcbba 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -101,6 +101,7 @@
       "//chrome/test:interactive_ui_tests",
       "//chrome/test:sync_integration_tests",
       "//chrome/test/chromedriver:chromedriver_unittests",
+      "//components/subresource_filter/tools:subresource_filter_tools",
       "//components/sync/tools:sync_client",
       "//components/sync/tools:sync_listen_notifications",
       "//components/zucchini:zucchini",
diff --git a/DEPS b/DEPS
index 3401ca4..620b51a 100644
--- a/DEPS
+++ b/DEPS
@@ -90,11 +90,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': 'efb4d08dd43cd07e0e1d2f2d5819046259a5d340',
+  'skia_revision': '00d554b5b6d7dfebd30575a1852826a310697edb',
   # 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': 'b77ccdf1ab26182be3a88e0ced1991bce755c5c5',
+  'v8_revision': '434bb526d4f94538b4e92cb5301d2b4a6211c889',
   # 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.
@@ -102,7 +102,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'bb3255b5a507b3698449d62830351bd55a9bb7d0',
+  'angle_revision': 'b90779ebf018d319bbeee1cbd07818b01488c36e',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling build tools
   # and whatever else without interference from each other.
@@ -150,7 +150,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': 'a4814ecb93e64cd71a91d38bb1cb55930365a6e3',
+  'catapult_revision': '21bd95c9099fb74f24a03e036b12cec79c274006',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -959,7 +959,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '7c0541da63f571512c49758cbc0767117997a270',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '28899d0791c4a0257bca78d4d38d32dd29a4f2e0', # commit position 21742
+    Var('webrtc_git') + '/src.git' + '@' + '71a720ba160c4296ea335211a2663d92ff0a4532', # commit position 21742
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java
index b9ec1ef..232917e 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java
@@ -1159,6 +1159,73 @@
             webServer.shutdown();
         }
     }
+    @Test
+    @SmallTest
+    @Feature({"AndroidWebView"})
+    public void testUserInitiatedJavascriptSelectControlChangeNotification() throws Throwable {
+        int cnt = 0;
+        TestWebServer webServer = TestWebServer.start();
+        final String data = "<!DOCTYPE html>"
+                + "<html>"
+                + "<body>"
+                + "<script>"
+                + "function myFunction() {"
+                + "  document.getElementById('color').value = 'blue';"
+                + "}"
+                + "</script>"
+                + "<form action='a.html' name='formname' id='formid'>"
+                + "<button onclick='myFunction();' autofocus>button </button>"
+                + "<select id='color' autofocus><option value='red'>red</option><option "
+                + "value='blue' id='blue'>blue</option></select>"
+                + "</form>"
+                + "</body>"
+                + "</html>";
+        try {
+            final String url = webServer.setResponse(FILE, data, null);
+            loadUrlSync(url);
+            // Change select control first shall start autofill session.
+            dispatchDownAndUpKeyEvents(KeyEvent.KEYCODE_DPAD_CENTER);
+            cnt += waitForCallbackAndVerifyTypes(cnt,
+                    new Integer[] {AUTOFILL_CANCEL, AUTOFILL_VIEW_ENTERED, AUTOFILL_VIEW_EXITED,
+                            AUTOFILL_VIEW_ENTERED, AUTOFILL_VALUE_CHANGED});
+            ArrayList<Pair<Integer, AutofillValue>> values = getChangedValues();
+            assertEquals(1, values.size());
+            assertTrue(values.get(0).second.isList());
+            assertEquals(1, values.get(0).second.getListValue());
+        } finally {
+            webServer.shutdown();
+        }
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"AndroidWebView"})
+    public void testJavascriptNotTriggerSelectControlChangeNotification() throws Throwable {
+        int cnt = 0;
+        TestWebServer webServer = TestWebServer.start();
+        final String data = "<!DOCTYPE html>"
+                + "<html>"
+                + "<body onload='myFunction();'>"
+                + "<script>"
+                + "function myFunction() {"
+                + "  document.getElementById('color').value = 'blue';"
+                + "}"
+                + "</script>"
+                + "<form action='a.html' name='formname' id='formid'>"
+                + "<button onclick='myFunction();' autofocus>button </button>"
+                + "<select id='color' autofocus><option value='red'>red</option><option "
+                + "value='blue' id='blue'>blue</option></select>"
+                + "</form>"
+                + "</body>"
+                + "</html>";
+        try {
+            final String url = webServer.setResponse(FILE, data, null);
+            loadUrlSync(url);
+            waitForCallbackAndVerifyTypes(cnt, new Integer[] {});
+        } finally {
+            webServer.shutdown();
+        }
+    }
 
     private void loadUrlSync(String url) throws Exception {
         mRule.loadUrlSync(
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index e03bd5b9..d07f438 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -197,8 +197,10 @@
     "drag_drop/drag_image_view.h",
     "event_matcher_util.cc",
     "event_matcher_util.h",
-    "event_rewriter_controller.cc",
-    "event_rewriter_controller.h",
+    "events/event_rewriter_controller.cc",
+    "events/event_rewriter_controller.h",
+    "events/keyboard_driven_event_rewriter.cc",
+    "events/keyboard_driven_event_rewriter.h",
     "first_run/desktop_cleaner.cc",
     "first_run/desktop_cleaner.h",
     "first_run/first_run_helper.cc",
@@ -1546,6 +1548,7 @@
     "drag_drop/drag_drop_controller_unittest.cc",
     "drag_drop/drag_drop_tracker_unittest.cc",
     "drag_drop/drag_image_view_unittest.cc",
+    "events/keyboard_driven_event_rewriter_unittest.cc",
     "extended_desktop_unittest.cc",
     "first_run/first_run_helper_unittest.cc",
     "focus_cycler_unittest.cc",
diff --git a/ash/assistant/ui/assistant_bubble_view.cc b/ash/assistant/ui/assistant_bubble_view.cc
index 37667c1e..379c930 100644
--- a/ash/assistant/ui/assistant_bubble_view.cc
+++ b/ash/assistant/ui/assistant_bubble_view.cc
@@ -13,6 +13,7 @@
 #include "ui/app_list/answer_card_contents_registry.h"
 #include "ui/app_list/views/suggestion_chip_view.h"
 #include "ui/gfx/canvas.h"
+#include "ui/gfx/render_text.h"
 #include "ui/views/background.h"
 #include "ui/views/border.h"
 #include "ui/views/controls/label.h"
@@ -32,6 +33,7 @@
 constexpr int kTextPaddingVerticalDip = 4;
 
 // Typography.
+constexpr SkColor kTextColorHint = SkColorSetA(SK_ColorBLACK, 0x42);
 constexpr SkColor kTextColorPrimary = SkColorSetA(SK_ColorBLACK, 0xDE);
 
 // TODO(dmblack): Remove after removing placeholders.
@@ -67,30 +69,101 @@
   DISALLOW_COPY_AND_ASSIGN(RoundRectBackground);
 };
 
+// TODO(dmblack): Try to use existing StyledLabel class.
+// InteractionLabel ------------------------------------------------------------
+
+class InteractionLabel : public views::View {
+ public:
+  InteractionLabel() : render_text_(gfx::RenderText::CreateHarfBuzzInstance()) {
+    render_text_->SetFontList(render_text_->font_list().DeriveWithSizeDelta(4));
+    render_text_->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
+    render_text_->SetMultiline(true);
+    ClearQuery();
+  }
+
+  ~InteractionLabel() override = default;
+
+  // views::View:
+  int GetHeightForWidth(int width) const override {
+    if (width == 0)
+      return 0;
+
+    // Cache original |display_rect|.
+    const gfx::Rect display_rect = render_text_->display_rect();
+
+    // Measure |height| for |width|.
+    render_text_->SetDisplayRect(gfx::Rect(width, 0));
+    int height = render_text_->GetStringSize().height();
+
+    // Restore original |display_rect|.
+    render_text_->SetDisplayRect(display_rect);
+
+    return height;
+  }
+
+  void OnPaint(gfx::Canvas* canvas) override {
+    views::View::OnPaint(canvas);
+    render_text_->Draw(canvas);
+  }
+
+  void SetQuery(const Query& query) {
+    render_text_->SetColor(kTextColorPrimary);
+
+    // Empty query.
+    if (query.high_confidence_text.empty() &&
+        query.low_confidence_text.empty()) {
+      render_text_->SetText(base::UTF8ToUTF16(kPlaceholderPrompt));
+    } else {
+      // Populated query.
+      render_text_->SetText(base::UTF8ToUTF16(query.high_confidence_text));
+      if (!query.low_confidence_text.empty()) {
+        render_text_->AppendText(base::UTF8ToUTF16(query.low_confidence_text));
+        render_text_->ApplyColor(
+            kTextColorHint, gfx::Range(query.high_confidence_text.length(),
+                                       query.high_confidence_text.length() +
+                                           query.low_confidence_text.length()));
+      }
+    }
+    PreferredSizeChanged();
+    SchedulePaint();
+  }
+
+  void ClearQuery() { SetQuery({}); }
+
+ protected:
+  // views::View:
+  gfx::Size CalculatePreferredSize() const override {
+    return render_text_->GetStringSize();
+  }
+
+  void OnBoundsChanged(const gfx::Rect& previous_bounds) override {
+    render_text_->SetDisplayRect(GetContentsBounds());
+  }
+
+ private:
+  std::unique_ptr<gfx::RenderText> render_text_;
+
+  DISALLOW_COPY_AND_ASSIGN(InteractionLabel);
+};
+
 // InteractionContainer --------------------------------------------------------
 
 class InteractionContainer : public views::View {
  public:
-  InteractionContainer() : interaction_label_(new views::Label()) {
+  InteractionContainer() : interaction_label_(new InteractionLabel()) {
     InitLayout();
   }
 
   ~InteractionContainer() override = default;
 
-  void SetQuery(const Query& query) {
-    // TODO(dmblack): Represent high confidence and low confidence portions of
-    // the query with different colors.
-    interaction_label_->SetText(base::UTF8ToUTF16(query.high_confidence_text) +
-                                base::UTF8ToUTF16(query.low_confidence_text));
-
+  // views::View:
+  void ChildPreferredSizeChanged(views::View* child) override {
     PreferredSizeChanged();
   }
 
-  void ClearQuery() {
-    interaction_label_->SetText(base::ASCIIToUTF16(kPlaceholderPrompt));
+  void SetQuery(const Query& query) { interaction_label_->SetQuery(query); }
 
-    PreferredSizeChanged();
-  }
+  void ClearQuery() { interaction_label_->ClearQuery(); }
 
  private:
   void InitLayout() {
@@ -113,20 +186,12 @@
     AddChildView(icon_placeholder);
 
     // Interaction label.
-    interaction_label_->SetAutoColorReadabilityEnabled(false);
-    interaction_label_->SetEnabledColor(kTextColorPrimary);
-    interaction_label_->SetFontList(
-        interaction_label_->font_list().DeriveWithSizeDelta(4));
-    interaction_label_->SetHorizontalAlignment(
-        gfx::HorizontalAlignment::ALIGN_LEFT);
-    interaction_label_->SetMultiLine(true);
-    interaction_label_->SetText(base::ASCIIToUTF16(kPlaceholderPrompt));
     AddChildView(interaction_label_);
 
     layout->SetFlexForView(interaction_label_, 1);
   }
 
-  views::Label* interaction_label_;  // Owned by view hierarchy.
+  InteractionLabel* interaction_label_;  // Owned by view hierarchy.
 
   DISALLOW_COPY_AND_ASSIGN(InteractionContainer);
 };
diff --git a/ash/components/strings/ash_components_strings_bn.xtb b/ash/components/strings/ash_components_strings_bn.xtb
index ebd125a..1e5353ae 100644
--- a/ash/components/strings/ash_components_strings_bn.xtb
+++ b/ash/components/strings/ash_components_strings_bn.xtb
@@ -14,7 +14,7 @@
 <translation id="152892567002884378">ভলিউম বাড়ান</translation>
 <translation id="1560480564179555003"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, তারপর <ph name="ESC" /></translation>
 <translation id="1652741121070700329">আগের শব্দের শুরুতে নিয়ে যান</translation>
-<translation id="1671169355475348905">আগের ভাষার ইনপুট পদ্ধতিতে পরিবর্তন করুন</translation>
+<translation id="1671169355475348905">আগের ভাষার ইনপুট পদ্ধতিতে পাল্টান</translation>
 <translation id="1679841710523778799">উজ্জ্বলতা বাড়ান</translation>
 <translation id="168356808214100546"><ph name="ALT" /> বোতাম টিপে ধরে রেখে যে উইন্ডোটি খুলতে চান সেটি বেছে নেওয়ার জন্য <ph name="TAB" /> বোতাামটি বারবার টিপুন এবং তারপর উইন্ডোটি বেছে নেওয়া হয়ে গেলে আঙুল তুলে নিন।</translation>
 <translation id="169515659049020177">Shift</translation>
@@ -41,7 +41,7 @@
 <translation id="2568632782096378307">ডিফল্টে স্ক্রিন রেজোলিউশন রিসেট করুন</translation>
 <translation id="2596078834055697711">উইন্ডো স্ক্রিনশট নিন</translation>
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, তারপর <ph name="TAB" /> অথবা <ph name="RIGHT" /></translation>
-<translation id="2687057317448262550">পরবর্তী ভাষা ইনপুট পদ্ধতিতে পরিবর্তন করুন</translation>
+<translation id="2687057317448262550">পরবর্তী ভাষার ইনপুট পদ্ধতিতে পাল্টান</translation>
 <translation id="2699509451653686398">আপনার বর্তমান ওয়েব পৃষ্ঠাটি একটি বুকমার্ক হিসেবে সেভ করুন</translation>
 <translation id="2750942583782703988">আপনার বর্তমান পৃষ্ঠাটি আবার লোড করুন</translation>
 <translation id="2764005613199379871">সার্চ অ্যাড্রেস বারে ফোকাস রাখুন</translation>
diff --git a/ash/components/strings/ash_components_strings_cs.xtb b/ash/components/strings/ash_components_strings_cs.xtb
index a289def..d512c9b 100644
--- a/ash/components/strings/ash_components_strings_cs.xtb
+++ b/ash/components/strings/ash_components_strings_cs.xtb
@@ -102,6 +102,7 @@
 <translation id="5236674127086649162">Znovu načíst aktuální stránku bez použití obsahu z mezipaměti</translation>
 <translation id="526651782186312376">Vybrat text k začátku řádku</translation>
 <translation id="5316716239522500219">Zrcadlit monitory</translation>
+<translation id="5487187679583934283">Zahájí nebo zastaví psaní hlasově zadávaného textu</translation>
 <translation id="5541719484267030947">Při přetahování karty stiskněte <ph name="ESC" /></translation>
 <translation id="5554139136362089836">Vyhledávat na aktuální stránce</translation>
 <translation id="5563050856984839829">Stiskněte <ph name="CTRL" /><ph name="SEPARATOR" /><ph name="SHIFT" /> a klikněte na odkaz</translation>
@@ -144,6 +145,7 @@
 <translation id="6981982820502123353">Usnadnění</translation>
 <translation id="7020813747703216897">Nebyly nalezeny žádné odpovídající výsledky</translation>
 <translation id="7025325401470358758">Další podokno</translation>
+<translation id="7076878155205969899">Vypnout zvuk</translation>
 <translation id="7077383985738259936">Vybrat nebo zvýraznit lištu záložek (pokud je zobrazena)</translation>
 <translation id="7237562915163138771">Zadejte do adresního řádku webovou adresu a poté stiskněte <ph name="ALT" /><ph name="SEPARATOR" /><ph name="ENTER" /></translation>
 <translation id="7254764037241667478">Přepnout zařízení do režimu spánku (pozastavit)</translation>
diff --git a/ash/components/strings/ash_components_strings_el.xtb b/ash/components/strings/ash_components_strings_el.xtb
index d43cd00d..afd646f 100644
--- a/ash/components/strings/ash_components_strings_el.xtb
+++ b/ash/components/strings/ash_components_strings_el.xtb
@@ -102,6 +102,7 @@
 <translation id="5236674127086649162">Επανάληψη φόρτωσης της τρέχουσας σελίδας χωρίς τη χρήση περιεχομένου που έχει αποθηκευτεί στην κρυφή μνήμη</translation>
 <translation id="526651782186312376">Επιλογή κειμένου έως την αρχή της γραμμής</translation>
 <translation id="5316716239522500219">Κατοπτρισμός οθονών</translation>
+<translation id="5487187679583934283">Ξεκινάει ή διακόπτει την πληκτρολόγηση των όσων λέτε</translation>
 <translation id="5541719484267030947">Καθώς σέρνετε την καρτέλα, πατήστε <ph name="ESC" /></translation>
 <translation id="5554139136362089836">Αναζήτηση στην τρέχουσα σελίδα</translation>
 <translation id="5563050856984839829">Πατήστε <ph name="CTRL" /><ph name="SEPARATOR" /><ph name="SHIFT" /> και κάντε κλικ σε έναν σύνδεσμο</translation>
@@ -144,6 +145,7 @@
 <translation id="6981982820502123353">Προσβασιμότητα</translation>
 <translation id="7020813747703216897">Δεν βρέθηκαν αποτελέσματα αντιστοίχισης</translation>
 <translation id="7025325401470358758">Επόμενο παράθυρο</translation>
+<translation id="7076878155205969899">Σίγαση ήχου</translation>
 <translation id="7077383985738259936">Εστίαση ή επισήμανση της γραμμής σελιδοδεικτών (εάν εμφανίζεται)</translation>
 <translation id="7237562915163138771">Πληκτρολογήστε μια διεύθυνση ιστού στη γραμμή διευθύνσεων και έπειτα πατήστε <ph name="ALT" /><ph name="SEPARATOR" /><ph name="ENTER" /></translation>
 <translation id="7254764037241667478">Ενεργοποίηση κατάστασης αδράνειας στη συσκευή (αναστολή)</translation>
diff --git a/ash/components/strings/ash_components_strings_es.xtb b/ash/components/strings/ash_components_strings_es.xtb
index 9a2b1699..93dc093c 100644
--- a/ash/components/strings/ash_components_strings_es.xtb
+++ b/ash/components/strings/ash_components_strings_es.xtb
@@ -102,6 +102,7 @@
 <translation id="5236674127086649162">Volver a cargar la página actual sin utilizar contenido almacenado en caché</translation>
 <translation id="526651782186312376">Seleccionar texto hasta el principio de la línea</translation>
 <translation id="5316716239522500219">Copiar monitores</translation>
+<translation id="5487187679583934283">Empezar a escribir lo que dices o dejar de hacerlo</translation>
 <translation id="5541719484267030947">Pulsa <ph name="ESC" /> mientras arrastras las pestaña</translation>
 <translation id="5554139136362089836">Hacer búsquedas en la página actual</translation>
 <translation id="5563050856984839829">Pulsa <ph name="CTRL" /><ph name="SEPARATOR" /><ph name="SHIFT" /> y haz clic en un enlace</translation>
@@ -144,6 +145,7 @@
 <translation id="6981982820502123353">Accesibilidad</translation>
 <translation id="7020813747703216897">No se han podido encontrar resultados que coincidan</translation>
 <translation id="7025325401470358758">Siguiente panel</translation>
+<translation id="7076878155205969899">Silenciar sonido</translation>
 <translation id="7077383985738259936">Seleccionar o destacar la barra de marcadores (si se muestra)</translation>
 <translation id="7237562915163138771">Escribe una dirección web en la barra de direcciones y pulsa <ph name="ALT" /><ph name="SEPARATOR" /><ph name="ENTER" /></translation>
 <translation id="7254764037241667478">Poner el dispositivo en modo de suspensión</translation>
diff --git a/ash/components/strings/ash_components_strings_hr.xtb b/ash/components/strings/ash_components_strings_hr.xtb
index 4e0bdfa..81500ea 100644
--- a/ash/components/strings/ash_components_strings_hr.xtb
+++ b/ash/components/strings/ash_components_strings_hr.xtb
@@ -102,6 +102,7 @@
 <translation id="5236674127086649162">Ponovno učitavanje trenutačne stranice bez upotrebe predmemoriranog sadržaja</translation>
 <translation id="526651782186312376">Odabir teksta do početka retka</translation>
 <translation id="5316716239522500219">Zrcalni monitori</translation>
+<translation id="5487187679583934283">Započinje ili zaustavlja pisanje onoga što govorite</translation>
 <translation id="5541719484267030947">Dok povlačite karticu, pritisnite <ph name="ESC" /></translation>
 <translation id="5554139136362089836">Pretraživanje trenutačne stranice</translation>
 <translation id="5563050856984839829">Pritisnite <ph name="CTRL" /><ph name="SEPARATOR" /><ph name="SHIFT" /> i kliknite vezu</translation>
@@ -144,6 +145,7 @@
 <translation id="6981982820502123353">Pristupačnost</translation>
 <translation id="7020813747703216897">Nisu pronađeni rezultati</translation>
 <translation id="7025325401470358758">Sljedeće okno</translation>
+<translation id="7076878155205969899">Isključivanje zvuka</translation>
 <translation id="7077383985738259936">Fokusiranje ili isticanje trake oznaka (ako se prikazuje)</translation>
 <translation id="7237562915163138771">Unesite web-adresu u adresnu traku, a zatim pritisnite <ph name="ALT" /><ph name="SEPARATOR" /><ph name="ENTER" /></translation>
 <translation id="7254764037241667478">Postavljanje uređaja u način mirovanja (obustavljanje)</translation>
diff --git a/ash/components/strings/ash_components_strings_id.xtb b/ash/components/strings/ash_components_strings_id.xtb
index b2c7a2ccc..f29a974d 100644
--- a/ash/components/strings/ash_components_strings_id.xtb
+++ b/ash/components/strings/ash_components_strings_id.xtb
@@ -102,6 +102,7 @@
 <translation id="5236674127086649162">Memuat ulang halaman aktif tanpa menggunakan konten yang disimpan dalam cache</translation>
 <translation id="526651782186312376">Memilih teks ke awal baris</translation>
 <translation id="5316716239522500219">Cerminkan monitor</translation>
+<translation id="5487187679583934283">Memulai atau berhenti mengetik hal yang Anda ucapkan</translation>
 <translation id="5541719484267030947">Saat menyeret tab, tekan <ph name="ESC" /></translation>
 <translation id="5554139136362089836">Menelusuri halaman aktif</translation>
 <translation id="5563050856984839829">Tekan <ph name="CTRL" /><ph name="SEPARATOR" /><ph name="SHIFT" />, lalu klik link</translation>
@@ -144,6 +145,7 @@
 <translation id="6981982820502123353">Aksesibilitas</translation>
 <translation id="7020813747703216897">Tidak ada hasil yang cocok</translation>
 <translation id="7025325401470358758">Panel berikutnya</translation>
+<translation id="7076878155205969899">Mematikan suara</translation>
 <translation id="7077383985738259936">Memfokuskan atau Menandai kolom bookmark (jika ditampilkan)</translation>
 <translation id="7237562915163138771">Ketik alamat web di kolom URL, lalu tekan <ph name="ALT" /><ph name="SEPARATOR" /><ph name="ENTER" /></translation>
 <translation id="7254764037241667478">Menyetel perangkat dalam mode tidur (menangguhkan)</translation>
diff --git a/ash/components/strings/ash_components_strings_ko.xtb b/ash/components/strings/ash_components_strings_ko.xtb
index 562ac4ac..413b0ded 100644
--- a/ash/components/strings/ash_components_strings_ko.xtb
+++ b/ash/components/strings/ash_components_strings_ko.xtb
@@ -102,6 +102,7 @@
 <translation id="5236674127086649162">저장된 콘텐츠를 사용하지 않고 현재 페이지 새로고침</translation>
 <translation id="526651782186312376">텍스트 행 처음까지 선택</translation>
 <translation id="5316716239522500219">모니터 미러</translation>
+<translation id="5487187679583934283">말하는 내용 입력 시작 또는 중지</translation>
 <translation id="5541719484267030947">탭을 드래그하는 동안 <ph name="ESC" /> 누르기</translation>
 <translation id="5554139136362089836">현재 페이지 검색</translation>
 <translation id="5563050856984839829"><ph name="CTRL" /><ph name="SEPARATOR" /><ph name="SHIFT" />를 누르고 링크를 클릭</translation>
@@ -144,6 +145,7 @@
 <translation id="6981982820502123353">접근성</translation>
 <translation id="7020813747703216897">일치하는 결과 없음</translation>
 <translation id="7025325401470358758">다음 창</translation>
+<translation id="7076878155205969899">음소거</translation>
 <translation id="7077383985738259936">북마크바에 초점 또는 강조표시(표시되는 경우)</translation>
 <translation id="7237562915163138771">검색주소창에 웹 주소를 입력하고 <ph name="ALT" /><ph name="SEPARATOR" /><ph name="ENTER" /> 키를 누릅니다.</translation>
 <translation id="7254764037241667478">기기를 절전 모드로 설정(정지)</translation>
diff --git a/ash/components/strings/ash_components_strings_ml.xtb b/ash/components/strings/ash_components_strings_ml.xtb
index 6192902..8448428e 100644
--- a/ash/components/strings/ash_components_strings_ml.xtb
+++ b/ash/components/strings/ash_components_strings_ml.xtb
@@ -51,6 +51,7 @@
 <translation id="2872353916818027657">പ്രാഥമിക മോണിറ്റർ സ്വാപ്പുചെയ്യുക</translation>
 <translation id="2914313326123580426">ഡെവലപ്പര്‍ ടൂൾ പാനൽ കാണിക്കുക അല്ലെങ്കിൽ അദൃശ്യമാക്കുക</translation>
 <translation id="292495055542441795">പൂർണ്ണ സ്‌ക്രീൻ മാറ്റുക</translation>
+<translation id="3020183492814296499">കുറുക്കുവഴികൾ</translation>
 <translation id="3084301071537457911">നിങ്ങളുടെ ഷെൽഫിലെ അടുത്ത ഇനം ഹൈലൈറ്റ് ചെയ്യുക</translation>
 <translation id="309173601632226815">നിങ്ങളുടെ ഷെൽഫിലെ ലോഞ്ചർ ബട്ടൺ ഹൈലൈറ്റ് ചെയ്യുക</translation>
 <translation id="3105917916468784889">സ്ക്രീന്‍ഷോട്ട് എടുക്കുക</translation>
diff --git a/ash/components/strings/ash_components_strings_pl.xtb b/ash/components/strings/ash_components_strings_pl.xtb
index 8fc3a9e..2b127efe 100644
--- a/ash/components/strings/ash_components_strings_pl.xtb
+++ b/ash/components/strings/ash_components_strings_pl.xtb
@@ -102,6 +102,7 @@
 <translation id="5236674127086649162">Ponowne załaduj bieżącą stronę bez używania pamięci podręcznej</translation>
 <translation id="526651782186312376">Zaznacz tekst do początku wiersza</translation>
 <translation id="5316716239522500219">Wyświetl na monitorach odbicie lustrzane</translation>
+<translation id="5487187679583934283">Uruchamia lub zatrzymuje wpisywanie głosem</translation>
 <translation id="5541719484267030947">Podczas przeciągania karty naciśnij <ph name="ESC" /></translation>
 <translation id="5554139136362089836">Przeszukaj bieżącą stronę</translation>
 <translation id="5563050856984839829">Naciśnij <ph name="CTRL" /><ph name="SEPARATOR" /><ph name="SHIFT" /> i kliknij link</translation>
@@ -144,6 +145,7 @@
 <translation id="6981982820502123353">Ułatwienia dostępu</translation>
 <translation id="7020813747703216897">Nie znaleziono pasujących wyników</translation>
 <translation id="7025325401470358758">Następny panel</translation>
+<translation id="7076878155205969899">Wycisz dźwięk</translation>
 <translation id="7077383985738259936">Przenieś zaznaczenie na pasek zakładek (jeśli jest widoczny)</translation>
 <translation id="7237562915163138771">Wpisz adres internetowy w pasku adresu i naciśnij <ph name="ALT" /><ph name="SEPARATOR" /><ph name="ENTER" /></translation>
 <translation id="7254764037241667478">Przełącz urządzenie w tryb uśpienia (wstrzymaj)</translation>
diff --git a/ash/components/strings/ash_components_strings_pt-BR.xtb b/ash/components/strings/ash_components_strings_pt-BR.xtb
index bb3b6f1..eb9f7004 100644
--- a/ash/components/strings/ash_components_strings_pt-BR.xtb
+++ b/ash/components/strings/ash_components_strings_pt-BR.xtb
@@ -102,6 +102,7 @@
 <translation id="5236674127086649162">Atualizar a página atual sem usar conteúdo em cache</translation>
 <translation id="526651782186312376">Selecionar o texto até o início da linha</translation>
 <translation id="5316716239522500219">Espelhar monitores</translation>
+<translation id="5487187679583934283">Inicia ou interrompe a digitação do que você fala</translation>
 <translation id="5541719484267030947">Ao arrastar a guia, pressione <ph name="ESC" /></translation>
 <translation id="5554139136362089836">Pesquisar na página atual</translation>
 <translation id="5563050856984839829">Pressione <ph name="CTRL" /><ph name="SEPARATOR" /><ph name="SHIFT" /> e clique em um link</translation>
@@ -144,6 +145,7 @@
 <translation id="6981982820502123353">Acessibilidade</translation>
 <translation id="7020813747703216897">Nenhum resultado correspondente encontrado</translation>
 <translation id="7025325401470358758">Próximo painel</translation>
+<translation id="7076878155205969899">Desativar som</translation>
 <translation id="7077383985738259936">Colocar o foco na barra de favoritos ou destacá-la (se mostrada)</translation>
 <translation id="7237562915163138771">Digite um endereço da Web na barra de endereço e pressione <ph name="ALT" /><ph name="SEPARATOR" /><ph name="ENTER" /></translation>
 <translation id="7254764037241667478">Colocar o dispositivo em modo de espera (suspender)</translation>
diff --git a/ash/event_rewriter_controller.cc b/ash/event_rewriter_controller.cc
deleted file mode 100644
index 726b923c..0000000
--- a/ash/event_rewriter_controller.cc
+++ /dev/null
@@ -1,67 +0,0 @@
-// 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.
-
-#include "ash/event_rewriter_controller.h"
-
-#include <utility>
-
-#include "ash/display/mirror_window_controller.h"
-#include "ash/display/window_tree_host_manager.h"
-#include "ash/shell.h"
-#include "ui/aura/env.h"
-#include "ui/aura/window_tree_host.h"
-#include "ui/events/event_rewriter.h"
-#include "ui/events/event_source.h"
-
-namespace ash {
-
-EventRewriterController::EventRewriterController() : initialized_(false) {
-  // Add the controller as an observer for new root windows.
-  aura::Env::GetInstance()->AddObserver(this);
-}
-
-EventRewriterController::~EventRewriterController() {
-  aura::Env::GetInstance()->RemoveObserver(this);
-  // Remove the rewriters from every root window EventSource and destroy them.
-  for (const auto& rewriter : rewriters_) {
-    for (auto* window : Shell::GetAllRootWindows())
-      window->GetHost()->GetEventSource()->RemoveEventRewriter(rewriter.get());
-  }
-  rewriters_.clear();
-}
-
-void EventRewriterController::AddEventRewriter(
-    std::unique_ptr<ui::EventRewriter> rewriter) {
-  DCHECK(!initialized_);
-  rewriters_.push_back(std::move(rewriter));
-}
-
-void EventRewriterController::Init() {
-  DCHECK(!initialized_);
-  initialized_ = true;
-  // Add the rewriters to each existing root window EventSource.
-  aura::Window::Windows windows = Shell::GetAllRootWindows();
-  for (auto* window : windows)
-    AddToEventSource(window->GetHost()->GetEventSource());
-
-  // In case there are any mirroring displays, their hosts' EventSources won't
-  // be included above.
-  const auto* mirror_window_controller =
-      Shell::Get()->window_tree_host_manager()->mirror_window_controller();
-  for (auto* window : mirror_window_controller->GetAllRootWindows())
-    AddToEventSource(window->GetHost()->GetEventSource());
-}
-
-void EventRewriterController::OnHostInitialized(aura::WindowTreeHost* host) {
-  if (initialized_)
-    AddToEventSource(host->GetEventSource());
-}
-
-void EventRewriterController::AddToEventSource(ui::EventSource* source) {
-  DCHECK(source);
-  for (const auto& rewriter : rewriters_)
-    source->AddEventRewriter(rewriter.get());
-}
-
-}  // namespace ash
diff --git a/ash/event_rewriter_controller.h b/ash/event_rewriter_controller.h
deleted file mode 100644
index e5b7460..0000000
--- a/ash/event_rewriter_controller.h
+++ /dev/null
@@ -1,57 +0,0 @@
-// 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.
-
-#ifndef ASH_EVENT_REWRITER_CONTROLLER_H_
-#define ASH_EVENT_REWRITER_CONTROLLER_H_
-
-#include <list>
-#include <memory>
-#include <vector>
-
-#include "ash/ash_export.h"
-#include "base/macros.h"
-#include "ui/aura/env_observer.h"
-
-namespace ui {
-class EventRewriter;
-class EventSource;
-}  // namespace ui
-
-namespace ash {
-
-// Owns ui::EventRewriters and ensures that they are added to each root window
-// EventSource, current and future, in the order that they are added to this.
-// TODO(crbug.com/647781): Avoid exposing this outside of ash.
-class ASH_EXPORT EventRewriterController : public aura::EnvObserver {
- public:
-  EventRewriterController();
-  ~EventRewriterController() override;
-
-  // Takes ownership of an EventRewriter; can only be called before Init().
-  void AddEventRewriter(std::unique_ptr<ui::EventRewriter> rewriter);
-
-  // Add rewriters to any existing root windows; must be called once only
-  // after ash::Shell has been initialized.
-  void Init();
-
-  // aura::EnvObserver overrides:
-  void OnWindowInitialized(aura::Window* window) override {}
-  void OnHostInitialized(aura::WindowTreeHost* host) override;
-
- private:
-  void AddToEventSource(ui::EventSource* source);
-
-  // The |EventRewriter|s managed by this controller.
-  std::vector<std::unique_ptr<ui::EventRewriter>> rewriters_;
-
-  // Whether the owned event rewriters have been added to existing
-  // root windows; after this no more rewriters can be added.
-  bool initialized_;
-
-  DISALLOW_COPY_AND_ASSIGN(EventRewriterController);
-};
-
-}  // namespace ash
-
-#endif  // ASH_EVENT_REWRITER_CONTROLLER_H_
diff --git a/ash/events/event_rewriter_controller.cc b/ash/events/event_rewriter_controller.cc
new file mode 100644
index 0000000..e8546e96
--- /dev/null
+++ b/ash/events/event_rewriter_controller.cc
@@ -0,0 +1,75 @@
+// 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.
+
+#include "ash/events/event_rewriter_controller.h"
+
+#include <utility>
+
+#include "ash/display/mirror_window_controller.h"
+#include "ash/display/window_tree_host_manager.h"
+#include "ash/events/keyboard_driven_event_rewriter.h"
+#include "ash/shell.h"
+#include "ui/aura/env.h"
+#include "ui/aura/window_tree_host.h"
+#include "ui/events/event_rewriter.h"
+#include "ui/events/event_source.h"
+
+namespace ash {
+
+EventRewriterController::EventRewriterController() {
+  // Add the controller as an observer for new root windows.
+  aura::Env::GetInstance()->AddObserver(this);
+
+  std::unique_ptr<KeyboardDrivenEventRewriter> keyboard_driven_event_rewriter =
+      std::make_unique<KeyboardDrivenEventRewriter>();
+  keyboard_driven_event_rewriter_ = keyboard_driven_event_rewriter.get();
+  AddEventRewriter(std::move(keyboard_driven_event_rewriter));
+}
+
+EventRewriterController::~EventRewriterController() {
+  aura::Env::GetInstance()->RemoveObserver(this);
+  // Remove the rewriters from every root window EventSource and destroy them.
+  for (const auto& rewriter : rewriters_) {
+    for (auto* window : Shell::GetAllRootWindows())
+      window->GetHost()->GetEventSource()->RemoveEventRewriter(rewriter.get());
+  }
+  rewriters_.clear();
+}
+
+void EventRewriterController::AddEventRewriter(
+    std::unique_ptr<ui::EventRewriter> rewriter) {
+  // Add the rewriters to each existing root window EventSource.
+  for (auto* window : Shell::GetAllRootWindows())
+    window->GetHost()->GetEventSource()->AddEventRewriter(rewriter.get());
+
+  // In case there are any mirroring displays, their hosts' EventSources won't
+  // be included above.
+  const auto* mirror_window_controller =
+      Shell::Get()->window_tree_host_manager()->mirror_window_controller();
+  for (auto* window : mirror_window_controller->GetAllRootWindows())
+    window->GetHost()->GetEventSource()->AddEventRewriter(rewriter.get());
+
+  rewriters_.push_back(std::move(rewriter));
+}
+
+void EventRewriterController::BindRequest(
+    mojom::EventRewriterControllerRequest request) {
+  bindings_.AddBinding(this, std::move(request));
+}
+
+void EventRewriterController::SetKeyboardDrivenEventRewriterEnabled(
+    bool enabled) {
+  keyboard_driven_event_rewriter_->set_enabled(enabled);
+}
+
+void EventRewriterController::SetArrowToTabRewritingEnabled(bool enabled) {
+  keyboard_driven_event_rewriter_->set_arrow_to_tab_rewriting_enabled(enabled);
+}
+
+void EventRewriterController::OnHostInitialized(aura::WindowTreeHost* host) {
+  for (const auto& rewriter : rewriters_)
+    host->GetEventSource()->AddEventRewriter(rewriter.get());
+}
+
+}  // namespace ash
diff --git a/ash/events/event_rewriter_controller.h b/ash/events/event_rewriter_controller.h
new file mode 100644
index 0000000..05c6637
--- /dev/null
+++ b/ash/events/event_rewriter_controller.h
@@ -0,0 +1,65 @@
+// 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.
+
+#ifndef ASH_EVENTS_EVENT_REWRITER_CONTROLLER_H_
+#define ASH_EVENTS_EVENT_REWRITER_CONTROLLER_H_
+
+#include <memory>
+#include <vector>
+
+#include "ash/ash_export.h"
+#include "ash/public/interfaces/event_rewriter_controller.mojom.h"
+#include "base/macros.h"
+#include "mojo/public/cpp/bindings/binding_set.h"
+#include "ui/aura/env_observer.h"
+
+namespace ui {
+class EventRewriter;
+class EventSource;
+}  // namespace ui
+
+namespace ash {
+
+class KeyboardDrivenEventRewriter;
+
+// Owns ui::EventRewriters and ensures that they are added to each root window
+// EventSource, current and future, in the order that they are added to this.
+// TODO(crbug.com/647781): Avoid Chrome's direct access in Classic Ash mode.
+class ASH_EXPORT EventRewriterController
+    : public mojom::EventRewriterController,
+      public aura::EnvObserver {
+ public:
+  EventRewriterController();
+  ~EventRewriterController() override;
+
+  // Takes ownership of |rewriter| and adds it to the current event sources.
+  void AddEventRewriter(std::unique_ptr<ui::EventRewriter> rewriter);
+
+  // Binds the mojom::EventRewriterController interface request to this object.
+  void BindRequest(mojom::EventRewriterControllerRequest request);
+
+  // mojom::EventRewriterController:
+  void SetKeyboardDrivenEventRewriterEnabled(bool enabled) override;
+  void SetArrowToTabRewritingEnabled(bool enabled) override;
+
+  // aura::EnvObserver:
+  void OnWindowInitialized(aura::Window* window) override {}
+  void OnHostInitialized(aura::WindowTreeHost* host) override;
+
+ private:
+  // The |EventRewriter|s managed by this controller.
+  std::vector<std::unique_ptr<ui::EventRewriter>> rewriters_;
+
+  // A weak pointer the KeyboardDrivenEventRewriter owned in |rewriters_|.
+  KeyboardDrivenEventRewriter* keyboard_driven_event_rewriter_;
+
+  // Bindings for the EventRewriterController mojo interface.
+  mojo::BindingSet<mojom::EventRewriterController> bindings_;
+
+  DISALLOW_COPY_AND_ASSIGN(EventRewriterController);
+};
+
+}  // namespace ash
+
+#endif  // ASH_EVENTS_EVENT_REWRITER_CONTROLLER_H_
diff --git a/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc b/ash/events/keyboard_driven_event_rewriter.cc
similarity index 67%
rename from chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc
rename to ash/events/keyboard_driven_event_rewriter.cc
index 7eb2c0c2..b36ba6b8 100644
--- a/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc
+++ b/ash/events/keyboard_driven_event_rewriter.cc
@@ -2,51 +2,19 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h"
+#include "ash/events/keyboard_driven_event_rewriter.h"
 
-#include "chrome/browser/chromeos/system/input_device_settings.h"
-#include "components/session_manager/core/session_manager.h"
+#include "ash/session/session_controller.h"
+#include "ash/shell.h"
 #include "ui/chromeos/events/event_rewriter_chromeos.h"
 #include "ui/events/event.h"
 #include "ui/events/event_utils.h"
 
-namespace chromeos {
+namespace ash {
 
-namespace {
+KeyboardDrivenEventRewriter::KeyboardDrivenEventRewriter() = default;
 
-const int kModifierMask = ui::EF_SHIFT_DOWN;
-
-KeyboardDrivenEventRewriter* instance = nullptr;
-
-// Returns true if and only if it is on login screen (i.e. user is not logged
-// in) and the keyboard driven flag in the OEM manifest is on.
-bool ShouldStripModifiersForArrowKeysAndEnter() {
-  if (session_manager::SessionManager::Get() &&
-      !session_manager::SessionManager::Get()->IsSessionStarted()) {
-    return system::InputDeviceSettings::Get()
-        ->ForceKeyboardDrivenUINavigation();
-  }
-
-  return false;
-}
-
-}  // namespace
-
-// static
-KeyboardDrivenEventRewriter* KeyboardDrivenEventRewriter::GetInstance() {
-  DCHECK(instance);
-  return instance;
-}
-
-KeyboardDrivenEventRewriter::KeyboardDrivenEventRewriter() {
-  DCHECK(!instance);
-  instance = this;
-}
-
-KeyboardDrivenEventRewriter::~KeyboardDrivenEventRewriter() {
-  DCHECK_EQ(instance, this);
-  instance = nullptr;
-}
+KeyboardDrivenEventRewriter::~KeyboardDrivenEventRewriter() = default;
 
 ui::EventRewriteStatus KeyboardDrivenEventRewriter::RewriteForTesting(
     const ui::Event& event,
@@ -57,8 +25,10 @@
 ui::EventRewriteStatus KeyboardDrivenEventRewriter::RewriteEvent(
     const ui::Event& event,
     std::unique_ptr<ui::Event>* rewritten_event) {
-  if (!ShouldStripModifiersForArrowKeysAndEnter())
+  if (!enabled_ ||
+      Shell::Get()->session_controller()->IsActiveUserSessionStarted()) {
     return ui::EVENT_REWRITE_CONTINUE;
+  }
 
   return Rewrite(event, rewritten_event);
 }
@@ -74,6 +44,7 @@
     const ui::Event& event,
     std::unique_ptr<ui::Event>* rewritten_event) {
   int flags = event.flags();
+  const int kModifierMask = ui::EF_SHIFT_DOWN;
   if ((flags & kModifierMask) != kModifierMask)
     return ui::EVENT_REWRITE_CONTINUE;
 
@@ -93,7 +64,7 @@
       flags & ~(ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN),
       key_event.code(), key_event.GetDomKey(), key_event.key_code()};
 
-  if (rewritten_to_tab_) {
+  if (arrow_to_tab_rewriting_enabled_) {
     if (key_code == ui::VKEY_LEFT || key_code == ui::VKEY_RIGHT ||
         key_code == ui::VKEY_UP || key_code == ui::VKEY_DOWN) {
       const ui::KeyEvent tab_event(ui::ET_KEY_PRESSED, ui::VKEY_TAB,
@@ -111,4 +82,4 @@
   return ui::EVENT_REWRITE_REWRITTEN;
 }
 
-}  // namespace chromeos
+}  // namespace ash
diff --git a/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h b/ash/events/keyboard_driven_event_rewriter.h
similarity index 64%
rename from chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h
rename to ash/events/keyboard_driven_event_rewriter.h
index 12d0fb1..9900c62 100644
--- a/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h
+++ b/ash/events/keyboard_driven_event_rewriter.h
@@ -2,24 +2,23 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_CHROMEOS_EVENTS_KEYBOARD_DRIVEN_EVENT_REWRITER_H_
-#define CHROME_BROWSER_CHROMEOS_EVENTS_KEYBOARD_DRIVEN_EVENT_REWRITER_H_
+#ifndef ASH_EVENTS_KEYBOARD_DRIVEN_EVENT_REWRITER_H_
+#define ASH_EVENTS_KEYBOARD_DRIVEN_EVENT_REWRITER_H_
 
+#include "ash/ash_export.h"
 #include "base/macros.h"
 #include "ui/events/event_rewriter.h"
 
-namespace chromeos {
+namespace ash {
 
 // KeyboardDrivenEventRewriter removes the modifier flags from
 // Shift+<Arrow keys|Enter|F6> key events. This mapping only happens
 // on login screen and only when the keyboard driven oobe is enabled.
-class KeyboardDrivenEventRewriter : public ui::EventRewriter {
+class ASH_EXPORT KeyboardDrivenEventRewriter : public ui::EventRewriter {
  public:
   KeyboardDrivenEventRewriter();
   ~KeyboardDrivenEventRewriter() override;
 
-  static KeyboardDrivenEventRewriter* GetInstance();
-
   // Calls Rewrite for testing.
   ui::EventRewriteStatus RewriteForTesting(
       const ui::Event& event,
@@ -33,21 +32,25 @@
       const ui::Event& last_event,
       std::unique_ptr<ui::Event>* new_event) override;
 
-  // Allow setting Shift + Arrow keys rewritten to Tab/Shift-Tab keys |enabled|.
-  void SetArrowToTabRewritingEnabled(bool rewritten_to_tab) {
-    rewritten_to_tab_ = rewritten_to_tab;
+  void set_enabled(bool enabled) { enabled_ = enabled; }
+  void set_arrow_to_tab_rewriting_enabled(bool enabled) {
+    arrow_to_tab_rewriting_enabled_ = enabled;
   }
 
  private:
   ui::EventRewriteStatus Rewrite(const ui::Event& event,
                                  std::unique_ptr<ui::Event>* new_event);
 
+  // If true, this rewriter is enabled. It is only active before user login.
+  bool enabled_ = false;
+
   // If true, Shift + Arrow keys are rewritten to Tab/Shift-Tab keys.
-  bool rewritten_to_tab_ = false;
+  // This only applies when the KeyboardDrivenEventRewriter is active.
+  bool arrow_to_tab_rewriting_enabled_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(KeyboardDrivenEventRewriter);
 };
 
-}  // namespace chromeos
+}  // namespace ash
 
-#endif  // CHROME_BROWSER_CHROMEOS_EVENTS_KEYBOARD_DRIVEN_EVENT_REWRITER_H_
+#endif  // ASH_EVENTS_KEYBOARD_DRIVEN_EVENT_REWRITER_H_
diff --git a/chrome/browser/chromeos/events/keyboard_driven_event_rewriter_unittest.cc b/ash/events/keyboard_driven_event_rewriter_unittest.cc
similarity index 96%
rename from chrome/browser/chromeos/events/keyboard_driven_event_rewriter_unittest.cc
rename to ash/events/keyboard_driven_event_rewriter_unittest.cc
index 5de2d5c2..4bac382 100644
--- a/chrome/browser/chromeos/events/keyboard_driven_event_rewriter_unittest.cc
+++ b/ash/events/keyboard_driven_event_rewriter_unittest.cc
@@ -6,14 +6,14 @@
 
 #include <string>
 
+#include "ash/events/keyboard_driven_event_rewriter.h"
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/strings/stringprintf.h"
-#include "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/events/event.h"
 
-namespace chromeos {
+namespace ash {
 
 class KeyboardDrivenEventRewriterTest : public testing::Test {
  public:
@@ -114,4 +114,4 @@
   }
 }
 
-}  // namespace chromeos
+}  // namespace ash
diff --git a/ash/manifest.json b/ash/manifest.json
index b43a0b8..508ffce 100644
--- a/ash/manifest.json
+++ b/ash/manifest.json
@@ -18,6 +18,7 @@
           "ash::mojom::CastConfig",
           "ash::mojom::CrosDisplayConfigController",
           "ash::mojom::DockedMagnifierController",
+          "ash::mojom::EventRewriterController",
           "ash::mojom::FirstRunHelper",
           "ash::mojom::HighlighterController",
           "ash::mojom::ImeController",
diff --git a/ash/mojo_interface_factory.cc b/ash/mojo_interface_factory.cc
index a41da5b..64a5372b 100644
--- a/ash/mojo_interface_factory.cc
+++ b/ash/mojo_interface_factory.cc
@@ -14,6 +14,7 @@
 #include "ash/cast_config_controller.h"
 #include "ash/display/ash_display_controller.h"
 #include "ash/display/cros_display_config.h"
+#include "ash/events/event_rewriter_controller.h"
 #include "ash/first_run/first_run_helper.h"
 #include "ash/highlighter/highlighter_controller.h"
 #include "ash/ime/ime_controller.h"
@@ -102,6 +103,11 @@
   Shell::Get()->docked_magnifier_controller()->BindRequest(std::move(request));
 }
 
+void BindEventRewriterControllerRequestOnMainThread(
+    mojom::EventRewriterControllerRequest request) {
+  Shell::Get()->event_rewriter_controller()->BindRequest(std::move(request));
+}
+
 void BindFirstRunHelperRequestOnMainThread(
     mojom::FirstRunHelperRequest request) {
   Shell::Get()->first_run_helper()->BindRequest(std::move(request));
@@ -235,6 +241,9 @@
         main_thread_task_runner);
   }
   registry->AddInterface(
+      base::BindRepeating(&BindEventRewriterControllerRequestOnMainThread),
+      main_thread_task_runner);
+  registry->AddInterface(
       base::BindRepeating(&BindFirstRunHelperRequestOnMainThread),
       main_thread_task_runner);
   registry->AddInterface(
diff --git a/ash/public/interfaces/BUILD.gn b/ash/public/interfaces/BUILD.gn
index 9848360b..9a718bbcd 100644
--- a/ash/public/interfaces/BUILD.gn
+++ b/ash/public/interfaces/BUILD.gn
@@ -25,6 +25,7 @@
     "cros_display_config.mojom",
     "docked_magnifier_controller.mojom",
     "event_properties.mojom",
+    "event_rewriter_controller.mojom",
     "first_run_helper.mojom",
     "highlighter_controller.mojom",
     "ime_controller.mojom",
diff --git a/ash/public/interfaces/event_rewriter_controller.mojom b/ash/public/interfaces/event_rewriter_controller.mojom
new file mode 100644
index 0000000..4917b6ee
--- /dev/null
+++ b/ash/public/interfaces/event_rewriter_controller.mojom
@@ -0,0 +1,16 @@
+// 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.
+
+module ash.mojom;
+
+// Allows clients to toggle some event rewriting behavior.
+interface EventRewriterController {
+  // Enables the KeyboardDrivenEventRewriter, which is disabled by default.
+  // This only applies when the user is on the login screen.
+  SetKeyboardDrivenEventRewriterEnabled(bool enabled);
+
+  // If true, Shift + Arrow keys are rewritten to Tab/Shift-Tab keys.
+  // This only applies when the KeyboardDrivenEventRewriter is active.
+  SetArrowToTabRewritingEnabled(bool enabled);
+};
diff --git a/ash/shell.cc b/ash/shell.cc
index a3d3b08..02fa615c 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -44,7 +44,7 @@
 #include "ash/display/screen_position_controller.h"
 #include "ash/display/window_tree_host_manager.h"
 #include "ash/drag_drop/drag_drop_controller.h"
-#include "ash/event_rewriter_controller.h"
+#include "ash/events/event_rewriter_controller.h"
 #include "ash/first_run/first_run_helper.h"
 #include "ash/focus_cycler.h"
 #include "ash/frame/custom_frame_view_ash.h"
diff --git a/ash/standalone/manifest.json b/ash/standalone/manifest.json
index 3b109cf6..ec0861e 100644
--- a/ash/standalone/manifest.json
+++ b/ash/standalone/manifest.json
@@ -8,6 +8,7 @@
           "app_list::mojom::AppList",
           "ash::mojom::AcceleratorController",
           "ash::mojom::CastConfig",
+          "ash::mojom::EventRewriterController",
           "ash::mojom::HighlighterController",
           "ash::mojom::ImeController",
           "ash::mojom::LocaleNotificationController",
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 1ef5bee..1f69541 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -67,7 +67,7 @@
 <translation id="2292698582925480719">مقياس العرض</translation>
 <translation id="2303600792989757991">نظرة عامة لنافذة التبديل</translation>
 <translation id="2338501278241028356">تشغيل البلوتوث لاكتشاف الأجهزة القريبة</translation>
-<translation id="2339073806695260576">انقر على زر قلم الشاشة على الرف لتدوين ملاحظة أو للحصول على لقطة شاشة أولاستخدام مؤشر الليزر أو العدسة المكبرة.</translation>
+<translation id="2339073806695260576">انقر على زر قلم الشاشة على الرف لتدوين ملاحظة أو للحصول على لقطة شاشة أو لاستخدام مؤشر الليزر أو العدسة المكبرة.</translation>
 <translation id="2351266942280602854">اللغة والإدخال</translation>
 <translation id="2352467521400612932">إعدادات قلم الشاشة</translation>
 <translation id="2354174487190027830">تفعيل <ph name="NAME" /></translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 0ec0842..06a0b14 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -67,7 +67,7 @@
 <translation id="2292698582925480719">স্কেল প্রদর্শন করুন</translation>
 <translation id="2303600792989757991">উইন্ডোর ওভারভিউ টগল করুন</translation>
 <translation id="2338501278241028356">আশেপাশের ডিভাইস খুঁজে পেতে ব্লুটুথ চালু করুন</translation>
-<translation id="2339073806695260576">একটি নোট, স্ক্রিনশট নিতে, লেজার পয়েন্টার, বা ম্যাগনিফিকেশনের কাচ ব্যবহার করার জন্য শেল্ফের স্টাইলাস বোতামটি ট্যাপ করুন।</translation>
+<translation id="2339073806695260576">একটি নোট, স্ক্রিনশট নিতে, লেজার পয়েন্টার বা ম্যাগনিফিকেশনের কাচ ব্যবহার করার জন্য শেল্ফের স্টাইলাস বোতামটি ট্যাপ করুন।</translation>
 <translation id="2351266942280602854">ভাষা ও কিবোর্ড</translation>
 <translation id="2352467521400612932">স্টাইলাস সেটিংস</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> সক্রিয় করা হচ্ছে</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index c7738472..bea877ec 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -67,7 +67,7 @@
 <translation id="2292698582925480719">Visningsskala</translation>
 <translation id="2303600792989757991">Vis eller skjul vindusoversikten</translation>
 <translation id="2338501278241028356">Slå på Bluetooth for å finne enheter i nærheten</translation>
-<translation id="2339073806695260576">Trykk på pekepennknappen på hyllen for å ta et notat, en skjermdump, bruke laserpekeren eller bruke forstørrelsesglasset.</translation>
+<translation id="2339073806695260576">Trykk på pekepennknappen på hyllen for å ta et notat, ta en skjermdump, bruke laserpekeren eller bruke forstørrelsesglasset.</translation>
 <translation id="2351266942280602854">Språk og inndata</translation>
 <translation id="2352467521400612932">Innstillinger for pekepenn</translation>
 <translation id="2354174487190027830">Aktiverer <ph name="NAME" /></translation>
diff --git a/base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java b/base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java
index 8add2c67..633463d 100644
--- a/base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java
+++ b/base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java
@@ -199,14 +199,12 @@
     // Process ID of the corresponding child process.
     private int mPid;
 
-    // Inital moderate binding.
-    private final ChildServiceConnection mInitialBinding;
-
     // Strong binding will make the service priority equal to the priority of the activity.
     private final ChildServiceConnection mStrongBinding;
 
     // Moderate binding will make the service priority equal to the priority of a visible process
     // while the app is in the foreground.
+    // This is also used as the initial binding before any priorities are set.
     private final ChildServiceConnection mModerateBinding;
 
     // Low priority binding maintained in the entire lifetime of the connection, i.e. between calls
@@ -287,7 +285,6 @@
         int defaultFlags = Context.BIND_AUTO_CREATE
                 | (bindAsExternalService ? Context.BIND_EXTERNAL_SERVICE : 0);
 
-        mInitialBinding = connectionFactory.createConnection(intent, defaultFlags, delegate);
         mModerateBinding = connectionFactory.createConnection(intent, defaultFlags, delegate);
         mStrongBinding = connectionFactory.createConnection(
                 intent, defaultFlags | Context.BIND_IMPORTANT, delegate);
@@ -520,7 +517,13 @@
         assert isRunningOnLauncherThread();
         assert !mUnbound;
 
-        boolean success = useStrongBinding ? mStrongBinding.bind() : mInitialBinding.bind();
+        boolean success;
+        if (useStrongBinding) {
+            success = mStrongBinding.bind();
+        } else {
+            mModerateBindingCount++;
+            success = mModerateBinding.bind();
+        }
         if (!success) return false;
 
         updateWaivedBoundOnlyState();
@@ -537,7 +540,6 @@
         mStrongBinding.unbind();
         mWaivedBinding.unbind();
         mModerateBinding.unbind();
-        mInitialBinding.unbind();
         // Note that we don't update the waived bound only state here as to preserve the state when
         // disconnected.
 
@@ -548,28 +550,11 @@
         }
     }
 
-    public boolean isInitialBindingBound() {
-        assert isRunningOnLauncherThread();
-        return mInitialBinding.isBound();
-    }
-
-    public void addInitialBinding() {
-        assert isRunningOnLauncherThread();
-        mInitialBinding.bind();
-        updateWaivedBoundOnlyState();
-    }
-
     public boolean isStrongBindingBound() {
         assert isRunningOnLauncherThread();
         return mStrongBinding.isBound();
     }
 
-    public void removeInitialBinding() {
-        assert isRunningOnLauncherThread();
-        mInitialBinding.unbind();
-        updateWaivedBoundOnlyState();
-    }
-
     public void addStrongBinding() {
         assert isRunningOnLauncherThread();
         if (!isConnected()) {
@@ -650,11 +635,10 @@
         return mKilledByUs;
     }
 
-    // Should be called every time the mInitialBinding or mStrongBinding are bound/unbound.
+    // Should be called every time the mModerateBinding or mStrongBinding are bound/unbound.
     private void updateWaivedBoundOnlyState() {
         if (!mUnbound) {
-            mWaivedBoundOnly = !mInitialBinding.isBound() && !mStrongBinding.isBound()
-                    && !mModerateBinding.isBound();
+            mWaivedBoundOnly = !mStrongBinding.isBound() && !mModerateBinding.isBound();
         }
     }
 
diff --git a/base/android/junit/src/org/chromium/base/process_launcher/ChildProcessConnectionTest.java b/base/android/junit/src/org/chromium/base/process_launcher/ChildProcessConnectionTest.java
index ef898a1..ad2bbfa 100644
--- a/base/android/junit/src/org/chromium/base/process_launcher/ChildProcessConnectionTest.java
+++ b/base/android/junit/src/org/chromium/base/process_launcher/ChildProcessConnectionTest.java
@@ -193,7 +193,7 @@
         ChildProcessConnection connection = createDefaultTestConnection();
         assertNotNull(mFirstServiceConnection);
         connection.start(false /* useStrongBinding */, mServiceCallback);
-        Assert.assertTrue(connection.isInitialBindingBound());
+        Assert.assertTrue(connection.isModerateBindingBound());
         Assert.assertFalse(connection.didOnServiceConnectedForTesting());
         verify(mServiceCallback, never()).onChildStarted();
         verify(mServiceCallback, never()).onChildStartFailed(any());
@@ -216,7 +216,7 @@
         doReturn(false).when(mFirstServiceConnection).bind();
         connection.start(false /* useStrongBinding */, mServiceCallback);
 
-        Assert.assertFalse(connection.isInitialBindingBound());
+        Assert.assertFalse(connection.isModerateBindingBound());
         Assert.assertFalse(connection.didOnServiceConnectedForTesting());
         verify(mServiceCallback, never()).onChildStarted();
         verify(mServiceCallback, never()).onChildStartFailed(any());
diff --git a/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc b/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
index 51ac854..c303f0b 100644
--- a/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
+++ b/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
@@ -63,6 +63,13 @@
 constexpr TimeDelta kReclaimTimeForCleanupTests =
     TimeDelta::FromMilliseconds(500);
 
+// Waits on |event| in a scope where the blocking observer is null, to avoid
+// affecting the worker capacity.
+void WaitWithoutBlockingObserver(WaitableEvent* event) {
+  internal::ScopedClearBlockingObserverForTesting clear_blocking_observer;
+  event->Wait();
+}
+
 class TaskSchedulerWorkerPoolImplTestBase {
  protected:
   TaskSchedulerWorkerPoolImplTestBase()
@@ -220,7 +227,8 @@
         CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam()),
         GetParam()));
     EXPECT_TRUE(blocked_task_factories.back()->PostTask(
-        PostNestedTask::NO, Bind(&WaitableEvent::Wait, Unretained(&event))));
+        PostNestedTask::NO,
+        BindOnce(&WaitWithoutBlockingObserver, Unretained(&event))));
     blocked_task_factories.back()->WaitForAllTasksToRun();
   }
 
@@ -254,7 +262,8 @@
         CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam()),
         GetParam()));
     EXPECT_TRUE(factories.back()->PostTask(
-        PostNestedTask::NO, Bind(&WaitableEvent::Wait, Unretained(&event))));
+        PostNestedTask::NO,
+        BindOnce(&WaitWithoutBlockingObserver, Unretained(&event))));
     factories.back()->WaitForAllTasksToRun();
   }
 
@@ -372,7 +381,7 @@
                            WaitableEvent* barrier) {
   *platform_thread_ref = PlatformThread::CurrentRef();
   task_running->Signal();
-  barrier->Wait();
+  WaitWithoutBlockingObserver(barrier);
 }
 
 }  // namespace
@@ -454,7 +463,7 @@
  public:
   void SetTlsValueAndWait() {
     slot_.Set(reinterpret_cast<void*>(kMagicTlsValue));
-    waiter_.Wait();
+    WaitWithoutBlockingObserver(&waiter_);
   }
 
   void CountZeroTlsValuesAndWait(WaitableEvent* count_waiter) {
@@ -462,7 +471,7 @@
       subtle::NoBarrier_AtomicIncrement(&zero_tls_values_, 1);
 
     count_waiter->Signal();
-    waiter_.Wait();
+    WaitWithoutBlockingObserver(&waiter_);
   }
 
  protected:
@@ -573,7 +582,7 @@
           BindOnce(
               [](OnceClosure on_running, WaitableEvent* continue_event) {
                 std::move(on_running).Run();
-                continue_event->Wait();
+                WaitWithoutBlockingObserver(continue_event);
               },
               all_workers_running_barrier, continue_event));
     }
@@ -597,8 +606,8 @@
       {WithBaseSyncPrimitives()});
 
   // Post a task.
-  task_runner->PostTask(FROM_HERE,
-                        BindOnce(&WaitableEvent::Wait, Unretained(&event)));
+  task_runner->PostTask(
+      FROM_HERE, BindOnce(&WaitWithoutBlockingObserver, Unretained(&event)));
 
   // Post 2 more tasks while the first task hasn't completed its execution. It
   // is guaranteed that these tasks will run immediately after the first task,
@@ -722,7 +731,7 @@
             ASSERT_FALSE(thread_ref->is_null());
             EXPECT_EQ(*thread_ref, PlatformThread::CurrentRef());
             cleanup_thread_running->Signal();
-            cleanup_thread_continue->Wait();
+            WaitWithoutBlockingObserver(cleanup_thread_continue);
           },
           Unretained(&thread_ref), Unretained(&cleanup_thread_running),
           Unretained(&cleanup_thread_continue)));
@@ -755,7 +764,7 @@
                            << "Worker reused. Worker will not cleanup and the "
                               "histogram value will be wrong.";
                        top_idle_thread_running->Signal();
-                       top_idle_thread_continue->Wait();
+                       WaitWithoutBlockingObserver(top_idle_thread_continue);
                      },
                      thread_ref, Unretained(&top_idle_thread_running),
                      Unretained(&top_idle_thread_continue)));
@@ -829,7 +838,7 @@
   RepeatingClosure closure = BindRepeating(
       [](WaitableEvent* thread_running, WaitableEvent* thread_continue) {
         thread_running->Signal();
-        thread_continue->Wait();
+        WaitWithoutBlockingObserver(thread_continue);
       },
       Unretained(&thread_running), Unretained(&thread_continue));
 
@@ -948,15 +957,7 @@
                 NestedScopedBlockingCall nested_scoped_blocking_call(
                     nested_blocking_type);
                 blocking_thread_running_closure->Run();
-
-                {
-                  // Use ScopedClearBlockingObserverForTesting to avoid
-                  // affecting the worker capacity with this WaitableEvent.
-                  internal::ScopedClearBlockingObserverForTesting
-                      scoped_clear_blocking_observer;
-                  blocking_thread_continue_->Wait();
-                }
-
+                WaitWithoutBlockingObserver(blocking_thread_continue_);
               },
               Unretained(&blocking_thread_running_closure),
               Unretained(&blocking_thread_continue_), nested_blocking_type));
@@ -1039,24 +1040,11 @@
                WaitableEvent* thread_running, WaitableEvent* thread_can_block,
                WaitableEvent* thread_continue) {
               thread_running->Signal();
-              {
-                // Use ScopedClearBlockingObserverForTesting to avoid affecting
-                // the worker capacity with this WaitableEvent.
-                internal::ScopedClearBlockingObserverForTesting
-                    scoped_clear_blocking_observer;
-                thread_can_block->Wait();
-              }
+              WaitWithoutBlockingObserver(thread_can_block);
 
               NestedScopedBlockingCall nested_scoped_blocking_call(
                   nested_blocking_type);
-
-              {
-                // Use ScopedClearBlockingObserverForTesting to avoid affecting
-                // the worker capacity with this WaitableEvent.
-                internal::ScopedClearBlockingObserverForTesting
-                    scoped_clear_blocking_observer;
-                thread_continue->Wait();
-              }
+              WaitWithoutBlockingObserver(thread_continue);
             },
             GetParam(), Unretained(&thread_running),
             Unretained(&thread_can_block), Unretained(&thread_continue)));
@@ -1083,15 +1071,8 @@
                                [](Closure* extra_threads_running_barrier,
                                   WaitableEvent* extra_threads_continue) {
                                  extra_threads_running_barrier->Run();
-                                 {
-                                   // Use ScopedClearBlockingObserverForTesting
-                                   // to avoid affecting the worker capacity
-                                   // with this WaitableEvent.
-                                   internal::
-                                       ScopedClearBlockingObserverForTesting
-                                           scoped_clear_blocking_observer;
-                                   extra_threads_continue->Wait();
-                                 }
+                                 WaitWithoutBlockingObserver(
+                                     extra_threads_continue);
                                },
                                Unretained(&extra_threads_running_barrier),
                                Unretained(&extra_threads_continue)));
@@ -1143,13 +1124,7 @@
     auto callback = BindOnce(
         [](Closure* thread_running_barrier, WaitableEvent* thread_continue) {
           thread_running_barrier->Run();
-          {
-            // Use ScopedClearBlockingObserver ForTesting to avoid affecting the
-            // worker capacity with this WaitableEvent.
-            internal::ScopedClearBlockingObserverForTesting
-                scoped_clear_blocking_observer;
-            thread_continue->Wait();
-          }
+          WaitWithoutBlockingObserver(thread_continue);
         },
         Unretained(&thread_running_barrier), Unretained(&thread_continue));
     task_runner_->PostTask(FROM_HERE, std::move(callback));
@@ -1255,17 +1230,8 @@
   // Saturate the pool so that a MAY_BLOCK ScopedBlockingCall would increment
   // the worker capacity.
   for (size_t i = 0; i < kNumWorkersInWorkerPool - 1; ++i) {
-    task_runner->PostTask(FROM_HERE,
-                          BindOnce(
-                              [](WaitableEvent* can_return) {
-                                // Use ScopedClearBlockingObserverForTesting to
-                                // avoid affecting the worker capacity with this
-                                // WaitableEvent.
-                                internal::ScopedClearBlockingObserverForTesting
-                                    scoped_clear_blocking_observer;
-                                can_return->Wait();
-                              },
-                              Unretained(&can_return)));
+    task_runner->PostTask(FROM_HERE, BindOnce(&WaitWithoutBlockingObserver,
+                                              Unretained(&can_return)));
   }
 
   WaitableEvent can_instantiate_will_block(
@@ -1283,22 +1249,10 @@
              WaitableEvent* did_instantiate_will_block,
              WaitableEvent* can_return) {
             ScopedBlockingCall may_block(BlockingType::MAY_BLOCK);
-            {
-              // Use ScopedClearBlockingObserverForTesting to avoid affecting
-              // the worker capacity with this WaitableEvent.
-              internal::ScopedClearBlockingObserverForTesting
-                  scoped_clear_blocking_observer;
-              can_instantiate_will_block->Wait();
-            }
+            WaitWithoutBlockingObserver(can_instantiate_will_block);
             ScopedBlockingCall will_block(BlockingType::WILL_BLOCK);
             did_instantiate_will_block->Signal();
-            {
-              // Use ScopedClearBlockingObserverForTesting to avoid affecting
-              // the worker capacity with this WaitableEvent.
-              internal::ScopedClearBlockingObserverForTesting
-                  scoped_clear_blocking_observer;
-              can_return->Wait();
-            }
+            WaitWithoutBlockingObserver(can_return);
           },
           Unretained(&can_instantiate_will_block),
           Unretained(&did_instantiate_will_block), Unretained(&can_return)));
@@ -1360,10 +1314,9 @@
         threads_running_barrier->Run();
         {
           ScopedBlockingCall scoped_blocking_call(BlockingType::WILL_BLOCK);
-          blocked_call_continue->Wait();
+          WaitWithoutBlockingObserver(blocked_call_continue);
         }
-        threads_continue->Wait();
-
+        WaitWithoutBlockingObserver(threads_continue);
       },
       Unretained(&threads_running_barrier), Unretained(&threads_continue),
       Unretained(&blocked_call_continue));
@@ -1390,7 +1343,8 @@
                               [](Closure* extra_threads_running_barrier,
                                  WaitableEvent* extra_threads_continue) {
                                 extra_threads_running_barrier->Run();
-                                extra_threads_continue->Wait();
+                                WaitWithoutBlockingObserver(
+                                    extra_threads_continue);
                               },
                               Unretained(&extra_threads_running_barrier),
                               Unretained(&extra_threads_continue)));
@@ -1455,7 +1409,8 @@
                                    ScopedBlockingCall scoped_blocking_call(
                                        BlockingType::WILL_BLOCK);
                                    early_threads_barrier_closure->Run();
-                                   early_release_thread_continue->Wait();
+                                   WaitWithoutBlockingObserver(
+                                       early_release_thread_continue);
                                  }
                                  early_threads_finished->Run();
                                },
@@ -1490,7 +1445,7 @@
                WaitableEvent* late_release_thread_contine) {
               ScopedBlockingCall scoped_blocking_call(BlockingType::WILL_BLOCK);
               late_threads_barrier_closure->Run();
-              late_release_thread_contine->Wait();
+              WaitWithoutBlockingObserver(late_release_thread_contine);
             },
             Unretained(&late_threads_barrier_closure),
             Unretained(&late_release_thread_contine)));
@@ -1519,7 +1474,7 @@
         BindOnce(
             [](Closure* closure, WaitableEvent* final_tasks_continue) {
               closure->Run();
-              final_tasks_continue->Wait();
+              WaitWithoutBlockingObserver(final_tasks_continue);
             },
             Unretained(&final_tasks_running_barrier),
             Unretained(&final_tasks_continue)));
@@ -1575,7 +1530,7 @@
         BindOnce(
             [](OnceClosure on_running, WaitableEvent* unblock_threads) {
               std::move(on_running).Run();
-              unblock_threads->Wait();
+              WaitWithoutBlockingObserver(unblock_threads);
             },
             threads_running_barrier, Unretained(&unblock_threads)));
   }
diff --git a/base/task_scheduler/test_task_factory.cc b/base/task_scheduler/test_task_factory.cc
index 215e8d12..0867547 100644
--- a/base/task_scheduler/test_task_factory.cc
+++ b/base/task_scheduler/test_task_factory.cc
@@ -33,12 +33,12 @@
 }
 
 bool TestTaskFactory::PostTask(PostNestedTask post_nested_task,
-                               const Closure& after_task_closure) {
+                               OnceClosure after_task_closure) {
   AutoLock auto_lock(lock_);
   return task_runner_->PostTask(
-      FROM_HERE,
-      BindOnce(&TestTaskFactory::RunTaskCallback, Unretained(this),
-               num_posted_tasks_++, post_nested_task, after_task_closure));
+      FROM_HERE, BindOnce(&TestTaskFactory::RunTaskCallback, Unretained(this),
+                          num_posted_tasks_++, post_nested_task,
+                          std::move(after_task_closure)));
 }
 
 void TestTaskFactory::WaitForAllTasksToRun() const {
@@ -49,7 +49,7 @@
 
 void TestTaskFactory::RunTaskCallback(size_t task_index,
                                       PostNestedTask post_nested_task,
-                                      const Closure& after_task_closure) {
+                                      OnceClosure after_task_closure) {
   if (post_nested_task == PostNestedTask::YES)
     PostTask(PostNestedTask::NO, Closure());
 
@@ -98,7 +98,7 @@
   }
 
   if (!after_task_closure.is_null())
-    after_task_closure.Run();
+    std::move(after_task_closure).Run();
 }
 
 }  // namespace test
diff --git a/base/task_scheduler/test_task_factory.h b/base/task_scheduler/test_task_factory.h
index 5abf0f54..300b7bf 100644
--- a/base/task_scheduler/test_task_factory.h
+++ b/base/task_scheduler/test_task_factory.h
@@ -54,7 +54,7 @@
   // - Verify conditions in which the task runs (see potential failures above).
   // - Run |after_task_closure| if it is not null.
   bool PostTask(PostNestedTask post_nested_task,
-                const Closure& after_task_closure);
+                OnceClosure after_task_closure);
 
   // Waits for all tasks posted by PostTask() to start running. It is not
   // guaranteed that the tasks have completed their execution when this returns.
@@ -65,7 +65,7 @@
  private:
   void RunTaskCallback(size_t task_index,
                        PostNestedTask post_nested_task,
-                       const Closure& after_task_closure);
+                       OnceClosure after_task_closure);
 
   // Synchronizes access to all members.
   mutable Lock lock_;
diff --git a/base/trace_event/OWNERS b/base/trace_event/OWNERS
index 343a3db..24a0bd2 100644
--- a/base/trace_event/OWNERS
+++ b/base/trace_event/OWNERS
@@ -1,12 +1,15 @@
-dsinclair@chromium.org
-nduca@chromium.org
+chiniforooshan@chromium.org
 oysteine@chromium.org
 primiano@chromium.org
-simonhatch@chromium.org
 per-file trace_event_android.cc=wangxianzhu@chromium.org
 
 # For memory-infra related changes
 ssid@chromium.org
 
+# Emeritus:
+dsinclair@chromium.org
+nduca@chromium.org
+simonhatch@chromium.org
+
 # TEAM: tracing@chromium.org
 # COMPONENT: Speed>Tracing
diff --git a/build/android/binary_size/apk_downloader.py b/build/android/binary_size/apk_downloader.py
index 1fbba06..83f7918c 100755
--- a/build/android/binary_size/apk_downloader.py
+++ b/build/android/binary_size/apk_downloader.py
@@ -20,7 +20,7 @@
 import download_from_google_storage
 import upload_to_google_storage
 
-CURRENT_MILESTONE = '66'
+CURRENT_MILESTONE = '67'
 DEFAULT_BUCKET = 'gs://chromium-android-tools/apks'
 DEFAULT_DOWNLOAD_PATH = os.path.join(os.path.dirname(__file__), 'apks')
 DEFAULT_BUILDER = 'Android_Builder'
diff --git a/build/android/binary_size/apks/Android_Builder/67/ChromeModernPublic.apk.sha1 b/build/android/binary_size/apks/Android_Builder/67/ChromeModernPublic.apk.sha1
new file mode 100644
index 0000000..2127fdc9
--- /dev/null
+++ b/build/android/binary_size/apks/Android_Builder/67/ChromeModernPublic.apk.sha1
@@ -0,0 +1 @@
+b266b4168dd50384c39b57a6ac9c6c260edd225f
\ No newline at end of file
diff --git a/build/android/binary_size/apks/Android_Builder/67/ChromePublic.apk.sha1 b/build/android/binary_size/apks/Android_Builder/67/ChromePublic.apk.sha1
new file mode 100644
index 0000000..05fd194
--- /dev/null
+++ b/build/android/binary_size/apks/Android_Builder/67/ChromePublic.apk.sha1
@@ -0,0 +1 @@
+443888b240953a9c0cac582b82587e06cc9c1af9
\ No newline at end of file
diff --git a/build/android/binary_size/apks/Android_Builder/67/MonochromePublic.apk.sha1 b/build/android/binary_size/apks/Android_Builder/67/MonochromePublic.apk.sha1
new file mode 100644
index 0000000..563969c3
--- /dev/null
+++ b/build/android/binary_size/apks/Android_Builder/67/MonochromePublic.apk.sha1
@@ -0,0 +1 @@
+7c930a47e9b48c21bd2c09cddc6e9326b8dc15ef
\ No newline at end of file
diff --git a/build/android/binary_size/apks/Android_arm64_Builder/67/ChromeModernPublic.apk.sha1 b/build/android/binary_size/apks/Android_arm64_Builder/67/ChromeModernPublic.apk.sha1
new file mode 100644
index 0000000..6d8e57c6
--- /dev/null
+++ b/build/android/binary_size/apks/Android_arm64_Builder/67/ChromeModernPublic.apk.sha1
@@ -0,0 +1 @@
+9ecb48a44c57c9bbbe85dcf0d9cd446529640807
\ No newline at end of file
diff --git a/build/android/binary_size/apks/Android_arm64_Builder/67/ChromePublic.apk.sha1 b/build/android/binary_size/apks/Android_arm64_Builder/67/ChromePublic.apk.sha1
new file mode 100644
index 0000000..a06d22d3
--- /dev/null
+++ b/build/android/binary_size/apks/Android_arm64_Builder/67/ChromePublic.apk.sha1
@@ -0,0 +1 @@
+60f7ca1ebf019bf3a77b372c5f4c80592e36b942
\ No newline at end of file
diff --git a/build/android/binary_size/apks/README.md b/build/android/binary_size/apks/README.md
index 0b6216f1..d6e4f58 100644
--- a/build/android/binary_size/apks/README.md
+++ b/build/android/binary_size/apks/README.md
@@ -42,3 +42,4 @@
   * [M64](https://crrev.com/520840)
   * [M65](https://crrev.com/530369)
   * [M66](https://crrev.com/540276)
+  * [M67](https://crrev.com/550428)
diff --git a/build/android/pylib/constants/__init__.py b/build/android/pylib/constants/__init__.py
index ba886c6..2101b9c1 100644
--- a/build/android/pylib/constants/__init__.py
+++ b/build/android/pylib/constants/__init__.py
@@ -95,7 +95,7 @@
 
 SCREENSHOTS_DIR = os.path.join(DIR_SOURCE_ROOT, 'out_screenshots')
 
-ANDROID_SDK_VERSION = version_codes.O_MR1
+ANDROID_SDK_VERSION = version_codes.OREO_MR1
 ANDROID_SDK_BUILD_TOOLS_VERSION = '27.0.3'
 ANDROID_SDK_ROOT = os.path.join(DIR_SOURCE_ROOT,
                                 'third_party', 'android_tools', 'sdk')
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index c134e7a..2c4399c4 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -1510,7 +1510,6 @@
   #   proguard_configs: List of proguard configs (optional).
   #   android_manifest: Path to AndroidManifest.xml (optional).
   #   native_libraries: list of native libraries (optional).
-  #   direct_deps_only: Do not recurse on deps. (optional, defaults false).
   #
   # Example
   #   dist_aar("my_aar") {
@@ -1525,9 +1524,6 @@
       _deps = invoker.deps
     }
 
-    _direct_deps_only =
-        defined(invoker.direct_deps_only) && invoker.direct_deps_only
-
     _build_config = "$target_gen_dir/$target_name.build_config"
     _build_config_target_name = "${target_name}__build_config"
 
@@ -1570,15 +1566,11 @@
         rebase_path(depfile, root_build_dir),
         "--output",
         rebase_path(invoker.output, root_build_dir),
+        "--jars=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)",
         "--dependencies-res-zips=@FileArg($_rebased_build_config:resources:dependency_zips)",
         "--r-text-files=@FileArg($_rebased_build_config:resources:extra_r_text_files)",
         "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)",
       ]
-      if (_direct_deps_only) {
-        args += [ "--jars=@FileArg($_rebased_build_config:javac:classpath)" ]
-      } else {
-        args += [ "--jars=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)" ]
-      }
       if (defined(invoker.android_manifest)) {
         args += [
           "--android-manifest",
diff --git a/build/config/fuchsia/sandbox_policy b/build/config/fuchsia/sandbox_policy
index d03f937..9419bdd 100644
--- a/build/config/fuchsia/sandbox_policy
+++ b/build/config/fuchsia/sandbox_policy
@@ -1,4 +1,4 @@
 {
-  "features": [ "persistent-storage", "system-temp" ]
+  "features": [ "persistent-storage", "root-ssl-certificates", "system-temp" ]
 }
 
diff --git a/build/config/fuchsia/testing_sandbox_policy b/build/config/fuchsia/testing_sandbox_policy
index 9a4354d2..9d4db8f 100644
--- a/build/config/fuchsia/testing_sandbox_policy
+++ b/build/config/fuchsia/testing_sandbox_policy
@@ -1,5 +1,5 @@
 {
-  "features": [ "persistent-storage", "system-temp" ],
+  "features": [ "persistent-storage", "root-ssl-certificates", "system-temp"],
   "dev": ["null", "zero"]
 }
 
diff --git a/build/fuchsia/sdk.sha1 b/build/fuchsia/sdk.sha1
index 94f4dfe1..217177c 100644
--- a/build/fuchsia/sdk.sha1
+++ b/build/fuchsia/sdk.sha1
@@ -1 +1 @@
-9aded1cf90cda2da1401a19e972daf6d5d32c277
\ No newline at end of file
+6ed1adbe1ffaa4e7b68e340b12d4773ed0a816c5
\ No newline at end of file
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 9a8e41f..abc1df2 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -2728,6 +2728,14 @@
   return viewport()->MainScrollLayer();
 }
 
+ScrollNode* LayerTreeHostImpl::ViewportMainScrollNode() {
+  if (!ViewportMainScrollLayer())
+    return nullptr;
+
+  return active_tree_->property_trees()->scroll_tree.Node(
+      ViewportMainScrollLayer()->scroll_tree_index());
+}
+
 void LayerTreeHostImpl::QueueImageDecode(int request_id,
                                          const PaintImage& image) {
   TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
@@ -3183,12 +3191,7 @@
   // If the viewport is scrolling and it cannot consume any delta hints, the
   // scroll event will need to get bubbled if the viewport is for a guest or
   // oopif.
-  ScrollNode* viewport_scroll_node =
-      viewport()->MainScrollLayer()
-          ? active_tree_->property_trees()->scroll_tree.Node(
-                viewport()->MainScrollLayer()->scroll_tree_index())
-          : nullptr;
-  if (active_tree_->CurrentlyScrollingNode() == viewport_scroll_node &&
+  if (active_tree_->CurrentlyScrollingNode() == ViewportMainScrollNode() &&
       !viewport()->CanScroll(*scroll_state)) {
     scroll_status.bubble = true;
   }
@@ -3733,10 +3736,7 @@
   std::list<ScrollNode*> current_scroll_chain;
   ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree;
   ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode();
-  ScrollNode* viewport_scroll_node =
-      viewport()->MainScrollLayer()
-          ? scroll_tree.Node(viewport()->MainScrollLayer()->scroll_tree_index())
-          : nullptr;
+  ScrollNode* viewport_scroll_node = ViewportMainScrollNode();
   if (scroll_node) {
     // TODO(bokan): The loop checks for a null parent but don't we still want to
     // distribute to the root scroll node?
@@ -3904,8 +3904,13 @@
     accumulated_root_overscroll_.set_x(0);
   if (did_scroll_y)
     accumulated_root_overscroll_.set_y(0);
-  gfx::Vector2dF unused_root_delta(scroll_state->delta_x(),
-                                   scroll_state->delta_y());
+
+  gfx::Vector2dF unused_root_delta;
+  if (current_scrolling_node &&
+      current_scrolling_node == ViewportMainScrollNode()) {
+    unused_root_delta =
+        gfx::Vector2dF(scroll_state->delta_x(), scroll_state->delta_y());
+  }
 
   // When inner viewport is unscrollable, disable overscrolls.
   if (const auto* inner_viewport_scroll_node = InnerViewportScrollNode()) {
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index 0530276..82d50cc8 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -667,7 +667,13 @@
 
   void SetLayerTreeMutator(std::unique_ptr<LayerTreeMutator> mutator);
 
+  // The viewport has two scroll nodes, corresponding to the visual and layout
+  // viewports. However, when we compute the scroll chain we include only one
+  // of these -- we call that the "main" scroll node. When scrolling it, we
+  // scroll using the Viewport class which knows how to distribute scroll
+  // between the two.
   LayerImpl* ViewportMainScrollLayer();
+  ScrollNode* ViewportMainScrollNode();
 
   void QueueImageDecode(int request_id, const PaintImage& image);
   std::vector<std::pair<int, bool>> TakeCompletedImageDecodeRequests();
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 5ceb5fa4..bada9a6 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -7820,6 +7820,76 @@
   }
 }
 
+TEST_F(LayerTreeHostImplTest, NoOverscrollOnNonViewportLayers) {
+  const gfx::Size content_size(200, 200);
+  const gfx::Size viewport_size(100, 100);
+
+  LayerTreeImpl* layer_tree_impl = host_impl_->active_tree();
+
+  LayerImpl* content_layer =
+      CreateBasicVirtualViewportLayers(viewport_size, content_size);
+  LayerImpl* outer_scroll_layer = host_impl_->OuterViewportScrollLayer();
+  LayerImpl* scroll_layer = nullptr;
+
+  // Initialization: Add a nested scrolling layer, simulating a scrolling div.
+  {
+    std::unique_ptr<LayerImpl> scroll = LayerImpl::Create(layer_tree_impl, 11);
+    scroll->SetBounds(gfx::Size(400, 400));
+    scroll->SetScrollable(content_size);
+    scroll->SetElementId(LayerIdToElementIdForTesting(scroll->id()));
+    scroll->SetDrawsContent(true);
+
+    scroll_layer = scroll.get();
+
+    content_layer->test_properties()->AddChild(std::move(scroll));
+    layer_tree_impl->BuildPropertyTreesForTesting();
+  }
+
+  InputHandlerScrollResult scroll_result;
+  DrawFrame();
+
+  // Start a scroll gesture, ensure it's scrolling the subscroller.
+  {
+    host_impl_->ScrollBegin(BeginState(gfx::Point(0, 0)).get(),
+                            InputHandler::TOUCHSCREEN);
+    host_impl_->ScrollBy(
+        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(100.f, 100.f)).get());
+
+    EXPECT_VECTOR_EQ(gfx::Vector2dF(100.f, 100.f),
+                     scroll_layer->CurrentScrollOffset());
+    EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, 0.f),
+                     outer_scroll_layer->CurrentScrollOffset());
+  }
+
+  // Continue the scroll. Ensure that scrolling beyond the child's extent
+  // doesn't consume the delta but it isn't counted as overscroll.
+  {
+    InputHandlerScrollResult result = host_impl_->ScrollBy(
+        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(120.f, 140.f)).get());
+
+    EXPECT_VECTOR_EQ(gfx::Vector2dF(200.f, 200.f),
+                     scroll_layer->CurrentScrollOffset());
+    EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, 0.f),
+                     outer_scroll_layer->CurrentScrollOffset());
+    EXPECT_FALSE(result.did_overscroll_root);
+  }
+
+  // Continue the scroll. Ensure that scrolling beyond the child's extent
+  // doesn't consume the delta but it isn't counted as overscroll.
+  {
+    InputHandlerScrollResult result = host_impl_->ScrollBy(
+        UpdateState(gfx::Point(0, 0), gfx::Vector2dF(20.f, 40.f)).get());
+
+    EXPECT_VECTOR_EQ(gfx::Vector2dF(200.f, 200.f),
+                     scroll_layer->CurrentScrollOffset());
+    EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, 0.f),
+                     outer_scroll_layer->CurrentScrollOffset());
+    EXPECT_FALSE(result.did_overscroll_root);
+  }
+
+  host_impl_->ScrollEnd(EndState().get());
+}
+
 TEST_F(LayerTreeHostImplTest, OverscrollOnMainThread) {
   InputHandlerScrollResult scroll_result;
   LayerTreeSettings settings = DefaultSettings();
diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc
index 498757ea..7aab1e5f 100644
--- a/cc/trees/layer_tree_host_unittest_context.cc
+++ b/cc/trees/layer_tree_host_unittest_context.cc
@@ -1345,8 +1345,9 @@
   UIResourceId test_id1_;
 };
 
-// http://crbug.com/803532 : Flaky on Win 7 (dbg).
-#if defined(NDEBUG) || !defined(OS_WIN)
+// http://crbug.com/803532 : Flaky on Win 7 (dbg) and linux tsan
+#if (defined(NDEBUG) || !defined(OS_WIN)) && \
+    (!defined(THREAD_SANITIZER) || !defined(OS_LINUX))
 SINGLE_THREAD_TEST_F(UIResourceLostBeforeCommit);
 #endif
 MULTI_THREAD_TEST_F(UIResourceLostBeforeCommit);
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
index 436b769..7dc59fd 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -829,7 +829,7 @@
 <translation id="8636825310635137004">للحصول على علامات التبويب من أجهزتك الأخرى، شغِّل المزامنة.</translation>
 <translation id="8641930654639604085">محاولة حظر مواقع الويب التي تتضمن محتوى للبالغين</translation>
 <translation id="8662811608048051533">يخرجك من معظم مواقع الويب.</translation>
-<translation id="8664979001105139458">اسم الملف موجود من قبل</translation>
+<translation id="8664979001105139458">اسم الملف موجود</translation>
 <translation id="8676374126336081632">محو الإرسال</translation>
 <translation id="8687353297350450808">{N_BARS,plural, =1{مستوى قوة الإشارة: شريط واحد (#)}zero{مستوى قوة الإشارة: # شريط}two{مستوى قوة الإشارة: شريطان (#)}few{مستوى قوة الإشارة: # أشرطة}many{مستوى قوة الإشارة: # شريطًا}other{مستوى قوة الإشارة: # شريط}}</translation>
 <translation id="869891660844655955">تاريخ انتهاء الصلاحية</translation>
@@ -858,7 +858,7 @@
 <translation id="8942627711005830162">فتح في نافذة أخرى</translation>
 <translation id="8951232171465285730">‏لقد وفر Chrome لك <ph name="MEGABYTES" /> ميغابايت</translation>
 <translation id="8959122750345127698">التنقل غير قابل للوصول: <ph name="URL" /></translation>
-<translation id="8972098258593396643">هل تريد التنزيل في المجلد التلقائي؟</translation>
+<translation id="8972098258593396643">هل تريد التنزيل إلى المجلد التلقائي؟</translation>
 <translation id="8979405271719829084">يمكنك تنزيل مقاطع فيديو لمشاهدتها لاحقًا</translation>
 <translation id="8981454092730389528">‏عناصر التحكم في النشاط على Google</translation>
 <translation id="8986494364107987395">‏إرسال إحصائيات الاستخدام وتقارير الأعطال إلى Google تلقائيًا</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
index c29a8ea..3aa1a88 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -183,6 +183,7 @@
 <translation id="2650751991977523696">Stáhnout soubor znovu?</translation>
 <translation id="2653659639078652383">Odeslat</translation>
 <translation id="2677748264148917807">Odejít</translation>
+<translation id="2693813674743028984">Skrýt úložiště</translation>
 <translation id="2704606927547763573">Zkopírováno</translation>
 <translation id="2707726405694321444">Obnovit stránku</translation>
 <translation id="2709516037105925701">Automatické vyplňování</translation>
@@ -208,6 +209,7 @@
 <translation id="2956410042958133412">Tento účet spravují uživatelé <ph name="PARENT_NAME_1" /> a <ph name="PARENT_NAME_2" />.</translation>
 <translation id="2960796085439532066">Copyright <ph name="YEAR" /> Google Inc. Všechna práva vyhrazena.</translation>
 <translation id="2962095958535813455">Přepnuto na anonymní karty</translation>
+<translation id="2965945119655563012">Zobrazit úložiště</translation>
 <translation id="2968755619301702150">Prohlížeč certifikátů</translation>
 <translation id="2979025552038692506">Vybraná anonymní karta</translation>
 <translation id="2989523299700148168">Nedávno navštívené</translation>
@@ -335,6 +337,7 @@
 <translation id="4170011742729630528">Služba není k dispozici, zkuste to později.</translation>
 <translation id="4181841719683918333">Jazyky</translation>
 <translation id="4195643157523330669">Otevřít na nové kartě</translation>
+<translation id="4198423547019359126">Nejsou k dispozici žádná umístění stažených souborů</translation>
 <translation id="4226663524361240545">Oznámení mohou aktivovat vibraci</translation>
 <translation id="4242533952199664413">Otevřít Nastavení</translation>
 <translation id="424864128008805179">Odhlásit se z Chromu?</translation>
@@ -700,6 +703,7 @@
 <translation id="7455923816558154057">Zobrazíte klepnutím</translation>
 <translation id="7473891865547856676">Ne, děkuji</translation>
 <translation id="7475192538862203634">Pokud se vám tato stránka zobrazuje často, vyzkoušejte tyto <ph name="BEGIN_LINK" />návrhy<ph name="END_LINK" />.</translation>
+<translation id="7475688122056506577">SD karta nebyla nalezena. Některé vaše soubory mohou chybět.</translation>
 <translation id="748127970106343339">Potvrdit vymazání identifikačních údajů zařízení</translation>
 <translation id="7481312909269577407">Vpřed</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (aktualizováno <ph name="TIME_SINCE_UPDATE" />)</translation>
@@ -763,6 +767,7 @@
 <translation id="8026334261755873520">Vymazat údaje o prohlížení</translation>
 <translation id="8035133914807600019">Nová složka…</translation>
 <translation id="8037750541064988519">Zbývá: <ph name="DAYS" /> d</translation>
+<translation id="804335162455518893">SD karta nenalezena</translation>
 <translation id="805047784848435650">Na základě vaší historie prohlížení</translation>
 <translation id="8051695050440594747">K dispozici: <ph name="MEGABYTES" /> MB</translation>
 <translation id="8058746566562539958">Otevřít na nové kartě v Chromu</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
index cc53e87..7d65da7 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -183,6 +183,7 @@
 <translation id="2650751991977523696">Επανάληψη λήψης αρχείου;</translation>
 <translation id="2653659639078652383">Υποβολή</translation>
 <translation id="2677748264148917807">Αποχώρηση</translation>
+<translation id="2693813674743028984">Απόκρυψη αποθηκευτικού χώρου</translation>
 <translation id="2704606927547763573">Αντιγράφ.</translation>
 <translation id="2707726405694321444">Ανανέωση σελίδας</translation>
 <translation id="2709516037105925701">Αυτόματη συμπλήρωση</translation>
@@ -208,6 +209,7 @@
 <translation id="2956410042958133412">Αυτός ο λογαριασμός τελεί υπό τη διαχείριση των γονέων <ph name="PARENT_NAME_1" /> και <ph name="PARENT_NAME_2" />.</translation>
 <translation id="2960796085439532066">Πνευματικά δικαιώματα <ph name="YEAR" /> Google Inc. Με επιφύλαξη παντός δικαιώματος.</translation>
 <translation id="2962095958535813455">Έγινε εναλλαγή σε καρτέλες ανώνυμης περιήγησης</translation>
+<translation id="2965945119655563012">Εμφάνιση αποθηκευτικού χώρου</translation>
 <translation id="2968755619301702150">Πρόγρ. προβολής πιστοποιητικού</translation>
 <translation id="2979025552038692506">Επιλεγμένη καρτέλα ανώνυμης περιήγησης</translation>
 <translation id="2989523299700148168">Πραγματοποιήθηκε επίσκεψη πρόσφατα</translation>
@@ -335,6 +337,7 @@
 <translation id="4170011742729630528">Η υπηρεσία δεν είναι διαθέσιμη. Δοκιμάστε ξανά αργότερα.</translation>
 <translation id="4181841719683918333">Γλώσσες</translation>
 <translation id="4195643157523330669">Άνοιγμα σε νέα καρτέλα</translation>
+<translation id="4198423547019359126">Δεν υπάρχουν διαθέσιμες τοποθεσίες λήψης</translation>
 <translation id="4226663524361240545">Κατά τη λήψη ειδοποιήσεων ενδέχεται να δονείται η συσκευή</translation>
 <translation id="4242533952199664413">Ανοίξτε τις ρυθμίσεις</translation>
 <translation id="424864128008805179">Αποσύνδεση από το Chrome;</translation>
@@ -700,6 +703,7 @@
 <translation id="7455923816558154057">Πατήστε για προβολή</translation>
 <translation id="7473891865547856676">Όχι, ευχαριστώ</translation>
 <translation id="7475192538862203634">Εάν αυτό το μήνυμα εμφανίζεται συχνά, δοκιμάστε αυτές τις <ph name="BEGIN_LINK" />προτάσεις<ph name="END_LINK" />.</translation>
+<translation id="7475688122056506577">Η κάρτα SD δεν βρέθηκε. Μπορεί να λείπουν μερικά από τα αρχεία σας.</translation>
 <translation id="748127970106343339">Επιβεβαίωση διαγραφής διαπιστευτηρίων συσκευής</translation>
 <translation id="7481312909269577407">Προώθηση</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (Ενημέρωση στις <ph name="TIME_SINCE_UPDATE" />)</translation>
@@ -763,6 +767,7 @@
 <translation id="8026334261755873520">Διαγραφή δεδομένων περιήγησης</translation>
 <translation id="8035133914807600019">Νέος φάκελος…</translation>
 <translation id="8037750541064988519">Απομένουν <ph name="DAYS" /> ημέρες</translation>
+<translation id="804335162455518893">Δεν βρέθηκε κάρτα SD</translation>
 <translation id="805047784848435650">Βάσει του ιστορικού περιήγησής σας</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB διαθέσιμα</translation>
 <translation id="8058746566562539958">Άνοιγμα σε νέα καρτέλα Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
index 48d083f2..0836f7c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -183,6 +183,7 @@
 <translation id="2650751991977523696">¿Quieres descargar el archivo de nuevo?</translation>
 <translation id="2653659639078652383">Enviar</translation>
 <translation id="2677748264148917807">Salir</translation>
+<translation id="2693813674743028984">Ocultar almacenamiento</translation>
 <translation id="2704606927547763573">Copiado</translation>
 <translation id="2707726405694321444">Actualizar página</translation>
 <translation id="2709516037105925701">Autocompletar</translation>
@@ -208,6 +209,7 @@
 <translation id="2956410042958133412">Esta cuenta está administrada por <ph name="PARENT_NAME_1" /> y <ph name="PARENT_NAME_2" />.</translation>
 <translation id="2960796085439532066">Copyright <ph name="YEAR" /> Google Inc. Todos los derechos reservados.</translation>
 <translation id="2962095958535813455">Se ha cambiado a las pestañas de incógnito</translation>
+<translation id="2965945119655563012">Mostrar almacenamiento</translation>
 <translation id="2968755619301702150">Visor de certificados</translation>
 <translation id="2979025552038692506">Pestaña de incógnito seleccionada</translation>
 <translation id="2989523299700148168">Visitados recientemente</translation>
@@ -335,6 +337,7 @@
 <translation id="4170011742729630528">El servicio no está disponible. Vuelve a intentarlo más tarde.</translation>
 <translation id="4181841719683918333">Idiomas</translation>
 <translation id="4195643157523330669">Abrir en una pestaña nueva</translation>
+<translation id="4198423547019359126">No hay ubicaciones de descarga disponibles</translation>
 <translation id="4226663524361240545">Es posible que las notificaciones hagan que el dispositivo vibre</translation>
 <translation id="4242533952199664413">Abrir Configuración</translation>
 <translation id="424864128008805179">¿Cerrar sesión en Chrome?</translation>
@@ -700,6 +703,7 @@
 <translation id="7455923816558154057">Toca para ver</translation>
 <translation id="7473891865547856676">No, gracias</translation>
 <translation id="7475192538862203634">Si este mensaje aparece con frecuencia, prueba estas <ph name="BEGIN_LINK" />sugerencias<ph name="END_LINK" />.</translation>
+<translation id="7475688122056506577">No se ha encontrado la tarjeta SD. Es posible que falten algunos de tus archivos.</translation>
 <translation id="748127970106343339">Confirmar eliminación de credencial de dispositivo</translation>
 <translation id="7481312909269577407">Adelante</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (actualizada el <ph name="TIME_SINCE_UPDATE" />)</translation>
@@ -763,6 +767,7 @@
 <translation id="8026334261755873520">Borrar datos de navegación</translation>
 <translation id="8035133914807600019">Nueva carpeta…</translation>
 <translation id="8037750541064988519">Quedan <ph name="DAYS" /> días</translation>
+<translation id="804335162455518893">No se ha encontrado la tarjeta SD</translation>
 <translation id="805047784848435650">Según tu historial de navegación</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB disponible(s)</translation>
 <translation id="8058746566562539958">Abrir en una pestaña nueva</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
index 1c09568a..e0b6c9f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -183,6 +183,7 @@
 <translation id="2650751991977523696">Želite li ponovo preuzeti datoteku?</translation>
 <translation id="2653659639078652383">Pošalji</translation>
 <translation id="2677748264148917807">Napusti</translation>
+<translation id="2693813674743028984">Sakrij pohranu</translation>
 <translation id="2704606927547763573">Kopirano</translation>
 <translation id="2707726405694321444">Osvježavanje stranice</translation>
 <translation id="2709516037105925701">Automatsko popunjavanje</translation>
@@ -208,6 +209,7 @@
 <translation id="2956410042958133412">Računom upravljaju <ph name="PARENT_NAME_1" /> i <ph name="PARENT_NAME_2" />.</translation>
 <translation id="2960796085439532066">Autorska prava <ph name="YEAR" />. Google Inc. Sva prava pridržana.</translation>
 <translation id="2962095958535813455">Prešli ste na anonimne kartice</translation>
+<translation id="2965945119655563012">Prikaži pohranu</translation>
 <translation id="2968755619301702150">Preglednik certifikata</translation>
 <translation id="2979025552038692506">Odabrana anonimna kartica</translation>
 <translation id="2989523299700148168">Nedavno posjećeno</translation>
@@ -335,6 +337,7 @@
 <translation id="4170011742729630528">Usluga nije dostupna, pokušajte ponovo kasnije.</translation>
 <translation id="4181841719683918333">Jezici</translation>
 <translation id="4195643157523330669">Otvori u novoj kartici</translation>
+<translation id="4198423547019359126">Lokacije preuzimanja nisu dostupne</translation>
 <translation id="4226663524361240545">Obavijesti mogu uključiti vibriranje uređaja</translation>
 <translation id="4242533952199664413">Otvori postavke</translation>
 <translation id="424864128008805179">Želite li se odjaviti s Chromea?</translation>
@@ -700,6 +703,7 @@
 <translation id="7455923816558154057">Dodirnite za prikaz</translation>
 <translation id="7473891865547856676">Ne, hvala</translation>
 <translation id="7475192538862203634">Ako se to često prikazuje, pokušajte s ovim <ph name="BEGIN_LINK" />prijedlozima<ph name="END_LINK" />.</translation>
+<translation id="7475688122056506577">SD kartica nije pronađena. Neke od vaših datoteka možda nedostaju.</translation>
 <translation id="748127970106343339">Potvrđivanje brisanja vjerodajnice uređaja</translation>
 <translation id="7481312909269577407">Naprijed</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (ažurirano <ph name="TIME_SINCE_UPDATE" />)</translation>
@@ -763,6 +767,7 @@
 <translation id="8026334261755873520">Brisanje podataka o pregledavanju</translation>
 <translation id="8035133914807600019">Nova mapa…</translation>
 <translation id="8037750541064988519">Preostalo dana: <ph name="DAYS" /></translation>
+<translation id="804335162455518893">SD kartica nije pronađena</translation>
 <translation id="805047784848435650">Na temelju vaše povijesti pregledavanja</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB dostupno</translation>
 <translation id="8058746566562539958">Otvori u novoj Chrome kartici</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
index 27abda6..b56e8f0e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -183,6 +183,7 @@
 <translation id="2650751991977523696">Download file lagi?</translation>
 <translation id="2653659639078652383">Kirim</translation>
 <translation id="2677748264148917807">Keluar</translation>
+<translation id="2693813674743028984">Sembunyikan penyimpanan</translation>
 <translation id="2704606927547763573">Disalin</translation>
 <translation id="2707726405694321444">Segarkan halaman</translation>
 <translation id="2709516037105925701">Isi-Otomatis</translation>
@@ -208,6 +209,7 @@
 <translation id="2956410042958133412">Akun ini dikelola oleh <ph name="PARENT_NAME_1" /> dan <ph name="PARENT_NAME_2" />.</translation>
 <translation id="2960796085439532066">Hak cipta <ph name="YEAR" /> Google Inc. Semua hak dilindungi undang-undang.</translation>
 <translation id="2962095958535813455">Beralih ke tab penyamaran</translation>
+<translation id="2965945119655563012">Tampilkan penyimpanan</translation>
 <translation id="2968755619301702150">Penampil sertifikat</translation>
 <translation id="2979025552038692506">Tab Penyamaran yang Dipilih</translation>
 <translation id="2989523299700148168">Baru saja dikunjungi</translation>
@@ -335,6 +337,7 @@
 <translation id="4170011742729630528">Layanan tidak tersedia; coba lagi nanti.</translation>
 <translation id="4181841719683918333">Bahasa</translation>
 <translation id="4195643157523330669">Buka di tab baru</translation>
+<translation id="4198423547019359126">Tidak tersedia lokasi download</translation>
 <translation id="4226663524361240545">Notifikasi dapat membuat perangkat bergetar</translation>
 <translation id="4242533952199664413">Buka setelan</translation>
 <translation id="424864128008805179">Keluar dari Chrome?</translation>
@@ -700,6 +703,7 @@
 <translation id="7455923816558154057">Tap untuk melihat</translation>
 <translation id="7473891865547856676">Lain Kali</translation>
 <translation id="7475192538862203634">Jika masalah ini sering terjadi, coba <ph name="BEGIN_LINK" />saran<ph name="END_LINK" /> berikut.</translation>
+<translation id="7475688122056506577">Kartu SD tidak ditemukan. Beberapa file Anda mungkin tidak tersimpan.</translation>
 <translation id="748127970106343339">Mengonfirmasi penghapusan kredensial perangkat</translation>
 <translation id="7481312909269577407">Maju</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (Diperbarui <ph name="TIME_SINCE_UPDATE" />)</translation>
@@ -763,6 +767,7 @@
 <translation id="8026334261755873520">Hapus data browsing</translation>
 <translation id="8035133914807600019">Folder baru…</translation>
 <translation id="8037750541064988519"><ph name="DAYS" /> hari lagi</translation>
+<translation id="804335162455518893">Kartu SD tidak ditemukan</translation>
 <translation id="805047784848435650">Berdasarkan histori browsing Anda</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB tersedia</translation>
 <translation id="8058746566562539958">Buka di tab Chrome baru</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
index 7c750c7..f43f4d5 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -183,6 +183,7 @@
 <translation id="2650751991977523696">파일을 다시 다운로드하시겠습니까?</translation>
 <translation id="2653659639078652383">제출</translation>
 <translation id="2677748264148917807">나가기</translation>
+<translation id="2693813674743028984">저장용량 숨기기</translation>
 <translation id="2704606927547763573">복사됨</translation>
 <translation id="2707726405694321444">페이지 새로고침</translation>
 <translation id="2709516037105925701">자동 완성</translation>
@@ -208,6 +209,7 @@
 <translation id="2956410042958133412"><ph name="PARENT_NAME_1" />님과 <ph name="PARENT_NAME_2" />님이 관리하는 계정입니다.</translation>
 <translation id="2960796085439532066">Copyright <ph name="YEAR" /> Google Inc. All rights reserved.</translation>
 <translation id="2962095958535813455">시크릿 탭으로 전환됨</translation>
+<translation id="2965945119655563012">저장용량 표시</translation>
 <translation id="2968755619301702150">인증서 뷰어</translation>
 <translation id="2979025552038692506">선택된 시크릿 탭</translation>
 <translation id="2989523299700148168">최근 방문</translation>
@@ -335,6 +337,7 @@
 <translation id="4170011742729630528">서비스를 사용할 수 없습니다. 나중에 다시 시도해 주세요.</translation>
 <translation id="4181841719683918333">언어</translation>
 <translation id="4195643157523330669">새 탭에서 열기</translation>
+<translation id="4198423547019359126">사용할 수 있는 다운로드 위치가 없음</translation>
 <translation id="4226663524361240545">알림이 있으면 진동이 울릴 수도 있습니다.</translation>
 <translation id="4242533952199664413">설정 열기</translation>
 <translation id="424864128008805179">Chrome에서 로그아웃하시겠습니까?</translation>
@@ -700,6 +703,7 @@
 <translation id="7455923816558154057">탭하여 보기</translation>
 <translation id="7473891865547856676">건너뛰기</translation>
 <translation id="7475192538862203634">이 메시지가 자주 표시된다면 다음 <ph name="BEGIN_LINK" />권장사항<ph name="END_LINK" />을 시도해 보세요.</translation>
+<translation id="7475688122056506577">SD 카드가 없습니다. 일부 파일이 누락되었을 수 있습니다.</translation>
 <translation id="748127970106343339">기기 사용자 인증 정보 삭제 확인</translation>
 <translation id="7481312909269577407">앞으로</translation>
 <translation id="7493994139787901920"><ph name="VERSION" />(<ph name="TIME_SINCE_UPDATE" />에 업데이트됨)</translation>
@@ -763,6 +767,7 @@
 <translation id="8026334261755873520">인터넷 사용 기록 삭제</translation>
 <translation id="8035133914807600019">새 폴더…</translation>
 <translation id="8037750541064988519"><ph name="DAYS" />일 남음</translation>
+<translation id="804335162455518893">SD 카드가 없음</translation>
 <translation id="805047784848435650">인터넷 사용 기록에 기반해 추천됨</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" />MB 사용 가능</translation>
 <translation id="8058746566562539958">새 Chrome 탭에서 열기</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
index 4d15bf7..6fddf08 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -183,6 +183,7 @@
 <translation id="2650751991977523696">Czy pobrać plik ponownie?</translation>
 <translation id="2653659639078652383">Prześlij</translation>
 <translation id="2677748264148917807">Wyjdź</translation>
+<translation id="2693813674743028984">Ukryj miejsce na pliki</translation>
 <translation id="2704606927547763573">Skopiowane</translation>
 <translation id="2707726405694321444">Odśwież stronę</translation>
 <translation id="2709516037105925701">Autouzupełnianie</translation>
@@ -208,6 +209,7 @@
 <translation id="2956410042958133412">Tym kontem zarządzają <ph name="PARENT_NAME_1" /> i <ph name="PARENT_NAME_2" />.</translation>
 <translation id="2960796085439532066">Copyright <ph name="YEAR" /> Google Inc. Wszelkie prawa zastrzeżone.</translation>
 <translation id="2962095958535813455">Przełączono na karty incognito</translation>
+<translation id="2965945119655563012">Pokaż miejsce na pliki</translation>
 <translation id="2968755619301702150">Przeglądarka certyfikatów</translation>
 <translation id="2979025552038692506">Wybrana karta incognito</translation>
 <translation id="2989523299700148168">Ostatnio odwiedzone</translation>
@@ -335,6 +337,7 @@
 <translation id="4170011742729630528">Usługa jest niedostępna. Spróbuj ponownie później.</translation>
 <translation id="4181841719683918333">Języki</translation>
 <translation id="4195643157523330669">Otwórz w nowej karcie</translation>
+<translation id="4198423547019359126">Brak dostępnych miejsc zapisu pobieranych plików</translation>
 <translation id="4226663524361240545">Powiadomienia będą sygnalizowane wibracjami</translation>
 <translation id="4242533952199664413">Otwórz ustawienia</translation>
 <translation id="424864128008805179">Wylogować z Chrome?</translation>
@@ -700,6 +703,7 @@
 <translation id="7455923816558154057">Kliknij, by wyświetlić</translation>
 <translation id="7473891865547856676">Nie, dziękuję</translation>
 <translation id="7475192538862203634">Jeśli często widzisz ten komunikat, przeczytaj te <ph name="BEGIN_LINK" />wskazówki<ph name="END_LINK" />.</translation>
+<translation id="7475688122056506577">Nie znaleziono karty SD. Może brakować niektórych Twoich plików.</translation>
 <translation id="748127970106343339">Potwierdź usunięcie z urządzenia danych logowania</translation>
 <translation id="7481312909269577407">Dalej</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (zaktualizowana <ph name="TIME_SINCE_UPDATE" />)</translation>
@@ -763,6 +767,7 @@
 <translation id="8026334261755873520">Wyczyść dane przeglądania</translation>
 <translation id="8035133914807600019">Nowy folder…</translation>
 <translation id="8037750541064988519">Pozostało: <ph name="DAYS" /> dni</translation>
+<translation id="804335162455518893">Nie znaleziono karty SD</translation>
 <translation id="805047784848435650">Na podstawie Twojej historii przeglądania</translation>
 <translation id="8051695050440594747">Dostępne: <ph name="MEGABYTES" /> MB</translation>
 <translation id="8058746566562539958">Otwórz w nowej karcie Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
index c5e66a1..9fe4429 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -183,6 +183,7 @@
 <translation id="2650751991977523696">Fazer o download do arquivo novamente?</translation>
 <translation id="2653659639078652383">Enviar</translation>
 <translation id="2677748264148917807">Sair</translation>
+<translation id="2693813674743028984">Ocultar armazenamento</translation>
 <translation id="2704606927547763573">Copiado</translation>
 <translation id="2707726405694321444">Atualizar página</translation>
 <translation id="2709516037105925701">Preenchimento automático</translation>
@@ -208,6 +209,7 @@
 <translation id="2956410042958133412">Esta conta é gerenciada por <ph name="PARENT_NAME_1" /> e <ph name="PARENT_NAME_2" />.</translation>
 <translation id="2960796085439532066">Copyright <ph name="YEAR" /> Google Inc. Todos os direitos reservados.</translation>
 <translation id="2962095958535813455">Alternada para guias anônimas</translation>
+<translation id="2965945119655563012">Mostrar armazenamento</translation>
 <translation id="2968755619301702150">Leitor de certificados</translation>
 <translation id="2979025552038692506">Guia anônima selecionada</translation>
 <translation id="2989523299700148168">Visitados recentemente</translation>
@@ -334,6 +336,7 @@
 <translation id="4170011742729630528">O serviço não está disponível. Tente novamente mais tarde.</translation>
 <translation id="4181841719683918333">Idiomas</translation>
 <translation id="4195643157523330669">Abrir em uma nova guia</translation>
+<translation id="4198423547019359126">Não há locais de download disponíveis</translation>
 <translation id="4226663524361240545">É possível que as notificações façam o dispositivo vibrar</translation>
 <translation id="4242533952199664413">Abrir configurações.</translation>
 <translation id="424864128008805179">Sair do Google Chrome?</translation>
@@ -699,6 +702,7 @@
 <translation id="7455923816558154057">Toque para ver</translation>
 <translation id="7473891865547856676">Não, obrigado</translation>
 <translation id="7475192538862203634">Se estiver vendo isso com frequência, tente estas <ph name="BEGIN_LINK" />sugestões<ph name="END_LINK" />.</translation>
+<translation id="7475688122056506577">Cartão SD não encontrado. Alguns arquivos podem estar faltando.</translation>
 <translation id="748127970106343339">Confirmar exclusão da credencial do dispositivo</translation>
 <translation id="7481312909269577407">Avançar</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (atualizada <ph name="TIME_SINCE_UPDATE" />)</translation>
@@ -762,6 +766,7 @@
 <translation id="8026334261755873520">Limpar dados de navegação</translation>
 <translation id="8035133914807600019">Nova pasta...</translation>
 <translation id="8037750541064988519"><ph name="DAYS" /> dias restantes</translation>
+<translation id="804335162455518893">Cartão SD não encontrado</translation>
 <translation id="805047784848435650">Com base no seu histórico de navegação</translation>
 <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB disponíveis</translation>
 <translation id="8058746566562539958">Abrir em nova guia do Chrome</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 06e7295c..fc218a0 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">የዕልባቶች ተጠቃሚ በይነገጽ ይቀይራል</translation>
 <translation id="2422426094670600218">‹ያልተሰየመ›</translation>
 <translation id="2423578206845792524">ምስል አስ&amp;ቀምጥ እንደ…</translation>
-<translation id="2424091190911472304">ሁልጊዜ በ<ph name="ORIGIN" /> ላይ አሂድ</translation>
 <translation id="2425665904502185219">ጠቅላላ የፋይል መጠን</translation>
 <translation id="2428510569851653187">ትሩ ሲሰናከል ምን እየሰሩ እንደነበር ያብራሩ</translation>
 <translation id="2431027948063157455">Google ረዳት የአውታረ መረብ ግንኙነትዎን መፈተሽ እና ዳግም መሞከር አልቻለም።</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">በመጫን ላይ</translation>
 <translation id="2841837950101800123">አቅራቢ</translation>
 <translation id="2843806747483486897">ነባሪ ቀይር...</translation>
-<translation id="2844111009524261443">አሂድ ላይ ጠቅ አድርግ</translation>
 <translation id="2845382757467349449">ሁልጊዜ የዕልባቶች አሞሌን አሳይ</translation>
 <translation id="2847759467426165163">ይውሰዱ ወደ</translation>
 <translation id="284805635805850872">ጎጂ ሶፍትዌር ይወገድ?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">ይህ ገጽ ኩኪዎችን ከማቀናጀት ተከልክሏል።</translation>
 <translation id="3308134619352333507">አዘራር ደብቅ</translation>
 <translation id="3308852433423051161">የGoogle ረዳትን በመጫን ላይ...</translation>
-<translation id="3309747692199697901">ሁልጊዜ በሁሉም ጣቢያዎች ላይ አሂድ</translation>
 <translation id="3312424061798279731">የነቁ ቋንቋዎች</translation>
 <translation id="3313590242757056087">ክትትል የሚደረግበት ተጠቃሚ የትኛዎቹን ድር ጣቢያዎች መመልከት እንደሚችል ለማዋቀር <ph name="MANAGEMENT_URL" />ን
     በመጎብኘት ገደቦችን እና ቅንብሮችን ማዋቀር ይችላሉ።
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">የድረ-ገጾች ክፍሎችን ያግዳል</translation>
 <translation id="3760460896538743390">&amp;የጀርባ ገጽ ይመርምሩ</translation>
 <translation id="37613671848467444">&amp;ማንነትን በማያሳውቅ መስኮት ውስጥ ክፈት</translation>
-<translation id="3763401818161139108">ሁልጊዜ በ <ph name="ORIGIN" /> ላይ አሂድ</translation>
 <translation id="3764314093345384080">ዝርዝር የግንብ መረጃ</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{በዩኤስቢ መሣሪያ መልዕክት ይለዋወጡ}one{በ# ዩኤስቢ መሣሪያዎች መልዕክት ይለዋወጡ}other{በ# ዩኤስቢ መሣሪያዎች መልዕክት ይለዋወጡ}}</translation>
 <translation id="3764986667044728669">መመዝገብ አልተቻለም</translation>
@@ -2269,7 +2265,6 @@
 <translation id="4547992677060857254">የመረጡት አቃፊ ሊጎዱ የሚችሉ ፋይሎች አሉት። እርግጠኛ ነዎት ዘላቂ የዚህ አቃፊ የመጻፍ መዳረሻ ለ«$1» መስጠት ይፈልጋሉ?</translation>
 <translation id="4552031286893852992">ይህ ጣቢያ ጣልቃ ገቢ ማስታወቂያዎችን የማሳየት አዝማሚያ ስላለው Chrome በዚህ ጣቢያ ላይ ማስታወቂያዎችን አግዷል።</translation>
 <translation id="4552089082226364758">ብልጭታ</translation>
-<translation id="4552495056028768700">የገፅ መዳረሻ</translation>
 <translation id="4552678318981539154">ተጨማሪ ማከማቻ ይግዙ</translation>
 <translation id="4554591392113183336">ውጫዊ ቅጥያው ከነባሩ ጋር ተመሳሳይ ወይም ያነሰ ስሪት ነው።</translation>
 <translation id="4555769855065597957">ጥላ</translation>
@@ -3264,7 +3259,6 @@
 <translation id="6080515710685820702">የተጋራ ኮምፒውተር ነው እየተጠቀሙ ያሉት? ማንነት የማያሳውቅ መስኮት ለመክፈት ይሞክሩ።</translation>
 <translation id="6080689532560039067">የስርዓት ጊዜዎን ይፈትሹ</translation>
 <translation id="6082651258230788217">በመሣሪያ አሞሌ ላይ አሳይ</translation>
-<translation id="6086814797483779854">አሂድ ላይ ጠቅ ያድርጉ</translation>
 <translation id="6086846494333236931">በእርስዎ አስተዳዳሪ የተጫነ</translation>
 <translation id="6087960857463881712">ግሩም ፊት</translation>
 <translation id="6089481419520884864">ገጹን አጣራ</translation>
@@ -4404,7 +4398,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - ተጣምሯል</translation>
 <translation id="7870730066603611552">ቅንብርን የሚከተሉትን የማስመር አማራጮች ይገምግሙ</translation>
 <translation id="7870790288828963061">ምንም አዲስ ስሪት ያላቸው የKiosk መተግበሪያዎች አልተገኙም። ምንም የሚዘምን ነገር የለም። እባክዎ የዩ.ኤስ.ቢ. ስቲኩን ያስወግዱ።</translation>
-<translation id="7874357055309047713">ሁልጊዜ በሁሉም ጣቢያዎች ላይ አሂድ</translation>
 <translation id="7877451762676714207">ያልታወቀ የአገልጋይ ስህተት። እባክዎ እንደገና ይሞክሩ ወይም የአገልጋይ አስተዳዳሪውን ያግኙ።</translation>
 <translation id="7877680364634660272">ጉብኝት</translation>
 <translation id="7878562273885520351">የእርስዎ ይለፍ ቃል ተሰርቆ ሊሆን ይችላል</translation>
@@ -4758,7 +4751,6 @@
 <translation id="8428634594422941299">ገባኝ</translation>
 <translation id="8431909052837336408">የሲም ፒን ይለውጡ</translation>
 <translation id="8434480141477525001">NaCl ስህተት ማረሚያ ወደብ</translation>
-<translation id="8437331208797669910">የገፅ መድረሻ</translation>
 <translation id="843760761634048214">ክሬዲት ካርድ አስቀምጥ</translation>
 <translation id="8438328416656800239">ወደ ዘመናዊ አሳሽ ቀይር</translation>
 <translation id="8439506636278576865">በዚህ ቋንቋ ውስጥ ያሉ ገጾችን ለመተርጎም ያቅርቡ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 46b2f1d..ed9c530 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -90,7 +90,7 @@
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">تعديل محرّك البحث</translation>
 <translation id="1134009406053225289">فتح في نافذة للتصفح المتخفي</translation>
-<translation id="1136155683023653803">تتم مزامنة كلمات المرور والإشارات المرجعية والسجل والمزيد من الخيارات مع حسابك</translation>
+<translation id="1136155683023653803">تتم مزامنة كلمات المرور والإشارات المرجعية والسجل والمزيد من الخيارات مع حسابك.</translation>
 <translation id="1137673463384776352">فتح الرابط في <ph name="APP" /></translation>
 <translation id="1140351953533677694">الوصول إلى بلوتوث والأجهزة التسلسلية</translation>
 <translation id="1140610710803014750">للحصول على الإشارات المرجعية على جميع أجهزتك، يُرجى تسجيل الدخول وتفعيل المزامنة.</translation>
@@ -913,7 +913,6 @@
 <translation id="2413749388954403953">تغيير واجهة المستخدم للإشارات المرجعية</translation>
 <translation id="2422426094670600218">&lt;unnamed&gt;</translation>
 <translation id="2423578206845792524">حف&amp;ظ الصورة باسم...</translation>
-<translation id="2424091190911472304">تشغيل على <ph name="ORIGIN" /> دائمًا</translation>
 <translation id="2425665904502185219">إجمالي حجم الملف</translation>
 <translation id="2428510569851653187">وصف ما كنت تفعله عندما تعطّلت علامة التبويب</translation>
 <translation id="2431027948063157455">‏تعذّر تحميل مساعد Google، يُرجى التحقُّق من اتصال الشبكة وإعادة المحاولة.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">يتم الآن التثبيت</translation>
 <translation id="2841837950101800123">المزود</translation>
 <translation id="2843806747483486897">تغيير الإجراء التلقائي...</translation>
-<translation id="2844111009524261443">تشغيل عند النقر</translation>
 <translation id="2845382757467349449">عرض شريط الإشارات المرجعية دائمًا</translation>
 <translation id="2847759467426165163">إرسال إلى</translation>
 <translation id="284805635805850872">هل تريد إزالة البرامج الضارة؟</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">تم منع هذه الصفحة من تخزين ملفات تعريف الارتباط.</translation>
 <translation id="3308134619352333507">الزر "إخفاء"</translation>
 <translation id="3308852433423051161">‏جارٍ تحميل مساعد Google...</translation>
-<translation id="3309747692199697901">تشغيل على جميع المواقع دائمًا</translation>
 <translation id="3312424061798279731">اللغات التي تم تمكينها</translation>
 <translation id="3313590242757056087">لتعيين مواقع الويب التي يُمكن للمستخدم الذي يخضع للإشراف عرضها، يُمكنك تهيئة القيود والإعدادات عن طريق الانتقال إلى<ph name="MANAGEMENT_URL" />.
     وفي حالة عدم تغيير الإعدادات التلقائية، <ph name="USER_DISPLAY_NAME" />
@@ -1809,7 +1806,6 @@
 <translation id="3759933321830434300">الأجزاء المقيدة من صفحات الويب</translation>
 <translation id="3760460896538743390">فحص &amp;صفحة الخلفية</translation>
 <translation id="37613671848467444">فتح في &amp;نافذة التصفح المتخفي</translation>
-<translation id="3763401818161139108">تشغيل على <ph name="ORIGIN" /> دائمًا</translation>
 <translation id="3764314093345384080">معلومات الإصدار التفصيلية</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{‏الاتصال بجهاز USB}zero{‏الاتصال بـ # من أجهزة USB}two{‏الاتصال بجهازي USB (#)}few{‏الاتصال بـ # أجهزة USB}many{‏ الاتصال بـ # جهاز USB}other{‏ الاتصال بـ # من أجهزة USB}}</translation>
 <translation id="3764986667044728669">تعذّر التسجيل</translation>
@@ -1891,7 +1887,7 @@
 <translation id="3867944738977021751">حقول الشهادة</translation>
 <translation id="3869917919960562512">فهرس خاطئ.</translation>
 <translation id="3871092408932389764">الأقل</translation>
-<translation id="3872220884670338524">المزيد من الإجراءات، وتم حفظ الحساب الذي يحمل اسم المستخدم <ph name="USERNAME" /> على النطاق <ph name="DOMAIN" /></translation>
+<translation id="3872220884670338524">المزيد من الإجراءات؛ تم حفظ الحساب الذي يحمل اسم المستخدم <ph name="USERNAME" /> على النطاق <ph name="DOMAIN" /></translation>
 <translation id="3872991219937722530">احرص على تفريغ مساحة على القرص أو سيصبح الجهاز غير مستجيب.</translation>
 <translation id="3878840326289104869">إنشاء مستخدم يخضع للإدارة</translation>
 <translation id="3879748587602334249">تطبيق إدارة التنزيل</translation>
@@ -2267,7 +2263,6 @@
 <translation id="4547992677060857254">يشتمل المجلد المحدد على ملفات حساسة. فهل تريد بالتأكيد منح "$1" حق الدخول الدائم للكتابة في هذا المجلد؟س</translation>
 <translation id="4552031286893852992">‏حظَر Chrome الإعلانات على هذا الموقع لأن هذا الموقع يميل إلى عرض إعلانات متداخلة.</translation>
 <translation id="4552089082226364758">الفلاش</translation>
-<translation id="4552495056028768700">الوصول إلى الصفحة</translation>
 <translation id="4552678318981539154">شراء المزيد من السعة التخزينية</translation>
 <translation id="4554591392113183336">الإضافة الخارجية في نفس الإصدار أو إصدار أقل مقارنة بالموجودة حاليًا.</translation>
 <translation id="4555769855065597957">ظل</translation>
@@ -2828,7 +2823,7 @@
 <translation id="5425042808445046667">متابعة التنزيل</translation>
 <translation id="5425722269016440406">‏يجب أن تكون متصلاً بالإنترنت لإيقاف تشغيل Smart Lock لأن هذا الإعداد متزامن مع هاتفك وأجهزة أخرى. يُرجى الاتصال بإحدى الشبكات أولاً.</translation>
 <translation id="5425863515030416387">تسجيل الدخول بسهولة على جميع الأجهزة</translation>
-<translation id="5426179911063097041">يريد <ph name="SITE" /> إرسال إشعارات إليك</translation>
+<translation id="5426179911063097041">يريد موقع <ph name="SITE" /> إرسال إشعارات إليك.</translation>
 <translation id="5427278936122846523">الترجمة دومًا</translation>
 <translation id="5427459444770871191">تدوير &amp;في اتجاه عقارب الساعة</translation>
 <translation id="542872847390508405">أنت تتصفح كضيف</translation>
@@ -2906,7 +2901,7 @@
 <translation id="5525677322972469346">إنشاء مستخدم جديد تحت الإشراف</translation>
 <translation id="5525695896049981561">نعم، أرى ذلك</translation>
 <translation id="5526701598901867718">الكل (غير آمن)</translation>
-<translation id="5526745900034778153">إعادة تسجيل الدخول لاستئناف المزامنة</translation>
+<translation id="5526745900034778153">تسجيل الدخول مرة أخرى لاستئناف المزامنة</translation>
 <translation id="5527463195266282916">محاولة تثبيت إضافة ذات إصدار سابق.</translation>
 <translation id="5527474464531963247">يمكنك أيضا تحديد شبكة أخرى.</translation>
 <translation id="5528368756083817449">مدير الإشارات</translation>
@@ -3262,7 +3257,6 @@
 <translation id="6080515710685820702">هل تستخدم جهاز كمبيوتر مشتركًا؟ جرِّب فتح نافذة للتصفُّح المتخفي.</translation>
 <translation id="6080689532560039067">تحقق من وقت النظام</translation>
 <translation id="6082651258230788217">العرض في شريط الأدوات</translation>
-<translation id="6086814797483779854">تشغيل عند النقر</translation>
 <translation id="6086846494333236931">تم التثبيت من قبل مشرفك</translation>
 <translation id="6087960857463881712">وجه رائع</translation>
 <translation id="6089481419520884864">صفحة التنقية</translation>
@@ -3362,7 +3356,7 @@
 <translation id="6238923052227198598">إبقاء آخر ملاحظة على شاشة التأمين</translation>
 <translation id="6239558157302047471">إعادة تحميل الإطار</translation>
 <translation id="6241530762627360640">الوصول إلى معلومات حول أجهزة البلوتوث المقترنة بنظامك واكتشاف أجهزة البلوتوث القريبة.</translation>
-<translation id="6243280677745499710">المعيَّنة حاليًا</translation>
+<translation id="6243280677745499710">المحدّدة حاليًا</translation>
 <translation id="6243774244933267674">الخادم غير متاح</translation>
 <translation id="6246413617632217567">تعذّر استيراد المستخدم تحت الإشراف. يُرجى التحقق من مساحة محرك الأقراص الثابتة والأذونات، وإعادة المحاولة.</translation>
 <translation id="6247708409970142803">%<ph name="PERCENTAGE" /></translation>
@@ -3400,7 +3394,7 @@
 <translation id="6286708577777130801">تفاصيل كلمة المرور المحفوظة</translation>
 <translation id="6287852322318138013">حدد تطبيقًا لفتح هذا الملف من خلاله</translation>
 <translation id="6290556621549272952">‏يمكنك استخدام هذه الميزة لعرض المحتوى من Chromium على التلفزيون أو غيره من الأجهزة.</translation>
-<translation id="6291949900244949761">‏طلب الإذن عند محاولة أحد المواقع الوصول إلى أجهزة USB (مُوصى به)</translation>
+<translation id="6291949900244949761">‏طلب الإذن في حال محاولة أحد المواقع الوصول إلى أجهزة USB (مُوصى به)</translation>
 <translation id="6291953229176937411">إ&amp;ظهار في الباحث</translation>
 <translation id="6295158916970320988">جميع المواقع</translation>
 <translation id="6295855836753816081">جارٍ الحفظ...</translation>
@@ -4404,7 +4398,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - تم الإقران</translation>
 <translation id="7870730066603611552">مراجعة خيارات المزامنة بعد الإعداد</translation>
 <translation id="7870790288828963061">‏لا توجد إصدارات أحدث لتطبيق Kiosk. لا يوجد شيء لتحديثه. يُرجى إزالة جهاز USB.</translation>
-<translation id="7874357055309047713">تشغيل على جميع المواقع دائمًا</translation>
 <translation id="7877451762676714207">خطأ غير معروف في الخادم. يُرجى إعادة المحاولة أو الاتصال بمشرف الخادم.</translation>
 <translation id="7877680364634660272">جولة</translation>
 <translation id="7878562273885520351">من المحتمل أنه تم اختراق كلمة مرورك</translation>
@@ -4447,7 +4440,7 @@
 <translation id="7928710562641958568">إخراج الجهاز</translation>
 <translation id="79312157130859720">يشارك <ph name="APP_NAME" /> الشاشة والصوت.</translation>
 <translation id="7931318309563332511">غير معروف</translation>
-<translation id="7934414805353235750">‏يريد <ph name="URL" /> تشغيل محتوى محمي. ستتحقَّق Google من هوية جهازك.</translation>
+<translation id="7934414805353235750">‏يريد عنوان <ph name="URL" /> تشغيل محتوى محمٍ، لذلك ستتحقَّق Google من هوية جهازك.</translation>
 <translation id="7938594894617528435">بلا إنترنت حاليًا</translation>
 <translation id="7939062555109487992">خيارات متقدمة</translation>
 <translation id="7939412583708276221">المتابعة على أيّ حال</translation>
@@ -4703,7 +4696,7 @@
 <translation id="8336153091935557858">الأمس <ph name="YESTERDAY_DAYTIME" /></translation>
 <translation id="8338952601723052325">موقع الويب لمطوّر البرامج</translation>
 <translation id="8339059274628563283">بيانات <ph name="SITE" /> المخزنة محليًا</translation>
-<translation id="833986336429795709">لفتح هذا الرابط، اختر أحد التطبيقات</translation>
+<translation id="833986336429795709">لفتح هذا الرابط، اختر أحد التطبيقات.</translation>
 <translation id="8342318071240498787">هناك ملف أو دليل موجود بهذا الاسم فعلاً.</translation>
 <translation id="8343956361364550006">استخدام معدل نقل بيانات عالٍ للحصول على أفضل فيديو أو صورة متحركة. قد لا يتمكن الأشخاص الذين لديهم اتصال بطيء من الاطّلاع على المحتوى.</translation>
 <translation id="8349826889576450703">launcher</translation>
@@ -4753,7 +4746,6 @@
 <translation id="8428634594422941299">حسنًا</translation>
 <translation id="8431909052837336408">‏تغيير رمز PIN لشريحة SIM</translation>
 <translation id="8434480141477525001">‏منفذ تصحيح أخطاء NaCl</translation>
-<translation id="8437331208797669910">الوصول إلى الصفحة</translation>
 <translation id="843760761634048214">حفظ بطاقة الائتمان</translation>
 <translation id="8438328416656800239">التبديل إلى متصفح ذكي</translation>
 <translation id="8439506636278576865">عرض ترجمة الصفحات المكتوبة بهذه اللغة</translation>
@@ -4900,7 +4892,7 @@
 <translation id="8663099077749055505">حظر التنزيلات المتعددة تلقائيًا بشكل دائم على <ph name="HOST" /></translation>
 <translation id="8664389313780386848">عرض م&amp;صدر الصفحة</translation>
 <translation id="866611985033792019">الوثوق بهذه الشهادة لتحديد هوية مستخدمي البريد الإلكتروني</translation>
-<translation id="8666584013686199826">‏طلب الإذن عند محاولة أحد المواقع الوصول إلى أجهزة USB (مُوصى به)</translation>
+<translation id="8666584013686199826">‏طلب الإذن في حال محاولة أحد المواقع الوصول إلى أجهزة USB (مُوصى به)</translation>
 <translation id="8667328578593601900"><ph name="FULLSCREEN_ORIGIN" /> في وضع ملء الشاشة الآن وتم إيقاف مؤشر الماوس.</translation>
 <translation id="8669284339312441707">أكثر دفئًا</translation>
 <translation id="8669949407341943408">جارٍ النقل...</translation>
@@ -5015,7 +5007,7 @@
 <translation id="882204272221080310">يمكنك تحديث البرامج الثابتة لمزيد من الأمان.</translation>
 <translation id="8823514049557262177">نسخ &amp;نص الرابط</translation>
 <translation id="8824701697284169214">إضافة &amp;صفحة...</translation>
-<translation id="8827752199525959199">المزيد من الإجراءات، وكلمة مرور اسم المستخدم <ph name="USERNAME" /> على النطاق <ph name="DOMAIN" /></translation>
+<translation id="8827752199525959199">المزيد من الإجراءات؛ تم حفظ كلمة مرور <ph name="USERNAME" /> على النطاق <ph name="DOMAIN" /></translation>
 <translation id="8828933418460119530">‏اسم نظام أسماء النطاقات (DNS)</translation>
 <translation id="8830796635868321089">تعذّر البحث عن التحديثات باستخدام إعدادات الخادم الوكيل الحالية. يُرجى ضبط <ph name="PROXY_SETTINGS_LINK_START" />إعدادات الخادم الوكيل<ph name="PROXY_SETTINGS_LINK_END" />.</translation>
 <translation id="8834039744648160717">يتم التحكم في تهيئة الشبكة بواسطة <ph name="USER_EMAIL" />.</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 974f1fc6..a6d9aea9c 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">Промяна на потребителския интерфейс за отметки</translation>
 <translation id="2422426094670600218">&lt;без име&gt;</translation>
 <translation id="2423578206845792524">&amp;Запазване на изображението като...</translation>
-<translation id="2424091190911472304">Стартиране винаги на <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Общ размер на файловете</translation>
 <translation id="2428510569851653187">Опишете какво правехте, когато разделът претърпя срив</translation>
 <translation id="2431027948063157455">Google Асистент не можа да се зареди. Моля, проверете връзката си с мрежата и опитайте отново.</translation>
@@ -1197,7 +1196,6 @@
 <translation id="2838379631617906747">Инсталира се</translation>
 <translation id="2841837950101800123">Доставчик</translation>
 <translation id="2843806747483486897">Промяна на действието по подразбиране...</translation>
-<translation id="2844111009524261443">Стартиране при кликване</translation>
 <translation id="2845382757467349449">Непрекъснато показване на лентата на отметките</translation>
 <translation id="2847759467426165163">Предаване към</translation>
 <translation id="284805635805850872">Да се премахне ли опасният софтуер?</translation>
@@ -1509,7 +1507,6 @@
 <translation id="3308116878371095290">Задаването на „бисквитки“ от тази страница е предотвратено.</translation>
 <translation id="3308134619352333507">Скриване на бутона</translation>
 <translation id="3308852433423051161">Google Асистент се зарежда...</translation>
-<translation id="3309747692199697901">Стартиране винаги на всички сайтове</translation>
 <translation id="3312424061798279731">Активирани езици</translation>
 <translation id="3313590242757056087">За да зададете уебсайтовете, които контролираният потребител може да преглежда, можете да конфигурирате ограничения
     и настройки на адрес <ph name="MANAGEMENT_URL" />.
@@ -1808,7 +1805,6 @@
 <translation id="3759933321830434300">Блокиране на части от уеб страници</translation>
 <translation id="3760460896538743390">Инспектиране на &amp;фоновата страница</translation>
 <translation id="37613671848467444">Отваряне на прозорец в режим „&amp;инкогнито“</translation>
-<translation id="3763401818161139108">Стартиране винаги на <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Подробна информация за компилацията</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Комуникация с USB устройство}other{Комуникация с # USB устройства}}</translation>
 <translation id="3764986667044728669">Записването не може да се извърши</translation>
@@ -2269,7 +2265,6 @@
 <translation id="4547992677060857254">Избраната от вас папка съдържа деликатни файлове. Наистина ли искате да предоставите на „$1“ постоянен достъп за запис в тази папка?</translation>
 <translation id="4552031286893852992">Chrome блокира показването на реклами на този сайт, тъй като те обикновено са натрапчиви.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Достъп до страницата</translation>
 <translation id="4552678318981539154">Купуване на още хранилище</translation>
 <translation id="4554591392113183336">Версията на външното разширение е същата или по-стара в сравнение със съществуващата.</translation>
 <translation id="4555769855065597957">Сянка</translation>
@@ -3266,7 +3261,6 @@
 <translation id="6080515710685820702">Използвате общ компютър? Отворете прозорец в режим „инкогнито“.</translation>
 <translation id="6080689532560039067">Проверете системния си час</translation>
 <translation id="6082651258230788217">Показване в лентата с инструменти</translation>
-<translation id="6086814797483779854">Стартиране при кликване</translation>
 <translation id="6086846494333236931">Инсталирано от администратора ви</translation>
 <translation id="6087960857463881712">Страхотно лице</translation>
 <translation id="6089481419520884864">Създаване на сбит вариант на страницата</translation>
@@ -4406,7 +4400,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – сдвоено</translation>
 <translation id="7870730066603611552">Преглед на опциите за синхронизиране след настройването</translation>
 <translation id="7870790288828963061">Няма намерени павилионни приложения с по-нова версия. Няма нищо за актуализиране. Моля, извадете USB паметта.</translation>
-<translation id="7874357055309047713">Стартиране винаги на всички сайтове</translation>
 <translation id="7877451762676714207">Неизвестна грешка в сървъра. Моля, опитайте отново или се свържете с администратора му.</translation>
 <translation id="7877680364634660272">Обиколка</translation>
 <translation id="7878562273885520351">Възможно е паролата ви да е компрометирана</translation>
@@ -4755,7 +4748,6 @@
 <translation id="8428634594422941299">Разбрах</translation>
 <translation id="8431909052837336408">Промяна на ПИН за SIM картата</translation>
 <translation id="8434480141477525001">Порт за отстраняване на грешки в клиента с директно изпълнение</translation>
-<translation id="8437331208797669910">Достъп до страницата</translation>
 <translation id="843760761634048214">Запазване на кредитната карта</translation>
 <translation id="8438328416656800239">Преминете към интелигентен браузър</translation>
 <translation id="8439506636278576865">Предлагане страниците на този език да се превеждат</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 3ce54199..255db61 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">বুকমার্ক ইউজার ইন্টারফেস পরিবর্তন করুন</translation>
 <translation id="2422426094670600218">&lt;নামবিহীন&gt;</translation>
 <translation id="2423578206845792524">এই রূপে ছবি সং&amp;রক্ষণ করুন...</translation>
-<translation id="2424091190911472304">সর্বদা <ph name="ORIGIN" /> এ চালু রাখুন</translation>
 <translation id="2425665904502185219">ফাইলের মোট আকার</translation>
 <translation id="2428510569851653187">ট্যাবটি ক্র্যাশ হওয়ার সময় আপনি কি করছিলেন তা বর্ণনা করুন</translation>
 <translation id="2431027948063157455">Google সহায়ক লোড করা যায়নি, আপনার ইন্টারনেট সংযোগ দেখে নিয়ে আবার চেষ্টা করুন।</translation>
@@ -1199,7 +1198,6 @@
 <translation id="2838379631617906747">ইনস্টল হচ্ছে</translation>
 <translation id="2841837950101800123">সরবরাহকারী</translation>
 <translation id="2843806747483486897">ডিফল্ট পরিবর্তন করুন ...</translation>
-<translation id="2844111009524261443">ক্লিক করলে চালু করুন</translation>
 <translation id="2845382757467349449">সর্বদা বুকমার্কস দণ্ড দেখান</translation>
 <translation id="2847759467426165163">এতে কাস্ট করুন</translation>
 <translation id="284805635805850872">ক্ষতিকর সফ্টওয়্যার সরাবেন?</translation>
@@ -1509,7 +1507,6 @@
 <translation id="3308116878371095290">এই পৃষ্ঠাটিকে কুকিজ সেট করা থেকে আটকানো হয়েছে৷</translation>
 <translation id="3308134619352333507">বোতাম লুকান</translation>
 <translation id="3308852433423051161">Google সহায়ক লোড হচ্ছে...</translation>
-<translation id="3309747692199697901">সর্বদা সমস্ত সাইটে চালু রাখুন</translation>
 <translation id="3312424061798279731">সক্ষম করা ভাষাগুলি</translation>
 <translation id="3313590242757056087">তত্ত্বাবধানে থাকা ব্যবহারকারী কোন ওয়েবসাইটগুলি দেখতে পাবেন তা সেট করতে, আপনি <ph name="MANAGEMENT_URL" /> এ গিয়ে বিধিনিষেধ এবং সেটিংস কনফিগার করতে পারেন৷ আপনি যদি ডিফল্ট সেটিংস পরিবর্তন না করেন, তাহলে <ph name="USER_DISPLAY_NAME" /> ওয়েবে সমস্ত সাইটে ব্রাউজ করতে পারবেন৷</translation>
 <translation id="3313622045786997898">শংসাপত্র স্বাক্ষর মান</translation>
@@ -1804,7 +1801,6 @@
 <translation id="3759933321830434300">ওয়েব পৃষ্ঠাগুলির অংশগুলি অবরুদ্ধ করুন</translation>
 <translation id="3760460896538743390">&amp;পশ্চাদপট পৃষ্ঠা পরিদর্শন করুন</translation>
 <translation id="37613671848467444">ছদ্মবেশী উইন্ডোতে খুলু&amp;ন</translation>
-<translation id="3763401818161139108">সর্বদা <ph name="ORIGIN" /> এ চালু রাখুন</translation>
 <translation id="3764314093345384080">বিল্ড সম্পর্কিত বিস্তারিত তথ্য</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{একটি USB ডিভাইসের সাথে যোগাযোগ করুন}one{# USB ডিভাইসের সাথে যোগাযোগ করুন}other{# USB ডিভাইসের সাথে যোগাযোগ করুন}}</translation>
 <translation id="3764986667044728669">নথিভুক্ত করতে অক্ষম</translation>
@@ -2263,7 +2259,6 @@
 <translation id="4547992677060857254">আপনার নির্বাচিত ফোল্ডারে সংবেদনশীল ফাইল রয়েছে৷ "$1" কে এই ফোল্ডারে স্থায়ী লেখার অ্যাক্সেস মঞ্জুর করার ব্যাপারে আপনি কি নিশ্চিত?</translation>
 <translation id="4552031286893852992">এই সাইটে বিরক্তিকরভাবে বিজ্ঞাপন দেখানো হয়, তাই Chrome এখানে বিজ্ঞাপন ব্লক করেছে।</translation>
 <translation id="4552089082226364758">ফ্ল্যাশ</translation>
-<translation id="4552495056028768700">পৃষ্ঠা অ্যাক্সেস</translation>
 <translation id="4552678318981539154">আরও সঞ্চয়স্থান কিনুন</translation>
 <translation id="4554591392113183336">বিদ্যমানটির তুলনায় বাহ্যিক এক্সটেনশানটি একই বা আরও পুরোনো সংস্করণের৷</translation>
 <translation id="4555769855065597957">ছায়া</translation>
@@ -3255,7 +3250,6 @@
 <translation id="6080515710685820702">শেয়ার করা কম্পিউটার ব্যবহার করছেন? তাহলে ছদ্মবেশী উইন্ডো ব্যবহার করুন।</translation>
 <translation id="6080689532560039067">আপনার সিস্টেমের সময় চেক করুন</translation>
 <translation id="6082651258230788217">টুল দণ্ডের মধ্যে দেখান</translation>
-<translation id="6086814797483779854">ক্লিক করলে চালু করুন</translation>
 <translation id="6086846494333236931">আপনার প্রশাসক দ্বারা ইনস্টল করা হয়েছে</translation>
 <translation id="6087960857463881712">দুর্দান্ত চেহারা</translation>
 <translation id="6089481419520884864">পৃষ্ঠা পাতন করুন</translation>
@@ -4392,7 +4386,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - যুক্ত করা হয়েছে</translation>
 <translation id="7870730066603611552">সেট-আপের পর সিঙ্কের বিকল্পগুলির রিভিউ</translation>
 <translation id="7870790288828963061">এর থেকে আরও নতুন সংস্করণের ওনো কিয়স্ক অ্যাপ্লিকেশান পাওয়া যায়নি৷ দয়া করে USB স্টিক সরান৷</translation>
-<translation id="7874357055309047713">সর্বদা সমস্ত সাইটে চালু রাখুন</translation>
 <translation id="7877451762676714207">অজানা সার্ভার ত্রুটি৷ দয়া করে আবার চেষ্টা করুন, অথবা সার্ভার প্রশাসকের সাথে যোগাযোগ করুন৷</translation>
 <translation id="7877680364634660272">ভ্রমণ</translation>
 <translation id="7878562273885520351">আপনার পাসওয়ার্ড অন্য কেউ পরিবর্তন করার চেষ্টা করেছে</translation>
@@ -4741,7 +4734,6 @@
 <translation id="8428634594422941299">বুঝেছি</translation>
 <translation id="8431909052837336408">সিম পিন পরিবর্তন করুন</translation>
 <translation id="8434480141477525001">NaCl ত্রুটিমুক্ত পোর্ট</translation>
-<translation id="8437331208797669910">পৃষ্ঠা অ্যাক্সেস</translation>
 <translation id="843760761634048214">ক্রেডিট কার্ড সেভ করুন</translation>
 <translation id="8438328416656800239">একটি স্মার্ট ব্রাউজারে স্যুইচ করুন</translation>
 <translation id="8439506636278576865">এই ভাষাতে পৃষ্ঠাগুলি অনুবাদ করার প্রস্তাব করে</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 234007a..d52060a1 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Modifica la interfície d'usuari de les adreces d'interès</translation>
 <translation id="2422426094670600218">&lt;sense nom&gt;</translation>
 <translation id="2423578206845792524">De&amp;sa la imatge com a...</translation>
-<translation id="2424091190911472304">Executa sempre a <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Mida total dels fitxers</translation>
 <translation id="2428510569851653187">Descriu què feies quan la pestanya s'ha bloquejat</translation>
 <translation id="2431027948063157455">L'Assistent de Google no s'ha pogut carregar. Comprova la connexió a Internet i tornar-ho a provar.</translation>
@@ -1199,7 +1198,6 @@
 <translation id="2838379631617906747">S'està instal·lant</translation>
 <translation id="2841837950101800123">Proveïdor</translation>
 <translation id="2843806747483486897">Canvia els valors predeterminats...</translation>
-<translation id="2844111009524261443">Executa en fer clic</translation>
 <translation id="2845382757467349449">Mostra la barra d'adreces d'interès</translation>
 <translation id="2847759467426165163">Emet a</translation>
 <translation id="284805635805850872">Vols suprimir el programari maliciós?</translation>
@@ -1511,7 +1509,6 @@
 <translation id="3308116878371095290">S'ha impedit que aquesta pàgina estableixi galetes.</translation>
 <translation id="3308134619352333507">Amaga el botó</translation>
 <translation id="3308852433423051161">S'està carregant l'Assistent de Google...</translation>
-<translation id="3309747692199697901">Executa sempre en tots els llocs</translation>
 <translation id="3312424061798279731">Idiomes activats</translation>
 <translation id="3313590242757056087">Per definir els llocs web que l'usuari supervisat pot veure, podeu configurar restriccions i opcions a la pàgina <ph name="MANAGEMENT_URL" />.
     Si no canvieu la configuració predeterminada, <ph name="USER_DISPLAY_NAME" />
@@ -1808,7 +1805,6 @@
 <translation id="3759933321830434300">Bloqueig d'elements de pàgines web</translation>
 <translation id="3760460896538743390">Inspecciona la &amp;pàgina de fons</translation>
 <translation id="37613671848467444">Obre en una &amp;finestra d'incògnit</translation>
-<translation id="3763401818161139108">Executa sempre a <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Informació detallada de la compilació</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Es comunica amb un dispositiu USB}other{Es comunica amb # dispositius USB}}</translation>
 <translation id="3764986667044728669">No es pot fer la inscripció</translation>
@@ -2268,7 +2264,6 @@
 <translation id="4547992677060857254">La carpeta que heu seleccionat conté fitxers confidencials. Confirmes que vols concedir a "$1" accés d'escriptura permanent en aquesta carpeta?</translation>
 <translation id="4552031286893852992">Chrome ha bloquejat els anuncis en aquest lloc web perquè acostuma a mostrar anuncis intrusius.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Accés a la pàgina</translation>
 <translation id="4552678318981539154">Compra més emmagatzematge</translation>
 <translation id="4554591392113183336">L'extensió externa té la mateixa versió, o una d'anterior, en comparació amb l'existent.</translation>
 <translation id="4555769855065597957">Ombra</translation>
@@ -3267,7 +3262,6 @@
 <translation id="6080515710685820702">Utilitzes un ordinador compartit? Prova d'obrir una finestra d'incògnit.</translation>
 <translation id="6080689532560039067">Comprova l'hora del sistema</translation>
 <translation id="6082651258230788217">Mostra a la barra d'eines</translation>
-<translation id="6086814797483779854">Executa en fer clic</translation>
 <translation id="6086846494333236931">Extensió instal·lada per l'administrador</translation>
 <translation id="6087960857463881712">Cara de fascinació</translation>
 <translation id="6089481419520884864">Condensa la pàgina</translation>
@@ -4398,7 +4392,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" />: vinculat</translation>
 <translation id="7870730066603611552">Mostra les opcions de sincronització en finalitzar la configuració</translation>
 <translation id="7870790288828963061">No s'ha trobat cap aplicació de Quiosc amb una versió més nova. No hi ha res per actualitzar. Extraieu la memòria USB.</translation>
-<translation id="7874357055309047713">Executa sempre en tots els llocs</translation>
 <translation id="7877451762676714207">Error de servidor desconegut. Torneu-ho a provar o contacteu amb l'administrador del servidor.</translation>
 <translation id="7877680364634660272">Visita guiada</translation>
 <translation id="7878562273885520351">La teva contrasenya pot estar en perill</translation>
@@ -4747,7 +4740,6 @@
 <translation id="8428634594422941299">D'acord</translation>
 <translation id="8431909052837336408">Canvia el PIN de la SIM</translation>
 <translation id="8434480141477525001">Port de depuració NaCI</translation>
-<translation id="8437331208797669910">Accés a la pàgina</translation>
 <translation id="843760761634048214">Desa la targeta de crèdit</translation>
 <translation id="8438328416656800239">Canvia a un navegador intel·ligent</translation>
 <translation id="8439506636278576865">Proposa'm traduir pàgines en aquest idioma</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 0a4ec4f..ef1d30e 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -455,6 +455,7 @@
 <translation id="166439687370499867">Změna konfigurace sdílené sítě není povolena</translation>
 <translation id="1665611772925418501">Soubor se nepodařilo upravit.</translation>
 <translation id="1670399744444387456">Základní</translation>
+<translation id="167160931442925455">Nejhlasitější</translation>
 <translation id="1673103856845176271">Soubor je z bezpečnostních důvodů nedostupný.</translation>
 <translation id="1673137583248014546"><ph name="URL" /> chce zjistit model a značku vašeho bezpečnostního klíče</translation>
 <translation id="167832068858235403">snížit hlasitost</translation>
@@ -511,6 +512,7 @@
 <translation id="1758831820837444715">Konfigurace sítě Ethernet</translation>
 <translation id="1763046204212875858">Vytvořit zástupce aplikací</translation>
 <translation id="1763108912552529023">Pokračovat v průzkumu</translation>
+<translation id="1763808908432309942">Otevře se na nové kartě</translation>
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nové okno</translation>
 <translation id="1768278914020124551">Jejda! Při kontaktování přihlašovacího serveru došlo k chybě. Zkontrolujte připojení k síti a název domény a zkuste to znovu.</translation>
@@ -591,6 +593,7 @@
 <translation id="1871615898038944731">Vaše zařízení <ph name="DEVICE_TYPE" /> je aktuální</translation>
 <translation id="1875387611427697908">Lze přidat pouze ze stránek <ph name="CHROME_WEB_STORE" /></translation>
 <translation id="1877520246462554164">Nepodařilo se získat ověřovací token. Chcete-li to zkusit znovu, odhlaste se a poté se znovu přihlaste.</translation>
+<translation id="1878302395768190018">Toto nastavení můžete kdykoliv upravit v nastavení Chromu</translation>
 <translation id="1878524442024357078">Žádným webům přístup do počítače pomocí pluginu nepovolovat</translation>
 <translation id="1880905663253319515">Smazat certifikát <ph name="CERTIFICATE_NAME" />?</translation>
 <translation id="1886996562706621347">Povolit dotazy stránek, zda je chcete použít jako výchozí obslužný nástroj protokolů (doporučeno)</translation>
@@ -913,7 +916,6 @@
 <translation id="2413749388954403953">Změnit uživatelské rozhraní záložek</translation>
 <translation id="2422426094670600218">&lt;bez názvu&gt;</translation>
 <translation id="2423578206845792524">Uložit o&amp;brázek jako...</translation>
-<translation id="2424091190911472304">Vždy spouštět na webu <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Celková velikost souborů</translation>
 <translation id="2428510569851653187">Popište, co jste dělali, když karta selhala</translation>
 <translation id="2431027948063157455">Načtení Asistenta Google se nezdařilo, zkontrolujte připojení k síti a zkuste to znovu.</translation>
@@ -1006,6 +1008,7 @@
 <translation id="2562685439590298522">Dokumenty</translation>
 <translation id="2562743677925229011">Nejste v prohlížeči <ph name="SHORT_PRODUCT_NAME" /> přihlášeni</translation>
 <translation id="2563856802393254086">Blahopřejeme! Datová služba <ph name="NAME" /> byla aktivována a je připravena k použití.</translation>
+<translation id="2564520396658920462">Spouštění JavaScriptu prostřednictvím AppleScriptu je vypnuto. Chcete-li jej zapnout, na liště s nabídkou přejděte na Zobrazení &gt; Vývojář &gt; Povolit JavaScript z událostí Apple. Další informace najdete na stránce https://support.google.com/chrome/?p=applescript.</translation>
 <translation id="2566124945717127842">Funkce Powerwash zařízení <ph name="IDS_SHORT_PRODUCT_NAME" /> resetuje na tovární nastavení.</translation>
 <translation id="2567257616420533738">Heslo bylo uloženo. Uložená hesla můžete zobrazit a spravovat na adrese <ph name="SAVED_PASSWORDS_LINK" /></translation>
 <translation id="2568774940984945469">Kontejner informačního panelu</translation>
@@ -1084,6 +1087,7 @@
 <translation id="2665394472441560184">Přidat nové slovo</translation>
 <translation id="2665717534925640469">Stránka je teď zobrazena na celou obrazovku a deaktivovala ukazatel myši.</translation>
 <translation id="2665919335226618153">To ne! Během formátování došlo k chybě.</translation>
+<translation id="2666990579225592931">Otevřít okno hosta</translation>
 <translation id="2667463864537187133">Správa kontroly pravopisu</translation>
 <translation id="2670102641511624474"><ph name="APP_NAME" /> sdílí kartu Chrome.</translation>
 <translation id="2670429602441959756">Tato stránka obsahuje funkce, které ve virtuální realitě dosud nejsou podporovány. Režim virtuální reality se zavře...</translation>
@@ -1201,7 +1205,6 @@
 <translation id="2838379631617906747">Instalace</translation>
 <translation id="2841837950101800123">Poskytovatel</translation>
 <translation id="2843806747483486897">Změnit výchozí akci...</translation>
-<translation id="2844111009524261443">Spouštět po kliknutí</translation>
 <translation id="2845382757467349449">&amp;Vždy zobrazovat lištu záložek</translation>
 <translation id="2847759467426165163">Odesílat do</translation>
 <translation id="284805635805850872">Odstranit škodlivý software?</translation>
@@ -1230,6 +1233,7 @@
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> se za chvíli restartuje a resetuje</translation>
 <translation id="2885378588091291677">Správce úloh</translation>
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
+<translation id="2886800363598651778">Synchronizujte a upravte si Chrome na různých zařízeních</translation>
 <translation id="2887525882758501333">Dokumenty PDF</translation>
 <translation id="2888807692577297075">Vyhledávacímu dotazu &lt;b&gt;<ph name="SEARCH_STRING" />&lt;/b&gt; neodpovídají žádné soubory.</translation>
 <translation id="2889064240420137087">Otevřít odkaz pomocí...</translation>
@@ -1513,7 +1517,6 @@
 <translation id="3308116878371095290">Této stránce bylo zabráněno v nastavení souborů cookie.</translation>
 <translation id="3308134619352333507">Skrýt tlačítko</translation>
 <translation id="3308852433423051161">Načítání Asistenta Google...</translation>
-<translation id="3309747692199697901">Vždy spouštět na všech webech</translation>
 <translation id="3312424061798279731">Povolené jazyky</translation>
 <translation id="3313590242757056087">Na adrese <ph name="MANAGEMENT_URL" /> můžete nakonfigurovat, které weby si dozorovaný uživatel může zobrazit.
 Pokud nezměníte výchozí nastavení, uživatel <ph name="USER_DISPLAY_NAME" /> bude moci prohlížet všechny weby na internetu.</translation>
@@ -1736,7 +1739,7 @@
 <translation id="3646789916214779970">Obnovit výchozí motiv</translation>
 <translation id="3648348069317717750">Bylo rozpoznáno zařízení <ph name="USB_DEVICE_NAME" /></translation>
 <translation id="3649138363871392317">Fotografie byla pořízena</translation>
-<translation id="3650952250015018111">Povolte aplikaci <ph name="APP_NAME" /> tyto přístupy:</translation>
+<translation id="3650952250015018111">Povolte aplikaci "<ph name="APP_NAME" />" tyto přístupy:</translation>
 <translation id="3651488188562686558">Bude odpojen od sítě Wi-Fi</translation>
 <translation id="3652817283076144888">Probíhá inicializace</translation>
 <translation id="3653999333232393305">Povolit webu <ph name="HOST" /> přístup k mikrofonu i nadále</translation>
@@ -1752,6 +1755,7 @@
 <translation id="3670229581627177274">zapněte Bluetooth</translation>
 <translation id="3672681487849735243">Byla zjištěna chyba z výroby</translation>
 <translation id="367645871420407123">Chcete-li heslo uživatele root nastavit na výchozí hodnotu testovacího obrazu, ponechte toto pole prázdné.</translation>
+<translation id="3677657024345889897">Nejtišší</translation>
 <translation id="3678156199662914018">Rozšíření: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3681311097828166361">Děkujeme vám za zpětnou vazbu. Nyní jste offline, zpráva bude odeslána později.</translation>
 <translation id="3683023058278427253">U vaší domény jsme zjistili několik typů licencí. Chcete-li pokračovat, vyberte jeden typ.</translation>
@@ -1809,7 +1813,6 @@
 <translation id="3759933321830434300">Blokování částí webových stránek</translation>
 <translation id="3760460896538743390">Prozkoumat stránku na &amp;pozadí</translation>
 <translation id="37613671848467444">Otevřít v &amp;anonymním okně</translation>
-<translation id="3763401818161139108">Vždy spouštět na webu <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Podrobné informace o sestavení</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Komunikace se zařízením USB}few{Komunikace se # zařízeními USB}many{Komunikace s # zařízení USB}other{Komunikace s # zařízeními USB}}</translation>
 <translation id="3764986667044728669">Nelze se zaregistrovat</translation>
@@ -1949,6 +1952,7 @@
 <translation id="3956702100721821638">Ke službě Google Play se nepodařilo připojit</translation>
 <translation id="3958088479270651626">Importovat záložky a nastavení</translation>
 <translation id="3960566196862329469">ONC</translation>
+<translation id="3965965397408324205">Zavřít profil <ph name="PROFILE_NAME" /></translation>
 <translation id="3966072572894326936">Vybrat jinou složku...</translation>
 <translation id="3966388904776714213">Zvukový přehrávač</translation>
 <translation id="3967822245660637423">Stahování bylo dokončeno</translation>
@@ -1989,6 +1993,7 @@
 <translation id="4031910098617850788">F5</translation>
 <translation id="4033471457476425443">Přidat novou složku</translation>
 <translation id="4034042927394659004">Snížit jas klávesnice</translation>
+<translation id="4034824040120875894">Tiskárna</translation>
 <translation id="4035758313003622889">Správce úloh</translation>
 <translation id="4036758022112812315">Zvýrazněte text, který chcete přečíst, a stiskněte Hledat + S. Případně podržte tlačítko Hledat a poté kliknutím nebo přetažením vyberte obsah.</translation>
 <translation id="4037084878352560732">Kůň</translation>
@@ -2073,6 +2078,7 @@
 <translation id="4181602000363099176">20×</translation>
 <translation id="4181841719683918333">Jazyky</translation>
 <translation id="4184885522552335684">Obrazovku přesunete přetažením</translation>
+<translation id="4192273449750167573">Na další obrazovce zkontrolujte svá nastavení</translation>
 <translation id="4193154014135846272">Dokument Google</translation>
 <translation id="4194570336751258953">Aktivovat kliknutí klepnutím</translation>
 <translation id="4195643157523330669">Otevřít na nové kartě</translation>
@@ -2269,7 +2275,6 @@
 <translation id="4547992677060857254">Vybraná složka obsahuje citlivé soubory. Opravdu chcete aplikaci $1 udělit trvalý přístup k zápisu do této složky?</translation>
 <translation id="4552031286893852992">Protože tento web často zobrazuje rušivé reklamy, Chrome reklamy na tomto webu zablokoval.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Přístup ke stránce</translation>
 <translation id="4552678318981539154">Koupit větší úložiště</translation>
 <translation id="4554591392113183336">Externí rozšíření má stejnou nebo nižší verzi než stávající.</translation>
 <translation id="4555769855065597957">Stín</translation>
@@ -2321,6 +2326,7 @@
 <translation id="4632483769545853758">Zapnout zvuk karty</translation>
 <translation id="4633003931260532286">Rozšíření vyžaduje rozhraní <ph name="IMPORT_NAME" /> s minimální verzí <ph name="IMPORT_VERSION" />, máte však nainstalovanou pouze verzi <ph name="INSTALLED_VERSION" /></translation>
 <translation id="4634771451598206121">Znovu přihlásit...</translation>
+<translation id="4635398712689569051">Stránka <ph name="PAGE_NAME" /> hostům není k dispozici.</translation>
 <translation id="4640525840053037973">Přihlaste se pomocí účtu Google</translation>
 <translation id="4641539339823703554">Chromu se nepodařilo nastavit systémový čas. Zkontrolujte čas níže a v případě potřeby jej opravte.</translation>
 <translation id="4643612240819915418">&amp;Otevřít video v nové kartě</translation>
@@ -2357,6 +2363,7 @@
     Pokud je tato akce nežádoucí, kontaktujte podporu.</translation>
 <translation id="469230890969474295">Složka OEM</translation>
 <translation id="4692623383562244444">Vyhledávače</translation>
+<translation id="4694024090038830733">Konfiguraci tiskáren spravuje administrátor.</translation>
 <translation id="4697551882387947560">Při ukončení relace prohlížení</translation>
 <translation id="4699172675775169585">Obrázky a soubory v mezipaměti</translation>
 <translation id="4699357559218762027">(spuštěno automaticky)</translation>
@@ -2365,6 +2372,7 @@
 <translation id="4707934200082538898">Další pokyny naleznete v e-mailu odeslaném na adresu <ph name="BEGIN_BOLD" /><ph name="MANAGER_EMAIL" /><ph name="END_BOLD" />.</translation>
 <translation id="4708794300267213770">Při probuzení z režimu spánku zobrazit obrazovku uzamčení</translation>
 <translation id="4708849949179781599">Ukončit <ph name="PRODUCT_NAME" /></translation>
+<translation id="4710251968215868702">Používá obsah na navštívených webech a aktivitu a interakce v prohlížeči.</translation>
 <translation id="4711638718396952945">Obnovit nastavení</translation>
 <translation id="4713544552769165154">Tento soubor je určen pro počítač se softwarem Macintosh. Není kompatibilní s vaším zařízením se systémem Chrome OS. Vyhledejte v <ph name="BEGIN_LINK" />Internetovém obchodě Chrome<ph name="END_LINK" /> vhodnou náhradní aplikaci.<ph name="BEGIN_LINK_HELP" />Další informace<ph name="END_LINK_HELP" /></translation>
 <translation id="4714531393479055912">Prohlížeč <ph name="PRODUCT_NAME" /> může teď synchronizovat vaše hesla.</translation>
@@ -2731,6 +2739,7 @@
 <translation id="527605719918376753">Vypnout zvuk karty</translation>
 <translation id="527605982717517565">Vždy povolovat JavaScript z webu <ph name="HOST" /></translation>
 <translation id="5280426389926346830">Vytvořit zástupce?</translation>
+<translation id="528208740344463258">Abyste mohli stahovat a používat aplikace pro Android, nejdříve musíte nainstalovat tuto povinnou aktualizaci. <ph name="DEVICE_TYPE" /> během aktualizace nelze používat. Po dokončení instalace se <ph name="DEVICE_TYPE" /> restartuje.</translation>
 <translation id="5282733140964383898">Nastavení „Do Not Track“ (Nesledovat) znamená, že k vašemu provozu při prohlížení bude přidán speciální požadavek. Efekt tohoto požadavku však závisí na tom, zda na něj web reaguje a jak jej interpretuje. Některé weby na tento požadavek mohou reagovat například tím, že při zobrazování reklam nebudou používat informace o tom, které jiné weby jste navštívili. Mnohé weby budou nadále sbírat a používat vaše údaje o prohlížení – např. za účelem zlepšení zabezpečení, poskytování obsahu, služeb, reklam a doporučení na svých webových stránkách a generování přehledových statistik. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
 <translation id="5283677936944177147">Jejda, systému se nepodařilo určit model nebo sériové číslo zařízení.</translation>
 <translation id="5284445933715251131">Pokračovat ve stahování</translation>
@@ -3092,6 +3101,7 @@
 <translation id="5807290661599647102">Nastavit zámek obrazovky</translation>
 <translation id="580926004266167721">Přidání počítače do domény se nezdařilo. Může to být způsobeno tím, že váš účet pro organizační jednotku nemá dostetek oprávnění.</translation>
 <translation id="580961539202306967">Zeptat se, když mi chce web odeslat nabízenou zprávu (doporučeno)</translation>
+<translation id="5809725759695043233">Máte aplikace optimalizované pro Chromebooky</translation>
 <translation id="5814126672212206791">Typ připojení</translation>
 <translation id="5815645614496570556">Adresa X.400</translation>
 <translation id="5817918615728894473">Spárovat</translation>
@@ -3264,7 +3274,6 @@
 <translation id="6080515710685820702">Používáte sdílený počítač? Zkuste si otevřít anonymní okno.</translation>
 <translation id="6080689532560039067">Zkontrolujte systémový čas</translation>
 <translation id="6082651258230788217">Zobrazit na liště</translation>
-<translation id="6086814797483779854">Spouštět po kliknutí</translation>
 <translation id="6086846494333236931">Nainstaloval administrátor</translation>
 <translation id="6087960857463881712">Paráda</translation>
 <translation id="6089481419520884864">Zpracovat stránku</translation>
@@ -3455,9 +3464,11 @@
 <translation id="6383051423892982287">Šifrovat synchronizovaná data pomocí vlastní <ph name="BEGIN_LINK" />heslové fráze pro synchronizaci<ph name="END_LINK" /></translation>
 <translation id="6384275966486438344">Změňte nastavení vyhledávání na: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Weby mohou ukládat a číst data souborů cookie</translation>
+<translation id="6388429472088318283">Vyhledat jazyky</translation>
 <translation id="6388771388956873507">Vyhledejte senzor otisků prstů na zařízení a dotkněte se ho prstem</translation>
 <translation id="6390799748543157332">Stránky, které otevřete v tomto okně, nebudou uvedeny v historii prohlížeče a nezanechají v počítači po zavření všech oken hosta žádné stopy, např. soubory cookie. Všechny stažené soubory však budou zachovány.</translation>
 <translation id="6395423953133416962">Odesílat <ph name="BEGIN_LINK1" />informace o systému<ph name="END_LINK1" /> a <ph name="BEGIN_LINK2" />metriky<ph name="END_LINK2" /></translation>
+<translation id="6397094776139756010">Možnosti synchronizace a personalizace</translation>
 <translation id="6397592254427394018">Otevřít všechny záložky v &amp;anonymním okně</translation>
 <translation id="6398715114293939307">Odstranit Obchod Google Play</translation>
 <translation id="6398765197997659313">Ukončit režim celé obrazovky</translation>
@@ -3647,6 +3658,7 @@
 <translation id="6659594942844771486">Karta</translation>
 <translation id="6664237456442406323">Váš počítač je bohužel nakonfigurován pomocí chybného čísla hardwaru. Systému Chrome OS to zabraňuje získat aktualizace s nejnovějšími bezpečnostními opravami, a počítač tak <ph name="BEGIN_BOLD" />může být zranitelnější vůči škodlivým úrokům<ph name="END_BOLD" />.</translation>
 <translation id="6664774537677393800">Při otevírání vašeho profilu se něco pokazilo. Odhlaste se a poté se znovu přihlaste.</translation>
+<translation id="6670647982128220776">Funkce související se synchronizací a personalizací jsou nyní pod jedním ovládacím prvkem. Pokud tuto možnost zapnete, mohou se vaše aktuální nastavení změnit.</translation>
 <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation>
 <translation id="667517062706956822">Chcete, aby Google tuto stránku přeložil z jazyka <ph name="SOURCE_LANGUAGE" /> do jazyka <ph name="TARGET_LANGUAGE" />?</translation>
 <translation id="6675665718701918026">Je připojeno polohovací zařízení</translation>
@@ -3761,6 +3773,7 @@
 <translation id="6841186874966388268">Chyby</translation>
 <translation id="6843725295806269523">ztlumit</translation>
 <translation id="6845038076637626672">Otevřít maximalizované</translation>
+<translation id="685040365210406336">Neprovádět žádné změny</translation>
 <translation id="6851497530878285708">Aplikace povolena</translation>
 <translation id="6853388645642883916">Nástroj na aktualizaci je v režimu spánku</translation>
 <translation id="68541483639528434">Zavřít ostatní karty</translation>
@@ -3960,6 +3973,7 @@
 <translation id="716810439572026343">Stahování souboru <ph name="FILE_NAME" /></translation>
 <translation id="7168109975831002660">Minimální velikost písma</translation>
 <translation id="7170041865419449892">Mimo dosah</translation>
+<translation id="7171559745792467651">Nainstalovat aplikace z vašich dalších zařízení</translation>
 <translation id="7173917244679555">Zdá se, že uživatele s tímto jménem již spravujete. Chtěli jste <ph name="BEGIN_LINK" />importovat profil <ph name="PROFILE_NAME" /><ph name="END_LINK" /> do tohoto zařízení?</translation>
 <translation id="7175037578838465313">Konfigurace sítě <ph name="NAME" /></translation>
 <translation id="7175353351958621980">Načteno z:</translation>
@@ -4096,6 +4110,7 @@
           <ph name="END_BOLD" /></translation>
 <translation id="7387829944233909572">Dialogové okno Vymazat údaje o prohlížení</translation>
 <translation id="7388044238629873883">Už jste skoro hotovi!</translation>
+<translation id="7388222713940428051">Otevřít okno hosta</translation>
 <translation id="7392118418926456391">Při vyhledávání virů došlo k chybě</translation>
 <translation id="7392915005464253525">Znovu ot&amp;evřít zavřené okno</translation>
 <translation id="7396845648024431313">Aplikace <ph name="APP_NAME" /> se spustí při zapnutí systému a poběží na pozadí i v případě, že zavřete všechna okna prohlížeče <ph name="PRODUCT_NAME" />.</translation>
@@ -4311,6 +4326,7 @@
 <translation id="773426152488311044">Momentálně jste jediný uživatel prohlížeče <ph name="PRODUCT_NAME" />.</translation>
 <translation id="7740996059027112821">Standardně</translation>
 <translation id="7748528009589593815">Předchozí karta</translation>
+<translation id="7748626145866214022">Další možnosti jsou k dispozici na panelu akcí. Na panel akcí přejdete stisknutím kláves Alt + A.</translation>
 <translation id="7751260505918304024">Zobrazit vše</translation>
 <translation id="7754704193130578113">Před stažením se vždy zeptat na místo uložení každého souboru</translation>
 <translation id="7758450972308449809">Úprava ohraničení zobrazení</translation>
@@ -4375,6 +4391,7 @@
 <translation id="7831491651892296503">Chyba při konfiguraci sítě</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
 <translation id="7832084384634357321">Čas ukončení</translation>
+<translation id="7832327313660264358">Data synchronizovaná do Googlu ani používané funkce se nezmění</translation>
 <translation id="7833720883933317473">Tady se budou zobrazovat uložená vlastní slova</translation>
 <translation id="7837307963048806839">•  $1</translation>
 <translation id="7837776265184002579">Domovská stránka byla změněna na <ph name="URL" />.</translation>
@@ -4400,7 +4417,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – spárováno</translation>
 <translation id="7870730066603611552">Po nastavení zkontrolovat možnosti synchronizace</translation>
 <translation id="7870790288828963061">Nebyly nalezeny žádné novější verze terminálových aplikací. Aktualizaci není třeba provést. Vyjměte jednotku USB.</translation>
-<translation id="7874357055309047713">Vždy spouštět na všech webech</translation>
 <translation id="7877451762676714207">Neznámá chyba serveru. Zkuste to prosím znovu, nebo kontaktujte správce serveru.</translation>
 <translation id="7877680364634660272">Prohlídka</translation>
 <translation id="7878562273885520351">Heslo může být prolomeno</translation>
@@ -4735,6 +4751,7 @@
 <translation id="8400146488506985033">Správa uživatelů</translation>
 <translation id="8410073653152358832">Použít tento telefon</translation>
 <translation id="8410775397654368139">Google Play</translation>
+<translation id="8411022984399993066">Ano, zapnout synchronizaci a personalizaci</translation>
 <translation id="8413385045638830869">Nejprve se dotázat (doporučeno)</translation>
 <translation id="8418445294933751433">Zobrazit jako kartu</translation>
 <translation id="8419098111404128271">Výsledky vyhledávání pro <ph name="SEARCH_TEXT" /></translation>
@@ -4749,7 +4766,6 @@
 <translation id="8428634594422941299">Rozumím</translation>
 <translation id="8431909052837336408">Změnit PIN SIM karty</translation>
 <translation id="8434480141477525001">Port ladění klientu NaCl</translation>
-<translation id="8437331208797669910">Přístup ke stránce</translation>
 <translation id="843760761634048214">Uložit platební kartu</translation>
 <translation id="8438328416656800239">Přejděte na chytrý prohlížeč</translation>
 <translation id="8439506636278576865">Nabízet překlad stránek v tomto jazyce</translation>
@@ -4780,6 +4796,7 @@
 <translation id="8470028084415844044">Chcete-li mít všechna hesla na všech svých zařízeních, zapněte synchronizaci.</translation>
 <translation id="8470513973197838199">Uložená hesla z webu <ph name="ORIGIN" /></translation>
 <translation id="8472623782143987204">hardwarová</translation>
+<translation id="8474229360677287535">Zavřít všechna vaše okna</translation>
 <translation id="8475313423285172237">Jiný program ve vašem počítači nainstaloval rozšíření, které může měnit funkce Chromu.</translation>
 <translation id="8475647382427415476">Soubor <ph name="FILENAME" /> teď nebylo možné synchronizovat. Disk Google to zkusí znovu později.</translation>
 <translation id="8477241577829954800">Nahrazen</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 8650df3..441269c 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">Rediger brugergrænsefladen for bogmærker</translation>
 <translation id="2422426094670600218">&lt;ikke navngivet&gt;</translation>
 <translation id="2423578206845792524">&amp;Gem billede som...</translation>
-<translation id="2424091190911472304">Kør altid på <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Samlet filstørrelse</translation>
 <translation id="2428510569851653187">Beskriv, hvad du foretog dig, da fanen gik ned</translation>
 <translation id="2431027948063157455">Google Assistent kunne ikke indlæses. Tjek din netværksforbindelse, og prøv igen.</translation>
@@ -1198,7 +1197,6 @@
 <translation id="2838379631617906747">Installerer</translation>
 <translation id="2841837950101800123">Udbyder</translation>
 <translation id="2843806747483486897">Skift standardindstillinger...</translation>
-<translation id="2844111009524261443">Kør ved klik</translation>
 <translation id="2845382757467349449">Vis altid bogmærkelinjen</translation>
 <translation id="2847759467426165163">Cast til</translation>
 <translation id="284805635805850872">Vil du slette den skadelige software?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Denne side blev forhindret i at konfigurere cookies.</translation>
 <translation id="3308134619352333507">Skjul knap</translation>
 <translation id="3308852433423051161">Indlæser Google Assistent...</translation>
-<translation id="3309747692199697901">Kør altid på alle websites</translation>
 <translation id="3312424061798279731">Aktiverede sprog</translation>
 <translation id="3313590242757056087">Du kan angive, hvilke websites den administrerede bruger skal kunne se, ved at konfigurere begrænsninger
     og indstillinger på <ph name="MANAGEMENT_URL" />.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Blokere dele af websiderne</translation>
 <translation id="3760460896538743390">Undersøg &amp;baggrundsside</translation>
 <translation id="37613671848467444">Åbn i &amp;inkognitovindue</translation>
-<translation id="3763401818161139108">Kør altid på <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Detaljerede buildoplysninger</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Kommuniker med en USB-enhed}one{Kommuniker med # USB-enheder}other{Kommuniker med # USB-enheder}}</translation>
 <translation id="3764986667044728669">Tilmelding mislykkedes</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">Den mappe, du har valgt, indeholder følsomme filer. Vil du give "$1" permanent skriveadgang til denne mappe?</translation>
 <translation id="4552031286893852992">Chrome blokerede annoncer på dette website, fordi websitet har tendens til at vise påtrængende annoncer.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Sideadgang</translation>
 <translation id="4552678318981539154">Køb mere lagerplads</translation>
 <translation id="4554591392113183336">Ekstern udvidelse er den samme version eller en ældre version end den eksisterende.</translation>
 <translation id="4555769855065597957">Skygge</translation>
@@ -3267,7 +3262,6 @@
 <translation id="6080515710685820702">Bruger du en delt computer? Prøv at åbne et inkognitovindue.</translation>
 <translation id="6080689532560039067">Se systemklokkeslættet</translation>
 <translation id="6082651258230788217">Vis på værktøjslinjen</translation>
-<translation id="6086814797483779854">Kør ved klik</translation>
 <translation id="6086846494333236931">Installeret af din administrator</translation>
 <translation id="6087960857463881712">Fantastisk-smiley</translation>
 <translation id="6089481419520884864">Destiller side</translation>
@@ -4407,7 +4401,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> er parret</translation>
 <translation id="7870730066603611552">Gennemgå indstillingerne for synkronisering efter konfigurationen</translation>
 <translation id="7870790288828963061">Der blev ikke fundet nogen terminalapps med en nyere version. Intet at opdatere. Fjern USB-stikket.</translation>
-<translation id="7874357055309047713">Kør altid på alle websites</translation>
 <translation id="7877451762676714207">Ukendt serverfejl. Prøv igen, eller kontakt serveradministratoren.</translation>
 <translation id="7877680364634660272">Rundvisning</translation>
 <translation id="7878562273885520351">Din adgangskode kan være kompromitteret</translation>
@@ -4756,7 +4749,6 @@
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431909052837336408">Skift pinkode til SIM-kort</translation>
 <translation id="8434480141477525001">NaCl-fejlretningsport</translation>
-<translation id="8437331208797669910">Sideadgang</translation>
 <translation id="843760761634048214">Gem kreditkort</translation>
 <translation id="8438328416656800239">Skift til en smart browser</translation>
 <translation id="8439506636278576865">Tilbyd at oversætte sider på dette sprog</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 2c1d37b2..e8b1e57 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">Benutzeroberfläche für Lesezeichen ändern</translation>
 <translation id="2422426094670600218">&lt;unbenannt&gt;</translation>
 <translation id="2423578206845792524">Bi&amp;ld speichern unter...</translation>
-<translation id="2424091190911472304">Auf <ph name="ORIGIN" /> immer ausführen</translation>
 <translation id="2425665904502185219">Gesamtdateigröße</translation>
 <translation id="2428510569851653187">Beschreiben Sie, was Sie beim Absturz des Tabs getan haben</translation>
 <translation id="2431027948063157455">Google Assistant konnte nicht geladen werden. Überprüfen Sie Ihre Netzverbindung und versuchen Sie es noch einmal.</translation>
@@ -1196,7 +1195,6 @@
 <translation id="2838379631617906747">Installation läuft...</translation>
 <translation id="2841837950101800123">Anbieter</translation>
 <translation id="2843806747483486897">Standardeinstellungen ändern...</translation>
-<translation id="2844111009524261443">Bei Klick ausführen</translation>
 <translation id="2845382757467349449">Lesezeichenleiste immer anzeigen</translation>
 <translation id="2847759467426165163">Übertragen an</translation>
 <translation id="284805635805850872">Schädliche Software entfernen?</translation>
@@ -1508,7 +1506,6 @@
 <translation id="3308116878371095290">Diese Seite konnte keine Cookies setzen.</translation>
 <translation id="3308134619352333507">Schaltfläche ausblenden</translation>
 <translation id="3308852433423051161">Google Assistant wird geladen...</translation>
-<translation id="3309747692199697901">Immer auf allen Websites ausführen</translation>
 <translation id="3312424061798279731">Aktivierte Sprachen</translation>
 <translation id="3313590242757056087">Zum Auswählen der Websites, die der betreute Nutzer besuchen kann,
     können Sie unter <ph name="MANAGEMENT_URL" /> Beschränkungen und Einstellungen festlegen.
@@ -1806,7 +1803,6 @@
 <translation id="3759933321830434300">Teile von Webseiten blockieren</translation>
 <translation id="3760460896538743390">&amp;Hintergrundseite prüfen</translation>
 <translation id="37613671848467444">In &amp;Inkognito-Fenster öffnen</translation>
-<translation id="3763401818161139108">Auf <ph name="ORIGIN" /> immer ausführen</translation>
 <translation id="3764314093345384080">Detaillierte Build-Informationen</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Kommunikation mit einem USB-Gerät}other{Kommunikation mit # USB-Geräten}}</translation>
 <translation id="3764986667044728669">Registrierung nicht möglich</translation>
@@ -2267,7 +2263,6 @@
 <translation id="4547992677060857254">Der ausgewählte Ordner enthält sensible Dateien. Möchten Sie "$1" wirklich dauerhaft Schreibzugriff auf diesen Ordner gewähren?</translation>
 <translation id="4552031286893852992">Chrome hat Werbeanzeigen auf dieser Website blockiert, da die Anzeigen häufig besonders aufdringlich sind.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Seitenzugriff</translation>
 <translation id="4552678318981539154">Mehr Speicherplatz erwerben</translation>
 <translation id="4554591392113183336">Die Version der externen Erweiterung ist identisch mit der vorhandenen Version oder niedriger als diese.</translation>
 <translation id="4555769855065597957">Schatten</translation>
@@ -3263,7 +3258,6 @@
 <translation id="6080515710685820702">Sie teilen sich einen Computer? Dann können Sie ganz einfach ein Inkognitofenster nutzen.</translation>
 <translation id="6080689532560039067">Systemzeit überprüfen</translation>
 <translation id="6082651258230788217">In Symbolleiste anzeigen</translation>
-<translation id="6086814797483779854">Bei Klick ausführen</translation>
 <translation id="6086846494333236931">Von Ihrem Administrator installiert</translation>
 <translation id="6087960857463881712">Cooles Gesicht</translation>
 <translation id="6089481419520884864">Seite konvertieren</translation>
@@ -4406,7 +4400,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – gekoppelt</translation>
 <translation id="7870730066603611552">Synchronisierungsoptionen nach der Einrichtung überprüfen</translation>
 <translation id="7870790288828963061">Es wurden keine Kiosk-Apps mit neuerer Version gefunden. Es sind keine Updates vorhanden. Bitte entfernen Sie den USB-Stick.</translation>
-<translation id="7874357055309047713">Immer auf allen Websites ausführen</translation>
 <translation id="7877451762676714207">Unbekannter Serverfehler. Bitte versuchen Sie es erneut oder wenden Sie sich an den Serveradministrator.</translation>
 <translation id="7877680364634660272">Tour</translation>
 <translation id="7878562273885520351">Ihr Passwort könnte gefährdet sein</translation>
@@ -4756,7 +4749,6 @@
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431909052837336408">PIN der SIM-Karte ändern</translation>
 <translation id="8434480141477525001">NaCl-Debug-Port</translation>
-<translation id="8437331208797669910">Seitenzugriff</translation>
 <translation id="843760761634048214">Kreditkarte speichern</translation>
 <translation id="8438328416656800239">Steigen Sie auf einen intelligenten Browser um</translation>
 <translation id="8439506636278576865">Übersetzung für Seiten in dieser Sprache anbieten</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 88a75daf..aeeee65 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -455,6 +455,7 @@
 <translation id="166439687370499867">Δεν επιτρέπεται η αλλαγή διαμορφώσεων κοινόχρηστου δικτύου</translation>
 <translation id="1665611772925418501">Δεν ήταν δυνατή η τροποποίηση του αρχείου.</translation>
 <translation id="1670399744444387456">Βασικά</translation>
+<translation id="167160931442925455">Μέγιστη ένταση</translation>
 <translation id="1673103856845176271">Για λόγους ασφαλείας, η πρόσβαση στο αρχείο δεν ήταν δυνατή.</translation>
 <translation id="1673137583248014546">Το <ph name="URL" /> θέλει να δει την κατασκευή και το μοντέλο του Κλειδιού ασφαλείας σας</translation>
 <translation id="167832068858235403">μείωση έντασης</translation>
@@ -511,6 +512,7 @@
 <translation id="1758831820837444715">Διαμόρφωση δικτύου Ethernet</translation>
 <translation id="1763046204212875858">Δημιουργία συντομεύσεων εφαρμογής</translation>
 <translation id="1763108912552529023">Συνεχίστε την εξερεύνηση</translation>
+<translation id="1763808908432309942">Ανοίγει σε νέα καρτέλα</translation>
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Νέο Παράθυρο</translation>
 <translation id="1768278914020124551">Δυστυχώς, παρουσιάστηκε κάποιο πρόβλημα κατά την επικοινωνία με τον διακομιστή σύνδεσης. Ελέγξτε τη σύνδεση δικτύου και το όνομα τομέα και δοκιμάστε ξανά.</translation>
@@ -591,6 +593,7 @@
 <translation id="1871615898038944731">Η συσκευή <ph name="DEVICE_TYPE" /> είναι ενημερωμένη</translation>
 <translation id="1875387611427697908">Η προσθήκη αυτού του στοιχείου είναι δυνατή μόνο από το <ph name="CHROME_WEB_STORE" /></translation>
 <translation id="1877520246462554164">Απέτυχε η λήψη του διακριτικού ελέγχου ταυτότητας. Αποσυνδεθείτε και συνδεθείτε εκ νέου για να προσπαθήσετε ξανά.</translation>
+<translation id="1878302395768190018">Μπορείτε να προσαρμόσετε την επιλογή ανά πάσα στιγμή από τις ρυθμίσεις του Chrome</translation>
 <translation id="1878524442024357078">Να μην επιτρέπεται σε κανέναν ιστότοπο να χρησιμοποιεί μια προσθήκη για να αποκτά πρόσβαση στον υπολογιστή σας</translation>
 <translation id="1880905663253319515">Να διαγραφεί το πιστοποιητικό "<ph name="CERTIFICATE_NAME" />";</translation>
 <translation id="1886996562706621347">Να επιτρέπεται σε ιστότοπους να ζητούν να γίνονται προεπιλεγμένα προγράμματα χειρισμού για πρωτόκολλα (συνιστάται)</translation>
@@ -913,7 +916,6 @@
 <translation id="2413749388954403953">Αλλαγή της διεπαφής χρήστη σελιδοδεικτών</translation>
 <translation id="2422426094670600218">&lt;χωρίς όνομα&gt;</translation>
 <translation id="2423578206845792524">Αποθήκευση εικόνας &amp;ως...</translation>
-<translation id="2424091190911472304">Να εκτελείται πάντα στο <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Συνολικό μέγεθος αρχείου</translation>
 <translation id="2428510569851653187">Περιγράψτε τι κάνατε όταν παρουσιάστηκε το σφάλμα στην καρτέλα</translation>
 <translation id="2431027948063157455">Δεν ήταν δυνατή η φόρτωση του Βοηθού Google. Ελέγξτε τη σύνδεση δικτύου σας και δοκιμάστε ξανά.</translation>
@@ -1006,6 +1008,7 @@
 <translation id="2562685439590298522">Έγγραφα</translation>
 <translation id="2562743677925229011">Δεν είστε συνδεδεμένος στο <ph name="SHORT_PRODUCT_NAME" /></translation>
 <translation id="2563856802393254086">Συγχαρητήρια! Η υπηρεσία δεδομένων "<ph name="NAME" />" έχει ενεργοποιηθεί και είναι έτοιμη για χρήση.</translation>
+<translation id="2564520396658920462">Η εκτέλεση JavaScript μέσω του AppleScript είναι απενεργοποιημένη. Για να την ενεργοποιήσετε, από τη γραμμή μενού, μεταβείτε στο μενού Προβολή &gt; Προγραμματιστής &gt; Να επιτρέπεται η JavaScript από τα Apple Events. Για περισσότερες πληροφορίες: https://support.google.com/chrome/?p=applescript</translation>
 <translation id="2566124945717127842">Το Powerwash θα επαναφέρει τη συσκευή σας <ph name="IDS_SHORT_PRODUCT_NAME" /> και θα την κάνει σαν καινούρια.</translation>
 <translation id="2567257616420533738">Ο κωδικός πρόσβασης αποθηκεύτηκε. Δείτε και διαχειριστείτε τους αποθηκευμένους κωδικούς πρόσβασης στη διεύθυνση <ph name="SAVED_PASSWORDS_LINK" /></translation>
 <translation id="2568774940984945469">Υποδοχέας γραμμής πληροφοριών</translation>
@@ -1084,6 +1087,7 @@
 <translation id="2665394472441560184">Προσθήκη νέας λέξης</translation>
 <translation id="2665717534925640469">Αυτή η σελίδα είναι τώρα σε πλήρη οθόνη και έχει απενεργοποιήσει τον δείκτη του ποντικιού σας.</translation>
 <translation id="2665919335226618153">Ώχ! Κάτι πήγε στραβά! Παρουσιάστηκε ένα σφάλμα κατά τη μορφοποίηση.</translation>
+<translation id="2666990579225592931">Άνοιγμα παραθύρου περιήγησης επισκέπτη</translation>
 <translation id="2667463864537187133">Διαχείριση ορθογραφικού ελέγχου</translation>
 <translation id="2670102641511624474">Η εφαρμογή <ph name="APP_NAME" /> μοιράζεται μια καρτέλα Chrome.</translation>
 <translation id="2670429602441959756">Αυτή η σελίδα περιέχει λειτουργίες που δεν υποστηρίζονται ακόμη στο VR. Έξοδος...</translation>
@@ -1201,7 +1205,6 @@
 <translation id="2838379631617906747">Γίνεται Εγκατάσταση</translation>
 <translation id="2841837950101800123">Πάροχος</translation>
 <translation id="2843806747483486897">Αλλαγή προεπιλογής...</translation>
-<translation id="2844111009524261443">Εκτέλεση με κλικ</translation>
 <translation id="2845382757467349449">Διαρκής εμφάνιση γραμμής σελιδοδεικτών</translation>
 <translation id="2847759467426165163">Μετάδοση σε</translation>
 <translation id="284805635805850872">Κατάργηση επιβλαβούς λογισμικού;</translation>
@@ -1230,6 +1233,7 @@
 <translation id="2882943222317434580">Θα γίνει άμεσα επανεκκίνηση και επαναφορά του <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="2885378588091291677">Διαχείριση εργασιών</translation>
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
+<translation id="2886800363598651778">Συγχρονισμός και εξατομίκευση του Chrome στις συσκευές σας</translation>
 <translation id="2887525882758501333">Έγγραφο PDF</translation>
 <translation id="2888807692577297075">Δεν υπάρχουν στοιχεία σε αντιστοιχία με το &lt;b&gt;"<ph name="SEARCH_STRING" />"&lt;/b&gt;</translation>
 <translation id="2889064240420137087">Άνοιγμα συνδέσμου με...</translation>
@@ -1513,7 +1517,6 @@
 <translation id="3308116878371095290">Σε αυτήν τη σελίδα δεν έχει επιτραπεί ο ορισμός των cookie.</translation>
 <translation id="3308134619352333507">Απόκρυψη κουμπιού</translation>
 <translation id="3308852433423051161">Φόρτωση Βοηθού Google…</translation>
-<translation id="3309747692199697901">Να εκτελείται πάντα σε όλους τους ιστότοπους</translation>
 <translation id="3312424061798279731">Ενεργοποιημένες γλώσσες</translation>
 <translation id="3313590242757056087">Για να ορίσετε τους ιστότοπους που μπορεί να επισκέπτεται ο εποπτευόμενος χρήστης, μπορείτε να διαμορφώσετε τους περιορισμούς
     και άλλες ρυθμίσεις από τη διεύθυνση <ph name="MANAGEMENT_URL" />.
@@ -1754,6 +1757,7 @@
 <translation id="3670229581627177274">Ενεργοποίηση Bluetooth</translation>
 <translation id="3672681487849735243">Εντοπίστηκε ένα εργοστασιακό σφάλμα</translation>
 <translation id="367645871420407123">αφήστε κενό εάν θέλετε να ορίσετε τον ριζικό κωδικό πρόσβασης στην προεπιλεγμένη τιμή δοκιμαστικής εικόνας</translation>
+<translation id="3677657024345889897">Χαμηλότερη ένταση</translation>
 <translation id="3678156199662914018">Επέκταση: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3681311097828166361">Σας ευχαριστούμε για τα σχόλιά σας. Βρίσκεστε εκτός σύνδεσης αυτήν τη στιγμή. Η αναφορά σας θα σταλεί αργότερα.</translation>
 <translation id="3683023058278427253">Εντοπίσαμε πολλούς τύπους αδειών για τον τομέα σας. Επιλέξτε έναν, για να συνεχίσετε.</translation>
@@ -1811,7 +1815,6 @@
 <translation id="3759933321830434300">Αποκλεισμός τμημάτων ιστοσελίδων</translation>
 <translation id="3760460896538743390">Έλεγχος &amp;σελίδας παρασκηνίου</translation>
 <translation id="37613671848467444">Άνοιγμα σε παράθυρο ανώνυμης περιήγησης</translation>
-<translation id="3763401818161139108">Να εκτελείται πάντα στο <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Λεπτομερείς πληροφορίες έκδοσης</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Επικοινωνία με μια συσκευή USB}other{Επικοινωνία με # συσκευές USB}}</translation>
 <translation id="3764986667044728669">Δεν είναι δυνατή η εγγραφή</translation>
@@ -1952,6 +1955,7 @@
 <translation id="3956702100721821638">Δεν ήταν δυνατή η επικοινωνία με το Google Play</translation>
 <translation id="3958088479270651626">Εισαγωγή σελιδοδεικτών και ρυθμίσεων</translation>
 <translation id="3960566196862329469">ONC</translation>
+<translation id="3965965397408324205">Έξοδος από <ph name="PROFILE_NAME" /></translation>
 <translation id="3966072572894326936">Επιλέξτε άλλο φάκελο...</translation>
 <translation id="3966388904776714213">Πρόγραμμα αναπαραγωγής ήχου</translation>
 <translation id="3967822245660637423">Ολοκλήρωση λήψης</translation>
@@ -1992,6 +1996,7 @@
 <translation id="4031910098617850788">F5</translation>
 <translation id="4033471457476425443">Προσθήκη νέου φακέλου</translation>
 <translation id="4034042927394659004">Μείωση φωτεινότητας πλήκτρων</translation>
+<translation id="4034824040120875894">Εκτυπωτής</translation>
 <translation id="4035758313003622889">Δια&amp;χείριση εργασιών</translation>
 <translation id="4036758022112812315">Επισημάνετε αυτό που θέλετε να ακούσετε και, στη συνέχεια, πατήστε Search + S. Εναλλακτικά, πατήστε παρατεταμένα Search και, στη συνέχεια, κάντε κλικ ή σύρετε για να επιλέξετε περιεχόμενο.</translation>
 <translation id="4037084878352560732">Άλογο</translation>
@@ -2076,6 +2081,7 @@
 <translation id="4181602000363099176">20x</translation>
 <translation id="4181841719683918333">Γλώσσες</translation>
 <translation id="4184885522552335684">Σύρετε για μετακίνηση οθόνης</translation>
+<translation id="4192273449750167573">Ελέγξτε τις ρυθμίσεις σας στην επόμενη οθόνη</translation>
 <translation id="4193154014135846272">Έγγραφο Google</translation>
 <translation id="4194570336751258953">Ενεργοποίηση λειτουργίας χειρισμού με αφή</translation>
 <translation id="4195643157523330669">Άνοιγμα σε νέα καρτέλα</translation>
@@ -2272,7 +2278,6 @@
 <translation id="4547992677060857254">Ο φάκελος που επιλέξατε περιέχει ευαίσθητα αρχεία. Είστε σίγουροι ότι θέλετε να παραχωρήσετε στο "$1" μόνιμη πρόσβαση εγγραφής σε αυτόν το φάκελο;</translation>
 <translation id="4552031286893852992">Το Chrome απέκλεισε τις διαφημίσεις σε αυτόν τον ιστότοπο επειδή ο ιστότοπος τείνει να εμφανίζει παρεμβατικές διαφημίσεις.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Πρόσβαση στη σελίδα</translation>
 <translation id="4552678318981539154">Αγοράστε περισσότερο αποθηκευτικό χώρο</translation>
 <translation id="4554591392113183336">Η εξωτερική επέκταση είναι στην ίδια ή προγενέστερη έκδοση σε σύγκριση με την υπάρχουσα.</translation>
 <translation id="4555769855065597957">Σκιά</translation>
@@ -2324,6 +2329,7 @@
 <translation id="4632483769545853758">Κατάργηση σίγασης καρτέλας</translation>
 <translation id="4633003931260532286">Η επέκταση απαιτεί "<ph name="IMPORT_NAME" />" με ελάχιστη έκδοση "<ph name="IMPORT_VERSION" />", αλλά είναι εγκατεστημένη μόνο η έκδοση "<ph name="INSTALLED_VERSION" />"</translation>
 <translation id="4634771451598206121">Συνδεθείτε ξανά...</translation>
+<translation id="4635398712689569051">Η σελίδα <ph name="PAGE_NAME" /> δεν είναι διαθέσιμη σε επισκέπτες.</translation>
 <translation id="4640525840053037973">Συνδεθείτε με τον Λογαριασμό σας Google</translation>
 <translation id="4641539339823703554">Δεν ήταν δυνατός ο ορισμός της ώρας συστήματος από το Chrome. Ελέγξτε την ώρα που εμφανίζεται παρακάτω και διορθώστε την εάν είναι απαραίτητο.</translation>
 <translation id="4643612240819915418">&amp;Άνοιγμα Βίντεο σε Νέα Καρτέλα</translation>
@@ -2360,6 +2366,7 @@
     Εάν αυτή η συμπεριφορά είναι μη αναμενόμενη επικοινωνήστε με την υποστήριξη.</translation>
 <translation id="469230890969474295">Φάκελος OEM</translation>
 <translation id="4692623383562244444">Μηχανές αναζήτησης</translation>
+<translation id="4694024090038830733">Η διαμόρφωση του εκτυπωτή γίνεται από τον διαχειριστή.</translation>
 <translation id="4697551882387947560">Όταν η περίοδος περιήγησης λήξει</translation>
 <translation id="4699172675775169585">Εικόνες και αρχεία στην κρυφή μνήμη</translation>
 <translation id="4699357559218762027">(αυτόματη εκκίνηση)</translation>
@@ -2368,6 +2375,7 @@
 <translation id="4707934200082538898">Ελέγξτε το ηλεκτρονικό ταχυδρομείο σας στη διεύθυνση <ph name="BEGIN_BOLD" /><ph name="MANAGER_EMAIL" /><ph name="END_BOLD" /> για περισσότερες πληροφορίες.</translation>
 <translation id="4708794300267213770">Εμφάνιση κλειδώματος οθόνης κατά την αφύπνιση από την αδράνεια</translation>
 <translation id="4708849949179781599">Έξοδος από το <ph name="PRODUCT_NAME" /></translation>
+<translation id="4710251968215868702">Χρησιμοποιεί περιεχόμενο από τους ιστοτόπους που επισκέπτεστε καθώς και δραστηριότητα και αλληλεπιδράσεις του προγράμματος περιήγησης.</translation>
 <translation id="4711638718396952945">Επαναφορά ρυθμίσεων</translation>
 <translation id="4713544552769165154">Αυτό το αρχείο έχει σχεδιαστεί για υπολογιστές που χρησιμοποιούν λογισμικό για υπολογιστές Macintosh. Δεν είναι συμβατό με τη συσκευή σας η οποία εκτελεί Chrome OS. Αναζητήστε μια εφαρμογή κατάλληλη για να το αντικαταστήσει στο <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" />.<ph name="BEGIN_LINK_HELP" />Μάθετε περισσότερα<ph name="END_LINK_HELP" /></translation>
 <translation id="4714531393479055912">Το <ph name="PRODUCT_NAME" /> μπορεί τώρα να συγχρονίσει τους κωδικούς πρόσβασής σας.</translation>
@@ -2735,6 +2743,7 @@
 <translation id="527605719918376753">Σίγαση καρτέλας</translation>
 <translation id="527605982717517565">Να επιτρέπεται πάντα το JavaScript στο <ph name="HOST" /></translation>
 <translation id="5280426389926346830">Δημιουργία συντόμευσης;</translation>
+<translation id="528208740344463258">Για να κατεβάσετε και να χρησιμοποιήσετε εφαρμογές Android, θα πρέπει πρώτα να εγκαταστήσετε αυτήν την υποχρεωτική ενημέρωση. Δεν είναι δυνατή η χρήση της συσκευής <ph name="DEVICE_TYPE" /> κατά τη διάρκεια της ενημέρωσης. Μόλις ολοκληρωθεί η εγκατάσταση, θα γίνει επανεκκίνηση της συσκευής <ph name="DEVICE_TYPE" />.</translation>
 <translation id="5282733140964383898">Η ενεργοποίηση της επιλογής "Χωρίς εντοπισμό" συνεπάγεται ότι θα περιλαμβάνεται ένα αίτημα με την επισκεψιμότητα περιήγησής σας. Τυχόν αποτελέσματα σχετίζονται με το εάν ένας ιστότοπος ανταποκρίνεται στο αίτημα και με τον τόπο ερμηνείας του αιτήματος. Για παράδειγμα, ορισμένοι ιστότοποι ενδέχεται να ανταποκρίνονται σε αυτό το αίτημα εμφανίζοντας διαφημίσεις που δεν βασίζονται σε άλλους ιστοτόπους που έχετε επισκεφτεί. Πολλοί ιστότοποι θα εξακολουθήσουν να συλλέγουν και να χρησιμοποιούν τα δεδομένα περιήγησής σας - για παράδειγμα για τη βελτίωση της ασφάλειας, της παροχής περιεχομένου, υπηρεσιών, διαφημίσεων και προτάσεων στους ιστότοπούς τους, καθώς και για τη δημιουργία στατιστικών στοιχείων αναφοράς. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation>
 <translation id="5283677936944177147">Δυστυχώς, το σύστημα δεν κατάφερε να προσδιορίσει το μοντέλο ή τον σειριακό αριθμό της συσκευής.</translation>
 <translation id="5284445933715251131">Συνέχιση λήψης</translation>
@@ -3097,6 +3106,7 @@
 <translation id="5807290661599647102">Ορισμός κλειδώματος οθόνης</translation>
 <translation id="580926004266167721">Απέτυχε η σύνδεση του μηχανήματος στον τομέα. Αυτό μπορεί να οφείλεται σε ανεπαρκή προνόμια για τον λογαριασμό σας στην οργανωτική μονάδα.</translation>
 <translation id="580961539202306967">Να μου ζητείται άδεια όταν ένας ιστότοπος θέλει να μου στέλνει μηνύματα push (συνιστάται)</translation>
+<translation id="5809725759695043233">Έχετε εφαρμογές που είναι βελτιστοποιημένες για Chromebook</translation>
 <translation id="5814126672212206791">Τύπος σύνδεσης</translation>
 <translation id="5815645614496570556">Διεύθυνση X.400</translation>
 <translation id="5817918615728894473">Σύζευξη</translation>
@@ -3269,7 +3279,6 @@
 <translation id="6080515710685820702">Χρησιμοποιείτε έναν κοινόχρηστο υπολογιστή; Δοκιμάστε να ανοίξετε ένα παράθυρο για ανώνυμη περιήγηση.</translation>
 <translation id="6080689532560039067">Ελέγξτε την ώρα του συστήματός σας</translation>
 <translation id="6082651258230788217">Εμφάνιση στη γραμμή εργαλείων</translation>
-<translation id="6086814797483779854">Εκτέλεση με κλικ</translation>
 <translation id="6086846494333236931">Εγκαταστάθηκε από το διαχειριστή σας</translation>
 <translation id="6087960857463881712">Καταπληκτικό πρόσωπο</translation>
 <translation id="6089481419520884864">Φιλτράρισμα σελίδας</translation>
@@ -3460,9 +3469,11 @@
 <translation id="6383051423892982287">Κρυπτογράφηση συγχρονισμένων δεδομένων με τη δική σας <ph name="BEGIN_LINK" />φράση πρόσβασης συγχρονισμού<ph name="END_LINK" /></translation>
 <translation id="6384275966486438344">Αλλαγή των ρυθμίσεων αναζήτησης σε: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Οι ιστότοποι ενδέχεται να αποθηκεύουν και να διαβάζουν δεδομένα cookie</translation>
+<translation id="6388429472088318283">Αναζήτηση γλωσσών</translation>
 <translation id="6388771388956873507">Βρείτε τον αισθητήρα δακτυλικών αποτυπωμάτων στη συσκευή σας και αγγίξτε τον με το δάχτυλό σας</translation>
 <translation id="6390799748543157332">Οι σελίδες που βλέπετε σε αυτό το παράθυρο δεν θα εμφανίζεται στο ιστορικό του προγράμματος περιήγησης και δεν θα αφήνουν άλλα ίχνη, όπως cookie, στον υπολογιστή αφού κλείσετε όλα τα ανοιχτά παράθυρα Επισκέπτη. Ωστόσο, τυχόν αρχεία τα οποία έχετε κατεβάσει θα διατηρηθούν.</translation>
 <translation id="6395423953133416962">Αποστολή <ph name="BEGIN_LINK1" />πληροφοριών συστήματος<ph name="END_LINK1" /> και <ph name="BEGIN_LINK2" />μετρήσεων<ph name="END_LINK2" /></translation>
+<translation id="6397094776139756010">Επιλογές συγχρονισμού και εξατομίκευσης</translation>
 <translation id="6397592254427394018">Άνοιγμα όλων των σελιδοδεικτών σε παράθυρο για &amp;ανώνυμη περιήγηση</translation>
 <translation id="6398715114293939307">Κατάργηση Google Play Store</translation>
 <translation id="6398765197997659313">Έξοδος από πλήρη οθόνη</translation>
@@ -3652,6 +3663,7 @@
 <translation id="6659594942844771486">Καρτέλα</translation>
 <translation id="6664237456442406323">Δυστυχώς, ο υπολογιστής σας έχει διαμορφωθεί με ένα εσφαλμένο αναγνωριστικό υλικού. Αυτό παρεμποδίζει την ενημέρωση του Chrome OS με τις πιο πρόσφατες επιδιορθώσεις ασφαλείας και ο υπολογιστής σας <ph name="BEGIN_BOLD" />ενδέχεται να είναι ευάλωτος σε κακόβουλες επιθέσεις<ph name="END_BOLD" />.</translation>
 <translation id="6664774537677393800">Παρουσιάστηκε ένα πρόβλημα κατά το άνοιγμα του προφίλ σας. Αποσυνδεθείτε και συνδεθείτε ξανά.</translation>
+<translation id="6670647982128220776">Οι λειτουργίες που σχετίζονται με τον συγχρονισμό και την εξατομίκευση βρίσκονται πλέον σε ένα στοιχείο ελέγχου. Η ενεργοποίησή του μπορεί να αλλάξει τις τρέχουσες ρυθμίσεις.</translation>
 <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation>
 <translation id="667517062706956822">Θέλετε να μεταφράσει το Google αυτήν τη σελίδα από <ph name="SOURCE_LANGUAGE" /> σε <ph name="TARGET_LANGUAGE" />;</translation>
 <translation id="6675665718701918026">Η συσκευή κατάδειξης είναι συνδεδεμένη</translation>
@@ -3766,6 +3778,7 @@
 <translation id="6841186874966388268">Σφάλματα</translation>
 <translation id="6843725295806269523">σίγαση</translation>
 <translation id="6845038076637626672">Άνοιγμα μεγιστοποιημένης εφαρμογής</translation>
+<translation id="685040365210406336">Να μην γίνουν αλλαγές</translation>
 <translation id="6851497530878285708">Η εφαρμογή ενεργοποιήθηκε</translation>
 <translation id="6853388645642883916">Το πρόγραμμα ενημέρωσης είναι σε αδράνεια</translation>
 <translation id="68541483639528434">Κλείσιμο των άλλων καρτελών</translation>
@@ -3965,6 +3978,7 @@
 <translation id="716810439572026343">Γίνεται λήψη του αρχείου <ph name="FILE_NAME" /></translation>
 <translation id="7168109975831002660">Ελάχιστο μέγεθος γραμματοσειράς</translation>
 <translation id="7170041865419449892">Εκτός εύρους τιμών</translation>
+<translation id="7171559745792467651">Εγκατάσταση εφαρμογών από τις άλλες συσκευές σας</translation>
 <translation id="7173917244679555">Φαίνεται ότι διαχειρίζεστε ήδη έναν χρήστη με αυτό το όνομα. Θέλετε να γίνει <ph name="BEGIN_LINK" />εισαγωγή του <ph name="PROFILE_NAME" /><ph name="END_LINK" /> σε αυτήν τη συσκευή;</translation>
 <translation id="7175037578838465313">Διαμόρφωση <ph name="NAME" /></translation>
 <translation id="7175353351958621980">Έγινε φόρτωση από:</translation>
@@ -4103,6 +4117,7 @@
         <ph name="END_BOLD" /></translation>
 <translation id="7387829944233909572">Παράθυρο διαλόγου "Διαγραφή δεδομένων περιήγησης"</translation>
 <translation id="7388044238629873883">Σχεδόν τελειώσατε!</translation>
+<translation id="7388222713940428051">Άνοιγμα παραθύρου περιήγησης επισκέπτη</translation>
 <translation id="7392118418926456391">Απέτυχε η σάρωση για ιούς</translation>
 <translation id="7392915005464253525">Ε&amp;παναφορά παραθύρου που έχει κλείσει</translation>
 <translation id="7396845648024431313">Η εφαρμογή <ph name="APP_NAME" /> θα εκκινείται κατά την εκκίνηση του συστήματος και θα συνεχίζει να εκτελείται στο παρασκήνιο αφού πρώτα κλείσετε όλα τα υπόλοιπα παράθυρα του <ph name="PRODUCT_NAME" />.</translation>
@@ -4320,6 +4335,7 @@
 <translation id="773426152488311044">Προς το παρόν, είστε ο μόνος χρήστης του <ph name="PRODUCT_NAME" />.</translation>
 <translation id="7740996059027112821">Τυπική</translation>
 <translation id="7748528009589593815">Προηγούμενη καρτέλα</translation>
+<translation id="7748626145866214022">Στη γραμμή ενεργειών υπάρχουν περισσότερες επιλογές. Πιέστε Alt + A, για να εστιάσετε στη γραμμή ενεργειών.</translation>
 <translation id="7751260505918304024">Προβολή όλων</translation>
 <translation id="7754704193130578113">Εμφάνιση ερώτησης για τη θέση αποθήκευσης κάθε αρχείου πριν από τη λήψη</translation>
 <translation id="7758450972308449809">Προσαρμόστε τα όρια της οθόνης σας</translation>
@@ -4384,6 +4400,7 @@
 <translation id="7831491651892296503">Σφάλμα κατά τη διαμόρφωση του δικτύου</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
 <translation id="7832084384634357321">Ώρα λήξης</translation>
+<translation id="7832327313660264358">Τα δεδομένα που συγχρονίζετε στο Google και οι λειτουργίες που χρησιμοποιείτε δεν θα αλλάξουν</translation>
 <translation id="7833720883933317473">Οι αποθηκευμένες προσαρμοσμένες λέξεις θα εμφανίζονται εδώ</translation>
 <translation id="7837307963048806839">•  $1</translation>
 <translation id="7837776265184002579">Η αρχική σελίδα σας άλλαξε σε <ph name="URL" />.</translation>
@@ -4409,7 +4426,6 @@
 <translation id="786957569166715433">Έγινε σύζευξη της συσκευής <ph name="DEVICE_NAME" /></translation>
 <translation id="7870730066603611552">Έλεγχος επιλογών συγχρονισμού μετά τη ρύθμιση</translation>
 <translation id="7870790288828963061">Δεν βρέθηκαν εφαρμογές kiosk με νεότερη έκδοση. Δεν υπάρχουν στοιχεία προς ενημέρωση. Αφαιρέστε τη συσκευή USB.</translation>
-<translation id="7874357055309047713">Να εκτελείται πάντα σε όλους τους ιστότοπους</translation>
 <translation id="7877451762676714207">Άγνωστο σφάλμα διακομιστή. Δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή του διακομιστή.</translation>
 <translation id="7877680364634660272">Περιήγηση</translation>
 <translation id="7878562273885520351">Ο κωδικός πρόσβασής σας μπορεί να έχει παραβιαστεί</translation>
@@ -4744,6 +4760,7 @@
 <translation id="8400146488506985033">Διαχείριση ατόμων</translation>
 <translation id="8410073653152358832">Χρήση αυτού του τηλεφώνου</translation>
 <translation id="8410775397654368139">Google Play</translation>
+<translation id="8411022984399993066">Ναι, να ενεργοποιηθεί ο συγχρονισμός και η εξατομίκευση</translation>
 <translation id="8413385045638830869">Να γίνεται ερώτηση πρώτα (συνιστάται)</translation>
 <translation id="8418445294933751433">&amp;Εμφάνιση ως καρτέλα</translation>
 <translation id="8419098111404128271">Αποτελέσματα αναζήτησης για "<ph name="SEARCH_TEXT" />"</translation>
@@ -4758,7 +4775,6 @@
 <translation id="8428634594422941299">Το κατάλαβα</translation>
 <translation id="8431909052837336408">Αλλαγή αριθμού PIN της κάρτας SIM</translation>
 <translation id="8434480141477525001">NaCl Εντοπισμός σφαλμάτων θύρας</translation>
-<translation id="8437331208797669910">Πρόσβαση στη σελίδα</translation>
 <translation id="843760761634048214">Αποθήκευση πιστωτικής κάρτας</translation>
 <translation id="8438328416656800239">Εναλλαγή σε ένα έξυπνο πρόγραμμα περιήγησης</translation>
 <translation id="8439506636278576865">Ερώτηση για τη μετάφραση σελίδων σε αυτήν τη γλώσσα</translation>
@@ -4789,6 +4805,7 @@
 <translation id="8470028084415844044">Για να έχετε όλους τους κωδικούς πρόσβασης σε όλες τις συσκευές σας, ενεργοποιήστε τον συγχρονισμό.</translation>
 <translation id="8470513973197838199">Αποθηκευμένοι κωδικοί πρόσβασης για το <ph name="ORIGIN" /></translation>
 <translation id="8472623782143987204">υποστηριζόμενο από υλικό</translation>
+<translation id="8474229360677287535">Κλείσιμο όλων των παραθύρων</translation>
 <translation id="8475313423285172237">Κάποιο άλλο πρόγραμμα στον υπολογιστή σας πρόσθεσε μια επέκταση, η οποία ενδέχεται να αλλάξει τον τρόπο λειτουργίας του Chrome.</translation>
 <translation id="8475647382427415476">Το Google Drive δεν ήταν δυνατό να συγχρονίσει το "<ph name="FILENAME" />" αυτήν τη στιγμή. Δοκιμάστε ξανά αργότερα.</translation>
 <translation id="8477241577829954800">Αντικαταστάθηκε</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 0a575a5..360bbc9 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -916,7 +916,6 @@
 <translation id="2413749388954403953">Change the bookmarks user interface</translation>
 <translation id="2422426094670600218">&lt;unnamed&gt;</translation>
 <translation id="2423578206845792524">Sa&amp;ve image as...</translation>
-<translation id="2424091190911472304">Always Run on <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Total file size</translation>
 <translation id="2428510569851653187">Describe what you were doing when the tab crashed</translation>
 <translation id="2431027948063157455">Google Assistant was unable to load. Please check your network connection and retry.</translation>
@@ -1205,7 +1204,6 @@
 <translation id="2838379631617906747">Installing</translation>
 <translation id="2841837950101800123">Provider</translation>
 <translation id="2843806747483486897">Change default...</translation>
-<translation id="2844111009524261443">Run on click</translation>
 <translation id="2845382757467349449">Always Show Bookmarks Bar</translation>
 <translation id="2847759467426165163">Cast to</translation>
 <translation id="284805635805850872">Remove harmful software?</translation>
@@ -1518,7 +1516,6 @@
 <translation id="3308116878371095290">This page was prevented from setting cookies.</translation>
 <translation id="3308134619352333507">Hide Button</translation>
 <translation id="3308852433423051161">Loading Google Assistant...</translation>
-<translation id="3309747692199697901">Always Run on All Sites</translation>
 <translation id="3312424061798279731">Enabled languages</translation>
 <translation id="3313590242757056087">To set which websites the supervised user can view, you can configure restrictions
     and settings by visiting <ph name="MANAGEMENT_URL" />.
@@ -1817,7 +1814,6 @@
 <translation id="3759933321830434300">Block parts of web pages</translation>
 <translation id="3760460896538743390">Inspect &amp;Background Page</translation>
 <translation id="37613671848467444">Open in &amp;Incognito Window</translation>
-<translation id="3763401818161139108">Always run on <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Detailed build information</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Communicate with a USB device}other{Communicate with # USB devices}}</translation>
 <translation id="3764986667044728669">Unable to enroll</translation>
@@ -2281,7 +2277,6 @@
 <translation id="4547992677060857254">The folder that you selected contains sensitive files. Are you sure that you want to grant "$1" permanent write access to this folder?</translation>
 <translation id="4552031286893852992">Chrome blocked ads on this site because this site tends to show intrusive ads.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Page Access</translation>
 <translation id="4552678318981539154">Buy more storage</translation>
 <translation id="4554591392113183336">External extension is at the same or lower version compared to the existing one.</translation>
 <translation id="4555769855065597957">Shadow</translation>
@@ -3282,7 +3277,6 @@
 <translation id="6080515710685820702">Using a shared computer? Try opening an incognito window.</translation>
 <translation id="6080689532560039067">Check your system time</translation>
 <translation id="6082651258230788217">Show in toolbar</translation>
-<translation id="6086814797483779854">Run on Click</translation>
 <translation id="6086846494333236931">Installed by your administrator</translation>
 <translation id="6087960857463881712">Awesome face</translation>
 <translation id="6089481419520884864">Distill page</translation>
@@ -4430,7 +4424,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – Paired</translation>
 <translation id="7870730066603611552">Review sync options following setup</translation>
 <translation id="7870790288828963061">No Kiosk apps with newer version found. Nothing to update. Please remove the USB stick.</translation>
-<translation id="7874357055309047713">Always run on all sites</translation>
 <translation id="7877451762676714207">Unknown server error. Please try again, or contact the server administrator.</translation>
 <translation id="7877680364634660272">Tour</translation>
 <translation id="7878562273885520351">Your password may be compromised</translation>
@@ -4780,7 +4773,6 @@
 <translation id="8428634594422941299">Got it</translation>
 <translation id="8431909052837336408">Change SIM PIN</translation>
 <translation id="8434480141477525001">NaCl Debug Port</translation>
-<translation id="8437331208797669910">Page access</translation>
 <translation id="843760761634048214">Save credit card</translation>
 <translation id="8438328416656800239">Switch to a smart browser</translation>
 <translation id="8439506636278576865">Offer to translate pages in this language</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index d1be0e32..08c2cc69 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">Cambiar la interfaz de usuario de los favoritos</translation>
 <translation id="2422426094670600218">&lt;unnamed&gt;</translation>
 <translation id="2423578206845792524">Guar&amp;dar imagen como...</translation>
-<translation id="2424091190911472304">Ejecutar siempre en <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Tamaño total de archivos</translation>
 <translation id="2428510569851653187">Describir lo que estabas haciendo cuando se bloqueó la pestaña</translation>
 <translation id="2431027948063157455">No se pudo cargar el Asistente de Google. Comprueba tu conexión de red y vuelve a intentarlo.</translation>
@@ -1197,7 +1196,6 @@
 <translation id="2838379631617906747">Instalando</translation>
 <translation id="2841837950101800123">Proveedor</translation>
 <translation id="2843806747483486897">Cambiar el valor predeterminado...</translation>
-<translation id="2844111009524261443">Ejecutar al hacer clic</translation>
 <translation id="2845382757467349449">Mostrar siempre la barra de favoritos</translation>
 <translation id="2847759467426165163">Transmitir a</translation>
 <translation id="284805635805850872">¿Deseas quitar software dañino?</translation>
@@ -1509,7 +1507,6 @@
 <translation id="3308116878371095290">Se impidió que esta página configure cookies.</translation>
 <translation id="3308134619352333507">Ocultar botón</translation>
 <translation id="3308852433423051161">Cargando el Asistente de Google…</translation>
-<translation id="3309747692199697901">Ejecutar siempre en todos los sitios</translation>
 <translation id="3312424061798279731">Idiomas habilitados</translation>
 <translation id="3313590242757056087">Para definir los sitios web que puede ver el usuario supervisado, puedes configurar restricciones
     y parámetros de configuración en <ph name="MANAGEMENT_URL" />.
@@ -1807,7 +1804,6 @@
 <translation id="3759933321830434300">Bloquear partes de páginas web</translation>
 <translation id="3760460896538743390">Inspeccionar página &amp;de fondo</translation>
 <translation id="37613671848467444">Abrir en una ventana de &amp;incógnito</translation>
-<translation id="3763401818161139108">Ejecutar siempre en <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Información detallada sobre la compilación</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Comunicarse con un dispositivo USB}other{Comunicarse con # dispositivos USB}}</translation>
 <translation id="3764986667044728669">Error de registro</translation>
@@ -2268,7 +2264,6 @@
 <translation id="4547992677060857254">La carpeta seleccionada contiene archivos confidenciales. ¿Confirmas que deseas otorgar a "$1" acceso de escritura permanente a esta carpeta?</translation>
 <translation id="4552031286893852992">Chrome bloqueó anuncios en este sitio porque tiende a mostrar anuncios intrusivos.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Acceso a la página</translation>
 <translation id="4552678318981539154">Comprar más almacenamiento</translation>
 <translation id="4554591392113183336">La versión de la extensión externa es igual o anterior a la actual.</translation>
 <translation id="4555769855065597957">Sombra</translation>
@@ -3264,7 +3259,6 @@
 <translation id="6080515710685820702">¿Usas una computadora compartida? Intenta abrir una ventana de incógnito.</translation>
 <translation id="6080689532560039067">Comprobar la hora del sistema</translation>
 <translation id="6082651258230788217">Mostrar en la barra de herramientas</translation>
-<translation id="6086814797483779854">Ejecutar al hacer clic</translation>
 <translation id="6086846494333236931">Instalado por el administrador</translation>
 <translation id="6087960857463881712">Cara increíble</translation>
 <translation id="6089481419520884864">Filtrar página</translation>
@@ -4404,7 +4398,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> sincronizado</translation>
 <translation id="7870730066603611552">Revisar las opciones de sincronización después de la configuración</translation>
 <translation id="7870790288828963061">No se encontraron aplicaciones de kiosco con una versión más reciente. No hay nada para actualizar. Desconecta el dispositivo USB.</translation>
-<translation id="7874357055309047713">Ejecutar siempre en todos los sitios</translation>
 <translation id="7877451762676714207">Error de servidor desconocido. Inténtalo nuevamente o comunícate con el administrador del servidor.</translation>
 <translation id="7877680364634660272">Recorrido</translation>
 <translation id="7878562273885520351">Es posible que tu contraseña esté en peligro</translation>
@@ -4754,7 +4747,6 @@
 <translation id="8428634594422941299">Entendido</translation>
 <translation id="8431909052837336408">Cambiar el PIN de la tarjeta SIM</translation>
 <translation id="8434480141477525001">Puerto de depuración NaCl</translation>
-<translation id="8437331208797669910">Acceso a la página</translation>
 <translation id="843760761634048214">Guardar la tarjeta de crédito</translation>
 <translation id="8438328416656800239">Cambia a un navegador inteligente</translation>
 <translation id="8439506636278576865">Ofrecer la traducción de páginas en este idioma</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 0ea7ba0..430ad5c 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -454,6 +454,7 @@
 <translation id="166439687370499867">No se permite cambiar la configuración de las redes compartidas</translation>
 <translation id="1665611772925418501">No se ha podido modificar el archivo.</translation>
 <translation id="1670399744444387456">Básico</translation>
+<translation id="167160931442925455">El más alto</translation>
 <translation id="1673103856845176271">No se ha podido acceder al archivo por razones de seguridad.</translation>
 <translation id="1673137583248014546"><ph name="URL" /> quiere ver la marca y el modelo de tu llave de seguridad</translation>
 <translation id="167832068858235403">disminuir volumen</translation>
@@ -510,6 +511,7 @@
 <translation id="1758831820837444715">Configurar la red Ethernet</translation>
 <translation id="1763046204212875858">Crear accesos directos a aplicaciones</translation>
 <translation id="1763108912552529023">Seguir explorando</translation>
+<translation id="1763808908432309942">Se abre en una nueva pestaña</translation>
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nueva ventana</translation>
 <translation id="1768278914020124551">¡Vaya! No se ha podido establecer conexión con el servidor de inicio de sesión. Comprueba tu conexión de red y el nombre de dominio e inténtalo de nuevo.</translation>
@@ -590,6 +592,7 @@
 <translation id="1871615898038944731">Tu <ph name="DEVICE_TYPE" /> está actualizado</translation>
 <translation id="1875387611427697908">Este elemento solo se puede añadir desde <ph name="CHROME_WEB_STORE" /></translation>
 <translation id="1877520246462554164">No se ha podido obtener el token de autenticación. Cierra la sesión y vuelve a iniciarla para intentarlo de nuevo.</translation>
+<translation id="1878302395768190018">Puedes personalizarla en cualquier momento en la configuración de Chrome</translation>
 <translation id="1878524442024357078">No permitir que ningún sitio utilice un complemento para acceder a tu ordenador</translation>
 <translation id="1880905663253319515">¿Quieres eliminar el certificado "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="1886996562706621347">Permitir que los sitios web se conviertan en controladores de protocolos predeterminados (recomendado)</translation>
@@ -912,7 +915,6 @@
 <translation id="2413749388954403953">Cambiar la interfaz de usuario de marcadores</translation>
 <translation id="2422426094670600218">&lt;sin nombre&gt;</translation>
 <translation id="2423578206845792524">Guar&amp;dar imagen como...</translation>
-<translation id="2424091190911472304">Ejecutar siempre en <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Tamaño total de los archivos</translation>
 <translation id="2428510569851653187">Describe qué estabas haciendo cuando la pestaña se bloqueó</translation>
 <translation id="2431027948063157455">No se ha podido cargar el Asistente de Google. Comprueba tu conexión de red y vuelve a intentarlo.</translation>
@@ -1005,6 +1007,7 @@
 <translation id="2562685439590298522">Docs</translation>
 <translation id="2562743677925229011">No has iniciado sesión en <ph name="SHORT_PRODUCT_NAME" />.</translation>
 <translation id="2563856802393254086">¡Enhorabuena! Tu servicio de datos <ph name="NAME" /> se ha activado y está listo para que lo uses.</translation>
+<translation id="2564520396658920462">La ejecución de JavaScript a través de AppleScript está desactivada. Para activarla, en la barra de menú, accede a Ver &gt; Opciones para desarrolladores &gt; Permitir JavaScript desde Eventos de Apple. Puedes consultar más información en la página https://support.google.com/chrome/?p=applescript</translation>
 <translation id="2566124945717127842">Haz un Powerwash y restablece el estado de fábrica de tu dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" /> para que quede como nuevo.</translation>
 <translation id="2567257616420533738">Se ha guardado la contraseña. Consulta y administra las contraseñas guardadas en la página <ph name="SAVED_PASSWORDS_LINK" /></translation>
 <translation id="2568774940984945469">Contenedor de barra de información</translation>
@@ -1083,6 +1086,7 @@
 <translation id="2665394472441560184">Añade una palabra nueva</translation>
 <translation id="2665717534925640469">Esta página se muestra ahora en pantalla completa y ha inhabilitado el cursor del ratón.</translation>
 <translation id="2665919335226618153">¡Oh, no! Se ha producido un error dando formato.</translation>
+<translation id="2666990579225592931">Abrir ventana de invitado</translation>
 <translation id="2667463864537187133">Administrar la revisión ortográfica</translation>
 <translation id="2670102641511624474"><ph name="APP_NAME" /> está compartiendo una pestaña de Chrome.</translation>
 <translation id="2670429602441959756">Esta página contiene funciones que aún no se admiten en RV. Saliendo...</translation>
@@ -1200,7 +1204,6 @@
 <translation id="2838379631617906747">Instalando</translation>
 <translation id="2841837950101800123">Proveedor</translation>
 <translation id="2843806747483486897">Cambiar acción predeterminada...</translation>
-<translation id="2844111009524261443">Ejecutar al hacer clic</translation>
 <translation id="2845382757467349449">Mostrar siempre la barra de marcadores</translation>
 <translation id="2847759467426165163">Enviar a</translation>
 <translation id="284805635805850872">¿Eliminar software dañino?</translation>
@@ -1229,6 +1232,7 @@
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> se reiniciará y se restablecerá momentáneamente</translation>
 <translation id="2885378588091291677">Administrador de tareas</translation>
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
+<translation id="2886800363598651778">Sincronizar y personalizar Chrome en todos tus dispositivos</translation>
 <translation id="2887525882758501333">Documento PDF</translation>
 <translation id="2888807692577297075">No se ha encontrado ningún elemento que coincida con &lt;b&gt;"<ph name="SEARCH_STRING" />"&lt;/b&gt;.</translation>
 <translation id="2889064240420137087">Abrir enlace con...</translation>
@@ -1512,7 +1516,6 @@
 <translation id="3308116878371095290">Se ha evitado el uso de cookies en esta página.</translation>
 <translation id="3308134619352333507">Ocultar botón</translation>
 <translation id="3308852433423051161">Cargando el Asistente de Google...</translation>
-<translation id="3309747692199697901">Ejecutar siempre en todos los sitios</translation>
 <translation id="3312424061798279731">Idiomas habilitados</translation>
 <translation id="3313590242757056087">Para definir los sitios web que puede ver el usuario supervisado, puedes configurar restricciones y opciones en la página <ph name="MANAGEMENT_URL" />.
 Si no cambias la configuración predeterminada, <ph name="USER_DISPLAY_NAME" /> podrá navegar por todos los sitios de la Web.</translation>
@@ -1751,6 +1754,7 @@
 <translation id="3670229581627177274">Activar Bluetooth</translation>
 <translation id="3672681487849735243">Se ha detectado un error de fabricación</translation>
 <translation id="367645871420407123">deja este campo vacío si quieres establecer la contraseña raíz en el valor de la imagen de prueba predeterminada</translation>
+<translation id="3677657024345889897">El más bajo</translation>
 <translation id="3678156199662914018">Extensión: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3681311097828166361">Gracias por tus comentarios. Ahora no tienes conexión, por lo que el informe se enviará más tarde.</translation>
 <translation id="3683023058278427253">Hemos detectado varios tipos de licencia para tu dominio. Selecciona uno para continuar.</translation>
@@ -1808,7 +1812,6 @@
 <translation id="3759933321830434300">Bloquear partes de páginas web</translation>
 <translation id="3760460896538743390">Inspeccionar página &amp;en segundo plano</translation>
 <translation id="37613671848467444">Abrir en una ventana de &amp;incógnito</translation>
-<translation id="3763401818161139108">Ejecutar siempre en <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Información detallada de compilación</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Comunicarse con un dispositivo USB}other{Comunicarse con # dispositivos USB}}</translation>
 <translation id="3764986667044728669">Error de registro</translation>
@@ -1948,6 +1951,7 @@
 <translation id="3956702100721821638">No se ha podido acceder a Google Play</translation>
 <translation id="3958088479270651626">Importar marcadores y configuración</translation>
 <translation id="3960566196862329469">ONC</translation>
+<translation id="3965965397408324205">Salir de <ph name="PROFILE_NAME" /></translation>
 <translation id="3966072572894326936">Seleccionar otra carpeta...</translation>
 <translation id="3966388904776714213">Reproductor de audio</translation>
 <translation id="3967822245660637423">Descarga completa</translation>
@@ -1988,6 +1992,7 @@
 <translation id="4031910098617850788">F5</translation>
 <translation id="4033471457476425443">Añadir nueva carpeta</translation>
 <translation id="4034042927394659004">Reducir brillo de teclado</translation>
+<translation id="4034824040120875894">Impresora</translation>
 <translation id="4035758313003622889">Adminis&amp;trador de tareas</translation>
 <translation id="4036758022112812315">Selecciona lo que quieras escuchar y pulsa la tecla de búsqueda + S. También puedes mantener pulsada la tecla de búsqueda y hacer clic o arrastrar para seleccionar contenido.</translation>
 <translation id="4037084878352560732">Caballo</translation>
@@ -2072,6 +2077,7 @@
 <translation id="4181602000363099176">20x</translation>
 <translation id="4181841719683918333">Idiomas</translation>
 <translation id="4184885522552335684">Arrastra una pantalla para moverla</translation>
+<translation id="4192273449750167573">Revisa tu configuración en la siguiente pantalla</translation>
 <translation id="4193154014135846272">Documento de Google</translation>
 <translation id="4194570336751258953">Habilitar la función Tocar para hacer clic</translation>
 <translation id="4195643157523330669">Abrir en una pestaña nueva</translation>
@@ -2268,7 +2274,6 @@
 <translation id="4547992677060857254">La carpeta que has seleccionado contiene archivos confidenciales. ¿Seguro que quieres conceder a "$1" acceso de escritura permanente a esta carpeta?</translation>
 <translation id="4552031286893852992">Chrome ha bloqueado los anuncios en este sitio web porque suele mostrar anuncios invasivos.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Acceso a página</translation>
 <translation id="4552678318981539154">Comprar más almacenamiento</translation>
 <translation id="4554591392113183336">La versión de la extensión externa es igual o anterior a la actual.</translation>
 <translation id="4555769855065597957">Sombra</translation>
@@ -2320,6 +2325,7 @@
 <translation id="4632483769545853758">Activar sonido de pestaña</translation>
 <translation id="4633003931260532286">La extensión necesita "<ph name="IMPORT_NAME" />" con la versión "<ph name="IMPORT_VERSION" />" como mínimo, pero solo está instalada la versión "<ph name="INSTALLED_VERSION" />".</translation>
 <translation id="4634771451598206121">Volver a iniciar sesión...</translation>
+<translation id="4635398712689569051">La página <ph name="PAGE_NAME" /> no está disponible para los usuarios invitados.</translation>
 <translation id="4640525840053037973">Inicia sesión con tu cuenta de Google</translation>
 <translation id="4641539339823703554">Chrome no ha podido establecer la hora del sistema. Comprueba la hora a continuación y corrígela si es necesario.</translation>
 <translation id="4643612240819915418">&amp;Abrir vídeo en una pestaña nueva</translation>
@@ -2356,6 +2362,7 @@
     Si no te lo esperabas, ponte en contacto con el equipo de asistencia.</translation>
 <translation id="469230890969474295">Carpeta OEM</translation>
 <translation id="4692623383562244444">Motores de búsqueda</translation>
+<translation id="4694024090038830733">El administrador se encarga de configurar la impresora.</translation>
 <translation id="4697551882387947560">Al finalizar la sesión de navegación</translation>
 <translation id="4699172675775169585">Archivos e imágenes almacenados en caché</translation>
 <translation id="4699357559218762027">(con inicio automático)</translation>
@@ -2364,6 +2371,7 @@
 <translation id="4707934200082538898">Accede a tu dirección de correo electrónico <ph name="BEGIN_BOLD" /><ph name="MANAGER_EMAIL" /><ph name="END_BOLD" /> para obtener instrucciones adicionales.</translation>
 <translation id="4708794300267213770">Mostrar la pantalla de bloqueo al activar el dispositivo</translation>
 <translation id="4708849949179781599">Salir de <ph name="PRODUCT_NAME" /></translation>
+<translation id="4710251968215868702">Utiliza el contenido de los sitios web que visitas, así como las interacciones y la actividad del navegador.</translation>
 <translation id="4711638718396952945">Restaurar configuración</translation>
 <translation id="4713544552769165154">Este archivo está diseñado para un ordenador que utilice software de Macintosh. No es compatible con tu dispositivo, que utiliza Chrome OS. Puedes buscar una aplicación equivalente adecuada en <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" />.<ph name="BEGIN_LINK_HELP" />Más información<ph name="END_LINK_HELP" /></translation>
 <translation id="4714531393479055912"><ph name="PRODUCT_NAME" /> ya puede sincronizar tus contraseñas.</translation>
@@ -2730,6 +2738,7 @@
 <translation id="527605719918376753">Silenciar pestaña</translation>
 <translation id="527605982717517565">Permitir siempre JavaScript en <ph name="HOST" /></translation>
 <translation id="5280426389926346830">¿Quieres crear un acceso directo?</translation>
+<translation id="528208740344463258">Para descargar y utilizar aplicaciones de Android, primero debes instalar esta actualización. Mientras se actualiza tu <ph name="DEVICE_TYPE" />, no podrás usarlo. Tu <ph name="DEVICE_TYPE" /> se reiniciará cuando se complete la instalación.</translation>
 <translation id="5282733140964383898">Al habilitar la opción No realizar seguimiento, se incluirá una solicitud con tu tráfico de navegación. El efecto dependerá de si un sitio web responde a la solicitud y de cómo se interprete. Por ejemplo, algunos sitios web pueden responder a la solicitud mostrándote anuncios que no están basados en otros sitios web que has visitado. Muchos sitios web seguirán recogiendo y utilizando tus datos de navegación para, por ejemplo, mejorar la seguridad, proporcionar contenido, servicios, anuncios y recomendaciones sobre sus sitios web, y generar estadísticas de informes. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="5283677936944177147">¡Vaya! El sistema no ha podido determinar el número de serie o el modelo del dispositivo.</translation>
 <translation id="5284445933715251131">Seguir descargando</translation>
@@ -3091,6 +3100,7 @@
 <translation id="5807290661599647102">Establecer el bloqueo de pantalla</translation>
 <translation id="580926004266167721">No se ha podido vincular la máquina con el dominio. Esto podría deberse a que tu cuenta no tiene suficientes privilegios de la unidad organizativa.</translation>
 <translation id="580961539202306967">Preguntarme cuando un sitio quiera enviarme mensajes push (recomendado)</translation>
+<translation id="5809725759695043233">Tienes aplicaciones optimizadas para Chromebooks</translation>
 <translation id="5814126672212206791">Tipo de conexión</translation>
 <translation id="5815645614496570556">Dirección X.400</translation>
 <translation id="5817918615728894473">Vincular</translation>
@@ -3263,7 +3273,6 @@
 <translation id="6080515710685820702">¿Utilizas un ordenador compartido? Prueba a abrir una ventana de incógnito.</translation>
 <translation id="6080689532560039067">Comprueba la hora del sistema</translation>
 <translation id="6082651258230788217">Mostrar en la barra de herramientas</translation>
-<translation id="6086814797483779854">Ejecutar al hacer clic</translation>
 <translation id="6086846494333236931">Instalada por tu administrador</translation>
 <translation id="6087960857463881712">Cara de emoción</translation>
 <translation id="6089481419520884864">Convertir página</translation>
@@ -3454,9 +3463,11 @@
 <translation id="6383051423892982287">Cifrar los datos sincronizados con tu propia <ph name="BEGIN_LINK" />frase de contraseña de sincronización<ph name="END_LINK" /></translation>
 <translation id="6384275966486438344">Cambiar configuración de búsqueda por: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Los sitios web pueden guardar y consultar datos de cookies</translation>
+<translation id="6388429472088318283">Buscar idiomas</translation>
 <translation id="6388771388956873507">Busca el sensor de huellas digitales del dispositivo y tócalo con el dedo</translation>
 <translation id="6390799748543157332">Las páginas que aparezcan en esta ventana no se mostrarán en el historial del navegador y no dejarán otros rastros como cookies en el ordenador después de cerrar todas las ventanas abiertas de la sesión de invitado. No obstante, se conservará cualquier archivo que descargues.</translation>
 <translation id="6395423953133416962">Enviar <ph name="BEGIN_LINK2" />métricas<ph name="END_LINK2" /> e <ph name="BEGIN_LINK1" />información del sistema<ph name="END_LINK1" /></translation>
+<translation id="6397094776139756010">Opciones de sincronización y personalización</translation>
 <translation id="6397592254427394018">Abrir todos los marcadores en una ventana de &amp;incógnito</translation>
 <translation id="6398715114293939307">Quitar Google Play Store</translation>
 <translation id="6398765197997659313">Salir del modo de pantalla completa</translation>
@@ -3645,6 +3656,7 @@
 <translation id="6659594942844771486">Pestaña</translation>
 <translation id="6664237456442406323">Lamentablemente, tu ordenador está configurado con un identificador de hardware incorrecto. Esto impide que Chrome OS se actualice con los últimos parches de seguridad y hace que el ordenador <ph name="BEGIN_BOLD" />pueda ser vulnerable a ataques maliciosos<ph name="END_BOLD" />.</translation>
 <translation id="6664774537677393800">Se ha producido un error al abrir tu perfil. Cierra sesión y vuelve a iniciarla.</translation>
+<translation id="6670647982128220776">Las funciones relacionadas con la sincronización y la personalización se controlan desde una única opción. Es posible que, al activarla, cambie la configuración actual.</translation>
 <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation>
 <translation id="667517062706956822">¿Quieres que Google traduzca esta página de <ph name="SOURCE_LANGUAGE" /> a <ph name="TARGET_LANGUAGE" />?</translation>
 <translation id="6675665718701918026">Dispositivo señalador conectado</translation>
@@ -3759,6 +3771,7 @@
 <translation id="6841186874966388268">Errores</translation>
 <translation id="6843725295806269523">silenciar</translation>
 <translation id="6845038076637626672">Abrir de forma maximizada</translation>
+<translation id="685040365210406336">No hacer cambios</translation>
 <translation id="6851497530878285708">Aplicación habilitada</translation>
 <translation id="6853388645642883916">Herramienta de actualización no disponible</translation>
 <translation id="68541483639528434">Cerrar las demás pestañas</translation>
@@ -3958,6 +3971,7 @@
 <translation id="716810439572026343">Descargando <ph name="FILE_NAME" /></translation>
 <translation id="7168109975831002660">Tamaño mínimo de fuente</translation>
 <translation id="7170041865419449892">Fuera del alcance</translation>
+<translation id="7171559745792467651">Instala aplicaciones de tus otros dispositivos</translation>
 <translation id="7173917244679555">Parece que ya administras a un usuario con ese nombre. ¿Quieres <ph name="BEGIN_LINK" />importar a <ph name="PROFILE_NAME" /><ph name="END_LINK" /> a este dispositivo?</translation>
 <translation id="7175037578838465313">Configurar <ph name="NAME" /></translation>
 <translation id="7175353351958621980">Cargado desde:</translation>
@@ -4095,6 +4109,7 @@
           productos o servicios.<ph name="END_BOLD" /></translation>
 <translation id="7387829944233909572">Diálogo "Borrar datos de navegación"</translation>
 <translation id="7388044238629873883">Casi has terminado</translation>
+<translation id="7388222713940428051">Abrir ventana de invitado</translation>
 <translation id="7392118418926456391">Error en el análisis antivirus</translation>
 <translation id="7392915005464253525">Volv&amp;er a abrir ventana cerrada</translation>
 <translation id="7396845648024431313"><ph name="APP_NAME" /> empezará a ejecutarse cuando se inicie el sistema y seguirá ejecutándose en segundo plano aunque cierres todas las demás ventanas de <ph name="PRODUCT_NAME" />.</translation>
@@ -4312,6 +4327,7 @@
 <translation id="773426152488311044">Actualmente solo tú estás usando <ph name="PRODUCT_NAME" />.</translation>
 <translation id="7740996059027112821">Estándar</translation>
 <translation id="7748528009589593815">Pestaña anterior</translation>
+<translation id="7748626145866214022">Hay más opciones disponibles en la barra de acciones. Pulsa Alt + A para seleccionarla.</translation>
 <translation id="7751260505918304024">Mostrar todo</translation>
 <translation id="7754704193130578113">Preguntar dónde se guardará cada archivo antes de descargarlo</translation>
 <translation id="7758450972308449809">Ajusta los extremos de la pantalla</translation>
@@ -4376,6 +4392,7 @@
 <translation id="7831491651892296503">No se ha podido configurar la red</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
 <translation id="7832084384634357321">Hora de finalización</translation>
+<translation id="7832327313660264358">Los datos que sincronizas con Google y las funciones que utilizas no cambiarán</translation>
 <translation id="7833720883933317473">Las palabras personalizadas guardadas aparecerán aquí</translation>
 <translation id="7837307963048806839">•  $1</translation>
 <translation id="7837776265184002579">Tu página principal ha cambiado a <ph name="URL" />.</translation>
@@ -4401,7 +4418,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" />: vinculado</translation>
 <translation id="7870730066603611552">Revisar opciones de sincronización después de la configuración</translation>
 <translation id="7870790288828963061">No se ha encontrado ninguna aplicación de kiosco con una versión más reciente. No hay nada que actualizar. Extrae el dispositivo USB.</translation>
-<translation id="7874357055309047713">Ejecutar siempre en todos los sitios</translation>
 <translation id="7877451762676714207">Se ha producido un error desconocido en el servidor. Vuelve a intentarlo o ponte en contacto con el administrador del servidor.</translation>
 <translation id="7877680364634660272">Recorrido</translation>
 <translation id="7878562273885520351">Es posible que tu contraseña se haya vulnerado</translation>
@@ -4736,6 +4752,7 @@
 <translation id="8400146488506985033">Administrar usuarios</translation>
 <translation id="8410073653152358832">Utilizar este teléfono</translation>
 <translation id="8410775397654368139">Google Play</translation>
+<translation id="8411022984399993066">Sí, activar sincronización y personalización</translation>
 <translation id="8413385045638830869">Preguntar antes (recomendado)</translation>
 <translation id="8418445294933751433">Mo&amp;strar como pestaña</translation>
 <translation id="8419098111404128271">Resultados de búsqueda de "<ph name="SEARCH_TEXT" />"</translation>
@@ -4750,7 +4767,6 @@
 <translation id="8428634594422941299">Entendido</translation>
 <translation id="8431909052837336408">Cambiar PIN de la tarjeta SIM</translation>
 <translation id="8434480141477525001">Puerto de depuración NaCl</translation>
-<translation id="8437331208797669910">Acceso a página</translation>
 <translation id="843760761634048214">Guarda la tarjeta de crédito</translation>
 <translation id="8438328416656800239">Cambia a un navegador inteligente</translation>
 <translation id="8439506636278576865">Ofrecer la traducción de páginas en este idioma</translation>
@@ -4781,6 +4797,7 @@
 <translation id="8470028084415844044">Activa la sincronización para tener tus contraseñas en todos tus dispositivos.</translation>
 <translation id="8470513973197838199">Contraseñas guardadas de <ph name="ORIGIN" /></translation>
 <translation id="8472623782143987204">respaldado por hardware</translation>
+<translation id="8474229360677287535">Cerrar todas las ventanas</translation>
 <translation id="8475313423285172237">Otro programa de tu ordenador ha añadido una extensión que puede cambiar el funcionamiento de Chrome.</translation>
 <translation id="8475647382427415476">Google Drive no ha podido sincronizar <ph name="FILENAME" /> en este momento. Este servicio volverá a intentarlo más tarde.</translation>
 <translation id="8477241577829954800">Reemplazado</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index d82b6a6..5eceb9b 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Järjehoidjate kasutajaliidese muutmine</translation>
 <translation id="2422426094670600218">&lt;nimeta&gt;</translation>
 <translation id="2423578206845792524">Sa&amp;lvesta pilt nimega...</translation>
-<translation id="2424091190911472304">Käita alati saidil <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Failide kogumaht</translation>
 <translation id="2428510569851653187">Kirjeldage, mida te vahelehe kokkujooksmise ajal tegite</translation>
 <translation id="2431027948063157455">Google'i assistendi laadimine nurjus, kontrollige võrguühendust ja proovige uuesti.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">Installimine</translation>
 <translation id="2841837950101800123">Pakkuja</translation>
 <translation id="2843806747483486897">Muuda vaikeseadeid ...</translation>
-<translation id="2844111009524261443">Käita klõpsamisel</translation>
 <translation id="2845382757467349449">Kuva alati järjehoidjariba</translation>
 <translation id="2847759467426165163">Ülekandmine seadmesse</translation>
 <translation id="284805635805850872">Kas eemaldada kahjulik tarkvara?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Sellel lehel takistati küpsiste seadistamine.</translation>
 <translation id="3308134619352333507">Nupp Peida</translation>
 <translation id="3308852433423051161">Google'i assistendi laadimine …</translation>
-<translation id="3309747692199697901">Käita alati kõikidel saitidel</translation>
 <translation id="3312424061798279731">Lubatud keeled</translation>
 <translation id="3313590242757056087">Selleks et määrata, milliseid veebisaite valvatav kasutaja näeb, saate seadistada
     piirangud ja seaded lehel <ph name="MANAGEMENT_URL" />.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Veebilehtede osade blokeerimine</translation>
 <translation id="3760460896538743390">Uuri &amp;taustalehte</translation>
 <translation id="37613671848467444">&amp;Ava inkognito aknas</translation>
-<translation id="3763401818161139108">Käita alati saidil <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Üksikasjalik järguteave</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Ühendus USB-seadmega}other{Ühendus # USB-seadmega}}</translation>
 <translation id="3764986667044728669">Ei saa registreerida</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">Valitud fail sisaldab tundlikke faile. Kas soovite kindlasti anda kasutajale „$1” püsiva juurdepääsu selles kaustas kirjutamiseks?</translation>
 <translation id="4552031286893852992">Chrome blokeeris sellel saidil reklaamid, kuna sait esitab sekkuvaid reklaame.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Juurdepääs lehele</translation>
 <translation id="4552678318981539154">Ostke rohkem salvestusruumi</translation>
 <translation id="4554591392113183336">Välise laienduse versioon on sama või vanem mis olemasoleval.</translation>
 <translation id="4555769855065597957">Vari</translation>
@@ -3267,7 +3262,6 @@
 <translation id="6080515710685820702">Kas kasutate jagatud arvutit? Proovige avada inkognito aken.</translation>
 <translation id="6080689532560039067">Süsteemiaja kontrollimine</translation>
 <translation id="6082651258230788217">Tööriistaribal kuvamine</translation>
-<translation id="6086814797483779854">Käita klõpsamisel</translation>
 <translation id="6086846494333236931">Selle installis administraator</translation>
 <translation id="6087960857463881712">Lahe nägu</translation>
 <translation id="6089481419520884864">Lehe teisendamine</translation>
@@ -4407,7 +4401,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – seotud</translation>
 <translation id="7870730066603611552">Vaata sünkroonimisvalikud pärast seadistust üle</translation>
 <translation id="7870790288828963061">Ühtegi uuema versiooniga kioski rakendust ei leitud. Midagi pole värskendada. Eemaldage USB-mälupulk.</translation>
-<translation id="7874357055309047713">Käita alati kõikidel saitidel</translation>
 <translation id="7877451762676714207">Tundmatu serveriviga. Proovige uuesti või võtke ühendust serveri administraatoriga.</translation>
 <translation id="7877680364634660272">Tutvustus</translation>
 <translation id="7878562273885520351">Teie parool võib olla ohus</translation>
@@ -4757,7 +4750,6 @@
 <translation id="8428634594422941299">Selge</translation>
 <translation id="8431909052837336408">Muuda SIM-kaardi PIN-koodi</translation>
 <translation id="8434480141477525001">NaCl silumisport</translation>
-<translation id="8437331208797669910">Juurdepääs lehele</translation>
 <translation id="843760761634048214">Krediitkaardi salvestamine</translation>
 <translation id="8438328416656800239">Minge üle nutikale brauserile</translation>
 <translation id="8439506636278576865">Paku selles keeles olevate lehtede tõlkimist</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 326ff44..2da0ce7 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">تغییر رابط کاربر نشانک‌ها</translation>
 <translation id="2422426094670600218">&lt;unnamed&gt;</translation>
 <translation id="2423578206845792524">ذ&amp;خیره فایل تصویری به‌عنوان...</translation>
-<translation id="2424091190911472304">همیشه در <ph name="ORIGIN" /> اجرا شود</translation>
 <translation id="2425665904502185219">حجم کل فایل</translation>
 <translation id="2428510569851653187">توضیح دهید وقتی برگه خراب شد مشغول انجام چه کاری بودید</translation>
 <translation id="2431027948063157455">‏«دستیار Google» بارگیری نشد. لطفاً اتصال شبکه را بررسی کرده و دوباره امتحان کنید.</translation>
@@ -1196,7 +1195,6 @@
 <translation id="2838379631617906747">درحال نصب</translation>
 <translation id="2841837950101800123">ارائه‌دهنده</translation>
 <translation id="2843806747483486897">تغییر پیش‌فرض...</translation>
-<translation id="2844111009524261443">با کلیک کردن اجرا شود</translation>
 <translation id="2845382757467349449">همیشه نوار نشانک‌ها نمایش داده شود</translation>
 <translation id="2847759467426165163">فرستادن به</translation>
 <translation id="284805635805850872">نرم‌افزار مضر پاک شود؟</translation>
@@ -1508,7 +1506,6 @@
 <translation id="3308116878371095290">این صفحه نمی‌تواند کوکی‌ها را تنظیم کند.</translation>
 <translation id="3308134619352333507">دکمه پنهان کردن</translation>
 <translation id="3308852433423051161">‏درحال بارگیری «دستیار Google»…</translation>
-<translation id="3309747692199697901">همیشه در همه سایت‌ها اجرا شود</translation>
 <translation id="3312424061798279731">زبان‌های فعال</translation>
 <translation id="3313590242757056087">برای تنظیم این که کاربر نظارت‌شده مجاز به مشاهده چه وب‌سایت‌هایی باشد، می‌توانید
     با بازدید از <ph name="MANAGEMENT_URL" /> محدودیت‌ها و تنظیمات را پیکربندی کنید.
@@ -1733,7 +1730,7 @@
 <translation id="3646789916214779970">بازنشانی به طرح زمینه پیش‌فرض</translation>
 <translation id="3648348069317717750"><ph name="USB_DEVICE_NAME" /> شناسایی شد</translation>
 <translation id="3649138363871392317">عکس گرفته شد</translation>
-<translation id="3650952250015018111">اجازه به <ph name="APP_NAME" /> برای دسترسی به:</translation>
+<translation id="3650952250015018111">اجازه به «<ph name="APP_NAME" />» برای دسترسی به:</translation>
 <translation id="3651488188562686558">‏قطع اتصال Wi-Fi</translation>
 <translation id="3652817283076144888">مقداردهی اولیه</translation>
 <translation id="3653999333232393305">ادامه اجازه به <ph name="HOST" /> برای دسترسی به میکروفون</translation>
@@ -1806,7 +1803,6 @@
 <translation id="3759933321830434300">مسدود کردن بخش‌هایی از صفحات وب</translation>
 <translation id="3760460896538743390">بازرسی صفحه &amp;پس‌زمینه</translation>
 <translation id="37613671848467444">باز کردن در پنجره &amp;ناشناس</translation>
-<translation id="3763401818161139108">همیشه در <ph name="ORIGIN" /> اجرا شود</translation>
 <translation id="3764314093345384080">اطلاعات دقیق ساخت</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{‏ارتباط با یک دستگاه USB}one{‏ارتباط با # دستگاه USB}other{‏ارتباط با # دستگاه USB}}</translation>
 <translation id="3764986667044728669">ثبت‌نام ممکن نیست</translation>
@@ -2267,7 +2263,6 @@
 <translation id="4547992677060857254">پوشه‌ای که انتخاب کرده‌اید، حاوی فایل‌های حساسی است. آیا مطمئنید که می‌خواهید به «$1» دسترسی دائم نوشتن در این پوشه را اعطا کنید؟</translation>
 <translation id="4552031286893852992">‏چون این سایت تمایل دارد آگهی‌های مزاحم نشان دهد، Chrome آگهی‌ها را در این سایت مسدود کرد.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">دسترسی به صفحه</translation>
 <translation id="4552678318981539154">خرید فضای ذخیره بیشتر</translation>
 <translation id="4554591392113183336">برنامه افزودنی خارجی در مقایسه با برنامه کنونی، دارای همان نسخه یا نسخه پایین‌تر است.</translation>
 <translation id="4555769855065597957">سایه</translation>
@@ -3263,7 +3258,6 @@
 <translation id="6080515710685820702">از رایانه مشترکی استفاده می‌کنید؟ پنجره ناشناس را امتحان کنید.</translation>
 <translation id="6080689532560039067">بررسی زمان سیستم</translation>
 <translation id="6082651258230788217">نمایش در نوار ابزار</translation>
-<translation id="6086814797483779854">با کلیک کردن اجرا شود</translation>
 <translation id="6086846494333236931">سرپرست سیستم شما نصب کرده است.</translation>
 <translation id="6087960857463881712">چهره تأثیرگذار</translation>
 <translation id="6089481419520884864">صفحه فشرده</translation>
@@ -4404,7 +4398,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - مرتبط</translation>
 <translation id="7870730066603611552">مرور گزینه‌های همگام‌سازی به دنبال راه‌اندازی</translation>
 <translation id="7870790288828963061">‏برنامه‌های کیوسکی با نسخه جدیدتر پیدا نشد. موردی برای به‌روزرسانی وجود ندارد. لطفاً فلش USB را خارج کنید.</translation>
-<translation id="7874357055309047713">همیشه در همه سایت‌ها اجرا شود</translation>
 <translation id="7877451762676714207">خطای سرور ناشناس. لطفاً دوباره سعی کنید یا با سرپرست سرور تماس بگیرید.</translation>
 <translation id="7877680364634660272">گشت</translation>
 <translation id="7878562273885520351">ممکن است گذرواژه‌تان درمعرض خطر باشد</translation>
@@ -4753,7 +4746,6 @@
 <translation id="8428634594422941299">متوجه شدم</translation>
 <translation id="8431909052837336408">تغییر پین سیم</translation>
 <translation id="8434480141477525001">‏درگاه اشکال‌زدایی NaCl</translation>
-<translation id="8437331208797669910">دسترسی به صفحه</translation>
 <translation id="843760761634048214">ذخیره کارت اعتباری</translation>
 <translation id="8438328416656800239">به مرورگر هوشمندی جابه‌جا شوید</translation>
 <translation id="8439506636278576865">ترجمه صفحات نوشته شده به این زبان پیشنهاد داده شود</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index c58f5a35..bdff89f 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Muokata kirjanmerkkien käyttöliittymää</translation>
 <translation id="2422426094670600218">&lt;nimetön&gt;</translation>
 <translation id="2423578206845792524">T&amp;allenna kuva nimellä...</translation>
-<translation id="2424091190911472304">Suorita aina sivustolla <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Tiedostokoko yhteensä</translation>
 <translation id="2428510569851653187">Kerro, mitä olit tekemässä juuri ennen kaatumista.</translation>
 <translation id="2431027948063157455">Google Assistantin lataaminen epäonnistui. Tarkista verkkoyhteys ja yritä uudelleen.</translation>
@@ -1201,7 +1200,6 @@
 <translation id="2838379631617906747">Asennetaan</translation>
 <translation id="2841837950101800123">Tarjoaja</translation>
 <translation id="2843806747483486897">Muuta oletuksia...</translation>
-<translation id="2844111009524261443">Suorita klikattaessa</translation>
 <translation id="2845382757467349449">Näytä kirjanmerkkipalkki aina</translation>
 <translation id="2847759467426165163">Lähetä laitteelle</translation>
 <translation id="284805635805850872">Poistetaanko haittaohjelmia?</translation>
@@ -1513,7 +1511,6 @@
 <translation id="3308116878371095290">Tämä sivu ei saa asettaa evästeitä.</translation>
 <translation id="3308134619352333507">Piilota painike</translation>
 <translation id="3308852433423051161">Ladataan Google Assistantia…</translation>
-<translation id="3309747692199697901">Suorita aina kaikilla sivustoilla</translation>
 <translation id="3312424061798279731">Käytössä olevat kielet</translation>
 <translation id="3313590242757056087">Jos haluat määrittää, mitä verkkosivustoja valvottu käyttäjä voi katsella, voit määrittää rajoitukset
     ja asetukset osoitteessa <ph name="MANAGEMENT_URL" />.
@@ -1811,7 +1808,6 @@
 <translation id="3759933321830434300">Estä joitain verkkosivujen osia</translation>
 <translation id="3760460896538743390">Tarkista &amp;taustasivu</translation>
 <translation id="37613671848467444">Avaa incognito-ikkunassa</translation>
-<translation id="3763401818161139108">Suorita aina sivustolla <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Koontiversion yksityiskohtaiset tiedot</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Käyttää USB-laitetta}other{Käyttää # USB-laitetta}}</translation>
 <translation id="3764986667044728669">Ilmoittautuminen ei onnistu</translation>
@@ -2269,7 +2265,6 @@
 <translation id="4547992677060857254">Valitsemasi kansio sisältää arkaluonteisia tiedostoja. Haluatko varmasti myöntää käyttäjälle "$1" pysyvän kirjoitusoikeuden tähän kansioon?</translation>
 <translation id="4552031286893852992">Chrome esti mainokset tällä sivustolla, koska se näyttää häiritseviä mainoksia.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Sivun käyttöoikeus</translation>
 <translation id="4552678318981539154">Osta lisää tallennustilaa</translation>
 <translation id="4554591392113183336">Ulkoinen laajennus on sama tai aiempi versio kuin nykyinen.</translation>
 <translation id="4555769855065597957">Varjo</translation>
@@ -3265,7 +3260,6 @@
 <translation id="6080515710685820702">Onko tietokoneellasi muitakin käyttäjiä? Selaa verkkoa incognito-ikkunassa.</translation>
 <translation id="6080689532560039067">Tarkista järjestelmän aika</translation>
 <translation id="6082651258230788217">Näytä yläpalkissa</translation>
-<translation id="6086814797483779854">Suorita klikattaessa</translation>
 <translation id="6086846494333236931">Järjestelmänvalvojasi asentama</translation>
 <translation id="6087960857463881712">Eeppinen hymiö</translation>
 <translation id="6089481419520884864">Koontisivu</translation>
@@ -4405,7 +4399,6 @@
 <translation id="786957569166715433">Laitepari muodostettu laitteen <ph name="DEVICE_NAME" /> kanssa</translation>
 <translation id="7870730066603611552">Tarkista synkronointiasetukset määrityksen jälkeen</translation>
 <translation id="7870790288828963061">Ei löytynyt kioskisovelluksia, joiden versio on uudempi. Ei päivitettävää. Irrota USB-tikku.</translation>
-<translation id="7874357055309047713">Suorita aina kaikilla sivustoilla</translation>
 <translation id="7877451762676714207">Tuntematon palvelinvirhe. Yritä uudelleen tai ota yhteyttä palvelimen järjestelmänvalvojaan.</translation>
 <translation id="7877680364634660272">Esittely</translation>
 <translation id="7878562273885520351">Salasanasi on saattanut vaarantua.</translation>
@@ -4754,7 +4747,6 @@
 <translation id="8428634594422941299">Selvä</translation>
 <translation id="8431909052837336408">Vaihda SIM-kortin PIN-koodi</translation>
 <translation id="8434480141477525001">NaCl-vianetsintäportti</translation>
-<translation id="8437331208797669910">Sivun käyttöoikeus</translation>
 <translation id="843760761634048214">Tallenna luottokortti.</translation>
 <translation id="8438328416656800239">Siirry käyttämään älykästä selainta.</translation>
 <translation id="8439506636278576865">Tarjoudu kääntämään sivuja tälle kielelle</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 296aac6..7a0164e 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Baguhin ang user interface ng mga bookmark</translation>
 <translation id="2422426094670600218">&lt;unnamed&gt;</translation>
 <translation id="2423578206845792524">I-sa&amp;ve ang larawan bilang...</translation>
-<translation id="2424091190911472304">Patakbuhin sa <ph name="ORIGIN" /> sa Lahat ng Pagkakataon</translation>
 <translation id="2425665904502185219">Kabuuang laki ng file</translation>
 <translation id="2428510569851653187">Ilarawan ang ginagawa mo noong nag-crash ang tab</translation>
 <translation id="2431027948063157455">Hindi na-load ang Google Assistant, pakitingnan ang iyong koneksyon sa network at subukang muli.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">Nag-i-install</translation>
 <translation id="2841837950101800123">Provider</translation>
 <translation id="2843806747483486897">Baguhin ang default...</translation>
-<translation id="2844111009524261443">Patakbuhin kapag na-click</translation>
 <translation id="2845382757467349449">Palaging Ipakita ang Bookmarks Bar</translation>
 <translation id="2847759467426165163">I-cast sa</translation>
 <translation id="284805635805850872">Alisin ang mapaminsalang software?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Naharangan ang pahinang ito mula sa pagtatakda ng cookies.</translation>
 <translation id="3308134619352333507">Itago ang Button</translation>
 <translation id="3308852433423051161">Nilo-load ang Google Assistant...</translation>
-<translation id="3309747692199697901">Patakbuhin sa Lahat ng Site sa Lahat ng Pagkakataon</translation>
 <translation id="3312424061798279731">Mga naka-enable na wika</translation>
 <translation id="3313590242757056087">Upang itakda kung aling mga website ang maaring tingnan ng pinangangasiwaang user, maisasaayos mo ang mga paghihigpit
     at setting sa pamamagitan ng pagbisita sa <ph name="MANAGEMENT_URL" />.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Mag-block ng mga bahagi ng mga web page</translation>
 <translation id="3760460896538743390">Siyasatin ang Pahina ng &amp;Background</translation>
 <translation id="37613671848467444">Buksan sa &amp;Incognito Window</translation>
-<translation id="3763401818161139108">Patakbuhin sa <ph name="ORIGIN" /> sa lahat ng pagkakataon</translation>
 <translation id="3764314093345384080">Detalyadong impormasyon ng build</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Kumonekta sa isang USB device}one{Kumonekta sa # USB device}other{Kumonekta sa # na USB device}}</translation>
 <translation id="3764986667044728669">Hindi ma-enroll</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">Naglalaman ng mga sensitibong file ang folder na iyong pinili. Sigurado ka bang gusto mong magbigay ng "PhP50" na permanenteng write access sa folder na ito?</translation>
 <translation id="4552031286893852992">Na-block ng Chrome ang mga ad sa site na ito dahil malamang na magpakita ang site na ito ng mga nakakasagabal na ad.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Access sa Page</translation>
 <translation id="4552678318981539154">Bumili ng higit pang storage</translation>
 <translation id="4554591392113183336">Pareho o mas mababa ang bersyon ng external na extension kumpara sa umiiral nang extension.</translation>
 <translation id="4555769855065597957">Shadow</translation>
@@ -3267,7 +3262,6 @@
 <translation id="6080515710685820702">Gumagamit ng nakabahaging computer? Subukang magbukas ng incognito window.</translation>
 <translation id="6080689532560039067">Tingnan ang iyong oras sa system</translation>
 <translation id="6082651258230788217">Ipakita sa toolbar</translation>
-<translation id="6086814797483779854">Patakbuhin kapag Na-click</translation>
 <translation id="6086846494333236931">Na-install ng iyong administrator</translation>
 <translation id="6087960857463881712">Astig na mukha</translation>
 <translation id="6089481419520884864">Distill page</translation>
@@ -4407,7 +4401,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Nakapares</translation>
 <translation id="7870730066603611552">Suriin ang mga opsyon sa pag-sync pagkatapos ng pag-set up</translation>
 <translation id="7870790288828963061">Walang nahanap na mga Kiosk app na may mas bagong bersyon. Walang ia-update. Mangyaring alisin ang USB stick.</translation>
-<translation id="7874357055309047713">Patakbuhin sa lahat ng site sa lahat ng pagkakataon</translation>
 <translation id="7877451762676714207">Hindi alam na error sa server. Pakisubukang muli, o makipag-ugnay sa administrator ng server.</translation>
 <translation id="7877680364634660272">Paglilibot</translation>
 <translation id="7878562273885520351">Maaaring makompromismo ang iyong password</translation>
@@ -4756,7 +4749,6 @@
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431909052837336408">Palitan ang PIN ng SIM</translation>
 <translation id="8434480141477525001">NaCl Debug Port</translation>
-<translation id="8437331208797669910">Access sa page</translation>
 <translation id="843760761634048214">I-save ang credit card</translation>
 <translation id="8438328416656800239">Lumipat sa isang mahusay na browser</translation>
 <translation id="8439506636278576865">Mag-alok na magsalin ng mga page sa wikang ito
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index c556449..f94f59ff8 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Modifier l'interface utilisateur des favoris</translation>
 <translation id="2422426094670600218">&lt;sans nom&gt;</translation>
 <translation id="2423578206845792524">En&amp;registrer l'image sous...</translation>
-<translation id="2424091190911472304">Toujours exécuter pour <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Taille totale des fichiers</translation>
 <translation id="2428510569851653187">Décrivez ce que vous faisiez lorsque l'onglet a planté</translation>
 <translation id="2431027948063157455">Impossible de charger l'Assistant Google. Veuillez vérifier votre connexion réseau et réessayer.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">Installation en cours…</translation>
 <translation id="2841837950101800123">Fournisseur</translation>
 <translation id="2843806747483486897">Modifier l'action par défaut…</translation>
-<translation id="2844111009524261443">Exécuter en cas de clic</translation>
 <translation id="2845382757467349449">Toujours afficher la barre de favoris</translation>
 <translation id="2847759467426165163">Caster sur</translation>
 <translation id="284805635805850872">Supprimer le logiciel malveillant ?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Le stockage des cookies n'est pas autorisé pour cette page.</translation>
 <translation id="3308134619352333507">Masquer le bouton</translation>
 <translation id="3308852433423051161">Chargement de l'Assistant Google…</translation>
-<translation id="3309747692199697901">Toujours exécuter pour tous les sites</translation>
 <translation id="3312424061798279731">Langues activées</translation>
 <translation id="3313590242757056087">Pour définir les sites Web que l'utilisateur supervisé peut consulter, vous pouvez configurer des restrictions
     et des paramètres sur le site <ph name="MANAGEMENT_URL" />.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Bloquer des parties de pages Web</translation>
 <translation id="3760460896538743390">Inspecter la page d'&amp;arrière-plan</translation>
 <translation id="37613671848467444">Ouvrir dans une fenêtre de &amp;navigation privée</translation>
-<translation id="3763401818161139108">Toujours exécuter pour <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Informations détaillées sur la version</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Communication avec un appareil USB}one{Communication avec # appareil USB}other{Communication avec # appareils USB}}</translation>
 <translation id="3764986667044728669">Impossible de s'inscrire</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">Le dossier que vous avez sélectionné contient des fichiers sensibles. Voulez-vous vraiment accorder à "$1" un accès en écriture permanent à ce dossier ?</translation>
 <translation id="4552031286893852992">Chrome a bloqué les annonces sur ce site, car ce dernier a tendance à afficher des annonces intrusives.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Accès à la page</translation>
 <translation id="4552678318981539154">Acheter de l'espace de stockage supplémentaire</translation>
 <translation id="4554591392113183336">La version d'extension externe est identique ou antérieure à la version existante.</translation>
 <translation id="4555769855065597957">Duplicata</translation>
@@ -3268,7 +3263,6 @@
 <translation id="6080515710685820702">Vous utilisez un ordinateur partagé ? Essayez d'ouvrir une fenêtre de navigation privée.</translation>
 <translation id="6080689532560039067">Vérifier l'heure du système</translation>
 <translation id="6082651258230788217">Afficher dans la barre d'outils</translation>
-<translation id="6086814797483779854">Exécuter en cas de clic</translation>
 <translation id="6086846494333236931">Installée par votre administrateur</translation>
 <translation id="6087960857463881712">Visage "Génial"</translation>
 <translation id="6089481419520884864">Convertir la page</translation>
@@ -4408,7 +4402,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> associé</translation>
 <translation id="7870730066603611552">Vérifier les options de synchronisation après la configuration</translation>
 <translation id="7870790288828963061">Aucune nouvelle version d'une application kiosque n'a été trouvée. Aucune mise à jour n'est disponible. Veuillez débrancher la clé USB.</translation>
-<translation id="7874357055309047713">Toujours exécuter pour tous les sites</translation>
 <translation id="7877451762676714207">Erreur serveur inconnue. Veuillez réessayer ou contacter l'administrateur du serveur.</translation>
 <translation id="7877680364634660272">Visite</translation>
 <translation id="7878562273885520351">Votre mot de passe a peut-être été piraté</translation>
@@ -4757,7 +4750,6 @@
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431909052837336408">Modifier le code de la SIM</translation>
 <translation id="8434480141477525001">Port de débogage de Native Client</translation>
-<translation id="8437331208797669910">Accès à la page</translation>
 <translation id="843760761634048214">Enregistrer les informations de la carte de paiement</translation>
 <translation id="8438328416656800239">Passez à un navigateur intelligent</translation>
 <translation id="8439506636278576865">Proposer de traduire les pages dans cette langue</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index d5777ff..e199643 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -908,7 +908,6 @@
 <translation id="2413749388954403953">બુકમાર્ક્સ વપરાશકર્તા ઇન્ટરફેસ બદલો</translation>
 <translation id="2422426094670600218">&lt;અનામાંકિત&gt;</translation>
 <translation id="2423578206845792524">છબીને આ રૂપે સા&amp;ચવો...</translation>
-<translation id="2424091190911472304">હંમેશાં <ph name="ORIGIN" /> પર શરૂ કરો</translation>
 <translation id="2425665904502185219">કુલ ફાઇલ કદ</translation>
 <translation id="2428510569851653187">ટૅબ ક્રેશ થઈ ત્યારે તમે શું કરતા હતા તેનું વર્ણન કરો</translation>
 <translation id="2431027948063157455">Google સહાયક લોડ થવામાં અસમર્થ રહ્યું, કૃપા કરીને તમારું નેટવર્ક કનેક્શન તપાસો અને ફરી પ્રયાસ કરો.</translation>
@@ -1196,7 +1195,6 @@
 <translation id="2838379631617906747">ઇન્સ્ટોલ કરી રહ્યું છે</translation>
 <translation id="2841837950101800123">પ્રદાતા</translation>
 <translation id="2843806747483486897">ડિફૉલ્ટ બદલો...</translation>
-<translation id="2844111009524261443">ક્લિક કરવા પર શરૂ કરો</translation>
 <translation id="2845382757467349449">બુકમાર્ક્સ બાર હંમેશા બતાવો</translation>
 <translation id="2847759467426165163">આના પર કાસ્ટ કરો</translation>
 <translation id="284805635805850872">નુકસાનકારક સૉફ્ટવેર દૂર કરીએ?</translation>
@@ -1508,7 +1506,6 @@
 <translation id="3308116878371095290">આ પૃષ્ઠને કૂકીઝ સેટ કરવાથી અટકાવવામાં આવ્યું હતું.</translation>
 <translation id="3308134619352333507">બટન છુપાવો</translation>
 <translation id="3308852433423051161">Google સહાયક લોડ કરી રહ્યાં છીએ...</translation>
-<translation id="3309747692199697901">હંમેશાં બધી સાઇટ્સ પર ચલાવો</translation>
 <translation id="3312424061798279731">સક્ષમ કરેલ ભાષાઓ</translation>
 <translation id="3313590242757056087">નિરીક્ષણ કરેલ વપરાશકર્તા કઈ વેબસાઇટ્સ જોઈ શકે છે તે સેટ કરવા માટે, તમે પ્રતિબંધો અને
     સેટિંગ્સને <ph name="MANAGEMENT_URL" /> ની મુલાકાત લઈને ગોઠવી શકો છો.
@@ -1806,7 +1803,6 @@
 <translation id="3759933321830434300">વેબ પૃષ્ઠોના અવરોધિત ભાગ</translation>
 <translation id="3760460896538743390">&amp;પૃષ્ઠભૂમિ પૃષ્ઠની તપાસ કરો</translation>
 <translation id="37613671848467444">&amp;છુપી વિંડોમાં ખોલો</translation>
-<translation id="3763401818161139108">હંમેશાં <ph name="ORIGIN" /> પર શરૂ કરો</translation>
 <translation id="3764314093345384080">વિગતવાર બિલ્ડ માહિતી</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{એક USB ઉપકરણ સાથે સંચાર કરો}one{# USB ઉપકરણો સાથે સંચાર કરો}other{# USB ઉપકરણો સાથે સંચાર કરો}}</translation>
 <translation id="3764986667044728669">નોંધણી કરવામાં અસમર્થ</translation>
@@ -2267,7 +2263,6 @@
 <translation id="4547992677060857254">તમે પસંદ કરેલું ફોલ્ડર સંવેદનશીલ ફાઇલો ધરાવે છે. શું તમે ખરેખર "$1" ને આ ફોલ્ડરની કાયમી લખવાની ઍક્સેસ આપવા માંગો છો?</translation>
 <translation id="4552031286893852992">આ સાઇટ ખલેલ પાડતી જાહેરાતો બતાવવાનું વલણ ધરાવે છે તેથી Chrome એ આ સાઇટની જાહેરાતો અવરોધિત કરી છે.</translation>
 <translation id="4552089082226364758">ફ્લેશ</translation>
-<translation id="4552495056028768700">પૃષ્ઠ ઍક્સેસ</translation>
 <translation id="4552678318981539154">વધુ સ્ટોરેજ ખરીદો</translation>
 <translation id="4554591392113183336">બાહ્ય એક્સટેન્શન હાલના એક્સટેન્શનની સરખામણીએ સમાન અથવા નીચલા સંસ્કરણ પર છે.</translation>
 <translation id="4555769855065597957">શેડો</translation>
@@ -2772,7 +2767,7 @@
 <translation id="5334142896108694079">સ્ક્રિપ્ટ કેશ</translation>
 <translation id="5334844597069022743">સ્રોત જુઓ</translation>
 <translation id="5335458522276292100"><ph name="BEGIN_LINK" />Google ડ્રાઇવ<ph name="END_LINK" />માં <ph name="FILE_COUNT" />નો બૅકઅપ લઈ રહ્યાં છીએ</translation>
-<translation id="5336126339807372270">કોઈ પણ સાઇટને USB ઉપકરણો ઍક્સેસ કરવાની મંજૂરી આપશો નહીં</translation>
+<translation id="5336126339807372270">કોઈપણ સાઇટને USB ઉપકરણો ઍક્સેસ કરવાની મંજૂરી આપશો નહીં</translation>
 <translation id="5337771866151525739">તૃતીય-પક્ષ દ્વારા ઇન્સ્ટોલ કરેલું.</translation>
 <translation id="5338503421962489998">સ્થાનિક સ્ટોરેજ</translation>
 <translation id="5340217413897845242">શેલ્ફ આઇટમ 6</translation>
@@ -3263,7 +3258,6 @@
 <translation id="6080515710685820702">શેર કરેલા કમ્પ્યુટરનો ઉપયોગ કરી રહ્યા છો? છુપી વિંડો ખોલવાનો પ્રયાસ કરો.</translation>
 <translation id="6080689532560039067">તમારી સિસ્ટમનો સમય તપાસો</translation>
 <translation id="6082651258230788217">ટુલબારમાં દર્શાવો</translation>
-<translation id="6086814797483779854">ક્લિક કરવા પર શરૂ કરો</translation>
 <translation id="6086846494333236931">તમારા વ્યવસ્થાપક દ્વારા ઇન્સ્ટોલ કરાયું</translation>
 <translation id="6087960857463881712">અદ્ભુત ચહેરો</translation>
 <translation id="6089481419520884864">Distill પૃષ્ઠ</translation>
@@ -3399,7 +3393,7 @@
 <translation id="6286708577777130801">સાચવેલ પાસવર્ડની વિગતો</translation>
 <translation id="6287852322318138013">આ ફાઇલ ખોલવા માટે એક ઍપ્લિકેશન પસંદ કરો</translation>
 <translation id="6290556621549272952">તમે Chromium માંથી તમારા TV પર અથવા અન્ય ઉપકરણ પર સામગ્રી પ્રદર્શિત કરવા માટે આ સુવિધાનો ઉપયોગ કરી શકો છો.</translation>
-<translation id="6291949900244949761">જ્યારે કોઈ સાઇટ USB ઉપકરણોને ઍક્સેસ કરવા માગે ત્યારે પૂછો (ભલામણ કરેલ)</translation>
+<translation id="6291949900244949761">જ્યારે કોઈ સાઇટ USB ઉપકરણોને ઍક્સેસ કરવા માગે ત્યારે પૂછો (સુઝાવ આપેલ)</translation>
 <translation id="6291953229176937411">ફાઇન્ડર માં &amp;બતાવો</translation>
 <translation id="6295158916970320988">બધી સાઇટ્સ</translation>
 <translation id="6295855836753816081">સાચવી રહ્યું છે...</translation>
@@ -4399,7 +4393,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - જોડી કરેલ</translation>
 <translation id="7870730066603611552">સેટઅપ કર્યા પછી સિંક વિકલ્પો રિવ્યૂ કરો</translation>
 <translation id="7870790288828963061">નવા સંસ્કરણ સાથેની કોઇ કિઓસ્ક ઍપ્લિકેશનો મળી નથી. અપડેટ કરવા માટે કંઇ નથી. કૃપા કરીને USB સ્ટીક દૂર કરો.</translation>
-<translation id="7874357055309047713">હંમેશાં બધી સાઇટ્સ પર ચલાવો</translation>
 <translation id="7877451762676714207">અજ્ઞાત સર્વર ભૂલ. કૃપા કરી ફરીથી પ્રયત્ન કરો અથવા સર્વર વ્યવસ્થાપકનો સંપર્ક કરો.</translation>
 <translation id="7877680364634660272">પ્રવાસ</translation>
 <translation id="7878562273885520351">તમારા પાસવર્ડ સાથે ચેડાં થઈ શકે છે</translation>
@@ -4742,7 +4735,6 @@
 <translation id="8428634594422941299">સમજાઈ ગયું</translation>
 <translation id="8431909052837336408">SIM નો PIN બદલો</translation>
 <translation id="8434480141477525001">NaCl ડિબગ પોર્ટ</translation>
-<translation id="8437331208797669910">પૃષ્ઠ ઍક્સેસ</translation>
 <translation id="843760761634048214">ક્રેડિટ કાર્ડ સાચવો</translation>
 <translation id="8438328416656800239">એક સ્માર્ટ બ્રાઉઝર પર સ્વિચ કરો</translation>
 <translation id="8439506636278576865">આ ભાષામાં પૃષ્ઠોનું અનુવાદ કરવાની ઓફર આપે છે</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 79229b3..e846090 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">बुकमार्क उपयोगकर्ता इंटरफ़ेस बदलें</translation>
 <translation id="2422426094670600218">&lt;अनाम&gt;</translation>
 <translation id="2423578206845792524">इस रूप में चित्र स&amp;हेजें...</translation>
-<translation id="2424091190911472304">हमेशा <ph name="ORIGIN" /> पर चलाएं</translation>
 <translation id="2425665904502185219">फ़ाइल का कुल आकार</translation>
 <translation id="2428510569851653187">बताएं कि जब टैब क्रैश हुआ तब आप क्या कर रहे थे</translation>
 <translation id="2431027948063157455">Google Assistant को लोड नहीं किया जा सका, कृपया अपना नेटवर्क कनेक्शन जांच लें और फिर से कोशिश करें.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">इंस्‍टॉल कर रहा है</translation>
 <translation id="2841837950101800123">प्रदाता</translation>
 <translation id="2843806747483486897">डिफ़ॉल्ट बदलें...</translation>
-<translation id="2844111009524261443">क्लिक करने पर चलाएं</translation>
 <translation id="2845382757467349449">बुकमार्क बार हमेशा दिखाएं</translation>
 <translation id="2847759467426165163">इस पर कास्ट करें</translation>
 <translation id="284805635805850872">नुकसान पहुंचाने वाला सॉफ़्टवेयर निकालें?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">इस पेज को कुकी सेट करने से रोक दिया गया था.</translation>
 <translation id="3308134619352333507">छिपाएं बटन</translation>
 <translation id="3308852433423051161">Google Assistant को लोड किया जा रहा है...</translation>
-<translation id="3309747692199697901">हमेशा सभी साइटों पर चलाएं</translation>
 <translation id="3312424061798279731">सक्षम भाषाएं</translation>
 <translation id="3313590242757056087">निगरानी में रखे गए उपयोगकर्ता द्वारा देखी जा सकने वाली वेबसाइटें सेट करने के लिए, आप <ph name="MANAGEMENT_URL" /> पर जाकर प्रतिबंधों और
     सेटिंग को कॉन्फ़िगर कर सकते हैं.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">वेब पेज के भाग अवरोधित करें</translation>
 <translation id="3760460896538743390">निरीक्षण और पेजभूमि पेज</translation>
 <translation id="37613671848467444">&amp;गुप्त विंडों में खोलें</translation>
-<translation id="3763401818161139108">हमेशा <ph name="ORIGIN" /> पर चलाएं</translation>
 <translation id="3764314093345384080">बिल्ड की विस्तृत जानकारी</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{किसी USB डिवाइस से संचार करें}one{# USB डिवाइस से संचार करें}other{# USB डिवाइस से संचार करें}}</translation>
 <translation id="3764986667044728669">नामांकन करने में असमर्थ</translation>
@@ -2270,7 +2266,6 @@
 <translation id="4547992677060857254">आपके द्वारा चुने गए फ़ोल्डर में संवेदनशील फ़ाइलें हैं. क्या आप वाकई इस फ़ोल्डर को "$1" स्थायी लिखने की एक्सेस देना चाहते हैं?</translation>
 <translation id="4552031286893852992">Chrome ने इस साइट पर विज्ञापन ब्लॉक कर दिए हैं क्योंकि यह साइट तंग करने वाले विज्ञापन दिखाने के लिए जानी जाती है.</translation>
 <translation id="4552089082226364758">फ़्लैश</translation>
-<translation id="4552495056028768700">पेज एक्सेस</translation>
 <translation id="4552678318981539154">अधिक मेमोरी खरीदें</translation>
 <translation id="4554591392113183336">बाहरी एक्‍सटेंशन मौजूदा की तुलना में समान या निम्नतर संस्‍करण पर है.</translation>
 <translation id="4555769855065597957">परछाई</translation>
@@ -3266,7 +3261,6 @@
 <translation id="6080515710685820702">शेयर किए गए कंप्यूटर का उपयोग कर रहे हैं? तो गुप्त विंडो खोलकर देखें.</translation>
 <translation id="6080689532560039067">अपने सिस्टम के समय की जाँच करें</translation>
 <translation id="6082651258230788217">टूलबार में दिखाएं</translation>
-<translation id="6086814797483779854">क्लिक पर चलाएं</translation>
 <translation id="6086846494333236931">आपके नियंत्रक द्वारा इंस्‍टॉल किया गया</translation>
 <translation id="6087960857463881712">बढ़िया चेहरा</translation>
 <translation id="6089481419520884864">शुद्ध पेज</translation>
@@ -4406,7 +4400,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - युग्मित किया गया</translation>
 <translation id="7870730066603611552">सेटअप के बाद सिंक विकल्पों की समीक्षा करें</translation>
 <translation id="7870790288828963061">अधिक नए वर्शन वाला कोई भी कियोस्‍क ऐप नहीं मिला. अपडेट करने के लिए कुछ नहीं है. कृपया USB स्‍टिक को निकालें.</translation>
-<translation id="7874357055309047713">हमेशा सभी साइटों पर चलाएं</translation>
 <translation id="7877451762676714207">अज्ञात सर्वर गड़बड़ी. कृपया पुन: प्रयास करें, या सर्वर व्यवस्थापक से संपर्क करें.</translation>
 <translation id="7877680364634660272">यात्रा</translation>
 <translation id="7878562273885520351">आपके पासवर्ड से छेड़छाड़ की जा सकती है</translation>
@@ -4755,7 +4748,6 @@
 <translation id="8428634594422941299">समझ लिया!</translation>
 <translation id="8431909052837336408">SIM पिन बदलें</translation>
 <translation id="8434480141477525001">NaCl डीबग पोर्ट</translation>
-<translation id="8437331208797669910">पेज एक्सेस</translation>
 <translation id="843760761634048214">क्रेडिट कार्ड सहेजें</translation>
 <translation id="8438328416656800239">किसी स्मार्ट ब्राउज़र पर जाएं</translation>
 <translation id="8439506636278576865">इस भाषा में पृष्ठों का अनुवाद करने का ऑफ़र दें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index cfd8ba3..b484948 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -454,6 +454,7 @@
 <translation id="166439687370499867">Promjena zajedničkih konfiguracija mreže nije dopuštena</translation>
 <translation id="1665611772925418501">Nije bilo moguće mijenjati datoteku.</translation>
 <translation id="1670399744444387456">Osnovne</translation>
+<translation id="167160931442925455">Najglasnije</translation>
 <translation id="1673103856845176271">Nije bilo moguće pristupiti datoteci zbog sigurnosnih razloga.</translation>
 <translation id="1673137583248014546"><ph name="URL" /> želi vidjeti marku i model vašeg sigurnosnog ključa</translation>
 <translation id="167832068858235403">stišavanje</translation>
@@ -510,6 +511,7 @@
 <translation id="1758831820837444715">Konfiguriranje Ethernet mreže</translation>
 <translation id="1763046204212875858">Stvaranje prečaca aplikacije</translation>
 <translation id="1763108912552529023">Nastavi istraživati</translation>
+<translation id="1763808908432309942">Otvara se u novoj kartici</translation>
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Novi prozor</translation>
 <translation id="1768278914020124551">Ups! Pojavio se problem s kontaktiranjem poslužitelja za prijavu. Provjerite mrežnu vezu i naziv domene, a zatim pokušajte ponovo.</translation>
@@ -590,6 +592,7 @@
 <translation id="1871615898038944731"><ph name="DEVICE_TYPE" /> je ažuriran</translation>
 <translation id="1875387611427697908">Može se dodati jedino s usluge <ph name="CHROME_WEB_STORE" /></translation>
 <translation id="1877520246462554164">Dohvaćanje oznake za autentifikaciju nije uspjelo. Odjavite se pa se opet prijavite da biste pokušali ponovo.</translation>
+<translation id="1878302395768190018">To možete prilagoditi u bilo kojem trenutku u postavkama Chromea</translation>
 <translation id="1878524442024357078">Ne dopusti nijednoj web-lokaciji upotrebu dodatka za pristup mom računalu</translation>
 <translation id="1880905663253319515">Izbrisati certifikat "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="1886996562706621347">Dopusti web-lokacijama traženje dopuštenja da postanu zadani rukovatelji za protokole (preporučeno)</translation>
@@ -912,7 +915,6 @@
 <translation id="2413749388954403953">promijeniti korisničko sučelje oznaka</translation>
 <translation id="2422426094670600218">&lt;bez naziva&gt;</translation>
 <translation id="2423578206845792524">Sp&amp;remi sliku kao...</translation>
-<translation id="2424091190911472304">Uvijek pokreni na <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Ukupna veličina datoteka</translation>
 <translation id="2428510569851653187">Opišite što ste radili kada se kartica srušila</translation>
 <translation id="2431027948063157455">Učitavanje Google asistenta nije uspjelo, provjerite mrežnu vezu i pokušajte ponovo.</translation>
@@ -1005,6 +1007,7 @@
 <translation id="2562685439590298522">Dokumenti</translation>
 <translation id="2562743677925229011">Niste prijavljeni na uslugu <ph name="SHORT_PRODUCT_NAME" /></translation>
 <translation id="2563856802393254086">Čestitamo! Podatkovna usluga "<ph name="NAME" />" aktivirana je i spremna za pokret.</translation>
+<translation id="2564520396658920462">Izvršavanje JavaScripta putem AppleScripta isključeno je. Da biste ga uključili, na traci izbornika otvorite Prikaz &gt; Razvojni programer &gt; Dopusti JavaScript iz Appleovih događaja. Više informacija dostupno je na stranici https://support.google.com/chrome/?p=applescript</translation>
 <translation id="2566124945717127842">Pokrenite Powerwash da biste vratili uređaj <ph name="IDS_SHORT_PRODUCT_NAME" /> na tvorničke postavke.</translation>
 <translation id="2567257616420533738">Zaporka je spremljena. Spremljene zaporke možete pregledati i upravljati njima na <ph name="SAVED_PASSWORDS_LINK" /></translation>
 <translation id="2568774940984945469">Spremnik infotrake</translation>
@@ -1083,6 +1086,7 @@
 <translation id="2665394472441560184">Dodaj novu riječ</translation>
 <translation id="2665717534925640469">Ova je stranica sada na cijelom zaslonu i onemogućila je pokazivač miša.</translation>
 <translation id="2665919335226618153">O, ne! Došlo je do pogreške prilikom formatiranja.</translation>
+<translation id="2666990579225592931">Otvori prozor u načinu rada za goste</translation>
 <translation id="2667463864537187133">Upravljanje provjerom pravopisa</translation>
 <translation id="2670102641511624474"><ph name="APP_NAME" /> dijeli Chromeovu karticu.</translation>
 <translation id="2670429602441959756">Ova stranica sadrži značajke koje VR još ne podržava. Izlaz...</translation>
@@ -1200,7 +1204,6 @@
 <translation id="2838379631617906747">Instaliranje</translation>
 <translation id="2841837950101800123">Davatelj usluge</translation>
 <translation id="2843806747483486897">Promijeni zadano...</translation>
-<translation id="2844111009524261443">Pokreni na klik</translation>
 <translation id="2845382757467349449">Uvijek prikaži traku oznake</translation>
 <translation id="2847759467426165163">Emitiranje na uređaju</translation>
 <translation id="284805635805850872">Ukloniti štetni softver?</translation>
@@ -1229,6 +1232,7 @@
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> će se odmah ponovo pokrenuti i vratiti na zadano</translation>
 <translation id="2885378588091291677">Upravitelj zadataka</translation>
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
+<translation id="2886800363598651778">Uključite sinkronizaciju Chromea kako bi vam bio prilagođen na svim vašim uređajima</translation>
 <translation id="2887525882758501333">PDF dokument</translation>
 <translation id="2888807692577297075">Nijedna stavka ne odgovara pretraživanju &lt;b&gt;<ph name="SEARCH_STRING" />&lt;/b&gt;</translation>
 <translation id="2889064240420137087">Otvori vezu sa...</translation>
@@ -1512,7 +1516,6 @@
 <translation id="3308116878371095290">Ova stranica je spriječena u postavljanju kolačića.</translation>
 <translation id="3308134619352333507">Gumb za skrivanje</translation>
 <translation id="3308852433423051161">Učitavanje Google asistenta...</translation>
-<translation id="3309747692199697901">Uvijek pokreni na svim web-lokacijama</translation>
 <translation id="3312424061798279731">Omogućeni jezici</translation>
 <translation id="3313590242757056087">Da biste odredili koje web-lokacije nadzirani korisnik može gledati, možete
     konfigurirati ograničenja i postavke tako što ćete posjetiti <ph name="MANAGEMENT_URL" />.
@@ -1753,6 +1756,7 @@
 <translation id="3670229581627177274">Uključite Bluetooth</translation>
 <translation id="3672681487849735243">Otkrivena je tvornička pogreška</translation>
 <translation id="367645871420407123">ostavite prazno ako želite postaviti korijensku zaporku na zadanu vrijednost testne slike</translation>
+<translation id="3677657024345889897">Najtiše</translation>
 <translation id="3678156199662914018">Proširenje: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3681311097828166361">Zahvaljujemo vam na povratnim informacijama. Trenutačno ste offline, pa će se izvješće poslati kasnije.</translation>
 <translation id="3683023058278427253">Otkrili smo više vrsta licenci za vašu domenu. Odaberite jednu za nastavak.</translation>
@@ -1810,7 +1814,6 @@
 <translation id="3759933321830434300">blokirati dijelove web-stranica</translation>
 <translation id="3760460896538743390">Provjeri &amp;pozadinsku stranicu</translation>
 <translation id="37613671848467444">Otvori u &amp;anonimnom prozoru</translation>
-<translation id="3763401818161139108">Uvijek pokreni na <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Detaljni podaci o međuverziji</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Komuniciranje s USB uređajem}one{Komuniciranje s # USB uređajem}few{Komuniciranje s # USB uređaja}other{Komuniciranje s # USB uređaja}}</translation>
 <translation id="3764986667044728669">Nije moguće upisati</translation>
@@ -1951,6 +1954,7 @@
 <translation id="3956702100721821638">Nije moguće pristupiti Google Playu</translation>
 <translation id="3958088479270651626">Uvoz oznaka i postavki</translation>
 <translation id="3960566196862329469">ONC</translation>
+<translation id="3965965397408324205">Napusti profil <ph name="PROFILE_NAME" /></translation>
 <translation id="3966072572894326936">Odabir druge mape...</translation>
 <translation id="3966388904776714213">Audio Player</translation>
 <translation id="3967822245660637423">Preuzimanje dovršeno</translation>
@@ -1991,6 +1995,7 @@
 <translation id="4031910098617850788">F5</translation>
 <translation id="4033471457476425443">Dodaj novu mapu</translation>
 <translation id="4034042927394659004">Smanjenje svjetline tipke</translation>
+<translation id="4034824040120875894">Pisač</translation>
 <translation id="4035758313003622889">&amp;Upravitelj zadacima</translation>
 <translation id="4036758022112812315">Istaknite ono što želite čuti, zatim pritisnite tipku za pretraživanje + S. Umjesto toga možete pritisnuti i zadržati tipku za pretraživanje, a zatim kliknuti ili povući za odabir sadržaja.</translation>
 <translation id="4037084878352560732">Konj</translation>
@@ -2075,6 +2080,7 @@
 <translation id="4181602000363099176">20x</translation>
 <translation id="4181841719683918333">Jezici</translation>
 <translation id="4184885522552335684">Povucite da biste premjestili zaslon</translation>
+<translation id="4192273449750167573">Pregledajte svoje postavke na sljedećem zaslonu</translation>
 <translation id="4193154014135846272">Googleov dokument</translation>
 <translation id="4194570336751258953">Omogući dodir umjesto klika</translation>
 <translation id="4195643157523330669">Otvori u novoj kartici</translation>
@@ -2271,7 +2277,6 @@
 <translation id="4547992677060857254">Mapa koju ste odabrali sadrži osjetljive datoteke. Jeste li sigurni da želite dodijeliti aplikaciji "$1" trajni pristup za pisanje za tu mapu?</translation>
 <translation id="4552031286893852992">Chrome je blokirao oglase na ovoj web-lokaciji jer često prikazuje ometajuće oglase.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Pristup stranici</translation>
 <translation id="4552678318981539154">Kupite još prostora za pohranu</translation>
 <translation id="4554591392113183336">Vanjsko proširenje iste je ili starije verzije u odnosu na postojeću.</translation>
 <translation id="4555769855065597957">Sjena</translation>
@@ -2323,6 +2328,7 @@
 <translation id="4632483769545853758">Uključi zvuk kartice</translation>
 <translation id="4633003931260532286">Minimalna je verzija za "<ph name="IMPORT_NAME" />" koju proširenje zahtijeva "<ph name="IMPORT_VERSION" />", ali je instalirana samo verzija "<ph name="INSTALLED_VERSION" />"</translation>
 <translation id="4634771451598206121">Prijavite se ponovo...</translation>
+<translation id="4635398712689569051">Stranica <ph name="PAGE_NAME" /> nije dostupna gostujućim korisnicima.</translation>
 <translation id="4640525840053037973">Prijavite se svojim Google računom</translation>
 <translation id="4641539339823703554">Chrome nije mogao postaviti vrijeme sustava. Provjerite vrijeme u nastavku i ispravite ga ako je potrebno.</translation>
 <translation id="4643612240819915418">&amp;Otvori videozapis na novoj kartici</translation>
@@ -2359,6 +2365,7 @@
     Ako to niste očekivali, obratite se podršci.</translation>
 <translation id="469230890969474295">OEM mapa</translation>
 <translation id="4692623383562244444">Tražilice</translation>
+<translation id="4694024090038830733">Konfiguracijom pisača upravlja administrator.</translation>
 <translation id="4697551882387947560">Kad završi sesija pregledavanja</translation>
 <translation id="4699172675775169585">Predmemorirane slike i datoteke</translation>
 <translation id="4699357559218762027">(pokrenuto automatski)</translation>
@@ -2367,6 +2374,7 @@
 <translation id="4707934200082538898">Daljnje upute potražite u e-poruci koju smo poslali na adresu <ph name="BEGIN_BOLD" /><ph name="MANAGER_EMAIL" /><ph name="END_BOLD" />.</translation>
 <translation id="4708794300267213770">Prikaži zaključan zaslon prilikom vraćanja iz mirovanja</translation>
 <translation id="4708849949179781599">Izađi iz programa <ph name="PRODUCT_NAME" /></translation>
+<translation id="4710251968215868702">Upotrebljava sadržaj na web-lokacijama koje posjećujete te aktivnosti i interakcije u preglednicima.</translation>
 <translation id="4711638718396952945">Vrati postavke</translation>
 <translation id="4713544552769165154">Ova datoteka predviđena je za računalo koje upotrebljava Macintosh softver. Nije kompatibilna s vašim uređajem koji radi na Chrome OS-u. Potražite odgovarajuću zamjensku aplikaciju u <ph name="BEGIN_LINK" />Chrome web-trgovini<ph name="END_LINK" />.<ph name="BEGIN_LINK_HELP" />Saznajte više<ph name="END_LINK_HELP" /></translation>
 <translation id="4714531393479055912"><ph name="PRODUCT_NAME" /> sada može sinkronizirati vaše zaporke.</translation>
@@ -2734,6 +2742,7 @@
 <translation id="527605719918376753">Isključi zvuk kartice</translation>
 <translation id="527605982717517565">Uvijek dopusti JavaScript na web-lokaciji <ph name="HOST" /></translation>
 <translation id="5280426389926346830">Želite li izraditi prečac?</translation>
+<translation id="528208740344463258">Da biste preuzeli i upotrebljavali Android aplikacije, najprije morate instalirati ovo obavezno ažuriranje. Dok se uređaj <ph name="DEVICE_TYPE" /> ažurira, ne možete ga upotrebljavati. Uređaj <ph name="DEVICE_TYPE" /> ponovo će se pokrenuti kada instaliranje završi.</translation>
 <translation id="5282733140964383898">Ako omogućite "Nemoj pratiti", taj će se zahtjev slati uz vaš promet pregledavanja. Učinak ovisi o tome hoće li web-lokacija reagirati na taj zahtjev i kako će se on tumačiti. Na primjer, neke web-lokacije mogu reagirati na taj zahtjev prikazivanjem oglasa koji se ne temelje na ostalim web-lokacijama koje ste posjetili. Mnoge web-lokacije i dalje će prikupljati i upotrebljavati vaše podatke o pregledavanju kako bi, primjerice, poboljšale sigurnost, pružale sadržaje, usluge, oglase i preporuke na svojim web-lokacijama te generirale statističke podatke za izvješća. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="5283677936944177147">Ups! Sustav nije uspio utvrditi model uređaja ili serijski broj.</translation>
 <translation id="5284445933715251131">Nastavi preuzimanje</translation>
@@ -3095,6 +3104,7 @@
 <translation id="5807290661599647102">Postavi Smart Lock</translation>
 <translation id="580926004266167721">Nije uspjelo pridruživanje uređaja domeni. Razlog mogu biti nedovoljna ovlaštenja za vaš račun za organizacijsku jedinicu.</translation>
 <translation id="580961539202306967">Pitaj me kada mi web-lokacija želi slati push poruke (preporučeno)</translation>
+<translation id="5809725759695043233">Imate aplikacije koje su optimizirane za Chromebookove</translation>
 <translation id="5814126672212206791">Vrsta veze</translation>
 <translation id="5815645614496570556">X.400 adresa</translation>
 <translation id="5817918615728894473">Upari</translation>
@@ -3267,7 +3277,6 @@
 <translation id="6080515710685820702">Upotrebljavate dijeljeno računalo? Preporučujemo vam da radite u anonimnom prozoru.</translation>
 <translation id="6080689532560039067">Provjerite vrijeme sustava</translation>
 <translation id="6082651258230788217">Prikaži na alatnoj traci</translation>
-<translation id="6086814797483779854">Pokreni na klik</translation>
 <translation id="6086846494333236931">Instalirao vaš administrator</translation>
 <translation id="6087960857463881712">Oduševljeno lice</translation>
 <translation id="6089481419520884864">Sažmi stranicu</translation>
@@ -3458,9 +3467,11 @@
 <translation id="6383051423892982287">Kriptiraj sinkronizirane podatke vlastitom <ph name="BEGIN_LINK" />šifrom za sinkronizaciju<ph name="END_LINK" /></translation>
 <translation id="6384275966486438344">promijeniti postavke pretraživanja u: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Web-lokacije mogu spremiti i čitati podatke kolačića</translation>
+<translation id="6388429472088318283">Pretražite jezike</translation>
 <translation id="6388771388956873507">Pronađite senzor otiska prsta na uređaju i dodirnite ga prstom</translation>
 <translation id="6390799748543157332">Stranice koje gledate u ovom prozoru neće se pojaviti u povijesti preglednika niti će ostaviti druge tragove, poput kolačića, na računalu nakon što zatvorite sve otvorene gostujuće prozore. Međutim, datoteke koje preuzmete sačuvat će se.</translation>
 <translation id="6395423953133416962">Šalji <ph name="BEGIN_LINK1" />informacije o sustavu<ph name="END_LINK1" /> i <ph name="BEGIN_LINK2" />mjerne podatke<ph name="END_LINK2" /></translation>
+<translation id="6397094776139756010">Opcije sinkronizacije i prilagodbe</translation>
 <translation id="6397592254427394018">Otvaranje svih oznaka u anonimnom prozoru</translation>
 <translation id="6398715114293939307">Ukloni Trgovinu Google Play</translation>
 <translation id="6398765197997659313">Izađi iz cijelog zaslona</translation>
@@ -3650,6 +3661,7 @@
 <translation id="6659594942844771486">Kartica</translation>
 <translation id="6664237456442406323">Nažalost, vaše je računalo konfigurirano pogrešno oblikovanim ID-om hardvera. To sprječava ažuriranje OS-a Chrome najnovijim sigurnosnim popravcima pa bi vaše računalo <ph name="BEGIN_BOLD" />moglo biti ranjivo na zlonamjerne napade<ph name="END_BOLD" />.</translation>
 <translation id="6664774537677393800">Prilikom otvaranja profila dogodila se pogreška. Odjavite se i ponovo prijavite.</translation>
+<translation id="6670647982128220776">Značajke povezane sa sinkronizacijom i prilagodbom sada su pod jednom kontrolom. Ako to uključite, vaše se trenutačne postavke mogu promijeniti.</translation>
 <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation>
 <translation id="667517062706956822">Želite li da Google prevede ovu stranicu (<ph name="SOURCE_LANGUAGE" /> – <ph name="TARGET_LANGUAGE" />)?</translation>
 <translation id="6675665718701918026">Pokazivački je uređaj povezan</translation>
@@ -3764,6 +3776,7 @@
 <translation id="6841186874966388268">Pogreške</translation>
 <translation id="6843725295806269523">isključi ton</translation>
 <translation id="6845038076637626672">Maksimalno otvaranje</translation>
+<translation id="685040365210406336">Ne mijenjaj</translation>
 <translation id="6851497530878285708">Aplikacija je omogućena</translation>
 <translation id="6853388645642883916">Alat za ažuriranje u mirovanju je</translation>
 <translation id="68541483639528434">Zatvori ostale kartice</translation>
@@ -3963,6 +3976,7 @@
 <translation id="716810439572026343">Preuzimanje datoteke <ph name="FILE_NAME" /></translation>
 <translation id="7168109975831002660">Najmanja veličina fonta</translation>
 <translation id="7170041865419449892">Izvan raspona</translation>
+<translation id="7171559745792467651">Instalirajte aplikacije sa svojih ostalih uređaja</translation>
 <translation id="7173917244679555">Čini se da već upravljate korisnikom s tim imenom. Želite li <ph name="BEGIN_LINK" />uvesti korisnika <ph name="PROFILE_NAME" /><ph name="END_LINK" /> na taj uređaj?</translation>
 <translation id="7175037578838465313">Konfiguriraj <ph name="NAME" /></translation>
 <translation id="7175353351958621980">Učitano iz:</translation>
@@ -4100,6 +4114,7 @@
           <ph name="END_BOLD" /></translation>
 <translation id="7387829944233909572">Dijalog "Brisanje podataka preglednika"</translation>
 <translation id="7388044238629873883">Uskoro ste gotovi!</translation>
+<translation id="7388222713940428051">Otvori prozor u načinu rada za goste</translation>
 <translation id="7392118418926456391">Pretraživanje virusa nije uspjelo</translation>
 <translation id="7392915005464253525">P&amp;onovo otvorite zatvoreni prozor</translation>
 <translation id="7396845648024431313"><ph name="APP_NAME" /> pokrenut će se pri pokretanju sustava i nastavi raditi u pozadini čak i nakon što zatvorite sve ostale prozore proizvoda <ph name="PRODUCT_NAME" />.</translation>
@@ -4317,6 +4332,7 @@
 <translation id="773426152488311044">Trenutačno ste jedini korisnik usluge <ph name="PRODUCT_NAME" />.</translation>
 <translation id="7740996059027112821">Standardno</translation>
 <translation id="7748528009589593815">Prethodna kartica</translation>
+<translation id="7748626145866214022">Više opcija dostupno je na traci radnji. Pritisnite Alt + A da biste fokusirali traku radnji.</translation>
 <translation id="7751260505918304024">Prikaži sve</translation>
 <translation id="7754704193130578113">Pitaj gdje spremiti svaku datoteku prije preuzimanja</translation>
 <translation id="7758450972308449809">Prilagodite granice zaslona</translation>
@@ -4381,6 +4397,7 @@
 <translation id="7831491651892296503">Pogreška prilikom konfiguriranja mreže</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
 <translation id="7832084384634357321">Vrijeme završetka</translation>
+<translation id="7832327313660264358">Podaci koje sinkronizirate s Googleom i značajke koje upotrebljavate neće se promijeniti</translation>
 <translation id="7833720883933317473">Ovdje će se pojaviti spremljene prilagođene riječi</translation>
 <translation id="7837307963048806839">•  $1</translation>
 <translation id="7837776265184002579">Vaša je početna stranica promijenjena u <ph name="URL" />.</translation>
@@ -4406,7 +4423,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – uparen</translation>
 <translation id="7870730066603611552">Pregledajte opcije sinkronizacije nakon postavljanja</translation>
 <translation id="7870790288828963061">Nisu pronađene aplikacije kioska s novijom verzijom. Nema ažuriranja. Uklonite USB privjesak.</translation>
-<translation id="7874357055309047713">Uvijek pokreni na svim web-lokacijama</translation>
 <translation id="7877451762676714207">Nepoznata pogreška poslužitelja. Pokušajte ponovo ili se obratite administratoru poslužitelja.</translation>
 <translation id="7877680364634660272">Obilazak</translation>
 <translation id="7878562273885520351">Vaša je zaporka možda ugrožena</translation>
@@ -4742,6 +4758,7 @@
 <translation id="8400146488506985033">Upravljaj korisnicima</translation>
 <translation id="8410073653152358832">Upotrijebi ovaj telefon</translation>
 <translation id="8410775397654368139">Google Play</translation>
+<translation id="8411022984399993066">Da, uključi sinkronizaciju i prilagodbu</translation>
 <translation id="8413385045638830869">Prvo pitaj (preporučeno)</translation>
 <translation id="8418445294933751433">&amp;Prikaži kao karticu</translation>
 <translation id="8419098111404128271">Rezultati pretraživanja za "<ph name="SEARCH_TEXT" />"</translation>
@@ -4756,7 +4773,6 @@
 <translation id="8428634594422941299">Shvaćam</translation>
 <translation id="8431909052837336408">Promjena PIN-a za SIM</translation>
 <translation id="8434480141477525001">Priključak za otklanjanje pogrešaka lokalnog klijenta</translation>
-<translation id="8437331208797669910">Pristup stranici</translation>
 <translation id="843760761634048214">Spremanje kreditne kartice</translation>
 <translation id="8438328416656800239">Prijeđite na pametan preglednik</translation>
 <translation id="8439506636278576865">Ponudi prevođenje stranica na tom jeziku</translation>
@@ -4787,6 +4803,7 @@
 <translation id="8470028084415844044">Da biste imali sve svoje zaporke na svim svojim uređajima, uključite sinkronizaciju.</translation>
 <translation id="8470513973197838199">Spremljene zaporke za <ph name="ORIGIN" /></translation>
 <translation id="8472623782143987204">s hardverskom podlogom</translation>
+<translation id="8474229360677287535">Zatvori sve prozore</translation>
 <translation id="8475313423285172237">Drugi program na vašem računalu dodao je proširenje koje može promijeniti način na koji radi Chrome.</translation>
 <translation id="8475647382427415476">Google disk trenutačno nije mogao sinkronizirati datoteku "<ph name="FILENAME" />" i pokušat će ponovo kasnije.</translation>
 <translation id="8477241577829954800">Zamijenjeno</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index a511a7619..da71510 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">A Könyvjelzők kezelőfelület módosítása</translation>
 <translation id="2422426094670600218">&lt;névtelen&gt;</translation>
 <translation id="2423578206845792524">Ké&amp;p mentése másként...</translation>
-<translation id="2424091190911472304">Mindig fut itt: <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Teljes fájlméret</translation>
 <translation id="2428510569851653187">Írja le, hogy mit csinált a lap összeomlásakor</translation>
 <translation id="2431027948063157455">A Google Segéd betöltése sikertelen volt. Ellenőrizze a hálózati kapcsolatot, majd próbálja újra.</translation>
@@ -1201,7 +1200,6 @@
 <translation id="2838379631617906747">Telepítés</translation>
 <translation id="2841837950101800123">Szolgáltató</translation>
 <translation id="2843806747483486897">Alapértelmezés módosítása...</translation>
-<translation id="2844111009524261443">Futtatás kattintáskor</translation>
 <translation id="2845382757467349449">A könyvjelzők eszköztára mindig látható</translation>
 <translation id="2847759467426165163">Átküldés a következőre</translation>
 <translation id="284805635805850872">Eltávolítja a kártékony szoftvert?</translation>
@@ -1513,7 +1511,6 @@
 <translation id="3308116878371095290">Ezen az oldalon le van tiltva a cookie-k mentése.</translation>
 <translation id="3308134619352333507">Elrejtés gomb</translation>
 <translation id="3308852433423051161">A Google Segéd betöltése…</translation>
-<translation id="3309747692199697901">Mindig fut minden webhelyen</translation>
 <translation id="3312424061798279731">Engedélyezett nyelvek</translation>
 <translation id="3313590242757056087">Annak megadásához, hogy a felügyelt felhasználó mely webhelyeket nézheti meg,
     korlátozásokat és beállításokat adhat meg itt: <ph name="MANAGEMENT_URL" />.
@@ -1811,7 +1808,6 @@
 <translation id="3759933321830434300">Weboldalak adott részeinek letiltása</translation>
 <translation id="3760460896538743390">&amp;Háttéroldal vizsgálata</translation>
 <translation id="37613671848467444">Megnyitás &amp;inkognitóablakban</translation>
-<translation id="3763401818161139108">Mindig fut itt: <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Részletes buildinformáció</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Kommunikáció egy USB-eszközzel}other{Kommunikáció # USB-eszközzel}}</translation>
 <translation id="3764986667044728669">Nem sikerült a csatlakozás</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">A kiválasztott mappa érzékeny fájlokat tartalmaz. Biztosan állandó írási hozzáférést szeretne adni a következőnek a mappához: „$1”?</translation>
 <translation id="4552031286893852992">A Chrome hirdetéseket tiltott le ezen a webhelyen, mert a webhely jellemzően tolakodó hirdetéseket jelenít meg.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Hozzáférés az oldalhoz</translation>
 <translation id="4552678318981539154">További tárhely vásárlása</translation>
 <translation id="4554591392113183336">A külső bővítmény a meglévő bővítmény verziószintjén vagy az alatt van.</translation>
 <translation id="4555769855065597957">Árnyék</translation>
@@ -3269,7 +3264,6 @@
 <translation id="6080515710685820702">Közös használatú számítógépet használ? Nyisson inkognitóablakot.</translation>
 <translation id="6080689532560039067">Ellenőrizze a rendszeridőt</translation>
 <translation id="6082651258230788217">Megjelenítés az eszköztáron</translation>
-<translation id="6086814797483779854">Futtatás kattintáskor</translation>
 <translation id="6086846494333236931">A rendszergazda telepítette</translation>
 <translation id="6087960857463881712">Menő arc</translation>
 <translation id="6089481419520884864">Oldal előállítása</translation>
@@ -4409,7 +4403,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – párosítva</translation>
 <translation id="7870730066603611552">Szinkronizálási beállítások ellenőrzése a beállítást követően</translation>
 <translation id="7870790288828963061">Nem található újabb verziójú kioszkalkalmazás, ezért nincs mit frissíteni. Kérjük, távolítsa el az USB-meghajtót.</translation>
-<translation id="7874357055309047713">Mindig fut minden webhelyen</translation>
 <translation id="7877451762676714207">Ismeretlen szerverhiba. Kérjük, próbálja újra, vagy lépjen kapcsolatba a szerver rendszergazdájával.</translation>
 <translation id="7877680364634660272">Bemutató</translation>
 <translation id="7878562273885520351">Előfordultat, hogy jelszava már nem biztonságos</translation>
@@ -4758,7 +4751,6 @@
 <translation id="8428634594422941299">Értem</translation>
 <translation id="8431909052837336408">SIM-kártya PIN-kódjának módosítása</translation>
 <translation id="8434480141477525001">NaCl hibakeresési port</translation>
-<translation id="8437331208797669910">Hozzáférés az oldalhoz</translation>
 <translation id="843760761634048214">Hitelkártya mentése</translation>
 <translation id="8438328416656800239">Váltás intelligens böngészőre</translation>
 <translation id="8439506636278576865">Kínálja fel az ezen a nyelven írt oldalak fordítását</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 67f16209..50f5ca7a 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -454,6 +454,7 @@
 <translation id="166439687370499867">Mengubah konfigurasi jaringan bersama tidak diizinkan</translation>
 <translation id="1665611772925418501">File tidak dapat diubah.</translation>
 <translation id="1670399744444387456">Dasar</translation>
+<translation id="167160931442925455">Paling keras</translation>
 <translation id="1673103856845176271">File tidak dapat diakses karena alasan keamanan.</translation>
 <translation id="1673137583248014546"><ph name="URL" /> ingin melihat merek dan model Kunci Keamanan Anda</translation>
 <translation id="167832068858235403">kecilkan vol.</translation>
@@ -510,6 +511,7 @@
 <translation id="1758831820837444715">Konfigurasikan jaringan Ethernet</translation>
 <translation id="1763046204212875858">Buat pintasan aplikasi</translation>
 <translation id="1763108912552529023">Terus menjelajah</translation>
+<translation id="1763808908432309942">Membuka di tab baru</translation>
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">Je&amp;ndela Baru</translation>
 <translation id="1768278914020124551">Maaf.  Terjadi masalah saat menghubungi server login. Harap periksa koneksi jaringan dan nama domain, lalu coba lagi.</translation>
@@ -590,6 +592,7 @@
 <translation id="1871615898038944731"><ph name="DEVICE_TYPE" /> Anda adalah versi terbaru</translation>
 <translation id="1875387611427697908">Ini hanya dapat ditambahkan dari <ph name="CHROME_WEB_STORE" /></translation>
 <translation id="1877520246462554164">Gagal mendapatkan token autentikasi. Harap logout, lalu login kembali untuk mencoba lagi.</translation>
+<translation id="1878302395768190018">Anda dapat menyesuaikan ini kapan saja di Setelan Chrome</translation>
 <translation id="1878524442024357078">Jangan izinkan situs mana pun menggunakan plugin untuk mengakses komputer Anda</translation>
 <translation id="1880905663253319515">Hapus sertifikat "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="1886996562706621347">Izinkan situs meminta untuk menjadi penangan default bagi protokol (disarankan)</translation>
@@ -912,7 +915,6 @@
 <translation id="2413749388954403953">Mengubah antarmuka pengguna bookmark</translation>
 <translation id="2422426094670600218">&lt;tanpanama&gt;</translation>
 <translation id="2423578206845792524">Sim&amp;pan gambar sebagai...</translation>
-<translation id="2424091190911472304">Selalu Jalankan di <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Ukuran file total</translation>
 <translation id="2428510569851653187">Jelaskan yang Anda lakukan saat tab error</translation>
 <translation id="2431027948063157455">Asisten Google tidak dapat dimuat, periksa sambungan internet dan coba lagi.</translation>
@@ -1005,6 +1007,7 @@
 <translation id="2562685439590298522">Dokumen</translation>
 <translation id="2562743677925229011">Tidak masuk ke <ph name="SHORT_PRODUCT_NAME" /></translation>
 <translation id="2563856802393254086">Selamat! Layanan data '<ph name="NAME" />' Anda telah diaktifkan dan siap digunakan.</translation>
+<translation id="2564520396658920462">Eksekusi JavaScript melalui AppleScript dinonaktifkan. Untuk mengaktifkannya, dari panel menu, buka Tampilan &gt; Developer &gt; Izinkan JavaScript dari Peristiwa Apple. Untuk informasi selengkapnya: https://support.google.com/chrome/?p=applescript</translation>
 <translation id="2566124945717127842">Powerwash untuk mengatur ulang perangkat <ph name="IDS_SHORT_PRODUCT_NAME" /> agar jadi seperti baru.</translation>
 <translation id="2567257616420533738">Sandi disimpan. Lihat dan kelola sandi tersimpan di <ph name="SAVED_PASSWORDS_LINK" /></translation>
 <translation id="2568774940984945469">Infobar Container</translation>
@@ -1083,6 +1086,7 @@
 <translation id="2665394472441560184">Tambahkan kata baru</translation>
 <translation id="2665717534925640469">Halaman ini sekarang menjadi layar penuh dan telah menonaktifkan kursor mouse Anda.</translation>
 <translation id="2665919335226618153">Waduh! Terjadi kesalahan saat proses pemformatan.</translation>
+<translation id="2666990579225592931">Buka Jendela Tamu</translation>
 <translation id="2667463864537187133">Kelola pemeriksa ejaan</translation>
 <translation id="2670102641511624474"><ph name="APP_NAME" /> membagikan tab Chrome.</translation>
 <translation id="2670429602441959756">Halaman ini berisi fitur yang belum didukung dalam VR. Keluar...</translation>
@@ -1200,7 +1204,6 @@
 <translation id="2838379631617906747">Memasang</translation>
 <translation id="2841837950101800123">Penyedia</translation>
 <translation id="2843806747483486897">Ubah default...</translation>
-<translation id="2844111009524261443">Jalankan saat diklik</translation>
 <translation id="2845382757467349449">Selalu Tampilkan Bilah Bookmark</translation>
 <translation id="2847759467426165163">Transmisikan ke</translation>
 <translation id="284805635805850872">Hapus software berbahaya?</translation>
@@ -1229,6 +1232,7 @@
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> akan segera dimulai dan disetel ulang</translation>
 <translation id="2885378588091291677">Pengelola Tugas</translation>
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
+<translation id="2886800363598651778">Sinkronkan dan personalisasi Chrome di perangkat Anda</translation>
 <translation id="2887525882758501333">Dokumen PDF</translation>
 <translation id="2888807692577297075">Tidak ada item yang cocok &lt;b&gt;"<ph name="SEARCH_STRING" />"&lt;/b&gt;</translation>
 <translation id="2889064240420137087">Buka link dengan...</translation>
@@ -1512,7 +1516,6 @@
 <translation id="3308116878371095290">Halaman ini dicegah menyetel cookie.</translation>
 <translation id="3308134619352333507">Sembunyikan Tombol</translation>
 <translation id="3308852433423051161">Memuat Asisten Google...</translation>
-<translation id="3309747692199697901">Selalu Jalankan di Semua Situs</translation>
 <translation id="3312424061798279731">Bahasa yang diaktifkan</translation>
 <translation id="3313590242757056087">Untuk menyetel situs web yang dapat dilihat pengguna yang dilindungi, Anda dapat mengonfigurasi batasan
     dan setelan dengan mengunjungi <ph name="MANAGEMENT_URL" />.
@@ -1753,6 +1756,7 @@
 <translation id="3670229581627177274">Aktifkan Bluetooth</translation>
 <translation id="3672681487849735243">Kesalahan pabrik terdeteksi</translation>
 <translation id="367645871420407123">biarkan kosong jika Anda ingin menyetel sandi akar ke nilai gambar uji default</translation>
+<translation id="3677657024345889897">Paling kecil</translation>
 <translation id="3678156199662914018">Ekstensi: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3681311097828166361">Terima kasih atas masukannya. Anda sedang offline, laporan akan dikirim nanti.</translation>
 <translation id="3683023058278427253">Kami mendeteksi beberapa jenis lisensi untuk domain Anda. Harap pilih 1 untuk melanjutkan.</translation>
@@ -1810,7 +1814,6 @@
 <translation id="3759933321830434300">Blokir bagian halaman web</translation>
 <translation id="3760460896538743390">Periksa Halaman Latar &amp;Belakang</translation>
 <translation id="37613671848467444">Buka di &amp;Jendela Penyamaran</translation>
-<translation id="3763401818161139108">Selalu jalankan di <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Detail informasi build</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Berkomunikasi dengan satu perangkat USB}other{Berkomunikasi dengan # perangkat USB}}</translation>
 <translation id="3764986667044728669">Tidak dapat mendaftar</translation>
@@ -1951,6 +1954,7 @@
 <translation id="3956702100721821638">Tidak dapat menjangkau Google Play</translation>
 <translation id="3958088479270651626">Impor bookmark dan setelan</translation>
 <translation id="3960566196862329469">ONC</translation>
+<translation id="3965965397408324205">Tutup <ph name="PROFILE_NAME" /></translation>
 <translation id="3966072572894326936">Pilih folder lain...</translation>
 <translation id="3966388904776714213">Pemutar Audio</translation>
 <translation id="3967822245660637423">Download selesai</translation>
@@ -1991,6 +1995,7 @@
 <translation id="4031910098617850788">F5</translation>
 <translation id="4033471457476425443">Tambahkan folder baru</translation>
 <translation id="4034042927394659004">Kurangi kecerahan tombol</translation>
+<translation id="4034824040120875894">Printer</translation>
 <translation id="4035758313003622889">&amp;Pengelola tugas</translation>
 <translation id="4036758022112812315">Menandai hal yang ingin Anda dengar, lalu tekan tombol Penelusuran + S. Atau, tekan dan tahan tombol Penelusuran, lalu klik atau tarik untuk memilih konten.</translation>
 <translation id="4037084878352560732">Kuda</translation>
@@ -2075,6 +2080,7 @@
 <translation id="4181602000363099176">20x</translation>
 <translation id="4181841719683918333">Bahasa</translation>
 <translation id="4184885522552335684">Tarik untuk memindahkan tampilan</translation>
+<translation id="4192273449750167573">Lihat setelan Anda di layar berikutnya</translation>
 <translation id="4193154014135846272">Dokumen Google</translation>
 <translation id="4194570336751258953">Aktifkan ketuk-untuk-mengeklik</translation>
 <translation id="4195643157523330669">Buka di tab baru</translation>
@@ -2271,7 +2277,6 @@
 <translation id="4547992677060857254">Folder yang Anda pilih berisi file sensitif. Apakah Anda yakin ingin memberikan izin pada "$1" untuk akses menulis secara permanen ke folder ini?</translation>
 <translation id="4552031286893852992">Chrome memblokir iklan di situs ini karena situs ini cenderung menampilkan iklan mengganggu.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Akses Halaman</translation>
 <translation id="4552678318981539154">Beli penyimpanan lagi</translation>
 <translation id="4554591392113183336">Versi ekstensi eksternal sama atau lebih rendah dibandingkan yang sudah ada.</translation>
 <translation id="4555769855065597957">Bayangan</translation>
@@ -2323,6 +2328,7 @@
 <translation id="4632483769545853758">Aktifkan Tab</translation>
 <translation id="4633003931260532286">Ekstensi memerlukan "<ph name="IMPORT_NAME" />" dengan versi minimum "<ph name="IMPORT_VERSION" />", namun hanya versi "<ph name="INSTALLED_VERSION" />" yang terinstal</translation>
 <translation id="4634771451598206121">Masuk lagi...</translation>
+<translation id="4635398712689569051"><ph name="PAGE_NAME" /> tidak tersedia bagi pengguna Tamu.</translation>
 <translation id="4640525840053037973">Masuk dengan Akun Google</translation>
 <translation id="4641539339823703554">Chrome tidak dapat menyetel waktu sistem. Periksa waktu di bawah dan perbaiki jika perlu.</translation>
 <translation id="4643612240819915418">Buka Vide&amp;o di Tab Baru</translation>
@@ -2359,6 +2365,7 @@
     Jika hal ini tidak diharapkan, hubungi dukungan.</translation>
 <translation id="469230890969474295">Folder OEM</translation>
 <translation id="4692623383562244444">Mesin telusur</translation>
+<translation id="4694024090038830733">Konfigurasi printer ditangani oleh administrator.</translation>
 <translation id="4697551882387947560">Saat sesi menjelajah berakhir</translation>
 <translation id="4699172675775169585">File dan gambar yang disimpan dalam cache</translation>
 <translation id="4699357559218762027">(diluncurkan otomatis)</translation>
@@ -2367,6 +2374,7 @@
 <translation id="4707934200082538898">Periksa email Anda di <ph name="BEGIN_BOLD" /><ph name="MANAGER_EMAIL" /><ph name="END_BOLD" /> untuk petunjuk selengkapnya.</translation>
 <translation id="4708794300267213770">Tampilkan layar kunci saat keluar dari mode tidur</translation>
 <translation id="4708849949179781599">Berhenti <ph name="PRODUCT_NAME" /></translation>
+<translation id="4710251968215868702">Persetujuan penggunaan di situs yang Anda kunjungi serta aktivitas browser dan interaksi.</translation>
 <translation id="4711638718396952945">Pulihkan setelan</translation>
 <translation id="4713544552769165154">File ini dirancang untuk komputer yang menggunakan software Macintosh. File ini tidak kompatibel dengan perangkat Anda yang menjalankan Chrome OS. Telusuri aplikasi pengganti yang sesuai di <ph name="BEGIN_LINK" />Chrome Webstore<ph name="END_LINK" />.<ph name="BEGIN_LINK_HELP" />Pelajari Lebih Lanjut<ph name="END_LINK_HELP" /></translation>
 <translation id="4714531393479055912"><ph name="PRODUCT_NAME" /> kini dapat menyinkronkan sandi.</translation>
@@ -2734,6 +2742,7 @@
 <translation id="527605719918376753">Nonaktifkan tab</translation>
 <translation id="527605982717517565">Selalu izinkan JavaScript di <ph name="HOST" /></translation>
 <translation id="5280426389926346830">Buat pintasan?</translation>
+<translation id="528208740344463258">Untuk mendownload dan menggunakan aplikasi Android, Anda harus menginstal update yang diperlukan terlebih dahulu. Saat <ph name="DEVICE_TYPE" /> sedang diupdate, Anda tidak dapat menggunakannya. Setelah penginstalan selesai, <ph name="DEVICE_TYPE" /> akan dimulai ulang.</translation>
 <translation id="5282733140964383898">Dengan mengaktifkan ''Jangan Lacak'', permintaan akan disertakan dalam traffic penjelajahan Anda. Pengaruh apa pun bergantung pada apakah situs menanggapi permintaan atau tidak, dan cara permintaan diinterpretasikan. Misalnya, beberapa situs mungkin menanggapi permintaan ini dengan menayangkan iklan yang tidak didasarkan pada situs lain yang telah Anda kunjungi. Banyak situs yang masih akan mengumpulkan dan menggunakan data browsing Anda - misalnya untuk meningkatkan keamanan, menyediakan konten, layanan, iklan, dan saran pada situs mereka, serta membuat statistik pelaporan. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation>
 <translation id="5283677936944177147">Ups! Sistem gagal menentukan model perangkat atau nomor seri.</translation>
 <translation id="5284445933715251131">Lanjutkan Mendownload</translation>
@@ -3095,6 +3104,7 @@
 <translation id="5807290661599647102">Setel Kunci Layar</translation>
 <translation id="580926004266167721">Gagal menggabungkan mesin ke domain. Hal ini mungkin disebabkan karena hak istimewa untuk akun tidak memadai untuk unit organisasi.</translation>
 <translation id="580961539202306967">Tanyakan kepada saya saat situs ingin mengirim pesan push (disarankan)</translation>
+<translation id="5809725759695043233">Anda memiliki aplikasi yang dioptimalkan untuk Chromebook</translation>
 <translation id="5814126672212206791">Jenis sambungan</translation>
 <translation id="5815645614496570556">X.400 Address</translation>
 <translation id="5817918615728894473">Sandingkan</translation>
@@ -3267,7 +3277,6 @@
 <translation id="6080515710685820702">Menggunakan komputer bersama? Coba buka jendela samaran.</translation>
 <translation id="6080689532560039067">Periksa waktu sistem Anda</translation>
 <translation id="6082651258230788217">Tampilkan di bilah alat</translation>
-<translation id="6086814797483779854">Jalankan Saat Diklik</translation>
 <translation id="6086846494333236931">Dipasang oleh administrator Anda</translation>
 <translation id="6087960857463881712">Wajah keren</translation>
 <translation id="6089481419520884864">Halaman saring</translation>
@@ -3458,9 +3467,11 @@
 <translation id="6383051423892982287">Enkripsikan data yang disinkronkan dengan <ph name="BEGIN_LINK" />frasa sandi sinkronisasi<ph name="END_LINK" /> Anda sendiri</translation>
 <translation id="6384275966486438344">Ubah setelan penelusuran Anda menjadi: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Situs dapat menyimpan dan membaca data cookie</translation>
+<translation id="6388429472088318283">Bahasa penelusuran</translation>
 <translation id="6388771388956873507">Temukan sensor sidik jari di perangkat dan sentuh sensor tersebut dengan jari Anda</translation>
 <translation id="6390799748543157332">Halaman yang Anda lihat di jendela ini tidak akan muncul dalam histori browser dan tidak meninggalkan jejak lain, seperti cookie, di komputer setelah Anda menutup semua jendela Tamu yang terbuka. Namun, file apa pun yang Anda download akan tersimpan.</translation>
 <translation id="6395423953133416962">Kirim <ph name="BEGIN_LINK1" />informasi sistem<ph name="END_LINK1" /> dan <ph name="BEGIN_LINK2" />metrik<ph name="END_LINK2" /></translation>
+<translation id="6397094776139756010">Opsi sinkronisasi dan personalisasi</translation>
 <translation id="6397592254427394018">Buka semua bookmark di &amp;jendela penyamaran</translation>
 <translation id="6398715114293939307">Hapus Google Play Store</translation>
 <translation id="6398765197997659313">Keluar dari tampilan layar penuh</translation>
@@ -3650,6 +3661,7 @@
 <translation id="6659594942844771486">Tab</translation>
 <translation id="6664237456442406323">Sayangnya, komputer Anda dikonfigurasi dengan ID hardware yang rusak. Hal ini mencegah Chrome OS memperbarui dengan perbaikan keamanan terbaru dan komputer Anda <ph name="BEGIN_BOLD" />mungkin rentan terhadap serangan berbahaya<ph name="END_BOLD" />.</translation>
 <translation id="6664774537677393800">Terjadi kesalahan saat membuka profil Anda. Harap keluar, lalu masuk lagi.</translation>
+<translation id="6670647982128220776">Fitur yang terkait dengan sinkronisasi dan personalisasi kini ada di 1 kontrol. Mengaktifkan ini dapat mengubah setelan Anda saat ini.</translation>
 <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation>
 <translation id="667517062706956822">Ingin Google menerjemahkan halaman ini dari <ph name="SOURCE_LANGUAGE" /> ke <ph name="TARGET_LANGUAGE" />?</translation>
 <translation id="6675665718701918026">Perangkat penunjuk telah tersambung</translation>
@@ -3764,6 +3776,7 @@
 <translation id="6841186874966388268">Kesalahan</translation>
 <translation id="6843725295806269523">bisukan</translation>
 <translation id="6845038076637626672">Buka yang Dimaksimalkan</translation>
+<translation id="685040365210406336">Tidak melakukan perubahan</translation>
 <translation id="6851497530878285708">Aplikasi Diaktifkan</translation>
 <translation id="6853388645642883916">Updater dalam mode tidur</translation>
 <translation id="68541483639528434">Tutup tab lain</translation>
@@ -3963,6 +3976,7 @@
 <translation id="716810439572026343">Mendownload <ph name="FILE_NAME" /></translation>
 <translation id="7168109975831002660">Ukuran font minimal</translation>
 <translation id="7170041865419449892">Di luar jangkauan</translation>
+<translation id="7171559745792467651">Instal aplikasi dari perangkat lainnya</translation>
 <translation id="7173917244679555">Tampaknya Anda sudah mengelola pengguna dengan nama tersebut. Apakah Anda ingin <ph name="BEGIN_LINK" />mengimpor <ph name="PROFILE_NAME" /><ph name="END_LINK" /> ke perangkat ini?</translation>
 <translation id="7175037578838465313">Konfigurasi <ph name="NAME" /></translation>
 <translation id="7175353351958621980">Dimuat dari:</translation>
@@ -4101,6 +4115,7 @@
           <ph name="END_BOLD" /></translation>
 <translation id="7387829944233909572">Dialog "Hapus data penjelajahan"</translation>
 <translation id="7388044238629873883">Anda hampir selesai!</translation>
+<translation id="7388222713940428051">Buka jendela Tamu</translation>
 <translation id="7392118418926456391">Pemindaian virus gagal</translation>
 <translation id="7392915005464253525">Buka kembali jendela yang tertutup</translation>
 <translation id="7396845648024431313"><ph name="APP_NAME" /> akan diluncurkan pada permulaan sistem dan tetap berjalan di latar meskipun Anda telah menutup semua jendela <ph name="PRODUCT_NAME" />.</translation>
@@ -4318,6 +4333,7 @@
 <translation id="773426152488311044">Saat ini Anda merupakan satu-satunya pengguna <ph name="PRODUCT_NAME" />.</translation>
 <translation id="7740996059027112821">Standar</translation>
 <translation id="7748528009589593815">Tab sebelumnya</translation>
+<translation id="7748626145866214022">Opsi lainnya tersedia di menu tindakan. Tekan Alt + A untuk memindahkan menu tindakan ke posisi tengah.</translation>
 <translation id="7751260505918304024">Tampilkan semua</translation>
 <translation id="7754704193130578113">Tanyakan lokasi penyimpanan setiap file sebelum mendownload</translation>
 <translation id="7758450972308449809">Sesuaikan batas tampilan Anda</translation>
@@ -4382,6 +4398,7 @@
 <translation id="7831491651892296503">Terjadi error saat mengonfigurasi jaringan</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
 <translation id="7832084384634357321">Waktu berakhir</translation>
+<translation id="7832327313660264358">Data yang Anda sinkronkan ke Google dan fitur yang Anda gunakan tidak akan berubah</translation>
 <translation id="7833720883933317473">Kata khusus yang disimpan akan muncul di sini</translation>
 <translation id="7837307963048806839">•  $1</translation>
 <translation id="7837776265184002579">Beranda diubah menjadi <ph name="URL" />.</translation>
@@ -4407,7 +4424,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Disandingkan</translation>
 <translation id="7870730066603611552">Tinjau opsi sinkronisasi setelah penyiapan</translation>
 <translation id="7870790288828963061">Tidak ada aplikasi Kios dengan versi lebih baru yang ditemukan. Tidak ada yang akan diperbarui. Lepaskan stik USB.</translation>
-<translation id="7874357055309047713">Selalu jalankan di semua situs</translation>
 <translation id="7877451762676714207">Kesalahan server tidak diketahui. Coba lagi, atau hubungi administrator server.</translation>
 <translation id="7877680364634660272">Tur</translation>
 <translation id="7878562273885520351">Sandi Anda mungkin disusupi</translation>
@@ -4742,6 +4758,7 @@
 <translation id="8400146488506985033">Kelola orang</translation>
 <translation id="8410073653152358832">Gunakan ponsel ini</translation>
 <translation id="8410775397654368139">Google Play</translation>
+<translation id="8411022984399993066">Ya, aktifkan sinkronisasi dan personalisasi</translation>
 <translation id="8413385045638830869">Tanya dulu (disarankan)</translation>
 <translation id="8418445294933751433">Tampilkan &amp;sebagai tab</translation>
 <translation id="8419098111404128271">Hasil penelusuran untuk '<ph name="SEARCH_TEXT" />'</translation>
@@ -4756,7 +4773,6 @@
 <translation id="8428634594422941299">Mengerti</translation>
 <translation id="8431909052837336408">Ubah PIN SIM</translation>
 <translation id="8434480141477525001">Port Debug NaCl</translation>
-<translation id="8437331208797669910">Akses halaman</translation>
 <translation id="843760761634048214">Simpan kartu kredit</translation>
 <translation id="8438328416656800239">Beralih ke browser cerdas</translation>
 <translation id="8439506636278576865">Tawarkan penerjemahan halaman ke dalam bahasa ini</translation>
@@ -4787,6 +4803,7 @@
 <translation id="8470028084415844044">Untuk mendapatkan semua sandi di semua perangkat Anda, aktifkan sinkronisasi.</translation>
 <translation id="8470513973197838199">Sandi yang tersimpan untuk <ph name="ORIGIN" /></translation>
 <translation id="8472623782143987204">cadangan hardware</translation>
+<translation id="8474229360677287535">Tutup semua Jendela</translation>
 <translation id="8475313423285172237">Program lain di komputer Anda menambahkan ekstensi yang dapat mengubah cara kerja Chrome.</translation>
 <translation id="8475647382427415476">Saat ini Google Drive tidak dapat menyinkronkan "<ph name="FILENAME" />". Google Drive akan mencoba lagi nanti.</translation>
 <translation id="8477241577829954800">Diganti</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 2b6b1da..5cb867eb 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Modifica dell'interfaccia utente dei Preferiti</translation>
 <translation id="2422426094670600218">&lt;senza nome&gt;</translation>
 <translation id="2423578206845792524">Sa&amp;lva immagine con nome...</translation>
-<translation id="2424091190911472304">Esegui sempre su <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Dimensioni totali file</translation>
 <translation id="2428510569851653187">Descrivi cosa stavi facendo quando la scheda si è arrestata in modo anomalo</translation>
 <translation id="2431027948063157455">Impossibile caricare l'Assistente Google, controlla la connessione di rete e riprova.</translation>
@@ -1199,7 +1198,6 @@
 <translation id="2838379631617906747">Installazione</translation>
 <translation id="2841837950101800123">Provider</translation>
 <translation id="2843806747483486897">Cambia predefinita...</translation>
-<translation id="2844111009524261443">Esegui al clic</translation>
 <translation id="2845382757467349449">Mostra sempre barra dei Preferiti</translation>
 <translation id="2847759467426165163">Trasmetti a</translation>
 <translation id="284805635805850872">Rimuovere il software dannoso?</translation>
@@ -1511,7 +1509,6 @@
 <translation id="3308116878371095290">Impostazione dei cookie vietata per questa pagina.</translation>
 <translation id="3308134619352333507">Nascondi pulsante</translation>
 <translation id="3308852433423051161">Caricamento dell'Assistente Google...</translation>
-<translation id="3309747692199697901">Esegui sempre su tutti i siti</translation>
 <translation id="3312424061798279731">Lingue attive</translation>
 <translation id="3313590242757056087">Per impostare i siti web che l'utente supervisionato può visualizzare, puoi configurare limitazioni e impostazioni visitando il sito all'indirizzo <ph name="MANAGEMENT_URL" />.
 Se non modifichi le impostazioni predefinite, <ph name="USER_DISPLAY_NAME" /> può visitare tutti i siti sul Web.</translation>
@@ -1807,7 +1804,6 @@
 <translation id="3759933321830434300">Blocco di parti delle pagine web</translation>
 <translation id="3760460896538743390">Ispeziona pagina in &amp;background</translation>
 <translation id="37613671848467444">Apri in finestra di navigazione in &amp;incognito</translation>
-<translation id="3763401818161139108">Esegui sempre su <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Informazioni build dettagliate</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Comunicazione con un dispositivo USB}other{Comunicazione con # dispositivi USB}}</translation>
 <translation id="3764986667044728669">Impossibile registrare</translation>
@@ -2268,7 +2264,6 @@
 <translation id="4547992677060857254">La cartella che hai selezionato contiene file delicati. Vuoi concedere a "$1" accesso di scrittura permanente a questa cartella?</translation>
 <translation id="4552031286893852992">Chrome ha bloccato gli annunci su questo sito perché il sito tende a mostrare annunci invasivi.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Accesso alla pagina</translation>
 <translation id="4552678318981539154">Acquista più spazio di archiviazione</translation>
 <translation id="4554591392113183336">La versione dell'estensione esterna è pari o precedente a quella dell'estensione esistente.</translation>
 <translation id="4555769855065597957">Ombra</translation>
@@ -3263,7 +3258,6 @@
 <translation id="6080515710685820702">Condividi il computer con altre persone? Prova ad aprire una finestra di navigazione in incognito.</translation>
 <translation id="6080689532560039067">Controlla l'ora del sistema</translation>
 <translation id="6082651258230788217">Mostra in barra degli strumenti</translation>
-<translation id="6086814797483779854">Esegui al clic</translation>
 <translation id="6086846494333236931">Installata dall'amministratore</translation>
 <translation id="6087960857463881712">Faccina splendente</translation>
 <translation id="6089481419520884864">Pagina Distill</translation>
@@ -4394,7 +4388,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" />, accoppiato</translation>
 <translation id="7870730066603611552">Controlla le opzioni di sincronizzazione dopo la configurazione</translation>
 <translation id="7870790288828963061">Nessuna app kiosk con versione più recente trovata. Non c'è nulla da aggiornare. Rimuovi la chiavetta USB.</translation>
-<translation id="7874357055309047713">Esegui sempre su tutti i siti</translation>
 <translation id="7877451762676714207">Errore del server sconosciuto. Riprova o contatta l'amministratore del server.</translation>
 <translation id="7877680364634660272">Tour</translation>
 <translation id="7878562273885520351">La tua password potrebbe essere stata compromessa</translation>
@@ -4743,7 +4736,6 @@
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431909052837336408">Cambia il PIN della SIM</translation>
 <translation id="8434480141477525001">Porta di debug NaCl</translation>
-<translation id="8437331208797669910">Accesso alla pagina</translation>
 <translation id="843760761634048214">Salva la carta di credito</translation>
 <translation id="8438328416656800239">Passa a un browser intelligente</translation>
 <translation id="8439506636278576865">Proponi di tradurre pagine in questa lingua</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index a2a560d..70a5bd8 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">שינוי ממשק המשתמש עבור סימניות</translation>
 <translation id="2422426094670600218">&lt;ללא שם&gt;</translation>
 <translation id="2423578206845792524">שמ&amp;ור תמונה בשם...</translation>
-<translation id="2424091190911472304">הרץ תמיד ב-<ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">גודל הקובץ הכולל</translation>
 <translation id="2428510569851653187">תאר מה עשית לפני שהכרטיסייה קרסה</translation>
 <translation id="2431027948063157455">‏לא ניתן היה לטעון את Google Assistant. יש לבדוק את חיבור הרשת ולנסות שוב.</translation>
@@ -1197,7 +1196,6 @@
 <translation id="2838379631617906747">מתקין</translation>
 <translation id="2841837950101800123">ספק</translation>
 <translation id="2843806747483486897">שנה את ברירת המחדל...</translation>
-<translation id="2844111009524261443">הרץ בעת לחיצה</translation>
 <translation id="2845382757467349449">הצג תמיד את סרגל הסימניות</translation>
 <translation id="2847759467426165163">העברה אל</translation>
 <translation id="284805635805850872">להסיר את התוכנה המזיקה?</translation>
@@ -1508,7 +1506,6 @@
 <translation id="3308116878371095290">‏לא ניתן להגדיר קובצי Cookie לדף זה.</translation>
 <translation id="3308134619352333507">לחצן 'הסתר'</translation>
 <translation id="3308852433423051161">‏טוען את Google Assistant...</translation>
-<translation id="3309747692199697901">הרץ תמיד בכל האתרים</translation>
 <translation id="3312424061798279731">שפות זמינות</translation>
 <translation id="3313590242757056087">כדי להגדיר אילו אתרים המשתמש בפיקוח יכול להציג, ניתן להגדיר הגבלות
     והגדרות על ידי ביקור ב-<ph name="MANAGEMENT_URL" />.
@@ -1806,7 +1803,6 @@
 <translation id="3759933321830434300">חסימת חלקים של דפי אינטרנט</translation>
 <translation id="3760460896538743390">בדיקת דף ה&amp;רקע</translation>
 <translation id="37613671848467444">פתח בחלון &amp;גלישה בסתר</translation>
-<translation id="3763401818161139108">הרץ תמיד ב-<ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">מידע מפורט על הגרסה</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{‏תקשורת עם מכשיר USB אחד}two{‏תקשורת עם # מכשירי USB}many{‏תקשורת עם # מכשירי USB}other{‏תקשורת עם # מכשירי USB}}</translation>
 <translation id="3764986667044728669">לא ניתן להירשם</translation>
@@ -2267,7 +2263,6 @@
 <translation id="4547992677060857254">התיקיה שבחרת מכילה קבצים רגישים. האם אתה בטוח שברצונך להעניק ל-"$1" גישה קבועה לכתיבה בתיקיה זו?</translation>
 <translation id="4552031286893852992">‏Chrome חסם מודעות באתר הזה כי הוא נוטה להציג מודעות שמפריעות.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">גישה לדף</translation>
 <translation id="4552678318981539154">קנה עוד שטח אחסון</translation>
 <translation id="4554591392113183336">התוסף החיצוני הוא מגרסה זהה או קודמת לזו של התוסף הקיים.</translation>
 <translation id="4555769855065597957">צל</translation>
@@ -3264,7 +3259,6 @@
 <translation id="6080515710685820702">האם זהו מחשב משותף? כדאי לפתוח חלון גלישה בסתר.</translation>
 <translation id="6080689532560039067">בדוק את שעת המערכת</translation>
 <translation id="6082651258230788217">הצג בסרגל הכלים</translation>
-<translation id="6086814797483779854">הרץ בעת לחיצה</translation>
 <translation id="6086846494333236931">הותקן על ידי מנהל המערכת שלך</translation>
 <translation id="6087960857463881712">פרצוף "אדיר!"</translation>
 <translation id="6089481419520884864">זקק דף</translation>
@@ -4395,7 +4389,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - מותאם</translation>
 <translation id="7870730066603611552">בדיקת אפשרויות הסינכרון אחרי ההגדרה</translation>
 <translation id="7870790288828963061">לא נמצאו אפליקציות קיוסק בגרסה חדשה יותר. אין צורך בעדכון. הסר את הדיסק און קי.</translation>
-<translation id="7874357055309047713">הרץ תמיד בכל האתרים</translation>
 <translation id="7877451762676714207">שגיאת שרת לא ידועה. נסה שוב או פנה למנהל השרת.</translation>
 <translation id="7877680364634660272">סיור</translation>
 <translation id="7878562273885520351">ייתכן שאבטחת הסיסמה שלך נפגעה</translation>
@@ -4744,7 +4737,6 @@
 <translation id="8428634594422941299">הבנתי</translation>
 <translation id="8431909052837336408">‏שנה את מספר ה-PIN של ה-SIM</translation>
 <translation id="8434480141477525001">יציאת ניפוי באגים של לקוח מקומי</translation>
-<translation id="8437331208797669910">גישה לדף</translation>
 <translation id="843760761634048214">שמור כרטיס אשראי</translation>
 <translation id="8438328416656800239">החלף לדפדפן חכם</translation>
 <translation id="8439506636278576865">הצעות לתרגום דפים שנכתבו בשפה זו</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index d1571a7f..4d6dbea 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -913,7 +913,6 @@
 <translation id="2413749388954403953">ブックマークのユーザー インターフェースの変更</translation>
 <translation id="2422426094670600218">&lt;名前なし&gt;</translation>
 <translation id="2423578206845792524">名前を付けて画像を保存(&amp;V)...</translation>
-<translation id="2424091190911472304"><ph name="ORIGIN" /> で常に実行</translation>
 <translation id="2425665904502185219">合計ファイルサイズ</translation>
 <translation id="2428510569851653187">タブのクラッシュ時に行っていた操作をご説明ください</translation>
 <translation id="2431027948063157455">Google アシスタントを読み込めませんでした。ネットワーク接続を確認してから、もう一度お試しください。</translation>
@@ -1201,7 +1200,6 @@
 <translation id="2838379631617906747">インストール中</translation>
 <translation id="2841837950101800123">提供元</translation>
 <translation id="2843806747483486897">デフォルトを変更...</translation>
-<translation id="2844111009524261443">クリックで実行</translation>
 <translation id="2845382757467349449">ブックマーク バーを常に表示</translation>
 <translation id="2847759467426165163">キャストするデバイス:</translation>
 <translation id="284805635805850872">有害なソフトウェアを削除しますか?</translation>
@@ -1513,7 +1511,6 @@
 <translation id="3308116878371095290">このページの Cookie は設定されませんでした。</translation>
 <translation id="3308134619352333507">ボタンを非表示にする</translation>
 <translation id="3308852433423051161">Google アシスタントを読み込んでいます...</translation>
-<translation id="3309747692199697901">すべてのサイトで常に実行</translation>
 <translation id="3312424061798279731">有効な言語</translation>
 <translation id="3313590242757056087">監視対象ユーザーがどのウェブサイトを閲覧できるかを設定するには、
     管理者が <ph name="MANAGEMENT_URL" /> で制限と設定を指定します。
@@ -1811,7 +1808,6 @@
 <translation id="3759933321830434300">一部のウェブページをブロックする</translation>
 <translation id="3760460896538743390">バックグラウンド ページの検証(&amp;B)</translation>
 <translation id="37613671848467444">シークレット ウィンドウで開く(&amp;I)</translation>
-<translation id="3763401818161139108"><ph name="ORIGIN" /> で常に実行</translation>
 <translation id="3764314093345384080">ビルド情報の詳細</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{1 台の USB デバイスと通信します}other{# 台の USB デバイスと通信します}}</translation>
 <translation id="3764986667044728669">登録できません</translation>
@@ -2272,7 +2268,6 @@
 <translation id="4547992677060857254">選択したフォルダには、機密ファイルが含まれています。このフォルダに対する永続的な書き込みアクセス権を「$1」に付与してもよろしいですか?</translation>
 <translation id="4552031286893852992">このサイトでは煩わしい広告がよく表示されるため、Chrome で広告がブロックされました。</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">ページへのアクセス</translation>
 <translation id="4552678318981539154">追加ストレージを購入</translation>
 <translation id="4554591392113183336">外部の拡張機能のバージョンが既存のバージョン以下です。</translation>
 <translation id="4555769855065597957">シャドウ</translation>
@@ -3268,7 +3263,6 @@
 <translation id="6080515710685820702">共有のパソコンをお使いの場合は、シークレット ウィンドウをご活用ください。</translation>
 <translation id="6080689532560039067">システムの時刻の確認</translation>
 <translation id="6082651258230788217">ツールバーに表示</translation>
-<translation id="6086814797483779854">クリックで実行</translation>
 <translation id="6086846494333236931">管理者によりインストールされています</translation>
 <translation id="6087960857463881712">エピック スマイリー</translation>
 <translation id="6089481419520884864">ページを抽出</translation>
@@ -4410,7 +4404,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - ペア設定済み</translation>
 <translation id="7870730066603611552">設定後に同期オプションを確認する</translation>
 <translation id="7870790288828963061">新しいバージョンのキオスクアプリが見つかりませんでした。更新するものはありません。USB スティックを取り外してください。</translation>
-<translation id="7874357055309047713">すべてのサイトで常に実行</translation>
 <translation id="7877451762676714207">不明なサーバー エラーが発生しました。もう一度お試しになるか、サーバー管理者にご連絡ください。</translation>
 <translation id="7877680364634660272">使い方ガイド</translation>
 <translation id="7878562273885520351">パスワードが不正使用される可能性があります</translation>
@@ -4759,7 +4752,6 @@
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431909052837336408">SIM PIN を変更</translation>
 <translation id="8434480141477525001">NaCl デバッグ ポート</translation>
-<translation id="8437331208797669910">ページへのアクセス</translation>
 <translation id="843760761634048214">クレジット カードを保存</translation>
 <translation id="8438328416656800239">スマートなブラウザをぜひご利用ください</translation>
 <translation id="8439506636278576865">この言語のページで翻訳ツールを表示する</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index cb608ee1..592994d 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳ ಬಳಕೆದಾರರ ಇಂಟರ್ಫೇಸ್ ಬದಲಾಯಿಸಿ</translation>
 <translation id="2422426094670600218">&lt;ಹೆಸರಿಸದಿರುವುದು&gt;</translation>
 <translation id="2423578206845792524">ಇದರಂತೆ ಇಮೇಜ್ ಅನ್ನು ಉ&amp;ಳಿಸಿ...</translation>
-<translation id="2424091190911472304">ಯಾವಾಗಲೂ <ph name="ORIGIN" /> ನಲ್ಲಿ ರನ್ ಮಾಡಿ</translation>
 <translation id="2425665904502185219">ಒಟ್ಟು ಫೈಲ್‌ನ ಗಾತ್ರ</translation>
 <translation id="2428510569851653187">ಟ್ಯಾಬ್ ಕ್ರ್ಯಾಶ್ ಆದಾಗ ನೀವೇನು ಮಾಡುತ್ತಿದ್ದಿರಿ ಎಂಬುದನ್ನು ವಿವರಿಸಿ</translation>
 <translation id="2431027948063157455">Google ಸಹಾಯಕವನ್ನು ಲೋಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
@@ -1197,7 +1196,6 @@
 <translation id="2838379631617906747">ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="2841837950101800123">ಪೂರೈಕೆದಾರರು</translation>
 <translation id="2843806747483486897">ಡಿಫಾಲ್ಟ್‌ ಅನ್ನು ಬದಲಾಯಿಸಿ...</translation>
-<translation id="2844111009524261443">ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ರನ್ ಮಾಡು</translation>
 <translation id="2845382757467349449">ಯಾವಾಗಲೂ ಬುಕ್‌ಮಾರ್ಕ್‌ ಪಟ್ಟಿ ತೋರಿಸು</translation>
 <translation id="2847759467426165163">ಗೆ ಬಿತ್ತರಿಸಿ</translation>
 <translation id="284805635805850872">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ತೆಗೆದುಹಾಕುವಿರಾ?</translation>
@@ -1509,7 +1507,6 @@
 <translation id="3308116878371095290">ಕುಕ್ಕಿಗಳನ್ನು ಹೊಂದಿಸದಂತೆ ಈ ಪುಟವನ್ನು ತಡೆಗಟ್ಟಲಾಗಿದೆ.</translation>
 <translation id="3308134619352333507">ಬಟನ್ ಅನ್ನು ಮರೆಮಾಡು</translation>
 <translation id="3308852433423051161">Google ಸಹಾಯಕವನ್ನು ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation>
-<translation id="3309747692199697901">ಯಾವಾಗಲೂ ಎಲ್ಲಾ ಸೈಟ್‌ಗಳಲ್ಲಿ ರನ್ ಮಾಡು</translation>
 <translation id="3312424061798279731">ಸಕ್ರಿಯಗೊಳಿಸಲಾದ ಭಾಷೆಗಳು</translation>
 <translation id="3313590242757056087">ಯಾವ ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರರು ವೀಕ್ಷಿಸಬಹುದು ಎಂಬುದನ್ನು ಹೊಂದಿಸಲು, ನೀವು <ph name="MANAGEMENT_URL" /> ಗೆ ಭೇಟಿ ನೀಡುವುದರ ಮೂಲಕ ನಿರ್ಬಂಧಗಳು ಮತ್ತು
     ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದು.
@@ -1807,7 +1804,6 @@
 <translation id="3759933321830434300">ವೆಬ್ ಪುಟಗಳ ಭಾಗಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
 <translation id="3760460896538743390">&amp;ಹಿನ್ನಲೆ ಪುಟ ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="37613671848467444">&amp;ಅಜ್ಞಾತ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ</translation>
-<translation id="3763401818161139108">ಯಾವಾಗಲೂ <ph name="ORIGIN" /> ನಲ್ಲಿ ರನ್ ಮಾಡು</translation>
 <translation id="3764314093345384080">ವಿವರವಾದ ಬಿಲ್ಡ್ ಮಾಹಿತಿ</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{USB ಸಾಧನದೊಂದಿಗೆ ಸಂವಹನ ಮಾಡಿ}one{# USB ಸಾಧನಗಳೊಂದಿಗೆ ಸಂವಹನ ಮಾಡಿ}other{# USB ಸಾಧನಗಳೊಂದಿಗೆ ಸಂವಹನ ಮಾಡಿ}}</translation>
 <translation id="3764986667044728669">ದಾಖಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
@@ -2268,7 +2264,6 @@
 <translation id="4547992677060857254">ನೀವು ಆಯ್ಕೆ ಮಾಡಿರುವ ಫೋಲ್ಡರ್ ಸೂಕ್ಷ್ಮ ಫೈಲ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ಈ ಫೋಲ್ಡರ್‌ಗೆ "$1" ನ ಶಾಶ್ವತ ಬರೆಯುವ ಪ್ರವೇಶವನ್ನು ಒದಗಿಸಲು ನೀವು ಖಚಿತವಾಗಿರುವಿರಾ?</translation>
 <translation id="4552031286893852992">ಈ ಸೈಟ್‌ನಲ್ಲಿ Chrome, ಜಾಹೀರಾತುಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿದೆ. ಏಕೆಂದರೆ, ಈ ಸೈಟ್ ಸಾಮಾನ್ಯವಾಗಿ ಅತಿಕ್ರಮಣಕಾರಿಯಾಗಿರುವ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸುತ್ತದೆ.</translation>
 <translation id="4552089082226364758">ಫ್ಲ್ಯಾಶ್‌</translation>
-<translation id="4552495056028768700">ಪುಟ ಪ್ರವೇಶ</translation>
 <translation id="4552678318981539154">ಇನ್ನಷ್ಟು ಸಂಗ್ರಹಣೆಯನ್ನು ಖರೀದಿಸಿ</translation>
 <translation id="4554591392113183336">ಬಾಹ್ಯ ವಿಸ್ತರಣೆಯು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವುದಕ್ಕೆ ಹೋಲಿಸಿದರೆ ಅದೇ ಅಥವಾ ಕಡಿಮೆ ಆವೃತ್ತಿಯಲ್ಲಿದೆ</translation>
 <translation id="4555769855065597957">ನೆರಳು</translation>
@@ -3265,7 +3260,6 @@
 <translation id="6080515710685820702">ಹಂಚಿದ ಕಂಪ್ಯೂಟರ್‌ ಬಳಸಲಾಗುತ್ತಿದೆಯೇ? ಅದೃಶ್ಯ ವಿಂಡೋವನ್ನು ತೆರೆಯಲು ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="6080689532560039067">ನಿಮ್ಮ ಸಿಸ್ಟಂ ಸಮಯವನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="6082651258230788217">ಪರಿಕರಪಟ್ಟಿಯಲ್ಲಿ ತೋರಿಸು</translation>
-<translation id="6086814797483779854">ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ರನ್ ಮಾಡು</translation>
 <translation id="6086846494333236931">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸ್ಥಾಪಿಸಿದ್ದಾರೆ</translation>
 <translation id="6087960857463881712">ಅದ್ಭುತ ಮುಖ</translation>
 <translation id="6089481419520884864">ಪುಟವನ್ನು ಶೋಧಿಸು</translation>
@@ -4397,7 +4391,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - ಜೋಡಿಸಲಾಗಿದೆ</translation>
 <translation id="7870730066603611552">ಸೆಟಪ್ ನಂತರ ಸಿಂಕ್ ಆಯ್ಕೆಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="7870790288828963061">ಹೊಸ ಆವೃತ್ತಿಯೊಂದಿಗೆ ಯಾವುದೇ ಕಿಯೋಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಕಂಡುಬಂದಿಲ್ಲ. ನವೀಕರಿಸಲು ಏನೂ ಇಲ್ಲ. ದಯವಿಟ್ಟು USB ಸ್ಟಿಕ್ ತೆಗೆದುಹಾಕಿ.</translation>
-<translation id="7874357055309047713">ಯಾವಾಗಲೂ ಎಲ್ಲಾ ಸೈಟ್‌ಗಳಲ್ಲಿ ರನ್ ಮಾಡು</translation>
 <translation id="7877451762676714207">ಅಪರಿಚಿತ ಸರ್ವರ್ ದೋಷ. ದಯವಿಟ್ಟು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ, ಅಥವಾ ಸರ್ವರ್ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="7877680364634660272">ಪ್ರವಾಸ</translation>
 <translation id="7878562273885520351">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಸುಲಭವಾಗಿ ಪತ್ತೆ ಮಾಡಬಹುದು</translation>
@@ -4744,7 +4737,6 @@
 <translation id="8428634594422941299">ಅರ್ಥವಾಯಿತು</translation>
 <translation id="8431909052837336408">ಸಿಮ್‌ ಪಿನ್‌ ಬದಲಾಯಿಸು</translation>
 <translation id="8434480141477525001">NaCl ಡೀಬಗ್‌ ಪೋರ್ಟ್‌</translation>
-<translation id="8437331208797669910">ಪುಟ ಪ್ರವೇಶ</translation>
 <translation id="843760761634048214">ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಉಳಿಸಿ</translation>
 <translation id="8438328416656800239">ಸ್ಮಾರ್ಟ್ ಬ್ರೌಸರ್‌ಗೆ ಬದಲಿಸಿ</translation>
 <translation id="8439506636278576865">ಪುಟಗಳನ್ನು ಈ ಭಾಷೆಯಲ್ಲಿ ಅನುವಾದ ಮಾಡಲು ಅವಕಾಶ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 71431c1..ec31d730 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -455,6 +455,7 @@
 <translation id="166439687370499867">공유 네트워크 설정 변경은 허용되지 않습니다</translation>
 <translation id="1665611772925418501">파일을 수정하지 못했습니다.</translation>
 <translation id="1670399744444387456">기본</translation>
+<translation id="167160931442925455">가장 크게</translation>
 <translation id="1673103856845176271">보안 상의 이유로 파일에 액세스하지 못했습니다.</translation>
 <translation id="1673137583248014546"><ph name="URL" />에서 보안 키 제조업체와 모델을 확인하려고 합니다.</translation>
 <translation id="167832068858235403">볼륨 작게</translation>
@@ -511,6 +512,7 @@
 <translation id="1758831820837444715">이더넷 네트워크 설정</translation>
 <translation id="1763046204212875858">애플리케이션 바로가기 만들기</translation>
 <translation id="1763108912552529023">계속 살펴보기</translation>
+<translation id="1763808908432309942">새 탭에서 열기</translation>
 <translation id="1764226536771329714">베타</translation>
 <translation id="176587472219019965">새 창(&amp;N)</translation>
 <translation id="1768278914020124551">로그온 서버에 연결하는 중에 문제가 발생했습니다. 네트워크 연결 및 도메인 이름을 확인한 다음 다시 시도하세요.</translation>
@@ -591,6 +593,7 @@
 <translation id="1871615898038944731"><ph name="DEVICE_TYPE" />이(가) 최신 버전</translation>
 <translation id="1875387611427697908">이 프로그램은 <ph name="CHROME_WEB_STORE" />에서만 추가할 수 있습니다</translation>
 <translation id="1877520246462554164">인증 토큰을 가져오지 못했습니다. 로그아웃한 다음 다시 로그인하여 다시 시도해 주세요.</translation>
+<translation id="1878302395768190018">Chrome 설정에서 언제든지 맞춤설정할 수 있습니다.</translation>
 <translation id="1878524442024357078">사이트에서 플러그인을 사용하여 내 컴퓨터에 액세스하도록 허용하지 않음</translation>
 <translation id="1880905663253319515">인증서 '<ph name="CERTIFICATE_NAME" />'을(를) 삭제하시겠습니까?</translation>
 <translation id="1886996562706621347">사이트에서 프로토콜 기본 핸들러로 사용할지 여부를 묻도록 허용(권장)</translation>
@@ -913,7 +916,6 @@
 <translation id="2413749388954403953">북마크 사용자 인터페이스 변경</translation>
 <translation id="2422426094670600218">&lt;unnamed&gt;</translation>
 <translation id="2423578206845792524">이미지를 다른 이름으로 저장(&amp;V)...</translation>
-<translation id="2424091190911472304">항상 <ph name="ORIGIN" />에서 실행</translation>
 <translation id="2425665904502185219">전체 파일 크기</translation>
 <translation id="2428510569851653187">탭이 다운되었을 때 무엇을 하고 계셨는지 설명해 주세요.</translation>
 <translation id="2431027948063157455">Google 어시스턴트를 로드할 수 없습니다. 네트워크 연결 상태를 확인하고 다시 시도해 보세요.</translation>
@@ -1006,6 +1008,7 @@
 <translation id="2562685439590298522">문서도구</translation>
 <translation id="2562743677925229011"><ph name="SHORT_PRODUCT_NAME" />에 로그인되어 있지 않습니다.</translation>
 <translation id="2563856802393254086">축하합니다. '<ph name="NAME" />' 데이터 서비스가 활성화되어 사용할 수 있습니다.</translation>
+<translation id="2564520396658920462">AppleScript를 통한 자바스크립트 실행 기능이 꺼져 있습니다. 이 기능을 사용하도록 설정하려면 메뉴 바에서 보기 &gt; 개발자 &gt; Apple Events의 자바스크립트 허용으로 이동하세요. 자세한 내용은 다음 페이지에서 확인하세요. https://support.google.com/chrome/?p=applescript</translation>
 <translation id="2566124945717127842">Powerwash는 <ph name="IDS_SHORT_PRODUCT_NAME" /> 기기를 재설정하여 새것처럼 만듭니다.</translation>
 <translation id="2567257616420533738">비밀번호가 저장되었습니다. <ph name="SAVED_PASSWORDS_LINK" />에 저장된 비밀번호를 보고 관리하세요.</translation>
 <translation id="2568774940984945469">정보 표시줄 컨테이너</translation>
@@ -1084,6 +1087,7 @@
 <translation id="2665394472441560184">새 단어 추가</translation>
 <translation id="2665717534925640469">페이지가 현재 전체화면으로 전환되었으며 마우스 커서를 사용 중지했습니다.</translation>
 <translation id="2665919335226618153">포맷 중에 오류가 발생했습니다.</translation>
+<translation id="2666990579225592931">게스트 창 열기</translation>
 <translation id="2667463864537187133">맞춤법 검사 관리</translation>
 <translation id="2670102641511624474"><ph name="APP_NAME" />이(가) Chrome 탭을 공유합니다.</translation>
 <translation id="2670429602441959756">이 페이지에는 아직 VR에서 지원되지 않는 기능이 있습니다. 종료합니다...</translation>
@@ -1201,7 +1205,6 @@
 <translation id="2838379631617906747">설치 중</translation>
 <translation id="2841837950101800123">발급기관</translation>
 <translation id="2843806747483486897">기본값 변경...</translation>
-<translation id="2844111009524261443">클릭하여 실행</translation>
 <translation id="2845382757467349449">북마크바 항상 표시</translation>
 <translation id="2847759467426165163">전송할 기기</translation>
 <translation id="284805635805850872">유해한 소프트웨어를 삭제하시겠습니까?</translation>
@@ -1230,6 +1233,7 @@
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" />이(가) 다시 시작되어 곧 재설정됩니다.</translation>
 <translation id="2885378588091291677">작업 관리자</translation>
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
+<translation id="2886800363598651778">모든 기기에서 Chrome을 동기화하고 맞춤설정</translation>
 <translation id="2887525882758501333">PDF 문서</translation>
 <translation id="2888807692577297075">&lt;b&gt;'<ph name="SEARCH_STRING" />'&lt;/b&gt;와(과) 일치하는 항목 없음</translation>
 <translation id="2889064240420137087">다음으로 링크 열기...</translation>
@@ -1513,7 +1517,6 @@
 <translation id="3308116878371095290">이 페이지에서 쿠키를 설정할 수 없습니다.</translation>
 <translation id="3308134619352333507">버튼 숨기기</translation>
 <translation id="3308852433423051161">Google 어시스턴트 로드 중...</translation>
-<translation id="3309747692199697901">항상 모든 사이트에서 실행</translation>
 <translation id="3312424061798279731">사용 설정된 언어</translation>
 <translation id="3313590242757056087">관리 대상 사용자가 볼 수 있는 웹사이트를 설정하려면
     <ph name="MANAGEMENT_URL" /> 페이지에 방문하여 제한사항 및 설정을 지정할 수 있습니다.
@@ -1754,6 +1757,7 @@
 <translation id="3670229581627177274">블루투스 켜기</translation>
 <translation id="3672681487849735243">하드웨어에서 문제가 발견되었습니다.</translation>
 <translation id="367645871420407123">루트 비밀번호를 기본 테스트 이미지 값으로 설정하려면 비워두세요.</translation>
+<translation id="3677657024345889897">가장 조용하게</translation>
 <translation id="3678156199662914018">확장 프로그램: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3681311097828166361">의견을 보내주셔서 감사합니다. 현재 오프라인 상태이므로 보고서는 나중에 전송됩니다.</translation>
 <translation id="3683023058278427253">도메인에서 여러 개의 라이선스 유형이 감지되었습니다. 계속하려면 하나의 유형을 선택하세요.</translation>
@@ -1811,7 +1815,6 @@
 <translation id="3759933321830434300">웹페이지의 일부 차단</translation>
 <translation id="3760460896538743390">백그라운드 페이지 검사(&amp;B)</translation>
 <translation id="37613671848467444">시크릿 창에서 열기(&amp;I)</translation>
-<translation id="3763401818161139108">항상 <ph name="ORIGIN" />에서 실행</translation>
 <translation id="3764314093345384080">자세한 빌드 정보</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{USB 기기 1개와 통신}other{USB 기기 #개와 통신}}</translation>
 <translation id="3764986667044728669">등록할 수 없음</translation>
@@ -1952,6 +1955,7 @@
 <translation id="3956702100721821638">Google Play에 접속할 수 없음</translation>
 <translation id="3958088479270651626">북마크 및 설정 가져오기</translation>
 <translation id="3960566196862329469">ONC</translation>
+<translation id="3965965397408324205"><ph name="PROFILE_NAME" /> 나가기</translation>
 <translation id="3966072572894326936">다른 폴더 선택...</translation>
 <translation id="3966388904776714213">오디오 플레이어</translation>
 <translation id="3967822245660637423">다운로드 완료</translation>
@@ -1993,6 +1997,7 @@
 <translation id="4031910098617850788">F5</translation>
 <translation id="4033471457476425443">새 폴더 추가</translation>
 <translation id="4034042927394659004">키 밝기 낮춤</translation>
+<translation id="4034824040120875894">프린터</translation>
 <translation id="4035758313003622889">작업 관리자(&amp;T)</translation>
 <translation id="4036758022112812315">듣고 싶은 항목을 강조표시한 다음 검색 + S를 누르거나 검색을 길게 누른 다음 클릭하거나 드래그하여 콘텐츠를 선택합니다.</translation>
 <translation id="4037084878352560732">말</translation>
@@ -2075,6 +2080,7 @@
 <translation id="4181602000363099176">20배</translation>
 <translation id="4181841719683918333">언어</translation>
 <translation id="4184885522552335684">디스플레이를 이동하려면 드래그하세요.</translation>
+<translation id="4192273449750167573">다음 화면에서 설정 검토</translation>
 <translation id="4193154014135846272">Google 문서</translation>
 <translation id="4194570336751258953">두드려서 클릭</translation>
 <translation id="4195643157523330669">새 탭에서 열기</translation>
@@ -2271,7 +2277,6 @@
 <translation id="4547992677060857254">선택한 폴더에 민감한 파일이 포함되어 있습니다. 이 폴더에 '$1' 영구 쓰기 액세스를 승인하시겠습니까?</translation>
 <translation id="4552031286893852992">이 사이트는 방해가 되는 광고를 표시하는 경향이 있기 때문에 Chrome에서 이 사이트의 광고를 차단했습니다.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">페이지 액세스</translation>
 <translation id="4552678318981539154">추가 저장용량 구입</translation>
 <translation id="4554591392113183336">외부 확장 프로그램의 버전이 기존 프로그램과 동일하거나 낮습니다.</translation>
 <translation id="4555769855065597957">그림자</translation>
@@ -2323,6 +2328,7 @@
 <translation id="4632483769545853758">탭 음소거 해제</translation>
 <translation id="4633003931260532286">확장 프로그램은 최소 버전 '<ph name="IMPORT_VERSION" />'의 '<ph name="IMPORT_NAME" />'을(를) 요구하지만 '<ph name="INSTALLED_VERSION" />' 버전만 설치되었습니다</translation>
 <translation id="4634771451598206121">다시 로그인...</translation>
+<translation id="4635398712689569051">게스트 사용자는 <ph name="PAGE_NAME" />을(를) 사용할 수 없음</translation>
 <translation id="4640525840053037973">Google 계정으로 로그인</translation>
 <translation id="4641539339823703554">Chrome에서 시스템 시간을 설정할 수 없습니다. 아래에서 시간을 확인한 다음 필요한 경우 수정해 주세요.</translation>
 <translation id="4643612240819915418">새 탭에서 동영상 열기(&amp;O)</translation>
@@ -2359,6 +2365,7 @@
     이를 예상하지 못한 경우 지원팀에 문의하세요.</translation>
 <translation id="469230890969474295">OEM 폴더</translation>
 <translation id="4692623383562244444">검색엔진</translation>
+<translation id="4694024090038830733">프린터 구성은 관리자가 처리합니다.</translation>
 <translation id="4697551882387947560">탐색 세션이 종료될 때</translation>
 <translation id="4699172675775169585">캐시된 이미지 또는 파일</translation>
 <translation id="4699357559218762027">(자동 실행)</translation>
@@ -2367,6 +2374,7 @@
 <translation id="4707934200082538898">자세한 안내를 보려면 <ph name="BEGIN_BOLD" /><ph name="MANAGER_EMAIL" /><ph name="END_BOLD" />에서 이메일을 확인하세요.</translation>
 <translation id="4708794300267213770">절전 모드 해제 시 잠금 화면 표시</translation>
 <translation id="4708849949179781599"><ph name="PRODUCT_NAME" /> 종료</translation>
+<translation id="4710251968215868702">방문한 사이트의 콘텐츠, 브라우저 활동 및 상호작용이 사용됩니다.</translation>
 <translation id="4711638718396952945">설정값 복원</translation>
 <translation id="4713544552769165154">이 파일은 Macintosh 소프트웨어를 사용하는 컴퓨터용으로 설계되었으며 Chrome OS를 실행하는 기기와 호환될 수 없습니다. 적합한 대체 앱을 찾으려면 <ph name="BEGIN_LINK" />Chrome 웹 스토어<ph name="END_LINK" />를 검색하세요. <ph name="BEGIN_LINK_HELP" />자세히 알아보기<ph name="END_LINK_HELP" /></translation>
 <translation id="4714531393479055912">이제 <ph name="PRODUCT_NAME" />에서 비밀번호를 동기화할 수 있습니다.</translation>
@@ -2734,6 +2742,7 @@
 <translation id="527605719918376753">탭 음소거</translation>
 <translation id="527605982717517565"><ph name="HOST" />에서 자바스크립트 항상 허용</translation>
 <translation id="5280426389926346830">바로가기를 만드시겠습니까?</translation>
+<translation id="528208740344463258">Android 앱을 다운로드하고 사용하려면 우선 필수 업데이트를 설치해야 합니다. 업데이트 중에는 <ph name="DEVICE_TYPE" /> 기기를 사용할 수 없습니다. 설치가 완료되면 <ph name="DEVICE_TYPE" /> 기기가 다시 시작됩니다.</translation>
 <translation id="5282733140964383898">'추적 안함'을 사용 설정하면 요청이 탐색 트래픽에 포함됩니다. 웹사이트가 요청에 응답하는지와 요청이 어떻게 해석되는가에 따라 결과가 달라집니다. 예를 들어, 어떤 웹사이트는 사용자의 웹사이트 방문 기록과 관계없는 광고를 표시하는 방식으로 요청에 응답할 수 있습니다. 이 설정을 사용해도 대부분의 웹사이트에서는 보안을 강화하거나 웹사이트에서 콘텐츠, 서비스, 광고 및 추천 정보를 제공하거나 보고서 통계를 생성하는 등의 목적으로 사용자의 인터넷 사용 기록을 수집하고 사용됩니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation>
 <translation id="5283677936944177147">시스템이 기기 모델 또는 일련번호를 확인하는 데 실패했습니다.</translation>
 <translation id="5284445933715251131">다운로드 계속</translation>
@@ -3095,6 +3104,7 @@
 <translation id="5807290661599647102">화면 잠금 설정</translation>
 <translation id="580926004266167721">컴퓨터가 도메인에 가입하지 못했습니다. 계정에 조직 단위와 관련된 권한이 충분하지 않기 때문일 수도 있습니다.</translation>
 <translation id="580961539202306967">사이트에서 푸시 메시지를 보내려는 경우 알림(권장)</translation>
+<translation id="5809725759695043233">Chromebook에 최적화된 앱이 있습니다.</translation>
 <translation id="5814126672212206791">연결 유형</translation>
 <translation id="5815645614496570556">X.400 주소</translation>
 <translation id="5817918615728894473">페어링</translation>
@@ -3267,7 +3277,6 @@
 <translation id="6080515710685820702">공유 컴퓨터를 사용 중이신가요? 시크릿 창에서 열어보세요.</translation>
 <translation id="6080689532560039067">시스템 시간 확인</translation>
 <translation id="6082651258230788217">툴바에서 보기</translation>
-<translation id="6086814797483779854">클릭하여 실행</translation>
 <translation id="6086846494333236931">관리자가 설치함</translation>
 <translation id="6087960857463881712">멋진 얼굴</translation>
 <translation id="6089481419520884864">페이지 추출</translation>
@@ -3458,9 +3467,11 @@
 <translation id="6383051423892982287">나만의 <ph name="BEGIN_LINK" />동기화 암호<ph name="END_LINK" />로 동기화 데이터 암호화</translation>
 <translation id="6384275966486438344">다음으로 검색 설정 변경: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">사이트에서 쿠키 데이터를 저장하고 읽을 수 있음</translation>
+<translation id="6388429472088318283">언어 검색</translation>
 <translation id="6388771388956873507">기기에서 지문 센서를 찾아 손가락으로 터치합니다.</translation>
 <translation id="6390799748543157332">이 창에서 보는 페이지는 브라우저 기록에 나타나지 않으며 열려 있는 모든 손님 창을 닫은 후에도 컴퓨터에 쿠키와 같은 다른 흔적을 남기지 않습니다. 하지만 다운로드한 파일은 모두 저장됩니다.</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />시스템 정보<ph name="END_LINK1" /> 및 <ph name="BEGIN_LINK2" />통계<ph name="END_LINK2" /> 전송</translation>
+<translation id="6397094776139756010">동기화 및 맞춤설정 옵션</translation>
 <translation id="6397592254427394018">모든 북마크를 시크릿 창에서 열기(&amp;I)</translation>
 <translation id="6398715114293939307">Google Play 스토어 삭제</translation>
 <translation id="6398765197997659313">전체화면 닫기</translation>
@@ -3650,6 +3661,7 @@
 <translation id="6659594942844771486">탭</translation>
 <translation id="6664237456442406323">컴퓨터가 잘못된 형식의 하드웨어 ID로 구성되어 있습니다. 이렇게 하면 Chrome OS가 최신 보안 수정사항을 업데이트할 수 없으며 컴퓨터가<ph name="BEGIN_BOLD" />악의적인 공격에 취약해 집니다<ph name="END_BOLD" />.</translation>
 <translation id="6664774537677393800">프로필을 여는 동안 문제가 발생했습니다. 로그아웃했다가 다시 로그인하세요.</translation>
+<translation id="6670647982128220776">현재 동기화 및 맞춤설정 관련 기능은 단일 제어됩니다. 이 옵션을 사용하도록 설정하면 현재 설정이 변경될 수 있습니다.</translation>
 <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" />(USB)</translation>
 <translation id="667517062706956822">Google에서 이 페이지를 <ph name="SOURCE_LANGUAGE" />에서 <ph name="TARGET_LANGUAGE" />로 번역할까요?</translation>
 <translation id="6675665718701918026">포인팅 기기 연결됨</translation>
@@ -3764,6 +3776,7 @@
 <translation id="6841186874966388268">오류</translation>
 <translation id="6843725295806269523">음소거</translation>
 <translation id="6845038076637626672">최대화 상태로 열기</translation>
+<translation id="685040365210406336">변경하지 않음</translation>
 <translation id="6851497530878285708">앱 사용 설정됨</translation>
 <translation id="6853388645642883916">업데이터 절전 모드</translation>
 <translation id="68541483639528434">다른 탭 닫기</translation>
@@ -3963,6 +3976,7 @@
 <translation id="716810439572026343"><ph name="FILE_NAME" /> 다운로드 중</translation>
 <translation id="7168109975831002660">최소 글꼴 크기</translation>
 <translation id="7170041865419449892">범위를 벗어났습니다.</translation>
+<translation id="7171559745792467651">다른 기기의 앱 설치</translation>
 <translation id="7173917244679555">이미 해당 이름으로 된 관리 사용자가 있는 것 같습니다. <ph name="BEGIN_LINK" /><ph name="PROFILE_NAME" />을(를) 이 기기로 가져오시겠습니까<ph name="END_LINK" />?</translation>
 <translation id="7175037578838465313"><ph name="NAME" /> 설정</translation>
 <translation id="7175353351958621980">로드 위치:</translation>
@@ -4101,6 +4115,7 @@
           <ph name="END_BOLD" /></translation>
 <translation id="7387829944233909572">'인터넷 사용 기록 삭제' 대화상자</translation>
 <translation id="7388044238629873883">거의 완료되었습니다.</translation>
+<translation id="7388222713940428051">게스트 창 열기</translation>
 <translation id="7392118418926456391">바이러스 검사 실패</translation>
 <translation id="7392915005464253525">닫은 탭 다시 열기(&amp;E)</translation>
 <translation id="7396845648024431313">시스템이 시작할 때 <ph name="APP_NAME" />이(가) 실행되며 다른 모든 <ph name="PRODUCT_NAME" /> 창을 종료한 후에도 백그라운드에서 계속 실행됩니다.</translation>
@@ -4318,6 +4333,7 @@
 <translation id="773426152488311044">현재 유일한 <ph name="PRODUCT_NAME" /> 사용자입니다.</translation>
 <translation id="7740996059027112821">표준</translation>
 <translation id="7748528009589593815">이전 탭</translation>
+<translation id="7748626145866214022">작업 표시줄에서 더 많은 옵션을 사용할 수 있습니다. 작업 표시줄에 초점을 맞추려면 Alt + A를 누르세요.</translation>
 <translation id="7751260505918304024">전체 보기</translation>
 <translation id="7754704193130578113">다운로드 전에 각 파일의 저장 위치 확인</translation>
 <translation id="7758450972308449809">디스플레이 경계를 조정합니다.</translation>
@@ -4382,6 +4398,7 @@
 <translation id="7831491651892296503">네트워크를 설정하는 중에 오류가 발생했습니다</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
 <translation id="7832084384634357321">종료 시간</translation>
+<translation id="7832327313660264358">Google에 동기화하는 데이터 및 사용하는 기능은 변경되지 않습니다.</translation>
 <translation id="7833720883933317473">저장한 맞춤 단어가 여기에 표시됩니다.</translation>
 <translation id="7837307963048806839">•  $1</translation>
 <translation id="7837776265184002579">홈페이지가 <ph name="URL" />(으)로 변경되었습니다.</translation>
@@ -4407,7 +4424,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - 페어링됨</translation>
 <translation id="7870730066603611552">설정 후 동기화 옵션 검토</translation>
 <translation id="7870790288828963061">새로운 버전의 Kiosk 앱을 찾을 수 없습니다. 업데이트할 대상이 없습니다. USB 메모리를 제거하세요.</translation>
-<translation id="7874357055309047713">항상 모든 사이트에서 실행</translation>
 <translation id="7877451762676714207">알 수 없는 서버 오류입니다. 다시 시도하거나 서버 관리자에게 문의하시기 바랍니다.</translation>
 <translation id="7877680364634660272">둘러보기</translation>
 <translation id="7878562273885520351">비밀번호가 도용될 수도 있음</translation>
@@ -4742,6 +4758,7 @@
 <translation id="8400146488506985033">사용자 관리</translation>
 <translation id="8410073653152358832">이 휴대전화 사용</translation>
 <translation id="8410775397654368139">Google Play</translation>
+<translation id="8411022984399993066">네, 동기화 및 맞춤설정을 사용합니다</translation>
 <translation id="8413385045638830869">우선 확인(권장)</translation>
 <translation id="8418445294933751433">탭으로 표시(&amp;S)</translation>
 <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />'에 대한 검색결과</translation>
@@ -4756,7 +4773,6 @@
 <translation id="8428634594422941299">확인</translation>
 <translation id="8431909052837336408">SIM PIN 변경</translation>
 <translation id="8434480141477525001">NaCl 디버그 포트</translation>
-<translation id="8437331208797669910">페이지 액세스</translation>
 <translation id="843760761634048214">신용카드 저장</translation>
 <translation id="8438328416656800239">스마트 브라우저로 전환</translation>
 <translation id="8439506636278576865">이 언어로 된 페이지에 대한 번역 옵션 제공</translation>
@@ -4787,6 +4803,7 @@
 <translation id="8470028084415844044">저장된 비밀번호를 어느 기기에서나 사용하려면 동기화를 사용 설정하세요.</translation>
 <translation id="8470513973197838199"><ph name="ORIGIN" />의 저장된 비밀번호</translation>
 <translation id="8472623782143987204">하드웨어 지원</translation>
+<translation id="8474229360677287535">모든 창 닫기</translation>
 <translation id="8475313423285172237">컴퓨터의 다른 프로그램에서 Chrome 작동에 영향을 줄 수 있는 확장 프로그램을 추가했습니다.</translation>
 <translation id="8475647382427415476">Google 드라이브에서 '<ph name="FILENAME" />'을(를) 동기화하지 못했습니다. Google 드라이브에서 나중에 다시 시도합니다.</translation>
 <translation id="8477241577829954800">대체됨</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 53b6d96..5280b7c 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Keisti žymių naudotojo sąsają</translation>
 <translation id="2422426094670600218">&lt;be pavadinimo&gt;</translation>
 <translation id="2423578206845792524">Iš&amp;saugoti paveikslėlį kaip...</translation>
-<translation id="2424091190911472304">Visada vykdyti <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Bendras failų dydis</translation>
 <translation id="2428510569851653187">Apibūdinkite, ką darėte, kai skirtukas užstrigo</translation>
 <translation id="2431027948063157455">Nepavyko įkelti „Google“ padėjėjo, patikrinkite tinklo ryšį ir bandykite dar kartą.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">Diegiama</translation>
 <translation id="2841837950101800123">Teikėjas</translation>
 <translation id="2843806747483486897">Keisti numatytąjį...</translation>
-<translation id="2844111009524261443">Vykdyti spustelėjus</translation>
 <translation id="2845382757467349449">Visada rodyti žymių juostą</translation>
 <translation id="2847759467426165163">Perduoti į</translation>
 <translation id="284805635805850872">Pašalinti žalingą programinę įrangą?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Šiame puslapyje neleidžiama nustatyti slapukų.</translation>
 <translation id="3308134619352333507">Paslėpti mygtuką</translation>
 <translation id="3308852433423051161">Įkeliamas „Google“ padėjėjas...</translation>
-<translation id="3309747692199697901">Visada vykdyti visose svetainėse</translation>
 <translation id="3312424061798279731">Įgalintos kalbos</translation>
 <translation id="3313590242757056087">Jei norite nustatyti, kurias svetaines galės matyti prižiūrimas naudotojas, galite konfigūruoti apribojimus
     ir nustatymus apsilankę adresu <ph name="MANAGEMENT_URL" />.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Blokuoti tinklalapių dalis</translation>
 <translation id="3760460896538743390">Tikrinti fono puslapį</translation>
 <translation id="37613671848467444">Atidaryti inkognito lange</translation>
-<translation id="3763401818161139108">Visada vykdyti <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Išsami versijos informacija</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Užmegzti ryšį su USB įrenginiu}one{Užmegzti ryšį su # USB įrenginiu}few{Užmegzti ryšį su # USB įrenginiais}many{Užmegzti ryšį su # USB įrenginio}other{Užmegzti ryšį su # USB įrenginių}}</translation>
 <translation id="3764986667044728669">Nepavyko užregistruoti</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">Pasirinktame aplanke yra slaptų failų. Ar tikrai norite „$1“ suteikti nuolatinę šio aplanko rašymo prieigą?</translation>
 <translation id="4552031286893852992">„Chrome“ užblokavo skelbimus šioje svetainėje, nes joje bandoma rodyti nepageidaujamus skelbimus.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Puslapio pasiekiamumas</translation>
 <translation id="4552678318981539154">Įsigyti daugiau atminties</translation>
 <translation id="4554591392113183336">Išorinis plėtinys yra tos pačios arba senesnės versijos, palyginti su esama.</translation>
 <translation id="4555769855065597957">Šešėlis</translation>
@@ -3268,7 +3263,6 @@
 <translation id="6080515710685820702">Naudojate kompiuterį bendrai? Pabandykite atidaryti inkognito langą.</translation>
 <translation id="6080689532560039067">Patikrinkite sistemos laiką</translation>
 <translation id="6082651258230788217">Rodyti įrankių juostoje</translation>
-<translation id="6086814797483779854">Vykdyti spustelėjus</translation>
 <translation id="6086846494333236931">Įdiegė jūsų administratorius</translation>
 <translation id="6087960857463881712">Nuostabus veidas</translation>
 <translation id="6089481419520884864">„Distill“ puslapis</translation>
@@ -4408,7 +4402,6 @@
 <translation id="786957569166715433">„<ph name="DEVICE_NAME" />“ – susietas</translation>
 <translation id="7870730066603611552">Nustačius peržiūrėti sinchronizavimo parinktis</translation>
 <translation id="7870790288828963061">Nerasta jokių naujesnių versijų viešojo terminalo programų. Naujinių nėra. Atjunkite USB atmintuką.</translation>
-<translation id="7874357055309047713">Visada vykdyti visose svetainėse</translation>
 <translation id="7877451762676714207">Nežinoma serverio klaida. Bandykite dar kartą arba susisiekite su serverio administratoriumi.</translation>
 <translation id="7877680364634660272">Apžvalga</translation>
 <translation id="7878562273885520351">Jūsų slaptažodis gali būti pažeistas</translation>
@@ -4757,7 +4750,6 @@
 <translation id="8428634594422941299">Supratau</translation>
 <translation id="8431909052837336408">SIM kortelės PIN kodo pakeitimas</translation>
 <translation id="8434480141477525001">„Native Client“ derinimo prievadas</translation>
-<translation id="8437331208797669910">Puslapio pasiekiamumas</translation>
 <translation id="843760761634048214">Išsaugoti kredito kortelės informaciją</translation>
 <translation id="8438328416656800239">Perjunkite į išmanią naršyklę</translation>
 <translation id="8439506636278576865">Siūlyti versti puslapius šia kalba</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 3dff97d..08c39b91 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Mainīt grāmatzīmju lietotāja saskarni</translation>
 <translation id="2422426094670600218">&lt;bez nosaukuma&gt;</translation>
 <translation id="2423578206845792524">Saglabāt attēlu kā ...</translation>
-<translation id="2424091190911472304">Vienmēr palaist vietnē <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Failu kopējais lielums</translation>
 <translation id="2428510569851653187">Norādiet, ko darījāt, kad cilne avarēja</translation>
 <translation id="2431027948063157455">Nevarēja ielādēt Google asistentu, lūdzu, pārbaudiet tīkla savienojumu un pēc tam mēģiniet vēlreiz.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">Notiek instalēšana</translation>
 <translation id="2841837950101800123">Nodrošinātājs</translation>
 <translation id="2843806747483486897">Mainīt noklusējumu...</translation>
-<translation id="2844111009524261443">Palaist pēc noklikšķināšanas</translation>
 <translation id="2845382757467349449">Vienmēr rādīt grāmatzīmju joslu</translation>
 <translation id="2847759467426165163">Cast ierīces izvēle</translation>
 <translation id="284805635805850872">Vai noņemt kaitīgo programmatūru?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Šai lapai netika atļauts saglabāt sīkfailus.</translation>
 <translation id="3308134619352333507">Slēpt pogu</translation>
 <translation id="3308852433423051161">Notiek Google asistenta ielāde…</translation>
-<translation id="3309747692199697901">Vienmēr palaist visās vietnēs</translation>
 <translation id="3312424061798279731">Iespējotās valodas</translation>
 <translation id="3313590242757056087">Lai iestatītu, kuras vietnes var skatīt uzraudzītais lietotājs, konfigurējiet ierobežojumus
     un iestatījumus, apmeklējot vietni <ph name="MANAGEMENT_URL" />.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Bloķēt tīmekļa lapu daļas</translation>
 <translation id="3760460896538743390">Pārbaudīt &amp;fona lapu</translation>
 <translation id="37613671848467444">Atvērt &amp;inkognito režīma logā</translation>
-<translation id="3763401818161139108">Vienmēr palaist vietnē <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Detalizēta informācija par versiju</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Saziņa ar USB ierīci}zero{Saziņa ar # USB ierīcēm}one{Saziņa ar # USB ierīci}other{Saziņa ar # USB ierīcēm}}</translation>
 <translation id="3764986667044728669">Nevar reģistrēt</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">Atlasītajā mapē ir iekļauti sensitīvi faili. Vai tiešām vēlaties piešķirt lietotnei $1 patstāvīgu rakstīšanas piekļuvi šai mapei?</translation>
 <translation id="4552031286893852992">Pārlūks Chrome šajā vietnē ir bloķējis reklāmu rādīšanu, jo šajā vietnē tiek rādītas traucējošas reklāmas.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Piekļuve lapai</translation>
 <translation id="4552678318981539154">Iegādāties papildu vietu krātuvē</translation>
 <translation id="4554591392113183336">Ārējā paplašinājuma versija ir tāda pati vai vecāka nekā pašreizējā paplašinājuma versija.</translation>
 <translation id="4555769855065597957">Ēna</translation>
@@ -3267,7 +3262,6 @@
 <translation id="6080515710685820702">Vai izmantojat koplietotu datoru? Atveriet inkognito režīma logu.</translation>
 <translation id="6080689532560039067">Sistēmas laika pārbaude</translation>
 <translation id="6082651258230788217">Rādīt rīkjoslā</translation>
-<translation id="6086814797483779854">Palaist pēc noklikšķināšanas</translation>
 <translation id="6086846494333236931">Instalēja administrators.</translation>
 <translation id="6087960857463881712">Satriecoša seja</translation>
 <translation id="6089481419520884864">Attīrīt lapu</translation>
@@ -4406,7 +4400,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> — izveidots savienojums pārī</translation>
 <translation id="7870730066603611552">Sinhronizācijas opciju pārskatīšana pēc iestatīšanas</translation>
 <translation id="7870790288828963061">Netika atrasta neviena Kioska lietotne ar jaunāku versiju. Nav jāatjaunina neviena lietotne. Lūdzu, izņemiet USB atmiņas karti.</translation>
-<translation id="7874357055309047713">Vienmēr palaist visās vietnēs</translation>
 <translation id="7877451762676714207">Nezināma servera kļūda. Mēģiniet vēlreiz vai sazinieties ar servera administratoru.</translation>
 <translation id="7877680364634660272">Ceļvedis</translation>
 <translation id="7878562273885520351">Iespējams, jūsu parole ir apdraudēta</translation>
@@ -4756,7 +4749,6 @@
 <translation id="8428634594422941299">Labi</translation>
 <translation id="8431909052837336408">SIM kartes PIN mainīšana</translation>
 <translation id="8434480141477525001">Native Client atkļūdošanas ports</translation>
-<translation id="8437331208797669910">Piekļuve lapai</translation>
 <translation id="843760761634048214">Saglabāt kredītkarti</translation>
 <translation id="8438328416656800239">Pāreja uz viedu pārlūku</translation>
 <translation id="8439506636278576865">Piedāvāt tulkot lapas šajā valodā</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index ffd9b88..7bdc68b8e 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -83,12 +83,14 @@
 <translation id="1122198203221319518">&amp;ഉപകരണങ്ങള്‍‌</translation>
 <translation id="1122242684574577509">പ്രാമാണീകരണം പരാജയപ്പെട്ടു. നിങ്ങൾ ഉപയോഗിക്കുന്ന (<ph name="NETWORK_ID" />) Wi-Fi നെറ്റ്‌വർക്കിനായി ലോഗിൻ പേജ് സന്ദർശിക്കാൻ ക്ലിക്കുചെയ്യുക.</translation>
 <translation id="1122960773616686544">ബുക്ക്മാർക്ക് പേര്</translation>
+<translation id="1123187597739372905">സമന്വയ ക്രമീകരണം കാണിക്കുക</translation>
 <translation id="1123316951456119629"><ph name="PRODUCT_NAME" /> എന്നതിൽ നിന്ന് നിങ്ങളുടെ Google അക്കൗണ്ട് വിച്ഛേദിക്കുന്നതിലൂടെ, ഈ കമ്പ്യൂട്ടറിൽ നിങ്ങളുടെ ഡാറ്റ ശേഷിക്കും പക്ഷേ Google അക്കൗണ്ടിൽ മാറ്റങ്ങൾ ഇനിമുതൽ സമന്വയിപ്പിക്കില്ല. <ph name="BEGIN_LINK" />Google ഡാഷ്‌ബോർഡ്<ph name="END_LINK" /> ഉപയോഗിച്ച് നിങ്ങൾ അത് നീക്കംചെയ്യുന്നതുവരെ Google അക്കൗണ്ടിൽ ഇതിനകം സംഭരിച്ചിരിക്കുന്ന ഡാറ്റ അവിടെ ശേഷിക്കും.</translation>
 <translation id="1124772482545689468">ഉപയോക്താവ്</translation>
 <translation id="1128109161498068552">MIDI ഉപകരണങ്ങൾ ആക്‌സസ്സുചെയ്യുന്നതിന് സിസ്റ്റം എക്‌സ്‌ക്ലൂസീവ് സന്ദേശങ്ങൾ ഉപയോഗിക്കുന്നതിന് ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്.</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">തിരയൽ എഞ്ചിൻ എഡിറ്റുചെയ്യുക</translation>
 <translation id="1134009406053225289">അദൃശ്യ വിന്‍ഡോയില്‍ തുറക്കുക</translation>
+<translation id="1136155683023653803">പാസ്‌വേഡുകൾ, ബുക്ക്‌മാർക്കുകൾ, ചരിത്രം എന്നിവയും മറ്റും നിങ്ങളുടെ അക്കൗണ്ടുമായി സമന്വയിപ്പിച്ചിരിക്കുന്നു</translation>
 <translation id="1137673463384776352"><ph name="APP" /> ആപ്പില്‍ ലിങ്ക് തുറക്കുക</translation>
 <translation id="1140351953533677694">നിങ്ങളുടെ Bluetooth, സീരിയൽ ഉപകരണങ്ങൾ ആക്‌‌സസ്സുചെയ്യുക</translation>
 <translation id="1140610710803014750">എല്ലാ ഉപകരണങ്ങളിലും നിങ്ങളുടെ ബുക്ക്‌മാർക്കുകൾ ലഭിക്കാൻ, സൈൻ ഇൻ ചെയ്യുക. 'സമന്വയം' ഓണാക്കുക</translation>
@@ -213,6 +215,7 @@
 <translation id="1314565355471455267">Android VPN</translation>
 <translation id="131461803491198646">ഹോം നെറ്റ്‍വര്‍ക്ക്, റോമിംഗ് അല്ല</translation>
 <translation id="1316136264406804862">തിരയുന്നു...</translation>
+<translation id="1316495628809031177">സമന്വയം താൽക്കാലികമായി നിർത്തി</translation>
 <translation id="1319979322914001937">ഒരു ആപ്പ് Chrome വെബ് സ്റ്റോറിൽ നിന്നുള്ള ഫിൽട്ടർ ചെയ്‌ത വിപുലീകരണങ്ങളുടെ ലിസ്റ്റ് കാണിക്കുന്നു. ലിസ്റ്റിലെ വിപുലീകരണങ്ങൾ ആപ്പിൽ നിന്ന് നേരിട്ട് ഇൻസ്റ്റാൾ ചെയ്യാനാകും.</translation>
 <translation id="132090119144658135">പൊരുത്തപ്പെടുന്ന വിഷയം:</translation>
 <translation id="1326317727527857210">നിങ്ങളുടെ മറ്റ് ഉപകരണങ്ങളിൽ നിന്നുള്ള ടാബുകൾ ലഭിക്കാൻ, Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക.</translation>
@@ -907,7 +910,6 @@
 <translation id="2413749388954403953">ബുക്ക്മാർക്കുകളുടെ ഉപയോക്തൃ ഇന്റർഫേസ് മാറ്റുക</translation>
 <translation id="2422426094670600218">&lt;പേരില്ലാ‍ത്തവ&gt;</translation>
 <translation id="2423578206845792524">ഇമേജ് ഇതുപോലെ സം&amp;രക്ഷിക്കുക</translation>
-<translation id="2424091190911472304">എല്ലായ്‌പ്പോഴും <ph name="ORIGIN" /> എന്നതിൽ റൺ ചെയ്യുക</translation>
 <translation id="2425665904502185219">മൊത്തം ഫയൽ വലുപ്പം</translation>
 <translation id="2428510569851653187">ടാബ് ക്രാഷായപ്പോൾ നിങ്ങൾ എന്താണ് ചെയ്‌തിരുന്നതെന്ന് വിവരിക്കുക</translation>
 <translation id="2431027948063157455">Google Assistant-ന് ലോഡ് ചെയ്യാനായില്ല, നെറ്റ്‌വർക്ക് കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.</translation>
@@ -1195,7 +1197,6 @@
 <translation id="2838379631617906747">ഇൻസ്‌റ്റാളുചെയ്യുന്നു</translation>
 <translation id="2841837950101800123">ദാതാവ്</translation>
 <translation id="2843806747483486897">സ്ഥിരസ്ഥിതി മാറ്റുക...</translation>
-<translation id="2844111009524261443">ക്ലിക്കുചെയ്യുമ്പോൾ റൺ ചെയ്യുക</translation>
 <translation id="2845382757467349449">ബുക്ക്‌മാർക്ക് ബാർ എപ്പോഴും കാണിക്കുക</translation>
 <translation id="2847759467426165163">ഇതിലേക്ക് കാസ്‌റ്റുചെയ്യുക</translation>
 <translation id="284805635805850872">ദോഷകരമായ സോഫ്‌റ്റ്‌വെയർ നീക്കംചെയ്യണോ?</translation>
@@ -1315,6 +1316,7 @@
 <translation id="3016641847947582299">ഘടകഭാഗം അപ്‌ഡേറ്റുചെയ്‌തു</translation>
 <translation id="3016780570757425217">നിങ്ങളുടെ ലൊക്കേഷൻ അറിയുക</translation>
 <translation id="302014277942214887">അപ്ലിക്കേഷൻ ഐഡി അല്ലെങ്കിൽ വെബ്‌സ്റ്റോർ URL നൽകുക.</translation>
+<translation id="3020183492814296499">കുറുക്കുവഴികൾ</translation>
 <translation id="3020990233660977256">സീരിയല്‍‌ നമ്പര്‍‌: ‍‌<ph name="SERIAL_NUMBER" /></translation>
 <translation id="3021678814754966447">&amp;ഫ്രെയിം ഉറവിടം കാണുക</translation>
 <translation id="3022978424994383087">അത് മനസ്സിലായില്ല.</translation>
@@ -1506,7 +1508,6 @@
 <translation id="3308116878371095290">കുക്കികള്‍‌ ക്രമീകരിക്കുന്നതില്‍‌ നിന്നും ഈ പേജിനെ തടഞ്ഞു.</translation>
 <translation id="3308134619352333507">മറയ്‌ക്കല്‍ ബട്ടണ്‍</translation>
 <translation id="3308852433423051161">Google അസിസ്‌റ്റന്റ് ലോഡുചെയ്യുന്നു...</translation>
-<translation id="3309747692199697901">എല്ലായ്‌പ്പോഴും എല്ലാ സൈറ്റുകളിലും റൺ ചെയ്യുക</translation>
 <translation id="3312424061798279731">പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുന്ന ഭാഷകൾ</translation>
 <translation id="3313590242757056087">സൂപ്പർവൈസ് ചെയ്‌ത ഉപയോക്താവിന് കാണാനാകുന്ന വെബ്‌സൈറ്റുകൾ സജ്ജമാക്കുന്നതിന്, <ph name="MANAGEMENT_URL" /> സന്ദർശിക്കുന്നതിലൂടെ നിങ്ങൾക്ക് 
     നിയന്ത്രണങ്ങളും ക്രമീകരണങ്ങളും കോൺഫിഗർ ചെയ്യാനാകും.
@@ -1804,7 +1805,6 @@
 <translation id="3759933321830434300">വെബ് പേജുകളുടെ ഭാഗങ്ങൾ തടയുക</translation>
 <translation id="3760460896538743390">&amp;പശ്ചാത്തല പേജ് പരിശോധിക്കുക</translation>
 <translation id="37613671848467444">&amp;വേഷ പ്രച്ഛന്ന വിന്‍ഡോയില്‍ തുറക്കുക</translation>
-<translation id="3763401818161139108">എല്ലായ്‌പ്പോഴും <ph name="ORIGIN" /> എന്നതിൽ റൺ ചെയ്യുക</translation>
 <translation id="3764314093345384080">വിശദമായ ബിൽഡ് വിവരം</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{USB ഉപകരണവുമായി ആശയവിനിമയം നടത്തുക}other{C # USBഉപകരണങ്ങളുമായി ആശയവിനിമയം നടത്തുക}}</translation>
 <translation id="3764986667044728669">എൻറോൾ ചെയ്യാനായില്ല</translation>
@@ -1886,6 +1886,7 @@
 <translation id="3867944738977021751">സര്‍‌ട്ടിഫിക്കറ്റ് ഫീല്‍‌ഡുകള്‍‌</translation>
 <translation id="3869917919960562512">തെറ്റായ സൂചിക.</translation>
 <translation id="3871092408932389764">ഏറ്റവും കുറഞ്ഞത്</translation>
+<translation id="3872220884670338524"><ph name="DOMAIN" /> ഡൊമെയ്‌നിലെ <ph name="USERNAME" /> എന്ന ഉപയോക്താവിന്റെ സംരക്ഷിച്ച അക്കൗണ്ടിനായി കൂടുതൽ പ്രവർത്തനങ്ങൾ</translation>
 <translation id="3872991219937722530">ഡിസ്‌ക് ഇടം സൃഷ്‌ടിച്ചില്ലെങ്കിൽ ഉപകരണം പ്രതികരിക്കില്ല.</translation>
 <translation id="3878840326289104869">സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താവിനെ സൃഷ്‌ടിക്കുന്നു</translation>
 <translation id="3879748587602334249">ഡൗൺലോഡ് മാനേജർ</translation>
@@ -2263,7 +2264,6 @@
 <translation id="4547992677060857254">നിങ്ങൾ തിരഞ്ഞെടുത്ത ഫോൾഡറിൽ സുപ്രധാന ഫയലുകൾ അടങ്ങിയിരിക്കുന്നു. ഈ ഫോൾഡറിലേക്ക് "$1" എന്നതിന് ശാശ്വതമായ റൈറ്റ് ആക്‌സസ്സ് നൽകണമെന്ന് നിങ്ങൾക്ക് തീർച്ചയാണോ?</translation>
 <translation id="4552031286893852992">അനാവശ്യമായ പരസ്യങ്ങൾ കാണിക്കുന്നതിനാൽ Chrome ഈ സൈറ്റിലെ പരസ്യങ്ങൾ ബ്ലോക്കുചെയ്‌തു.</translation>
 <translation id="4552089082226364758">ഫ്ലാഷ്</translation>
-<translation id="4552495056028768700">പേജ് ആക്‌സസ്സ്</translation>
 <translation id="4552678318981539154">കൂടുതൽ സംഭരണം വാങ്ങുക</translation>
 <translation id="4554591392113183336">നിലവിലുള്ള ഒന്നുമായി താരതമ്യപ്പെടുത്തുമ്പോൾ, ബാഹ്യ വിപുലീകരണത്തിന്റെ പതിപ്പ് സമാനമായതോ അതിന് മുമ്പുള്ളതോ ആണ്.</translation>
 <translation id="4555769855065597957">ഷാഡോ</translation>
@@ -2768,6 +2768,7 @@
 <translation id="5334142896108694079">സ്‌ക്രിപ്റ്റ് കാഷെ</translation>
 <translation id="5334844597069022743">ഉറവിടം കാണുക</translation>
 <translation id="5335458522276292100"><ph name="BEGIN_LINK" />Google ഡ്രൈവിലേക്ക്<ph name="END_LINK" /> <ph name="FILE_COUNT" /> ബാക്കപ്പ് ചെയ്യുന്നു</translation>
+<translation id="5336126339807372270">USB ഉപകരണങ്ങൾ ആക്‌സസ് ചെയ്യാൻ ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്</translation>
 <translation id="5337771866151525739">ഒരു മൂന്നാം കക്ഷി ഇൻസ്റ്റാളുചെയ്‌തത്.</translation>
 <translation id="5338503421962489998">പ്രാദേശിക സംഭരണം</translation>
 <translation id="5340217413897845242">ഷെൽഫ് ഇനം 6</translation>
@@ -2902,6 +2903,7 @@
 <translation id="5525677322972469346">ഒരു പുതിയ സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താവിനെ സൃഷ്ടിക്കുക</translation>
 <translation id="5525695896049981561">അതെ, ഞാനത് കണ്ടു</translation>
 <translation id="5526701598901867718">എല്ലാം (സുരക്ഷിതമല്ല)</translation>
+<translation id="5526745900034778153">സമന്വയം തുടരാനായി വീണ്ടും സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="5527463195266282916">എക്സ്റ്റന്‍ഷന്‍ തരം താഴ്ത്തുന്നതിന് ശ്രമിച്ചു.</translation>
 <translation id="5527474464531963247">നിങ്ങൾക്ക് മറ്റൊരു നെറ്റ്‌വർക്കും തിരഞ്ഞെടുക്കാവുന്നതാണ്.</translation>
 <translation id="5528368756083817449">ബുക്മാര്‍ക്ക് മാനേജര്‍</translation>
@@ -3020,6 +3022,7 @@
 <translation id="5700836101007545240">നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർ ‘കണക്ഷൻ ചേർക്കൽ‘ പ്രവർത്തനരഹിതമാക്കി</translation>
 <translation id="5701381305118179107">മധ്യഭാഗം</translation>
 <translation id="5702898740348134351">&amp;തിരയല്‍‌ എഞ്ചിനുകള്‍‌ എഡിറ്റുചെയ്യുക...</translation>
+<translation id="5704875434923668958">ഇതിലേക്ക് സമന്വയിപ്പിക്കുന്നു</translation>
 <translation id="5707185214361380026">ഇതിൽ നിന്ന് വിപുലീകരണം ലോഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു:</translation>
 <translation id="5707604204219538797">അടുത്ത വാക്ക്</translation>
 <translation id="5708171344853220004">Microsoft പ്രിന്‍‌സിപ്പല്‍‌ നാമം</translation>
@@ -3256,7 +3259,6 @@
 <translation id="6080515710685820702">പങ്കിട്ട കമ്പ്യൂട്ടറാണോ ഉപയോഗിക്കുന്നത്? അദൃശ്യ വിൻഡോ പരീക്ഷിച്ചുനോക്കൂ.</translation>
 <translation id="6080689532560039067">നിങ്ങളുടെ സിസ്‌റ്റം സമയം പരിശോധിക്കുക</translation>
 <translation id="6082651258230788217">ടൂൾബാറിൽ കാണിക്കുക</translation>
-<translation id="6086814797483779854">ക്ലിക്കുചെയ്യുമ്പോൾ റൺ ചെയ്യുക</translation>
 <translation id="6086846494333236931">നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർ ഇൻസ്റ്റാൾ ചെയ്‌തു</translation>
 <translation id="6087960857463881712">മനോഹരമായ മുഖം</translation>
 <translation id="6089481419520884864">പേജ് ഡിസ്റ്റിൽ ചെയ്യുക</translation>
@@ -3393,6 +3395,7 @@
 <translation id="6286708577777130801">സംരക്ഷിച്ച പാസ്‌വേഡ് വിശദാംശങ്ങൾ</translation>
 <translation id="6287852322318138013">ഈ ഫയൽ തുറക്കാനായി ഒരു അപ്ലിക്കേഷൻ തിരഞ്ഞെടുക്കുക</translation>
 <translation id="6290556621549272952">ടിവിയിലും മറ്റ് ഉപകരണങ്ങളിലും Chromium-ത്തിൽ നിന്നുള്ള ഉള്ളടക്കം കാണിക്കാൻ ഈ ഫീച്ചർ ഉപയോഗിക്കാം.</translation>
+<translation id="6291949900244949761">USB ഉപകരണങ്ങൾ ആക്‌സസ് ചെയ്യാൻ ഒരു സൈറ്റ് താൽപ്പര്യപ്പെടുമ്പോൾ ചോദിക്കുക (ശുപാർശ ചെയ്‌തത്)</translation>
 <translation id="6291953229176937411">&amp;ഫൈന്‍‌ഡറില്‍ കാണിക്കുക</translation>
 <translation id="6295158916970320988">എല്ലാ സൈറ്റുകളും</translation>
 <translation id="6295855836753816081">സംരക്ഷിക്കുന്നു...</translation>
@@ -4396,7 +4399,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - ജോടിയാക്കി</translation>
 <translation id="7870730066603611552">സജ്ജീകരണത്തിന് ശേഷം സമന്വയ ഓപ്‌ഷനുകൾ അവലോകനം ചെയ്യുക</translation>
 <translation id="7870790288828963061">ഏറ്റവും പുതിയ പതിപ്പിലുള്ള കിയോസ്‌ക് അപ്ലിക്കേഷനുകളൊന്നുമില്ല. USB സ്‌റ്റിക്ക് നീക്കംചെയ്യുക.</translation>
-<translation id="7874357055309047713">എല്ലായ്‌പ്പോഴും എല്ലാ സൈറ്റുകളിലും റൺ ചെയ്യുക</translation>
 <translation id="7877451762676714207">അജ്ഞാതമായ സെർവർ പിശക്. വീണ്ടും ശ്രമിക്കുകയോ സെർവർ അഡ്‌മിനിസ്‌ട്രേറ്ററെ ബന്ധപ്പെടുകയോ ചെയ്യുക.</translation>
 <translation id="7877680364634660272">ടൂർ</translation>
 <translation id="7878562273885520351">നിങ്ങളുടെ പാസ്‍വേഡ് അപഹരിക്കപ്പെട്ടേക്കാം</translation>
@@ -4695,6 +4697,7 @@
 <translation id="8336153091935557858">ഇന്നലെ <ph name="YESTERDAY_DAYTIME" /></translation>
 <translation id="8338952601723052325">ഡെവലപ്പർ വെബ്‌സൈറ്റ്</translation>
 <translation id="8339059274628563283"><ph name="SITE" />, പ്രാദേശികമായി സൂക്ഷിച്ച വിവരം</translation>
+<translation id="833986336429795709">ഈ ലിങ്ക് തുറക്കാൻ ഒരു ആപ്പ് തിരഞ്ഞെടുക്കുക</translation>
 <translation id="8342318071240498787">സമാന പേരിലുള്ള ഒരു ഫയൽ അല്ലെങ്കിൽ ഡയറക്‌ടറി ഇതിനകം നിലവിലുണ്ട്.</translation>
 <translation id="8343956361364550006">മികച്ച വീഡിയോയോ ആനിമേഷനോ ലഭിക്കാൻ ഉയർന്ന ബാൻഡ്‌വിഡ്‌ത്ത് ഉപയോഗിക്കുക. വേഗത കുറഞ്ഞ കണക്ഷനുകൾ ഉപയോഗിക്കുന്ന മറ്റ് ആളുകൾക്ക് നിങ്ങളുടെ ഉള്ളടക്കം കാണാനായേക്കില്ല.</translation>
 <translation id="8349826889576450703">ലോഞ്ചർ</translation>
@@ -4744,7 +4747,6 @@
 <translation id="8428634594422941299">മനസിലായി</translation>
 <translation id="8431909052837336408">സിം പിൻ മാറ്റുക</translation>
 <translation id="8434480141477525001">NaCl ഡീബഗ് പോർട്ട്</translation>
-<translation id="8437331208797669910">പേജ് ആക്‌സസ്സ്</translation>
 <translation id="843760761634048214">ക്രെഡിറ്റ് കാർഡ് സംരക്ഷിക്കുക</translation>
 <translation id="8438328416656800239">ഒരു സ്‌മാർട്ട് ബ്രൗസറിലേക്ക് മാറുക</translation>
 <translation id="8439506636278576865">പേജുകൾ ഈ ഭാഷയിലേക്ക് വിവർത്തനം ചെയ്യാനുള്ള ഓഫർ</translation>
@@ -4891,6 +4893,7 @@
 <translation id="8663099077749055505"><ph name="HOST" />-ൽ എല്ലായ്‌പ്പോഴും ഒന്നിലേറെ യാന്ത്രിക ഡൗൺലോഡുകൾ തടയുക</translation>
 <translation id="8664389313780386848">&amp;പേജ് ഉറവിടം കാണുക</translation>
 <translation id="866611985033792019">ഇമെയില്‍ ഉപയോക്താക്കളെ തിരിച്ചറിയുന്നതിന് ഈ സര്‍ട്ടിഫിക്കറ്റിനെ വിശ്വസിക്കുക</translation>
+<translation id="8666584013686199826">USB ഉപകരണങ്ങൾ ആക്‌സസ് ചെയ്യാൻ ഒരു സൈറ്റ് താൽപ്പര്യപ്പെടുമ്പോൾ ചോദിക്കുക</translation>
 <translation id="8667328578593601900"><ph name="FULLSCREEN_ORIGIN" /> ഇപ്പോൾ പൂർണ‌സ്‌ക്രീനിലാണ് കൂടാതെ നിങ്ങളുടെ മൗസ് കഴ്‌സർ അപ്രാപ്തമാക്കി.</translation>
 <translation id="8669284339312441707">തീക്ഷ്‌ണമായ</translation>
 <translation id="8669949407341943408">നീക്കുന്നു...</translation>
@@ -5004,6 +5007,7 @@
 <translation id="882204272221080310">അധിക സുരക്ഷയ്ക്കായി ഫേംവെയര്‍ അപ്‌ഡേറ്റുചെയ്യുക.</translation>
 <translation id="8823514049557262177">ലിങ്ക് ടെ&amp;ക്‌സ്റ്റ് പകർത്തുക</translation>
 <translation id="8824701697284169214">പേ&amp;ജ് ചേർക്കുക...</translation>
+<translation id="8827752199525959199"><ph name="DOMAIN" /> ഡൊമെയ്‌നിലെ <ph name="USERNAME" /> എന്ന ഉപയോക്താവിന്റെ കൂടുതൽ പ്രവർത്തനങ്ങളും പാസ്‌വേഡും</translation>
 <translation id="8828933418460119530">DNS നാമം</translation>
 <translation id="8830796635868321089">നിലവിലെ പ്രോക്‌സി ക്രമീകരണങ്ങൾ ഉപയോഗിച്ചുള്ള അപ്‌ഡേറ്റ് പരിശോധന പരാജയപ്പെട്ടു. നിങ്ങളുടെ <ph name="PROXY_SETTINGS_LINK_START" />പ്രോക്‌സി ക്രമീകരണങ്ങൾ<ph name="PROXY_SETTINGS_LINK_END" /> ക്രമീകരിക്കുക.</translation>
 <translation id="8834039744648160717">നെറ്റ്‌വർക്ക് കോൺഫിഗറേഷൻ നിയന്ത്രിക്കുന്നത് <ph name="USER_EMAIL" /> ആണ്.</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index a5222bb6..fad7c96 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -911,7 +911,6 @@
 <translation id="2413749388954403953">बुकमार्क वापरकर्ता इंटरफेस बदला</translation>
 <translation id="2422426094670600218">&lt;अनामित&gt;</translation>
 <translation id="2423578206845792524">म्हणून प्रतिमा ज&amp;तन करा...</translation>
-<translation id="2424091190911472304">नेहमी <ph name="ORIGIN" /> वर चालवा</translation>
 <translation id="2425665904502185219">एकूण फाइल आकार</translation>
 <translation id="2428510569851653187">टॅब क्रॅश झाला तेव्हा तुम्ही नेमके काय करत होता ते सांगा</translation>
 <translation id="2431027948063157455">Google Assistant लोड होऊ शकले नाही, कृपया तुमचे नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा.</translation>
@@ -1199,7 +1198,6 @@
 <translation id="2838379631617906747">इंस्टॉल करीत आहे</translation>
 <translation id="2841837950101800123">प्रदाता</translation>
 <translation id="2843806747483486897">डीफॉल्ट बदला...</translation>
-<translation id="2844111009524261443">क्लिक केल्यावर चालवा</translation>
 <translation id="2845382757467349449">नेहमी बुकमार्क बार दर्शवा</translation>
 <translation id="2847759467426165163">यावर कास्ट करा</translation>
 <translation id="284805635805850872">धोकादायक सॉफ्टवेअर काढायचे का?</translation>
@@ -1507,7 +1505,6 @@
 <translation id="3308116878371095290">हे पृष्ठ कुकीज सेट करण्यापासून प्रतिबंधित केलेले होते.</translation>
 <translation id="3308134619352333507">बटण लपवा</translation>
 <translation id="3308852433423051161">Google साहाय्यक लोड करत आहे...</translation>
-<translation id="3309747692199697901">नेहमी सर्व साइटवर चालवा</translation>
 <translation id="3312424061798279731">सक्षम केलेल्या भाषा</translation>
 <translation id="3313590242757056087">पर्यवेक्षी वापरकर्ता कोणत्या वेबसाइट पाहू शकतो हे सेट करण्यासाठी, आपण
     <ph name="MANAGEMENT_URL" /> ला भेट देऊन प्रतिबंध आणि सेटिंग्ज कॉन्फिगर करू शकता.
@@ -1806,7 +1803,6 @@
 <translation id="3759933321830434300">वेब पृष्ठांचे भाग अवरोधित करा</translation>
 <translation id="3760460896538743390">&amp;पार्श्वभूमी पृष्ठाचे निरीक्षण करा</translation>
 <translation id="37613671848467444">&amp;गुप्त विंडोमध्ये उघडा</translation>
-<translation id="3763401818161139108">नेहमी <ph name="ORIGIN" /> वर चालवा</translation>
 <translation id="3764314093345384080">तपशीलवार बिल्ड माहिती</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{एका USB डिव्हाइससह संवाद प्रस्थापित करा}one{# USB डिव्हाइससह संवाद प्रस्थापित करा}other{# USB डिव्हाइसेससह संवाद प्रस्थापित करा}}</translation>
 <translation id="3764986667044728669">नोंदणी करण्यात अक्षम</translation>
@@ -2266,7 +2262,6 @@
 <translation id="4547992677060857254">आपण निवडलेल्या फोल्डरमध्ये संवेदनशील फायली आहेत. आपल्याला खात्री आहे की या फोल्डरवर आपण "$1" ला कायम लिहिण्याचा प्रवेश मंजूर करू इच्छिता?</translation>
 <translation id="4552031286893852992">अनाहूत जाहिराती दाखवत असल्यामुळे Chrome ने या साइटवर जाहिराती ब्लॉक केल्या आहेत.</translation>
 <translation id="4552089082226364758">फ्लॅश</translation>
-<translation id="4552495056028768700">पृष्ठ प्रवेश</translation>
 <translation id="4552678318981539154">अधिक संचयन खरेदी करा</translation>
 <translation id="4554591392113183336">बाह्य विस्‍तार अस्‍तित्वात असलेल्‍याच्या तुलनेत समान किंवा कमी आवृत्तीवर आहे.</translation>
 <translation id="4555769855065597957">शॅडो</translation>
@@ -3263,7 +3258,6 @@
 <translation id="6080515710685820702">शेअर केलेला काँप्युटर वापरत आहात का? गुप्त विंडो उघडण्याचा प्रयत्न करा.</translation>
 <translation id="6080689532560039067">आपली प्रणाली वेळ तपासा</translation>
 <translation id="6082651258230788217">टूलबारमध्ये दर्शवा</translation>
-<translation id="6086814797483779854">क्लिक केल्यावर चालवा</translation>
 <translation id="6086846494333236931">आपल्‍या प्रशासकाद्वारे इंस्टॉल केले</translation>
 <translation id="6087960857463881712">छान चेहरा</translation>
 <translation id="6089481419520884864">Distill पृष्ठ</translation>
@@ -4401,7 +4395,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - जोडणी केली</translation>
 <translation id="7870730066603611552">सेटअपनंतर सिंक पर्यायांचे परीक्षण करा</translation>
 <translation id="7870790288828963061">नवीन आवृत्तीसह कोणतेही कियोस्क अॅप्स आढळले नाहीत. काहीही अपडेट करू नका. कृपया USB स्टिक काढा.</translation>
-<translation id="7874357055309047713">नेहमी सर्व साइटवर चालवा</translation>
 <translation id="7877451762676714207">अज्ञात सर्व्हर एरर. कृपया पुन्हा प्रयत्न करा किंवा सर्व्हर प्रशासकाशी संपर्क साधा.</translation>
 <translation id="7877680364634660272">टूर</translation>
 <translation id="7878562273885520351">तुमच्या पासवर्डशी तडजोड होत असल्याची शक्यता आहे</translation>
@@ -4750,7 +4743,6 @@
 <translation id="8428634594422941299">समजले</translation>
 <translation id="8431909052837336408">सिम पिन बदला</translation>
 <translation id="8434480141477525001">NaCl  डीबग पोर्ट</translation>
-<translation id="8437331208797669910">पृष्ठ प्रवेश</translation>
 <translation id="843760761634048214">क्रेडिट कार्ड सेव्ह करा</translation>
 <translation id="8438328416656800239">स्मार्ट ब्राउझरवर बदला</translation>
 <translation id="8439506636278576865">या भाषेमध्ये पृष्ठे भाषांतरीत करण्यासाठी ऑफर</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 3265dc1..a953679 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Ubah antara muka pengguna penanda halaman</translation>
 <translation id="2422426094670600218">&lt;tiada nama&gt;</translation>
 <translation id="2423578206845792524">Si&amp;mpan imej sebagai...</translation>
-<translation id="2424091190911472304">Sentiasa Jalankan pada <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Jumlah saiz fail</translation>
 <translation id="2428510569851653187">Terangkan perkara yang sedang anda lakukan semasa ranap tab berlaku</translation>
 <translation id="2431027948063157455">Google Assistant tidak dapat dimuatkan, sila periksa sambungan rangkaian anda, kemudian cuba semula.</translation>
@@ -1201,7 +1200,6 @@
 <translation id="2838379631617906747">Memasang</translation>
 <translation id="2841837950101800123">Penyedia</translation>
 <translation id="2843806747483486897">Tukar lalai...</translation>
-<translation id="2844111009524261443">Jalankan apabila diklik</translation>
 <translation id="2845382757467349449">Sentiasa Paparkan Bar Penanda Halaman</translation>
 <translation id="2847759467426165163">Hantar ke</translation>
 <translation id="284805635805850872">Alih keluar perisian berbahaya?</translation>
@@ -1513,7 +1511,6 @@
 <translation id="3308116878371095290">Halaman ini dihalang daripada menetapkan kuki.</translation>
 <translation id="3308134619352333507">Sembunyikan Butang</translation>
 <translation id="3308852433423051161">Memuatkan Google Assistant...</translation>
-<translation id="3309747692199697901">Sentiasa Jalankan pada Semua Tapak</translation>
 <translation id="3312424061798279731">Bahasa yang didayakan</translation>
 <translation id="3313590242757056087">Untuk menetapkan tapak web yang boleh dilihat oleh pengguna diselia,
     anda boleh mengkonfigurasi sekatan dan tetapan dengan melawati <ph name="MANAGEMENT_URL" />.
@@ -1811,7 +1808,6 @@
 <translation id="3759933321830434300">Sekat sebahagian halaman web</translation>
 <translation id="3760460896538743390">Halaman Periksa &amp;Latar Belakang</translation>
 <translation id="37613671848467444">Buka dalam Tetingkap &amp;Inkognito</translation>
-<translation id="3763401818161139108">Sentiasa jalankan pada <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Maklumat binaan terperinci</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Berkomunikasi dengan peranti USB}other{Berkomunikasi dengan # peranti USB}}</translation>
 <translation id="3764986667044728669">Tidak dapat mendaftar</translation>
@@ -2272,7 +2268,6 @@
 <translation id="4547992677060857254">Folder yang anda pilih mengandungi fail sensitif. Adakah anda pasti mahu memberikan "$1" akses menulis tetap kepada folder ini?</translation>
 <translation id="4552031286893852992">Chrome menyekat iklan di tapak ini kerana tapak ini cenderung menyiarkan iklan yang mengganggu.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Akses Halaman</translation>
 <translation id="4552678318981539154">Beli lagi storan</translation>
 <translation id="4554591392113183336">Sambungan luar ialah versi yang sama atau lebih rendah berbanding yang sedia ada.</translation>
 <translation id="4555769855065597957">Bayang</translation>
@@ -3268,7 +3263,6 @@
 <translation id="6080515710685820702">Menggunakan komputer yang dikongsi? Cuba buka tetingkap inkognito.</translation>
 <translation id="6080689532560039067">Semak masa sistem anda</translation>
 <translation id="6082651258230788217">Tunjukkan dalam bar alat</translation>
-<translation id="6086814797483779854">Jalankan apabila Diklik</translation>
 <translation id="6086846494333236931">Dipasang oleh pentadbir anda</translation>
 <translation id="6087960857463881712">Wajah hebat</translation>
 <translation id="6089481419520884864">Menyuling halaman</translation>
@@ -4407,7 +4401,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Digandingkan</translation>
 <translation id="7870730066603611552">Semak pilihan penyegerakan selepas persediaan</translation>
 <translation id="7870790288828963061">Tiada apl Kiosk dengan versi lebih baharu dijumpai. Tiada apa-apa untuk dikemas kini. Sila alih keluar batang USB.</translation>
-<translation id="7874357055309047713">Sentiasa jalankan pada semua tapak</translation>
 <translation id="7877451762676714207">Ralat pelayan tidak diketahui. Sila cuba lagi atau hubungi pentadbir pelayan.</translation>
 <translation id="7877680364634660272">Lawatan</translation>
 <translation id="7878562273885520351">Kata laluan anda mungkin terjejas</translation>
@@ -4757,7 +4750,6 @@
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431909052837336408">Tukar PIN SIM</translation>
 <translation id="8434480141477525001">Port Nyahpepijat NaCl</translation>
-<translation id="8437331208797669910">Akses halaman</translation>
 <translation id="843760761634048214">Simpan kad kredit</translation>
 <translation id="8438328416656800239">Tukar kepada penyemak imbas pintar</translation>
 <translation id="8439506636278576865">Tawaran untuk menterjemahkan halaman dalam bahasa ini</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 865ec11..d7c1e67 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">De gebruikersinterface voor bladwijzers wijzigen</translation>
 <translation id="2422426094670600218">&lt;naamloos&gt;</translation>
 <translation id="2423578206845792524">Af&amp;beelding opslaan als...</translation>
-<translation id="2424091190911472304">Altijd uitvoeren voor <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Totale bestandsgrootte</translation>
 <translation id="2428510569851653187">Beschrijf wat je aan het doen was toen het tabblad crashte</translation>
 <translation id="2431027948063157455">De Google Assistent kan niet worden geladen. Controleer de netwerkverbinding en probeer het opnieuw.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">Installeren</translation>
 <translation id="2841837950101800123">Provider</translation>
 <translation id="2843806747483486897">Standaardactie wijzigen...</translation>
-<translation id="2844111009524261443">Uitvoeren voor klik</translation>
 <translation id="2845382757467349449">Bladwijzerbalk altijd weergeven</translation>
 <translation id="2847759467426165163">Casten naar</translation>
 <translation id="284805635805850872">Schadelijke software verwijderen?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Het instellen van cookies door deze pagina is geblokkeerd.</translation>
 <translation id="3308134619352333507">Knop verbergen</translation>
 <translation id="3308852433423051161">Google Assistent laden...</translation>
-<translation id="3309747692199697901">Altijd uitvoeren voor alle sites</translation>
 <translation id="3312424061798279731">Ingeschakelde talen</translation>
 <translation id="3313590242757056087">Als je wilt instellen welke websites de gebruiker met beperkte rechten kan weergeven, kun je beperkingen en instellingen
     configureren op <ph name="MANAGEMENT_URL" />.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Delen van webpagina's blokkeren</translation>
 <translation id="3760460896538743390">&amp;Achtergrondpagina controleren</translation>
 <translation id="37613671848467444">Openen in &amp;incognitovenster</translation>
-<translation id="3763401818161139108">Altijd uitvoeren voor <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Gedetailleerde build-gegevens</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Communiceren met een USB-apparaat}other{Communiceren met # USB-apparaten}}</translation>
 <translation id="3764986667044728669">Kan niet inschrijven</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">De map die je hebt geselecteerd, bevat gevoelige bestanden. Weet je zeker dat je '$1' permanente schrijftoegang wilt geven tot deze map?</translation>
 <translation id="4552031286893852992">Chrome heeft advertenties op deze site geblokkeerd omdat deze site opdringerige advertenties weergeeft.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Paginatoegang</translation>
 <translation id="4552678318981539154">Meer opslagruimte kopen</translation>
 <translation id="4554591392113183336">Externe uitbreiding heeft dezelfde of een lagere versie dan de bestaande.</translation>
 <translation id="4555769855065597957">Schaduw</translation>
@@ -3268,7 +3263,6 @@
 <translation id="6080515710685820702">Gebruik je een gedeelde computer? Open een incognitovenster.</translation>
 <translation id="6080689532560039067">De systeemtijd controleren</translation>
 <translation id="6082651258230788217">In werkbalk weergeven</translation>
-<translation id="6086814797483779854">Uitvoeren voor klik</translation>
 <translation id="6086846494333236931">Geïnstalleerd door je beheerder</translation>
 <translation id="6087960857463881712">Geweldig gezicht</translation>
 <translation id="6089481419520884864">Pagina omzetten</translation>
@@ -4407,7 +4401,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - gekoppeld</translation>
 <translation id="7870730066603611552">Synchronisatieopties bekijken na de installatie</translation>
 <translation id="7870790288828963061">Er zijn geen Kiosk-apps met een nieuwere versie gevonden. Er is niets om te updaten. Verwijder de USB-stick.</translation>
-<translation id="7874357055309047713">Altijd uitvoeren voor alle sites</translation>
 <translation id="7877451762676714207">Onbekende serverfout. Probeer het opnieuw of neem contact op met de serverbeheerder.</translation>
 <translation id="7877680364634660272">Rondleiding</translation>
 <translation id="7878562273885520351">Je wachtwoord is mogelijk gehackt</translation>
@@ -4756,7 +4749,6 @@
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431909052837336408">Pincode van simkaart wijzigen</translation>
 <translation id="8434480141477525001">Foutopsporingspoort voor systeemeigen client</translation>
-<translation id="8437331208797669910">Paginatoegang</translation>
 <translation id="843760761634048214">Creditcard opslaan</translation>
 <translation id="8438328416656800239">Overschakelen naar een slimme browser</translation>
 <translation id="8439506636278576865">Aanbieden pagina's te vertalen in deze taal</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 96c1544..a0e27b9 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">endre brukergrensesnittet for bokmerker</translation>
 <translation id="2422426094670600218">&lt;uten navn&gt;</translation>
 <translation id="2423578206845792524">Lagre &amp;bildet som...</translation>
-<translation id="2424091190911472304">Kjør alltid på <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Total filstørrelse</translation>
 <translation id="2428510569851653187">Beskriv hva du holdt på med da fanen kræsjet</translation>
 <translation id="2431027948063157455">Google-assistenten kunne ikke lastes inn. Kontrollér nettverkstilkoblingen din, og prøv på nytt.</translation>
@@ -1196,7 +1195,6 @@
 <translation id="2838379631617906747">Installerer</translation>
 <translation id="2841837950101800123">Leverandør</translation>
 <translation id="2843806747483486897">Endre standardhandling</translation>
-<translation id="2844111009524261443">Kjør når brukeren klikker</translation>
 <translation id="2845382757467349449">Vis alltid bokmerkerad</translation>
 <translation id="2847759467426165163">Cast til</translation>
 <translation id="284805635805850872">Vil du fjerne den skadelige programvaren?</translation>
@@ -1508,7 +1506,6 @@
 <translation id="3308116878371095290">Informasjonskapsler fra denne siden ble blokkert.</translation>
 <translation id="3308134619352333507">Skjul knappen</translation>
 <translation id="3308852433423051161">Laster inn Google-assistenten …</translation>
-<translation id="3309747692199697901">Kjør alltid på alle nettsteder</translation>
 <translation id="3312424061798279731">Språk som er slått på</translation>
 <translation id="3313590242757056087">For å angi hvilke nettsteder den administrerte brukeren kan bruke, kan du konfigurere begrensninger og innstillinger ved å gå til <ph name="MANAGEMENT_URL" />.
     Hvis du ikke endrer standardinnstillingene, kan <ph name="USER_DISPLAY_NAME" />
@@ -1805,7 +1802,6 @@
 <translation id="3759933321830434300">blokkere deler av nettsider</translation>
 <translation id="3760460896538743390">Inspeksjons- og bakgrunnsside</translation>
 <translation id="37613671848467444">Åpne i &amp;inkognitovindu</translation>
-<translation id="3763401818161139108">Kjør alltid på <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Detaljert delversjonsinformasjon</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{kommunisere med én USB-enhet}other{kommunisere med # USB-enheter}}</translation>
 <translation id="3764986667044728669">Kunne ikke registrere deg</translation>
@@ -2264,7 +2260,6 @@
 <translation id="4547992677060857254">Mappen du valgte inneholder sensitive filer. Er du sikker på at du vil gi «$ 1» permanent skrivetilgang til denne mappen?</translation>
 <translation id="4552031286893852992">Chrome har blokkert annonser på dette nettstedet fordi det ofte viser forstyrrende annonser.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Tilgang til siden</translation>
 <translation id="4552678318981539154">Kjøp mer lagringsplass</translation>
 <translation id="4554591392113183336">Den eksterne utvidelsen har samme eller lavere versjonsnummer som den eksisterende utvidelsen.</translation>
 <translation id="4555769855065597957">Skygge</translation>
@@ -2861,7 +2856,7 @@
 <translation id="5464632865477611176">Kjør denne gangen</translation>
 <translation id="5465662442746197494">Trenger du hjelp?</translation>
 <translation id="5469954281417596308">Bokmerkebehandling</translation>
-<translation id="5471768120198416576">Heisann! Jeg er din tekst til tale-stemme.</translation>
+<translation id="5471768120198416576">Heisann! Jeg er tekst til tale-stemmen din.</translation>
 <translation id="5473333559083690127">Skriv inn den nye PIN-koden på nytt</translation>
 <translation id="5480254151128201294">Denne enheten ble låst av eieren.</translation>
 <translation id="5481941284378890518">Legg til skrivere i nærheten</translation>
@@ -3259,7 +3254,6 @@
 <translation id="6080515710685820702">Bruker du en delt datamaskin? Prøv å åpne et inkognitovindu.</translation>
 <translation id="6080689532560039067">Sjekk systemtiden din</translation>
 <translation id="6082651258230788217">Vis i verktøyraden</translation>
-<translation id="6086814797483779854">Kjør når brukeren klikker</translation>
 <translation id="6086846494333236931">Installert av administratoren din</translation>
 <translation id="6087960857463881712">Fantastisk-fjes</translation>
 <translation id="6089481419520884864">Destiller siden</translation>
@@ -4390,7 +4384,6 @@
 <translation id="786957569166715433">«<ph name="DEVICE_NAME" />» er tilkoblet</translation>
 <translation id="7870730066603611552">Gå gjennom alternativene for synkronisering etter konfigureringen</translation>
 <translation id="7870790288828963061">Fant ingen Kiosk-apper med nyere versjon. Ingenting å oppdatere. Ta ut USB-pinnen.</translation>
-<translation id="7874357055309047713">Kjør alltid på alle nettsteder</translation>
 <translation id="7877451762676714207">Ukjent tjenerfeil. Prøv på nytt eller kontakt tjeneradministratoren.</translation>
 <translation id="7877680364634660272">Innføring</translation>
 <translation id="7878562273885520351">Passordet ditt kan være kompromittert</translation>
@@ -4739,7 +4732,6 @@
 <translation id="8428634594422941299">Greit</translation>
 <translation id="8431909052837336408">Endre PIN-koden for SIM-kortet</translation>
 <translation id="8434480141477525001">Feilsøkingsport for NaCl</translation>
-<translation id="8437331208797669910">Tilgang til siden</translation>
 <translation id="843760761634048214">Lagre kredittkortet</translation>
 <translation id="8438328416656800239">Bytt til en smart nettleser</translation>
 <translation id="8439506636278576865">Tilby å oversette nettsider på dette språket</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index d6cebf4aa..227bc32 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -454,6 +454,7 @@
 <translation id="166439687370499867">Wprowadzanie zmian w konfiguracjach sieci współdzielonych jest niedozwolone.</translation>
 <translation id="1665611772925418501">Nie można zmodyfikować pliku.</translation>
 <translation id="1670399744444387456">Podstawy</translation>
+<translation id="167160931442925455">Najgłośniej</translation>
 <translation id="1673103856845176271">Nie można uzyskać dostępu do pliku ze względów bezpieczeństwa.</translation>
 <translation id="1673137583248014546"><ph name="URL" /> chce odczytać markę i model Twojego klucza bezpieczeństwa</translation>
 <translation id="167832068858235403">zmniejsz głośność</translation>
@@ -510,6 +511,7 @@
 <translation id="1758831820837444715">Skonfiguruj sieć Ethernet</translation>
 <translation id="1763046204212875858">Utwórz skróty do aplikacji</translation>
 <translation id="1763108912552529023">Odkrywaj dalej</translation>
+<translation id="1763808908432309942">Otworzy się na nowej karcie</translation>
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nowe okno</translation>
 <translation id="1768278914020124551">Ups. Podczas łączenia się z serwerem logowania wystąpił problem. Sprawdź połączenie sieciowe i nazwę domeny, a potem spróbuj jeszcze raz.</translation>
@@ -590,6 +592,7 @@
 <translation id="1871615898038944731"><ph name="DEVICE_TYPE" /> używa aktualnej wersji oprogramowania</translation>
 <translation id="1875387611427697908">Możesz to pobrać tylko z <ph name="CHROME_WEB_STORE" /></translation>
 <translation id="1877520246462554164">Nie udało się uzyskać tokenu uwierzytelnienia. Wyloguj się, a potem zaloguj się jeszcze raz, by ponowić próbę.</translation>
+<translation id="1878302395768190018">Możesz w dowolnym momencie dostosować w Ustawieniach Chrome</translation>
 <translation id="1878524442024357078">Nie zezwalaj żadnym stronom na dostęp do komputera przez wtyczkę</translation>
 <translation id="1880905663253319515">Czy usunąć certyfikat „<ph name="CERTIFICATE_NAME" />”?</translation>
 <translation id="1886996562706621347">Zezwól, by strony prosiły użytkownika o ustawienie ich jako domyślnego modułu obsługi protokołu (zalecane)</translation>
@@ -912,7 +915,6 @@
 <translation id="2413749388954403953">Zmiana interfejsu zakładek</translation>
 <translation id="2422426094670600218">&lt;bez nazwy&gt;</translation>
 <translation id="2423578206845792524">Zapisz gra&amp;fikę jako...</translation>
-<translation id="2424091190911472304">Zawsze uruchamiaj na <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Łączny rozmiar plików</translation>
 <translation id="2428510569851653187">Opisz, co robiłeś, gdy wystąpiła awaria karty</translation>
 <translation id="2431027948063157455">Nie udało się załadować Asystenta Google. Spróbuj ponownie.</translation>
@@ -1005,6 +1007,7 @@
 <translation id="2562685439590298522">Dokumenty</translation>
 <translation id="2562743677925229011">Nie jesteś zalogowany(a) do <ph name="SHORT_PRODUCT_NAME" />.</translation>
 <translation id="2563856802393254086">Gratulacje! Usługa transmisji danych „<ph name="NAME" />” została aktywowana i można z niej korzystać.</translation>
+<translation id="2564520396658920462">Wykonywanie kodu JavaScript przy użyciu AppleScript jest wyłączone. Aby włączyć tę funkcję, na pasku menu kliknij Widok &gt; Programista &gt; Zezwól na kod JavaScript z Apple Events. Więcej informacji: https://support.google.com/chrome/?p=applescript</translation>
 <translation id="2566124945717127842">Wykonaj Powerwash, by zresetować urządzenie z <ph name="IDS_SHORT_PRODUCT_NAME" /> do ustawień fabrycznych.</translation>
 <translation id="2567257616420533738">Hasło zostało zapisane. Możesz wyświetlać zapisane hasła i nimi zarządzać na <ph name="SAVED_PASSWORDS_LINK" /></translation>
 <translation id="2568774940984945469">Kontener paska informacji</translation>
@@ -1083,6 +1086,7 @@
 <translation id="2665394472441560184">Dodaj nowe słowo</translation>
 <translation id="2665717534925640469">Ta strona jest obecnie wyświetlana na pełnym ekranie i wyłączyła kursor myszy.</translation>
 <translation id="2665919335226618153">Kurza twarz! Podczas formatowania wystąpił błąd.</translation>
+<translation id="2666990579225592931">Otwórz okno trybu gościa</translation>
 <translation id="2667463864537187133">Zarządzanie sprawdzaniem pisowni</translation>
 <translation id="2670102641511624474"><ph name="APP_NAME" /> udostępnia kartę Chrome.</translation>
 <translation id="2670429602441959756">Strona zawiera funkcje, które nie są jeszcze obsługiwane w rzeczywistości wirtualnej. Zamykam…</translation>
@@ -1200,7 +1204,6 @@
 <translation id="2838379631617906747">Instaluję</translation>
 <translation id="2841837950101800123">Dostawca</translation>
 <translation id="2843806747483486897">Zmień ustawienie domyślne...</translation>
-<translation id="2844111009524261443">Uruchamiaj po kliknięciu</translation>
 <translation id="2845382757467349449">Zawsze pokazuj pasek zakładek</translation>
 <translation id="2847759467426165163">Przesyłaj na</translation>
 <translation id="284805635805850872">Usunąć szkodliwe oprogramowanie?</translation>
@@ -1229,6 +1232,7 @@
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> za chwilę uruchomi się ponownie i zresetuje.</translation>
 <translation id="2885378588091291677">Menedżer zadań</translation>
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
+<translation id="2886800363598651778">Synchronizuj dane Chrome i korzystaj z własnych ustawień przeglądarki na wielu urządzeniach</translation>
 <translation id="2887525882758501333">Dokument PDF</translation>
 <translation id="2888807692577297075">Żadne elementy nie pasują do zapytania &lt;b&gt;„<ph name="SEARCH_STRING" />”&lt;/b&gt;</translation>
 <translation id="2889064240420137087">Otwórz link przy użyciu...</translation>
@@ -1512,7 +1516,6 @@
 <translation id="3308116878371095290">Umieszczanie na komputerze plików cookie z tej strony jest niedozwolone.</translation>
 <translation id="3308134619352333507">Ukryj przycisk</translation>
 <translation id="3308852433423051161">Ładuję Asystenta Google...</translation>
-<translation id="3309747692199697901">Zawsze uruchamiaj na wszystkich stronach</translation>
 <translation id="3312424061798279731">Włączone języki</translation>
 <translation id="3313590242757056087">Aby określić, jakie strony będzie mógł przeglądać użytkownik nadzorowany,
     skonfiguruj ograniczenia i ustawienia na <ph name="MANAGEMENT_URL" />.
@@ -1753,6 +1756,7 @@
 <translation id="3670229581627177274">Włącz Bluetooth</translation>
 <translation id="3672681487849735243">Wykryto błąd fabryczny</translation>
 <translation id="367645871420407123">pozostaw puste, jeśli chcesz ustawić hasło główne na domyślną wartość obrazu testowego</translation>
+<translation id="3677657024345889897">Najciszej</translation>
 <translation id="3678156199662914018">Rozszerzenie: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3681311097828166361">Dziękujemy za opinię. Jesteś teraz offline, więc Twoje zgłoszenie zostanie wysłane później.</translation>
 <translation id="3683023058278427253">Wykryliśmy wiele typów licencji w domenie. Wybierz jeden, by kontynuować.</translation>
@@ -1810,7 +1814,6 @@
 <translation id="3759933321830434300">Blokowanie części stron internetowych</translation>
 <translation id="3760460896538743390">Sprawdź &amp;stronę tła</translation>
 <translation id="37613671848467444">Otwórz w oknie &amp;incognito</translation>
-<translation id="3763401818161139108">Zawsze uruchamiaj na <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Szczegółowe informacje o kompilacji</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Komunikuje się z urządzeniem USB}few{Komunikuje się z # urządzeniami USB}many{Komunikuje się z # urządzeniami USB}other{Komunikuje się z # urządzenia USB}}</translation>
 <translation id="3764986667044728669">Nie można się zarejestrować</translation>
@@ -1951,6 +1954,7 @@
 <translation id="3956702100721821638">Nie udało się połączyć z Google Play</translation>
 <translation id="3958088479270651626">Importuj zakładki i ustawienia</translation>
 <translation id="3960566196862329469">Konfiguracja ONC</translation>
+<translation id="3965965397408324205">Zamknij: <ph name="PROFILE_NAME" /></translation>
 <translation id="3966072572894326936">Wybierz inny folder...</translation>
 <translation id="3966388904776714213">Odtwarzacze dźwięku</translation>
 <translation id="3967822245660637423">Pobieranie zakończone</translation>
@@ -1991,6 +1995,7 @@
 <translation id="4031910098617850788">F5</translation>
 <translation id="4033471457476425443">Dodaj nowy folder</translation>
 <translation id="4034042927394659004">Zmniejsz jasność klawiszy</translation>
+<translation id="4034824040120875894">Drukarka</translation>
 <translation id="4035758313003622889">&amp;Menedżer zadań</translation>
 <translation id="4036758022112812315">Zaznacz to, co chcesz usłyszeć, a następnie naciśnij klawisz wyszukiwania + S. Możesz też nacisnąć i przytrzymać klawisz wyszukiwania, a następnie kliknąć lub przeciągnąć, by zaznaczyć treść.</translation>
 <translation id="4037084878352560732">Koń</translation>
@@ -2075,6 +2080,7 @@
 <translation id="4181602000363099176">20x</translation>
 <translation id="4181841719683918333">Języki</translation>
 <translation id="4184885522552335684">Przeciągnij, by przesunąć ekran</translation>
+<translation id="4192273449750167573">Przejrzyj ustawienia na następnym ekranie</translation>
 <translation id="4193154014135846272">Dokument Google</translation>
 <translation id="4194570336751258953">Włącz funkcję dotknij-kliknij</translation>
 <translation id="4195643157523330669">Otwórz w nowej karcie</translation>
@@ -2271,7 +2277,6 @@
 <translation id="4547992677060857254">Wybrany folder zawiera poufne pliki. Czy na pewno chcesz, by aplikacja „$1” miała do niego stały dostęp z uprawnieniami do zapisu?</translation>
 <translation id="4552031286893852992">Chrome blokuje reklamy, które wyświetla ta strona, ponieważ są one uciążliwe.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Dostęp do strony</translation>
 <translation id="4552678318981539154">Kup więcej miejsca</translation>
 <translation id="4554591392113183336">Wersja rozszerzenia zewnętrznego jest starsza lub taka sama jak wersja obecna.</translation>
 <translation id="4555769855065597957">Cień</translation>
@@ -2323,6 +2328,7 @@
 <translation id="4632483769545853758">Wyłącz wyciszenie karty</translation>
 <translation id="4633003931260532286">Rozszerzenie wymaga: „<ph name="IMPORT_NAME" />” przynajmniej w wersji „<ph name="IMPORT_VERSION" />”, ale zainstalowana jest tylko wersja „<ph name="INSTALLED_VERSION" />”</translation>
 <translation id="4634771451598206121">Zaloguj się ponownie</translation>
+<translation id="4635398712689569051">Strona <ph name="PAGE_NAME" /> jest niedostępna dla Gości.</translation>
 <translation id="4640525840053037973">Zaloguj się na konto Google</translation>
 <translation id="4641539339823703554">Chrome nie może ustawić czasu systemowego. Sprawdź i w razie potrzeby popraw godzinę poniżej.</translation>
 <translation id="4643612240819915418">&amp;Otwórz film wideo w nowej karcie</translation>
@@ -2359,6 +2365,7 @@
     Jeśli nie spodziewałeś się tej wiadomości, skontaktuj się z pomocą.</translation>
 <translation id="469230890969474295">Folder OEM</translation>
 <translation id="4692623383562244444">Wyszukiwarki</translation>
+<translation id="4694024090038830733">Konfiguracją drukarek zajmuje się administrator.</translation>
 <translation id="4697551882387947560">Po zakończeniu sesji przeglądania</translation>
 <translation id="4699172675775169585">Obrazy i pliki zapisane w pamięci podręcznej</translation>
 <translation id="4699357559218762027">(automatyczne uruchamianie)</translation>
@@ -2367,6 +2374,7 @@
 <translation id="4707934200082538898">Dalsze instrukcje znajdziesz w e-mailu przesłanym na adres <ph name="BEGIN_BOLD" /><ph name="MANAGER_EMAIL" /><ph name="END_BOLD" />.</translation>
 <translation id="4708794300267213770">Pokaż ekran blokady po wybudzeniu</translation>
 <translation id="4708849949179781599">Zamknij przeglądarkę <ph name="PRODUCT_NAME" /></translation>
+<translation id="4710251968215868702">Wykorzystuje zawartość otwieranych stron oraz informacje o Twoich interakcjach i aktywności w przeglądarce.</translation>
 <translation id="4711638718396952945">Przywróć ustawienia</translation>
 <translation id="4713544552769165154">Ten plik został opracowany z myślą o komputerach Mac. Jest on niezgodny z Twoim urządzeniem z Chrome OS. Spróbuj znaleźć aplikację zastępczą w <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" />. <ph name="BEGIN_LINK_HELP" />Więcej informacji<ph name="END_LINK_HELP" /></translation>
 <translation id="4714531393479055912">Przeglądarka <ph name="PRODUCT_NAME" /> może teraz synchronizować Twoje hasła.</translation>
@@ -2734,6 +2742,7 @@
 <translation id="527605719918376753">Wycisz kartę</translation>
 <translation id="527605982717517565">Zawsze zezwalaj na wykonywanie kodu JavaScript w witrynie <ph name="HOST" /></translation>
 <translation id="5280426389926346830">Utworzyć skrót?</translation>
+<translation id="528208740344463258">Aby pobrać aplikacje na Androida i ich używać, najpierw musisz zainstalować tę wymaganą aktualizację. Podczas gdy <ph name="DEVICE_TYPE" /> się aktualizuje, nie możesz korzystać z tego urządzenia. Po zakończeniu instalacji <ph name="DEVICE_TYPE" /> uruchomi się ponownie.</translation>
 <translation id="5282733140964383898">Włączenie opcji „Bez śledzenia” oznacza, że żądanie zostanie uwzględnione w ruchu związanym z używaniem przeglądarki. Efekt zawsze zależy od tego, czy witryna odpowiada na żądanie i jak je interpretuje. Na przykład niektóre witryny mogą odpowiadać na nie, wyświetlając reklamy bez uwzględniania innych odwiedzonych przez Ciebie stron. Wiele witryn będzie nadal gromadzić Twoje dane przeglądania i używać ich np. do zwiększania bezpieczeństwa, dostarczania treści i usług, wyświetlania reklam i rekomendacji oraz do generowania statystyk i raportów. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
 <translation id="5283677936944177147">Ups! System nie mógł określić modelu lub numeru seryjnego urządzenia.</translation>
 <translation id="5284445933715251131">Pobieraj dalej</translation>
@@ -3095,6 +3104,7 @@
 <translation id="5807290661599647102">Ustaw blokadę ekranu</translation>
 <translation id="580926004266167721">Nie udało się dołączyć komputera do domeny. Powodem może być brak uprawnień Twojego konta w jednostce organizacyjnej.</translation>
 <translation id="580961539202306967">Pytaj mnie, gdy strona chce wysyłać mi wiadomości push (zalecane)</translation>
+<translation id="5809725759695043233">Masz aplikacje zoptymalizowane dla Chromebooków</translation>
 <translation id="5814126672212206791">Typ połączenia</translation>
 <translation id="5815645614496570556">Adres X.400</translation>
 <translation id="5817918615728894473">Sparuj</translation>
@@ -3267,7 +3277,6 @@
 <translation id="6080515710685820702">Korzystasz ze wspólnego komputera? Otwórz okno incognito.</translation>
 <translation id="6080689532560039067">Sprawdź czas systemowy</translation>
 <translation id="6082651258230788217">Pokaż na pasku narzędzi</translation>
-<translation id="6086814797483779854">Uruchamiaj po kliknięciu</translation>
 <translation id="6086846494333236931">Zainstalowane przez administratora</translation>
 <translation id="6087960857463881712">Niesamowita twarz</translation>
 <translation id="6089481419520884864">Zbadaj stronę</translation>
@@ -3458,9 +3467,11 @@
 <translation id="6383051423892982287">Szyfruj synchronizowane dane za pomocą własnego <ph name="BEGIN_LINK" />hasła synchronizacji<ph name="END_LINK" /></translation>
 <translation id="6384275966486438344">Zmiana ustawień wyszukiwania na: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Strony mogą zapisywać dane w plikach cookie i je odczytywać</translation>
+<translation id="6388429472088318283">Wyszukaj języki</translation>
 <translation id="6388771388956873507">Znajdź na urządzeniu czytnik linii papilarnych i dotknij go palcem</translation>
 <translation id="6390799748543157332">Strony wyświetlane w tym oknie nie pojawią się w historii przeglądarki. Po zamknięciu wszystkich okien otwartych w trybie gościa nie zostanie po nich na komputerze żaden ślad (np. w postaci plików cookie). Pobrane pliki zostaną jednak zachowane.</translation>
 <translation id="6395423953133416962">Przesyłaj <ph name="BEGIN_LINK1" />informacje o systemie<ph name="END_LINK1" /> i <ph name="BEGIN_LINK2" />dane<ph name="END_LINK2" /></translation>
+<translation id="6397094776139756010">Opcje synchronizacji i personalizacji</translation>
 <translation id="6397592254427394018">Otwórz wszystkie zakładki w oknie &amp;incognito</translation>
 <translation id="6398715114293939307">Usuń Sklep Google Play</translation>
 <translation id="6398765197997659313">Zamknij pełny ekran</translation>
@@ -3650,6 +3661,7 @@
 <translation id="6659594942844771486">Tab</translation>
 <translation id="6664237456442406323">Twój komputer jest skonfigurowany przy użyciu błędnie sformatowanego identyfikatora sprzętu. Ta sytuacja uniemożliwia zaktualizowanie systemu operacyjnego Chrome za pomocą najnowszych poprawek zabezpieczeń, a komputer <ph name="BEGIN_BOLD" />może być narażony na złośliwe ataki<ph name="END_BOLD" />.</translation>
 <translation id="6664774537677393800">Podczas otwierania Twojego profilu coś poszło nie tak. Wyloguj się i ponownie zaloguj.</translation>
+<translation id="6670647982128220776">Funkcje związane z synchronizacją i personalizacją można teraz konfigurować w jednym miejscu. Włączając tę opcję, możesz spowodować zmianę swoich bieżących ustawień.</translation>
 <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation>
 <translation id="667517062706956822">Chcesz zobaczyć tłumaczenie Google tej strony z języka <ph name="SOURCE_LANGUAGE" /> na <ph name="TARGET_LANGUAGE" />?</translation>
 <translation id="6675665718701918026">Podłączono urządzenie wskazujące</translation>
@@ -3764,6 +3776,7 @@
 <translation id="6841186874966388268">Błędy</translation>
 <translation id="6843725295806269523">wyciszenie</translation>
 <translation id="6845038076637626672">Otwórz zmaksymalizowane</translation>
+<translation id="685040365210406336">Nie wprowadzaj żadnych zmian</translation>
 <translation id="6851497530878285708">Aplikacja włączona</translation>
 <translation id="6853388645642883916">Aktualizator jest uśpiony</translation>
 <translation id="68541483639528434">Zamknij inne karty</translation>
@@ -3963,6 +3976,7 @@
 <translation id="716810439572026343">Pobieram plik <ph name="FILE_NAME" /></translation>
 <translation id="7168109975831002660">Minimalny rozmiar czcionki</translation>
 <translation id="7170041865419449892">Poza zasięgiem</translation>
+<translation id="7171559745792467651">Instalowanie aplikacji z innych urządzeń</translation>
 <translation id="7173917244679555">Wygląda na to, że już zarządzasz użytkownikiem o tej nazwie. Chcesz <ph name="BEGIN_LINK" />zaimportować profil <ph name="PROFILE_NAME" /><ph name="END_LINK" /> na to urządzenie?</translation>
 <translation id="7175037578838465313">Skonfiguruj: <ph name="NAME" /></translation>
 <translation id="7175353351958621980">Załadowane z:</translation>
@@ -4094,6 +4108,7 @@
 <translation id="7386824183915085801">Oprócz informacji, które wybierzesz powyżej, zostanie przesłana używana przez Ciebie wersja Chrome i systemu operacyjnego. Jeśli dołączysz adres e-mail, Google może się z Tobą skontaktować w sprawie Twojego zgłoszenia. Przesłane przez Ciebie informacje pomogą nam poszukać przyczyn problemów oraz ulepszyć Chrome. Wszystkie dane osobowe, które prześlesz celowo lub przypadkowo, będą chronione zgodnie z naszymi zasadami prywatności.<ph name="BEGIN_BOLD" /> Przesyłając to zgłoszenie, zgadzasz się na to, że Google może wykorzystać je, by ulepszyć dowolne swoje usługi.<ph name="END_BOLD" /></translation>
 <translation id="7387829944233909572">Okno dialogowe „Wyczyść dane przeglądania”</translation>
 <translation id="7388044238629873883">Wszystko jest już prawie gotowe.</translation>
+<translation id="7388222713940428051">Otwórz okno trybu gościa</translation>
 <translation id="7392118418926456391">Skanowanie antywirusowe nie powiodło się</translation>
 <translation id="7392915005464253525">Otwórz ponowni&amp;e zamknięte okno</translation>
 <translation id="7396845648024431313">Aplikacja <ph name="APP_NAME" /> zostanie włączona podczas uruchamiania systemu i będzie działać w tle nawet po zamknięciu wszystkich pozostałych okien przeglądarki <ph name="PRODUCT_NAME" />.</translation>
@@ -4310,6 +4325,7 @@
 <translation id="773426152488311044">Aktualnie tylko Ty korzystasz z usługi <ph name="PRODUCT_NAME" />.</translation>
 <translation id="7740996059027112821">Standardowa</translation>
 <translation id="7748528009589593815">Poprzednia karta</translation>
+<translation id="7748626145866214022">Na pasku działań jest dostępnych więcej opcji. Aby go zaznaczyć, naciśnij Alt + A.</translation>
 <translation id="7751260505918304024">Pokaż wszystkie</translation>
 <translation id="7754704193130578113">Pytaj przed pobraniem, gdzie zapisać każdy plik</translation>
 <translation id="7758450972308449809">Dostosuj krawędzie ekranu</translation>
@@ -4374,6 +4390,7 @@
 <translation id="7831491651892296503">Podczas konfigurowania sieci wystąpił błąd</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
 <translation id="7832084384634357321">Godzina zakończenia</translation>
+<translation id="7832327313660264358">Dane, które synchronizujesz z Google, i funkcje, których używasz, nie zostaną zmienione</translation>
 <translation id="7833720883933317473">Tutaj pojawią się zapisane słowa niestandardowe</translation>
 <translation id="7837307963048806839">•  $1</translation>
 <translation id="7837776265184002579">Strona główna została zmieniona na <ph name="URL" />.</translation>
@@ -4399,7 +4416,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – sparowano</translation>
 <translation id="7870730066603611552">Sprawdź opcje synchronizowania po konfiguracji</translation>
 <translation id="7870790288828963061">Nie odnaleziono nowszej wersji aplikacji kiosku. Aktualizacja nie jest wymagana. Odłącz pamięć USB.</translation>
-<translation id="7874357055309047713">Zawsze uruchamiaj na wszystkich stronach</translation>
 <translation id="7877451762676714207">Nieznany błąd serwera. Spróbuj ponownie lub skontaktuj się z administratorem serwera.</translation>
 <translation id="7877680364634660272">Prezentacja</translation>
 <translation id="7878562273885520351">Ktoś mógł poznać Twoje hasło</translation>
@@ -4735,6 +4751,7 @@
 <translation id="8400146488506985033">Zarządzaj użytkownikami</translation>
 <translation id="8410073653152358832">Użyj tego telefonu</translation>
 <translation id="8410775397654368139">Google Play</translation>
+<translation id="8411022984399993066">Tak, włącz synchronizację i personalizację</translation>
 <translation id="8413385045638830869">Najpierw zapytaj (zalecane)</translation>
 <translation id="8418445294933751433">&amp;Pokaż jako kartę</translation>
 <translation id="8419098111404128271">Wyniki wyszukiwania dla „<ph name="SEARCH_TEXT" />”</translation>
@@ -4749,7 +4766,6 @@
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431909052837336408">Zmień PIN do karty SIM</translation>
 <translation id="8434480141477525001">Port debugowania NaCl</translation>
-<translation id="8437331208797669910">Dostęp do strony</translation>
 <translation id="843760761634048214">Zapisz kartę kredytową</translation>
 <translation id="8438328416656800239">Przejdź na inteligentną przeglądarkę</translation>
 <translation id="8439506636278576865">Proponuj tłumaczenie stron w tym języku</translation>
@@ -4780,6 +4796,7 @@
 <translation id="8470028084415844044">Aby korzystać ze wszystkich swoich haseł na innych urządzeniach, włącz synchronizację.</translation>
 <translation id="8470513973197838199">Zapisane hasła do <ph name="ORIGIN" /></translation>
 <translation id="8472623782143987204">sprzętowe</translation>
+<translation id="8474229360677287535">Zamknij wszystkie okna</translation>
 <translation id="8475313423285172237">Inny program na Twoim komputerze dodał rozszerzenie, które może zmienić działanie Chrome.</translation>
 <translation id="8475647382427415476">Dysk Google nie mógł zsynchronizować pliku „<ph name="FILENAME" />”. Spróbujemy ponownie później.</translation>
 <translation id="8477241577829954800">Zastąpiony</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 1eb1893..932ddaf 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -454,6 +454,7 @@
 <translation id="166439687370499867">A alteração das configurações de rede compartilhada não é permitida</translation>
 <translation id="1665611772925418501">Não foi possível modificar o arquivo.</translation>
 <translation id="1670399744444387456">Básicas</translation>
+<translation id="167160931442925455">Volume máximo</translation>
 <translation id="1673103856845176271">Não foi possível acessar o arquivo por motivos de segurança.</translation>
 <translation id="1673137583248014546"><ph name="URL" /> quer ver a marca e o modelo da sua chave de segurança</translation>
 <translation id="167832068858235403">diminuir volume</translation>
@@ -510,6 +511,7 @@
 <translation id="1758831820837444715">Configurar rede Ethernet</translation>
 <translation id="1763046204212875858">Criar atalhos para aplicativos</translation>
 <translation id="1763108912552529023">Continuar explorando</translation>
+<translation id="1763808908432309942">Abre em uma nova guia</translation>
 <translation id="1764226536771329714">beta</translation>
 <translation id="176587472219019965">&amp;Nova janela</translation>
 <translation id="1768278914020124551">Ops! Ocorreu um problema ao entrar em contato com o servidor de logon. Verifique a conexão com a Internet e o nome de domínio, depois tente novamente.</translation>
@@ -590,6 +592,7 @@
 <translation id="1871615898038944731">Seu <ph name="DEVICE_TYPE" /> está atualizado</translation>
 <translation id="1875387611427697908">Esse item só por ser adicionado a partir da <ph name="CHROME_WEB_STORE" /></translation>
 <translation id="1877520246462554164">Falha ao receber o token de autenticação. Saia e faça login novamente para tentar mais uma vez.</translation>
+<translation id="1878302395768190018">Você pode personalizar isso a qualquer momento nas configurações do Chrome</translation>
 <translation id="1878524442024357078">Não permitir que nenhum site use um plug-in para acessar seu computador</translation>
 <translation id="1880905663253319515">Tem certeza que deseja excluir o certificado "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="1886996562706621347">Permitir que os sites peçam para se tornar manipuladores padrão de protocolos (recomendado)</translation>
@@ -912,7 +915,6 @@
 <translation id="2413749388954403953">Alterar a interface de favoritos do usuário</translation>
 <translation id="2422426094670600218">&lt;sem nome&gt;</translation>
 <translation id="2423578206845792524">&amp;Salvar imagem como...</translation>
-<translation id="2424091190911472304">Sempre executar em <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Tamanho total do arquivo</translation>
 <translation id="2428510569851653187">Descrever o que você estava fazendo quando a guia travou</translation>
 <translation id="2431027948063157455">Não foi possível carregar o Google Assistente. Verifique sua conexão de rede e tente novamente.</translation>
@@ -1005,6 +1007,7 @@
 <translation id="2562685439590298522">Docs</translation>
 <translation id="2562743677925229011">Não conectado a <ph name="SHORT_PRODUCT_NAME" /></translation>
 <translation id="2563856802393254086">Parabéns! Seu serviço de dados "<ph name="NAME" />" foi ativado e está pronto para ser usado.</translation>
+<translation id="2564520396658920462">A execução do JavaScript por AppleScript está desativada. Para ativá-la, na barra de menu, acesse Ver &gt; Desenvolvedor &gt; Permitir o JavaScript do Eventos da Apple. Para ver mais informações: https://support.google.com/chrome/?p=applescript</translation>
 <translation id="2566124945717127842">Use a função "Powerwash" para redefinir seu dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" /> para as condições de fábrica.</translation>
 <translation id="2567257616420533738">Senha salva. Veja e gerencie senhas em <ph name="SAVED_PASSWORDS_LINK" /></translation>
 <translation id="2568774940984945469">Recipiente da barra de informações</translation>
@@ -1083,6 +1086,7 @@
 <translation id="2665394472441560184">Adicionar uma nova palavra</translation>
 <translation id="2665717534925640469">Esta página está em modo de tela inteira e desativou o cursor do mouse.</translation>
 <translation id="2665919335226618153">Ah, não! Ocorreu um erro durante a formatação.</translation>
+<translation id="2666990579225592931">Abrir janela de visitante</translation>
 <translation id="2667463864537187133">Gerenciar a verificação ortográfica</translation>
 <translation id="2670102641511624474">O app <ph name="APP_NAME" /> está compartilhando uma guia do Chrome.</translation>
 <translation id="2670429602441959756">Esta página contém recursos que ainda não são compatíveis com a realidade virtual. Saindo…</translation>
@@ -1200,7 +1204,6 @@
 <translation id="2838379631617906747">Instalando</translation>
 <translation id="2841837950101800123">Provedor</translation>
 <translation id="2843806747483486897">Alterar padrão...</translation>
-<translation id="2844111009524261443">Executar ao clicar</translation>
 <translation id="2845382757467349449">Sempre mostrar a barra de favoritos</translation>
 <translation id="2847759467426165163">Transmitir para</translation>
 <translation id="284805635805850872">Remover software perigoso?</translation>
@@ -1229,6 +1232,7 @@
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> será reiniciado e redefinido temporariamente</translation>
 <translation id="2885378588091291677">Gerenciador de tarefas</translation>
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
+<translation id="2886800363598651778">Sincronizar e personalizar o Chrome em todos os seus dispositivos</translation>
 <translation id="2887525882758501333">Documento PDF</translation>
 <translation id="2888807692577297075">Nenhum item corresponde a &lt;b&gt;"<ph name="SEARCH_STRING" />"&lt;/b&gt;</translation>
 <translation id="2889064240420137087">Abrir link com...</translation>
@@ -1512,7 +1516,6 @@
 <translation id="3308116878371095290">Esta página foi impedida de configurar cookies.</translation>
 <translation id="3308134619352333507">Ocultar botão</translation>
 <translation id="3308852433423051161">Carregando o Google Assistente…</translation>
-<translation id="3309747692199697901">Sempre executar em todos os sites</translation>
 <translation id="3312424061798279731">Idiomas ativados</translation>
 <translation id="3313590242757056087">Para definir quais websites o usuário supervisionado pode visualizar, configure restrições
     e configurações acessando <ph name="MANAGEMENT_URL" />.
@@ -1753,6 +1756,7 @@
 <translation id="3670229581627177274">Ativar Bluetooth</translation>
 <translation id="3672681487849735243">Foi detectado um erro de fábrica</translation>
 <translation id="367645871420407123">deixe em branco se você deseja definir a senha raiz como o valor da imagem de teste padrão</translation>
+<translation id="3677657024345889897">Volume mínimo</translation>
 <translation id="3678156199662914018">Extensão: <ph name="EXTENSION_NAME" /></translation>
 <translation id="3681311097828166361">Agradecemos seu feedback. Você está off-line no momento. Seu relatório será enviado mais tarde.</translation>
 <translation id="3683023058278427253">Detectamos vários tipos de licença para seu domínio. Escolha um para continuar.</translation>
@@ -1810,7 +1814,6 @@
 <translation id="3759933321830434300">Bloquear partes das páginas da Web</translation>
 <translation id="3760460896538743390">Inspecionar página de &amp;fundo</translation>
 <translation id="37613671848467444">Abrir em &amp;janela anônima</translation>
-<translation id="3763401818161139108">Sempre executar em <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Informações detalhadas da versão</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Comunicar-se com um dispositivo USB}one{Comunicar-se com # dispositivos USB}other{Comunicar-se com # dispositivos USB}}</translation>
 <translation id="3764986667044728669">Não foi possível fazer o registro</translation>
@@ -1951,6 +1954,7 @@
 <translation id="3956702100721821638">Não foi possível acessar o Google Play</translation>
 <translation id="3958088479270651626">Importar favoritos e configurações</translation>
 <translation id="3960566196862329469">ONC</translation>
+<translation id="3965965397408324205">Sair de <ph name="PROFILE_NAME" /></translation>
 <translation id="3966072572894326936">Escolher outra pasta...</translation>
 <translation id="3966388904776714213">Player de áudio</translation>
 <translation id="3967822245660637423">Download concluído</translation>
@@ -1991,6 +1995,7 @@
 <translation id="4031910098617850788">F5</translation>
 <translation id="4033471457476425443">Adicionar nova pasta</translation>
 <translation id="4034042927394659004">Diminuir brilho das teclas</translation>
+<translation id="4034824040120875894">Impressora</translation>
 <translation id="4035758313003622889">&amp;Gerenciador de tarefas</translation>
 <translation id="4036758022112812315">Destaque o que você quer ouvir e pressione Pesquisar + S. Ou, toque na tecla Pesquisar e a mantenha pressionada, depois clique ou arraste para selecionar o conteúdo.</translation>
 <translation id="4037084878352560732">Cavalo</translation>
@@ -2075,6 +2080,7 @@
 <translation id="4181602000363099176">20x</translation>
 <translation id="4181841719683918333">Idiomas</translation>
 <translation id="4184885522552335684">Arraste para mover uma tela</translation>
+<translation id="4192273449750167573">Revise suas configurações na próxima tela</translation>
 <translation id="4193154014135846272">Documento do Google</translation>
 <translation id="4194570336751258953">Ativar toque para clicar</translation>
 <translation id="4195643157523330669">Abrir em uma nova guia</translation>
@@ -2271,7 +2277,6 @@
 <translation id="4547992677060857254">A pasta selecionada contém arquivos confidenciais. Tem certeza que quer conceder a "$1" acesso permanente de gravação a esta pasta?</translation>
 <translation id="4552031286893852992">O Chrome bloqueou anúncios neste site porque ele costuma mostrar anúncios invasivos.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Acesso à página</translation>
 <translation id="4552678318981539154">Comprar mais espaço</translation>
 <translation id="4554591392113183336">A extensão externa está na mesma versão ou em uma versão anterior à existente.</translation>
 <translation id="4555769855065597957">Shadow</translation>
@@ -2323,6 +2328,7 @@
 <translation id="4632483769545853758">Ativar o som da guia</translation>
 <translation id="4633003931260532286">A extensão requer "<ph name="IMPORT_NAME" />" com a versão mínima "<ph name="IMPORT_VERSION" />", mas apenas a versão "<ph name="INSTALLED_VERSION" />" está instalada</translation>
 <translation id="4634771451598206121">Fazer login novamente...</translation>
+<translation id="4635398712689569051"><ph name="PAGE_NAME" /> não está disponível para usuários visitantes.</translation>
 <translation id="4640525840053037973">Fazer login com sua Conta do Google</translation>
 <translation id="4641539339823703554">Não foi possível para o Google Chrome configurar a hora do sistema. Verifique a hora abaixo e corrija-a, se necessário.</translation>
 <translation id="4643612240819915418">&amp;Abrir vídeo em uma nova guia</translation>
@@ -2359,6 +2365,7 @@
     Se isso for inesperado, entre em contato com o suporte.</translation>
 <translation id="469230890969474295">Pasta do OEM</translation>
 <translation id="4692623383562244444">Mecanismos de pesquisa</translation>
+<translation id="4694024090038830733">A configuração da impressora é gerenciada pelo administrador.</translation>
 <translation id="4697551882387947560">Quando terminar a sessão de navegação</translation>
 <translation id="4699172675775169585">Imagens e arquivos armazenados em cache</translation>
 <translation id="4699357559218762027">(aberto automaticamente)</translation>
@@ -2367,6 +2374,7 @@
 <translation id="4707934200082538898">Verifique seu e-mail em <ph name="BEGIN_BOLD" /><ph name="MANAGER_EMAIL" /><ph name="END_BOLD" /> para mais instruções.</translation>
 <translation id="4708794300267213770">Mostrar tela de bloqueio ao sair do modo de suspensão</translation>
 <translation id="4708849949179781599">Encerrar o <ph name="PRODUCT_NAME" /></translation>
+<translation id="4710251968215868702">Usa o conteúdo dos sites que você visita e as atividades e interações do navegador.</translation>
 <translation id="4711638718396952945">Restaurar configurações</translation>
 <translation id="4713544552769165154">Este arquivo foi projetado para um computador que utiliza o software Macintosh. Ele não é compatível com seu dispositivo, que executa o Chrome OS. Procure um app substituto adequado na <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" />.<ph name="BEGIN_LINK_HELP" />Saiba mais<ph name="END_LINK_HELP" /></translation>
 <translation id="4714531393479055912">O <ph name="PRODUCT_NAME" /> agora pode sincronizar suas senhas.</translation>
@@ -2734,6 +2742,7 @@
 <translation id="527605719918376753">Desativar som da guia</translation>
 <translation id="527605982717517565">Sempre permitir JavaScript em <ph name="HOST" /></translation>
 <translation id="5280426389926346830">Criar atalho?</translation>
+<translation id="528208740344463258">Para fazer o download e usar os apps Android, primeiro é necessário instalar esta atualização obrigatória. Enquanto seu <ph name="DEVICE_TYPE" /> estiver sendo atualizado, não será possível usá-lo. O <ph name="DEVICE_TYPE" /> será reiniciado quando a instalação for concluída.</translation>
 <translation id="5282733140964383898">A ativação da opção "Não rastrear" significa que uma solicitação será incluída com seu tráfego de navegação. Qualquer efeito depende de o website responder ou não à solicitação e da forma como a solicitação é interpretada. Por exemplo, alguns websites podem responder a essa solicitação mostrando anúncios que não sejam baseados em outros websites que você tenha visitado. Muitos websites ainda coletam e usam seus dados de navegação, por exemplo, para melhorar a segurança, fornecer conteúdo, serviços, anúncios e recomendações no website e para gerar estatísticas de relatórios. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="5283677936944177147">O sistema falhou ao determinar o modelo ou número de série do dispositivo.</translation>
 <translation id="5284445933715251131">Continuar o download</translation>
@@ -3096,6 +3105,7 @@
 <translation id="5807290661599647102">Definir um bloqueio de tela</translation>
 <translation id="580926004266167721">Falha ao vincular a máquina ao domínio. Isso pode ter ocorrido porque não há privilégios suficientes para sua conta na unidade organizacional.</translation>
 <translation id="580961539202306967">Perguntar quando um site quiser me enviar mensagens push (recomendado)</translation>
+<translation id="5809725759695043233">Você tem apps otimizados para Chromebooks</translation>
 <translation id="5814126672212206791">Tipo de conexão</translation>
 <translation id="5815645614496570556">Endereço X.400</translation>
 <translation id="5817918615728894473">Parear</translation>
@@ -3268,7 +3278,6 @@
 <translation id="6080515710685820702">Está usando um computador compartilhado? Tente abrir uma janela anônima.</translation>
 <translation id="6080689532560039067">Verifique a hora do seu sistema</translation>
 <translation id="6082651258230788217">Mostrar na barra de ferramentas</translation>
-<translation id="6086814797483779854">Executar ao clicar</translation>
 <translation id="6086846494333236931">Instalada pelo administrador</translation>
 <translation id="6087960857463881712">Rosto maravilhado</translation>
 <translation id="6089481419520884864">Página de conversão</translation>
@@ -3460,9 +3469,11 @@
 <translation id="6383051423892982287">Criptografar dados sincronizados com sua <ph name="BEGIN_LINK" />senha longa de sincronização<ph name="END_LINK" /></translation>
 <translation id="6384275966486438344">Alterar suas configurações de pesquisa para: <ph name="SEARCH_HOST" /></translation>
 <translation id="6385543213911723544">Os sites podem salvar e ler os dados dos cookies</translation>
+<translation id="6388429472088318283">Idiomas de pesquisa</translation>
 <translation id="6388771388956873507">Encontre o sensor de impressão digital no dispositivo e toque nele com seu dedo</translation>
 <translation id="6390799748543157332">As páginas que você visualiza nesta janela não aparecem no histórico do navegador e não deixam outros rastros, como cookies, no computador depois que todas as janelas abertas no modo de visitante são fechadas. No entanto, todos os arquivos baixados serão preservados.</translation>
 <translation id="6395423953133416962">Enviar <ph name="BEGIN_LINK1" />informações<ph name="END_LINK1" /> e <ph name="BEGIN_LINK2" />métricas do sistema<ph name="END_LINK2" /></translation>
+<translation id="6397094776139756010">Opções de sincronização e personalização</translation>
 <translation id="6397592254427394018">Abrir todos os favoritos em &amp;janela  anônima</translation>
 <translation id="6398715114293939307">Remover Google Play Store</translation>
 <translation id="6398765197997659313">Sair do modo tela cheia</translation>
@@ -3652,6 +3663,7 @@
 <translation id="6659594942844771486">Guia</translation>
 <translation id="6664237456442406323">Infelizmente, seu computador está configurado com um ID de hardware mal formado. Isso impede que o Chrome OS seja atualizado com as correções de segurança mais recentes e, por isso, seu computador <ph name="BEGIN_BOLD" />pode ficar vulnerável a ataques maliciosos<ph name="END_BOLD" />.</translation>
 <translation id="6664774537677393800">Ocorreu um erro ao abrir seu perfil. Saia da conta e faça login novamente.</translation>
+<translation id="6670647982128220776">Os recursos relacionados à sincronização e personalização agora estão sob um único controle. A ativação pode alterar suas configurações atuais.</translation>
 <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation>
 <translation id="667517062706956822">Quer que o Google traduza esta página de <ph name="SOURCE_LANGUAGE" /> para <ph name="TARGET_LANGUAGE" />?</translation>
 <translation id="6675665718701918026">Dispositivo apontador conectado</translation>
@@ -3766,6 +3778,7 @@
 <translation id="6841186874966388268">Erros</translation>
 <translation id="6843725295806269523">sem som</translation>
 <translation id="6845038076637626672">Abrir maximizado</translation>
+<translation id="685040365210406336">Não fazer alterações</translation>
 <translation id="6851497530878285708">App ativado</translation>
 <translation id="6853388645642883916">Atualizador em modo de espera</translation>
 <translation id="68541483639528434">Fechar outras guias</translation>
@@ -3965,6 +3978,7 @@
 <translation id="716810439572026343">Fazendo o download de <ph name="FILE_NAME" /></translation>
 <translation id="7168109975831002660">Tamanho mínimo da fonte</translation>
 <translation id="7170041865419449892">Fora de alcance</translation>
+<translation id="7171559745792467651">Instale apps dos seus outros dispositivos</translation>
 <translation id="7173917244679555">Parece que você já está administrando um usuário com esse nome. Quer <ph name="BEGIN_LINK" />importar <ph name="PROFILE_NAME" /><ph name="END_LINK" /> para este dispositivo?</translation>
 <translation id="7175037578838465313">Configurar a rede <ph name="NAME" /></translation>
 <translation id="7175353351958621980">Carregado de:</translation>
@@ -4104,6 +4118,7 @@
           <ph name="END_BOLD" /></translation>
 <translation id="7387829944233909572">Caixa de diálogo "Limpar dados de navegação"</translation>
 <translation id="7388044238629873883">Está quase terminando!</translation>
+<translation id="7388222713940428051">Abrir janela de visitante</translation>
 <translation id="7392118418926456391">Falha na verificação de vírus</translation>
 <translation id="7392915005464253525">R&amp;eabrir janela fechada</translation>
 <translation id="7396845648024431313">O <ph name="APP_NAME" /> será iniciado na inicialização do sistema e continuará sendo executado em segundo plano, mesmo quando você fechar todas as outras janelas de <ph name="PRODUCT_NAME" />.</translation>
@@ -4321,6 +4336,7 @@
 <translation id="773426152488311044">Você é atualmente o único usuário de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="7740996059027112821">Padrão</translation>
 <translation id="7748528009589593815">Guia anterior</translation>
+<translation id="7748626145866214022">Mais opções disponíveis na barra de ação. Pressione Alt + A para colocar o foco na barra de ação.</translation>
 <translation id="7751260505918304024">Exibir todos</translation>
 <translation id="7754704193130578113">Perguntar onde salvar cada arquivo antes de fazer download</translation>
 <translation id="7758450972308449809">Ajuste os limites da sua tela</translation>
@@ -4385,6 +4401,7 @@
 <translation id="7831491651892296503">Erro ao configurar a rede</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
 <translation id="7832084384634357321">Horário de término</translation>
+<translation id="7832327313660264358">Os dados sincronizados com o Google e os recursos usados não serão alterados</translation>
 <translation id="7833720883933317473">As palavras personalizadas salvas serão exibidas aqui</translation>
 <translation id="7837307963048806839">•  $1</translation>
 <translation id="7837776265184002579">Sua página inicial foi alterada para <ph name="URL" />.</translation>
@@ -4410,7 +4427,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" />: pareado</translation>
 <translation id="7870730066603611552">Revisar as opções de sincronização após a configuração</translation>
 <translation id="7870790288828963061">Nenhum aplicativo de quiosque com versão mais recente foi encontrado. Não há nada para ser atualizado. Remova o pendrive.</translation>
-<translation id="7874357055309047713">Sempre executar em todos os sites</translation>
 <translation id="7877451762676714207">Erro de servidor desconhecido. Tente novamente ou entre em contato com o administrador do servidor.</translation>
 <translation id="7877680364634660272">Tour</translation>
 <translation id="7878562273885520351">Sua senha pode estar comprometida</translation>
@@ -4746,6 +4762,7 @@
 <translation id="8400146488506985033">Gerenciar pessoas</translation>
 <translation id="8410073653152358832">Usar este smartphone</translation>
 <translation id="8410775397654368139">Google Play</translation>
+<translation id="8411022984399993066">Sim, ativar a sincronização e a personalização</translation>
 <translation id="8413385045638830869">Perguntar primeiro (recomendado)</translation>
 <translation id="8418445294933751433">&amp;Mostrar como guia</translation>
 <translation id="8419098111404128271">Resultados de pesquisa para "<ph name="SEARCH_TEXT" />"</translation>
@@ -4760,7 +4777,6 @@
 <translation id="8428634594422941299">Entendi</translation>
 <translation id="8431909052837336408">Alterar PIN do SIM</translation>
 <translation id="8434480141477525001">Porta de depuração de Cliente nativo</translation>
-<translation id="8437331208797669910">Acesso à página</translation>
 <translation id="843760761634048214">Salvar cartão de crédito</translation>
 <translation id="8438328416656800239">Mudar para um navegador inteligente</translation>
 <translation id="8439506636278576865">Oferecer para traduzir páginas neste idioma</translation>
@@ -4791,6 +4807,7 @@
 <translation id="8470028084415844044">Para ter todas as suas senhas em todos os seus dispositivos, ative a sincronização.</translation>
 <translation id="8470513973197838199">Senhas salvas para <ph name="ORIGIN" /></translation>
 <translation id="8472623782143987204">suportado por hardware</translation>
+<translation id="8474229360677287535">Fechar todas as janelas</translation>
 <translation id="8475313423285172237">Outro programa em seu computador adicionou uma extensão que pode mudar a forma como o Google Chrome funciona.</translation>
 <translation id="8475647382427415476">Não foi possível para o Google Drive sincronizar "<ph name="FILENAME" />" no momento. O Google Drive tentará novamente mais tarde.</translation>
 <translation id="8477241577829954800">Substituído</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 52fd32b..bdcc676 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -913,7 +913,6 @@
 <translation id="2413749388954403953">Alterar a interface de utilizador dos marcadores</translation>
 <translation id="2422426094670600218">&lt;sem nome&gt;</translation>
 <translation id="2423578206845792524">Guard&amp;ar imagem como...</translation>
-<translation id="2424091190911472304">Executar sempre em <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Tamanho total do ficheiro</translation>
 <translation id="2428510569851653187">Descreva o que estava a fazer quando o separador falhou</translation>
 <translation id="2431027948063157455">Não foi possível carregar o Assistente Google. Verifique a sua ligação à rede e tente novamente.</translation>
@@ -1201,7 +1200,6 @@
 <translation id="2838379631617906747">A instalar</translation>
 <translation id="2841837950101800123">Fornecedor</translation>
 <translation id="2843806747483486897">Alterar predefinição...</translation>
-<translation id="2844111009524261443">Executar ao clicar</translation>
 <translation id="2845382757467349449">Mostrar Sempre a Barra de Marcadores</translation>
 <translation id="2847759467426165163">Transmitir para</translation>
 <translation id="284805635805850872">Pretende remover software prejudicial?</translation>
@@ -1514,7 +1512,6 @@
 <translation id="3308116878371095290">Esta página foi impedida de definir cookies.</translation>
 <translation id="3308134619352333507">Ocultar Botão</translation>
 <translation id="3308852433423051161">A carregar o Assistente Google...</translation>
-<translation id="3309747692199697901">Executar sempre em todos os sites</translation>
 <translation id="3312424061798279731">Idiomas ativados</translation>
 <translation id="3313590242757056087">Para definir que Sites o utilizador supervisionado pode ver, pode configurar restrições
     e definições em <ph name="MANAGEMENT_URL" />.
@@ -1812,7 +1809,6 @@
 <translation id="3759933321830434300">Bloquear partes de páginas Web</translation>
 <translation id="3760460896538743390">Inspecionar Página de Fundo</translation>
 <translation id="37613671848467444">Abrir na Janela de &amp;Navegação Anónima</translation>
-<translation id="3763401818161139108">Executar sempre em <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Informações de compilação detalhadas</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Comunicar com um dispositivo USB}other{Comunicar com # dispositivos USB}}</translation>
 <translation id="3764986667044728669">Não foi possível efetuar a inscrição</translation>
@@ -2273,7 +2269,6 @@
 <translation id="4547992677060857254">A pasta que selecionou contém ficheiros sensíveis. Tem a certeza de que pretende conceder a "$1" o acesso permanente de escrita a esta pasta?</translation>
 <translation id="4552031286893852992">O Chrome bloqueou anúncios neste site porque o mesmo tem tendência para mostrar anúncios intrusivos.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Acesso à página</translation>
 <translation id="4552678318981539154">Comprar mais armazenamento</translation>
 <translation id="4554591392113183336">A extensão externa tem a mesma versão ou uma versão inferior à existente.</translation>
 <translation id="4555769855065597957">Sombra</translation>
@@ -3270,7 +3265,6 @@
 <translation id="6080515710685820702">Está a utilizar um computador partilhado? Experimente abrir uma janela de navegação anónima.</translation>
 <translation id="6080689532560039067">Verificar a hora do sistema</translation>
 <translation id="6082651258230788217">Mostrar na barra de ferramentas</translation>
-<translation id="6086814797483779854">Executar ao clicar</translation>
 <translation id="6086846494333236931">Instalada pelo gestor</translation>
 <translation id="6087960857463881712">Cara de fantástico</translation>
 <translation id="6089481419520884864">Página de destilação</translation>
@@ -4410,7 +4404,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – sincronizado</translation>
 <translation id="7870730066603611552">Rever opções de sincronização após a configuração</translation>
 <translation id="7870790288828963061">Nenhuma aplicação do Quiosque encontrada com uma versão mais recente. Nada a atualizar. Remova a pen USB.</translation>
-<translation id="7874357055309047713">Executar sempre em todos os sites</translation>
 <translation id="7877451762676714207">Erro de servidor desconhecido. Tente novamente ou contacte o gestor do servidor.</translation>
 <translation id="7877680364634660272">Visita guiada</translation>
 <translation id="7878562273885520351">A palavra-passe pode estar comprometida</translation>
@@ -4759,7 +4752,6 @@
 <translation id="8428634594422941299">Compreendi</translation>
 <translation id="8431909052837336408">Alterar o PIN do cartão SIM</translation>
 <translation id="8434480141477525001">Porta de depuração de NaCl</translation>
-<translation id="8437331208797669910">Acesso à página</translation>
 <translation id="843760761634048214">Guardar cartão de crédito</translation>
 <translation id="8438328416656800239">Mude para um navegador inteligente</translation>
 <translation id="8439506636278576865">Oferecer para traduzir páginas neste idioma</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index cf3e4d16..732dfe4 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Modifică interfața de utilizare pentru marcaje</translation>
 <translation id="2422426094670600218">&lt;fără nume&gt;</translation>
 <translation id="2423578206845792524">Sal&amp;vează imaginea ca...</translation>
-<translation id="2424091190911472304">Rulează întotdeauna pe <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Dimensiunea totală a fișierelor</translation>
 <translation id="2428510569851653187">Descrie ce făceai când s-a blocat fila</translation>
 <translation id="2431027948063157455">Asistentul Google nu s-a putut încărca; încearcă din nou.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">Se instalează</translation>
 <translation id="2841837950101800123">Furnizor</translation>
 <translation id="2843806747483486897">Schimbați valoarea prestabilită...</translation>
-<translation id="2844111009524261443">Rulează la clic</translation>
 <translation id="2845382757467349449">Afișează mereu bara de marcaje</translation>
 <translation id="2847759467426165163">Proiectează pe</translation>
 <translation id="284805635805850872">Elimini software-ul dăunător?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Această pagină a fost împiedicată să stocheze cookie-uri.</translation>
 <translation id="3308134619352333507">Butonul Ascundeți</translation>
 <translation id="3308852433423051161">Se încarcă Asistentul Google...</translation>
-<translation id="3309747692199697901">Rulează întotdeauna pe toate site-urile</translation>
 <translation id="3312424061798279731">Limbi activate</translation>
 <translation id="3313590242757056087">Pentru a configura site-urile web pe care le poate accesa utilizatorul monitorizat, puteți aplica restricții
     și setări accesând <ph name="MANAGEMENT_URL" />.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Blochează părți din paginile web</translation>
 <translation id="3760460896538743390">Inspectați pagina de fun&amp;dal</translation>
 <translation id="37613671848467444">Deschideți într-o &amp;fereastră incognito</translation>
-<translation id="3763401818161139108">Rulează întotdeauna pe <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Informații detaliate privind versiunea</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Comunică cu un dispozitiv USB}few{Comunică cu # dispozitive USB}other{Comunică cu # de dispozitive USB}}</translation>
 <translation id="3764986667044728669">Nu se poate înscrie</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">Dosarul pe care l-ați selectat conține fișiere cu informații delicate. Sigur doriți să permiteți accesul de scriere permanent pentru „$1” la acest dosar?</translation>
 <translation id="4552031286893852992">Chrome a blocat anunțurile pe acest site, deoarece site-ul tinde să afișeze anunțuri deranjante.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Acces la pagină</translation>
 <translation id="4552678318981539154">Cumpărați mai mult spațiu de stocare</translation>
 <translation id="4554591392113183336">Extensia externă este în aceeași versiune sau într-o versiune inferioară celei existente.</translation>
 <translation id="4555769855065597957">Umbră</translation>
@@ -3267,7 +3262,6 @@
 <translation id="6080515710685820702">Folosești un computer comun? Încearcă să deschizi o fereastră incognito.</translation>
 <translation id="6080689532560039067">Verificați ora sistemului</translation>
 <translation id="6082651258230788217">Afișează în bara de instrumente</translation>
-<translation id="6086814797483779854">Rulează la clic</translation>
 <translation id="6086846494333236931">Instalată de administrator</translation>
 <translation id="6087960857463881712">Față extraordinară</translation>
 <translation id="6089481419520884864">Faceți conversia paginii</translation>
@@ -4407,7 +4401,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – asociat</translation>
 <translation id="7870730066603611552">Examinează opțiunile de sincronizare după configurare</translation>
 <translation id="7870790288828963061">Nu s-a găsit nicio aplicație de tip chioșc cu o versiune mai recentă. Nimic de actualizat. Scoate stickul USB.</translation>
-<translation id="7874357055309047713">Rulează întotdeauna pe toate site-urile</translation>
 <translation id="7877451762676714207">Eroare de server necunoscută. Încercați din nou sau contactați administratorul serverului.</translation>
 <translation id="7877680364634660272">Tur</translation>
 <translation id="7878562273885520351">Este posibil ca parola să fie compromisă</translation>
@@ -4756,7 +4749,6 @@
 <translation id="8428634594422941299">Am înțeles</translation>
 <translation id="8431909052837336408">Schimbă codul PIN pentru SIM</translation>
 <translation id="8434480141477525001">Port remediere NaCl</translation>
-<translation id="8437331208797669910">Acces la pagină</translation>
 <translation id="843760761634048214">Salvează cardul de credit</translation>
 <translation id="8438328416656800239">Comută la un browser inteligent</translation>
 <translation id="8439506636278576865">Oferă-te să traduci paginile în această limbă</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index faf794b..149c66e 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -911,7 +911,6 @@
 <translation id="2413749388954403953">Изменение пользовательского интерфейса закладок</translation>
 <translation id="2422426094670600218">&lt;без имени&gt;</translation>
 <translation id="2423578206845792524">Со&amp;хранить картинку как...</translation>
-<translation id="2424091190911472304">Всегда запускать на <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Общий размер файлов</translation>
 <translation id="2428510569851653187">Опишите, что вы делали, когда произошел сбой</translation>
 <translation id="2431027948063157455">Не удалось загрузить Google Ассистента. Проверьте подключение к Интернету и повторите попытку.</translation>
@@ -1201,7 +1200,6 @@
 <translation id="2838379631617906747">Установка...</translation>
 <translation id="2841837950101800123">Поставщик</translation>
 <translation id="2843806747483486897">Изменить настройки по умолчанию…</translation>
-<translation id="2844111009524261443">Запускать по нажатию</translation>
 <translation id="2845382757467349449">Всегда показывать панель закладок</translation>
 <translation id="2847759467426165163">Выберите устройство</translation>
 <translation id="284805635805850872">Удалить вредоносное ПО?</translation>
@@ -1513,7 +1511,6 @@
 <translation id="3308116878371095290">Попытка сохранить файл cookie заблокирована.</translation>
 <translation id="3308134619352333507">Скрыть кнопку</translation>
 <translation id="3308852433423051161">Загрузка Google Ассистента…</translation>
-<translation id="3309747692199697901">Запускать всегда</translation>
 <translation id="3312424061798279731">Добавленные языки</translation>
 <translation id="3313590242757056087">Указать список сайтов, которые может посещать контролируемый пользователь, а также задать настройки и
     ограничения можно на странице <ph name="MANAGEMENT_URL" />.
@@ -1811,7 +1808,6 @@
 <translation id="3759933321830434300">Блокировка элементов веб-страниц</translation>
 <translation id="3760460896538743390">Исследовать &amp;фоновую страницу</translation>
 <translation id="37613671848467444">Открыть в режиме &amp;инкогнито</translation>
-<translation id="3763401818161139108">Всегда запускать на <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Подробная информация о сборке</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Доступно 1 USB-устройство}one{Доступно # USB-устройство}few{Доступно # USB-устройства}many{Доступно # USB-устройств}other{Доступно # USB-устройства}}</translation>
 <translation id="3764986667044728669">Регистрация не удалась</translation>
@@ -2272,7 +2268,6 @@
 <translation id="4547992677060857254">Выбранный каталог содержит конфиденциальные файлы. Предоставить пользователю "$1" постоянный доступ на запись данных в этот каталог?</translation>
 <translation id="4552031286893852992">Chrome заблокировал объявления на этом сайте, потому что на нем много навязчивой рекламы.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Доступ к странице</translation>
 <translation id="4552678318981539154">Приобретите дополнительное пространство</translation>
 <translation id="4554591392113183336">Внешнее расширение не новее существующего.</translation>
 <translation id="4555769855065597957">Тень</translation>
@@ -2522,7 +2517,7 @@
 <translation id="4927314534488570958">Для отображения некоторых элементов на этой странице требуется плагин <ph name="PLUGIN_NAME" />.</translation>
 <translation id="4927753642311223124">Оповещений нет.</translation>
 <translation id="4927846293686536410">Войдите в аккаунт, чтобы синхронизировать закладки, историю, пароли и другие настройки на всех устройствах. Одновременно будет выполнена авторизация в сервисах Google.</translation>
-<translation id="4929386379796360314">Печать мест назначения</translation>
+<translation id="4929386379796360314">Места назначения печати</translation>
 <translation id="4931132176527519925">Всегда дублировать изображение</translation>
 <translation id="4933484234309072027">встроен в <ph name="URL" /></translation>
 <translation id="493571969993549666">Создать контролируемый профиль</translation>
@@ -3268,7 +3263,6 @@
 <translation id="6080515710685820702">Компьютером пользуются несколько человек? Откройте окно в режиме инкогнито.</translation>
 <translation id="6080689532560039067">Проверка системного времени</translation>
 <translation id="6082651258230788217">Добавить на панель инструментов</translation>
-<translation id="6086814797483779854">Запуск по нажатию</translation>
 <translation id="6086846494333236931">Установлено администратором</translation>
 <translation id="6087960857463881712">Модник</translation>
 <translation id="6089481419520884864">Сжать страницу</translation>
@@ -4408,7 +4402,6 @@
 <translation id="786957569166715433">Подключено устройство: <ph name="DEVICE_NAME" /></translation>
 <translation id="7870730066603611552">Проверять параметры синхронизации после начала сеанса</translation>
 <translation id="7870790288828963061">Новых версий киоск-приложений нет. Обновление не требуется. Извлеките USB-накопитель.</translation>
-<translation id="7874357055309047713">Запускать всегда</translation>
 <translation id="7877451762676714207">Обнаружена неизвестная ошибка сервера. Повторите попытку или свяжитесь с его администратором.</translation>
 <translation id="7877680364634660272">Обзор возможностей</translation>
 <translation id="7878562273885520351">Злоумышленники могли узнать ваш пароль</translation>
@@ -4757,7 +4750,6 @@
 <translation id="8428634594422941299">ОК</translation>
 <translation id="8431909052837336408">Изменение PIN-кода SIM-карты</translation>
 <translation id="8434480141477525001">Порт отладки NaCl</translation>
-<translation id="8437331208797669910">Доступ к странице</translation>
 <translation id="843760761634048214">Сохранить кредитную карту</translation>
 <translation id="8438328416656800239">Перейдите на умный браузер</translation>
 <translation id="8439506636278576865">Предлагать перевести страницы на этом языке</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index d57786a..e0021cea 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -913,7 +913,6 @@
 <translation id="2413749388954403953">Zmeniť používateľské rozhranie záložiek</translation>
 <translation id="2422426094670600218">&lt;bez názvu&gt;</translation>
 <translation id="2423578206845792524">Uložiť &amp;obrázok ako...</translation>
-<translation id="2424091190911472304">Vždy spustiť na webe <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Celková veľkosť súboru</translation>
 <translation id="2428510569851653187">Opíšte, čo ste robili, keď karta zlyhala</translation>
 <translation id="2431027948063157455">Asistent Google sa nenačítal. Skontrolujte sieťové pripojenie a skúste to znova.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">Inštalácia</translation>
 <translation id="2841837950101800123">Poskytovateľ</translation>
 <translation id="2843806747483486897">Zmeniť predvolenú akciu...</translation>
-<translation id="2844111009524261443">Spustiť po kliknutí</translation>
 <translation id="2845382757467349449">Vždy zobrazovať panel so záložkami</translation>
 <translation id="2847759467426165163">Prenášať do</translation>
 <translation id="284805635805850872">Odstrániť škodlivý softvér?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Tejto stránke bolo zabránené nastaviť súbory cookie.</translation>
 <translation id="3308134619352333507">Skryť tlačidlo</translation>
 <translation id="3308852433423051161">Načítava sa Asistent Google…</translation>
-<translation id="3309747692199697901">Vždy spustiť na všetkých stránkach</translation>
 <translation id="3312424061798279731">Povolené jazyky</translation>
 <translation id="3313590242757056087">Ak chcete nastaviť, ktoré stránky môže kontrolovaný používateľ zobraziť, môžete na stránke <ph name="MANAGEMENT_URL" /> nakonfigurovať
     obmedzenia a nastavenia.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Blokovať časti webových stránok</translation>
 <translation id="3760460896538743390">Skontrolovať &amp;stránku na pozadí</translation>
 <translation id="37613671848467444">Otvoriť v &amp;okne inkognito</translation>
-<translation id="3763401818161139108">Vždy spustiť na webe <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Podrobné informácie o zostave</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Komunikujte so zariadením USB}few{Komunikujte s # zariadeniami USB}many{Komunikujte s # zariadením USB}other{Komunikujte s # zariadeniami USB}}</translation>
 <translation id="3764986667044728669">Registrácia zlyhala</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">Vybratý priečinok obsahuje citlivé súbory. Naozaj chcete aplikácii $1 povoliť trvalý prístup na zapisovanie pre tento priečinok?</translation>
 <translation id="4552031286893852992">Chrome zablokoval reklamy na tomto webe, pretože zvykne zobrazovať obťažujúce reklamy.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Prístup k stránke</translation>
 <translation id="4552678318981539154">Kúpiť väčší ukladací priestor</translation>
 <translation id="4554591392113183336">Verzia externého rozšírenia je rovnaká alebo nižšia ako existujúca verzia</translation>
 <translation id="4555769855065597957">Tieň</translation>
@@ -3267,7 +3262,6 @@
 <translation id="6080515710685820702">Používate zdieľaný počítač? Skúste otvoriť okno inkognito.</translation>
 <translation id="6080689532560039067">Kontrola času systému</translation>
 <translation id="6082651258230788217">Zobraziť na paneli s nástrojmi</translation>
-<translation id="6086814797483779854">Spustiť po kliknutí</translation>
 <translation id="6086846494333236931">Nainštalované vaším správcom</translation>
 <translation id="6087960857463881712">Paráda</translation>
 <translation id="6089481419520884864">Destilovať stránku</translation>
@@ -4405,7 +4399,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – spárované</translation>
 <translation id="7870730066603611552">Po nastavení prezrieť možnosti synchronizácie</translation>
 <translation id="7870790288828963061">Nenašli sa žiadne aplikácie Kiosku s novšou verziou. Nie je čo aktualizovať. Odoberte kľúč USB.</translation>
-<translation id="7874357055309047713">Vždy spustiť na všetkých stránkach</translation>
 <translation id="7877451762676714207">Neznáma chyba servera. Skúste to znova alebo sa obráťte na správcu servera.</translation>
 <translation id="7877680364634660272">Prehliadka</translation>
 <translation id="7878562273885520351">Vaše heslo mohlo byť napadnuté</translation>
@@ -4754,7 +4747,6 @@
 <translation id="8428634594422941299">Dobre</translation>
 <translation id="8431909052837336408">Zmena kódu PIN pre SIM kartu</translation>
 <translation id="8434480141477525001">Port ladenia klienta NaCl</translation>
-<translation id="8437331208797669910">Prístup k stránke</translation>
 <translation id="843760761634048214">Uloženie kreditnej karty</translation>
 <translation id="8438328416656800239">Prepnite na inteligentný prehliadač</translation>
 <translation id="8439506636278576865">Ponúkať preklady stránok v tomto jazyku</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index adb9172..34afd18 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -913,7 +913,6 @@
 <translation id="2413749388954403953">Spreminjanje uporabniškega vmesnika za zaznamke</translation>
 <translation id="2422426094670600218">&lt;neimenovano&gt;</translation>
 <translation id="2423578206845792524">Sh&amp;rani sliko kot ...</translation>
-<translation id="2424091190911472304">Vedno izvajaj na spletnem mestu <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Skupna velikost datotek</translation>
 <translation id="2428510569851653187">Opišite, kaj ste počeli, ko se je zavihek zrušil</translation>
 <translation id="2431027948063157455">Pomočnika Google ni bilo mogoče naložiti. Preverite omrežno povezavo in poskusite znova.</translation>
@@ -1201,7 +1200,6 @@
 <translation id="2838379631617906747">Nameščanje</translation>
 <translation id="2841837950101800123">Ponudnik</translation>
 <translation id="2843806747483486897">Spremeni privzeto dejanje ...</translation>
-<translation id="2844111009524261443">Izvajanje ob kliku</translation>
 <translation id="2845382757467349449">Vedno pokaži vrstico z zaznamki</translation>
 <translation id="2847759467426165163">Predvajanje v napravi</translation>
 <translation id="284805635805850872">Želite odstraniti škodljivo programsko opremo?</translation>
@@ -1513,7 +1511,6 @@
 <translation id="3308116878371095290">Tej strani je bilo preprečeno nastavljanje piškotkov.</translation>
 <translation id="3308134619352333507">Gumb »Skrij«</translation>
 <translation id="3308852433423051161">Nalaganje Pomočnika Google ...</translation>
-<translation id="3309747692199697901">Vedno izvajaj na vseh spletnih mestih</translation>
 <translation id="3312424061798279731">Omogočeni jeziki</translation>
 <translation id="3313590242757056087">Če želite nastaviti, katera spletna mesta si lahko ogleda zaščiteni uporabnik, lahko na strani <ph name="MANAGEMENT_URL" />
     določite omejitve in nastavitve.
@@ -1811,7 +1808,6 @@
 <translation id="3759933321830434300">Blokiraj dele spletnih strani</translation>
 <translation id="3760460896538743390">Preglej stran v ozadju</translation>
 <translation id="37613671848467444">Odpri v oknu &amp;brez beleženja zgodovine</translation>
-<translation id="3763401818161139108">Vedno izvajaj na spletnem mestu <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Podrobnejše informacije o gradnji</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Komuniciranje z napravo USB}one{Komuniciranje z # napravo USB}two{Komuniciranje z # napravama USB}few{Komuniciranje z # napravami USB}other{Komuniciranje z # napravami USB}}</translation>
 <translation id="3764986667044728669">Včlanitev ni mogoča</translation>
@@ -2272,7 +2268,6 @@
 <translation id="4547992677060857254">V mapi, ki ste jo izbrali, so občutljive datoteke. Ali ste prepričani, da želite »$1« podeliti trajen dostop za pisanje za to mapo?</translation>
 <translation id="4552031286893852992">Chrome je blokiral oglase na tem spletnem mestu, ker to spletno mesto prikazuje vsiljive oglase.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Dostop do strani</translation>
 <translation id="4552678318981539154">Nakup dodatnega prostora za shranjevanje ...</translation>
 <translation id="4554591392113183336">Zunanja razširitev je iste ali starejše različice kot trenutna.</translation>
 <translation id="4555769855065597957">Senca</translation>
@@ -3269,7 +3264,6 @@
 <translation id="6080515710685820702">Uporabljate računalnik v skupni rabi? Poskusite odpreti okno brez beleženja zgodovine.</translation>
 <translation id="6080689532560039067">Preverjanje sistemskega časa</translation>
 <translation id="6082651258230788217">Pokaži v orodni vrstici</translation>
-<translation id="6086814797483779854">Izvajanje ob kliku</translation>
 <translation id="6086846494333236931">Namestil skrbnik</translation>
 <translation id="6087960857463881712">Navdušen obraz</translation>
 <translation id="6089481419520884864">Ustvari povzetek strani</translation>
@@ -4408,7 +4402,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – seznanjeno</translation>
 <translation id="7870730066603611552">Ogled možnosti sinhronizacije po nastavitvi</translation>
 <translation id="7870790288828963061">Ni aplikacij za kiosk z novejšo različico. Ni česa posodobiti. Odstranite ključek USB.</translation>
-<translation id="7874357055309047713">Vedno izvajaj na vseh spletnih mestih</translation>
 <translation id="7877451762676714207">Neznana napaka strežnika. Poskusite znova ali se obrnite na skrbnika strežnika.</translation>
 <translation id="7877680364634660272">Predstavitev</translation>
 <translation id="7878562273885520351">Geslo je morda ogroženo</translation>
@@ -4757,7 +4750,6 @@
 <translation id="8428634594422941299">Razumem</translation>
 <translation id="8431909052837336408">Spreminjanje kode PIN kartice SIM</translation>
 <translation id="8434480141477525001">Vrata za odpravljanje napak NaCl</translation>
-<translation id="8437331208797669910">Dostop do strani</translation>
 <translation id="843760761634048214">Shrani kreditno kartico</translation>
 <translation id="8438328416656800239">Preklop na pametni brskalnik</translation>
 <translation id="8439506636278576865">Ponudi prevajanje strani v tem jeziku</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 2f21f58..be0df673 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">Мењање корисничког интерфејса обележивача</translation>
 <translation id="2422426094670600218">&lt;неименована&gt;</translation>
 <translation id="2423578206845792524">Са&amp;чувај слику као...</translation>
-<translation id="2424091190911472304">Увек покрећи на <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Укупна величина датотеке</translation>
 <translation id="2428510569851653187">Опишите шта сте радили када је картица отказала</translation>
 <translation id="2431027948063157455">Google помоћник није успео да се учита. Проверите мрежну везу, па покушајте поново.</translation>
@@ -1196,7 +1195,6 @@
 <translation id="2838379631617906747">Инсталира се</translation>
 <translation id="2841837950101800123">Добављач</translation>
 <translation id="2843806747483486897">Промени подразумевано...</translation>
-<translation id="2844111009524261443">Покрећи кликом</translation>
 <translation id="2845382757467349449">Увек приказуј траку са обележивачима</translation>
 <translation id="2847759467426165163">Пребаци на</translation>
 <translation id="284805635805850872">Желите ли да уклоните штетан софтвер?</translation>
@@ -1508,7 +1506,6 @@
 <translation id="3308116878371095290">Овој страници је забрањено да поставља колачиће.</translation>
 <translation id="3308134619352333507">Сакриј дугме</translation>
 <translation id="3308852433423051161">Google помоћник се учитава...</translation>
-<translation id="3309747692199697901">Увек покрећи на свим сајтовима</translation>
 <translation id="3312424061798279731">Омогућени језици</translation>
 <translation id="3313590242757056087">Да бисте подесили које веб-сајтове може да прегледа корисник под надзором, можете да конфигуришете ограничења
     и подешавања тако што ћете посетити <ph name="MANAGEMENT_URL" />.
@@ -1806,7 +1803,6 @@
 <translation id="3759933321830434300">Блокирање делова веб-страница</translation>
 <translation id="3760460896538743390">Провери страницу &amp;позадине</translation>
 <translation id="37613671848467444">Отвори у &amp;прозору без архивирања</translation>
-<translation id="3763401818161139108">Увек покрећи на <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Детаљне информације о верзији</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Комуникација са USB уређајем}one{Комуникација са # USB уређајем}few{Комуникација са # USB уређаја}other{Комуникација са # USB уређаја}}</translation>
 <translation id="3764986667044728669">Није успело пријављивање</translation>
@@ -2267,7 +2263,6 @@
 <translation id="4547992677060857254">Директоријум који сте изабрали садржи осетљиве датотеке. Јесте ли сигурни да желите да одобрите апликацији „$1“ сталан приступ за уписивање за овај директоријум?</translation>
 <translation id="4552031286893852992">Chrome је блокирао огласе на овом сајту јер сајт приказује огласе који ометају.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Приступ страници</translation>
 <translation id="4552678318981539154">Купи још меморијског простора</translation>
 <translation id="4554591392113183336">Верзија спољног додатка је иста или старија од постојећег.</translation>
 <translation id="4555769855065597957">Нови профил</translation>
@@ -3265,7 +3260,6 @@
 <translation id="6080515710685820702">Користите дељени рачунар? Отворите прозор без архивирања.</translation>
 <translation id="6080689532560039067">Проверите системско време</translation>
 <translation id="6082651258230788217">Прикажи на траци с алаткама</translation>
-<translation id="6086814797483779854">Покрећи кликом</translation>
 <translation id="6086846494333236931">Инсталирао је администратор</translation>
 <translation id="6087960857463881712">Задовољно лице</translation>
 <translation id="6089481419520884864">Пречишћавање странице</translation>
@@ -4398,7 +4392,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – Упарен је</translation>
 <translation id="7870730066603611552">Прегледа опције синхронизације после подешавања</translation>
 <translation id="7870790288828963061">Није пронађена ниједна киоск апликација са новијом верзијом. Нема шта да се ажурира. Уклоните USB меморију.</translation>
-<translation id="7874357055309047713">Увек покрећи на свим сајтовима</translation>
 <translation id="7877451762676714207">Непозната грешка сервера. Пробајте поново или контактирајте администратора сервера.</translation>
 <translation id="7877680364634660272">Обилазак</translation>
 <translation id="7878562273885520351">Лозинка је можда компромитована</translation>
@@ -4747,7 +4740,6 @@
 <translation id="8428634594422941299">Важи</translation>
 <translation id="8431909052837336408">Промените PIN SIM картице</translation>
 <translation id="8434480141477525001">NaCl порт за отклањање грешака</translation>
-<translation id="8437331208797669910">Приступ страници</translation>
 <translation id="843760761634048214">Сачувајте кредитну картицу</translation>
 <translation id="8438328416656800239">Пређите на паметан прегледач</translation>
 <translation id="8439506636278576865">Понуди превод страница на овом језику</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 9550903..806325d 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -911,7 +911,6 @@
 <translation id="2413749388954403953">Ändra användargränssnittet för bokmärken</translation>
 <translation id="2422426094670600218">&lt;namnlös&gt;</translation>
 <translation id="2423578206845792524">S&amp;para bild som...</translation>
-<translation id="2424091190911472304">Kör alltid på <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Total filstorlek</translation>
 <translation id="2428510569851653187">Beskriv vad du höll på med när fliken kraschade</translation>
 <translation id="2431027948063157455">Det gick inte att läsa in Google Assistent. Kontrollera nätverksanslutningen och försök igen.</translation>
@@ -1199,7 +1198,6 @@
 <translation id="2838379631617906747">Installerar</translation>
 <translation id="2841837950101800123">Leverantör</translation>
 <translation id="2843806747483486897">Ändra standard ...</translation>
-<translation id="2844111009524261443">Kör vid klickning</translation>
 <translation id="2845382757467349449">Visa alltid bokmärkesfältet</translation>
 <translation id="2847759467426165163">Casta till</translation>
 <translation id="284805635805850872">Vill du ta bort den skadliga programvaran?</translation>
@@ -1511,7 +1509,6 @@
 <translation id="3308116878371095290">Den här sidan har förhindrats att ange cookies.</translation>
 <translation id="3308134619352333507">Dölj knapp</translation>
 <translation id="3308852433423051161">Google Assistent läses in …</translation>
-<translation id="3309747692199697901">Kör alltid på alla webbplatser</translation>
 <translation id="3312424061798279731">Aktiverade språk</translation>
 <translation id="3313590242757056087">Om du vill ange vilka webbplatser som den kontrollerade användaren får besöka, kan du ange begränsningar
     och inställningar genom att besöka <ph name="MANAGEMENT_URL" />.
@@ -1809,7 +1806,6 @@
 <translation id="3759933321830434300">Blockera delar av webbsidor</translation>
 <translation id="3760460896538743390">Kontrollera &amp;bakgrundssida</translation>
 <translation id="37613671848467444">Öppna i &amp;inkognitofönster</translation>
-<translation id="3763401818161139108">Kör alltid på <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Detaljerad versionsinformation</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Kommunicera med en USB-enhet}other{Kommunicera med # USB-enheter}}</translation>
 <translation id="3764986667044728669">Det går inte att registrera</translation>
@@ -2270,7 +2266,6 @@
 <translation id="4547992677060857254">Mappen som du valde innehåller känsliga filer. Vill du bevilja $1 permanent skrivåtkomst till den här mappen?</translation>
 <translation id="4552031286893852992">Chrome blockerar annonser på den här webbplatsen eftersom den brukar visa påträngande annonser.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Sidåtkomst</translation>
 <translation id="4552678318981539154">Köp mer lagringsutrymme</translation>
 <translation id="4554591392113183336">Det externa tillägget har samma eller lägre version än det som redan finns.</translation>
 <translation id="4555769855065597957">Skugga</translation>
@@ -3266,7 +3261,6 @@
 <translation id="6080515710685820702">Delar du datorn med andra? Testa att öppna ett inkognitofönster.</translation>
 <translation id="6080689532560039067">Kontrollera systemtiden</translation>
 <translation id="6082651258230788217">Visa i verktygsfältet</translation>
-<translation id="6086814797483779854">Kör vid klickning</translation>
 <translation id="6086846494333236931">Har installerats av administratören</translation>
 <translation id="6087960857463881712">Entusiastiskt ansikte</translation>
 <translation id="6089481419520884864">Skapa Distiller-sida</translation>
@@ -4405,7 +4399,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – kopplad</translation>
 <translation id="7870730066603611552">Granska synkroniseringsalternativen efter konfigureringen</translation>
 <translation id="7870790288828963061">Inga kioskappar med nyare version hittades. Det finns inget att uppdatera. Ta bort USB-minnet.</translation>
-<translation id="7874357055309047713">Kör alltid på alla webbplatser</translation>
 <translation id="7877451762676714207">Okänt serverfel. Försök igen eller kontakta serveradministratören.</translation>
 <translation id="7877680364634660272">Rundtur</translation>
 <translation id="7878562273885520351">Lösenordet kan vara utsatt för risk</translation>
@@ -4754,7 +4747,6 @@
 <translation id="8428634594422941299">Jag förstår</translation>
 <translation id="8431909052837336408">Ändra SIM-kortets pinkod</translation>
 <translation id="8434480141477525001">Felsökningsport för Native Client</translation>
-<translation id="8437331208797669910">Sidåtkomst</translation>
 <translation id="843760761634048214">Spara kreditkort</translation>
 <translation id="8438328416656800239">Byt till en smart webbläsare</translation>
 <translation id="8439506636278576865">Erbjud att översätta sidor på detta språk</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index eb53159..4ee64ce6 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -910,7 +910,6 @@
 <translation id="2413749388954403953">Badilisha kiolesura cha alamisho cha mutumiaji</translation>
 <translation id="2422426094670600218">&lt;isiyokuwa na jina&gt;</translation>
 <translation id="2423578206845792524">Hifadhi picha kama...</translation>
-<translation id="2424091190911472304">Tekeleza kwenye <ph name="ORIGIN" /> kila wakati</translation>
 <translation id="2425665904502185219">Jumla ya ukubwa wa faili</translation>
 <translation id="2428510569851653187">Eleza shughuli ulizokuwa ukifanya kichupo kilipoacha kufanya kazi</translation>
 <translation id="2431027948063157455">Programu ya Google Mratibu haijapakiwa, tafadhali angalia muunganisho wako wa mtandao na ujaribu tena.</translation>
@@ -1197,7 +1196,6 @@
 <translation id="2838379631617906747">Inasakinisha</translation>
 <translation id="2841837950101800123">Mtoa huduma</translation>
 <translation id="2843806747483486897">Badilisha chaguo-msingi...</translation>
-<translation id="2844111009524261443">Tekeleza kwa kubofya</translation>
 <translation id="2845382757467349449">Onyesha Upau wa Alamisho Kila Wakati</translation>
 <translation id="2847759467426165163">Tuma kwenye</translation>
 <translation id="284805635805850872">Ungependa kundoa programu hatari?</translation>
@@ -1509,7 +1507,6 @@
 <translation id="3308116878371095290">Ukurasa huu ulizuiwa usiweke vidakuzi.</translation>
 <translation id="3308134619352333507">Ficha Kitufe</translation>
 <translation id="3308852433423051161">Inapakia programu ya Google Mratibu...</translation>
-<translation id="3309747692199697901">Tekeleza kwenye Tovuti Zote Kila wakati</translation>
 <translation id="3312424061798279731">Lugha zinazotumika</translation>
 <translation id="3313590242757056087">Ili kubainisha tovuti ambayo mtumiaji anayesimamiwa anaweza kutazama, unaweza kusanidi vikwazo na mipangilio kwa kutembelea <ph name="MANAGEMENT_URL" />. Iwapo hutabadilisha mipangilio hii ya msingi, <ph name="USER_DISPLAY_NAME" /> anaweza kuvinjari tovuti zote kwenye mtandao.</translation>
 <translation id="3313622045786997898">Thamani ya Sahihi ya Cheti</translation>
@@ -1804,7 +1801,6 @@
 <translation id="3759933321830434300">Zuia sehemu za kurasa za mtandao</translation>
 <translation id="3760460896538743390">Kagua Ukurasa wa Mandharinyuma</translation>
 <translation id="37613671848467444">Fungua katika &amp;Dirisha Chini kwa chini</translation>
-<translation id="3763401818161139108">Tekeleza kwenye <ph name="ORIGIN" /> kila wakati</translation>
 <translation id="3764314093345384080">Maelezo ya kina ya muundo</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Wasiliana na kifaa cha USB}other{Wasiliana na vifaa # vya USB}}</translation>
 <translation id="3764986667044728669">Imeshindwa kujiandikisha</translation>
@@ -2263,7 +2259,6 @@
 <translation id="4547992677060857254">Folda uliyochagua ina faili nyeti. Je, una uhakika unataka kutoa uwezo wa kudumu wa kufikia kuandika folda hii kwa "$1"?</translation>
 <translation id="4552031286893852992">Chrome imezuia matangazo kwenye tovuti hii kwa sababu inaonyesha matangazo yanayokatiza matumizi.</translation>
 <translation id="4552089082226364758">Mmweko</translation>
-<translation id="4552495056028768700">Idhini ya Kufikia Ukurasa</translation>
 <translation id="4552678318981539154">Nunua hifadhi zaidi</translation>
 <translation id="4554591392113183336">Kiendelezi cha nje ni sawa na au toleo la chini likilinganishwa na toleo lililopo.</translation>
 <translation id="4555769855065597957">Kivuli</translation>
@@ -3259,7 +3254,6 @@
 <translation id="6080515710685820702">Je, unatumia kompyuta na wengine? Jaribu kufungua dirisha fiche.</translation>
 <translation id="6080689532560039067">Angalia saa ya mfumo wako</translation>
 <translation id="6082651258230788217">Onyesha katika upau wa vidhibiti</translation>
-<translation id="6086814797483779854">Tekeleza kwa Kubofya</translation>
 <translation id="6086846494333236931">Kiendelezi kimesakinishwa na msimamizi wako</translation>
 <translation id="6087960857463881712">Uso wa kuvutia</translation>
 <translation id="6089481419520884864">Tenganisha ukurasa</translation>
@@ -4399,7 +4393,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Imeoanishwa</translation>
 <translation id="7870730066603611552">Kagua chaguo za usawazishaji baada ya kuweka mipangilio</translation>
 <translation id="7870790288828963061">Hamna programu za Skrini Nzima zilizo na toleo jipya zaidi zimepatikana. Hakuna cha kusasisha. Tafadhali ondoa hifadhi ya USB.</translation>
-<translation id="7874357055309047713">Tekeleza kwenye tovuti zote kila wakati</translation>
 <translation id="7877451762676714207">Hitilafu ya seva isiyojulikana. Tafadhali jaribu tena, au uwasiliane na msimamizi wa seva.</translation>
 <translation id="7877680364634660272">Ziara</translation>
 <translation id="7878562273885520351">Huenda nenosiri lako limetambulika</translation>
@@ -4749,7 +4742,6 @@
 <translation id="8428634594422941299">Nimeelewa</translation>
 <translation id="8431909052837336408">Badilisha PIN ya SIM</translation>
 <translation id="8434480141477525001">Lango la Kutatua la NaCl</translation>
-<translation id="8437331208797669910">Idhini ya kufikia ukurasa</translation>
 <translation id="843760761634048214">Hifadhi kadi ya mikopo</translation>
 <translation id="8438328416656800239">Badilisha ili utumie kivinjari mahiri</translation>
 <translation id="8439506636278576865">Jitolee kutafsiri kurasa katika lugha hii</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index be7e9bc2..1671bb9 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">புக்மார்க்குகள் பயனர் இடைமுகத்தை மாற்றலாம்</translation>
 <translation id="2422426094670600218">&lt;பெயரிடப்படாதது&gt;</translation>
 <translation id="2423578206845792524">படத்தை இவ்வாறு சே&amp;மி...</translation>
-<translation id="2424091190911472304">எப்போதும் <ph name="ORIGIN" /> இல் இயக்கு</translation>
 <translation id="2425665904502185219">மொத்தக் கோப்பின் அளவு</translation>
 <translation id="2428510569851653187">தாவல் சிதைந்த போது, நீங்கள் என்ன செய்து கொண்டிருந்தீர்கள் என்பதை விளக்கவும்</translation>
 <translation id="2431027948063157455">Google அசிஸ்டண்ட்டை ஏற்ற முடியவில்லை. உங்கள் நெட்வொர்க் இணைப்பைச் சரிபார்த்து, மீண்டும் முயலவும்.</translation>
@@ -1201,7 +1200,6 @@
 <translation id="2838379631617906747">நிறுவுகிறது</translation>
 <translation id="2841837950101800123">வழங்குநர்</translation>
 <translation id="2843806747483486897">இயல்புநிலைக்கு மாற்று...</translation>
-<translation id="2844111009524261443">கிளிக் செய்யும் போது இயக்கு</translation>
 <translation id="2845382757467349449">எப்பொழுதும் புக்மார்க்ஸ் பட்டியைக் காண்பி</translation>
 <translation id="2847759467426165163">இதற்கு அனுப்பு</translation>
 <translation id="284805635805850872">தீங்கிழைக்கும் மென்பொருளை அகற்றவா?</translation>
@@ -1513,7 +1511,6 @@
 <translation id="3308116878371095290">இந்தப் பக்கம் குக்கீகளை அமைப்பதிலிருந்து தடுக்கப்பட்டது.</translation>
 <translation id="3308134619352333507">பொத்தானை மறை</translation>
 <translation id="3308852433423051161">Google அசிஸ்டண்ட்டை ஏற்றுகிறது...</translation>
-<translation id="3309747692199697901">எப்போதும் எல்லா தளங்களிலும் இயக்கு</translation>
 <translation id="3312424061798279731">இயக்கத்திலுள்ள மொழிகள்</translation>
 <translation id="3313590242757056087">எந்த இணையதளங்களைக் கண்காணிக்கப்படும் பயனர் பார்க்கலாம் என்பதை அமைக்க, <ph name="MANAGEMENT_URL" /> ஐப் பார்வையிடுவதன் மூலம் நீங்கள் கட்டுப்பாடுகள் மற்றும் அமைப்புகளை உள்ளமைக்கலாம்.
     நீங்கள் இயல்பு அமைப்புகளை மாற்றவில்லை எனில், 
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">இணைய பக்கங்களின் பகுதியைத் தடுக்கலாம்</translation>
 <translation id="3760460896538743390">&amp;பின்புலப் பக்கத்தை ஆய்வுசெய்</translation>
 <translation id="37613671848467444">&amp;மறைநிலை சாளரத்தில் திற</translation>
-<translation id="3763401818161139108">எப்போதும் <ph name="ORIGIN" /> இல் இயக்கு</translation>
 <translation id="3764314093345384080">விரிவான பதிப்புத் தகவல்</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{USB சாதனத்துடன் தொடர்புகொள்ளும்}other{# USB சாதனங்களுடன் தொடர்புகொள்ளும்}}</translation>
 <translation id="3764986667044728669">பதிவுசெய்ய முடியவில்லை</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">நீங்கள் தேர்ந்தெடுத்த கோப்புறையில் முக்கியமான கோப்புகள் உள்ளன. இந்தக் கோப்புறைக்கு "$1" நிரந்தர எழுதும் அணுகலை நிச்சயமாக வழங்கயுள்ளீர்களா?</translation>
 <translation id="4552031286893852992">இந்தத் தளத்தில் குறுக்கிடும் விளம்பரங்கள் காட்டப்படும் என்பதால், Chrome இந்தத் தளத்தில் விளம்பரங்களைத் தடுத்துள்ளது.</translation>
 <translation id="4552089082226364758">ஃப்ளாஷ்</translation>
-<translation id="4552495056028768700">பக்க அணுகல்</translation>
 <translation id="4552678318981539154">கூடுதல் சேமிப்பிடத்தை வாங்கு</translation>
 <translation id="4554591392113183336">ஏற்கனவே இருப்பதுடன் ஒப்பிடும் போது வெளிப்புற நீட்டிப்பு ஒரே அல்லது குறைவான பதிப்பைக் கொண்டுள்ளது.</translation>
 <translation id="4555769855065597957">நிழல்</translation>
@@ -3268,7 +3263,6 @@
 <translation id="6080515710685820702">பலரும் பயன்படுத்தும் கணினியைப் பயன்படுத்துகிறீர்களா? மறைநிலைச் சாளரத்தைப் பயன்படுத்திப் பார்க்கவும்.</translation>
 <translation id="6080689532560039067">கணினி நேரத்தைச் சரிபார்க்கவும்</translation>
 <translation id="6082651258230788217">கருவிப்பட்டியில் காட்டு</translation>
-<translation id="6086814797483779854">கிளிக் செய்யும் போது இயக்கு</translation>
 <translation id="6086846494333236931">உங்கள் நிர்வாகி நிறுவினார்</translation>
 <translation id="6087960857463881712">அழகான முகம்</translation>
 <translation id="6089481419520884864">பக்கத்தைப் பிரி</translation>
@@ -4400,7 +4394,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - இணைக்கப்பட்டது</translation>
 <translation id="7870730066603611552">அமைவைத் தொடர்ந்து, ஒத்திசைவு விருப்பங்களை மதிப்பாய்வு செய்யவும்</translation>
 <translation id="7870790288828963061">புதிய பதிப்பு கொண்ட கியாஸ்க் பயன்பாடுகள் எதுவும் காணப்படவில்லை. புதுப்பிக்க எதுவுமில்லை. USB சாதனத்தை அகற்றவும்.</translation>
-<translation id="7874357055309047713">எப்போதும் எல்லா தளங்களிலும் இயக்கு</translation>
 <translation id="7877451762676714207">அறியாத சேவையகப் பிழை. மீண்டும் முயலவும் அல்லது சேவையக நிர்வாகியை தொடர்பு கொள்ளவும்.</translation>
 <translation id="7877680364634660272">உலா</translation>
 <translation id="7878562273885520351">உங்கள் கடவுச்சொல் திருடப்பட்டிருக்கலாம்</translation>
@@ -4749,7 +4742,6 @@
 <translation id="8428634594422941299">நிராகரி</translation>
 <translation id="8431909052837336408">சிம்மின் பின்னை மாற்று</translation>
 <translation id="8434480141477525001">NaCl பிழைத்திருத்தப் போர்ட்</translation>
-<translation id="8437331208797669910">பக்க அணுகல்</translation>
 <translation id="843760761634048214">கிரெடிட் கார்டைச் சேமி</translation>
 <translation id="8438328416656800239">ஸ்மார்ட்டான உலாவலுக்கு மாறவும்</translation>
 <translation id="8439506636278576865">பக்கங்களை இந்த மொழியில் மொழிபெயர்ப்பதற்கான அனுமதி</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index d79f1383a..9335275 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">బుక్‌మార్క్‌ల వినియోగదారు ఇంటర్‌ఫేస్‌ను మార్చడం</translation>
 <translation id="2422426094670600218">&lt;పేరులేని&gt;</translation>
 <translation id="2423578206845792524">చిత్రాన్ని ఇలా సే&amp;వ్ చెయ్యి...</translation>
-<translation id="2424091190911472304">ఎల్లప్పుడూ <ph name="ORIGIN" />లో అమలు చేయి</translation>
 <translation id="2425665904502185219">మొత్తం ఫైల్ పరిమాణం</translation>
 <translation id="2428510569851653187">ట్యాబ్ క్రాష్ అయిన సమయంలో మీరు ఏం చేస్తున్నారో వివరించండి</translation>
 <translation id="2431027948063157455">Google సహాయకం లోడ్ చేయడం సాధ్యపడలేదు, దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను తనిఖీ చేసుకుని మళ్లీ ప్రయత్నించండి.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">ఇన్‌స్టాల్ చేస్తోంది</translation>
 <translation id="2841837950101800123">ప్రదాత</translation>
 <translation id="2843806747483486897">డిఫాల్ట్‌ను మార్చు...</translation>
-<translation id="2844111009524261443">క్లిక్ చేసినప్పుడు అమలు చేయి</translation>
 <translation id="2845382757467349449">ఎల్లప్పుడూ బుక్‌మార్క్‌ల బార్‌ను చూపు</translation>
 <translation id="2847759467426165163">దీనికి ప్రసారం చేయండి</translation>
 <translation id="284805635805850872">హానికరమైన సాఫ్ట్‌వేర్‌ని తీసివేయాలా?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">కుక్కీలను సెట్ చేయడం నుండి ఈ పేజీ నిరోధించబడింది.</translation>
 <translation id="3308134619352333507">బటన్‌ని దాచు</translation>
 <translation id="3308852433423051161">Google సహాయకం లోడ్ అవుతోంది...</translation>
-<translation id="3309747692199697901">ఎల్లప్పుడూ అన్ని సైట్‌ల్లో అమలు చేయి</translation>
 <translation id="3312424061798279731">ప్రారంభించబడిన భాషలు</translation>
 <translation id="3313590242757056087">పర్యవేక్షించబడే వినియోగదారు వీక్షించగల వెబ్‌సైట్‌లను సెట్ చేయడానికి, మీరు <ph name="MANAGEMENT_URL" />ను సందర్శించి
     పరిమితులు మరియు సెట్టింగ్‌లను కాన్ఫిగర్ చేయవచ్చు.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">వెబ్ పేజీల్లో భాగాలను బ్లాక్ చేయండి</translation>
 <translation id="3760460896538743390">&amp;నేపథ్య పేజీని పర్యవేక్షించండి</translation>
 <translation id="37613671848467444">&amp;ఒక అజ్ఞాత విండోలో తెరువు</translation>
-<translation id="3763401818161139108">ఎల్లప్పుడూ <ph name="ORIGIN" />లో అమలు చేయి</translation>
 <translation id="3764314093345384080">వివరణాత్మక బిల్డ్ సమాచారం</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{USB పరికరంతో కమ్యూనికేట్ చేయండి}other{# USB పరికరాలతో కమ్యూనికేట్ చేయండి}}</translation>
 <translation id="3764986667044728669">నమోదు చేయడం సాధ్యపడలేదు</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">మీరు ఎంచుకున్న ఫోల్డర్‌లో ముఖ్యమైన ఫైల్‌లు ఉన్నాయి. మీరు ఖచ్చితంగా ఈ ఫోల్డర్ కోసం "$1"కు శాశ్వతంగా వ్రాయగల ప్రాప్యతను మంజూరు చేయాలనుకుంటున్నారా?</translation>
 <translation id="4552031286893852992">ఈ సైట్ అనుచితమైన ప్రకటనలను చూపడానికి ప్రయత్నించిన కారణంగా ఈ సైట్‌లో ప్రకటనలను Chrome బ్లాక్ చేసింది.</translation>
 <translation id="4552089082226364758">ఫ్లాష్</translation>
-<translation id="4552495056028768700">పేజీ ప్రాప్యత</translation>
 <translation id="4552678318981539154">మరింత నిల్వని కొనుగోలు చేయండి</translation>
 <translation id="4554591392113183336">బాహ్య పొడిగింపు ప్రస్తుతం ఉన్న సంస్కరణతో పోలిస్తే అదేలాంటి సంస్కరణ లేదా తక్కువ సంస్కరణ.</translation>
 <translation id="4555769855065597957">నీడ</translation>
@@ -3267,7 +3262,6 @@
 <translation id="6080515710685820702">షేర్డ్ కంప్యూటర్‌ని ఉపయోగిస్తున్నారా? అజ్ఞాత విండోలో తెరవండి.</translation>
 <translation id="6080689532560039067">మీ సిస్టమ్ సమయాన్ని తనిఖీ చేయండి</translation>
 <translation id="6082651258230788217">సాధనపట్టీలో చూపండి</translation>
-<translation id="6086814797483779854">క్లిక్ చేసినప్పుడు అమలు చేయి</translation>
 <translation id="6086846494333236931">మీ నిర్వాహకుడు ఇన్‌స్టాల్ చేసారు</translation>
 <translation id="6087960857463881712">అద్భుతమైన ముఖం</translation>
 <translation id="6089481419520884864">పేజీ డిస్టిల్ చేయి</translation>
@@ -4406,7 +4400,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - జత చేయబడింది</translation>
 <translation id="7870730066603611552">సెటప్ చేసిన తర్వాత సమకాలీకరణ ఎంపికలను సమీక్షించండి</translation>
 <translation id="7870790288828963061">సరికొత్త సంస్కరణ అందుబాటులో ఉన్న కియోస్క్ అనువర్తనాలేవీ కనుగొనబడలేదు. నవీకరించడానికి ఏదీ లేదు. దయచేసి USB స్టిక్‌ను తీసివేయండి.</translation>
-<translation id="7874357055309047713">ఎల్లప్పుడూ అన్ని సైట్‌ల్లో అమలు చేయి</translation>
 <translation id="7877451762676714207">తెలియని సర్వర్ లోపం. దయచేసి మళ్లీ ప్రయత్నించండి లేదా సర్వర్ నిర్వాహకుడిని సంప్రదించండి.</translation>
 <translation id="7877680364634660272">పర్యటన</translation>
 <translation id="7878562273885520351">మీ పాస్‌వర్డ్ ఎవరికైనా తెలిసిపోయి ఉండవచ్చు</translation>
@@ -4753,7 +4746,6 @@
 <translation id="8428634594422941299">అర్థమైంది</translation>
 <translation id="8431909052837336408">SIM PINను మార్చండి</translation>
 <translation id="8434480141477525001">NaCl డీబగ్ పోర్ట్</translation>
-<translation id="8437331208797669910">పేజీ ప్రాప్యత</translation>
 <translation id="843760761634048214">క్రెడిట్ కార్డ్‌ను సేవ్ చేయి</translation>
 <translation id="8438328416656800239">స్మార్ట్ బ్రౌజర్‌కు మారండి</translation>
 <translation id="8439506636278576865">ఈ భాషలో పేజీలకు అనువాదం అందించు</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 88c15e0e..b35de72 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">เปลี่ยนอินเทอร์เฟซผู้ใช้ของบุ๊กมาร์ก</translation>
 <translation id="2422426094670600218">&lt;ไม่มีชื่อ&gt;</translation>
 <translation id="2423578206845792524">&amp;บันทึกรูปภาพเป็น...</translation>
-<translation id="2424091190911472304">เรียกใช้บน <ph name="ORIGIN" /> เสมอ</translation>
 <translation id="2425665904502185219">ขนาดโดยรวมของไฟล์</translation>
 <translation id="2428510569851653187">อธิบายว่าคุณกำลังทำอะไรเมื่อแท็บขัดข้อง</translation>
 <translation id="2431027948063157455">โหลด Google Assistant ไม่ได้ โปรดตรวจสอบการเชื่อมต่อเครือข่ายและลองอีกครั้ง</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">การติดตั้ง</translation>
 <translation id="2841837950101800123">ผู้ให้บริการ</translation>
 <translation id="2843806747483486897">เปลี่ยนค่าเริ่มต้น...</translation>
-<translation id="2844111009524261443">เรียกใช้เมื่อคลิก</translation>
 <translation id="2845382757467349449">แสดงแถบบุ๊กมาร์กเสมอ</translation>
 <translation id="2847759467426165163">ส่งไปยัง</translation>
 <translation id="284805635805850872">นำซอฟต์แวร์อันตรายออกไหม</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">หน้าเว็บนี้ไม่อนุญาตให้มีการตั้งค่าคุกกี้</translation>
 <translation id="3308134619352333507">ซ่อนปุ่ม</translation>
 <translation id="3308852433423051161">กำลังโหลด Google Assistant...</translation>
-<translation id="3309747692199697901">เรียกใช้บนทุกเว็บไซต์เสมอ</translation>
 <translation id="3312424061798279731">ภาษาที่เปิดใช้</translation>
 <translation id="3313590242757056087">ในการตั้งค่าว่าผู้ใช้ภายใต้การดูแลสามารถดูเว็บไซต์ใดได้บ้าง คุณสามารถกำหนดค่าข้อจำกัด
     และการตั้งค่าโดยไปที่ <ph name="MANAGEMENT_URL" />
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">บล็อกส่วนต่างๆ ของหน้าเว็บ</translation>
 <translation id="3760460896538743390">ตรวจสอบ&amp;หน้าพื้นหลัง</translation>
 <translation id="37613671848467444">เปิดใน&amp;หน้าต่างที่ไม่ระบุตัวตน</translation>
-<translation id="3763401818161139108">เรียกใช้บน <ph name="ORIGIN" /> เสมอ</translation>
 <translation id="3764314093345384080">ข้อมูลบิวด์โดยละเอียด</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{สื่อสารกับอุปกรณ์ USB 1 เครื่อง}other{สื่อสารกับอุปกรณ์ USB # เครื่อง}}</translation>
 <translation id="3764986667044728669">ไม่สามารถลงทะเบียน</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">โฟลเดอร์ที่คุณเลือกมีไฟล์ที่ละเอียดอ่อน คุณต้องการให้สิทธิ์การเข้าถึงในการเขียนโฟลเดอร์นี้อย่างถาวรแก่ "$1" ไหม</translation>
 <translation id="4552031286893852992">Chrome บล็อกโฆษณาในไซต์นี้เพราะไซต์มักแสดงโฆษณาที่แทรก</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">การเข้าถึงหน้าเว็บ</translation>
 <translation id="4552678318981539154">ซื้อพื้นที่เก็บข้อมูลเพิ่ม</translation>
 <translation id="4554591392113183336">ส่วนขยายภายนอกเป็นเวอร์ชันเดียวกันหรือต่ำกว่าเมื่อเปรียบเทียบกับส่วนขยายที่มีอยู่</translation>
 <translation id="4555769855065597957">เงา</translation>
@@ -3267,7 +3262,6 @@
 <translation id="6080515710685820702">หากมีการใช้คอมพิวเตอร์ร่วมกัน ให้ลองเปิดหน้าต่างที่ไม่ระบุตัวตน</translation>
 <translation id="6080689532560039067">ตรวจสอบเวลาระบบของคุณ</translation>
 <translation id="6082651258230788217">แสดงในแถบเครื่องมือ</translation>
-<translation id="6086814797483779854">เรียกใช้เมื่อคลิก</translation>
 <translation id="6086846494333236931">ติดตั้งโดยผู้ดูแลระบบ</translation>
 <translation id="6087960857463881712">ใบหน้าเจ๋ง</translation>
 <translation id="6089481419520884864">สกัดหน้า</translation>
@@ -4407,7 +4401,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - จับคู่แล้ว</translation>
 <translation id="7870730066603611552">ตรวจสอบตัวเลือกการซิงค์หลังการตั้งค่า</translation>
 <translation id="7870790288828963061">ไม่พบแอปคีออสก์เวอร์ชันใหม่กว่า ไม่มีรายการที่จะอัปเดต โปรดนำ USB สติ๊กออก</translation>
-<translation id="7874357055309047713">เรียกใช้บนทุกเว็บไซต์เสมอ</translation>
 <translation id="7877451762676714207">ข้อผิดพลาดของเซิร์ฟเวอร์ที่ไม่รู้จัก โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบเซิร์ฟเวอร์</translation>
 <translation id="7877680364634660272">ทัวร์ชม</translation>
 <translation id="7878562273885520351">รหัสผ่านของคุณอาจถูกขโมยได้</translation>
@@ -4756,7 +4749,6 @@
 <translation id="8428634594422941299">รับทราบ</translation>
 <translation id="8431909052837336408">เปลี่ยน PIN ของซิม</translation>
 <translation id="8434480141477525001">พอร์ตแก้ปัญหา NaCl</translation>
-<translation id="8437331208797669910">การเข้าถึงหน้าเว็บ</translation>
 <translation id="843760761634048214">บันทึกบัตรเครดิต</translation>
 <translation id="8438328416656800239">เปลี่ยนเป็นเบราว์เซอร์ที่มีประสิทธิภาพ</translation>
 <translation id="8439506636278576865">เสนอที่จะแปลหน้าต่างๆ ที่เป็นภาษานี้</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index d01833e..41914ac7 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Yer işaretleri kullanıcı arayüzünü değiştirme</translation>
 <translation id="2422426094670600218">&lt;adsız&gt;</translation>
 <translation id="2423578206845792524">Res&amp;mi farklı kaydet...</translation>
-<translation id="2424091190911472304"><ph name="ORIGIN" /> sitesinde her zaman çalıştır</translation>
 <translation id="2425665904502185219">Toplam dosya boyutu</translation>
 <translation id="2428510569851653187">Sekme kilitlendiği sırada ne yaptığınızı açıklayın</translation>
 <translation id="2431027948063157455">Google Asistan yüklenemedi, lütfen ağ bağlantınızı kontrol edin ve tekrar deneyin.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">Yükleme</translation>
 <translation id="2841837950101800123">Sağlayıcı</translation>
 <translation id="2843806747483486897">Varsayılanı değiştir...</translation>
-<translation id="2844111009524261443">Tıklamada çalıştır</translation>
 <translation id="2845382757467349449">Yer İşareti Çubuğunu Her Zaman Göster</translation>
 <translation id="2847759467426165163">Şuraya yayınla</translation>
 <translation id="284805635805850872">Zararlı yazılım kaldırılsın mı?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Bu sayfanın çerezleri ayarlaması engellenmiştir.</translation>
 <translation id="3308134619352333507">Düğmeyi Gizle</translation>
 <translation id="3308852433423051161">Google Asistan yükleniyor...</translation>
-<translation id="3309747692199697901">Tüm sitelerde her zaman çalıştır</translation>
 <translation id="3312424061798279731">Etkin diller</translation>
 <translation id="3313590242757056087">Denetlenen kullanıcının hangi web sitelerini görebileceğini belirlemek için kısıtlamaları
     ve ayarları yapılandırmak üzere <ph name="MANAGEMENT_URL" /> adresini ziyaret edebilirsiniz.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Web sayfalarının parçalarını engelleme</translation>
 <translation id="3760460896538743390">&amp;Arka Plan Sayfasını İncele</translation>
 <translation id="37613671848467444">&amp;Gizli Pencerede Aç</translation>
-<translation id="3763401818161139108"><ph name="ORIGIN" /> sitesinde her zaman çalıştır</translation>
 <translation id="3764314093345384080">Ayrıntılı derleme bilgileri</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Bir USB cihazla iletişim kurma}other{# USB cihazla iletişim kurma}}</translation>
 <translation id="3764986667044728669">Kayıt yapılamıyor</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">Seçtiğiniz klasör hassas dosyalar içeriyor. "$1" için bu klasöre kalıcı yazma erişimi vermek istediğinizden emin misiniz?</translation>
 <translation id="4552031286893852992">Bu site, araya giren reklamlar gösterme eğiliminde olduğu için Chrome bu sitede reklamları engelledi.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Sayfa Erişimi</translation>
 <translation id="4552678318981539154">Daha fazla depolama alanı satın alın</translation>
 <translation id="4554591392113183336">Harici uzantı, mevcut bir uzantıyla aynı veya daha eski sürümde.</translation>
 <translation id="4555769855065597957">Gölge</translation>
@@ -3268,7 +3263,6 @@
 <translation id="6080515710685820702">Paylaşılan bir bilgisayar mı kullanıyorsunuz? Gizli pencere açmayı deneyin.</translation>
 <translation id="6080689532560039067">Sistem saatinizi kontrol edin</translation>
 <translation id="6082651258230788217">Araç çubuğunda göster</translation>
-<translation id="6086814797483779854">Tıklandığında çalıştır</translation>
 <translation id="6086846494333236931">Yöneticiniz tarafından yüklendi</translation>
 <translation id="6087960857463881712">Çok beğenen</translation>
 <translation id="6089481419520884864">Sayfayı ayrıştır</translation>
@@ -4408,7 +4402,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Eşlendi</translation>
 <translation id="7870730066603611552">Kurulumdan sonra senkronizasyon seçeneklerini inceleyin</translation>
 <translation id="7870790288828963061">Daha yeni bir sürüme sahip herhangi bir Kiosk uygulaması bulunamadı. Güncellenecek hiçbir şey yok. Lütfen USB çubuğunu çıkarın.</translation>
-<translation id="7874357055309047713">Tüm sitelerde her zaman çalıştır</translation>
 <translation id="7877451762676714207">Bilinmeyen sunucu hatası. Lütfen tekrar deneyin veya sunucu yöneticinize başvurun.</translation>
 <translation id="7877680364634660272">Tur</translation>
 <translation id="7878562273885520351">Şifrenizin güvenliği ihlal edilmiş olabilir</translation>
@@ -4757,7 +4750,6 @@
 <translation id="8428634594422941299">Anladım!</translation>
 <translation id="8431909052837336408">SIM PIN Kodunu Değiştir</translation>
 <translation id="8434480141477525001">NaCl Hata Ayıklama Bağlantı Noktası</translation>
-<translation id="8437331208797669910">Sayfa erişimi</translation>
 <translation id="843760761634048214">Kredi kartını kaydedin</translation>
 <translation id="8438328416656800239">Akıllı bir tarayıcıya geç</translation>
 <translation id="8439506636278576865">Bu dildeki sayfaları çevirmeyi öner</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 111bb082..91b508c3 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">Змінювати інтерфейс користувача для закладок</translation>
 <translation id="2422426094670600218">&lt;без назви&gt;</translation>
 <translation id="2423578206845792524">Збер&amp;егти зображення як...</translation>
-<translation id="2424091190911472304">Завжди запускати на <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Загальний розмір файлу</translation>
 <translation id="2428510569851653187">Опишіть, що ви робили, коли вкладка аварійно завершила роботу</translation>
 <translation id="2431027948063157455">Не вдалося завантажити Google Асистент. Перевірте з’єднання з мережею та повторіть спробу.</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">Встановлення</translation>
 <translation id="2841837950101800123">Постачальник</translation>
 <translation id="2843806747483486897">Змінити дію за умовчанням...</translation>
-<translation id="2844111009524261443">Запускати після кліку</translation>
 <translation id="2845382757467349449">Завжди показувати панель закладок</translation>
 <translation id="2847759467426165163">Транслювати на</translation>
 <translation id="284805635805850872">Вилучити зловмисне програмне забезпечення?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">Цій сторінці було відмовлено в збереженні файлів cookie.</translation>
 <translation id="3308134619352333507">Кнопка "Сховати"</translation>
 <translation id="3308852433423051161">Завантажується Google Асистент…</translation>
-<translation id="3309747692199697901">Завжди запускати на всіх сайтах</translation>
 <translation id="3312424061798279731">Активні мови</translation>
 <translation id="3313590242757056087">Щоб налаштувати веб-сайти, які може переглядати контрольований користувач, можна встановити обмеження
     та налаштування, перейшовши на сторінку <ph name="MANAGEMENT_URL" />.
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">Блокувати частини веб-сторінок</translation>
 <translation id="3760460896538743390">Перевірити &amp;фонову сторінку</translation>
 <translation id="37613671848467444">Відкрити в &amp;анонімному вікні</translation>
-<translation id="3763401818161139108">Завжди запускати на <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Докладна інформація про складання</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Обмінюватися даними з пристроєм USB}one{Обмінюватися даними з # пристроєм USB}few{Обмінюватися даними з # пристроями USB}many{Обмінюватися даними з # пристроями USB}other{Обмінюватися даними з # пристрою USB}}</translation>
 <translation id="3764986667044728669">Помилка реєстрації</translation>
@@ -2271,7 +2267,6 @@
 <translation id="4547992677060857254">У вибраній папці містяться файли з приватною інформацією. Справді надати програмі "$1" постійний доступ для писання в цю папку?</translation>
 <translation id="4552031286893852992">Chrome заблокував показ реклами на цьому сайті, оскільки він часто показує нав’язливі оголошення.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Доступ до сторінки</translation>
 <translation id="4552678318981539154">Придбати більше об’єму пам’яті</translation>
 <translation id="4554591392113183336">Зовнішнє розширення має таку саму або нижчу версію порівняно з наявним.</translation>
 <translation id="4555769855065597957">Shadow</translation>
@@ -3267,7 +3262,6 @@
 <translation id="6080515710685820702">Користуєтеся комп’ютером спільно з іншими? Відкрийте вікно в режимі анонімного перегляду.</translation>
 <translation id="6080689532560039067">Перевірте час системи</translation>
 <translation id="6082651258230788217">Показати на панелі інструментів</translation>
-<translation id="6086814797483779854">Запускати після кліку</translation>
 <translation id="6086846494333236931">Установив адміністратор</translation>
 <translation id="6087960857463881712">Гарне обличчя</translation>
 <translation id="6089481419520884864">Сторінка перетворення</translation>
@@ -4407,7 +4401,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" />: підключено</translation>
 <translation id="7870730066603611552">Після налаштування перевірте параметри синхронізації</translation>
 <translation id="7870790288828963061">Новіші версії додатків-терміналів не знайдено. Помилка оновлення. Витягніть носій USB.</translation>
-<translation id="7874357055309047713">Завжди запускати на всіх сайтах</translation>
 <translation id="7877451762676714207">Невідома помилка сервера. Повторіть спробу чи зв’яжіться з адміністратором сервера.</translation>
 <translation id="7877680364634660272">Огляд</translation>
 <translation id="7878562273885520351">Ваш пароль можуть зламати</translation>
@@ -4756,7 +4749,6 @@
 <translation id="8428634594422941299">Зрозуміло</translation>
 <translation id="8431909052837336408">Змінити PIN-код SIM-карти</translation>
 <translation id="8434480141477525001">Порт налагодження NaCl</translation>
-<translation id="8437331208797669910">Доступ до сторінки</translation>
 <translation id="843760761634048214">Зберегти дані кредитної картки</translation>
 <translation id="8438328416656800239">Виберіть розумний веб-переглядач</translation>
 <translation id="8439506636278576865">Пропонувати переклад сторінок цією мовою</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index c045ec99..bc46b78 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -913,7 +913,6 @@
 <translation id="2413749388954403953">Thay đổi giao diện người dùng của dấu trang</translation>
 <translation id="2422426094670600218">&lt;không có tên&gt;</translation>
 <translation id="2423578206845792524">Lưu &amp;hình ảnh thành...</translation>
-<translation id="2424091190911472304">Luôn chạy trên <ph name="ORIGIN" /></translation>
 <translation id="2425665904502185219">Tổng kích thước tệp</translation>
 <translation id="2428510569851653187">Mô tả những việc bạn đang làm khi tab gặp lỗi</translation>
 <translation id="2431027948063157455">Không thể tải Trợ lý Google, vui lòng kiểm tra kết nối mạng của bạn rồi thử lại.</translation>
@@ -1201,7 +1200,6 @@
 <translation id="2838379631617906747">Đang cài đặt</translation>
 <translation id="2841837950101800123">Nhà cung cấp</translation>
 <translation id="2843806747483486897">Thay đổi mặc định...</translation>
-<translation id="2844111009524261443">Chạy khi nhấp chuột</translation>
 <translation id="2845382757467349449">Luôn Hiển thị Thanh Dấu trang</translation>
 <translation id="2847759467426165163">Truyền tới</translation>
 <translation id="284805635805850872">Xóa phần mềm độc hại?</translation>
@@ -1513,7 +1511,6 @@
 <translation id="3308116878371095290">Trang này đã bị chặn cài đặt cookie.</translation>
 <translation id="3308134619352333507">Nút ẩn</translation>
 <translation id="3308852433423051161">Đang tải Trợ lý Google...</translation>
-<translation id="3309747692199697901">Luôn chạy trên tất cả các trang web</translation>
 <translation id="3312424061798279731">Ngôn ngữ đã bật</translation>
 <translation id="3313590242757056087">Để đặt các trang web mà người dùng bị giám sát có thể xem, bạn có thể định cấu hình
     các giới hạn và cài đặt bằng cách truy cập <ph name="MANAGEMENT_URL" />.
@@ -1811,7 +1808,6 @@
 <translation id="3759933321830434300">Chặn các phần của trang web</translation>
 <translation id="3760460896538743390">Kiểm tra trang &amp;nền</translation>
 <translation id="37613671848467444">Mở trong &amp;Cửa sổ ẩn danh</translation>
-<translation id="3763401818161139108">Luôn chạy trên <ph name="ORIGIN" /></translation>
 <translation id="3764314093345384080">Thông tin bản dựng chi tiết</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{Kết nối với một thiết bị USB}other{Kết nối với # thiết bị USB}}</translation>
 <translation id="3764986667044728669">Không thể đăng ký</translation>
@@ -2272,7 +2268,6 @@
 <translation id="4547992677060857254">Thư mục bạn đã chọn chứa các tệp nhạy cảm. Bạn có chắc chắn muốn cấp quyền truy cập ghi vĩnh viễn "$1" cho thư mục này không?</translation>
 <translation id="4552031286893852992">Chrome đã chặn quảng cáo trên trang web này do trang web thường hiển thị quảng cáo xâm nhập.</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">Quyền truy cập trang</translation>
 <translation id="4552678318981539154">Mua thêm dung lượng lưu trữ</translation>
 <translation id="4554591392113183336">Tiện ích bên ngoài có cùng phiên bản hoặc phiên bản thấp hơn so với tiện ích hiện có.</translation>
 <translation id="4555769855065597957">Bóng</translation>
@@ -3268,7 +3263,6 @@
 <translation id="6080515710685820702">Bạn đang sử dụng máy tính dùng chung? Hãy thử mở cửa sổ ẩn danh.</translation>
 <translation id="6080689532560039067">Kiểm tra giờ hệ thống của bạn</translation>
 <translation id="6082651258230788217">Hiển thị trên thanh công cụ</translation>
-<translation id="6086814797483779854">Chạy khi nhấp chuột</translation>
 <translation id="6086846494333236931">Do quản trị viên của bạn cài đặt</translation>
 <translation id="6087960857463881712">Khuôn mặt vui nhộn</translation>
 <translation id="6089481419520884864">Lọc trang</translation>
@@ -4408,7 +4402,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Đã ghép nối</translation>
 <translation id="7870730066603611552">Xem lại các tùy chọn đồng bộ hóa sau khi thiết lập</translation>
 <translation id="7870790288828963061">Không tìm thấy ứng dụng Kiosk nào có phiên bản mới hơn. Không có gì để cập nhật. Vui lòng rút thẻ USB.</translation>
-<translation id="7874357055309047713">Luôn chạy trên tất cả các trang web</translation>
 <translation id="7877451762676714207">Lỗi máy chủ không xác định. Vui lòng thử lại hoặc liên hệ với quản trị viên máy chủ.</translation>
 <translation id="7877680364634660272">Tham quan</translation>
 <translation id="7878562273885520351">Mật khẩu của bạn có thể bị xâm phạm</translation>
@@ -4757,7 +4750,6 @@
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431909052837336408">Thay đổi mã PIN của SIM</translation>
 <translation id="8434480141477525001">Cổng gỡ lỗi NaCl</translation>
-<translation id="8437331208797669910">Quyền truy cập trang</translation>
 <translation id="843760761634048214">Lưu thẻ tín dụng</translation>
 <translation id="8438328416656800239">Chuyển sang một trình duyệt thông minh</translation>
 <translation id="8439506636278576865">Đề xuất dịch trang bằng ngôn ngữ này</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index d1451e1..f8e4a02 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -909,7 +909,6 @@
 <translation id="2413749388954403953">更改书签界面</translation>
 <translation id="2422426094670600218">&lt;未命名&gt;</translation>
 <translation id="2423578206845792524">图片另存为(&amp;V)...</translation>
-<translation id="2424091190911472304">在 <ph name="ORIGIN" /> 上始终运行</translation>
 <translation id="2425665904502185219">文件总大小</translation>
 <translation id="2428510569851653187">请说明此标签页崩溃时您在做什么</translation>
 <translation id="2431027948063157455">无法加载 Google 智能助理。请检查您的网络连接,然后重试。</translation>
@@ -1196,7 +1195,6 @@
 <translation id="2838379631617906747">正在安装</translation>
 <translation id="2841837950101800123">提供方</translation>
 <translation id="2843806747483486897">更改默认设置...</translation>
-<translation id="2844111009524261443">点击即可运行</translation>
 <translation id="2845382757467349449">总是显示书签栏</translation>
 <translation id="2847759467426165163">投射到</translation>
 <translation id="284805635805850872">要移除有害软件吗?</translation>
@@ -1508,7 +1506,6 @@
 <translation id="3308116878371095290">系统已禁止设置此网页的 Cookie。</translation>
 <translation id="3308134619352333507">隐藏按钮</translation>
 <translation id="3308852433423051161">正在加载 Google 智能助理…</translation>
-<translation id="3309747692199697901">在所有网站上始终运行</translation>
 <translation id="3312424061798279731">已启用的语言</translation>
 <translation id="3313590242757056087">要设置受监管用户可以浏览哪些网站,您可以转到 <ph name="MANAGEMENT_URL" /> 配置限制和设置。
 如果您不更改默认设置,<ph name="USER_DISPLAY_NAME" />将可以浏览网络上的所有网站。</translation>
@@ -1804,7 +1801,6 @@
 <translation id="3759933321830434300">屏蔽部分网页</translation>
 <translation id="3760460896538743390">检查背景页(&amp;B)</translation>
 <translation id="37613671848467444">在隐身窗口中打开(&amp;I)</translation>
-<translation id="3763401818161139108">在 <ph name="ORIGIN" /> 上始终运行</translation>
 <translation id="3764314093345384080">详细版本信息</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{可与 1 部 USB 设备通信}other{可与 # 部 USB 设备通信}}</translation>
 <translation id="3764986667044728669">无法注册</translation>
@@ -2264,7 +2260,6 @@
 <translation id="4547992677060857254">您选择的文件夹中包含敏感文件。确定要授予“$1”对此文件夹的永久写入权限吗?</translation>
 <translation id="4552031286893852992">Chrome 已拦截此网站上的广告,因为此网站常常会展示侵扰性广告。</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">可在当前网页上运行</translation>
 <translation id="4552678318981539154">购买更多存储空间</translation>
 <translation id="4554591392113183336">外部扩展程序的版本与现有版本相同或更低。</translation>
 <translation id="4555769855065597957">阴影</translation>
@@ -3254,7 +3249,6 @@
 <translation id="6080515710685820702">使用的是共用计算机?请尝试打开一个无痕式窗口。</translation>
 <translation id="6080689532560039067">检查系统时间</translation>
 <translation id="6082651258230788217">在工具栏中显示</translation>
-<translation id="6086814797483779854">点击即可运行</translation>
 <translation id="6086846494333236931">这是您的管理员安装的</translation>
 <translation id="6087960857463881712">酷炫表情</translation>
 <translation id="6089481419520884864">提取页面</translation>
@@ -4384,7 +4378,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - 已配对</translation>
 <translation id="7870730066603611552">完成设置后查看同步选项</translation>
 <translation id="7870790288828963061">找不到自助服务终端应用的更高版本,因此没有要更新的内容。请拔下 U 盘。</translation>
-<translation id="7874357055309047713">在所有网站上始终运行</translation>
 <translation id="7877451762676714207">未知服务器错误。请重试或与服务器管理员联系。</translation>
 <translation id="7877680364634660272">导览</translation>
 <translation id="7878562273885520351">您的密码可能会被盗用</translation>
@@ -4733,7 +4726,6 @@
 <translation id="8428634594422941299">知道了</translation>
 <translation id="8431909052837336408">更改 SIM 卡 PIN 码</translation>
 <translation id="8434480141477525001">NaCl调试端口</translation>
-<translation id="8437331208797669910">可在当前网页上运行</translation>
 <translation id="843760761634048214">保存信用卡</translation>
 <translation id="8438328416656800239">改用智能浏览器</translation>
 <translation id="8439506636278576865">询问是否翻译此语言的网页</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index e337aec..8fd6f094 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -912,7 +912,6 @@
 <translation id="2413749388954403953">變更書籤使用者介面</translation>
 <translation id="2422426094670600218">&lt;未命名&gt;</translation>
 <translation id="2423578206845792524">另存圖檔(&amp;V)...</translation>
-<translation id="2424091190911472304">一律在 <ph name="ORIGIN" /> 執行</translation>
 <translation id="2425665904502185219">總檔案大小</translation>
 <translation id="2428510569851653187">說明分頁當掉時你正在執行的動作</translation>
 <translation id="2431027948063157455">無法載入 Google 助理,請檢查網路連線狀態並重試。</translation>
@@ -1200,7 +1199,6 @@
 <translation id="2838379631617906747">安裝中</translation>
 <translation id="2841837950101800123">提供者</translation>
 <translation id="2843806747483486897">變更預設值...</translation>
-<translation id="2844111009524261443">點擊即可執行</translation>
 <translation id="2845382757467349449">永遠顯示書籤列</translation>
 <translation id="2847759467426165163">投放至</translation>
 <translation id="284805635805850872">要移除有害軟體嗎?</translation>
@@ -1512,7 +1510,6 @@
 <translation id="3308116878371095290">無法為這個網頁設定 Cookie。</translation>
 <translation id="3308134619352333507">隱藏按鈕</translation>
 <translation id="3308852433423051161">正在載入 Google 助理…</translation>
-<translation id="3309747692199697901">一律在所有網站上執行</translation>
 <translation id="3312424061798279731">已啟用的語言</translation>
 <translation id="3313590242757056087">如要設定受監管的使用者可瀏覽哪些網站,你可以前往 <ph name="MANAGEMENT_URL" /> 
     修改限制與設定。
@@ -1810,7 +1807,6 @@
 <translation id="3759933321830434300">封鎖網頁部分內容</translation>
 <translation id="3760460896538743390">檢查背景頁面(&amp;B)</translation>
 <translation id="37613671848467444">在無痕式視窗中開啟(&amp;I)</translation>
-<translation id="3763401818161139108">一律在 <ph name="ORIGIN" /> 執行</translation>
 <translation id="3764314093345384080">詳細版本資訊</translation>
 <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{與 1 個 USB 裝置通訊}other{與 # 個 USB 裝置通訊}}</translation>
 <translation id="3764986667044728669">無法註冊</translation>
@@ -2270,7 +2266,6 @@
 <translation id="4547992677060857254">你選取的資料夾包含敏感檔案。你確定要將這個資料夾的寫入權限永久授予「$1」嗎?</translation>
 <translation id="4552031286893852992">Chrome 已封鎖這個網站的廣告,因為這個網站經常顯示侵入式廣告。</translation>
 <translation id="4552089082226364758">Flash</translation>
-<translation id="4552495056028768700">網頁存取權</translation>
 <translation id="4552678318981539154">購買更多儲存空間</translation>
 <translation id="4554591392113183336">外部擴充功能與現有擴充功能的版本相同,或版本較低。</translation>
 <translation id="4555769855065597957">陰影</translation>
@@ -3265,7 +3260,6 @@
 <translation id="6080515710685820702">你是與其他人共用電腦嗎?試試使用無痕式視窗。</translation>
 <translation id="6080689532560039067">請檢查你的系統時間</translation>
 <translation id="6082651258230788217">顯示在工具列中</translation>
-<translation id="6086814797483779854">點擊即可執行</translation>
 <translation id="6086846494333236931">由您的管理員安裝</translation>
 <translation id="6087960857463881712">好看的臉蛋</translation>
 <translation id="6089481419520884864">提取頁面</translation>
@@ -4401,7 +4395,6 @@
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - 已配對</translation>
 <translation id="7870730066603611552">設定後查看同步處理選項</translation>
 <translation id="7870790288828963061">找不到新版 Kiosk 應用程式,沒有可更新的內容。請移除 USB 隨身碟。</translation>
-<translation id="7874357055309047713">一律在所有網站上執行</translation>
 <translation id="7877451762676714207">不明的伺服器錯誤。請再試一次,或與伺服器管理員聯絡。</translation>
 <translation id="7877680364634660272">導覽</translation>
 <translation id="7878562273885520351">你的密碼可能已經外洩</translation>
@@ -4750,7 +4743,6 @@
 <translation id="8428634594422941299">我知道了</translation>
 <translation id="8431909052837336408">變更 SIM 卡的 PIN 碼</translation>
 <translation id="8434480141477525001">NaCl 偵錯通訊埠</translation>
-<translation id="8437331208797669910">網頁存取權</translation>
 <translation id="843760761634048214">儲存信用卡</translation>
 <translation id="8438328416656800239">改用智慧瀏覽器</translation>
 <translation id="8439506636278576865">翻譯這個語言的網頁</translation>
diff --git a/chrome/browser/android/contextual_suggestions/contextual_suggestions_bridge.cc b/chrome/browser/android/contextual_suggestions/contextual_suggestions_bridge.cc
index 21eefd0f..58a1c1b0 100644
--- a/chrome/browser/android/contextual_suggestions/contextual_suggestions_bridge.cc
+++ b/chrome/browser/android/contextual_suggestions/contextual_suggestions_bridge.cc
@@ -141,15 +141,6 @@
   ukm::SourceId ukm_source_id =
       ukm::GetSourceIdForWebContentsDocument(web_contents);
 
-  // It's possible but unlikely to be in this state; it can happen if we are
-  // triggering a fetch for a WebContents that does not have a committed
-  // navigation. This can happen, e.g., if we switched tabs and a navigation
-  // took a very long time to commit. TODO(pnoland): Check against this
-  // possiblity by deferring event reporting and fetching until we observe a
-  // commit.
-  if (ukm_source_id == ukm::kInvalidSourceId)
-    return;
-
   contextual_suggestions::ContextualSuggestionsEvent event =
       static_cast<contextual_suggestions::ContextualSuggestionsEvent>(
           j_event_id);
diff --git a/chrome/browser/android/vr/vr_shell_gl.cc b/chrome/browser/android/vr/vr_shell_gl.cc
index 8134a57..b02895f 100644
--- a/chrome/browser/android/vr/vr_shell_gl.cc
+++ b/chrome/browser/android/vr/vr_shell_gl.cc
@@ -1509,8 +1509,6 @@
     ui_controller_update_time_.AddSample(controller_time);
   }
 
-  ui_->scene()->CallPerFrameCallbacks();
-
   bool textures_changed = ui_->scene()->UpdateTextures();
 
   // TODO(mthiesse): Determine if a visible controller is actually drawn in the
diff --git a/chrome/browser/autocomplete/search_provider_unittest.cc b/chrome/browser/autocomplete/search_provider_unittest.cc
index 1af4c4c9e..7287ef22 100644
--- a/chrome/browser/autocomplete/search_provider_unittest.cc
+++ b/chrome/browser/autocomplete/search_provider_unittest.cc
@@ -1019,117 +1019,77 @@
   controller.Start(input);
   const AutocompleteResult& result = controller.result();
 
-  // There should be three matches, one for the keyword history, one for
-  // keyword provider's what-you-typed, and one for the default provider's
-  // what you typed, in that order.
-  ASSERT_EQ(3u, result.size());
+  // There should be two matches, one for the keyword history and one for
+  // keyword provider's what-you-typed, in that order.
+  ASSERT_EQ(2u, result.size());
   EXPECT_EQ(AutocompleteMatchType::SEARCH_HISTORY, result.match_at(0).type);
   EXPECT_EQ(AutocompleteMatchType::SEARCH_OTHER_ENGINE,
             result.match_at(1).type);
-  EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-            result.match_at(2).type);
   EXPECT_GT(result.match_at(0).relevance, result.match_at(1).relevance);
-  EXPECT_GT(result.match_at(1).relevance, result.match_at(2).relevance);
   EXPECT_TRUE(result.match_at(0).allowed_to_be_default_match);
   EXPECT_TRUE(result.match_at(1).allowed_to_be_default_match);
-  EXPECT_FALSE(result.match_at(2).allowed_to_be_default_match);
 
   // The two keyword results should come with the keyword we expect.
   EXPECT_EQ(ASCIIToUTF16("k"), result.match_at(0).keyword);
   EXPECT_EQ(ASCIIToUTF16("k"), result.match_at(1).keyword);
-  // The default provider has a different keyword.  (We don't explicitly
-  // set it during this test, so all we do is assert that it's different.)
-  EXPECT_NE(result.match_at(0).keyword, result.match_at(2).keyword);
 
-  // The top result will always have a description.  The third result,
-  // coming from a different provider than the first two, should also.
-  // Whether the second result has one doesn't matter much.  (If it was
-  // missing, people would infer that it's the same search provider as
-  // the one above it.)
+  // The top result will always have a description. Whether the second
+  // result has one doesn't matter much. (If it was missing, people would
+  // infer that it's the same search provider as the one above it.)
   EXPECT_FALSE(result.match_at(0).description.empty());
-  EXPECT_FALSE(result.match_at(2).description.empty());
-  EXPECT_NE(result.match_at(0).description, result.match_at(2).description);
 }
 
 TEST_F(SearchProviderTest, KeywordVerbatim) {
   TestData cases[] = {
     // Test a simple keyword input.
-    { ASCIIToUTF16("k foo"), 2,
+    { ASCIIToUTF16("k foo"), 1,
       { ResultInfo(GURL("http://keyword/foo"),
                    AutocompleteMatchType::SEARCH_OTHER_ENGINE,
                    true,
-                   ASCIIToUTF16("k foo")),
-        ResultInfo(GURL("http://defaultturl/k%20foo"),
-                   AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-                   false,
-                   ASCIIToUTF16("k foo") ) } },
+                   ASCIIToUTF16("k foo")), }},
 
     // Make sure extra whitespace after the keyword doesn't change the
     // keyword verbatim query.  Also verify that interior consecutive
     // whitespace gets trimmed.
-    { ASCIIToUTF16("k   foo"), 2,
+    { ASCIIToUTF16("k   foo"), 1,
       { ResultInfo(GURL("http://keyword/foo"),
                    AutocompleteMatchType::SEARCH_OTHER_ENGINE,
                    true,
-                   ASCIIToUTF16("k foo")),
-        ResultInfo(GURL("http://defaultturl/k%20foo"),
-                   AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-                   false,
-                   ASCIIToUTF16("k foo")) } },
+                   ASCIIToUTF16("k foo")), }},
     // Leading whitespace should be stripped before SearchProvider gets the
     // input; hence there are no tests here about how it handles those inputs.
 
     // Verify that interior consecutive whitespace gets trimmed in either case.
-    { ASCIIToUTF16("k  foo  bar"), 2,
+    { ASCIIToUTF16("k  foo  bar"), 1,
       { ResultInfo(GURL("http://keyword/foo%20bar"),
                    AutocompleteMatchType::SEARCH_OTHER_ENGINE,
                    true,
-                   ASCIIToUTF16("k foo bar")),
-        ResultInfo(GURL("http://defaultturl/k%20foo%20bar"),
-                   AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-                   false,
-                   ASCIIToUTF16("k foo bar")) } },
+                   ASCIIToUTF16("k foo bar")), }},
 
     // Verify that trailing whitespace gets trimmed.
-    { ASCIIToUTF16("k foo bar  "), 2,
+    { ASCIIToUTF16("k foo bar  "), 1,
       { ResultInfo(GURL("http://keyword/foo%20bar"),
                    AutocompleteMatchType::SEARCH_OTHER_ENGINE,
                    true,
-                   ASCIIToUTF16("k foo bar")),
-        ResultInfo(GURL("http://defaultturl/k%20foo%20bar"),
-                   AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-                   false,
-                   ASCIIToUTF16("k foo bar")) } },
+                   ASCIIToUTF16("k foo bar")), }},
 
     // Keywords can be prefixed by certain things that should get ignored
     // when constructing the keyword match.
-    { ASCIIToUTF16("www.k foo"), 2,
+    { ASCIIToUTF16("www.k foo"), 1,
       { ResultInfo(GURL("http://keyword/foo"),
                    AutocompleteMatchType::SEARCH_OTHER_ENGINE,
                    true,
-                   ASCIIToUTF16("k foo")),
-        ResultInfo(GURL("http://defaultturl/www.k%20foo"),
-                   AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-                   false,
-                   ASCIIToUTF16("www.k foo")) } },
-    { ASCIIToUTF16("http://k foo"), 2,
+                   ASCIIToUTF16("k foo")), }},
+    { ASCIIToUTF16("http://k foo"), 1,
       { ResultInfo(GURL("http://keyword/foo"),
                    AutocompleteMatchType::SEARCH_OTHER_ENGINE,
                    true,
-                   ASCIIToUTF16("k foo")),
-        ResultInfo(GURL("http://defaultturl/http%3A//k%20foo"),
-                   AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-                   false,
-                   ASCIIToUTF16("http://k foo")) } },
-    { ASCIIToUTF16("http://www.k foo"), 2,
+                   ASCIIToUTF16("k foo")), }},
+    { ASCIIToUTF16("http://www.k foo"), 1,
       { ResultInfo(GURL("http://keyword/foo"),
                    AutocompleteMatchType::SEARCH_OTHER_ENGINE,
                    true,
-                   ASCIIToUTF16("k foo")),
-        ResultInfo(GURL("http://defaultturl/http%3A//www.k%20foo"),
-                   AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-                   false,
-                   ASCIIToUTF16("http://www.k foo")) } },
+                   ASCIIToUTF16("k foo")), }},
 
     // A keyword with no remaining input shouldn't get a keyword
     // verbatim match.
@@ -1159,6 +1119,8 @@
 
 // Ensures command-line flags are reflected in the URLs the search provider
 // generates.
+// TODO(krb): This test appears similar to AutocompleteProviderTest::
+// ExtraQueryParams(). Consider removing or distinguishing one.
 TEST_F(SearchProviderTest, CommandLineOverrides) {
   TemplateURLService* turl_model =
       TemplateURLServiceFactory::GetForProfile(&profile_);
@@ -1176,15 +1138,11 @@
       switches::kExtraSearchQueryParams, "a=b");
 
   TestData cases[] = {
-    { ASCIIToUTF16("k a"), 2,
+    { ASCIIToUTF16("k a"), 1,
       { ResultInfo(GURL("http://keyword/a"),
                    AutocompleteMatchType::SEARCH_OTHER_ENGINE,
                    true,
-                   ASCIIToUTF16("k a")),
-        ResultInfo(GURL("http://www.bar.com/k%20a?a=b"),
-                   AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-                   false,
-                   ASCIIToUTF16("k a")) } },
+                   ASCIIToUTF16("k a")), }},
   };
 
   RunTest(cases, arraysize(cases), false);
@@ -1246,7 +1204,7 @@
       "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"],"
       "\"google:suggestrelevance\":[9900, 9800]}]",
       "[\"a\",[\"akeyword-query\"],[],[],{\"google:suggesttype\":[\"QUERY\"]}]",
-      { "a", "akeyword-query", "k a", "adefault.com", "k adefault-query" } },
+      { "a", "akeyword-query", "adefault.com", "k adefault-query", "" } },
 
     // Now try with keyword provider suggested relevance scores.
     { "[\"k a\",[\"k adefault-query\", \"adefault.com\"],[],[],"
@@ -1256,7 +1214,7 @@
       "[\"a\",[\"akeyword-query\"],[],[],{\"google:suggesttype\":[\"QUERY\"],"
       "\"google:verbatimrelevance\":9500,"
       "\"google:suggestrelevance\":[9600]}]",
-      { "akeyword-query", "a", "k a", "adefault.com", "k adefault-query" } }
+      { "akeyword-query", "a", "adefault.com", "k adefault-query", "" } }
   };
 
   for (size_t i = 0; i < arraysize(cases); ++i) {
@@ -1540,15 +1498,12 @@
     const std::string inline_autocompletion;
   } cases[] = {
     // clang-format off
-    // Ensure that suggest relevance scores reorder matches and that
-    // the keyword verbatim (lacking a suggested verbatim score) beats
-    // the default provider verbatim.
+    // Ensure that suggest relevance scores reorder matches.
     { "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]",
       { { "a",   true,  true },
-        { "k a", false, false },
         { "c",   true,  false },
         { "b",   true,  false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     // Again, check that relevance scores reorder matches, just this
     // time with navigation matches.  This also checks that with
@@ -1563,8 +1518,7 @@
         { "d",     true,  false },
         { "c.com", false, false },
         { "b.com", false, false },
-        { "k a",   false, false },
-        kEmptyMatch },
+        kEmptyMatch, kEmptyMatch },
       std::string() },
 
     // Without suggested relevance scores, we should only allow one
@@ -1573,8 +1527,7 @@
        "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]",
       { { "a",     true,  true },
         { "b.com", false, false },
-        { "k a",   false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
 
     // Ensure that verbatimrelevance scores reorder or suppress verbatim.
@@ -1583,28 +1536,24 @@
                              "\"google:suggestrelevance\":[9998]}]",
       { { "a",   true,  true },
         { "a1",  true,  false },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998,"
                              "\"google:suggestrelevance\":[9999]}]",
       { { "a1",  true,  true },
         { "a",   true,  true },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "1" },
     { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0,"
                              "\"google:suggestrelevance\":[9999]}]",
       { { "a1",  true,  true },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "1" },
     { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":-1,"
                              "\"google:suggestrelevance\":[9999]}]",
       { { "a1",  true,  true },
         { "a",   true,  true },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "1" },
     { "[\"a\",[\"http://a.com\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\"],"
@@ -1612,8 +1561,7 @@
         "\"google:suggestrelevance\":[9998]}]",
       { { "a",     true,  true },
         { "a.com", false, false },
-        { "k a",   false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
 
     // Ensure that both types of relevance scores reorder matches together.
@@ -1622,24 +1570,21 @@
       { { "a1",  true,  true },
         { "a",   true,  true },
         { "a2",  true,  false },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "1" },
 
     // Check that an inlineable match appears first regardless of its score.
     { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]",
       { { "a",   true,  true },
         { "b",   true,  false },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     { "[\"a\",[\"http://b.com\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\"],"
         "\"google:suggestrelevance\":[9999]}]",
       { { "a",     true,  true },
         { "b.com", false, false },
-        { "k a",   false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     // If there is no inlineable match, restore the keyword verbatim score.
     // The keyword verbatim match will then appear first.
@@ -1647,8 +1592,7 @@
                             "\"google:verbatimrelevance\":0}]",
       { { "a",   true,  true },
         { "b",   true,  false },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     { "[\"a\",[\"http://b.com\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\"],"
@@ -1656,8 +1600,7 @@
         "\"google:verbatimrelevance\":0}]",
       { { "a",     true,  true },
         { "b.com", false, false },
-        { "k a",   false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
 
     // The top result does not have to score as highly as calculated
@@ -1665,46 +1608,41 @@
     // this provider.
     { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0}]",
       { { "a1",  true,  true },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "1" },
     { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":10}]",
       { { "a1",  true,  true },
-        { "k a", false, false },
         { "a",   true,  true },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "1" },
     { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[10],"
                              "\"google:verbatimrelevance\":0}]",
       { { "a1",  true,  true },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "1" },
     { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[10, 20],"
                                      "\"google:verbatimrelevance\":0}]",
       { { "a2",  true,  true },
-        { "k a", false, false },
         { "a1",  true,  false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "2" },
     { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[10, 30],"
       "\"google:verbatimrelevance\":20}]",
       { { "a2",  true,  true },
-        { "k a", false, false },
         { "a",   true,  true },
         { "a1",  true,  false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "2" },
 
     // Ensure that all suggestions are considered, regardless of order.
     { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[],"
        "{\"google:suggestrelevance\":[10, 20, 30, 40, 50, 60, 70]}]",
       { { "a",   true,  true },
-        { "k a", false, false },
         { "h",   true,  false },
         { "g",   true,  false },
         { "f",   true,  false },
-        { "e",   true,  false } },
+        { "e",   true,  false },
+        { "d",   true,  false }, },
       std::string() },
     { "[\"a\",[\"http://b.com\", \"http://c.com\", \"http://d.com\","
               "\"http://e.com\", \"http://f.com\", \"http://g.com\","
@@ -1715,28 +1653,24 @@
                                 "\"NAVIGATION\"],"
         "\"google:suggestrelevance\":[10, 20, 30, 40, 50, 60, 70]}]",
       { { "a",     true,  true },
-        { "k a",   false, false },
         { "h.com", false, false },
         { "g.com", false, false },
         { "f.com", false, false },
-        { "e.com", false, false } },
+        { "e.com", false, false },
+        { "d.com", false, false }, },
       std::string() },
 
     // Ensure that incorrectly sized suggestion relevance lists are ignored.
-    // Note that keyword suggestions by default (not in suggested relevance
-    // mode) score more highly than the default verbatim.
     { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]",
       { { "a",   true,  true },
         { "a1",  true,  false },
         { "a2",  true,  false },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]",
       { { "a",   true,  true },
         { "a1",  true,  false },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     // In this case, ignoring the suggested relevance scores means we keep
     // only one navsuggest result.
@@ -1745,16 +1679,14 @@
         "\"google:suggestrelevance\":[1]}]",
       { { "a",      true,  true },
         { "a1.com", false, false },
-        { "k a",    false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     { "[\"a\",[\"http://a1.com\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\"],"
        "\"google:suggestrelevance\":[9999, 1]}]",
       { { "a",      true,  true },
         { "a1.com", false, false },
-        { "k a",    false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
 
     // Ensure that all 'verbatim' results are merged with their maximum score.
@@ -1763,8 +1695,7 @@
       { { "a2",  true,  true },
         { "a",   true,  true },
         { "a1",  true,  false },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "2" },
     { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[],"
        "{\"google:suggestrelevance\":[9998, 9997, 9999],"
@@ -1772,8 +1703,7 @@
       { { "a2",  true,  true },
         { "a",   true,  true },
         { "a1",  true,  false },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "2" },
 
     // Ensure that verbatim is always generated without other suggestions.
@@ -1781,13 +1711,11 @@
     // (except when suggested relevances are ignored).
     { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]",
       { { "a",   true,  true },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     { "[\"a\",[],[],[],{\"google:verbatimrelevance\":0}]",
       { { "a",   true,  true },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
 
     // In reorder mode, navsuggestions will not need to be demoted (because
@@ -1800,8 +1728,7 @@
       { { "a",      true,  true },
         { "a2.com", false, false },
         { "a1.com", false, false },
-        { "k a",    false, false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
@@ -1810,16 +1737,14 @@
       { { "a",      true,  true },
         { "a1.com", false, false },
         { "a2.com", false, false },
-        { "k a",    false, false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     { "[\"a\",[\"https://a/\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\"],"
         "\"google:suggestrelevance\":[9999]}]",
       { { "a",   true,  true },
         { "a",   false, false },
-        { "k a", false, false },
-        kEmptyMatch, kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     // Check when navsuggest scores more than verbatim and there is query
     // suggestion but it scores lower.
@@ -1831,8 +1756,7 @@
         { "a2.com", false, false },
         { "a1.com", false, false },
         { "a3",     true,  false },
-        { "k a",    false, false },
-        kEmptyMatch },
+        kEmptyMatch, kEmptyMatch },
       std::string() },
     { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"],"
@@ -1842,8 +1766,7 @@
         { "a1.com", false, false },
         { "a2.com", false, false },
         { "a3",     true,  false },
-        { "k a",    false, false },
-        kEmptyMatch },
+        kEmptyMatch, kEmptyMatch },
       std::string() },
     // Check when navsuggest scores more than a query suggestion.  There is
     // a verbatim but it scores lower.
@@ -1855,8 +1778,7 @@
         { "a2.com", false, false },
         { "a1.com", false, false },
         { "a",      true,  true },
-        { "k a",    false, false },
-        kEmptyMatch },
+        kEmptyMatch, kEmptyMatch },
       "3" },
     { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"],"
@@ -1866,8 +1788,7 @@
         { "a1.com", false, false },
         { "a2.com", false, false },
         { "a",      true,  true },
-        { "k a",    false, false },
-        kEmptyMatch },
+        kEmptyMatch, kEmptyMatch },
       "3" },
     { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"],"
@@ -1876,8 +1797,7 @@
       { { "a3",     true,  true },
         { "a2.com", false, false },
         { "a1.com", false, false },
-        { "k a",    false, false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "3" },
     { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"],"
@@ -1886,8 +1806,7 @@
       { { "a3",     true,  true },
         { "a1.com", false, false },
         { "a2.com", false, false },
-        { "k a",    false, false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       "3" },
     // Check when there is neither verbatim nor a query suggestion that,
     // because we can't demote navsuggestions below a query suggestion,
@@ -1899,8 +1818,7 @@
       { { "a",      true,  true },
         { "a2.com", false, false },
         { "a1.com", false, false },
-        { "k a",    false, false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
@@ -1909,8 +1827,7 @@
       { { "a",      true,  true },
         { "a1.com", false, false },
         { "a2.com", false, false },
-        { "k a",    false, false },
-        kEmptyMatch, kEmptyMatch },
+        kEmptyMatch, kEmptyMatch, kEmptyMatch },
       std::string() },
     // More checks that everything works when it's not necessary to demote.
     { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[],"
@@ -1921,8 +1838,7 @@
         { "a2.com", false, false },
         { "a1.com", false, false },
         { "a",      true,  true },
-        { "k a",    false, false },
-        kEmptyMatch },
+        kEmptyMatch, kEmptyMatch },
       "3" },
     { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[],"
        "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"],"
@@ -1932,8 +1848,7 @@
         { "a1.com", false, false },
         { "a2.com", false, false },
         { "a",      true,  true },
-        { "k a",    false, false },
-        kEmptyMatch },
+        kEmptyMatch, kEmptyMatch },
       "3" },
     // clang-format on
   };
@@ -1989,7 +1904,8 @@
     }
     // Ensure that no expected matches are missing.
     for (; j < arraysize(cases[i].matches); ++j) {
-      SCOPED_TRACE(" Case # " + base::NumberToString(i));
+      SCOPED_TRACE(" Case # " + base::NumberToString(i) + " subcase " +
+                   base::NumberToString(j));
       EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents);
     }
   }
@@ -3052,10 +2968,10 @@
           "\"google:suggestrelevance\":[9, 12]}]",
           "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]",
           {{"a", false, AutocompleteMatchType::SEARCH_OTHER_ENGINE, true},
-           {"k a", false, AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, false},
            {"ab", false, AutocompleteMatchType::SEARCH_SUGGEST, false},
            {"c", false, AutocompleteMatchType::SEARCH_SUGGEST, true},
-           {"b", false, AutocompleteMatchType::SEARCH_SUGGEST, true}},
+           {"b", false, AutocompleteMatchType::SEARCH_SUGGEST, true},
+           kEmptyMatch},
       }};
 
   for (size_t i = 0; i < arraysize(cases); ++i) {
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 7e848eb..9eee3733 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -574,8 +574,6 @@
     "eol_notification.h",
     "events/event_rewriter_delegate_impl.cc",
     "events/event_rewriter_delegate_impl.h",
-    "events/keyboard_driven_event_rewriter.cc",
-    "events/keyboard_driven_event_rewriter.h",
     "extensions/active_tab_permission_granter_delegate_chromeos.cc",
     "extensions/active_tab_permission_granter_delegate_chromeos.h",
     "extensions/default_app_order.cc",
@@ -1891,7 +1889,6 @@
     "drive/fileapi/webkit_file_stream_reader_impl_unittest.cc",
     "drive/write_on_cache_file_unittest.cc",
     "events/event_rewriter_unittest.cc",
-    "events/keyboard_driven_event_rewriter_unittest.cc",
     "extensions/active_tab_permission_granter_delegate_chromeos_unittest.cc",
     "extensions/default_app_order_unittest.cc",
     "extensions/device_local_account_external_policy_loader_unittest.cc",
diff --git a/chrome/browser/chromeos/DEPS b/chrome/browser/chromeos/DEPS
index 9e0a15a5..a027094 100644
--- a/chrome/browser/chromeos/DEPS
+++ b/chrome/browser/chromeos/DEPS
@@ -38,9 +38,8 @@
 
 specific_include_rules = {
   "chrome_browser_main_chromeos\.cc": [
-    "-ash",
     # TODO(mash): Support EventRewriters, http://crbug.com/647781.
-    "+ash/event_rewriter_controller.h",
+    "+ash/events/event_rewriter_controller.h",
     "+ash/root_window_controller.h",
     "+ash/shell.h",
     "+ash/sticky_keys/sticky_keys_controller.h",
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
index ca6047a8..be9c729 100644
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -10,7 +10,9 @@
 #include <utility>
 #include <vector>
 
-#include "ash/event_rewriter_controller.h"
+#include "ash/events/event_rewriter_controller.h"
+#include "ash/public/interfaces/constants.mojom.h"
+#include "ash/public/interfaces/event_rewriter_controller.mojom.h"
 #include "ash/shell.h"
 #include "ash/sticky_keys/sticky_keys_controller.h"
 #include "base/bind.h"
@@ -55,7 +57,6 @@
 #include "chrome/browser/chromeos/dbus/vm_applications_service_provider_delegate.h"
 #include "chrome/browser/chromeos/display/quirks_manager_delegate_impl.h"
 #include "chrome/browser/chromeos/events/event_rewriter_delegate_impl.h"
-#include "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h"
 #include "chrome/browser/chromeos/extensions/default_app_order.h"
 #include "chrome/browser/chromeos/external_metrics.h"
 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
@@ -1049,20 +1050,27 @@
 }
 
 void ChromeBrowserMainPartsChromeos::PostBrowserStart() {
+  // Enable the KeyboardDrivenEventRewriter if the OEM manifest flag is on.
+  if (system::InputDeviceSettings::Get()->ForceKeyboardDrivenUINavigation()) {
+    content::ServiceManagerConnection* connection =
+        content::ServiceManagerConnection::GetForProcess();
+    ash::mojom::EventRewriterControllerPtr event_rewriter_controller_ptr;
+    connection->GetConnector()->BindInterface(ash::mojom::kServiceName,
+                                              &event_rewriter_controller_ptr);
+    event_rewriter_controller_ptr->SetKeyboardDrivenEventRewriterEnabled(true);
+  }
+
   if (chromeos::GetAshConfig() != ash::Config::MASH) {
     // TODO(mash): Support EventRewriterController; see crbug.com/647781
     ash::EventRewriterController* event_rewriter_controller =
         ash::Shell::Get()->event_rewriter_controller();
     event_rewriter_controller->AddEventRewriter(
-        std::unique_ptr<ui::EventRewriter>(new KeyboardDrivenEventRewriter()));
-    event_rewriter_controller->AddEventRewriter(
         std::unique_ptr<ui::EventRewriter>(new SpokenFeedbackEventRewriter()));
     event_rewriter_delegate_ = std::make_unique<EventRewriterDelegateImpl>();
     event_rewriter_controller->AddEventRewriter(
         std::make_unique<ui::EventRewriterChromeOS>(
             event_rewriter_delegate_.get(),
             ash::Shell::Get()->sticky_keys_controller()));
-    event_rewriter_controller->Init();
   }
 
   // In classic ash must occur after ash::ShellPort is initialized. Triggers a
diff --git a/chrome/browser/chromeos/crostini/crostini_manager.cc b/chrome/browser/chromeos/crostini/crostini_manager.cc
index 3856dc4f..67f7c8d 100644
--- a/chrome/browser/chromeos/crostini/crostini_manager.cc
+++ b/chrome/browser/chromeos/crostini/crostini_manager.cc
@@ -564,6 +564,8 @@
   AppLaunchParams launch_params(
       profile, crosh_extension, extensions::LAUNCH_CONTAINER_WINDOW,
       WindowOpenDisposition::NEW_WINDOW, extensions::SOURCE_APP_LAUNCHER);
+  launch_params.override_app_name =
+      AppNameFromCrostiniAppId(kCrostiniTerminalId);
 
   OpenApplicationWindow(launch_params, vsh_in_crosh_url);
 }
diff --git a/chrome/browser/chromeos/crostini/crostini_util.cc b/chrome/browser/chromeos/crostini/crostini_util.cc
index 65c729d56..13b470a 100644
--- a/chrome/browser/chromeos/crostini/crostini_util.cc
+++ b/chrome/browser/chromeos/crostini/crostini_util.cc
@@ -6,6 +6,7 @@
 
 #include "base/feature_list.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/strings/string_util.h"
 #include "chrome/browser/chromeos/crostini/crostini_manager.h"
 #include "chrome/browser/chromeos/crostini/crostini_pref_names.h"
 #include "chrome/browser/chromeos/crostini/crostini_registry_service.h"
@@ -19,7 +20,8 @@
 
 namespace {
 
-const char kCrostiniAppLaunchHistogram[] = "Crostini.AppLaunch";
+constexpr char kCrostiniAppLaunchHistogram[] = "Crostini.AppLaunch";
+constexpr char kCrostiniAppNamePrefix[] = "_crostini_";
 
 // These values are persisted to logs. Entries should not be renumbered and
 // numeric values should never be reused.
@@ -125,3 +127,16 @@
   // Empty id means we're running in a test.
   return id.empty() ? "test" : id;
 }
+
+std::string AppNameFromCrostiniAppId(const std::string& id) {
+  return kCrostiniAppNamePrefix + id;
+}
+
+base::Optional<std::string> CrostiniAppIdFromAppName(
+    const std::string& app_name) {
+  if (!base::StartsWith(app_name, kCrostiniAppNamePrefix,
+                        base::CompareCase::SENSITIVE)) {
+    return base::nullopt;
+  }
+  return app_name.substr(strlen(kCrostiniAppNamePrefix));
+}
diff --git a/chrome/browser/chromeos/crostini/crostini_util.h b/chrome/browser/chromeos/crostini/crostini_util.h
index f43448a..5d21c26 100644
--- a/chrome/browser/chromeos/crostini/crostini_util.h
+++ b/chrome/browser/chromeos/crostini/crostini_util.h
@@ -7,6 +7,8 @@
 
 #include <string>
 
+#include "base/optional.h"
+
 class Profile;
 
 // Returns true if crostini is allowed to run.
@@ -26,6 +28,15 @@
 
 std::string CryptohomeIdForProfile(Profile* profile);
 
+// The Terminal opens Crosh but overrides the Browser's app_name so that we can
+// identify it as the Crostini Terminal. In the future, we will also use these
+// for Crostini apps marked Terminal=true in their .desktop file.
+std::string AppNameFromCrostiniAppId(const std::string& id);
+
+// Returns nullopt for a non-Crostini app name.
+base::Optional<std::string> CrostiniAppIdFromAppName(
+    const std::string& app_name);
+
 constexpr char kCrostiniTerminalAppName[] = "Terminal";
 // We can use any arbitrary well-formed extension id for the Terminal app, this
 // is equal to GenerateId("Terminal").
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
index 181f0876..a6b6629 100644
--- a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
+++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
@@ -635,7 +635,7 @@
     }
 
     std::string output;
-    OnMessage(name, *message_dictionary, &output);
+    OnCommand(name, *message_dictionary, &output);
     if (HasFatalFailure())
       break;
 
@@ -643,10 +643,11 @@
   }
 }
 
-void FileManagerBrowserTestBase::OnMessage(const std::string& name,
+void FileManagerBrowserTestBase::OnCommand(const std::string& name,
                                            const base::DictionaryValue& value,
                                            std::string* output) {
   base::ScopedAllowBlockingForTesting allow_blocking;
+
   if (name == "getTestName") {
     // Pass the test case name.
     *output = GetTestCaseNameParam();
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.h b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.h
index 584bc149..6884c231 100644
--- a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.h
+++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.h
@@ -65,13 +65,13 @@
   void InstallExtension(const base::FilePath& path, const char* manifest_name);
 
   // Runs the test: awaits chrome.test messsage commands and chrome.test PASS
-  // or FAIL messsages to process. |OnMessage| is used to handle the commands
+  // or FAIL messsages to process. |OnCommand| is used to handle the commands
   // sent from the test extension. Returns on test PASS or FAIL.
   void RunTestMessageLoop();
 
   // Process test extension command |name|, with arguments |value|. Write the
   // results to |output|.
-  void OnMessage(const std::string& name,
+  void OnCommand(const std::string& name,
                  const base::DictionaryValue& value,
                  std::string* output);
 
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc
index f628bd5..9b1fdf6 100644
--- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc
+++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_unittest.cc
@@ -165,7 +165,7 @@
 }
 
 TEST_F(OwnerSettingsServiceChromeOSTest, FailedSetRequest) {
-  session_manager_client_.set_store_device_policy_success(false);
+  session_manager_client_.set_store_policy_success(false);
   std::string current_channel;
   ASSERT_TRUE(provider_->Get(kReleaseChannel)->GetAsString(&current_channel));
   ASSERT_NE(current_channel, "stable-channel");
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc
index 627b2a4..a1d832eb 100644
--- a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc
+++ b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc
@@ -745,7 +745,7 @@
 }
 
 TEST_P(DeviceCloudPolicyManagerChromeOSEnrollmentTest, StoreError) {
-  session_manager_client_.set_store_device_policy_success(false);
+  session_manager_client_.set_store_policy_success(false);
   RunTest();
   ExpectFailedEnrollment(EnrollmentStatus::STORE_ERROR);
   EXPECT_EQ(CloudPolicyStore::STATUS_STORE_ERROR,
diff --git a/chrome/browser/chromeos/policy/site_isolation_flag_handling_browsertest.cc b/chrome/browser/chromeos/policy/site_isolation_flag_handling_browsertest.cc
index ecd1790e..7d31ea7 100644
--- a/chrome/browser/chromeos/policy/site_isolation_flag_handling_browsertest.cc
+++ b/chrome/browser/chromeos/policy/site_isolation_flag_handling_browsertest.cc
@@ -277,7 +277,7 @@
     // user session.
     auto fake_session_manager_client =
         std::make_unique<FakeSessionManagerClient>(
-            FakeSessionManagerClient::USE_HOST_POLICY);
+            FakeSessionManagerClient::PolicyStorageType::kOnDisk);
     fake_session_manager_client_ = fake_session_manager_client.get();
     DBusThreadManager::GetSetterForTesting()->SetSessionManagerClient(
         std::move(fake_session_manager_client));
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos_unittest.cc b/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos_unittest.cc
index 6b4e41b..c42c7d8 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos_unittest.cc
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos_unittest.cc
@@ -36,6 +36,7 @@
 using RetrievePolicyResponseType =
     chromeos::SessionManagerClient::RetrievePolicyResponseType;
 
+using testing::_;
 using testing::AllOf;
 using testing::Eq;
 using testing::Mock;
@@ -43,7 +44,6 @@
 using testing::Return;
 using testing::SaveArg;
 using testing::SetArgPointee;
-using testing::_;
 
 namespace policy {
 
@@ -149,10 +149,10 @@
 
   // Install an expectation on |observer_| for an error code.
   void ExpectError(CloudPolicyStore::Status error) {
-    EXPECT_CALL(observer_,
-                OnStoreError(AllOf(Eq(store_.get()),
-                                   Property(&CloudPolicyStore::status,
-                                            Eq(error)))));
+    EXPECT_CALL(
+        observer_,
+        OnStoreError(AllOf(Eq(store_.get()),
+                           Property(&CloudPolicyStore::status, Eq(error)))));
   }
 
   // Triggers a store_->Load() operation, handles the expected call to
@@ -324,7 +324,7 @@
 
 TEST_F(UserCloudPolicyStoreChromeOSTest, StoreFail) {
   // Let store policy fail.
-  session_manager_client_->set_store_user_policy_success(false);
+  session_manager_client_->set_store_policy_success(false);
 
   ExpectError(CloudPolicyStore::STATUS_STORE_ERROR);
   store_->Store(policy_.policy());
diff --git a/chrome/browser/chromeos/settings/device_settings_service_unittest.cc b/chrome/browser/chromeos/settings/device_settings_service_unittest.cc
index cd69b572..87cc8c4 100644
--- a/chrome/browser/chromeos/settings/device_settings_service_unittest.cc
+++ b/chrome/browser/chromeos/settings/device_settings_service_unittest.cc
@@ -152,7 +152,7 @@
   EXPECT_EQ(DeviceSettingsService::STORE_KEY_UNAVAILABLE,
             device_settings_service_.status());
 
-  session_manager_client_.set_store_device_policy_success(false);
+  session_manager_client_.set_store_policy_success(false);
   device_settings_service_.Store(
       device_policy_.GetCopy(),
       base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
diff --git a/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc b/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
index 1e70b8a..fcb142d3 100644
--- a/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
+++ b/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
@@ -98,7 +98,7 @@
 
   // Peek into the controller to see if it has the results we expect.
   const AutocompleteResult& result = autocomplete_controller->result();
-  ASSERT_EQ(4U, result.size()) << AutocompleteResultAsString(result);
+  ASSERT_EQ(3U, result.size()) << AutocompleteResultAsString(result);
 
   EXPECT_EQ(base::ASCIIToUTF16("kw d"), result.match_at(0).fill_into_edit);
   EXPECT_EQ(AutocompleteProvider::TYPE_KEYWORD,
@@ -117,11 +117,6 @@
   // Verify that the second omnibox extension suggestion is not deletable.
   EXPECT_FALSE(result.match_at(2).deletable);
 
-  EXPECT_EQ(base::ASCIIToUTF16("kw d"), result.match_at(3).fill_into_edit);
-  EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-            result.match_at(3).type);
-  EXPECT_FALSE(result.match_at(3).deletable);
-
 // This test portion is excluded from Mac because the Mac key combination
 // FN+SHIFT+DEL used to delete an omnibox suggestion cannot be reproduced.
 // This is because the FN key is not supported in interactive_test_util.h.
@@ -140,10 +135,9 @@
 
   // Verify that the first suggestion result was deleted. There should be one
   // less suggestion result, 3 now instead of 4.
-  ASSERT_EQ(3U, result.size());
+  ASSERT_EQ(2U, result.size());
   EXPECT_EQ(base::ASCIIToUTF16("kw d"), result.match_at(0).fill_into_edit);
   EXPECT_EQ(base::ASCIIToUTF16("kw n2"), result.match_at(1).fill_into_edit);
-  EXPECT_EQ(base::ASCIIToUTF16("kw d"), result.match_at(2).fill_into_edit);
 #endif
 }
 
@@ -171,7 +165,7 @@
   // Peek into the controller to see if it has the results we expect.
   {
     const AutocompleteResult& result = autocomplete_controller->result();
-    ASSERT_EQ(4U, result.size()) << AutocompleteResultAsString(result);
+    ASSERT_EQ(3U, result.size()) << AutocompleteResultAsString(result);
 
     EXPECT_EQ(base::ASCIIToUTF16("kw d"), result.match_at(0).fill_into_edit);
     EXPECT_EQ(AutocompleteProvider::TYPE_KEYWORD,
@@ -184,10 +178,6 @@
     EXPECT_EQ(base::ASCIIToUTF16("kw n2"), result.match_at(2).fill_into_edit);
     EXPECT_EQ(AutocompleteProvider::TYPE_KEYWORD,
               result.match_at(2).provider->type());
-
-    EXPECT_EQ(base::ASCIIToUTF16("kw d"), result.match_at(3).fill_into_edit);
-    EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-              result.match_at(3).type);
   }
 
   // Now clear the omnibox by pressing escape multiple times, focus the
diff --git a/chrome/browser/extensions/process_manager_browsertest.cc b/chrome/browser/extensions/process_manager_browsertest.cc
index bde2056c..03035c8 100644
--- a/chrome/browser/extensions/process_manager_browsertest.cc
+++ b/chrome/browser/extensions/process_manager_browsertest.cc
@@ -1589,8 +1589,13 @@
 
   content::WebContents* tab =
       browser()->tab_strip_model()->GetActiveWebContents();
-  GURL hosted_app_url("http://localhost/extensions/hosted_app/main.html");
-  NavigateToURL(hosted_app_url);
+  GURL hosted_app_url(embedded_test_server()->GetURL(
+      "localhost", "/extensions/hosted_app/main.html"));
+  {
+    content::TestNavigationObserver observer(tab);
+    NavigateToURL(hosted_app_url);
+    EXPECT_TRUE(observer.last_navigation_succeeded());
+  }
   EXPECT_EQ(hosted_app_url, tab->GetLastCommittedURL());
   ProcessManager* pm = ProcessManager::Get(profile());
   EXPECT_EQ(extension, pm->GetExtensionForWebContents(tab));
diff --git a/chrome/browser/mouse_events_interactive_uitest.cc b/chrome/browser/mouse_events_interactive_uitest.cc
index 7c584ed..f401bd0d 100644
--- a/chrome/browser/mouse_events_interactive_uitest.cc
+++ b/chrome/browser/mouse_events_interactive_uitest.cc
@@ -165,12 +165,13 @@
   EXPECT_EQ(success_title, done_title_watcher.WaitAndGetTitle());
 }
 
-#if defined(OS_WIN) || defined(OS_MACOSX)
+#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
 // Test that a mouseleave is not triggered when showing a modal dialog.
 // Sample regression: crbug.com/394672
 // TODO: Make test pass on OS_WIN and OS_MACOSX
 // OS_WIN: http://crbug.com/450138
 // OS_MACOSX: Missing automation provider support: http://crbug.com/45892.
+// OS_LINUX: Flaky http://crbug.com/838120
 #define MAYBE_ModalDialog DISABLED_ModalDialog
 #else
 #define MAYBE_ModalDialog ModalDialog
diff --git a/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc b/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc
index 94117b0..266fff7 100644
--- a/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/previews_ukm_observer.cc
@@ -8,14 +8,19 @@
 #include "base/time/time.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/loader/chrome_navigation_data.h"
+#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h"
+#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_factory.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
 #include "chrome/browser/previews/previews_infobar_delegate.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/common/page_load_metrics/page_load_timing.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h"
 #include "components/previews/content/previews_content_util.h"
 #include "components/ukm/ukm_source.h"
 #include "content/public/browser/navigation_handle.h"
+#include "content/public/browser/web_contents.h"
 #include "content/public/common/previews_state.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
@@ -30,6 +35,9 @@
 PreviewsUKMObserver::OnCommit(content::NavigationHandle* navigation_handle,
                               ukm::SourceId source_id) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  save_data_enabled_ = IsDataSaverEnabled(navigation_handle);
+
   // As documented in content/public/browser/navigation_handle.h, this
   // NavigationData is a clone of the NavigationData instance returned from
   // ResourceDispatcherHostDelegate::GetNavigationData during commit.
@@ -91,8 +99,10 @@
     const page_load_metrics::PageLoadExtraInfo& info) {
   // Only record previews types when they are active.
   if (!server_lofi_seen_ && !client_lofi_seen_ && !lite_page_seen_ &&
-      !noscript_seen_ && !origin_opt_out_occurred_)
+      !noscript_seen_ && !origin_opt_out_occurred_ && !save_data_enabled_) {
     return;
+  }
+
   ukm::builders::Previews builder(info.source_id);
   if (server_lofi_seen_)
     builder.Setserver_lofi(1);
@@ -106,6 +116,8 @@
     builder.Setopt_out(1);
   if (origin_opt_out_occurred_)
     builder.Setorigin_opt_out(1);
+  if (save_data_enabled_)
+    builder.Setsave_data_enabled(1);
   builder.Record(ukm::UkmRecorder::Get());
 }
 
@@ -131,4 +143,21 @@
     opt_out_occurred_ = true;
 }
 
+bool PreviewsUKMObserver::IsDataSaverEnabled(
+    content::NavigationHandle* navigation_handle) const {
+  Profile* profile = Profile::FromBrowserContext(
+      navigation_handle->GetWebContents()->GetBrowserContext());
+
+  data_reduction_proxy::DataReductionProxySettings*
+      data_reduction_proxy_settings =
+          DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
+              profile);
+  if (!data_reduction_proxy_settings) {
+    DCHECK(profile->IsOffTheRecord());
+    return false;
+  }
+
+  return data_reduction_proxy_settings->IsDataReductionProxyEnabled();
+}
+
 }  // namespace previews
diff --git a/chrome/browser/page_load_metrics/observers/previews_ukm_observer.h b/chrome/browser/page_load_metrics/observers/previews_ukm_observer.h
index c59286b4..9c5fadc4 100644
--- a/chrome/browser/page_load_metrics/observers/previews_ukm_observer.h
+++ b/chrome/browser/page_load_metrics/observers/previews_ukm_observer.h
@@ -37,6 +37,12 @@
                             extra_request_complete_info) override;
   void OnEventOccurred(const void* const event_key) override;
 
+ protected:
+  // Returns true if data saver feature is enabled in Chrome. Virtualized for
+  // testing.
+  virtual bool IsDataSaverEnabled(
+      content::NavigationHandle* navigation_handle) const;
+
  private:
   void RecordPreviewsTypes(const page_load_metrics::PageLoadExtraInfo& info);
 
@@ -46,6 +52,7 @@
   bool noscript_seen_ = false;
   bool opt_out_occurred_ = false;
   bool origin_opt_out_occurred_ = false;
+  bool save_data_enabled_ = false;
 
   SEQUENCE_CHECKER(sequence_checker_);
 
diff --git a/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc
index e0695334..8d86490e 100644
--- a/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc
@@ -23,6 +23,10 @@
 #include "content/public/test/web_contents_tester.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 
+namespace content {
+class NavigationHandle;
+}
+
 namespace previews {
 
 namespace {
@@ -49,12 +53,14 @@
                           bool data_reduction_proxy_used,
                           bool lite_page_received,
                           bool noscript_on,
-                          bool origin_opt_out_received)
+                          bool origin_opt_out_received,
+                          bool save_data_enabled)
       : web_contents_(web_contents),
         data_reduction_proxy_used_(data_reduction_proxy_used),
         lite_page_received_(lite_page_received),
         noscript_on_(noscript_on),
-        origin_opt_out_received_(origin_opt_out_received) {}
+        origin_opt_out_received_(origin_opt_out_received),
+        save_data_enabled_(save_data_enabled) {}
 
   ~TestPreviewsUKMObserver() override {}
 
@@ -95,11 +101,17 @@
   }
 
  private:
+  bool IsDataSaverEnabled(
+      content::NavigationHandle* navigation_handle) const override {
+    return save_data_enabled_;
+  }
+
   content::WebContents* web_contents_;
   bool data_reduction_proxy_used_;
   bool lite_page_received_;
   bool noscript_on_;
   bool origin_opt_out_received_;
+  const bool save_data_enabled_;
 
   DISALLOW_COPY_AND_ASSIGN(TestPreviewsUKMObserver);
 };
@@ -113,11 +125,13 @@
   void RunTest(bool data_reduction_proxy_used,
                bool lite_page_received,
                bool noscript_on,
-               bool origin_opt_out) {
+               bool origin_opt_out,
+               bool save_data_enabled) {
     data_reduction_proxy_used_ = data_reduction_proxy_used;
     lite_page_received_ = lite_page_received;
     noscript_on_ = noscript_on;
     origin_opt_out_ = origin_opt_out;
+    save_data_enabled_ = save_data_enabled;
     NavigateAndCommit(GURL(kDefaultTestUrl));
   }
 
@@ -126,11 +140,13 @@
                    bool lite_page_expected,
                    bool noscript_expected,
                    bool opt_out_expected,
-                   bool origin_opt_out_expected) {
+                   bool origin_opt_out_expected,
+                   bool save_data_enabled_expected) {
     using UkmEntry = ukm::builders::Previews;
     auto entries = test_ukm_recorder().GetEntriesByName(UkmEntry::kEntryName);
     if (!server_lofi_expected && !client_lofi_expected && !lite_page_expected &&
-        !noscript_expected && !opt_out_expected && !origin_opt_out_expected) {
+        !noscript_expected && !opt_out_expected && !origin_opt_out_expected &&
+        !save_data_enabled_expected) {
       EXPECT_EQ(0u, entries.size());
       return;
     }
@@ -150,6 +166,9 @@
       EXPECT_EQ(origin_opt_out_expected,
                 test_ukm_recorder().EntryHasMetric(
                     entry, UkmEntry::korigin_opt_outName));
+      EXPECT_EQ(save_data_enabled_expected,
+                test_ukm_recorder().EntryHasMetric(
+                    entry, UkmEntry::ksave_data_enabledName));
     }
   }
 
@@ -157,7 +176,7 @@
   void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
     tracker->AddObserver(std::make_unique<TestPreviewsUKMObserver>(
         web_contents(), data_reduction_proxy_used_, lite_page_received_,
-        noscript_on_, origin_opt_out_));
+        noscript_on_, origin_opt_out_, save_data_enabled_));
     // Data is only added to the first navigation after RunTest().
     data_reduction_proxy_used_ = false;
     lite_page_received_ = false;
@@ -170,50 +189,58 @@
   bool lite_page_received_ = false;
   bool noscript_on_ = false;
   bool origin_opt_out_ = false;
+  bool save_data_enabled_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(PreviewsUKMObserverTest);
 };
 
 TEST_F(PreviewsUKMObserverTest, NoPreviewSeen) {
   RunTest(false /* data_reduction_proxy_used */, false /* lite_page_received */,
-          false /* noscript_on */, false /* origin_opt_out */);
+          false /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
   NavigateToUntrackedUrl();
 
   ValidateUKM(false /* server_lofi_expected */,
               false /* client_lofi_expected */, false /* lite_page_expected */,
               false /* noscript_expected */, false /* opt_out_expected */,
-              false /* origin_opt_out_expected */);
+              false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, UntrackedPreviewTypeOptOut) {
   RunTest(false /* data_reduction_proxy_used */, false /* lite_page_received */,
-          false /* noscript_on */, false /* origin_opt_out */);
+          false /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
   observer()->BroadcastEventToObservers(
       PreviewsInfoBarDelegate::OptOutEventKey());
   NavigateToUntrackedUrl();
 
-  // Opt out should not be added sicne we don't track this type.
+  // Opt out should not be added since we don't track this type.
   ValidateUKM(false /* server_lofi_expected */,
               false /* client_lofi_expected */, false /* lite_page_expected */,
               false /* noscript_expected */, false /* opt_out_expected */,
-              false /* origin_opt_out_expected */);
+              false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, LitePageSeen) {
   RunTest(true /* data_reduction_proxy_used */, true /* lite_page_received */,
-          false /* noscript_on */, false /* origin_opt_out */);
+          false /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   NavigateToUntrackedUrl();
 
   ValidateUKM(false /* server_lofi_expected */,
               false /* client_lofi_expected */, true /* lite_page_expected */,
               false /* noscript_expected */, false /* opt_out_expected */,
-              false /* origin_opt_out_expected */);
+              false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, LitePageOptOut) {
   RunTest(true /* data_reduction_proxy_used */, true /* lite_page_received */,
-          false /* noscript_on */, false /* origin_opt_out */);
+          false /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   observer()->BroadcastEventToObservers(
       PreviewsInfoBarDelegate::OptOutEventKey());
@@ -222,24 +249,28 @@
   ValidateUKM(false /* server_lofi_expected */,
               false /* client_lofi_expected */, true /* lite_page_expected */,
               false /* noscript_expected */, true /* opt_out_expected */,
-              false /* origin_opt_out_expected */);
+              false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, NoScriptSeen) {
   RunTest(false /* data_reduction_proxy_used */, false /* lite_page_received */,
-          true /* noscript_on */, false /* origin_opt_out */);
+          true /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   NavigateToUntrackedUrl();
 
   ValidateUKM(false /* server_lofi_expected */,
               false /* client_lofi_expected */, false /* lite_page_expected */,
               true /* noscript_expected */, false /* opt_out_expected */,
-              false /* origin_opt_out_expected */);
+              false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, NoScriptOptOut) {
   RunTest(false /* data_reduction_proxy_used */, false /* lite_page_received */,
-          true /* noscript_on */, false /* origin_opt_out */);
+          true /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   observer()->BroadcastEventToObservers(
       PreviewsInfoBarDelegate::OptOutEventKey());
@@ -248,12 +279,14 @@
   ValidateUKM(false /* server_lofi_expected */,
               false /* client_lofi_expected */, false /* lite_page_expected */,
               true /* noscript_expected */, true /* opt_out_expected */,
-              false /* origin_opt_out_expected */);
+              false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, ClientLoFiSeen) {
   RunTest(false /* data_reduction_proxy_used */, false /* lite_page_received */,
-          false /* noscript_on */, false /* origin_opt_out */);
+          false /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data =
       std::make_unique<data_reduction_proxy::DataReductionProxyData>();
@@ -283,13 +316,14 @@
 
   ValidateUKM(false /* server_lofi_expected */, true /* client_lofi_expected */,
               false /* lite_page_expected */, false /* noscript_expected */,
-              false /* opt_out_expected */,
-              false /* origin_opt_out_expected */);
+              false /* opt_out_expected */, false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, ClientLoFiOptOut) {
   RunTest(false /* data_reduction_proxy_used */, false /* lite_page_received */,
-          false /* noscript_on */, false /* origin_opt_out */);
+          false /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data =
       std::make_unique<data_reduction_proxy::DataReductionProxyData>();
@@ -320,12 +354,14 @@
 
   ValidateUKM(false /* server_lofi_expected */, true /* client_lofi_expected */,
               false /* lite_page_expected */, false /* noscript_expected */,
-              true /* opt_out_expected */, false /* origin_opt_out_expected */);
+              true /* opt_out_expected */, false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, ServerLoFiSeen) {
   RunTest(true /* data_reduction_proxy_used */, false /* lite_page_received */,
-          false /* noscript_on */, false /* origin_opt_out */);
+          false /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data =
       std::make_unique<data_reduction_proxy::DataReductionProxyData>();
@@ -355,13 +391,14 @@
 
   ValidateUKM(true /* server_lofi_expected */, false /* client_lofi_expected */,
               false /* lite_page_expected */, false /* noscript_expected */,
-              false /* opt_out_expected */,
-              false /* origin_opt_out_expected */);
+              false /* opt_out_expected */, false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, ServerLoFiOptOut) {
   RunTest(true /* data_reduction_proxy_used */, false /* lite_page_received */,
-          false /* noscript_on */, false /* origin_opt_out */);
+          false /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data =
       std::make_unique<data_reduction_proxy::DataReductionProxyData>();
@@ -393,12 +430,14 @@
 
   ValidateUKM(true /* server_lofi_expected */, false /* client_lofi_expected */,
               false /* lite_page_expected */, false /* noscript_expected */,
-              true /* opt_out_expected */, false /* origin_opt_out_expected */);
+              true /* opt_out_expected */, false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, BothLoFiSeen) {
   RunTest(true /* data_reduction_proxy_used */, false /* lite_page_received */,
-          false /* noscript_on */, false /* origin_opt_out */);
+          false /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data1 =
       std::make_unique<data_reduction_proxy::DataReductionProxyData>();
@@ -433,13 +472,14 @@
   NavigateToUntrackedUrl();
   ValidateUKM(true /* server_lofi_expected */, true /* client_lofi_expected */,
               false /* lite_page_expected */, false /* noscript_expected */,
-              false /* opt_out_expected */,
-              false /* origin_opt_out_expected */);
+              false /* opt_out_expected */, false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, BothLoFiOptOut) {
   RunTest(true /* data_reduction_proxy_used */, false /* lite_page_received */,
-          false /* noscript_on */, false /* origin_opt_out */);
+          false /* noscript_on */, false /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data1 =
       std::make_unique<data_reduction_proxy::DataReductionProxyData>();
@@ -475,19 +515,36 @@
   NavigateToUntrackedUrl();
   ValidateUKM(true /* server_lofi_expected */, true /* client_lofi_expected */,
               false /* lite_page_expected */, false /* noscript_expected */,
-              true /* opt_out_expected */, false /* origin_opt_out_expected */);
+              true /* opt_out_expected */, false /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
 }
 
 TEST_F(PreviewsUKMObserverTest, OriginOptOut) {
   RunTest(false /* data_reduction_proxy_used */, false /* lite_page_received */,
-          false /* noscript_on */, true /* origin_opt_out */);
+          false /* noscript_on */, true /* origin_opt_out */,
+          false /* save_data_enabled */);
 
   NavigateToUntrackedUrl();
 
   ValidateUKM(false /* server_lofi_expected */,
               false /* client_lofi_expected */, false /* lite_page_expected */,
               false /* noscript_expected */, false /* opt_out_expected */,
-              true /* origin_opt_out_expected */);
+              true /* origin_opt_out_expected */,
+              false /* save_data_enabled_expected */);
+}
+
+TEST_F(PreviewsUKMObserverTest, DataSaverEnabled) {
+  RunTest(false /* data_reduction_proxy_used */, false /* lite_page_received */,
+          false /* noscript_on */, false /* origin_opt_out */,
+          true /* save_data_enabled */);
+
+  NavigateToUntrackedUrl();
+
+  ValidateUKM(false /* server_lofi_expected */,
+              false /* client_lofi_expected */, false /* lite_page_expected */,
+              false /* noscript_expected */, false /* opt_out_expected */,
+              false /* origin_opt_out_expected */,
+              true /* save_data_enabled_expected */);
 }
 
 }  // namespace
diff --git a/chrome/browser/resources/print_preview/data/destination_store.js b/chrome/browser/resources/print_preview/data/destination_store.js
index 0b33446..2a39d45 100644
--- a/chrome/browser/resources/print_preview/data/destination_store.js
+++ b/chrome/browser/resources/print_preview/data/destination_store.js
@@ -1056,7 +1056,7 @@
       const key = this.getKey_(destination);
       const existingDestination = this.destinationMap_[key];
       if (existingDestination == null) {
-        destination.isRecent |=
+        destination.isRecent = destination.isRecent ||
             this.recentDestinations_.some(function(recent) {
               return (
                   destination.id == recent.id &&
diff --git a/chrome/browser/safe_browsing/incident_reporting/module_integrity_verifier_win_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/module_integrity_verifier_win_unittest.cc
index 452c520..31ada2d0 100644
--- a/chrome/browser/safe_browsing/incident_reporting/module_integrity_verifier_win_unittest.cc
+++ b/chrome/browser/safe_browsing/incident_reporting/module_integrity_verifier_win_unittest.cc
@@ -20,6 +20,7 @@
 #include "base/scoped_native_library.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/win/pe_image.h"
+#include "build/build_config.h"
 #include "chrome/browser/safe_browsing/incident_reporting/module_integrity_unittest_util_win.h"
 #include "components/safe_browsing/proto/csd.pb.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -234,7 +235,14 @@
             (uint8_t)state.modification(1).modified_bytes()[0]);
 }
 
-TEST_F(SafeBrowsingModuleVerifierWinTest, VerifyModuleLongModification) {
+// TODO(crbug.com/838124) The test is flaky on Win7 debug.
+#if defined(OS_WIN) && !defined(NDEBUG)
+#define MAYBE_VerifyModuleLongModification DISABLED_VerifyModuleLongModification
+#else
+#define MAYBE_VerifyModuleLongModification VerifyModuleLongModification
+#endif
+
+TEST_F(SafeBrowsingModuleVerifierWinTest, MAYBE_VerifyModuleLongModification) {
   ModuleState state;
   int num_bytes_different = 0;
 
diff --git a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
index 12a52d1..0b9a48b 100644
--- a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
+++ b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
@@ -76,6 +76,24 @@
 
 namespace {
 
+const char kCreateFilesystemUrlJavascript[] =
+    "window.webkitRequestFileSystem(window.TEMPORARY, 4096, function(fs) {"
+    "  fs.root.getFile('test.html', {create: true}, function(fileEntry) {"
+    "    fileEntry.createWriter(function(writer) {"
+    "      writer.onwriteend = function(e) {"
+    "        window.domAutomationController.send(fileEntry.toURL());"
+    "      };"
+    "      var blob = new Blob(['<html>hello</html>'], {type: 'text/html'});"
+    "      writer.write(blob);"
+    "    });"
+    "  });"
+    "});";
+
+const char kCreateBlobUrlJavascript[] =
+    "var blob = new Blob(['<html>hello</html>'],"
+    "                    {type: 'text/html'});"
+    "window.domAutomationController.send(URL.createObjectURL(blob));";
+
 enum CertificateStatus { VALID_CERTIFICATE, INVALID_CERTIFICATE };
 
 const base::FilePath::CharType kDocRoot[] =
@@ -443,9 +461,11 @@
   }
 
   // Navigates to an empty page and runs |javascript| to create a URL with with
-  // a scheme of |scheme|. Expects a security level of HTTP_SHOW_WARNING.
+  // a scheme of |scheme|. Expects a security level of NONE if
+  // |use_secure_inner_origin| is true and HTTP_SHOW_WARNING otherwise.
   void TestBlobOrFilesystemURL(const std::string& scheme,
-                               const std::string& javascript) {
+                               const std::string& javascript,
+                               bool use_secure_inner_origin) {
     content::WebContents* contents =
         browser()->tab_strip_model()->GetActiveWebContents();
     ASSERT_TRUE(contents);
@@ -456,7 +476,9 @@
 
     ui_test_utils::NavigateToURL(
         browser(),
-        GetURLWithNonLocalHostname(embedded_test_server(), "/empty.html"));
+        GetURLWithNonLocalHostname(
+            use_secure_inner_origin ? &https_server_ : embedded_test_server(),
+            "/empty.html"));
 
     // Create a URL and navigate to it.
     std::string blob_or_filesystem_url;
@@ -473,7 +495,9 @@
         contents->GetController().GetVisibleEntry();
     ASSERT_TRUE(entry);
 
-    EXPECT_EQ(security_state::HTTP_SHOW_WARNING, security_info.security_level);
+    EXPECT_EQ(use_secure_inner_origin ? security_state::NONE
+                                      : security_state::HTTP_SHOW_WARNING,
+              security_info.security_level);
   }
 
   net::EmbeddedTestServer https_server_;
@@ -1267,42 +1291,33 @@
 // Tests the default security level on blob URLs.
 IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTest,
                        DefaultSecurityLevelOnBlobUrl) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeatureWithParameters(
-      security_state::features::kMarkHttpAsFeature,
-      {{security_state::features::kMarkHttpAsFeatureParameterName,
-        security_state::features::kMarkHttpAsParameterWarning}});
-  TestBlobOrFilesystemURL(
-      "blob",
-      "var blob = new Blob(['<html>hello</html>'],"
-      "                    {type: 'text/html'});"
-      "window.domAutomationController.send(URL.createObjectURL(blob));");
+  TestBlobOrFilesystemURL("blob", kCreateBlobUrlJavascript,
+                          false /* use_secure_inner_origin */);
 }
 
 // Same as DefaultSecurityLevelOnBlobUrl, but instead of a blob URL,
 // this creates a filesystem URL.
 IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTest,
                        DefaultSecurityLevelOnFilesystemUrl) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeatureWithParameters(
-      security_state::features::kMarkHttpAsFeature,
-      {{security_state::features::kMarkHttpAsFeatureParameterName,
-        security_state::features::kMarkHttpAsParameterWarning}});
-  TestBlobOrFilesystemURL(
-      "filesystem",
-      "window.webkitRequestFileSystem(window.TEMPORARY, 4096, function(fs) {"
-      "  fs.root.getFile('test.html', {create: true}, function(fileEntry) {"
-      "    fileEntry.createWriter(function(writer) {"
-      "      writer.onwriteend = function(e) {"
-      "        window.domAutomationController.send(fileEntry.toURL());"
-      "      };"
-      "      var blob ="
-      "          new Blob(['<html>hello</html>'],"
-      "                   {type: 'text/html'});"
-      "      writer.write(blob);"
-      "    });"
-      "  });"
-      "});");
+  TestBlobOrFilesystemURL("filesystem", kCreateFilesystemUrlJavascript,
+                          false /* use_secure_inner_origin */);
+}
+
+// Tests the default security level on blob URLs with a secure inner origin.
+IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTest,
+                       DefaultSecurityLevelOnSecureBlobUrl) {
+  SetUpMockCertVerifierForHttpsServer(0, net::OK);
+  TestBlobOrFilesystemURL("blob", kCreateBlobUrlJavascript,
+                          true /* use_secure_inner_origin */);
+}
+
+// Same as DefaultSecurityLevelOnBlobUrl, but instead of a blob URL,
+// this creates a filesystem URL with a secure inner origin.
+IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTest,
+                       DefaultSecurityLevelOnSecureFilesystemUrl) {
+  SetUpMockCertVerifierForHttpsServer(0, net::OK);
+  TestBlobOrFilesystemURL("filesystem", kCreateFilesystemUrlJavascript,
+                          true /* use_secure_inner_origin */);
 }
 
 // Tests that when an invisible password field is present on an HTTP page load,
diff --git a/chrome/browser/sync/test/integration/updated_progress_marker_checker.cc b/chrome/browser/sync/test/integration/updated_progress_marker_checker.cc
index ece2e84..94f8c0d 100644
--- a/chrome/browser/sync/test/integration/updated_progress_marker_checker.cc
+++ b/chrome/browser/sync/test/integration/updated_progress_marker_checker.cc
@@ -26,7 +26,17 @@
   }
 
   const syncer::SyncCycleSnapshot& snap = service()->GetLastCycleSnapshot();
-  return snap.model_neutral_state().num_successful_commits == 0 &&
+  // Assuming the lack of ongoing remote changes, the progress marker can be
+  // considered updated when:
+  // 1. Progress markers are non-empty (which discards the default value for
+  //    GetLastCycleSnapshot() prior to the first sync cycle).
+  // 2. Our last sync cycle committed no changes (because commits are followed
+  //    by the test-only 'self-notify' cycle).
+  // 3. Sync is still active (e.g. no failures).
+  // 4. No pending local changes (which will ultimately generate new progress
+  //    markers once submitted to the server).
+  return !snap.download_progress_markers().empty() &&
+         snap.model_neutral_state().num_successful_commits == 0 &&
          service()->IsSyncActive() && !has_unsynced_items_.value();
 }
 
diff --git a/chrome/browser/translate/chrome_translate_client.cc b/chrome/browser/translate/chrome_translate_client.cc
index 64c3110..1f12f78 100644
--- a/chrome/browser/translate/chrome_translate_client.cc
+++ b/chrome/browser/translate/chrome_translate_client.cc
@@ -49,6 +49,7 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/web_contents.h"
 #include "third_party/metrics_proto/translate_event.pb.h"
+#include "ui/base/ui_base_features.h"
 #include "url/gurl.h"
 
 namespace {
@@ -231,7 +232,7 @@
   if (error_type != translate::TranslateErrors::NONE)
     step = translate::TRANSLATE_STEP_TRANSLATE_ERROR;
 
-#if !defined(USE_AURA)
+#if !defined(USE_AURA) && !BUILDFLAG(MAC_VIEWS_BROWSER)
   if (!TranslateService::IsTranslateBubbleEnabled()) {
     // Infobar UI.
     translate::TranslateInfoBarDelegate::Create(
diff --git a/chrome/browser/translate/translate_browsertest.cc b/chrome/browser/translate/translate_browsertest.cc
index ba5da76..9a1af87 100644
--- a/chrome/browser/translate/translate_browsertest.cc
+++ b/chrome/browser/translate/translate_browsertest.cc
@@ -2,9 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "ui/base/ui_base_features.h"
+
 // This entire test suite relies on the translate infobar which has been removed
 // from Aura. The file should be ported to use the bubble.
-#if !defined(USE_AURA)
+#if !defined(USE_AURA) && !BUILDFLAG(MAC_VIEWS_BROWSER)
 
 #include <stddef.h>
 
@@ -34,7 +36,6 @@
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "net/url_request/test_url_fetcher_factory.h"
 #include "net/url_request/url_fetcher_delegate.h"
-#include "ui/base/ui_base_features.h"
 
 namespace {
 
diff --git a/chrome/browser/ui/ash/launcher/crostini_app_window_shelf_controller.cc b/chrome/browser/ui/ash/launcher/crostini_app_window_shelf_controller.cc
index 1844a81..b96f6fb7 100644
--- a/chrome/browser/ui/ash/launcher/crostini_app_window_shelf_controller.cc
+++ b/chrome/browser/ui/ash/launcher/crostini_app_window_shelf_controller.cc
@@ -12,12 +12,17 @@
 #include "chrome/browser/chromeos/crostini/crostini_registry_service.h"
 #include "chrome/browser/chromeos/crostini/crostini_registry_service_factory.h"
 #include "chrome/browser/chromeos/crostini/crostini_util.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/ash/launcher/app_window_base.h"
 #include "chrome/browser/ui/ash/launcher/app_window_launcher_item_controller.h"
 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/browser_window.h"
 #include "components/exo/shell_surface.h"
 #include "components/user_manager/user_manager.h"
+#include "extensions/browser/app_window/app_window.h"
 #include "ui/aura/client/aura_constants.h"
 #include "ui/aura/env.h"
 #include "ui/base/base_window.h"
@@ -31,9 +36,11 @@
   aura::Env* env = aura::Env::GetInstanceDontCreate();
   if (env)
     env->AddObserver(this);
+  BrowserList::AddObserver(this);
 }
 
 CrostiniAppWindowShelfController::~CrostiniAppWindowShelfController() {
+  BrowserList::RemoveObserver(this);
   for (auto* window : observed_windows_)
     window->RemoveObserver(this);
   aura::Env* env = aura::Env::GetInstanceDontCreate();
@@ -141,6 +148,18 @@
   RegisterAppWindow(window, shelf_app_id);
 }
 
+void CrostiniAppWindowShelfController::OnBrowserAdded(Browser* browser) {
+  // The Crostini Terminal opens in Crosh (a v1 App), but we override the
+  // Browser's app name so we can properly detect it.
+  if (!browser->is_type_popup() || !browser->is_app())
+    return;
+  base::Optional<std::string> app_id =
+      CrostiniAppIdFromAppName(browser->app_name());
+  if (!app_id)
+    return;
+  RegisterAppWindow(browser->window()->GetNativeWindow(), app_id.value());
+}
+
 void CrostiniAppWindowShelfController::RegisterAppWindow(
     aura::Window* window,
     const std::string& shelf_app_id) {
diff --git a/chrome/browser/ui/ash/launcher/crostini_app_window_shelf_controller.h b/chrome/browser/ui/ash/launcher/crostini_app_window_shelf_controller.h
index cbfc17088..0d9174e 100644
--- a/chrome/browser/ui/ash/launcher/crostini_app_window_shelf_controller.h
+++ b/chrome/browser/ui/ash/launcher/crostini_app_window_shelf_controller.h
@@ -13,6 +13,7 @@
 #include "base/scoped_observer.h"
 #include "base/time/time.h"
 #include "chrome/browser/ui/ash/launcher/app_window_launcher_controller.h"
+#include "chrome/browser/ui/browser_list_observer.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "ui/aura/env_observer.h"
 #include "ui/aura/window_observer.h"
@@ -29,7 +30,8 @@
 // Chrome OS shelf.
 class CrostiniAppWindowShelfController : public AppWindowLauncherController,
                                          public aura::EnvObserver,
-                                         public aura::WindowObserver {
+                                         public aura::WindowObserver,
+                                         public BrowserListObserver {
  public:
   explicit CrostiniAppWindowShelfController(ChromeLauncherController* owner);
   ~CrostiniAppWindowShelfController() override;
@@ -44,6 +46,9 @@
   void OnWindowVisibilityChanged(aura::Window* window, bool visible) override;
   void OnWindowDestroying(aura::Window* window) override;
 
+  // BrowserListObserver:
+  void OnBrowserAdded(Browser* browser) override;
+
  private:
   using AuraWindowToAppWindow =
       std::map<aura::Window*, std::unique_ptr<AppWindowBase>>;
diff --git a/chrome/browser/ui/extensions/app_launch_params.h b/chrome/browser/ui/extensions/app_launch_params.h
index 9eef40c..febd5ae 100644
--- a/chrome/browser/ui/extensions/app_launch_params.h
+++ b/chrome/browser/ui/extensions/app_launch_params.h
@@ -63,6 +63,9 @@
   // position and dimensions.
   gfx::Rect override_bounds;
 
+  // If non-empty, use override_app_name in place of generating one normally.
+  std::string override_app_name;
+
   // If non-empty, information from the command line may be passed on to the
   // application.
   base::CommandLine command_line;
diff --git a/chrome/browser/ui/extensions/application_launch.cc b/chrome/browser/ui/extensions/application_launch.cc
index e4739a3..3c267a1 100644
--- a/chrome/browser/ui/extensions/application_launch.cc
+++ b/chrome/browser/ui/extensions/application_launch.cc
@@ -343,10 +343,13 @@
   Profile* const profile = params.profile;
   const Extension* const extension = GetExtension(params);
 
-  std::string app_name =
-      extension
-          ? web_app::GenerateApplicationNameFromExtensionId(extension->id())
-          : web_app::GenerateApplicationNameFromURL(url);
+  std::string app_name;
+  if (!params.override_app_name.empty())
+    app_name = params.override_app_name;
+  else if (extension)
+    app_name = web_app::GenerateApplicationNameFromExtensionId(extension->id());
+  else
+    app_name = web_app::GenerateApplicationNameFromURL(url);
 
   gfx::Rect initial_bounds;
   if (!params.override_bounds.IsEmpty()) {
diff --git a/chrome/browser/ui/fast_unload_controller.cc b/chrome/browser/ui/fast_unload_controller.cc
index faf88129..41f8398 100644
--- a/chrome/browser/ui/fast_unload_controller.cc
+++ b/chrome/browser/ui/fast_unload_controller.cc
@@ -428,8 +428,14 @@
   }
 
   if (is_calling_before_unload_handlers()) {
+    base::OnceCallback<void(bool)> on_close_confirmed = on_close_confirmed_;
+    // Reset |on_close_confirmed_| in case the callback tests
+    // |is_calling_before_unload_handlers()|, we want to return that calling
+    // is complete.
+    if (tabs_needing_unload_.empty())
+      on_close_confirmed_.Reset();
     if (!skip_beforeunload)
-      on_close_confirmed_.Run(true);
+      std::move(on_close_confirmed).Run(true);
     return;
   }
 
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 3c72a8f..b775c5e 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -682,14 +682,7 @@
 }
 
 void BrowserView::UpdateTitleBar() {
-#if !defined(OS_CHROMEOS)
-  if (ShouldShowWindowTitle())
-    frame_->UpdateWindowTitle();
-#else
-  // ChromeOS needs this to be called even on a tabbed browser to
-  // set the accessible title.
   frame_->UpdateWindowTitle();
-#endif
   if (ShouldShowWindowIcon() && !loading_animation_timer_.IsRunning())
     frame_->UpdateWindowIcon();
 }
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
index ba1daff..215295c9 100644
--- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
@@ -6,6 +6,8 @@
 
 #include <type_traits>
 
+#include "ash/public/interfaces/constants.mojom.h"
+#include "ash/public/interfaces/event_rewriter_controller.mojom.h"
 #include "ash/shell.h"
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
@@ -13,7 +15,6 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
 #include "chrome/browser/chromeos/accessibility/magnification_manager.h"
-#include "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h"
 #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h"
 #include "chrome/browser/chromeos/login/helper.h"
 #include "chrome/browser/chromeos/login/lock/screen_locker.h"
@@ -42,7 +43,9 @@
 #include "components/prefs/pref_service.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/version_info/version_info.h"
+#include "content/public/common/service_manager_connection.h"
 #include "google_apis/google_api_keys.h"
+#include "services/service_manager/public/cpp/connector.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/display/display.h"
 #include "ui/display/manager/display_manager.h"
@@ -303,11 +306,14 @@
     const std::string& screen_name) {
   const OobeScreen screen = GetOobeScreenFromName(screen_name);
   oobe_ui_->CurrentScreenChanged(screen);
-  // TODO(mash): Support EventRewriterController; see crbug.com/647781
-  if (!ash_util::IsRunningInMash()) {
-    KeyboardDrivenEventRewriter::GetInstance()->SetArrowToTabRewritingEnabled(
-        screen == OobeScreen::SCREEN_OOBE_EULA);
-  }
+
+  content::ServiceManagerConnection* connection =
+      content::ServiceManagerConnection::GetForProcess();
+  ash::mojom::EventRewriterControllerPtr event_rewriter_controller_ptr;
+  connection->GetConnector()->BindInterface(ash::mojom::kServiceName,
+                                            &event_rewriter_controller_ptr);
+  event_rewriter_controller_ptr->SetArrowToTabRewritingEnabled(
+      screen == OobeScreen::SCREEN_OOBE_EULA);
 }
 
 void CoreOobeHandler::HandleEnableHighContrast(bool enabled) {
diff --git a/chrome/browser/unload_browsertest.cc b/chrome/browser/unload_browsertest.cc
index c6c393f..ff81d2c9 100644
--- a/chrome/browser/unload_browsertest.cc
+++ b/chrome/browser/unload_browsertest.cc
@@ -126,15 +126,16 @@
   int aborts_;
 };
 
-class UnloadTest : public InProcessBrowserTest {
+class UnloadTestBase : public InProcessBrowserTest {
  public:
   void SetUpCommandLine(base::CommandLine* command_line) override {
     const testing::TestInfo* const test_info =
         testing::UnitTest::GetInstance()->current_test_info();
-    if (strcmp(test_info->name(),
-        "BrowserCloseTabWhenOtherTabHasListener") == 0) {
+    if (strstr(test_info->name(), "BrowserCloseTabWhenOtherTabHasListener") !=
+        nullptr) {
       command_line->AppendSwitch(switches::kDisablePopupBlocking);
-    } else if (strcmp(test_info->name(), "BrowserTerminateBeforeUnload") == 0) {
+    } else if (strstr(test_info->name(), "BrowserTerminateBeforeUnload") !=
+               nullptr) {
 #if defined(OS_POSIX)
       DisableSIGTERMHandling();
 #endif
@@ -205,12 +206,24 @@
   }
 };
 
+class UnloadTest : public UnloadTestBase,
+                   public testing::WithParamInterface<bool> {
+ public:
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    UnloadTestBase::SetUpCommandLine(command_line);
+    if (GetParam())
+      command_line->AppendSwitch(switches::kEnableFastUnload);
+  }
+};
+
+INSTANTIATE_TEST_CASE_P(, UnloadTest, testing::Bool());
+
 // Navigate to a page with an infinite unload handler.
 // Then two async crosssite requests to ensure
 // we don't get confused and think we're closing the tab.
 //
 // This test is flaky on the valgrind UI bots. http://crbug.com/39057
-IN_PROC_BROWSER_TEST_F(UnloadTest, CrossSiteInfiniteUnloadAsync) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, CrossSiteInfiniteUnloadAsync) {
   // Tests makes no sense in single-process mode since the renderer is hung.
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kSingleProcess))
@@ -224,7 +237,7 @@
 // Navigate to a page with an infinite unload handler.
 // Then two sync crosssite requests to ensure
 // we correctly nav to each one.
-IN_PROC_BROWSER_TEST_F(UnloadTest, CrossSiteInfiniteUnloadSync) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, CrossSiteInfiniteUnloadSync) {
   // Tests makes no sense in single-process mode since the renderer is hung.
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kSingleProcess))
@@ -240,7 +253,7 @@
 // we don't get confused and think we're closing the tab.
 // This test is flaky on the valgrind UI bots. http://crbug.com/39057 and
 // http://crbug.com/86469
-IN_PROC_BROWSER_TEST_F(UnloadTest, CrossSiteInfiniteBeforeUnloadAsync) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, CrossSiteInfiniteBeforeUnloadAsync) {
   // Tests makes no sense in single-process mode since the renderer is hung.
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kSingleProcess))
@@ -255,7 +268,7 @@
 // Then two two sync crosssite requests to ensure
 // we correctly nav to each one.
 // Flaky on Win, Linux, and Mac; http://crbug.com/462671.
-IN_PROC_BROWSER_TEST_F(UnloadTest, DISABLED_CrossSiteInfiniteBeforeUnloadSync) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, DISABLED_CrossSiteInfiniteBeforeUnloadSync) {
   // Tests makes no sense in single-process mode since the renderer is hung.
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kSingleProcess))
@@ -267,19 +280,19 @@
 }
 
 // Tests closing the browser on a page with no unload listeners registered.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseNoUnloadListeners) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserCloseNoUnloadListeners) {
   LoadUrlAndQuitBrowser(NOLISTENERS_HTML, "nolisteners");
 }
 
 // Tests closing the browser on a page with an unload listener registered.
 // Test marked as flaky in http://crbug.com/51698
-IN_PROC_BROWSER_TEST_F(UnloadTest, DISABLED_BrowserCloseUnload) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, DISABLED_BrowserCloseUnload) {
   LoadUrlAndQuitBrowser(UNLOAD_HTML, "unload");
 }
 
 // Tests closing the browser with a beforeunload handler and clicking
 // OK in the beforeunload confirm dialog.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseBeforeUnloadOK) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserCloseBeforeUnloadOK) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
   PrepareForDialog(browser());
 
@@ -294,7 +307,7 @@
 // Tests closing the browser with a beforeunload handler and clicking
 // CANCEL in the beforeunload confirm dialog.
 // If this test flakes, reopen http://crbug.com/123110
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseBeforeUnloadCancel) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserCloseBeforeUnloadCancel) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
   PrepareForDialog(browser());
   chrome::CloseWindow(browser());
@@ -321,7 +334,7 @@
 
 // Tests closing the browser by BrowserList::CloseAllBrowsersWithProfile,
 // on a page with no unload listeners registered.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseNoUnloadListeners) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserListCloseNoUnloadListeners) {
   NavigateToDataURL(NOLISTENERS_HTML, "nolisteners");
 
   content::WindowedNotificationObserver window_observer(
@@ -340,7 +353,7 @@
 
 // Tests closing the browser by BrowserList::CloseAllBrowsersWithProfile, with a
 // beforeunload handler and clicking Leave in the beforeunload confirm dialog.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseBeforeUnloadOK) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserListCloseBeforeUnloadOK) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
   PrepareForDialog(browser());
 
@@ -361,7 +374,7 @@
 
 // Tests closing the browser by BrowserList::CloseAllBrowsersWithProfile, with a
 // beforeunload handler and clicking Stay in the beforeunload confirm dialog.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseBeforeUnloadCancel) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserListCloseBeforeUnloadCancel) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
   PrepareForDialog(browser());
 
@@ -397,7 +410,7 @@
 
 // Tests double calls to BrowserList::CloseAllBrowsersWithProfile, with a
 // beforeunload handler and clicking Leave in the beforeunload confirm dialog.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListDoubleCloseBeforeUnloadOK) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserListDoubleCloseBeforeUnloadOK) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
   PrepareForDialog(browser());
 
@@ -423,7 +436,7 @@
 
 // Tests double calls to BrowserList::CloseAllBrowsersWithProfile, with a
 // beforeunload handler and clicking Stay in the beforeunload confirm dialog.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListDoubleCloseBeforeUnloadCancel) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserListDoubleCloseBeforeUnloadCancel) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
   PrepareForDialog(browser());
 
@@ -465,7 +478,7 @@
 // Tests closing the browser by BrowserList::CloseAllBrowsersWithProfile, with
 // a null success callback, a beforeunload handler and clicking Leave in the
 // beforeunload confirm dialog. The test succeed if no crash happens.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseBeforeUnloadNullCallbackOk) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserListCloseBeforeUnloadNullCallbackOk) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
   PrepareForDialog(browser());
 
@@ -483,7 +496,7 @@
 // Tests closing the browser by BrowserList::CloseAllBrowsersWithProfile, with
 // a null failure callback, a beforeunload handler and clicking Stay in the
 // beforeunload confirm dialog. The test succeed if no crash happens.
-IN_PROC_BROWSER_TEST_F(UnloadTest,
+IN_PROC_BROWSER_TEST_P(UnloadTest,
                        BrowserListCloseBeforeUnloadNullCallbackCancel) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
   PrepareForDialog(browser());
@@ -516,7 +529,7 @@
 // Tests terminating the browser with a beforeunload handler.
 // Currently only ChromeOS shuts down gracefully.
 #if defined(OS_CHROMEOS)
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserTerminateBeforeUnload) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserTerminateBeforeUnload) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
   EXPECT_EQ(kill(base::GetCurrentProcessHandle(), SIGTERM), 0);
 }
@@ -525,7 +538,7 @@
 // Tests closing the browser and clicking OK in the beforeunload confirm dialog
 // if an inner frame has the focus.
 // If this flakes, use http://crbug.com/32615 and http://crbug.com/45675
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseWithInnerFocusedFrame) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserCloseWithInnerFocusedFrame) {
   NavigateToDataURL(INNER_FRAME_WITH_FOCUS_HTML, "innerframewithfocus");
   PrepareForDialog(browser());
 
@@ -539,14 +552,14 @@
 
 // Tests closing the browser with a beforeunload handler that takes forever
 // by running an infinite loop.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseInfiniteBeforeUnload) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserCloseInfiniteBeforeUnload) {
   LoadUrlAndQuitBrowser(INFINITE_BEFORE_UNLOAD_HTML,
                         "infinitebeforeunload");
 }
 
 // Tests closing the browser on a page with an unload listener registered where
 // the unload handler has an infinite loop.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseInfiniteUnload) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserCloseInfiniteUnload) {
   // Tests makes no sense in single-process mode since the renderer is hung.
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kSingleProcess))
@@ -557,7 +570,7 @@
 
 // Tests closing the browser with a beforeunload handler that hangs.
 // If this flakes, use http://crbug.com/78803 and http://crbug.com/86469
-IN_PROC_BROWSER_TEST_F(UnloadTest, DISABLED_BrowserCloseInfiniteBeforeUnload) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, DISABLED_BrowserCloseInfiniteBeforeUnload) {
   // Tests makes no sense in single-process mode since the renderer is hung.
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kSingleProcess))
@@ -569,7 +582,7 @@
 // Tests closing the browser on a page with an unload listener registered where
 // the unload handler has an infinite loop followed by an alert.
 // If this flakes, use http://crbug.com/86469
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseInfiniteUnloadAlert) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserCloseInfiniteUnloadAlert) {
   // Tests makes no sense in single-process mode since the renderer is hung.
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kSingleProcess))
@@ -581,7 +594,7 @@
 // Tests closing the browser with a beforeunload handler that hangs then
 // pops up an alert.
 // If this flakes, use http://crbug.com/78803 and http://crbug.com/86469.
-IN_PROC_BROWSER_TEST_F(UnloadTest,
+IN_PROC_BROWSER_TEST_P(UnloadTest,
                        DISABLED_BrowserCloseInfiniteBeforeUnloadAlert) {
   // Tests makes no sense in single-process mode since the renderer is hung.
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
@@ -594,13 +607,13 @@
 
 // Tests closing the browser on a page with an unload listener registered where
 // the unload handler has an 2 second long loop followed by an alert.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseTwoSecondUnloadAlert) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserCloseTwoSecondUnloadAlert) {
   LoadUrlAndQuitBrowser(TWO_SECOND_UNLOAD_ALERT_HTML, "twosecondunloadalert");
 }
 
 // Tests closing the browser with a beforeunload handler that takes
 // two seconds to run then pops up an alert.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseTwoSecondBeforeUnloadAlert) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserCloseTwoSecondBeforeUnloadAlert) {
   LoadUrlAndQuitBrowser(TWO_SECOND_BEFORE_UNLOAD_ALERT_HTML,
                         "twosecondbeforeunloadalert");
 }
@@ -610,7 +623,7 @@
 // handler can be closed.
 // If this flakes, see http://crbug.com/45162, http://crbug.com/45281 and
 // http://crbug.com/86769.
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseTabWhenOtherTabHasListener) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserCloseTabWhenOtherTabHasListener) {
   NavigateToDataURL(CLOSE_TAB_WHEN_OTHER_TAB_HAS_LISTENER, "only_one_unload");
 
   // Simulate a click to force user_gesture to true; if we don't, the resulting
@@ -637,7 +650,7 @@
   CheckTitle("only_one_unload");
 }
 
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListForceCloseNoUnloadListeners) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserListForceCloseNoUnloadListeners) {
   NavigateToDataURL(NOLISTENERS_HTML, "nolisteners");
 
   content::WindowedNotificationObserver window_observer(
@@ -654,7 +667,7 @@
   EXPECT_EQ(0, unload_results.get_aborts());
 }
 
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListForceCloseWithBeforeUnload) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserListForceCloseWithBeforeUnload) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
 
   content::WindowedNotificationObserver window_observer(
@@ -671,7 +684,7 @@
   EXPECT_EQ(0, unload_results.get_aborts());
 }
 
-IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListForceCloseAfterNormalClose) {
+IN_PROC_BROWSER_TEST_P(UnloadTest, BrowserListForceCloseAfterNormalClose) {
   NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload");
 
   content::WindowedNotificationObserver window_observer(
@@ -693,10 +706,10 @@
   EXPECT_EQ(0, unload_results.get_aborts());
 }
 
-class FastUnloadTest : public UnloadTest {
+class FastUnloadTest : public UnloadTestBase {
  public:
   void SetUpCommandLine(base::CommandLine* command_line) override {
-    UnloadTest::SetUpCommandLine(command_line);
+    UnloadTestBase::SetUpCommandLine(command_line);
     command_line->AppendSwitch(switches::kEnableFastUnload);
   }
 
diff --git a/chrome/browser/vr/elements/content_element_unittest.cc b/chrome/browser/vr/elements/content_element_unittest.cc
index e97e635..f5ca8b6 100644
--- a/chrome/browser/vr/elements/content_element_unittest.cc
+++ b/chrome/browser/vr/elements/content_element_unittest.cc
@@ -110,7 +110,7 @@
  protected:
   std::unique_ptr<StrictMock<MockTextInputDelegate>> text_input_delegate_;
   std::unique_ptr<TestContentInputForwarder> input_forwarder_;
-  testing::Sequence in_sequence_;
+  testing::InSequence in_sequence_;
 };
 
 TEST_F(ContentElementSceneTest, WebInputFocus) {
@@ -119,21 +119,21 @@
   // Set mock keyboard delegate.
   auto* kb = static_cast<Keyboard*>(scene_->GetUiElementByName(kKeyboard));
   auto kb_delegate = std::make_unique<StrictMock<MockKeyboardDelegate>>();
-  EXPECT_CALL(*kb_delegate, HideKeyboard()).InSequence(in_sequence_);
+  EXPECT_CALL(*kb_delegate, HideKeyboard());
   kb->SetKeyboardDelegate(kb_delegate.get());
 
   // Editing web input.
-  EXPECT_CALL(*text_input_delegate_, RequestFocus(_)).InSequence(in_sequence_);
-  EXPECT_CALL(*kb_delegate, ShowKeyboard()).InSequence(in_sequence_);
-  EXPECT_CALL(*kb_delegate, OnBeginFrame()).InSequence(in_sequence_);
-  EXPECT_CALL(*kb_delegate, SetTransform(_)).InSequence(in_sequence_);
+  EXPECT_CALL(*text_input_delegate_, RequestFocus(_));
+  EXPECT_CALL(*kb_delegate, ShowKeyboard());
+  EXPECT_CALL(*kb_delegate, OnBeginFrame());
+  EXPECT_CALL(*kb_delegate, SetTransform(_));
   ui_->ShowSoftInput(true);
   EXPECT_TRUE(OnBeginFrame());
 
   // Giving content focus should tell the delegate the focued field's content.
-  EXPECT_CALL(*text_input_delegate_, UpdateInput(_)).InSequence(in_sequence_);
-  EXPECT_CALL(*kb_delegate, OnBeginFrame()).InSequence(in_sequence_);
-  EXPECT_CALL(*kb_delegate, SetTransform(_)).InSequence(in_sequence_);
+  EXPECT_CALL(*text_input_delegate_, UpdateInput(_));
+  EXPECT_CALL(*kb_delegate, OnBeginFrame());
+  EXPECT_CALL(*kb_delegate, SetTransform(_));
   content->OnFocusChanged(true);
   EXPECT_TRUE(OnBeginFrame());
 
@@ -145,17 +145,16 @@
   info.selection_end = 1;
   info.composition_start = 0;
   info.composition_end = 1;
-  EXPECT_CALL(*text_input_delegate_, UpdateInput(info))
-      .InSequence(in_sequence_);
-  EXPECT_CALL(*kb_delegate, OnBeginFrame()).InSequence(in_sequence_);
-  EXPECT_CALL(*kb_delegate, SetTransform(_)).InSequence(in_sequence_);
+  EXPECT_CALL(*text_input_delegate_, UpdateInput(info));
+  EXPECT_CALL(*kb_delegate, OnBeginFrame());
+  EXPECT_CALL(*kb_delegate, SetTransform(_));
   ui_->UpdateWebInputIndices(1, 1, 0, 1);
   EXPECT_TRUE(OnBeginFrame());
 
   // End editing.
-  EXPECT_CALL(*kb_delegate, HideKeyboard()).InSequence(in_sequence_);
-  EXPECT_CALL(*kb_delegate, OnBeginFrame()).InSequence(in_sequence_);
-  EXPECT_CALL(*kb_delegate, SetTransform(_)).InSequence(in_sequence_);
+  EXPECT_CALL(*kb_delegate, HideKeyboard());
+  EXPECT_CALL(*kb_delegate, OnBeginFrame());
+  EXPECT_CALL(*kb_delegate, SetTransform(_));
   ui_->ShowSoftInput(false);
   EXPECT_TRUE(OnBeginFrame());
 
@@ -163,9 +162,11 @@
   EXPECT_FALSE(input_forwarder_->clear_focus_called());
   content->OnFocusChanged(false);
   EXPECT_TRUE(input_forwarder_->clear_focus_called());
+
   // OnBeginFrame on the keyboard delegate should be called despite of
   // visibility.
-  scene_->CallPerFrameCallbacks();
+  EXPECT_CALL(*kb_delegate, OnBeginFrame());
+  OnBeginFrame();
 }
 
 // Verify that we clear the model for the web input field when it loses focus to
@@ -179,8 +180,7 @@
   EXPECT_TRUE(OnBeginFrame());
 
   // Initial state gets pushed when the content element is focused.
-  EXPECT_CALL(*text_input_delegate_, UpdateInput(info))
-      .InSequence(in_sequence_);
+  EXPECT_CALL(*text_input_delegate_, UpdateInput(info));
   content->OnFocusChanged(true);
   EXPECT_TRUE(OnBeginFrame());
 
@@ -191,8 +191,7 @@
   // A cleared state gets pushed when the content element is focused. This is
   // needed because the user may have clicked another text field in the content,
   // so we shouldn't be pushing the stale state.
-  EXPECT_CALL(*text_input_delegate_, UpdateInput(TextInputInfo()))
-      .InSequence(in_sequence_);
+  EXPECT_CALL(*text_input_delegate_, UpdateInput(TextInputInfo()));
   content->OnFocusChanged(true);
   EXPECT_TRUE(OnBeginFrame());
 }
diff --git a/chrome/browser/vr/elements/keyboard.cc b/chrome/browser/vr/elements/keyboard.cc
index 809c0fc8..f028b1ec 100644
--- a/chrome/browser/vr/elements/keyboard.cc
+++ b/chrome/browser/vr/elements/keyboard.cc
@@ -99,20 +99,15 @@
 }
 
 void Keyboard::AdvanceKeyboardFrameIfNeeded() {
-  // If the update phase is not dirty, the frame will be advanced in
-  // OnBeginFrame. That is, we only call OnBeginFrame below when the element is
-  // not visible (i.e UiElement::kDirty is true).
-  if (!delegate_ || update_phase() != kDirty)
+  // This is the keyboard's equivalent to OnBeginFrame(), but is separate
+  // because it must run on every frame - not just if the keyboard is visible.
+  if (!delegate_)
     return;
 
   delegate_->OnBeginFrame();
 }
 
 bool Keyboard::OnBeginFrame(const gfx::Transform& head_pose) {
-  if (!delegate_)
-    return false;
-
-  delegate_->OnBeginFrame();
   // We return false here because any visible changes to the keyboard, such as
   // hover effects and showing/hiding of the keyboard will be drawn by the
   // controller's dirtyness, so it's safe to assume no visual changes here.
diff --git a/chrome/browser/vr/ui_scene.cc b/chrome/browser/vr/ui_scene.cc
index 5f0a9e9..91eb97d 100644
--- a/chrome/browser/vr/ui_scene.cc
+++ b/chrome/browser/vr/ui_scene.cc
@@ -128,6 +128,12 @@
     FrameLifecycle::set_phase(kUpdatedBindings);
   }
 
+  // Per-frame callbacks run every frame, always, as opposed to bindings, which
+  // run selectively based on element visibility.
+  for (auto callback : per_frame_callback_) {
+    callback.Run();
+  }
+
   {
     TRACE_EVENT0("gpu", "UiScene::OnBeginFrame.UpdateAnimationsAndOpacity");
 
@@ -167,12 +173,6 @@
   return scene_dirty;
 }
 
-void UiScene::CallPerFrameCallbacks() {
-  for (auto callback : per_frame_callback_) {
-    callback.Run();
-  }
-}
-
 bool UiScene::UpdateTextures() {
   TRACE_EVENT0("gpu", "UiScene::UpdateTextures");
   bool needs_redraw = false;
diff --git a/chrome/browser/vr/ui_scene.h b/chrome/browser/vr/ui_scene.h
index febbbfd..699af2d 100644
--- a/chrome/browser/vr/ui_scene.h
+++ b/chrome/browser/vr/ui_scene.h
@@ -47,8 +47,6 @@
   bool OnBeginFrame(const base::TimeTicks& current_time,
                     const gfx::Transform& head_pose);
 
-  void CallPerFrameCallbacks();
-
   // Returns true if any textures were redrawn.
   bool UpdateTextures();
 
diff --git a/chrome/browser/vr/ui_scene_creator.cc b/chrome/browser/vr/ui_scene_creator.cc
index 947a3f41..b67344b 100644
--- a/chrome/browser/vr/ui_scene_creator.cc
+++ b/chrome/browser/vr/ui_scene_creator.cc
@@ -1883,9 +1883,9 @@
             }
           },
           base::Unretained(keyboard.get()))));
-
-  VR_BIND_VISIBILITY(keyboard,
-                     model->editing_input || model->editing_web_input);
+  VR_BIND_VISIBILITY(
+      keyboard, (model->editing_input || model->editing_web_input) &&
+                    model->active_modal_prompt_type == kModalPromptTypeNone);
   scene_->AddPerFrameCallback(base::BindRepeating(
       [](Keyboard* keyboard) { keyboard->AdvanceKeyboardFrameIfNeeded(); },
       base::Unretained(keyboard.get())));
diff --git a/chrome/test/chromedriver/net/sync_websocket_impl.cc b/chrome/test/chromedriver/net/sync_websocket_impl.cc
index 56bdc4a..b7ca7600 100644
--- a/chrome/test/chromedriver/net/sync_websocket_impl.cc
+++ b/chrome/test/chromedriver/net/sync_websocket_impl.cc
@@ -55,16 +55,18 @@
   bool success = false;
   base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
                             base::WaitableEvent::InitialState::NOT_SIGNALED);
-  // Try to connect up to 3 times, with 10 seconds delay in between.
-  base::TimeDelta waitTime = base::TimeDelta::FromSeconds(10);
-  for (int i = 0; i < 3; i++) {
+  // Connect with retries. The retry timeout starts at 1 second, with
+  // exponential backoff, up to 16 seconds. The maximum total wait time is
+  // about 31 seconds.
+  const int kMaxTimeout = 16;
+  for (int timeout = 1; timeout <= kMaxTimeout; timeout *= 2) {
     context_getter_->GetNetworkTaskRunner()->PostTask(
         FROM_HERE, base::BindOnce(&SyncWebSocketImpl::Core::ConnectOnIO, this,
                                   url, &success, &event));
-    if (event.TimedWait(waitTime))
+    if (event.TimedWait(base::TimeDelta::FromSeconds(timeout)))
       break;
     LOG(WARNING) << "Timed out connecting to Chrome, "
-                 << (i < 2 ? "retrying..." : "giving up.");
+                 << (timeout < kMaxTimeout ? "retrying..." : "giving up.");
   }
   return success;
 }
diff --git a/chrome/test/chromedriver/server/http_handler.cc b/chrome/test/chromedriver/server/http_handler.cc
index 86590520..400e1c3 100644
--- a/chrome/test/chromedriver/server/http_handler.cc
+++ b/chrome/test/chromedriver/server/http_handler.cc
@@ -142,12 +142,23 @@
       CommandMapping(
           kGet, "session/:sessionId/window/rect",
           WrapToCommand("GetWindowRect", base::Bind(&ExecuteGetWindowRect))),
+
+      // minimize/maximize oss version
       CommandMapping(
           kPost, "session/:sessionId/window/:windowHandle/maximize",
           WrapToCommand("MaximizeWindow", base::Bind(&ExecuteMaximizeWindow))),
       CommandMapping(
           kPost, "session/:sessionId/window/:windowHandle/minimize",
           WrapToCommand("MinimizeWindow", base::Bind(&ExecuteMinimizeWindow))),
+
+      // minimize/maximize w3c version
+      CommandMapping(
+          kPost, "session/:sessionId/window/maximize",
+          WrapToCommand("MaximizeWindow", base::Bind(&ExecuteMaximizeWindow))),
+      CommandMapping(
+          kPost, "session/:sessionId/window/minimize",
+          WrapToCommand("MinimizeWindow", base::Bind(&ExecuteMinimizeWindow))),
+
       CommandMapping(kPost, "session/:sessionId/window/fullscreen",
                      WrapToCommand("FullscreenWindow",
                                    base::Bind(&ExecuteFullScreenWindow))),
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py
index ec90d0c..a399198 100755
--- a/chrome/test/chromedriver/test/run_py_tests.py
+++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -239,8 +239,6 @@
         'ChromeDriverTest.testShadowDomHover',
         'ChromeDriverTest.testMouseMoveTo',
         'ChromeDriverTest.testHoverOverElement',
-        # https://bugs.chromium.org/p/chromedriver/issues/detail?id=1478
-        'ChromeDriverTest.testShouldHandleNewWindowLoadingProperly',
         # https://bugs.chromium.org/p/chromedriver/issues/detail?id=2388
         'ChromeDriverTest.testTouchDoubleTapElement',
         'ChromeDriverTest.testTouchLongPressElement',
diff --git a/chrome/test/data/nacl/BUILD.gn b/chrome/test/data/nacl/BUILD.gn
index ed8057c9..dcce8a7 100644
--- a/chrome/test/data/nacl/BUILD.gn
+++ b/chrome/test/data/nacl/BUILD.gn
@@ -607,8 +607,9 @@
     defines = [ "NACL_LINUX=1" ]
     include_dirs = [ "../../../.." ]
 
-    # Do not use any sanitizers tools, which require a few symbols.
+    # Do not use any sanitizers or coverage tools, which require a few symbols.
     configs -= [ "//build/config/sanitizers:default_sanitizer_flags" ]
+    configs -= [ "//build/config/coverage:default_coverage" ]
     configs += [ ":nonsfi_libc_free_nexe_config" ]
   }
 
diff --git a/chrome/test/data/webui/print_preview/destination_select_test.js b/chrome/test/data/webui/print_preview/destination_select_test.js
new file mode 100644
index 0000000..7505153
--- /dev/null
+++ b/chrome/test/data/webui/print_preview/destination_select_test.js
@@ -0,0 +1,195 @@
+// 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.
+
+cr.define('destination_select_test', function() {
+  /** @enum {string} */
+  const TestNames = {
+    SingleRecentDestination: 'single recent destination',
+    MultipleRecentDestinations: 'multiple recent destination',
+    DefaultDestinationSelectionRules: 'default destination selection rules',
+    SystemDefaultPrinterPolicy: 'system default printer policy',
+  };
+
+  const suiteName = 'DestinationSelectTests';
+  suite(suiteName, function() {
+    /** @type {?PrintPreviewAppElement} */
+    let page = null;
+
+    /** @type {?PrintPreview.NativeLayerStub} */
+    let nativeLayer = null;
+
+    /** @type {?print_preview.NativeInitialSettngs} */
+    let initialSettings = null;
+
+    /** @type {!Array<!print_preview.LocalDestinationInfo>} */
+    let localDestinations = [];
+
+    /** @type {!Array<!print_preview.Destination>} */
+    let destinations = [];
+
+    /** @override */
+    setup(function() {
+      initialSettings = print_preview_test_utils.getDefaultInitialSettings();
+      nativeLayer = new print_preview.NativeLayerStub();
+      localDestinations = [];
+      destinations = getDestinationsArray();
+    });
+
+    /*
+     * Sets the initial settings to the stored value and creates the page.
+     * @return {!Promise} Promise that resolves when initial settings and
+     *     printer capabilities have been returned.
+     */
+    function setInitialSettings() {
+      nativeLayer.setInitialSettings(initialSettings);
+      nativeLayer.setLocalDestinations(localDestinations);
+      print_preview.NativeLayer.setInstance(nativeLayer);
+      PolymerTest.clearBody();
+      page = document.createElement('print-preview-app');
+      document.body.appendChild(page);
+
+      return Promise.all([
+        nativeLayer.whenCalled('getInitialSettings'),
+        nativeLayer.whenCalled('getPrinterCapabilities')
+      ]);
+    }
+
+    /**
+     * Creates 5 local destinations, adds them to |localDestinations| and
+     * sets the capabilities in |nativeLayer|.
+     * @return {!Array<!print_preview.Destination>}
+     */
+    function getDestinationsArray() {
+      let destinations = [];
+      const origin = cr.isChromeOS ? print_preview.DestinationOrigin.CROS :
+                                     print_preview.DestinationOrigin.LOCAL;
+      // Five destinations. FooDevice is the system default.
+      [ { id: 'ID1', name: 'One' },
+        { id: 'ID2', name: 'Two' },
+        { id: 'ID3', name: 'Three'},
+        { id: 'ID4', name: 'Four'},
+        { id: 'FooDevice', name: 'FooName' }].forEach((info, index) => {
+        const destination = new print_preview.Destination(
+          info.id, print_preview.DestinationType.LOCAL, origin, info.name,
+          false, print_preview.DestinationConnectionStatus.ONLINE);
+        nativeLayer.setLocalDestinationCapabilities(
+            print_preview_test_utils.getCddTemplate(info.id));
+        localDestinations.push({ printerName: info.name, deviceName: info.id });
+        destinations.push(destination);
+      });
+      return destinations;
+    }
+
+    /**
+     * Tests that if the user has a single valid recent destination the
+     * destination is automatically reselected.
+     */
+    test(assert(TestNames.SingleRecentDestination), function() {
+      const recentDestination =
+          print_preview.makeRecentDestination(destinations[0]);
+      initialSettings.serializedAppStateStr = JSON.stringify({
+        version: 2,
+        recentDestinations: [ recentDestination ],
+      });
+
+      return setInitialSettings().then(function(argsArray) {
+        assertEquals('ID1', argsArray[1].destinationId);
+        assertEquals(print_preview.PrinterType.LOCAL, argsArray[1].type);
+        assertEquals('ID1', page.destination_.id);
+      });
+    });
+
+    /**
+     * Tests that if the user has multiple valid recent destination the most
+     * recent destination is automatically reselected and the remaining
+     * destinations are marked as recent in the store.
+     */
+    test(assert(TestNames.MultipleRecentDestinations), function() {
+      const recentDestinations = [];
+      destinations.slice(0, 3).forEach(destination => {
+        recentDestinations.push(
+            print_preview.makeRecentDestination(destination));
+      });
+
+      initialSettings.serializedAppStateStr = JSON.stringify({
+        version: 2,
+        recentDestinations: recentDestinations,
+      });
+
+      return setInitialSettings().then(function(argsArray) {
+        // Should have loaded ID1 as the selected printer, since it was most
+        // recent.
+        assertEquals('ID1', argsArray[1].destinationId);
+        assertEquals(print_preview.PrinterType.LOCAL, argsArray[1].type);
+        assertEquals('ID1', page.destination_.id);
+
+        // Load all local destinations.
+        page.destinationStore_.startLoadDestinations(
+            print_preview.PrinterType.LOCAL_PRINTER);
+        return nativeLayer.whenCalled('getPrinters');
+      }).then(function() {
+        // Verify the correct printers are marked as recent in the store.
+        const reportedPrinters = page.destinationStore_.destinations();
+        destinations.forEach((destination, index) => {
+          const match = reportedPrinters.find((reportedPrinter) => {
+              return reportedPrinter.id == destination.id;});
+          assertFalse(typeof match === "undefined");
+          if (index < 3)
+            assertTrue(match.isRecent);
+          else
+            assertFalse(match.isRecent);
+        });
+      });
+    });
+
+    /**
+     * Tests that if there are default destination selection rules they are
+     * respected and a matching destination is automatically selected.
+     */
+    test(assert(TestNames.DefaultDestinationSelectionRules), function() {
+      initialSettings.serializedDefaultDestinationSelectionRulesStr =
+          JSON.stringify({namePattern: '.*Four.*'});
+      initialSettings.serializedAppStateStr = '';
+      return setInitialSettings().then(function(argsArray) {
+        // Should have loaded ID4 as the selected printer, since it matches
+        // the rules.
+        assertEquals('ID4', argsArray[1].destinationId);
+        assertEquals(print_preview.PrinterType.LOCAL, argsArray[1].type);
+        assertEquals('ID4', page.destination_.id);
+      });
+    });
+
+    /**
+     * Tests that if the system default printer policy is enabled the system
+     * default printer is automatically selected even if the user has recent
+     * destinations.
+     */
+    test(assert(TestNames.SystemDefaultPrinterPolicy), function() {
+      // Setup some recent destinations to ensure they are not selected.
+      const recentDestinations = [];
+      destinations.slice(0, 3).forEach(destination => {
+        recentDestinations.push(
+            print_preview.makeRecentDestination(destination));
+      });
+
+      initialSettings.serializedAppStateStr = JSON.stringify({
+        version: 2,
+        recentDestinations: recentDestinations,
+      });
+
+      return setInitialSettings().then(function(argsArray) {
+        // Need to load FooDevice as the printer, since it is the system
+        // default.
+        assertEquals('FooDevice', argsArray[1].destinationId);
+        assertEquals(print_preview.PrinterType.LOCAL, argsArray[1].type);
+        assertEquals('FooDevice', page.destination_.id);
+      });
+    });
+  });
+
+  return {
+    suiteName: suiteName,
+    TestNames: TestNames,
+  };
+});
diff --git a/chrome/test/data/webui/print_preview/native_layer_stub.js b/chrome/test/data/webui/print_preview/native_layer_stub.js
index 42cc563..77bd163 100644
--- a/chrome/test/data/webui/print_preview/native_layer_stub.js
+++ b/chrome/test/data/webui/print_preview/native_layer_stub.js
@@ -129,7 +129,9 @@
 
     /** @override */
     getPrinterCapabilities(printerId, type) {
-      this.methodCalled('getPrinterCapabilities', printerId, type);
+      this.methodCalled('getPrinterCapabilities', {
+        destinationId: printerId, printerType: type
+      });
       if (type != print_preview.PrinterType.LOCAL_PRINTER)
         return Promise.reject();
       return this.localDestinationCapabilities_.get(printerId);
diff --git a/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js b/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js
index 8754f294..7d71748 100644
--- a/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js
+++ b/chrome/test/data/webui/print_preview/new_print_preview_ui_browsertest.js
@@ -396,3 +396,51 @@
       invalid_settings_browsertest.TestNames
           .InvalidCertificateErrorReselectDestination);
 });
+
+PrintPreviewDestinationSelectTest = class extends NewPrintPreviewTest {
+  /** @override */
+  get browsePreload() {
+    return 'chrome://print/new/app.html';
+  }
+
+  /** @override */
+  get extraLibraries() {
+    return super.extraLibraries.concat([
+      '../test_browser_proxy.js',
+      'native_layer_stub.js',
+      'print_preview_test_utils.js',
+      'destination_select_test.js',
+    ]);
+  }
+
+  /** @override */
+  get suiteName() {
+    return destination_select_test.suiteName;
+  }
+};
+
+TEST_F('PrintPreviewDestinationSelectTest', 'SingleRecentDestination',
+    function() {
+  this.runMochaTest(destination_select_test.TestNames.SingleRecentDestination);
+});
+
+TEST_F('PrintPreviewDestinationSelectTest', 'MultipleRecentDestinations',
+    function() {
+  this.runMochaTest(
+      destination_select_test.TestNames.MultipleRecentDestinations);
+});
+
+TEST_F('PrintPreviewDestinationSelectTest', 'DefaultDestinationSelectionRules',
+    function() {
+  this.runMochaTest(
+      destination_select_test.TestNames.DefaultDestinationSelectionRules);
+});
+
+GEN('#if !defined(OS_CHROMEOS)');
+TEST_F('PrintPreviewDestinationSelectTest', 'SystemDefaultPrinterPolicy',
+    function() {
+  loadTimeData.overrideValues({useSystemDefaultPrinter: true});
+  this.runMochaTest(
+      destination_select_test.TestNames.SystemDefaultPrinterPolicy);
+});
+GEN('#endif');
diff --git a/chrome/test/data/webui/print_preview/preview_generation_test.js b/chrome/test/data/webui/print_preview/preview_generation_test.js
index 2f8cfed..9326725 100644
--- a/chrome/test/data/webui/print_preview/preview_generation_test.js
+++ b/chrome/test/data/webui/print_preview/preview_generation_test.js
@@ -31,20 +31,8 @@
     let documentInfo = null;
 
     /** @type {!print_preview.NativeInitialSettings} */
-    const initialSettings = {
-      isInKioskAutoPrintMode: false,
-      isInAppKioskMode: false,
-      thousandsDelimeter: ',',
-      decimalDelimeter: '.',
-      unitType: 1,
-      previewModifiable: true,
-      documentTitle: 'title',
-      documentHasSelection: true,
-      shouldPrintSelectionOnly: false,
-      printerName: 'FooDevice',
-      serializedAppStateStr: null,
-      serializedDefaultDestinationSelectionRulesStr: null
-    };
+    const initialSettings =
+        print_preview_test_utils.getDefaultInitialSettings();
 
     /** @override */
     setup(function() {
diff --git a/chrome/test/data/webui/print_preview/print_preview_destination_search_test.js b/chrome/test/data/webui/print_preview/print_preview_destination_search_test.js
index 1a7f226..1701380 100644
--- a/chrome/test/data/webui/print_preview/print_preview_destination_search_test.js
+++ b/chrome/test/data/webui/print_preview/print_preview_destination_search_test.js
@@ -141,8 +141,8 @@
       const callback =
           cr.isChromeOS ? 'setupPrinter' : 'getPrinterCapabilities';
       return nativeLayer_.whenCalled(callback).then(
-          function(actualDestId) {
-            assertEquals(destId, actualDestId);
+          function(args) {
+            assertEquals(destId, cr.isChromeOS ? args : args.destinationId);
           });
     });
 
@@ -169,7 +169,9 @@
           cr.isChromeOS ? 'setupPrinter' : 'getPrinterCapabilities';
       return Promise.all([nativeLayer_.whenCalled(callback), waiter]).then(
           function(results) {
-            assertEquals(destId, results[0]);
+            const actualId =
+                cr.isChromeOS ? results[0] : results[0].destinationId;
+            assertEquals(destId, actualId);
             // after setup succeeds, the destination should be selected.
             assertNotEquals(null, destinationStore_.selectedDestination);
             assertEquals(destId, destinationStore_.selectedDestination.id);
diff --git a/chrome/test/data/webui/print_preview/print_preview_test_utils.js b/chrome/test/data/webui/print_preview/print_preview_test_utils.js
index 3ada2d1..82848730a 100644
--- a/chrome/test/data/webui/print_preview/print_preview_test_utils.js
+++ b/chrome/test/data/webui/print_preview/print_preview_test_utils.js
@@ -3,6 +3,23 @@
 // found in the LICENSE file.
 
 cr.define('print_preview_test_utils', function() {
+  /** @return {!print_preview.NativeInitialSettings} */
+  function getDefaultInitialSettings() {
+    return {
+      isInKioskAutoPrintMode: false,
+      isInAppKioskMode: false,
+      thousandsDelimeter: ',',
+      decimalDelimeter: '.',
+      unitType: 1,
+      previewModifiable: true,
+      documentTitle: 'title',
+      documentHasSelection: true,
+      shouldPrintSelectionOnly: false,
+      printerName: 'FooDevice',
+      serializedAppStateStr: null,
+      serializedDefaultDestinationSelectionRulesStr: null
+    };
+  }
 
   /**
    * @param {string} printerId
@@ -113,6 +130,7 @@
   }
 
   return {
+    getDefaultInitialSettings: getDefaultInitialSettings,
     getCddTemplate: getCddTemplate,
     getDefaultMediaSize: getDefaultMediaSize,
     getDefaultOrientation: getDefaultOrientation,
diff --git a/chrome/test/data/webui/print_preview/print_preview_tests.js b/chrome/test/data/webui/print_preview/print_preview_tests.js
index 2600f1c..e7efab9 100644
--- a/chrome/test/data/webui/print_preview/print_preview_tests.js
+++ b/chrome/test/data/webui/print_preview/print_preview_tests.js
@@ -344,21 +344,8 @@
     });
 
     setup(function() {
-      initialSettings = {
-        isInKioskAutoPrintMode: false,
-        isInAppKioskMode: false,
-        thousandsDelimeter: ',',
-        decimalDelimeter: '.',
-        unitType: 1,
-        previewModifiable: true,
-        documentTitle: 'title',
-        documentHasSelection: true,
-        shouldPrintSelectionOnly: false,
-        printerName: 'FooDevice',
-        serializedAppStateStr: null,
-        serializedDefaultDestinationSelectionRulesStr: null
-      };
-
+      initialSettings =
+          print_preview_test_utils.getDefaultInitialSettings();
       localDestinationInfos = [
         { printerName: 'FooName', deviceName: 'FooDevice' },
         { printerName: 'BarName', deviceName: 'BarDevice' },
@@ -1379,8 +1366,9 @@
       const initialSettingsSet = nativeLayer.whenCalled('getInitialSettings');
       return initialSettingsSet.then(function() {
         return nativeLayer.whenCalled('getPrinterCapabilities');
-      }).then(function(id) {
-        expectEquals('ID1', id);
+      }).then(function(args) {
+        expectEquals('ID1', args.destinationId);
+        expectEquals(print_preview.PrinterType.LOCAL, args.type);
         return nativeLayer.whenCalled('getPreview');
       }).then(function(previewArgs) {
         const ticket = JSON.parse(previewArgs.printTicket);
diff --git a/chrome/test/data/webui/print_preview/restore_state_test.js b/chrome/test/data/webui/print_preview/restore_state_test.js
index cae2c675..3f54894 100644
--- a/chrome/test/data/webui/print_preview/restore_state_test.js
+++ b/chrome/test/data/webui/print_preview/restore_state_test.js
@@ -15,20 +15,8 @@
     let page = null;
     let nativeLayer = null;
 
-    const initialSettings = {
-      isInKioskAutoPrintMode: false,
-      isInAppKioskMode: false,
-      thousandsDelimeter: ',',
-      decimalDelimeter: '.',
-      unitType: 1,
-      previewModifiable: true,
-      documentTitle: 'title',
-      documentHasSelection: true,
-      shouldPrintSelectionOnly: false,
-      printerName: 'FooDevice',
-      serializedAppStateStr: null,
-      serializedDefaultDestinationSelectionRulesStr: null
-    };
+    const initialSettings =
+        print_preview_test_utils.getDefaultInitialSettings();
 
     /** @override */
     setup(function() {
diff --git a/chrome/test/data/webui/print_preview/settings_section_test.js b/chrome/test/data/webui/print_preview/settings_section_test.js
index 6d93bd2..b6959c1b 100644
--- a/chrome/test/data/webui/print_preview/settings_section_test.js
+++ b/chrome/test/data/webui/print_preview/settings_section_test.js
@@ -32,21 +32,8 @@
 
     /** @override */
     setup(function() {
-      const initialSettings = {
-        isInKioskAutoPrintMode: false,
-        isInAppKioskMode: false,
-        thousandsDelimeter: ',',
-        decimalDelimeter: '.',
-        unitType: 1,
-        previewModifiable: true,
-        documentTitle: 'title',
-        documentHasSelection: true,
-        shouldPrintSelectionOnly: false,
-        printerName: 'FooDevice',
-        serializedAppStateStr: null,
-        serializedDefaultDestinationSelectionRulesStr: null
-      };
-
+      const initialSettings =
+          print_preview_test_utils.getDefaultInitialSettings();
       const nativeLayer = new print_preview.NativeLayerStub();
       nativeLayer.setInitialSettings(initialSettings);
       nativeLayer.setLocalDestinationCapabilities(
diff --git a/chrome/test/data/webui/print_preview/system_dialog_browsertest.js b/chrome/test/data/webui/print_preview/system_dialog_browsertest.js
index 2ea6dd3..7d43ff4 100644
--- a/chrome/test/data/webui/print_preview/system_dialog_browsertest.js
+++ b/chrome/test/data/webui/print_preview/system_dialog_browsertest.js
@@ -32,20 +32,8 @@
       print_preview.NativeLayer.setInstance(nativeLayer);
       PolymerTest.clearBody();
 
-      const initialSettings = {
-        isInKioskAutoPrintMode: false,
-        isInAppKioskMode: false,
-        thousandsDelimeter: ',',
-        decimalDelimeter: '.',
-        unitType: 1,
-        previewModifiable: true,
-        documentTitle: 'title',
-        documentHasSelection: true,
-        shouldPrintSelectionOnly: false,
-        printerName: 'FooDevice',
-        serializedAppStateStr: null,
-        serializedDefaultDestinationSelectionRulesStr: null
-      };
+      const initialSettings =
+          print_preview_test_utils.getDefaultInitialSettings();
       nativeLayer.setInitialSettings(initialSettings);
       nativeLayer.setLocalDestinationCapabilities(
           print_preview_test_utils.getCddTemplate(initialSettings.printerName));
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js
index 7dbb8b1..be716a7f 100644
--- a/chrome/test/data/webui/settings/cr_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -1776,7 +1776,13 @@
   ]),
 };
 
-TEST_F('CrSettingsCrostiniPageTest', 'All', function() {
+GEN('#if defined(OS_CHROMEOS) && !defined(NDEBUG)');
+GEN('#define MAYBE_CROSTINI_All DISABLED_All');
+GEN('#else');
+GEN('#define MAYBE_CROSTINI_All All');
+GEN('#endif');
+
+TEST_F('CrSettingsCrostiniPageTest', 'MAYBE_CROSTINI_All', function() {
   mocha.run();
 });
 
diff --git a/chromecast/browser/BUILD.gn b/chromecast/browser/BUILD.gn
index 4ea47b3..994d99c0 100644
--- a/chromecast/browser/BUILD.gn
+++ b/chromecast/browser/BUILD.gn
@@ -224,6 +224,8 @@
       "cast_web_view_extension.h",
       "extension_request_protocol_handler.cc",
       "extension_request_protocol_handler.h",
+      "extensions/api/automation_internal/automation_internal_api.cc",
+      "extensions/api/automation_internal/automation_internal_api.h",
       "extensions/api/bookmarks/bookmarks_api.cc",
       "extensions/api/bookmarks/bookmarks_api.h",
       "extensions/api/braille_display_private/braille_display_private_api.cc",
diff --git a/chromecast/browser/DEPS b/chromecast/browser/DEPS
index 5d3eeb1..fa570f3 100644
--- a/chromecast/browser/DEPS
+++ b/chromecast/browser/DEPS
@@ -37,6 +37,7 @@
   "+net",
   "+services/network/public/cpp",
   "+services/service_manager/public",
+  "+ui/accessibility",
   "+ui/aura",
   "+ui/base",
   "+ui/compositor",
diff --git a/chromecast/browser/extensions/api/automation_internal/automation_internal_api.cc b/chromecast/browser/extensions/api/automation_internal/automation_internal_api.cc
new file mode 100644
index 0000000..4e000df7
--- /dev/null
+++ b/chromecast/browser/extensions/api/automation_internal/automation_internal_api.cc
@@ -0,0 +1,546 @@
+// 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.
+// TODO(crbug/837773) This file was copied from
+// chrome/browser/extensions/api/automation_internal.
+// Copied code will be de-duped later.
+
+#include "chromecast/browser/extensions/api/automation_internal/automation_internal_api.h"
+
+#include <stdint.h>
+
+#include <memory>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/strings/string16.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chromecast/common/extensions_api/automation.h"
+#include "chromecast/common/extensions_api/automation_api_constants.h"
+#include "chromecast/common/extensions_api/automation_internal.h"
+#include "content/public/browser/ax_event_notification_details.h"
+#include "content/public/browser/browser_accessibility_state.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_plugin_guest_manager.h"
+#include "content/public/browser/media_session.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/render_widget_host.h"
+#include "content/public/browser/render_widget_host_view.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_observer.h"
+#include "content/public/browser/web_contents_user_data.h"
+#include "extensions/common/extension_messages.h"
+#include "extensions/common/manifest_handlers/automation.h"
+#include "extensions/common/permissions/permissions_data.h"
+#include "ui/accessibility/ax_action_data.h"
+#include "ui/accessibility/ax_enum_util.h"
+#include "ui/accessibility/ax_host_delegate.h"
+#include "ui/accessibility/ax_tree_id_registry.h"
+
+#if defined(USE_AURA)
+#include "ui/aura/env.h"
+#endif
+
+namespace extensions {
+namespace cast {
+class AutomationWebContentsObserver;
+}  // namespace cast
+}  // namespace extensions
+
+DEFINE_WEB_CONTENTS_USER_DATA_KEY(
+    extensions::cast::AutomationWebContentsObserver);
+
+namespace extensions {
+namespace cast {
+
+namespace {
+
+const char kCannotRequestAutomationOnPage[] =
+    "Cannot request automation tree on url \"*\". "
+    "Extension manifest must request permission to access this host.";
+const char kRendererDestroyed[] = "The tab was closed.";
+const char kNoDocument[] = "No document.";
+const char kNodeDestroyed[] =
+    "domQuerySelector sent on node which is no longer in the tree.";
+
+// Handles sending and receiving IPCs for a single querySelector request. On
+// creation, sends the request IPC, and is destroyed either when the response is
+// received or the renderer is destroyed.
+class QuerySelectorHandler : public content::WebContentsObserver {
+ public:
+  QuerySelectorHandler(
+      content::WebContents* web_contents,
+      int request_id,
+      int acc_obj_id,
+      const base::string16& query,
+      const AutomationInternalQuerySelectorFunction::Callback& callback)
+      : content::WebContentsObserver(web_contents),
+        request_id_(request_id),
+        callback_(callback) {
+    content::RenderFrameHost* rfh = web_contents->GetMainFrame();
+
+    rfh->Send(new ExtensionMsg_AutomationQuerySelector(
+        rfh->GetRoutingID(), request_id, acc_obj_id, query));
+  }
+
+  ~QuerySelectorHandler() override {}
+
+  bool OnMessageReceived(const IPC::Message& message,
+                         content::RenderFrameHost* render_frame_host) override {
+    if (message.type() != ExtensionHostMsg_AutomationQuerySelector_Result::ID)
+      return false;
+
+    // There may be several requests in flight; check this response matches.
+    int message_request_id = 0;
+    base::PickleIterator iter(message);
+    if (!iter.ReadInt(&message_request_id))
+      return false;
+
+    if (message_request_id != request_id_)
+      return false;
+
+    IPC_BEGIN_MESSAGE_MAP(QuerySelectorHandler, message)
+      IPC_MESSAGE_HANDLER(ExtensionHostMsg_AutomationQuerySelector_Result,
+                          OnQueryResponse)
+    IPC_END_MESSAGE_MAP()
+    return true;
+  }
+
+  void WebContentsDestroyed() override {
+    callback_.Run(kRendererDestroyed, 0);
+    delete this;
+  }
+
+ private:
+  void OnQueryResponse(int request_id,
+                       ExtensionHostMsg_AutomationQuerySelector_Error error,
+                       int result_acc_obj_id) {
+    std::string error_string;
+    switch (error.value) {
+      case ExtensionHostMsg_AutomationQuerySelector_Error::kNone:
+        break;
+      case ExtensionHostMsg_AutomationQuerySelector_Error::kNoDocument:
+        error_string = kNoDocument;
+        break;
+      case ExtensionHostMsg_AutomationQuerySelector_Error::kNodeDestroyed:
+        error_string = kNodeDestroyed;
+        break;
+    }
+    callback_.Run(error_string, result_acc_obj_id);
+    delete this;
+  }
+
+  int request_id_;
+  const AutomationInternalQuerySelectorFunction::Callback callback_;
+};
+
+bool CanRequestAutomation(const Extension* extension,
+                          const AutomationInfo* automation_info,
+                          const content::WebContents* contents) {
+  if (automation_info->desktop)
+    return true;
+
+  const GURL& url = contents->GetURL();
+  // TODO(aboxhall): check for webstore URL
+  if (automation_info->matches.MatchesURL(url))
+    return true;
+
+  return false;
+}
+
+}  // namespace
+
+// Helper class that receives accessibility data from |WebContents|.
+class AutomationWebContentsObserver
+    : public content::WebContentsObserver,
+      public content::WebContentsUserData<AutomationWebContentsObserver> {
+ public:
+  ~AutomationWebContentsObserver() override {}
+
+  // content::WebContentsObserver overrides.
+  void AccessibilityEventReceived(
+      const std::vector<content::AXEventNotificationDetails>& details)
+      override {
+    // TODO(rmrossi) Temporary stub.
+  }
+
+  void AccessibilityLocationChangesReceived(
+      const std::vector<content::AXLocationChangeNotificationDetails>& details)
+      override {
+    // TODO(rmrossi) Temporary stub.
+  }
+
+  void RenderFrameDeleted(
+      content::RenderFrameHost* render_frame_host) override {
+    // TODO(rmrossi) Temporary stub.
+  }
+
+  void MediaStartedPlaying(const MediaPlayerInfo& video_type,
+                           const MediaPlayerId& id) override {
+    std::vector<content::AXEventNotificationDetails> details;
+    content::AXEventNotificationDetails detail;
+    detail.ax_tree_id = id.first->GetAXTreeID();
+    detail.event_type = ax::mojom::Event::kMediaStartedPlaying;
+    details.push_back(detail);
+    AccessibilityEventReceived(details);
+  }
+
+  void MediaStoppedPlaying(
+      const MediaPlayerInfo& video_type,
+      const MediaPlayerId& id,
+      WebContentsObserver::MediaStoppedReason reason) override {
+    std::vector<content::AXEventNotificationDetails> details;
+    content::AXEventNotificationDetails detail;
+    detail.ax_tree_id = id.first->GetAXTreeID();
+    detail.event_type = ax::mojom::Event::kMediaStoppedPlaying;
+    details.push_back(detail);
+    AccessibilityEventReceived(details);
+  }
+
+ private:
+  friend class content::WebContentsUserData<AutomationWebContentsObserver>;
+
+  explicit AutomationWebContentsObserver(content::WebContents* web_contents)
+      : content::WebContentsObserver(web_contents),
+        browser_context_(web_contents->GetBrowserContext()) {
+    if (web_contents->WasRecentlyAudible()) {
+      std::vector<content::AXEventNotificationDetails> details;
+      content::RenderFrameHost* rfh = web_contents->GetMainFrame();
+      if (!rfh)
+        return;
+
+      content::AXEventNotificationDetails detail;
+      detail.ax_tree_id = rfh->GetAXTreeID();
+      detail.event_type = ax::mojom::Event::kMediaStartedPlaying;
+      details.push_back(detail);
+      AccessibilityEventReceived(details);
+    }
+  }
+
+  content::BrowserContext* browser_context_;
+
+  DISALLOW_COPY_AND_ASSIGN(AutomationWebContentsObserver);
+};
+
+ExtensionFunction::ResponseAction AutomationInternalEnableTabFunction::Run() {
+  const AutomationInfo* automation_info = AutomationInfo::Get(extension());
+  EXTENSION_FUNCTION_VALIDATE(automation_info);
+
+  using api::automation_internal::EnableTab::Params;
+  std::unique_ptr<Params> params(Params::Create(*args_));
+  EXTENSION_FUNCTION_VALIDATE(params.get());
+  content::WebContents* contents = NULL;
+
+  // Stub implementation does not find web contents yet.
+  contents = nullptr;
+
+  content::RenderFrameHost* rfh = contents->GetMainFrame();
+  if (!rfh)
+    return RespondNow(Error("Could not enable accessibility for active tab"));
+
+  if (!CanRequestAutomation(extension(), automation_info, contents)) {
+    return RespondNow(
+        Error(kCannotRequestAutomationOnPage, contents->GetURL().spec()));
+  }
+
+  AutomationWebContentsObserver::CreateForWebContents(contents);
+  contents->EnableWebContentsOnlyAccessibilityMode();
+
+  int ax_tree_id = rfh->GetAXTreeID();
+
+  // This gets removed when the extension process dies.
+  // TODO(rmrossi) Put back when event router comes into the picture.
+  //  AutomationEventRouter::GetInstance()->RegisterListenerForOneTree(
+  //      extension_id(),
+  //      source_process_id(),
+  //      ax_tree_id);
+
+  return RespondNow(ArgumentList(
+      api::automation_internal::EnableTab::Results::Create(ax_tree_id)));
+}
+
+ExtensionFunction::ResponseAction AutomationInternalEnableFrameFunction::Run() {
+  // TODO(dtseng): Limited to desktop tree for now pending out of proc iframes.
+  using api::automation_internal::EnableFrame::Params;
+
+  std::unique_ptr<Params> params(Params::Create(*args_));
+  EXTENSION_FUNCTION_VALIDATE(params.get());
+
+  content::RenderFrameHost* rfh =
+      content::RenderFrameHost::FromAXTreeID(params->tree_id);
+  if (!rfh)
+    return RespondNow(Error("unable to load tab"));
+
+  content::WebContents* contents =
+      content::WebContents::FromRenderFrameHost(rfh);
+  AutomationWebContentsObserver::CreateForWebContents(contents);
+
+  // Only call this if this is the root of a frame tree, to avoid resetting
+  // the accessibility state multiple times.
+  if (!rfh->GetParent())
+    contents->EnableWebContentsOnlyAccessibilityMode();
+
+  return RespondNow(NoArguments());
+}
+
+ExtensionFunction::ResponseAction
+AutomationInternalPerformActionFunction::ConvertToAXActionData(
+    api::automation_internal::PerformAction::Params* params,
+    ui::AXActionData* action) {
+  action->target_tree_id = params->args.tree_id;
+  action->source_extension_id = extension_id();
+  action->target_node_id = params->args.automation_node_id;
+  int* request_id = params->args.request_id.get();
+  action->request_id = request_id ? *request_id : -1;
+  api::automation::ActionType action_type =
+      api::automation::ParseActionType(params->args.action_type);
+  switch (action_type) {
+    case api::automation::ACTION_TYPE_BLUR:
+      action->action = ax::mojom::Action::kBlur;
+      break;
+    case api::automation::ACTION_TYPE_DECREMENT:
+      action->action = ax::mojom::Action::kDecrement;
+      break;
+    case api::automation::ACTION_TYPE_DODEFAULT:
+      action->action = ax::mojom::Action::kDoDefault;
+      break;
+    case api::automation::ACTION_TYPE_INCREMENT:
+      action->action = ax::mojom::Action::kIncrement;
+      break;
+    case api::automation::ACTION_TYPE_FOCUS:
+      action->action = ax::mojom::Action::kFocus;
+      break;
+    case api::automation::ACTION_TYPE_GETIMAGEDATA: {
+      api::automation_internal::GetImageDataParams get_image_data_params;
+      EXTENSION_FUNCTION_VALIDATE(
+          api::automation_internal::GetImageDataParams::Populate(
+              params->opt_args.additional_properties, &get_image_data_params));
+      action->action = ax::mojom::Action::kGetImageData;
+      action->target_rect = gfx::Rect(0, 0, get_image_data_params.max_width,
+                                      get_image_data_params.max_height);
+      break;
+    }
+    case api::automation::ACTION_TYPE_HITTEST: {
+      api::automation_internal::HitTestParams hit_test_params;
+      EXTENSION_FUNCTION_VALIDATE(
+          api::automation_internal::HitTestParams::Populate(
+              params->opt_args.additional_properties, &hit_test_params));
+      action->action = ax::mojom::Action::kHitTest;
+      action->target_point = gfx::Point(hit_test_params.x, hit_test_params.y);
+      action->hit_test_event_to_fire =
+          ui::ParseEvent(hit_test_params.event_to_fire.c_str());
+      if (action->hit_test_event_to_fire == ax::mojom::Event::kNone)
+        return RespondNow(NoArguments());
+      break;
+    }
+    case api::automation::ACTION_TYPE_LOADINLINETEXTBOXES:
+      action->action = ax::mojom::Action::kLoadInlineTextBoxes;
+      break;
+    case api::automation::ACTION_TYPE_SCROLLTOMAKEVISIBLE:
+      action->action = ax::mojom::Action::kScrollToMakeVisible;
+      break;
+    case api::automation::ACTION_TYPE_SCROLLBACKWARD:
+      action->action = ax::mojom::Action::kScrollBackward;
+      break;
+    case api::automation::ACTION_TYPE_SCROLLFORWARD:
+      action->action = ax::mojom::Action::kScrollForward;
+      break;
+    case api::automation::ACTION_TYPE_SCROLLUP:
+      action->action = ax::mojom::Action::kScrollUp;
+      break;
+    case api::automation::ACTION_TYPE_SCROLLDOWN:
+      action->action = ax::mojom::Action::kScrollDown;
+      break;
+    case api::automation::ACTION_TYPE_SCROLLLEFT:
+      action->action = ax::mojom::Action::kScrollLeft;
+      break;
+    case api::automation::ACTION_TYPE_SCROLLRIGHT:
+      action->action = ax::mojom::Action::kScrollRight;
+      break;
+    case api::automation::ACTION_TYPE_SETSELECTION: {
+      api::automation_internal::SetSelectionParams selection_params;
+      EXTENSION_FUNCTION_VALIDATE(
+          api::automation_internal::SetSelectionParams::Populate(
+              params->opt_args.additional_properties, &selection_params));
+      action->anchor_node_id = params->args.automation_node_id;
+      action->anchor_offset = selection_params.anchor_offset;
+      action->focus_node_id = selection_params.focus_node_id;
+      action->focus_offset = selection_params.focus_offset;
+      action->action = ax::mojom::Action::kSetSelection;
+      break;
+    }
+    case api::automation::ACTION_TYPE_SHOWCONTEXTMENU: {
+      action->action = ax::mojom::Action::kShowContextMenu;
+      break;
+    }
+    case api::automation::
+        ACTION_TYPE_SETSEQUENTIALFOCUSNAVIGATIONSTARTINGPOINT: {
+      action->action =
+          ax::mojom::Action::kSetSequentialFocusNavigationStartingPoint;
+      break;
+    }
+    case api::automation::ACTION_TYPE_CUSTOMACTION: {
+      api::automation_internal::PerformCustomActionParams
+          perform_custom_action_params;
+      EXTENSION_FUNCTION_VALIDATE(
+          api::automation_internal::PerformCustomActionParams::Populate(
+              params->opt_args.additional_properties,
+              &perform_custom_action_params));
+      action->action = ax::mojom::Action::kCustomAction;
+      action->custom_action_id = perform_custom_action_params.custom_action_id;
+      break;
+    }
+    case api::automation::ACTION_TYPE_REPLACESELECTEDTEXT: {
+      api::automation_internal::ReplaceSelectedTextParams
+          replace_selected_text_params;
+      EXTENSION_FUNCTION_VALIDATE(
+          api::automation_internal::ReplaceSelectedTextParams::Populate(
+              params->opt_args.additional_properties,
+              &replace_selected_text_params));
+      action->action = ax::mojom::Action::kReplaceSelectedText;
+      action->value = base::UTF8ToUTF16(replace_selected_text_params.value);
+      break;
+    }
+    case api::automation::ACTION_TYPE_SETVALUE: {
+      api::automation_internal::SetValueParams set_value_params;
+      EXTENSION_FUNCTION_VALIDATE(
+          api::automation_internal::SetValueParams::Populate(
+              params->opt_args.additional_properties, &set_value_params));
+      action->action = ax::mojom::Action::kSetValue;
+      action->value = base::UTF8ToUTF16(set_value_params.value);
+      break;
+    }
+    // These actions are currently unused by any existing clients of
+    // automation. They also require additional arguments to be plumbed
+    // through (e.g. setValue takes a string value to be set). Future clients
+    // may wish to extend the api to support these actions.
+    case api::automation::ACTION_TYPE_SCROLLTOPOINT:
+    case api::automation::ACTION_TYPE_SETSCROLLOFFSET:
+      return RespondNow(
+          Error("Unsupported action: " + params->args.action_type));
+    case api::automation::ACTION_TYPE_NONE:
+      break;
+  }
+  return RespondNow(NoArguments());
+}
+
+ExtensionFunction::ResponseAction
+AutomationInternalPerformActionFunction::Run() {
+  const AutomationInfo* automation_info = AutomationInfo::Get(extension());
+  EXTENSION_FUNCTION_VALIDATE(automation_info && automation_info->interact);
+
+  using api::automation_internal::PerformAction::Params;
+  std::unique_ptr<Params> params(Params::Create(*args_));
+  EXTENSION_FUNCTION_VALIDATE(params.get());
+  ui::AXTreeIDRegistry* registry = ui::AXTreeIDRegistry::GetInstance();
+  ui::AXHostDelegate* delegate =
+      registry->GetHostDelegate(params->args.tree_id);
+  if (delegate) {
+#if defined(USE_AURA)
+    ui::AXActionData data;
+    ExtensionFunction::ResponseAction result =
+        ConvertToAXActionData(params.get(), &data);
+    delegate->PerformAction(data);
+    return result;
+#else
+    NOTREACHED();
+    return RespondNow(
+        Error("Unexpected action on desktop automation tree;"
+              " platform does not support desktop automation"));
+#endif  // defined(USE_AURA)
+  }
+  content::RenderFrameHost* rfh =
+      content::RenderFrameHost::FromAXTreeID(params->args.tree_id);
+  if (!rfh)
+    return RespondNow(Error("Ignoring action on destroyed node"));
+
+  content::WebContents* contents =
+      content::WebContents::FromRenderFrameHost(rfh);
+  if (!CanRequestAutomation(extension(), automation_info, contents)) {
+    return RespondNow(
+        Error(kCannotRequestAutomationOnPage, contents->GetURL().spec()));
+  }
+
+  // Handle internal actions.
+  api::automation_internal::ActionTypePrivate internal_action_type =
+      api::automation_internal::ParseActionTypePrivate(
+          params->args.action_type);
+  content::MediaSession* session = content::MediaSession::Get(contents);
+  switch (internal_action_type) {
+    case api::automation_internal::ACTION_TYPE_PRIVATE_STARTDUCKINGMEDIA:
+      session->StartDucking();
+      return RespondNow(NoArguments());
+    case api::automation_internal::ACTION_TYPE_PRIVATE_STOPDUCKINGMEDIA:
+      session->StopDucking();
+      return RespondNow(NoArguments());
+    case api::automation_internal::ACTION_TYPE_PRIVATE_RESUMEMEDIA:
+      session->Resume(content::MediaSession::SuspendType::SYSTEM);
+      return RespondNow(NoArguments());
+    case api::automation_internal::ACTION_TYPE_PRIVATE_SUSPENDMEDIA:
+      session->Suspend(content::MediaSession::SuspendType::SYSTEM);
+      return RespondNow(NoArguments());
+    case api::automation_internal::ACTION_TYPE_PRIVATE_NONE:
+      // Not a private action.
+      break;
+  }
+
+  ui::AXActionData data;
+  ExtensionFunction::ResponseAction result =
+      ConvertToAXActionData(params.get(), &data);
+  rfh->AccessibilityPerformAction(data);
+  return result;
+}
+
+ExtensionFunction::ResponseAction
+AutomationInternalEnableDesktopFunction::Run() {
+  // Not applicable to cast.
+  return RespondNow(Error("getDesktop is unsupported by this platform"));
+}
+
+// static
+int AutomationInternalQuerySelectorFunction::query_request_id_counter_ = 0;
+
+ExtensionFunction::ResponseAction
+AutomationInternalQuerySelectorFunction::Run() {
+  const AutomationInfo* automation_info = AutomationInfo::Get(extension());
+  EXTENSION_FUNCTION_VALIDATE(automation_info);
+
+  using api::automation_internal::QuerySelector::Params;
+  std::unique_ptr<Params> params(Params::Create(*args_));
+  EXTENSION_FUNCTION_VALIDATE(params.get());
+
+  content::RenderFrameHost* rfh =
+      content::RenderFrameHost::FromAXTreeID(params->args.tree_id);
+  if (!rfh) {
+    return RespondNow(
+        Error("domQuerySelector query sent on non-web or destroyed tree."));
+  }
+
+  content::WebContents* contents =
+      content::WebContents::FromRenderFrameHost(rfh);
+
+  int request_id = query_request_id_counter_++;
+  base::string16 selector = base::UTF8ToUTF16(params->args.selector);
+
+  // QuerySelectorHandler handles IPCs and deletes itself on completion.
+  new QuerySelectorHandler(
+      contents, request_id, params->args.automation_node_id, selector,
+      base::Bind(&AutomationInternalQuerySelectorFunction::OnResponse, this));
+
+  return RespondLater();
+}
+
+void AutomationInternalQuerySelectorFunction::OnResponse(
+    const std::string& error,
+    int result_acc_obj_id) {
+  if (!error.empty()) {
+    Respond(Error(error));
+    return;
+  }
+
+  Respond(OneArgument(std::make_unique<base::Value>(result_acc_obj_id)));
+}
+
+}  // namespace cast
+}  // namespace extensions
diff --git a/chromecast/browser/extensions/api/automation_internal/automation_internal_api.h b/chromecast/browser/extensions/api/automation_internal/automation_internal_api.h
new file mode 100644
index 0000000..bca6ae1f
--- /dev/null
+++ b/chromecast/browser/extensions/api/automation_internal/automation_internal_api.h
@@ -0,0 +1,107 @@
+// 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.
+// TODO(crbug/837773) This file was copied from
+// chrome/browser/extensions/api/automation_internal.
+// Copied code will be de-duped later.
+
+#ifndef CHROMECAST_BROWSER_EXTENSIONS_API_AUTOMATION_INTERNAL_AUTOMATION_INTERNAL_API_H_
+#define CHROMECAST_BROWSER_EXTENSIONS_API_AUTOMATION_INTERNAL_AUTOMATION_INTERNAL_API_H_
+
+#include <string>
+
+#include "content/public/browser/web_contents_observer.h"
+#include "content/public/browser/web_contents_user_data.h"
+#include "extensions/browser/extension_function.h"
+
+namespace extensions {
+namespace cast {
+namespace api {
+namespace automation_internal {
+namespace PerformAction {
+struct Params;
+}  // namespace PerformAction
+}  // namespace automation_internal
+}  // namespace api
+}  // namespace cast
+}  // namespace extensions
+
+namespace ui {
+struct AXActionData;
+}  // namespace ui
+
+namespace extensions {
+namespace cast {
+
+// Implementation of the chrome.automation API.
+class AutomationInternalEnableTabFunction : public UIThreadExtensionFunction {
+  DECLARE_EXTENSION_FUNCTION("automationInternal.enableTab",
+                             AUTOMATIONINTERNAL_ENABLETAB)
+ protected:
+  ~AutomationInternalEnableTabFunction() override {}
+
+  ExtensionFunction::ResponseAction Run() override;
+};
+
+class AutomationInternalPerformActionFunction
+    : public UIThreadExtensionFunction {
+  DECLARE_EXTENSION_FUNCTION("automationInternal.performAction",
+                             AUTOMATIONINTERNAL_PERFORMACTION)
+ protected:
+  ~AutomationInternalPerformActionFunction() override {}
+
+  ExtensionFunction::ResponseAction Run() override;
+
+ private:
+  // Helper function to convert extension action to ax action.
+  ExtensionFunction::ResponseAction ConvertToAXActionData(
+      api::automation_internal::PerformAction::Params* params,
+      ui::AXActionData* data);
+};
+
+class AutomationInternalEnableFrameFunction : public UIThreadExtensionFunction {
+  DECLARE_EXTENSION_FUNCTION("automationInternal.enableFrame",
+                             AUTOMATIONINTERNAL_ENABLEFRAME)
+
+ protected:
+  ~AutomationInternalEnableFrameFunction() override {}
+
+  ExtensionFunction::ResponseAction Run() override;
+};
+
+class AutomationInternalEnableDesktopFunction
+    : public UIThreadExtensionFunction {
+  DECLARE_EXTENSION_FUNCTION("automationInternal.enableDesktop",
+                             AUTOMATIONINTERNAL_ENABLEDESKTOP)
+ protected:
+  ~AutomationInternalEnableDesktopFunction() override {}
+
+  ResponseAction Run() override;
+};
+
+class AutomationInternalQuerySelectorFunction
+    : public UIThreadExtensionFunction {
+  DECLARE_EXTENSION_FUNCTION("automationInternal.querySelector",
+                             AUTOMATIONINTERNAL_QUERYSELECTOR)
+
+ public:
+  typedef base::Callback<void(const std::string& error, int result_acc_obj_id)>
+      Callback;
+
+ protected:
+  ~AutomationInternalQuerySelectorFunction() override {}
+
+  ResponseAction Run() override;
+
+ private:
+  void OnResponse(const std::string& error, int result_acc_obj_id);
+
+  // Used for assigning a unique ID to each request so that the response can be
+  // routed appropriately.
+  static int query_request_id_counter_;
+};
+
+}  // namespace cast
+}  // namespace extensions
+
+#endif  // CHROMECAST_BROWSER_EXTENSIONS_API_AUTOMATION_INTERNAL_AUTOMATION_INTERNAL_API_H_
diff --git a/chromecast/common/cast_extensions_client.cc b/chromecast/common/cast_extensions_client.cc
index 54de4ec..fd643130 100644
--- a/chromecast/common/cast_extensions_client.cc
+++ b/chromecast/common/cast_extensions_client.cc
@@ -25,6 +25,7 @@
 #include "extensions/common/features/manifest_feature.h"
 #include "extensions/common/features/simple_feature.h"
 #include "extensions/common/manifest_handler.h"
+#include "extensions/common/manifest_handlers/automation.h"
 #include "extensions/common/manifest_handlers/content_scripts_handler.h"
 #include "extensions/common/permissions/permission_message_provider.h"
 #include "extensions/common/permissions/permissions_info.h"
@@ -39,6 +40,7 @@
 
 void RegisterCastManifestHandlers() {
   DCHECK(!ManifestHandler::IsRegistrationFinalized());
+  (new AutomationHandler)->Register();  // TODO(crbug/837773) De-dupe later.
   (new ContentScriptsHandler)->Register();
 }
 
diff --git a/chromecast/common/extensions_api/BUILD.gn b/chromecast/common/extensions_api/BUILD.gn
index 465712cc..092090d7 100644
--- a/chromecast/common/extensions_api/BUILD.gn
+++ b/chromecast/common/extensions_api/BUILD.gn
@@ -10,6 +10,9 @@
        "Cannot depend on extensions because enable_extensions=false.")
 
 schema_sources = [
+  # TODO(crbug/837773) De-dupe Automation later.
+  "automation.idl",
+  "automation_internal.idl",
   "bookmarks.json",
   "braille_display_private.idl",
   "history.json",
diff --git a/chromecast/common/extensions_api/_api_features.json b/chromecast/common/extensions_api/_api_features.json
index 3ee6bd7..0d4bbd06 100644
--- a/chromecast/common/extensions_api/_api_features.json
+++ b/chromecast/common/extensions_api/_api_features.json
@@ -7,6 +7,16 @@
 // feature.h, simple_feature.h, and feature_provider.h.
 
 {
+  // TODO(crbug/837773) De-dupe automation later.
+  "automationInternal": {
+    "internal": true,
+    "dependencies": ["manifest:automation"],
+    "contexts": ["blessed_extension"]
+  },
+  "automation": {
+    "dependencies": ["manifest:automation"],
+    "contexts": ["blessed_extension"]
+  },
   "brailleDisplayPrivate": {
     "dependencies": ["permission:brailleDisplayPrivate"],
     "contexts": ["blessed_extension"]
diff --git a/chromecast/common/extensions_api/_manifest_features.json b/chromecast/common/extensions_api/_manifest_features.json
index b29439e..8606334f 100644
--- a/chromecast/common/extensions_api/_manifest_features.json
+++ b/chromecast/common/extensions_api/_manifest_features.json
@@ -3,6 +3,15 @@
 // found in the LICENSE file.
 
 {
+  // TODO(crbug/837773) De-dupe automation later.
+  "automation": [{
+    "channel": "dev",
+    "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+  }, {
+    "channel": "stable",
+    "extension_types": ["extension", "legacy_packaged_app"],
+    "whitelist": [ "2FCBCE08B34CCA1728A85F1EFBD9A34DD2558B2E" ]
+  }],
   "cast_url": {
     "channel": "stable",
     "extension_types": ["platform_app"]
diff --git a/chromecast/common/extensions_api/automation.idl b/chromecast/common/extensions_api/automation.idl
new file mode 100644
index 0000000..8d98e48
--- /dev/null
+++ b/chromecast/common/extensions_api/automation.idl
@@ -0,0 +1,987 @@
+// 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.
+
+// The <code>chrome.automation</code> API allows developers to access the
+// automation (accessibility) tree for the browser. The tree resembles the DOM
+// tree, but only exposes the <em>semantic</em> structure of a page. It can be
+// used to programmatically interact with a page by examining names, roles, and
+// states, listening for events, and performing actions on nodes.
+[nocompile] namespace automation {
+  // Keep the following enums in sync with 'ui/accessibility/ax_enums.idl'.
+  // They are kept here purely for extension docs generation.
+
+  // Possible events fired on an $(ref:automation.AutomationNode).
+  enum EventType {
+    activedescendantchanged,
+    alert,
+    ariaAttributeChanged,
+    autocorrectionOccured,
+    blur,
+    checkedStateChanged,
+    childrenChanged,
+    clicked,
+    documentSelectionChanged,
+    expandedChanged,
+    focus,
+    focusContext,
+    imageFrameUpdated,
+    hide,
+    hitTestResult,
+    hover,
+    invalidStatusChanged,
+    layoutComplete,
+    liveRegionCreated,
+    liveRegionChanged,
+    loadComplete,
+    locationChanged,
+    mediaStartedPlaying,
+    mediaStoppedPlaying,
+    menuEnd,
+    menuListItemSelected,
+    menuListValueChanged,
+    menuPopupEnd,
+    menuPopupStart,
+    menuStart,
+    mouseCanceled,
+    mouseDragged,
+    mouseMoved,
+    mousePressed,
+    mouseReleased,
+    rowCollapsed,
+    rowCountChanged,
+    rowExpanded,
+    scrollPositionChanged,
+    scrolledToAnchor,
+    selectedChildrenChanged,
+    selection,
+    selectionAdd,
+    selectionRemove,
+    show,
+    stateChanged,
+    textChanged,
+    textSelectionChanged,
+    treeChanged,
+    valueChanged
+  };
+
+  // Describes the purpose of an $(ref:automation.AutomationNode).
+  enum RoleType {
+    abbr,
+    alert,
+    alertDialog,
+    anchor,
+    annotation,
+    application,
+    article,
+    audio,
+    banner,
+    blockquote,
+    button,
+    canvas,
+    caption,
+    caret,
+    cell,
+    checkBox,
+    client,
+    colorWell,
+    column,
+    columnHeader,
+    comboBoxGrouping,
+    comboBoxMenuButton,
+    complementary,
+    contentInfo,
+    date,
+    dateTime,
+    definition,
+    descriptionList,
+    descriptionListDetail,
+    descriptionListTerm,
+    desktop,
+    details,
+    dialog,
+    directory,
+    disclosureTriangle,
+    document,
+    embeddedObject,
+    feed,
+    figcaption,
+    figure,
+    footer,
+    form,
+    genericContainer,
+    grid,
+    group,
+    heading,
+    iframe,
+    iframePresentational,
+    ignored,
+    image,
+    imageMap,
+    inlineTextBox,
+    inputTime,
+    labelText,
+    layoutTable,
+    layoutTableCell,
+    layoutTableColumn,
+    layoutTableRow,
+    legend,
+    lineBreak,
+    link,
+    list,
+    listBox,
+    listBoxOption,
+    listItem,
+    listMarker,
+    locationBar,
+    log,
+    main,
+    mark,
+    marquee,
+    math,
+    menu,
+    menuBar,
+    menuButton,
+    menuItem,
+    menuItemCheckBox,
+    menuItemRadio,
+    menuListOption,
+    menuListPopup,
+    meter,
+    navigation,
+    note,
+    pane,
+    paragraph,
+    popUpButton,
+    pre,
+    presentational,
+    progressIndicator,
+    radioButton,
+    radioGroup,
+    region,
+    rootWebArea,
+    row,
+    rowHeader,
+    ruby,
+    scrollBar,
+    scrollView,
+    search,
+    searchBox,
+    slider,
+    sliderThumb,
+    spinButton,
+    spinButtonPart,
+    splitter,
+    staticText,
+    status,
+    svgRoot,
+    switch,
+    tab,
+    tabList,
+    tabPanel,
+    table,
+    tableHeaderContainer,
+    term,
+    textField,
+    textFieldWithComboBox,
+    time,
+    timer,
+    titleBar,
+    toggleButton,
+    toolbar,
+    tooltip,
+    tree,
+    treeGrid,
+    treeItem,
+    unknown,
+    video,
+    webArea,
+    webView,
+    window
+  };
+
+  // Describes characteristics of an $(ref:automation.AutomationNode).
+  enum StateType {
+    collapsed,
+    default,
+    editable,
+    expanded,
+    focusable,
+    focused,
+    haspopup,
+    horizontal,
+    hovered,
+    ignored,
+    invisible,
+    linked,
+    multiline,
+    multiselectable,
+    offscreen,
+    protected,
+    required,
+    richlyEditable,
+    vertical,
+    visited
+  };
+
+  // All possible actions that can be performed on automation nodes.
+  enum ActionType {
+    blur,
+    customAction,
+    decrement,
+    doDefault,
+    focus,
+    getImageData,
+    hitTest,
+    increment,
+    loadInlineTextBoxes,
+    replaceSelectedText,
+    scrollBackward,
+    scrollDown,
+    scrollForward,
+    scrollLeft,
+    scrollRight,
+    scrollToMakeVisible,
+    scrollToPoint,
+    scrollUp,
+    setScrollOffset,
+    setSelection,
+    setSequentialFocusNavigationStartingPoint,
+    setValue,
+    showContextMenu
+  };
+
+  // Possible changes to the automation tree. For any given atomic change
+  // to the tree, each node that's added, removed, or changed, will appear
+  // in exactly one TreeChange, with one of these types.
+  //
+  //
+  // nodeCreated means that this node was added to the tree and its parent is
+  // new as well, so it's just one node in a new subtree that was added.
+  enum TreeChangeType {
+    /**
+     * This node was added to the tree and its parent is new as well,
+     * so it's just one node in a new subtree that was added.
+     */
+    nodeCreated,
+
+    /**
+     * This node was added to the tree but its parent was already in the
+     * tree, so it's possibly the root of a new subtree - it does not mean
+     * that it necessarily has children.
+     */
+    subtreeCreated,
+
+    /**
+     * This node changed.
+     */
+    nodeChanged,
+
+    /**
+     * This node's text (name) changed.
+     */
+    textChanged,
+
+    /**
+     * This node was removed.
+     */
+    nodeRemoved,
+    /**
+     * This subtree has finished an update.
+     */
+    subtreeUpdateEnd
+  };
+
+  // Where the node's name is from.
+  enum NameFromType {
+    uninitialized,
+    attribute,
+    attributeExplicitlyEmpty,
+    contents,
+    placeholder,
+    relatedElement,
+    value
+  };
+
+  // The input restriction for a object -- even non-controls can be disabled.
+  enum Restriction {
+    disabled,
+    readOnly
+  };
+
+  // Describes possible actions when performing a do default action.
+  enum DefaultActionVerb {
+    activate,
+    check,
+    click,
+    clickAncestor,
+    jump,
+    open,
+    press,
+    select,
+    uncheck
+};
+
+  dictionary Rect {
+    long left;
+    long top;
+    long width;
+    long height;
+  };
+
+  // Arguments for the find() and findAll() methods.
+  [nocompile, noinline_doc] dictionary FindParams {
+    RoleType? role;
+
+    // A map of $(ref:automation.StateType) to boolean, indicating for each
+    // state whether it should be set or not. For example:
+    // <code>{ StateType.disabled: false }</code> would only match if
+    // <code>StateType.disabled</code> was <em>not</em> present in the node's
+    // <code>state</code> object.
+    object? state;
+
+    // A map of attribute name to expected value, for example
+    // <code>{ name: 'Root directory', checkbox_mixed: true }</code>.
+    // String attribute values may be specified as a regex, for example
+    // <code>{ name: /stralia$/</code> }</code>.
+    // Unless specifying a regex, the expected value must be an exact match
+    // in type and value for the actual value. Thus, the type of expected value
+    // must be one of:
+    // <ul>
+    // <li>string</li>
+    // <li>integer</li>
+    // <li>float</li>
+    // <li>boolean</li>
+    // </ul>
+    object? attributes;
+  };
+
+  // Arguments for the setDocumentSelection() function.
+  [nocompile, noinline_doc] dictionary SetDocumentSelectionParams {
+    // The node where the selection begins.
+    [instanceOf=AutomationNode] object anchorObject;
+    // The offset in the anchor node where the selection begins.
+    long anchorOffset;
+    // The node where the selection ends.
+    [instanceOf=AutomationNode] object focusObject;
+    // The offset within the focus node where the selection ends.
+    long focusOffset;
+  };
+
+  // Called when the result for a <code>query</code> is available.
+  callback QueryCallback = void(AutomationNode node);
+
+  // An event in the Automation tree.
+  [nocompile, noinline_doc] dictionary AutomationEvent {
+    // The $(ref:automation.AutomationNode) to which the event was targeted.
+    AutomationNode target;
+
+    // The type of the event.
+    EventType type;
+
+    // The source of this event.
+    DOMString eventFrom;
+
+    long mouseX;
+    long mouseY;
+
+    // Stops this event from further processing except for any remaining
+    // listeners on $(ref:AutomationEvent.target).
+    static void stopPropagation();
+  };
+
+  // A listener for events on an <code>AutomationNode</code>.
+  callback AutomationListener = void(AutomationEvent event);
+
+  // A change to the Automation tree.
+  [nocompile, noinline_doc] dictionary TreeChange {
+    // The $(ref:automation.AutomationNode) that changed.
+    AutomationNode target;
+
+    // The type of change.
+    TreeChangeType type;
+  };
+
+  // Possible tree changes to listen to using addTreeChangeObserver.
+  // Note that listening to all tree changes can be expensive.
+  enum TreeChangeObserverFilter {
+    noTreeChanges,
+    liveRegionTreeChanges,
+    textMarkerChanges,
+    allTreeChanges
+  };
+
+  // A listener for changes on the <code>AutomationNode</code> tree.
+  callback TreeChangeObserver = void(TreeChange treeChange);
+
+  // Callback called for actions with a response.
+  callback PerformActionCallback = void(boolean result);
+  callback PerformActionCallbackWithNode = void(AutomationNode node);
+
+  dictionary CustomAction {
+    long id;
+    DOMString description;
+  };
+
+  // A single node in an Automation tree.
+  [nocompile, noinline_doc] dictionary AutomationNode {
+    // The root node of the tree containing this AutomationNode.
+    AutomationNode? root;
+
+    // Whether this AutomationNode is a root node.
+    boolean isRootNode;
+
+    // The role of this node.
+    RoleType? role;
+
+    // The $(ref:automation.StateType)s describing this node.
+    // <jsexterns>@type {Object<chrome.automation.StateType, boolean>}
+    // </jsexterns>
+    object? state;
+
+    // The rendered location (as a bounding box) of this node in global
+    // screen coordinates.
+    Rect? location;
+
+    // Computes the bounding box of a subrange of this node in global screen
+    // coordinates. Returns the same as |location| if range information
+    // is not available. The start and end indices are zero-based offsets
+    // into the node's "name" string attribute.
+    static Rect boundsForRange(long startIndex, long endIndex);
+
+    // The location (as a bounding box) of this node in global screen
+    // coordinates without applying any clipping from ancestors.
+    Rect? unclippedLocation;
+
+    // The purpose of the node, other than the role, if any.
+    DOMString? description;
+
+    // The placeholder for this text field, if any.
+    DOMString? placeholder;
+
+    // The role description for this node.
+    DOMString? roleDescription;
+
+    // The accessible name for this node, via the
+    // <a href="http://www.w3.org/TR/wai-aria/roles#namecalculation">
+    // Accessible Name Calculation</a> process.
+    DOMString? name;
+
+    // The source of the name.
+    NameFromType? nameFrom;
+
+    // The value for this node: for example the <code>value</code> attribute of
+    // an <code>&lt;input&gt; element.
+    DOMString? value;
+
+    // The HTML tag for this element, if this node is an HTML element.
+    DOMString? htmlTag;
+
+    // The level of a heading or tree item.
+    long? hierarchicalLevel;
+
+    // The start and end index of each word in an inline text box.
+    long[]? wordStarts;
+    long[]? wordEnds;
+
+    // The nodes, if any, which this node is specified to control via
+    // <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-controls">
+    // <code>aria-controls</code></a>.
+    AutomationNode[]? controls;
+
+    // The nodes, if any, which form a description for this node.
+    AutomationNode[]? describedBy;
+
+    // The nodes, if any, which may optionally be navigated to after this
+    // one. See
+    // <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-flowto">
+    // <code>aria-flowto</code></a>.
+    AutomationNode[]? flowTo;
+
+    // The nodes, if any, which form a label for this element. Generally, the
+    // text from these elements will also be exposed as the element's accessible
+    // name, via the $(ref:automation.AutomationNode.name) attribute.
+    AutomationNode[]? labelledBy;
+
+    // The node referred to by <code>aria-activedescendant</code>, where
+    // applicable
+    AutomationNode? activeDescendant;
+
+    // The target of an in-page link.
+    AutomationNode? inPageLinkTarget;
+
+    // A node that provides more details about the current node.
+    AutomationNode? details;
+
+    // A node that provides an error message for a current node.
+    AutomationNode? errorMessage;
+
+    // Reverse relationship for details.
+    AutomationNode[]? detailsFor;
+
+    // Reverse relationship for errorMessage.
+    AutomationNode[]? errorMessageFor;
+
+    // Reverse relationship for controls.
+    AutomationNode[]? controlledBy;
+
+    // Reverse relationship for describedBy.
+    AutomationNode[]? descriptionFor;
+
+    // Reverse relationship for flowTo.
+    AutomationNode[]? flowFrom;
+
+    // Reverse relationship for labelledBy.
+    AutomationNode[]? labelFor;
+
+    // An array of standard actions available on this node.
+    ActionType[]? standardActions;
+
+    // An array of custom actions.
+    CustomAction[]? customActions;
+
+    // The action taken by calling <code>doDefault</code>.
+    DefaultActionVerb? defaultActionVerb;
+
+    //
+    // Link attributes.
+    //
+
+    // The URL that this link will navigate to.
+    DOMString? url;
+
+    //
+    // Document attributes.
+    //
+
+    // The URL of this document.
+    DOMString? docUrl;
+
+    // The title of this document.
+    DOMString? docTitle;
+
+    // Whether this document has finished loading.
+    boolean? docLoaded;
+
+    // The proportion (out of 1.0) that this doc has completed loading.
+    double? docLoadingProgress;
+
+    //
+    // Scrollable container attributes.
+    //
+
+    long? scrollX;
+    long? scrollXMin;
+    long? scrollXMax;
+    long? scrollY;
+    long? scrollYMin;
+    long? scrollYMax;
+
+    //
+    // Editable text field attributes.
+    //
+
+    // The character index of the start of the selection within this editable
+    // text element; -1 if no selection.
+    long? textSelStart;
+
+    // The character index of the end of the selection within this editable
+    // text element; -1 if no selection.
+    long? textSelEnd;
+
+    // The input type, like email or number.
+    DOMString? textInputType;
+
+    // An array of indexes of the break between lines in editable text.
+    long[] lineBreaks;
+
+    // An array of indexes of the start position of each text marker.
+    long[] markerStarts;
+
+    // An array of indexes of the end position of each text marker.
+    long[] markerEnds;
+
+    // An array of numerical types indicating the type of each text marker,
+    // such as a spelling error.
+    long[] markerTypes;
+
+    //
+    // Tree selection attributes (available on root nodes only)
+    //
+
+    // The anchor node of the tree selection, if any.
+    AutomationNode? anchorObject;
+    // The anchor offset of the tree selection, if any.
+    long? anchorOffset;
+    // The affinity of the tree selection anchor, if any.
+    DOMString? anchorAffinity;
+    // The focus node of the tree selection, if any.
+    AutomationNode? focusObject;
+    // The focus offset of the tree selection, if any.
+    long? focusOffset;
+    // The affinity of the tree selection focus, if any.
+    DOMString? focusAffinity;
+
+    //
+    // Range attributes.
+    //
+
+    // The current value for this range.
+    double? valueForRange;
+
+    // The minimum possible value for this range.
+    double? minValueForRange;
+
+    // The maximum possible value for this range.
+    double? maxValueForRange;
+
+    //
+    // List attributes.
+    //
+
+    // The 1-based index of an item in a set.
+    long? posInSet;
+
+    // The number of items in a set;
+    long? setSize;
+
+    //
+    // Table attributes.
+    //
+
+    // The number of rows in this table as specified in the DOM.
+    long? tableRowCount;
+
+    // The number of rows in this table as specified by the page author.
+    long? ariaRowCount;
+
+    // The number of columns in this table as specified in the DOM.
+    long? tableColumnCount;
+
+    // The number of columns in this table as specified by the page author.
+    long? ariaColumnCount;
+
+    //
+    // Table cell attributes.
+    //
+
+    // The zero-based index of the column that this cell is in as specified in
+    // the DOM.
+    long? tableCellColumnIndex;
+
+    // The ARIA column index as specified by the page author.
+    long? ariaCellColumnIndex;
+
+    // The number of columns that this cell spans (default is 1).
+    long? tableCellColumnSpan;
+
+    // The zero-based index of the row that this cell is in as specified in the
+    // DOM.
+    long? tableCellRowIndex;
+
+    // The ARIA row index as specified by the page author.
+    long? ariaCellRowIndex;
+
+    // The number of rows that this cell spans (default is 1).
+    long? tableCellRowSpan;
+
+    // The corresponding column header for this cell.
+    AutomationNode? tableColumnHeader;
+
+    // The corresponding row header for this cell.
+    AutomationNode? tableRowHeader;
+
+    // The column index of this column node.
+    long? tableColumnIndex;
+
+    // The row index of this row node.
+    long? tableRowIndex;
+
+    //
+    // Live region attributes.
+    //
+
+    // The type of region if this is the root of a live region.
+    // Possible values are 'polite' and 'assertive'.
+    DOMString? liveStatus;
+
+    // The value of aria-relevant for a live region.
+    DOMString? liveRelevant;
+
+    // The value of aria-atomic for a live region.
+    boolean? liveAtomic;
+
+    // The value of aria-busy for a live region or any other element.
+    boolean? busy;
+
+    // The type of live region if this node is inside a live region.
+    DOMString? containerLiveStatus;
+
+    // The value of aria-relevant if this node is inside a live region.
+    DOMString? containerLiveRelevant;
+
+    // The value of aria-atomic if this node is inside a live region.
+    boolean? containerLiveAtomic;
+
+    // The value of aria-busy if this node is inside a live region.
+    boolean? containerLiveBusy;
+
+    //
+    // Miscellaneous attributes.
+    //
+
+    // Aria auto complete.
+    DOMString? autoComplete;
+
+    // The name of the programmatic backing object.
+    DOMString? className;
+
+    // Marks this subtree as modal.
+    boolean? modal;
+
+    // A map containing all HTML attributes and their values
+    // <jsexterns>@type {Object<string>}</jsexterns>
+    object? htmlAttributes;
+
+    // The input type of a text field, such as "text" or "email".
+    DOMString? inputType;
+
+    // The key that activates this widget.
+    DOMString? accessKey;
+
+    // The value of the aria-invalid attribute, indicating the error type.
+    DOMString? ariaInvalidValue;
+
+    // The CSS display attribute for this node, if applicable.
+    DOMString? display;
+
+    // A data url with the contents of this object's image or thumbnail.
+    DOMString? imageDataUrl;
+
+    // The language code for this subtree.
+    DOMString? language;
+
+    // Input restriction, if any, such as readonly or disabled:
+    // undefined - enabled control or other object that is not disabled
+    // Restriction.DISABLED - disallows input in itself + any descendants
+    // Restriction.READONLY - allow focus/selection but not input
+    DOMString? restriction;
+
+    // Tri-state describing checkbox or radio button:
+    // 'false' | 'true' | 'mixed'
+    DOMString? checked;
+
+    // The RGBA foreground color of this subtree, as an integer.
+    long? color;
+
+    // The RGBA background color of this subtree, as an integer.
+    long? backgroundColor;
+
+    // The RGBA color of an input element whose value is a color.
+    long? colorValue;
+
+    // Indicates node text is bold.
+    boolean bold;
+
+    // Indicates node text is italic.
+    boolean italic;
+
+    // Indicates node text is underline.
+    boolean underline;
+
+    // Indicates node text is line through.
+    boolean lineThrough;
+
+    // Indicates whether this node is selected, unselected, or neither.
+    boolean? selected;
+
+    //
+    // Walking the tree.
+    //
+
+    AutomationNode[] children;
+    AutomationNode? parent;
+    AutomationNode? firstChild;
+    AutomationNode? lastChild;
+    AutomationNode? previousSibling;
+    AutomationNode? nextSibling;
+    AutomationNode? previousOnLine;
+    AutomationNode? nextOnLine;
+    AutomationNode? previousFocus;
+    AutomationNode? nextFocus;
+
+    // The index of this node in its parent node's list of children. If this is
+    // the root node, this will be undefined.
+    long? indexInParent;
+
+    //
+    // Actions.
+    //
+
+    // Does the default action based on this node's role. This is generally
+    // the same action that would result from clicking the node such as
+    // expanding a treeitem, toggling a checkbox, selecting a radiobutton,
+    // or activating a button.
+    static void doDefault();
+
+    // Places focus on this node.
+    static void focus();
+
+    // Request a data url for the contents of an image, optionally
+    // resized.  Pass zero for maxWidth and/or maxHeight for the
+    // original size.
+    static void getImageData(long maxWidth, long maxHeight);
+
+    // Does a hit test of the given global screen coordinates, and fires
+    // eventToFire on the resulting object.
+    static void hitTest(
+        long x,
+        long y,
+        EventType eventToFire);
+
+    // Does a $(ref:automation.AutomationNode.hitTest), and receives a callback
+    // with the resulting hit node.
+    static void hitTestWithReply(
+        long x,
+        long y,
+        PerformActionCallbackWithNode callback);
+
+    // Scrolls this node to make it visible.
+    static void makeVisible();
+
+    // Performs custom action.
+    static void performCustomAction(long customActionId);
+
+    // Convenience method to perform a standard action supported by this node.
+    // For actions requiring additional arguments, call the specific binding
+    // e.g. <code>setSelection</code>.
+    static void performStandardAction(ActionType actionType);
+
+    // Replaces the selected text within a text field.
+    static void replaceSelectedText(DOMString value);
+
+    // Sets selection within a text field.
+    static void setSelection(long startIndex, long endIndex);
+
+    // Clears focus and sets this node as the starting point for the next
+    // time the user presses Tab or Shift+Tab.
+    static void setSequentialFocusNavigationStartingPoint();
+
+    // Sets the value of a text field.
+    static void setValue(DOMString value);
+    
+    // Show the context menu for this element, as if the user right-clicked.
+    static void showContextMenu();
+
+    // Resume playing any media within this tree.
+    static void resumeMedia();
+
+    // Start ducking any media within this tree.
+    static void startDuckingMedia();
+
+    // Stop ducking any media within this tree.
+    static void stopDuckingMedia();
+
+    // Suspend any media playing within this tree.
+    static void suspendMedia();
+
+    // Scrolls this scrollable container backward.
+    static void scrollBackward(PerformActionCallback callback);
+
+    // Scrolls this scrollable container forward.
+    static void scrollForward(PerformActionCallback callback);
+
+    // Scrolls this scrollable container up.
+    static void scrollUp(PerformActionCallback callback);
+
+    // Scrolls this scrollable container down.
+    static void scrollDown(PerformActionCallback callback);
+
+    // Scrolls this scrollable container left.
+    static void scrollLeft(PerformActionCallback callback);
+
+    // Scrolls this scrollable container right.
+    static void scrollRight(PerformActionCallback callback);
+
+    // Adds a listener for the given event type and event phase.
+    static void addEventListener(
+        EventType eventType, AutomationListener listener, boolean capture);
+
+    // Removes a listener for the given event type and event phase.
+    static void removeEventListener(
+        EventType eventType, AutomationListener listener, boolean capture);
+
+    // Gets the first node in this node's subtree which matches the given CSS
+    // selector and is within the same DOM context.
+    //
+    // If this node doesn't correspond directly with an HTML node in the DOM,
+    // querySelector will be run on this node's nearest HTML node ancestor. Note
+    // that this may result in the query returning a node which is not a
+    // descendant of this node.
+    //
+    // If the selector matches a node which doesn't directly correspond to an
+    // automation node (for example an element within an ARIA widget, where the
+    // ARIA widget forms one node of the automation tree, or an element which
+    // is hidden from accessibility via hiding it using CSS or using
+    // aria-hidden), this will return the nearest ancestor which does correspond
+    // to an automation node.
+    static void domQuerySelector(DOMString selector, QueryCallback callback);
+
+    // Finds the first AutomationNode in this node's subtree which matches the
+    // given search parameters.
+    static AutomationNode find(FindParams params);
+
+    // Finds all the AutomationNodes in this node's subtree which matches the
+    // given search parameters.
+    static AutomationNode[] findAll(FindParams params);
+
+    // Returns whether this node matches the given $(ref:automation.FindParams).
+    static boolean matches(FindParams params);
+  };
+
+  // Called when the <code>AutomationNode</code> for the page is available.
+  callback RootCallback = void(AutomationNode rootNode);
+
+  // Called with the <code>AutomationNode</code> that currently has focus.
+  callback FocusCallback = void(AutomationNode focusedNode);
+
+  interface Functions {
+    // Get the automation tree for the tab with the given tabId, or the current
+    // tab if no tabID is given, enabling automation if necessary. Returns a
+    // tree with a placeholder root node; listen for the "loadComplete" event to
+    // get a notification that the tree has fully loaded (the previous root node
+    // reference will stop working at or before this point).
+    [nocompile] static void getTree(optional long tabId,
+                                    optional RootCallback callback);
+
+    // Get the automation tree for the whole desktop which consists of all on
+    // screen views. Note this API is currently only supported on Chrome OS.
+    [nocompile] static void getDesktop(RootCallback callback);
+
+    // Get the automation node that currently has focus, globally. Will return
+    // null if none of the nodes in any loaded trees have focus.
+    [nocompile] static void getFocus(FocusCallback callback);
+
+    // Add a tree change observer. Tree change observers are static/global, they
+    // listen to changes across all trees. Pass a filter to determine what
+    // specific tree changes to listen to, and note that listnening to all
+    // tree changes can be expensive.
+    [nocompile] static void addTreeChangeObserver(
+        TreeChangeObserverFilter filter, TreeChangeObserver observer);
+
+    // Remove a tree change observer.
+    [nocompile] static void removeTreeChangeObserver(
+        TreeChangeObserver observer);
+
+    // Sets the selection in a tree. This creates a selection in a single
+    // tree (anchorObject and focusObject must have the same root).
+    // Everything in the tree between the two node/offset pairs gets included
+    // in the selection. The anchor is where the user started the selection,
+    // while the focus is the point at which the selection gets extended
+    // e.g. when dragging with a mouse or using the keyboard. For nodes with
+    // the role staticText, the offset gives the character offset within
+    // the value where the selection starts or ends, respectively.
+    [nocompile] static void setDocumentSelection(
+        SetDocumentSelectionParams params);
+  };
+};
diff --git a/chromecast/common/extensions_api/automation_api_constants.h b/chromecast/common/extensions_api/automation_api_constants.h
new file mode 100644
index 0000000..6475383
--- /dev/null
+++ b/chromecast/common/extensions_api/automation_api_constants.h
@@ -0,0 +1,22 @@
+// 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.
+// TODO(crbug/837773) NOTE: This file was copied from
+// chrome/common/extensions/api.
+
+#ifndef CHROMECAST_COMMON_EXTENSIONS_API_AUTOMATION_API_CONSTANTS_H_
+#define CHROMECAST_COMMON_EXTENSIONS_API_AUTOMATION_API_CONSTANTS_H_
+
+namespace extensions {
+namespace api {
+namespace automation {
+
+// The accessibility tree ID of the desktop tree. All other tree IDs are
+// for web content.
+const int kDesktopTreeID = 0;
+
+}  // namespace automation
+}  // namespace api
+}  // namespace extensions
+
+#endif  // CHROMECAST_COMMON_EXTENSIONS_API_AUTOMATION_API_CONSTANTS_H_
diff --git a/chromecast/common/extensions_api/automation_internal.idl b/chromecast/common/extensions_api/automation_internal.idl
new file mode 100644
index 0000000..c92be62
--- /dev/null
+++ b/chromecast/common/extensions_api/automation_internal.idl
@@ -0,0 +1,155 @@
+// 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.
+
+// This is the implementation layer of the chrome.automation API, and is
+// essentially a translation of the internal accessibility tree update system
+// into an extension API.
+namespace automationInternal {
+  // Data for an accessibility event and/or an atomic change to an accessibility
+  // tree. See ui/accessibility/ax_tree_update.h for an extended explanation of
+  // the tree update format.
+  [nocompile] dictionary AXEventParams {
+    // The tree id of the web contents that this update is for.
+    long treeID;
+
+    // ID of the node that the event applies to.
+    long targetID;
+
+    // The type of event that this update represents.
+    DOMString eventType;
+
+    // The source of this event.
+    DOMString eventFrom;
+
+    // The mouse coordinates when this event fired.
+    double mouseX;
+    double mouseY;
+
+
+    // ID of an action request resulting in this event.
+    long actionRequestID;
+  };
+
+  // Actions internally used by automation.
+  enum ActionTypePrivate {
+    resumeMedia,
+    startDuckingMedia,
+    stopDuckingMedia,
+    suspendMedia
+  };
+
+  // Arguments required for all actions supplied to performAction.
+  dictionary PerformActionRequiredParams {
+    long treeID;
+    long automationNodeID;
+
+    // This can be either automation::ActionType or
+    // automation_internal::ActionTypePrivate.
+    DOMString actionType;
+
+    long? requestID;
+  };
+
+  // Arguments for the customAction action. Those args are passed to
+  // performAction as opt_args.
+  dictionary PerformCustomActionParams {
+    long customActionID;
+  };
+
+  // Arguments for the setSelection action supplied to performAction.
+  dictionary SetSelectionParams {
+    // Reuses ActionRequiredParams automationNodeID to mean anchor node id,
+    // and treeID to apply to both anchor and focus node ids.
+    long focusNodeID;
+    long anchorOffset;
+    long focusOffset;
+  };
+
+  // Arguments for the replaceSelectedText action supplied to performAction.
+  dictionary ReplaceSelectedTextParams {
+    DOMString value;
+  };
+
+  // Arguments for the setValue action supplied to performAction.
+  dictionary SetValueParams {
+    DOMString value;
+  };
+
+  // Arguments for the querySelector function.
+  dictionary QuerySelectorRequiredParams {
+    long treeID;
+    long automationNodeID;
+    DOMString selector;
+  };
+
+  // Arguments for the enableTab function.
+  dictionary EnableTabParams {
+    long? tabID;
+  };
+
+  // Arguments for the getImageData action.
+  dictionary GetImageDataParams {
+    long maxWidth;
+    long maxHeight;
+  };
+
+  // Arguments for the hitTest action.
+  dictionary HitTestParams {
+    long x;
+    long y;
+    DOMString eventToFire;
+  };
+
+  // Returns the accessibility tree id of the web contents who's accessibility
+  // was enabled using enableTab().
+  callback EnableTabCallback = void(long tree_id);
+
+  // Callback called when enableDesktop() returns.
+  callback EnableDesktopCallback = void();
+
+  // Callback called when querySelector() returns.
+  callback QuerySelectorCallback = void(long resultAutomationNodeID);
+
+  interface Functions {
+    // Enable automation of the tab with the given id, or the active tab if no
+    // tab id is given, and retrieves accessibility tree id for use in
+    // future updates.
+    static void enableTab(EnableTabParams args,
+                          EnableTabCallback callback);
+
+    // Enable automation of the frame with the given tree id.
+    static void enableFrame(long tree_id);
+
+    // Enables desktop automation.
+    static void enableDesktop(EnableDesktopCallback callback);
+
+    // Performs an action on an automation node.
+    static void performAction(PerformActionRequiredParams args,
+                              object opt_args);
+
+    // Performs a query selector query.
+    static void querySelector(QuerySelectorRequiredParams args,
+                              QuerySelectorCallback callback);
+  };
+
+  interface Events {
+    // Fired when an accessibility event occurs
+    static void onAccessibilityEvent(AXEventParams update);
+
+    static void onAccessibilityTreeDestroyed(long treeID);
+
+    static void onTreeChange(long observerID,
+                             long treeID,
+                             long nodeID,
+                             DOMString changeType);
+
+    static void onChildTreeID(long treeID, long nodeID);
+
+    static void onNodesRemoved(long treeID, long[] nodeIDs);
+
+    static void onAccessibilityTreeSerializationError(long treeID);
+
+    static void onActionResult(long treeID, long requestID, boolean result);
+  };
+};
diff --git a/chromeos/dbus/fake_session_manager_client.cc b/chromeos/dbus/fake_session_manager_client.cc
index 90ce9be..2e963552 100644
--- a/chromeos/dbus/fake_session_manager_client.cc
+++ b/chromeos/dbus/fake_session_manager_client.cc
@@ -25,43 +25,24 @@
 #include "components/policy/proto/device_management_backend.pb.h"
 #include "crypto/sha2.h"
 
-using RetrievePolicyResponseType =
-    chromeos::FakeSessionManagerClient::RetrievePolicyResponseType;
-
 namespace chromeos {
 
+using RetrievePolicyCallback = FakeSessionManagerClient::RetrievePolicyCallback;
+using RetrievePolicyResponseType =
+    FakeSessionManagerClient::RetrievePolicyResponseType;
+
 namespace {
 
 constexpr char kFakeContainerInstanceId[] = "0123456789ABCDEF";
-constexpr char kStubDevicePolicyFile[] = "stub_device_policy";
-constexpr char kStubPolicyFile[] = "stub_policy";
-constexpr char kStubStateKeysFile[] = "stub_state_keys";
-constexpr char kStubPolicyKey[] = "policy.pub";
+constexpr char kStubDevicePolicyFileNamePrefix[] = "stub_device_policy";
+constexpr char kStubPerAccountPolicyFileNamePrefix[] = "stub_policy";
+constexpr char kStubStateKeysFileName[] = "stub_state_keys";
+constexpr char kStubExtensionPolicyFileNameFragment[] = "_extension_";
+constexpr char kStubSigninExtensionPolicyFileNameFragment[] =
+    "_signin_extension_";
+constexpr char kStubPerAccountPolicyKeyFileName[] = "policy.pub";
 constexpr char kEmptyAccountId[] = "";
 
-// Store the owner key in a file on the disk, so that it can be loaded by
-// DeviceSettingsService and used e.g. for validating policy signatures in the
-// integration tests. This is done on behalf of the real session manager, that
-// would be managing the owner key file on Chrome OS.
-bool StoreOwnerKey(const std::string& public_key) {
-  base::FilePath owner_key_path;
-  if (!base::PathService::Get(FILE_OWNER_KEY, &owner_key_path)) {
-    LOG(ERROR) << "Failed to obtain the path to the owner key file";
-    return false;
-  }
-  if (!base::CreateDirectory(owner_key_path.DirName())) {
-    LOG(ERROR) << "Failed to create the directory for the owner key file";
-    return false;
-  }
-  if (base::WriteFile(owner_key_path, public_key.c_str(),
-                      public_key.length()) !=
-      base::checked_cast<int>(public_key.length())) {
-    LOG(ERROR) << "Failed to store the owner key file";
-    return false;
-  }
-  return true;
-}
-
 // Helper to asynchronously retrieve a file's content.
 std::string GetFileContent(const base::FilePath& path) {
   std::string result;
@@ -70,15 +51,19 @@
   return result;
 }
 
-// Helper to write a file in a background thread.
-void StoreFile(const base::FilePath& path, const std::string& data) {
-  if (path.empty() || !base::CreateDirectory(path.DirName())) {
-    LOG(WARNING) << "Failed to write to " << path.value();
-    return;
+// Helper to write files in a background thread.
+void StoreFiles(std::map<base::FilePath, std::string> paths_and_data) {
+  for (const auto& kv : paths_and_data) {
+    const base::FilePath& path = kv.first;
+    if (path.empty() || !base::CreateDirectory(path.DirName())) {
+      LOG(WARNING) << "Failed to write to " << path.value();
+      continue;
+    }
+    const std::string& data = kv.second;
+    int result = base::WriteFile(path, data.data(), data.size());
+    if (result == -1 || static_cast<size_t>(result) != data.size())
+      LOG(WARNING) << "Failed to write to " << path.value();
   }
-  int result = base::WriteFile(path, data.data(), data.size());
-  if (result == -1 || static_cast<size_t>(result) != data.size())
-    LOG(WARNING) << "Failed to write to " << path.value();
 }
 
 // Creates a PolicyDescriptor object to store/retrieve Chrome policy.
@@ -92,6 +77,14 @@
   return descriptor;
 }
 
+// Returns true if the policy descriptor points to Chrome device policy.
+bool IsChromeDevicePolicy(const login_manager::PolicyDescriptor& descriptor) {
+  DCHECK(descriptor.has_account_type());
+  DCHECK(descriptor.has_domain());
+  return descriptor.account_type() == login_manager::ACCOUNT_TYPE_DEVICE &&
+         descriptor.domain() == login_manager::POLICY_DOMAIN_CHROME;
+}
+
 // Helper to asynchronously read (or if missing create) state key stubs.
 std::vector<std::string> ReadCreateStateKeysStub(const base::FilePath& path) {
   std::string contents;
@@ -104,7 +97,7 @@
           base::IntToString(i) +
           base::Int64ToString(base::Time::Now().ToJavaTime()));
     }
-    StoreFile(path, contents);
+    StoreFiles({{path, contents}});
   }
 
   std::vector<std::string> state_keys;
@@ -113,112 +106,135 @@
   return state_keys;
 }
 
+// Gets the postfix of the stub policy filename, which is based the
+// |descriptor|'s domain and component id. Returns an empty string if the domain
+// doesn't use a component id (e.g. normal Chrome user/device policy).
+std::string GetStubPolicyFilenamePostfix(
+    const login_manager::PolicyDescriptor& descriptor) {
+  DCHECK(descriptor.has_domain());
+  switch (descriptor.domain()) {
+    case login_manager::POLICY_DOMAIN_CHROME:
+      return std::string();
+    case login_manager::POLICY_DOMAIN_EXTENSIONS:
+      DCHECK(descriptor.has_component_id());
+      return kStubExtensionPolicyFileNameFragment + descriptor.component_id();
+    case login_manager::POLICY_DOMAIN_SIGNIN_EXTENSIONS:
+      DCHECK(descriptor.has_component_id());
+      return kStubSigninExtensionPolicyFileNameFragment +
+             descriptor.component_id();
+  }
+  NOTREACHED();
+  return std::string();
+}
+
+// Returns the last part of the stub policy file path consisting of the filename
+// for device accounts and <cryptohome_id>/filename for user and device local
+// accounts, e.g.
+//   "stub_device_policy" for Chrome device policy or
+//   "<cryptohome_id>/stub_policy_extension_<id>" for extension policy.
+// This path is also used as key in the in-memory policy map |policy_|.
+base::FilePath GetStubRelativePolicyPath(
+    const login_manager::PolicyDescriptor& descriptor) {
+  DCHECK(descriptor.has_account_type());
+  std::string postfix = GetStubPolicyFilenamePostfix(descriptor);
+  switch (descriptor.account_type()) {
+    case login_manager::ACCOUNT_TYPE_DEVICE:
+      return base::FilePath(kStubDevicePolicyFileNamePrefix + postfix);
+
+    case login_manager::ACCOUNT_TYPE_USER:
+    case login_manager::ACCOUNT_TYPE_SESSIONLESS_USER:
+    case login_manager::ACCOUNT_TYPE_DEVICE_LOCAL_ACCOUNT: {
+      DCHECK(descriptor.has_account_id());
+      cryptohome::Identification cryptohome_id =
+          cryptohome::Identification::FromString(descriptor.account_id());
+      const std::string sanitized_id =
+          CryptohomeClient::GetStubSanitizedUsername(cryptohome_id);
+      return base::FilePath(sanitized_id)
+          .AppendASCII(kStubPerAccountPolicyFileNamePrefix + postfix);
+    }
+  }
+  NOTREACHED();
+  return base::FilePath();
+}
+
 // Gets the stub file paths of the policy blob and optionally the policy key
-// (|key_path|) for the given |descriptor|. |key_path| can be nullptr. Returns
-// an empty file path on error.
+// (|key_path|) for the given |descriptor|. |key_path| can be nullptr.
 base::FilePath GetStubPolicyFilePath(
     const login_manager::PolicyDescriptor& descriptor,
     base::FilePath* key_path) {
   if (key_path)
     key_path->clear();
 
+  base::FilePath relative_policy_path = GetStubRelativePolicyPath(descriptor);
+  DCHECK(descriptor.has_account_type());
   switch (descriptor.account_type()) {
     case login_manager::ACCOUNT_TYPE_DEVICE: {
       base::FilePath owner_key_path;
-      if (!PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_path))
-        return base::FilePath();
+      CHECK(PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_path));
       if (key_path)
         *key_path = owner_key_path;
-      return owner_key_path.DirName().AppendASCII(kStubDevicePolicyFile);
+      return owner_key_path.DirName().Append(relative_policy_path);
     }
 
     case login_manager::ACCOUNT_TYPE_USER:
     case login_manager::ACCOUNT_TYPE_SESSIONLESS_USER:
     case login_manager::ACCOUNT_TYPE_DEVICE_LOCAL_ACCOUNT: {
       base::FilePath base_path;
-      if (!PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &base_path))
-        return base::FilePath();
-      cryptohome::Identification cryptohome_id =
-          cryptohome::Identification::FromString(descriptor.account_id());
-      const std::string sanitized_id =
-          CryptohomeClient::GetStubSanitizedUsername(cryptohome_id);
-      base_path = base_path.AppendASCII(sanitized_id);
-      if (key_path)
-        *key_path = base_path.AppendASCII(kStubPolicyKey);
-      return base_path.AppendASCII(kStubPolicyFile);
+      CHECK(PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &base_path));
+      if (key_path) {
+        *key_path = base_path.Append(relative_policy_path.DirName())
+                        .AppendASCII(kStubPerAccountPolicyKeyFileName);
+      }
+      return base_path.Append(relative_policy_path);
     }
   }
+  NOTREACHED();
+  return base::FilePath();
 }
 
-// Blocking stub call to retrieve policy from disk. Returns empty string on
-// error.
-std::string StubBlockingRetrievePolicy(
+// Returns a key that's used for storing policy in memory.
+std::string GetMemoryStorageKey(
     const login_manager::PolicyDescriptor& descriptor) {
-  base::FilePath policy_path = GetStubPolicyFilePath(descriptor, nullptr);
-  if (policy_path.empty())
-    return std::string();
-  return GetFileContent(policy_path);
+  base::FilePath relative_policy_path = GetStubRelativePolicyPath(descriptor);
+  DCHECK(!relative_policy_path.empty());
+  return relative_policy_path.value();
 }
 
-// Non-blocking stub call to retrieve policy from disk.
-void StubCallRetrievePolicy(
-    const login_manager::PolicyDescriptor& descriptor,
-    SessionManagerClient::RetrievePolicyCallback callback) {
-  base::PostTaskWithTraitsAndReplyWithResult(
-      FROM_HERE,
-      {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-      base::BindOnce(&StubBlockingRetrievePolicy, descriptor),
-      base::BindOnce(std::move(callback), RetrievePolicyResponseType::SUCCESS));
+// Posts a task to call callback(response).
+template <typename CallbackType, typename ResponseType>
+void PostReply(const base::Location& from_here,
+               CallbackType callback,
+               ResponseType response) {
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      from_here, base::BindOnce(std::move(callback), std::move(response)));
 }
 
-// Stub call to store policy on disk.
-void StubCallStorePolicy(const login_manager::PolicyDescriptor& descriptor,
-                         const std::string& policy_blob,
-                         VoidDBusMethodCallback callback) {
-  // Decode the blob (to get the new key) and get file paths.
-  enterprise_management::PolicyFetchResponse response;
-  base::FilePath key_path;
-  base::FilePath policy_path = GetStubPolicyFilePath(descriptor, &key_path);
-  if (policy_path.empty() || !response.ParseFromString(policy_blob)) {
-    std::move(callback).Run(false);
-    return;
-  }
-
-  // Make sure both key (if present) and policy get written before signalling
-  // completion since Chrome will attempt to retrieve the device policy right
-  // after storing during enrollment.
-  scoped_refptr<base::SequencedTaskRunner> task_runner =
-      base::CreateSequencedTaskRunnerWithTraits(
-          {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
-
-  // Rotate key if there's a new one.
-  if (response.has_new_public_key()) {
-    task_runner->PostTask(FROM_HERE, base::BindOnce(&StoreFile, key_path,
-                                                    response.new_public_key()));
-  }
-
-  // Write policy and signal completion.
-  task_runner->PostTaskAndReply(
-      FROM_HERE, base::BindOnce(&StoreFile, policy_path, policy_blob),
-      base::BindOnce(std::move(callback), true));
+// Posts a task to call callback(response, policy).
+void PostReplyWithPolicy(const base::Location& from_here,
+                         RetrievePolicyCallback callback,
+                         RetrievePolicyResponseType response,
+                         const std::string& policy) {
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      from_here, base::BindOnce(std::move(callback), response, policy));
 }
 
 }  // namespace
 
-FakeSessionManagerClient::FakeSessionManagerClient(uint32_t options)
-    : start_device_wipe_call_count_(0),
+FakeSessionManagerClient::FakeSessionManagerClient()
+    : FakeSessionManagerClient(PolicyStorageType::kInMemory) {}
+
+FakeSessionManagerClient::FakeSessionManagerClient(
+    PolicyStorageType policy_storage)
+    : policy_storage_(policy_storage),
+      start_device_wipe_call_count_(0),
       request_lock_screen_call_count_(0),
       notify_lock_screen_shown_call_count_(0),
       notify_lock_screen_dismissed_call_count_(0),
       screen_is_locked_(false),
       arc_available_(false),
       delegate_(nullptr),
-      options_(options),
       weak_ptr_factory_(this) {}
 
-FakeSessionManagerClient::FakeSessionManagerClient()
-    : FakeSessionManagerClient(NONE) {}
-
 FakeSessionManagerClient::~FakeSessionManagerClient() = default;
 
 void FakeSessionManagerClient::Init(dbus::Bus* bus) {}
@@ -295,183 +311,180 @@
 
 void FakeSessionManagerClient::RetrieveActiveSessions(
     ActiveSessionsCallback callback) {
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(std::move(callback), user_sessions_));
+  PostReply(FROM_HERE, std::move(callback), user_sessions_);
 }
 
 void FakeSessionManagerClient::RetrieveDevicePolicy(
     RetrievePolicyCallback callback) {
-  if (options_ & USE_HOST_POLICY) {
-    login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
-        login_manager::ACCOUNT_TYPE_DEVICE, kEmptyAccountId);
-    StubCallRetrievePolicy(descriptor, std::move(callback));
-  } else {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE,
-        base::BindOnce(std::move(callback), RetrievePolicyResponseType::SUCCESS,
-                       device_policy_));
-  }
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_DEVICE, kEmptyAccountId);
+  RetrievePolicy(descriptor, std::move(callback));
 }
 
 RetrievePolicyResponseType
 FakeSessionManagerClient::BlockingRetrieveDevicePolicy(
     std::string* policy_out) {
-  if (options_ & USE_HOST_POLICY) {
-    login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
-        login_manager::ACCOUNT_TYPE_DEVICE, kEmptyAccountId);
-    *policy_out = StubBlockingRetrievePolicy(descriptor);
-  } else {
-    *policy_out = device_policy_;
-  }
-  return RetrievePolicyResponseType::SUCCESS;
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_DEVICE, kEmptyAccountId);
+  return BlockingRetrievePolicy(descriptor, policy_out);
 }
 
 void FakeSessionManagerClient::RetrievePolicyForUser(
     const cryptohome::Identification& cryptohome_id,
     RetrievePolicyCallback callback) {
-  if (options_ & USE_HOST_POLICY) {
-    login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
-        login_manager::ACCOUNT_TYPE_USER, cryptohome_id.id());
-    StubCallRetrievePolicy(descriptor, std::move(callback));
-  } else {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE,
-        base::BindOnce(std::move(callback), RetrievePolicyResponseType::SUCCESS,
-                       user_policies_[cryptohome_id]));
-  }
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_USER, cryptohome_id.id());
+  RetrievePolicy(descriptor, std::move(callback));
 }
 
 RetrievePolicyResponseType
 FakeSessionManagerClient::BlockingRetrievePolicyForUser(
     const cryptohome::Identification& cryptohome_id,
     std::string* policy_out) {
-  if (options_ & USE_HOST_POLICY) {
-    login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
-        login_manager::ACCOUNT_TYPE_USER, cryptohome_id.id());
-    *policy_out = StubBlockingRetrievePolicy(descriptor);
-  } else {
-    *policy_out = user_policies_[cryptohome_id];
-  }
-  return RetrievePolicyResponseType::SUCCESS;
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_USER, cryptohome_id.id());
+  return BlockingRetrievePolicy(descriptor, policy_out);
 }
 
 void FakeSessionManagerClient::RetrievePolicyForUserWithoutSession(
     const cryptohome::Identification& cryptohome_id,
     RetrievePolicyCallback callback) {
-  if (options_ & USE_HOST_POLICY) {
-    login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
-        login_manager::ACCOUNT_TYPE_SESSIONLESS_USER, cryptohome_id.id());
-    StubCallRetrievePolicy(descriptor, std::move(callback));
-  } else {
-    auto iter = user_policies_without_session_.find(cryptohome_id);
-    auto task =
-        iter == user_policies_.end()
-            ? base::BindOnce(std::move(callback),
-                             RetrievePolicyResponseType::OTHER_ERROR,
-                             std::string())
-            : base::BindOnce(std::move(callback),
-                             RetrievePolicyResponseType::SUCCESS, iter->second);
-    base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, std::move(task));
-  }
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_SESSIONLESS_USER, cryptohome_id.id());
+  RetrievePolicy(descriptor, std::move(callback));
 }
 
 void FakeSessionManagerClient::RetrieveDeviceLocalAccountPolicy(
     const std::string& account_id,
     RetrievePolicyCallback callback) {
-  if (options_ & USE_HOST_POLICY) {
-    login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
-        login_manager::ACCOUNT_TYPE_DEVICE_LOCAL_ACCOUNT, account_id);
-    StubCallRetrievePolicy(descriptor, std::move(callback));
-  } else {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE,
-        base::BindOnce(std::move(callback), RetrievePolicyResponseType::SUCCESS,
-                       device_local_account_policy_[account_id]));
-  }
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_DEVICE_LOCAL_ACCOUNT, account_id);
+  RetrievePolicy(descriptor, std::move(callback));
 }
 
 RetrievePolicyResponseType
 FakeSessionManagerClient::BlockingRetrieveDeviceLocalAccountPolicy(
     const std::string& account_id,
     std::string* policy_out) {
-  if (options_ & USE_HOST_POLICY) {
-    return BlockingRetrievePolicyForUser(
-        cryptohome::Identification::FromString(account_id), policy_out);
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_DEVICE_LOCAL_ACCOUNT, account_id);
+  return BlockingRetrievePolicy(descriptor, policy_out);
+}
+
+void FakeSessionManagerClient::RetrievePolicy(
+    const login_manager::PolicyDescriptor& descriptor,
+    RetrievePolicyCallback callback) {
+  if (policy_storage_ == PolicyStorageType::kOnDisk) {
+    base::FilePath policy_path =
+        GetStubPolicyFilePath(descriptor, nullptr /* key_path */);
+    DCHECK(!policy_path.empty());
+
+    base::PostTaskWithTraitsAndReplyWithResult(
+        FROM_HERE,
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+        base::BindOnce(&GetFileContent, policy_path),
+        base::BindOnce(std::move(callback),
+                       RetrievePolicyResponseType::SUCCESS));
   } else {
-    *policy_out = device_local_account_policy_[account_id];
-    return RetrievePolicyResponseType::SUCCESS;
+    PostReplyWithPolicy(FROM_HERE, std::move(callback),
+                        RetrievePolicyResponseType::SUCCESS,
+                        policy_[GetMemoryStorageKey(descriptor)]);
   }
 }
 
+RetrievePolicyResponseType FakeSessionManagerClient::BlockingRetrievePolicy(
+    const login_manager::PolicyDescriptor& descriptor,
+    std::string* policy_out) {
+  if (policy_storage_ == PolicyStorageType::kOnDisk) {
+    base::FilePath policy_path =
+        GetStubPolicyFilePath(descriptor, nullptr /* key_path */);
+    DCHECK(!policy_path.empty());
+    *policy_out = GetFileContent(policy_path);
+  } else {
+    *policy_out = policy_[GetMemoryStorageKey(descriptor)];
+  }
+  return RetrievePolicyResponseType::SUCCESS;
+}
+
 void FakeSessionManagerClient::StoreDevicePolicy(
     const std::string& policy_blob,
     VoidDBusMethodCallback callback) {
-  if (options_ & USE_HOST_POLICY) {
-    login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
-        login_manager::ACCOUNT_TYPE_DEVICE, kEmptyAccountId);
-    StubCallStorePolicy(descriptor, policy_blob, std::move(callback));
-  } else {
-    enterprise_management::PolicyFetchResponse policy;
-    if (!policy.ParseFromString(policy_blob)) {
-      LOG(ERROR) << "Unable to parse policy protobuf";
-      base::ThreadTaskRunnerHandle::Get()->PostTask(
-          FROM_HERE, base::BindOnce(std::move(callback), false /* success */));
-      return;
-    }
-
-    if (!store_device_policy_success_) {
-      base::ThreadTaskRunnerHandle::Get()->PostTask(
-          FROM_HERE, base::BindOnce(std::move(callback), false /* success */));
-      return;
-    }
-
-    bool owner_key_store_success = false;
-    if (policy.has_new_public_key())
-      owner_key_store_success = StoreOwnerKey(policy.new_public_key());
-    device_policy_ = policy_blob;
-
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), true /* success */));
-    if (policy.has_new_public_key()) {
-      for (auto& observer : observers_)
-        observer.OwnerKeySet(owner_key_store_success);
-    }
-    for (auto& observer : observers_)
-      observer.PropertyChangeComplete(true /* success */);
-  }
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_DEVICE, kEmptyAccountId);
+  StorePolicy(descriptor, policy_blob, std::move(callback));
 }
 
 void FakeSessionManagerClient::StorePolicyForUser(
     const cryptohome::Identification& cryptohome_id,
     const std::string& policy_blob,
     VoidDBusMethodCallback callback) {
-  if (options_ & USE_HOST_POLICY) {
-    login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
-        login_manager::ACCOUNT_TYPE_USER, cryptohome_id.id());
-    StubCallStorePolicy(descriptor, policy_blob, std::move(callback));
-  } else {
-    bool result = false;
-    if (store_user_policy_success_) {
-      user_policies_[cryptohome_id] = policy_blob;
-      result = true;
-    }
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), result));
-  }
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_USER, cryptohome_id.id());
+  StorePolicy(descriptor, policy_blob, std::move(callback));
 }
 
 void FakeSessionManagerClient::StoreDeviceLocalAccountPolicy(
     const std::string& account_id,
     const std::string& policy_blob,
     VoidDBusMethodCallback callback) {
-  if (options_ & USE_HOST_POLICY) {
-    login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
-        login_manager::ACCOUNT_TYPE_DEVICE_LOCAL_ACCOUNT, account_id);
-    StubCallStorePolicy(descriptor, policy_blob, std::move(callback));
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_DEVICE_LOCAL_ACCOUNT, account_id);
+  StorePolicy(descriptor, policy_blob, std::move(callback));
+}
+
+void FakeSessionManagerClient::StorePolicy(
+    const login_manager::PolicyDescriptor& descriptor,
+    const std::string& policy_blob,
+    VoidDBusMethodCallback callback) {
+  // Decode the blob to get the new key.
+  enterprise_management::PolicyFetchResponse response;
+  if (!response.ParseFromString(policy_blob)) {
+    PostReply(FROM_HERE, std::move(callback), false /* success */);
+    return;
+  }
+
+  // Simulate failure.
+  if (!store_policy_success_) {
+    PostReply(FROM_HERE, std::move(callback), false /* success */);
+    return;
+  }
+
+  if (policy_storage_ == PolicyStorageType::kOnDisk) {
+    // Store policy and maybe key in files (background threads) and call
+    // callback in main thread.
+    base::FilePath key_path;
+    base::FilePath policy_path = GetStubPolicyFilePath(descriptor, &key_path);
+    DCHECK(!policy_path.empty());
+    DCHECK(!key_path.empty());
+
+    std::map<base::FilePath, std::string> files_to_store;
+    files_to_store[policy_path] = policy_blob;
+    if (response.has_new_public_key())
+      files_to_store[key_path] = response.new_public_key();
+
+    base::PostTaskWithTraitsAndReply(
+        FROM_HERE,
+        {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+        base::BindOnce(StoreFiles, std::move(files_to_store)),
+        base::BindOnce(std::move(callback), true /* success */));
   } else {
-    device_local_account_policy_[account_id] = policy_blob;
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), true));
+    policy_[GetMemoryStorageKey(descriptor)] = policy_blob;
+    PostReply(FROM_HERE, std::move(callback), true /* success */);
+
+    if (IsChromeDevicePolicy(descriptor)) {
+      // TODO(ljusten): For historical reasons, this code path only stores keys
+      // for device policy. Should this be extended to other policy?
+      if (response.has_new_public_key()) {
+        base::FilePath key_path;
+        GetStubPolicyFilePath(descriptor, &key_path);
+        DCHECK(!key_path.empty());
+        StoreFiles({{key_path, response.new_public_key()}});
+        for (auto& observer : observers_)
+          observer.OwnerKeySet(true /* success */);
+      }
+      for (auto& observer : observers_)
+        observer.PropertyChangeComplete(true /* success */);
+    }
   }
 }
 
@@ -487,20 +500,18 @@
 
 void FakeSessionManagerClient::GetServerBackedStateKeys(
     StateKeysCallback callback) {
-  if (options_ & USE_HOST_POLICY) {
+  if (policy_storage_ == PolicyStorageType::kOnDisk) {
     base::FilePath owner_key_path;
     CHECK(PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_path));
     const base::FilePath state_keys_path =
-        owner_key_path.DirName().AppendASCII(kStubStateKeysFile);
+        owner_key_path.DirName().AppendASCII(kStubStateKeysFileName);
     base::PostTaskWithTraitsAndReplyWithResult(
         FROM_HERE,
         {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
         base::BindOnce(&ReadCreateStateKeysStub, state_keys_path),
         std::move(callback));
   } else {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE,
-        base::BindOnce(std::move(callback), server_backed_state_keys_));
+    PostReply(FROM_HERE, std::move(callback), server_backed_state_keys_);
   }
 }
 
@@ -508,14 +519,12 @@
     const login_manager::StartArcMiniContainerRequest& request,
     StartArcMiniContainerCallback callback) {
   if (!arc_available_) {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), base::nullopt));
+    PostReply(FROM_HERE, std::move(callback), base::nullopt);
     return;
   }
   // This is starting a new container.
   base::Base64Encode(kFakeContainerInstanceId, &container_instance_id_);
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(std::move(callback), container_instance_id_));
+  PostReply(FROM_HERE, std::move(callback), container_instance_id_);
 }
 
 void FakeSessionManagerClient::UpgradeArcContainer(
@@ -525,8 +534,7 @@
   last_upgrade_arc_request_ = request;
 
   if (!arc_available_) {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(error_callback), false));
+    PostReply(FROM_HERE, std::move(error_callback), false);
     return;
   }
   if (low_disk_) {
@@ -536,24 +544,20 @@
                        weak_ptr_factory_.GetWeakPtr(),
                        login_manager::ArcContainerStopReason::LOW_DISK_SPACE,
                        std::move(container_instance_id_)));
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(error_callback), true));
+    PostReply(FROM_HERE, std::move(error_callback), true);
     return;
   }
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(std::move(success_callback), base::ScopedFD()));
+  PostReply(FROM_HERE, std::move(success_callback), base::ScopedFD());
 }
 
 void FakeSessionManagerClient::StopArcInstance(
     VoidDBusMethodCallback callback) {
   if (!arc_available_ || container_instance_id_.empty()) {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), false /* result */));
+    PostReply(FROM_HERE, std::move(callback), false /* result */);
     return;
   }
 
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(std::move(callback), true /* result */));
+  PostReply(FROM_HERE, std::move(callback), true /* result */);
   // Emulate ArcInstanceStopped signal propagation.
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
@@ -567,33 +571,27 @@
 void FakeSessionManagerClient::SetArcCpuRestriction(
     login_manager::ContainerCpuRestrictionState restriction_state,
     VoidDBusMethodCallback callback) {
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(std::move(callback), arc_available_));
+  PostReply(FROM_HERE, std::move(callback), arc_available_);
 }
 
 void FakeSessionManagerClient::EmitArcBooted(
     const cryptohome::Identification& cryptohome_id,
     VoidDBusMethodCallback callback) {
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(std::move(callback), arc_available_));
+  PostReply(FROM_HERE, std::move(callback), arc_available_);
 }
 
 void FakeSessionManagerClient::GetArcStartTime(
     DBusMethodCallback<base::TimeTicks> callback) {
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE,
-      base::BindOnce(std::move(callback),
-                     arc_available_ ? base::make_optional(arc_start_time_)
-                                    : base::nullopt));
+  PostReply(
+      FROM_HERE, std::move(callback),
+      arc_available_ ? base::make_optional(arc_start_time_) : base::nullopt);
 }
 
 void FakeSessionManagerClient::RemoveArcData(
     const cryptohome::Identification& cryptohome_id,
     VoidDBusMethodCallback callback) {
-  if (!callback.is_null()) {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(std::move(callback), arc_available_));
-  }
+  if (!callback.is_null())
+    PostReply(FROM_HERE, std::move(callback), arc_available_);
 }
 
 void FakeSessionManagerClient::NotifyArcInstanceStopped(
@@ -615,45 +613,64 @@
 }
 
 const std::string& FakeSessionManagerClient::device_policy() const {
-  return device_policy_;
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_DEVICE, kEmptyAccountId);
+  DCHECK(policy_storage_ == PolicyStorageType::kInMemory);
+  auto it = policy_.find(GetMemoryStorageKey(descriptor));
+  return it != policy_.end() ? it->second : base::EmptyString();
 }
 
 void FakeSessionManagerClient::set_device_policy(
     const std::string& policy_blob) {
-  device_policy_ = policy_blob;
+  DCHECK(policy_storage_ == PolicyStorageType::kInMemory);
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_DEVICE, kEmptyAccountId);
+  policy_[GetMemoryStorageKey(descriptor)] = policy_blob;
 }
 
 const std::string& FakeSessionManagerClient::user_policy(
     const cryptohome::Identification& cryptohome_id) const {
-  std::map<cryptohome::Identification, std::string>::const_iterator it =
-      user_policies_.find(cryptohome_id);
-  return it == user_policies_.end() ? base::EmptyString() : it->second;
+  DCHECK(policy_storage_ == PolicyStorageType::kInMemory);
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_USER, cryptohome_id.id());
+  auto it = policy_.find(GetMemoryStorageKey(descriptor));
+  return it != policy_.end() ? it->second : base::EmptyString();
 }
 
 void FakeSessionManagerClient::set_user_policy(
     const cryptohome::Identification& cryptohome_id,
     const std::string& policy_blob) {
-  user_policies_[cryptohome_id] = policy_blob;
+  DCHECK(policy_storage_ == PolicyStorageType::kInMemory);
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_USER, cryptohome_id.id());
+  policy_[GetMemoryStorageKey(descriptor)] = policy_blob;
 }
 
 void FakeSessionManagerClient::set_user_policy_without_session(
     const cryptohome::Identification& cryptohome_id,
     const std::string& policy_blob) {
-  user_policies_without_session_[cryptohome_id] = policy_blob;
+  DCHECK(policy_storage_ == PolicyStorageType::kInMemory);
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_SESSIONLESS_USER, cryptohome_id.id());
+  policy_[GetMemoryStorageKey(descriptor)] = policy_blob;
 }
 
 const std::string& FakeSessionManagerClient::device_local_account_policy(
     const std::string& account_id) const {
-  std::map<std::string, std::string>::const_iterator entry =
-      device_local_account_policy_.find(account_id);
-  return entry != device_local_account_policy_.end() ? entry->second
-                                                     : base::EmptyString();
+  DCHECK(policy_storage_ == PolicyStorageType::kInMemory);
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_DEVICE_LOCAL_ACCOUNT, account_id);
+  auto it = policy_.find(GetMemoryStorageKey(descriptor));
+  return it != policy_.end() ? it->second : base::EmptyString();
 }
 
 void FakeSessionManagerClient::set_device_local_account_policy(
     const std::string& account_id,
     const std::string& policy_blob) {
-  device_local_account_policy_[account_id] = policy_blob;
+  DCHECK(policy_storage_ == PolicyStorageType::kInMemory);
+  login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
+      login_manager::ACCOUNT_TYPE_DEVICE_LOCAL_ACCOUNT, account_id);
+  policy_[GetMemoryStorageKey(descriptor)] = policy_blob;
 }
 
 void FakeSessionManagerClient::OnPropertyChangeComplete(bool success) {
diff --git a/chromeos/dbus/fake_session_manager_client.h b/chromeos/dbus/fake_session_manager_client.h
index 1e398ea3..4849317f 100644
--- a/chromeos/dbus/fake_session_manager_client.h
+++ b/chromeos/dbus/fake_session_manager_client.h
@@ -23,14 +23,15 @@
 // returns them unmodified.
 class FakeSessionManagerClient : public SessionManagerClient {
  public:
-  enum FakeSessionManagerOptions : uint32_t {
-    NONE = 0,
-    USE_HOST_POLICY = 1 << 0,
+  enum class PolicyStorageType {
+    kOnDisk,    // Store policy in regular files on disk. Usually used for
+                // fake D-Bus client implementation, see
+                // SessionManagerClient::Create().
+    kInMemory,  // Store policy in memory only. Usually used for tests.
   };
 
   FakeSessionManagerClient();
-  explicit FakeSessionManagerClient(
-      uint32_t options /* bitwise or of multiple FakeSessionManagerOptions */);
+  explicit FakeSessionManagerClient(PolicyStorageType policy_storage);
   ~FakeSessionManagerClient() override;
 
   // SessionManagerClient overrides
@@ -73,6 +74,11 @@
   RetrievePolicyResponseType BlockingRetrieveDeviceLocalAccountPolicy(
       const std::string& account_id,
       std::string* policy_out) override;
+  void RetrievePolicy(const login_manager::PolicyDescriptor& descriptor,
+                      RetrievePolicyCallback callback) override;
+  RetrievePolicyResponseType BlockingRetrievePolicy(
+      const login_manager::PolicyDescriptor& descriptor,
+      std::string* policy_out) override;
   void StoreDevicePolicy(const std::string& policy_blob,
                          VoidDBusMethodCallback callback) override;
   void StorePolicyForUser(const cryptohome::Identification& cryptohome_id,
@@ -81,6 +87,9 @@
   void StoreDeviceLocalAccountPolicy(const std::string& account_id,
                                      const std::string& policy_blob,
                                      VoidDBusMethodCallback callback) override;
+  void StorePolicy(const login_manager::PolicyDescriptor& descriptor,
+                   const std::string& policy_blob,
+                   VoidDBusMethodCallback callback) override;
   bool SupportsRestartToApplyUserFlags() const override;
   void SetFlagsForUser(const cryptohome::Identification& cryptohome_id,
                        const std::vector<std::string>& flags) override;
@@ -122,12 +131,15 @@
         supports_restart_to_apply_user_flags;
   }
 
-  void set_store_device_policy_success(bool success) {
-    store_device_policy_success_ = success;
+  void set_store_policy_success(bool success) {
+    store_policy_success_ = success;
   }
+  // Accessors for device policy. Only available for
+  // PolicyStorageType::kInMemory.
   const std::string& device_policy() const;
   void set_device_policy(const std::string& policy_blob);
 
+  // Accessors for user policy. Only available for PolicyStorageType::kInMemory.
   const std::string& user_policy(
       const cryptohome::Identification& cryptohome_id) const;
   void set_user_policy(const cryptohome::Identification& cryptohome_id,
@@ -136,10 +148,8 @@
       const cryptohome::Identification& cryptohome_id,
       const std::string& policy_blob);
 
-  void set_store_user_policy_success(bool success) {
-    store_user_policy_success_ = success;
-  }
-
+  // Accessors for device local account policy. Only available for
+  // PolicyStorageType::kInMemory.
   const std::string& device_local_account_policy(
       const std::string& account_id) const;
   void set_device_local_account_policy(const std::string& account_id,
@@ -154,9 +164,11 @@
   void OnPropertyChangeComplete(bool success);
 
   // Configures the list of state keys used to satisfy
-  // GetServerBackedStateKeys() requests.
+  // GetServerBackedStateKeys() requests. Only available for
+  // PolicyStorageType::kInMemory.
   void set_server_backed_state_keys(
       const std::vector<std::string>& state_keys) {
+    DCHECK(policy_storage_ == PolicyStorageType::kInMemory);
     server_backed_state_keys_ = state_keys;
   }
 
@@ -191,20 +203,18 @@
  private:
   bool supports_restart_to_apply_user_flags_ = false;
 
-  bool store_device_policy_success_ = true;
-  std::string device_policy_;
-  std::map<cryptohome::Identification, std::string> user_policies_;
-  std::map<cryptohome::Identification, std::string>
-      user_policies_without_session_;
-
-  // Controls whether StorePolicyForUser() should report success or not.
-  bool store_user_policy_success_ = true;
-
-  std::map<std::string, std::string> device_local_account_policy_;
   base::ObserverList<Observer> observers_;
   SessionManagerClient::ActiveSessionsMap user_sessions_;
   std::vector<std::string> server_backed_state_keys_;
 
+  // Policy is stored in |policy_| if |policy_storage_| type is
+  // PolicyStorageType::kInMemory. Uses the relative stub file path as key.
+  const PolicyStorageType policy_storage_;
+  std::map<std::string, std::string> policy_;
+
+  // If set to false, StorePolicy() always fails.
+  bool store_policy_success_ = true;
+
   int start_device_wipe_call_count_;
   int request_lock_screen_call_count_;
   int notify_lock_screen_shown_call_count_;
@@ -223,10 +233,6 @@
 
   StubDelegate* delegate_;
 
-  // Options for FakeSessionManagerClient with value of bitwise or of
-  // multiple FakeSessionManagerOptions.
-  uint32_t options_;
-
   // The last-set flags for user set through |SetFlagsForUser|.
   std::map<cryptohome::Identification, std::vector<std::string>>
       flags_for_user_;
diff --git a/chromeos/dbus/session_manager_client.cc b/chromeos/dbus/session_manager_client.cc
index c638ba18..dd1137a4 100644
--- a/chromeos/dbus/session_manager_client.cc
+++ b/chromeos/dbus/session_manager_client.cc
@@ -319,6 +319,17 @@
     return BlockingRetrievePolicy(descriptor, policy_out);
   }
 
+  void RetrievePolicy(const login_manager::PolicyDescriptor& descriptor,
+                      RetrievePolicyCallback callback) override {
+    CallRetrievePolicy(descriptor, std::move(callback));
+  }
+
+  RetrievePolicyResponseType BlockingRetrievePolicy(
+      const login_manager::PolicyDescriptor& descriptor,
+      std::string* policy_out) override {
+    return CallBlockingRetrievePolicy(descriptor, policy_out);
+  }
+
   void StoreDevicePolicy(const std::string& policy_blob,
                          VoidDBusMethodCallback callback) override {
     login_manager::PolicyDescriptor descriptor = MakeChromePolicyDescriptor(
@@ -342,6 +353,12 @@
     CallStorePolicy(descriptor, policy_blob, std::move(callback));
   }
 
+  void StorePolicy(const login_manager::PolicyDescriptor& descriptor,
+                   const std::string& policy_blob,
+                   VoidDBusMethodCallback callback) override {
+    CallStorePolicy(descriptor, policy_blob, std::move(callback));
+  }
+
   bool SupportsRestartToApplyUserFlags() const override { return true; }
 
   void SetFlagsForUser(const cryptohome::Identification& cryptohome_id,
@@ -550,7 +567,7 @@
   }
 
   // Blocking call to Session Manager to retrieve policy.
-  RetrievePolicyResponseType BlockingRetrievePolicy(
+  RetrievePolicyResponseType CallBlockingRetrievePolicy(
       const login_manager::PolicyDescriptor& descriptor,
       std::string* policy_out) {
     dbus::MethodCall method_call(
@@ -862,7 +879,7 @@
     return new SessionManagerClientImpl();
   DCHECK_EQ(FAKE_DBUS_CLIENT_IMPLEMENTATION, type);
   return new FakeSessionManagerClient(
-      FakeSessionManagerClient::USE_HOST_POLICY);
+      FakeSessionManagerClient::PolicyStorageType::kOnDisk);
 }
 
 }  // namespace chromeos
diff --git a/chromeos/dbus/session_manager_client.h b/chromeos/dbus/session_manager_client.h
index 4422d877..875d2048 100644
--- a/chromeos/dbus/session_manager_client.h
+++ b/chromeos/dbus/session_manager_client.h
@@ -25,9 +25,10 @@
 }
 
 namespace login_manager {
+class PolicyDescriptor;
 class StartArcMiniContainerRequest;
 class UpgradeArcContainerRequest;
-}
+}  // namespace login_manager
 
 namespace chromeos {
 
@@ -187,6 +188,7 @@
 
   // Fetches the device policy blob stored by the session manager.  Upon
   // completion of the retrieve attempt, we will call the provided callback.
+  // DEPRECATED, use RetrievePolicy() instead.
   virtual void RetrieveDevicePolicy(RetrievePolicyCallback callback) = 0;
 
   // Same as RetrieveDevicePolicy() but blocks until a reply is received, and
@@ -196,12 +198,14 @@
   // considered acceptable (e.g. restarting the browser after a crash or after
   // a flag change).
   // TODO(crbug.com/160522): Get rid of blocking calls.
+  // DEPRECATED, use BlockingRetrievePolicy() instead.
   virtual RetrievePolicyResponseType BlockingRetrieveDevicePolicy(
       std::string* policy_out) = 0;
 
   // Fetches the user policy blob stored by the session manager for the given
   // |cryptohome_id|. Upon completion of the retrieve attempt, we will call the
   // provided callback.
+  // DEPRECATED, use RetrievePolicy() instead.
   virtual void RetrievePolicyForUser(
       const cryptohome::Identification& cryptohome_id,
       RetrievePolicyCallback callback) = 0;
@@ -213,18 +217,21 @@
   // considered acceptable (e.g. restarting the browser after a crash or after
   // a flag change).
   // TODO(crbug.com/160522): Get rid of blocking calls.
+  // DEPRECATED, use BlockingRetrievePolicy() instead.
   virtual RetrievePolicyResponseType BlockingRetrievePolicyForUser(
       const cryptohome::Identification& cryptohome_id,
       std::string* policy_out) = 0;
 
   // Fetches the user policy blob for a hidden user home mount. |callback| is
   // invoked upon completition.
+  // DEPRECATED, use RetrievePolicy() instead.
   virtual void RetrievePolicyForUserWithoutSession(
       const cryptohome::Identification& cryptohome_id,
       RetrievePolicyCallback callback) = 0;
 
   // Fetches the policy blob associated with the specified device-local account
   // from session manager.  |callback| is invoked up on completion.
+  // DEPRECATED, use RetrievePolicy() instead.
   virtual void RetrieveDeviceLocalAccountPolicy(
       const std::string& account_id,
       RetrievePolicyCallback callback) = 0;
@@ -236,10 +243,27 @@
   // considered acceptable (e.g. restarting the browser after a crash or after
   // a flag change).
   // TODO(crbug.com/165022): Get rid of blocking calls.
+  // DEPRECATED, use BlockingRetrievePolicy() instead.
   virtual RetrievePolicyResponseType BlockingRetrieveDeviceLocalAccountPolicy(
       const std::string& account_id,
       std::string* policy_out) = 0;
 
+  // Fetches a policy blob stored by the session manager. Invokes |callback|
+  // upon completion.
+  virtual void RetrievePolicy(const login_manager::PolicyDescriptor& descriptor,
+                              RetrievePolicyCallback callback) = 0;
+
+  // Same as RetrievePolicy() but blocks until a reply is
+  // received, and populates the policy synchronously. Returns SUCCESS when
+  // successful, or the corresponding error from enum in case of a failure.
+  // This may only be called in situations where blocking the UI thread is
+  // considered acceptable (e.g. restarting the browser after a crash or after
+  // a flag change).
+  // TODO(crbug.com/165022): Get rid of blocking calls.
+  virtual RetrievePolicyResponseType BlockingRetrievePolicy(
+      const login_manager::PolicyDescriptor& descriptor,
+      std::string* policy_out) = 0;
+
   // Attempts to asynchronously store |policy_blob| as device policy.  Upon
   // completion of the store attempt, we will call callback.
   virtual void StoreDevicePolicy(const std::string& policy_blob,
@@ -260,6 +284,13 @@
       const std::string& policy_blob,
       VoidDBusMethodCallback callback) = 0;
 
+  // Sends a request to store a |policy_blob| to Session Manager. The storage
+  // location is determined by |descriptor|. The result of the operation is
+  // reported through |callback|.
+  virtual void StorePolicy(const login_manager::PolicyDescriptor& descriptor,
+                           const std::string& policy_blob,
+                           VoidDBusMethodCallback callback) = 0;
+
   // Returns whether session manager can be used to restart Chrome in order to
   // apply per-user session flags.
   virtual bool SupportsRestartToApplyUserFlags() const = 0;
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc
index fc2bc0c..8f5157ab 100644
--- a/components/autofill/content/renderer/form_autofill_util.cc
+++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -1562,6 +1562,12 @@
 
   field->value = value;
 
+  // If the field was autofilled or the user typed into it, check the value
+  // stored in |field_value_and_properties_map| against the value property of
+  // the DOM element. If they differ, then the scripts on the website modified
+  // the value afterwards. Store the original value as the |typed_value|, unless
+  // this is one of recognised situations when the site-modified value is more
+  // useful for filling.
   if (field_value_and_properties_map &&
       field->properties_mask & (FieldPropertiesFlags::USER_TYPED |
                                 FieldPropertiesFlags::AUTOFILLED)) {
diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc
index 47a277e9..c14f0919 100644
--- a/components/content_settings/core/browser/host_content_settings_map.cc
+++ b/components/content_settings/core/browser/host_content_settings_map.cc
@@ -696,9 +696,9 @@
 
   while (rule_iterator->HasNext()) {
     const content_settings::Rule& rule = rule_iterator->Next();
-    settings->push_back(ContentSettingPatternSource(
+    settings->emplace_back(
         rule.primary_pattern, rule.secondary_pattern, rule.value->Clone(),
-        kProviderNamesSourceMap[provider_type].provider_name, incognito));
+        kProviderNamesSourceMap[provider_type].provider_name, incognito);
   }
 }
 
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn
index 5f0254f..e7e3ff7 100644
--- a/components/cronet/android/BUILD.gn
+++ b/components/cronet/android/BUILD.gn
@@ -283,9 +283,9 @@
 cronet_impl_common_java_deps_to_package =
     [ "//net/android:net_thread_stats_uid_java" ]
 
-# cronet_impl_common_base_java.jar - common Cronet code that is shared
+# cronet_impl_common_java_base.jar - common Cronet code that is shared
 # by all Cronet engine implementations.
-android_library("cronet_impl_common_base_java") {
+android_library("cronet_impl_common_java_base") {
   java_files = [
     "java/src/org/chromium/net/impl/CallbackExceptionImpl.java",
     "java/src/org/chromium/net/impl/CronetExceptionImpl.java",
@@ -311,8 +311,8 @@
   srcjar_deps = cronet_impl_common_java_srcjar_deps
 }
 
-# cronet_impl_platform_base_java.jar - Java platform based implementation of the Cronet engine.
-android_library("cronet_impl_platform_base_java") {
+# cronet_impl_platform_java.jar - Java platform based implementation of the Cronet engine.
+android_library("cronet_impl_platform_java") {
   java_files = [
     "java/src/org/chromium/net/impl/InputStreamChannel.java",
     "java/src/org/chromium/net/impl/JavaCronetEngine.java",
@@ -323,7 +323,7 @@
 
   deps = [
     ":cronet_api_java",
-    ":cronet_impl_common_base_java",
+    ":cronet_impl_common_java_base",
     "//third_party/android_tools:android_support_annotations_java",
     "//third_party/jsr-305:jsr_305_javalib",
   ]
@@ -341,8 +341,8 @@
   "//url:url_java",
 ]
 
-# cronet_impl_native_base_java.jar - native implementation of the Cronet engine.
-android_library("cronet_impl_native_base_java") {
+# cronet_impl_native_java_base.jar - native implementation of the Cronet engine.
+android_library("cronet_impl_native_java_base") {
   java_files = [
     "java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java",
     "java/src/org/chromium/net/impl/BidirectionalStreamNetworkException.java",
@@ -368,7 +368,7 @@
 
   deps = [
     ":cronet_api_java",
-    ":cronet_impl_common_base_java",
+    ":cronet_impl_common_java_base",
     "//third_party/android_tools:android_support_annotations_java",
     "//third_party/jsr-305:jsr_305_javalib",
   ]
@@ -380,9 +380,9 @@
 # Groups all Cronet implementations and the common code into a single Java dependency.
 java_group("cronet_impl_all_java") {
   deps = [
-    ":cronet_impl_common_base_java",
-    ":cronet_impl_native_base_java",
-    ":cronet_impl_platform_base_java",
+    ":cronet_impl_common_java_base",
+    ":cronet_impl_native_java_base",
+    ":cronet_impl_platform_java",
   ]
 }
 
@@ -471,6 +471,7 @@
   testonly = true
   sources = [
     "test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java",
+    "test/javatests/src/org/chromium/net/CronetUrlRequestTest.java",
     "test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java",
     "test/src/org/chromium/net/CronetTestUtil.java",
     "test/src/org/chromium/net/MockCertVerifier.java",
@@ -498,6 +499,7 @@
     "test/cronet_test_util.h",
     "test/cronet_url_request_context_config_test.cc",
     "test/cronet_url_request_context_config_test.h",
+    "test/cronet_url_request_test.cc",
     "test/experimental_options_test.cc",
     "test/mock_cert_verifier.cc",
     "test/mock_url_request_job_factory.cc",
@@ -741,8 +743,8 @@
 
   deps = [
     ":cronet_api_java",
-    ":cronet_impl_common_base_java",
-    ":cronet_impl_platform_base_java",
+    ":cronet_impl_common_java_base",
+    ":cronet_impl_platform_java",
     ":cronet_smoketests_platform_only_apk_resources",
   ]
 }
@@ -784,8 +786,8 @@
   deps = [
     ":cronet_api_java",
     ":cronet_combine_proguard_flags",
-    ":cronet_impl_common_base_java",
-    ":cronet_impl_platform_base_java",
+    ":cronet_impl_common_java_base",
+    ":cronet_impl_platform_java",
     ":cronet_test_apk_resources",
   ]
 
@@ -859,7 +861,7 @@
 
   deps = [
     ":cronet_android_cert_proto",
-    ":cronet_impl_native_base_java",
+    ":cronet_impl_native_java_base",
     ":cronet_static",
     "//base",
     "//base/test:test_support",
@@ -900,7 +902,7 @@
   ]
 
   deps = [
-    ":cronet_impl_native_base_java",
+    ":cronet_impl_native_java_base",
   ]
   deps += cronet_impl_native_java_deps_to_package
 
@@ -965,7 +967,7 @@
   ]
 
   deps = [
-    ":cronet_impl_common_base_java",
+    ":cronet_impl_common_java_base",
   ]
   deps += cronet_impl_common_java_deps_to_package
 
@@ -1153,14 +1155,14 @@
 
 jar_src("jar_cronet_impl_common_java_source") {
   src_search_dirs = [ "java/src" ]
-  source_deps = [ ":cronet_impl_common_base_java" ]
+  source_deps = [ ":cronet_impl_common_java_base" ]
   srcjar_deps = cronet_impl_common_java_srcjar_deps
   jar_path = "$_package_dir/cronet_impl_common_java-src.jar"
 }
 
 jar_src("jar_cronet_impl_platform_java_source") {
   src_search_dirs = [ "java/src" ]
-  source_deps = [ ":cronet_impl_platform_base_java" ]
+  source_deps = [ ":cronet_impl_platform_java" ]
   jar_path = "$_package_dir/cronet_impl_platform_java-src.jar"
 }
 
@@ -1190,7 +1192,7 @@
     "//url/android/java/src",
   ]
   source_deps = [
-    ":cronet_impl_native_base_java",
+    ":cronet_impl_native_java_base",
     "//base:base_java",
     "//net/android:net_java",
     "//url:url_java",
@@ -1223,9 +1225,9 @@
 action("generate_javadoc") {
   script = "//components/cronet/tools/generate_javadoc.py"
   depfile = "$target_gen_dir/$target_name.d"
-  _zip_file = "$target_gen_dir/$target_name.zip"
+  _stamp_file = "$target_gen_dir/$target_name.stamp"
   outputs = [
-    _zip_file,
+    _stamp_file,
   ]
   args = [
     "--output-dir",
@@ -1238,8 +1240,8 @@
     rebase_path("//components/cronet/README.md", root_build_dir),
     "--depfile",
     rebase_path(depfile, root_build_dir),
-    "--zip-file",
-    rebase_path(_zip_file, root_build_dir),
+    "--stamp",
+    rebase_path(_stamp_file, root_build_dir),
 
     "--android-sdk-jar",
     rebase_path(android_sdk_jar, root_build_dir),
@@ -1269,8 +1271,8 @@
   deps = [
     ":cronet_api_java",
     ":cronet_combine_proguard_flags",
-    ":cronet_impl_common_base_java",
-    ":cronet_impl_platform_base_java",
+    ":cronet_impl_common_java_base",
+    ":cronet_impl_platform_java",
   ]
 }
 
@@ -1282,13 +1284,11 @@
         get_label_info(_dep, "target_gen_dir") + "/" + _dep_name + ".javac.jar"
     _output_jar = "$_package_dir/" + _dep_name + ".jar"
 
-    # Adjust file names that are different from the target name that builds it.
+    # cronet_api.jar is a special case. Its file name is
+    # different from the target name that builds it.
     if (_output_jar == "$_package_dir/" + "cronet_api_java.jar") {
       _output_jar = "$_package_dir/" + "cronet_api.jar"
     }
-    if (_output_jar == "$_package_dir/" + "cronet_impl_platform_base_java.jar") {
-      _output_jar = "$_package_dir/" + "cronet_impl_platform_java.jar"
-    }
 
     # _deps have targets which match the java target whitelist. Add a
     # trailing X to avoid the copy() target matching the whitelist.
@@ -1317,7 +1317,7 @@
 copy_java8_jars("copy_cronet_java8_jars") {
   deps = [
     ":cronet_api_java",
-    ":cronet_impl_platform_base_java",
+    ":cronet_impl_platform_java",
   ]
 }
 
@@ -1467,15 +1467,6 @@
   ]
 }
 
-android_java_prebuilt("package_impl_platform_java") {
-  jar_path = "$_package_dir/cronet_impl_platform_java.jar"
-  deps = [
-    ":copy_cronet_java8_jars_cronet_impl_platform_base_javaX",
-    ":package_api_java",
-    ":package_impl_common_java",
-  ]
-}
-
 # Enforce that ARM Neon is not used when building for ARMv7
 if (target_cpu == "arm" && arm_version == 7 && !arm_use_neon) {
   action("enforce_no_neon") {
@@ -1513,24 +1504,24 @@
         root_build_dir),
     "--impl_jar",
     rebase_path(
-        "$root_out_dir/lib.java/components/cronet/android/cronet_impl_common_base_java.jar",
+        "$root_out_dir/lib.java/components/cronet/android/cronet_impl_common_java_base.jar",
         root_build_dir),
     "--impl_jar",
     rebase_path(
-        "$root_out_dir/lib.java/components/cronet/android/cronet_impl_platform_base_java.jar",
+        "$root_out_dir/lib.java/components/cronet/android/cronet_impl_platform_java.jar",
         root_build_dir),
     "--impl_jar",
     rebase_path(
-        "$root_out_dir/lib.java/components/cronet/android/cronet_impl_native_base_java.jar",
+        "$root_out_dir/lib.java/components/cronet/android/cronet_impl_native_java_base.jar",
         root_build_dir),
     "--stamp",
     rebase_path(outputs[0], root_build_dir),
   ]
   deps = [
     ":cronet_api_java",
-    ":cronet_impl_common_base_java",
-    ":cronet_impl_native_base_java",
-    ":cronet_impl_platform_base_java",
+    ":cronet_impl_common_java_base",
+    ":cronet_impl_native_java_base",
+    ":cronet_impl_platform_java",
   ]
   inputs = [
     "//components/cronet/tools/update_api.py",
@@ -1553,7 +1544,6 @@
     deps = [
       ":api_static_checks",
       ":copy_cronet_java8_jars",
-      ":cronet_maven_modules",
       ":cronet_package_copy",
       ":cronet_package_copy_native_lib",
       ":cronet_package_copy_native_lib_unstripped",
@@ -1590,186 +1580,3 @@
     ]
   }
 }
-
-_maven_dir = "$root_out_dir/cronet_maven"
-_maven_modules_dir = "$_maven_dir/org/chromium/net"
-_maven_test_dir = "$_maven_dir/test"
-
-copy("cronet_maven_test_copy") {
-  sources = [
-    "maven/build.gradle",
-    "maven/local.properties",
-    "maven/settings.gradle",
-  ]
-  outputs = [
-    "$_maven_test_dir/{{source_file_part}}",
-  ]
-}
-
-process_version("cronet_maven_build_copy") {
-  template_file = "maven/test/build.gradle.template"
-  sources = [
-    "//build/util/LASTCHANGE",
-    "//chrome/VERSION",
-  ]
-  output = "$_maven_test_dir/app/build.gradle"
-}
-
-action("cronet_maven_test_build") {
-  script = "maven/test/build_with_gradle.py"
-  depfile = "$target_gen_dir/$target_name.d"
-  deps = [
-    ":cronet_maven_api_module",
-    ":cronet_maven_build_copy",
-    ":cronet_maven_impl_common_module",
-    ":cronet_maven_impl_native_module",
-    ":cronet_maven_test_copy",
-
-    # These deps ensure all source files of the sample app are deps.
-    ":cronet_sample_apk",
-    ":cronet_sample_test_apk",
-  ]
-  _stamp_file = "$target_gen_dir/$target_name.stamp"
-  outputs = [
-    _stamp_file,
-    "$_maven_test_dir/build/outputs/apk/debug/test-debug.apk",
-    "$_maven_test_dir/build/outputs/apk/androidTest/debug/test-debug-androidTest.apk",
-  ]
-  args = [
-    "--project-dir",
-    rebase_path("$_maven_test_dir"),
-    "--depfile",
-    rebase_path(depfile, root_build_dir),
-    "--stamp",
-    rebase_path(_stamp_file, root_build_dir),
-  ]
-  testonly = true
-}
-
-# Builds a maven module.
-template("cronet_maven_module") {
-  _module_name = invoker.module_name
-
-  # Build POM file.
-  _pom_target_name = "pom_$target_name"
-  _deps = [ ":$_pom_target_name" ]
-  process_version(_pom_target_name) {
-    template_file = "maven/$_module_name.pom.template"
-    sources = [
-      "//build/util/LASTCHANGE",
-      "//chrome/VERSION",
-    ]
-    output = "$_maven_modules_dir/$_module_name/$chrome_version_full/$_module_name-$chrome_version_full.pom"
-  }
-
-  if (defined(invoker.resource_dir)) {
-    android_resources(invoker.module_name + "_resources") {
-      resource_dirs = [ invoker.resource_dir ]
-      android_manifest = "../../../build/android/AndroidManifest.xml"
-    }
-  }
-
-  # Build AAR file.
-  _aar_target_name = "aar_$target_name"
-  dist_aar(_aar_target_name) {
-    deps = [
-      ":cronet_package_copy",
-      invoker.aar_jar_dep,
-    ]
-    direct_deps_only = true
-    if (defined(invoker.aar_proguard_config)) {
-      proguard_configs = [ invoker.aar_proguard_config ]
-    }
-    if (defined(invoker.aar_native_lib_dep)) {
-      native_libraries = get_target_outputs(invoker.aar_native_lib_dep)
-      deps += [ invoker.aar_native_lib_dep ]
-    }
-    if (defined(invoker.resource_dir)) {
-      deps += [ ":" + invoker.module_name + "_resources" ]
-    }
-    output = "$root_build_dir/$_aar_target_name.aar"
-  }
-
-  _aar_copy_target_name = "$target_name.aar"
-  _deps += [ ":$_aar_copy_target_name" ]
-  copy(_aar_copy_target_name) {
-    sources = get_target_outputs(":$_aar_target_name")
-    outputs = [
-      "$_maven_modules_dir/$_module_name/$chrome_version_full/$_module_name-$chrome_version_full.aar",
-    ]
-    deps = [
-      ":$_aar_target_name",
-    ]
-  }
-
-  if (defined(invoker.src_jar_dep)) {
-    _copy_target_name = "$target_name-sources.jar"
-    _deps += [ ":$_copy_target_name" ]
-    copy(_copy_target_name) {
-      sources = get_target_outputs(invoker.src_jar_dep)
-      outputs = [
-        "$_maven_modules_dir/$_module_name/$chrome_version_full/$_module_name-$chrome_version_full-sources.jar",
-      ]
-      deps = [
-        invoker.src_jar_dep,
-      ]
-    }
-  }
-
-  if (defined(invoker.javadoc_jar_dep)) {
-    _copy_target_name = "$target_name-javadoc.jar"
-    _deps += [ ":$_copy_target_name" ]
-    copy(_copy_target_name) {
-      sources = get_target_outputs(invoker.javadoc_jar_dep)
-      outputs = [
-        "$_maven_modules_dir/$_module_name/$chrome_version_full/$_module_name-$chrome_version_full-javadoc.jar",
-      ]
-      deps = [
-        invoker.javadoc_jar_dep,
-      ]
-    }
-  }
-
-  group(target_name) {
-    deps = _deps
-  }
-}
-
-cronet_maven_module("cronet_maven_api_module") {
-  module_name = "cronet-api"
-  aar_jar_dep = ":package_api_java"
-  src_jar_dep = ":jar_cronet_api_source"
-  javadoc_jar_dep = ":generate_javadoc"
-  resource_dir = "api/res"
-}
-
-cronet_maven_module("cronet_maven_impl_common_module") {
-  module_name = "cronet-common"
-  aar_jar_dep = ":package_impl_common_java"
-  aar_proguard_config = "$_package_dir/cronet_impl_common_proguard.cfg"
-  src_jar_dep = ":jar_cronet_impl_common_java_source"
-}
-
-cronet_maven_module("cronet_maven_impl_native_module") {
-  module_name = "cronet-embedded"
-  aar_jar_dep = ":package_impl_native_java"
-  aar_proguard_config = "$_package_dir/cronet_impl_native_proguard.cfg"
-  aar_native_lib_dep = ":cronet_package_copy_native_lib"
-  src_jar_dep = ":jar_cronet_impl_native_java_source"
-}
-
-cronet_maven_module("cronet_maven_impl_platform_module") {
-  module_name = "cronet-fallback"
-  aar_jar_dep = ":package_impl_platform_java"
-  aar_proguard_config = "$_package_dir/cronet_impl_platform_proguard.cfg"
-  src_jar_dep = ":jar_cronet_impl_platform_java_source"
-}
-
-group("cronet_maven_modules") {
-  deps = [
-    ":cronet_maven_api_module",
-    ":cronet_maven_impl_common_module",
-    ":cronet_maven_impl_native_module",
-    ":cronet_maven_impl_platform_module",
-  ]
-}
diff --git a/components/cronet/android/maven/build.gradle b/components/cronet/android/maven/build.gradle
deleted file mode 100644
index 86c3b47..0000000
--- a/components/cronet/android/maven/build.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-buildscript {
-    repositories {
-        jcenter()
-        maven {
-            url 'https://maven.google.com'
-        }
-    }
-    dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
-    }
-}
diff --git a/components/cronet/android/maven/cronet-api.pom.template b/components/cronet/android/maven/cronet-api.pom.template
deleted file mode 100644
index fb2aeef..0000000
--- a/components/cronet/android/maven/cronet-api.pom.template
+++ /dev/null
@@ -1,9 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.chromium.net</groupId>
-  <artifactId>cronet-api</artifactId>
-  <version>@MAJOR@.@MINOR@.@BUILD@.@PATCH@</version>
-  <packaging>aar</packaging>
-  <name>Cronet</name>
-  <description>Cronet API. Does not contain implementation.</description>
-</project>
diff --git a/components/cronet/android/maven/cronet-common.pom.template b/components/cronet/android/maven/cronet-common.pom.template
deleted file mode 100644
index 3181c59..0000000
--- a/components/cronet/android/maven/cronet-common.pom.template
+++ /dev/null
@@ -1,16 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.chromium.net</groupId>
-  <artifactId>cronet-common</artifactId>
-  <version>@MAJOR@.@MINOR@.@BUILD@.@PATCH@</version>
-  <packaging>aar</packaging>
-  <name>Cronet</name>
-  <description>Cronet shared implementation. Not a complete implementation; apps and libraries should not depend on this target directly.</description>
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>cronet-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/components/cronet/android/maven/cronet-embedded.pom.template b/components/cronet/android/maven/cronet-embedded.pom.template
deleted file mode 100644
index f72a8d7..0000000
--- a/components/cronet/android/maven/cronet-embedded.pom.template
+++ /dev/null
@@ -1,21 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.chromium.net</groupId>
-  <artifactId>cronet-embedded</artifactId>
-  <version>@MAJOR@.@MINOR@.@BUILD@.@PATCH@</version>
-  <packaging>aar</packaging>
-  <name>Cronet</name>
-  <description>High performance implementation of Cronet using native libraries.</description>
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>cronet-common</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <version>3.0.1</version>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/components/cronet/android/maven/cronet-fallback.pom.template b/components/cronet/android/maven/cronet-fallback.pom.template
deleted file mode 100644
index 1654965d..0000000
--- a/components/cronet/android/maven/cronet-fallback.pom.template
+++ /dev/null
@@ -1,16 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.chromium.net</groupId>
-  <artifactId>cronet-fallback</artifactId>
-  <version>@MAJOR@.@MINOR@.@BUILD@.@PATCH@</version>
-  <packaging>aar</packaging>
-  <name>Cronet</name>
-  <description>Low performance fallback Cronet implementation based on Android system HttpURLConnection implementation. Should only be used as a backup when Cronet native library implementation fails to load.</description>
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>cronet-common</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/components/cronet/android/maven/local.properties b/components/cronet/android/maven/local.properties
deleted file mode 100644
index a2f006c..0000000
--- a/components/cronet/android/maven/local.properties
+++ /dev/null
@@ -1 +0,0 @@
-sdk.dir=../../../../third_party/android_tools/sdk
diff --git a/components/cronet/android/maven/settings.gradle b/components/cronet/android/maven/settings.gradle
deleted file mode 100644
index e7b4def..0000000
--- a/components/cronet/android/maven/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-include ':app'
diff --git a/components/cronet/android/maven/test/build.gradle.template b/components/cronet/android/maven/test/build.gradle.template
deleted file mode 100644
index 5b934e6..0000000
--- a/components/cronet/android/maven/test/build.gradle.template
+++ /dev/null
@@ -1,63 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
-    compileSdkVersion 26
-
-    def cronet_dir = "../../../../../components/cronet/android"
-
-    buildTypes {
-        release {
-            minifyEnabled true
-            testProguardFiles "$cronet_dir/maven/test/proguard.cfg"
-        }
-        debug {
-            minifyEnabled true
-            testProguardFiles "$cronet_dir/maven/test/proguard.cfg"
-        }
-    }
-
-    // Cronet jars contain Java 8 bytecodes.
-    compileOptions {
-        sourceCompatibility 1.8
-        targetCompatibility 1.8
-    }
-
-    defaultConfig {
-        applicationId "org.chromium.cronet_sample_apk"
-        minSdkVersion 16
-        targetSdkVersion 23
-        versionCode 1
-        versionName "1.0"
-        testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
-    }
-
-    sourceSets {
-        main {
-            manifest.srcFile "$cronet_dir/sample/AndroidManifest.xml"
-            java.srcDirs = [ "$cronet_dir/sample/src" ]
-            res.srcDirs = [ "$cronet_dir/sample/res" ]
-        }
-        androidTest {
-            manifest.srcFile "$cronet_dir/sample/javatests/AndroidManifest.xml"
-            java.srcDirs = [ "$cronet_dir/sample/javatests/src" ]
-        }
-    }
-}
-
-repositories {
-    jcenter()
-    maven {
-        url 'https://maven.google.com'
-    }
-    maven {
-        url '../..'
-    }
-}
-
-dependencies {
-    androidTestImplementation 'com.android.support.test:runner:1.0.1'
-    androidTestImplementation 'com.android.support.test:rules:1.0.1'
-    implementation 'com.android.support:appcompat-v7:25.4.0'
-    implementation 'org.chromium.net:cronet-embedded:@MAJOR@.@MINOR@.@BUILD@.@PATCH@'
-    androidTestUtil 'com.android.support.test:orchestrator:1.0.1'
-}
diff --git a/components/cronet/android/maven/test/build_with_gradle.py b/components/cronet/android/maven/test/build_with_gradle.py
deleted file mode 100755
index 6d75b19d..0000000
--- a/components/cronet/android/maven/test/build_with_gradle.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-#
-# 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 optparse
-import os
-import sys
-
-REPOSITORY_ROOT = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..', '..', '..', '..', '..'))
-
-sys.path.append(os.path.join(REPOSITORY_ROOT, 'build', 'android', 'gyp',
-                             'util'))
-import build_utils
-
-
-def BuildWithGradle(options):
-  gradle_path = os.path.join(REPOSITORY_ROOT, 'third_party', 'gradle_wrapper',
-                             'gradlew')
-  gradle_cmd = [gradle_path, 'assembleDebug', 'assembleAndroidTest']
-  build_utils.CheckOutput(gradle_cmd, cwd=options.project_dir)
-
-
-def main():
-  parser = optparse.OptionParser()
-  build_utils.AddDepfileOption(parser)
-  parser.add_option('--project-dir', help='Gradle project directory.')
-  parser.add_option('--stamp', help='Path to touch on success.')
-
-  options, _ = parser.parse_args()
-
-  BuildWithGradle(options)
-
-  if options.depfile:
-    assert options.stamp
-    build_utils.WriteDepfile(options.depfile, options.stamp)
-
-  if options.stamp:
-    build_utils.Touch(options.stamp)
-
-
-if __name__ == '__main__':
-  sys.exit(main())
-
diff --git a/components/cronet/android/maven/test/proguard.cfg b/components/cronet/android/maven/test/proguard.cfg
deleted file mode 100644
index 6b06cabfa..0000000
--- a/components/cronet/android/maven/test/proguard.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-# This is needed to avoid proguard warnings like:
-#   library class android.content.Intent depends on program class org.xmlpull.v1.XmlPullParser
--dontwarn org.xmlpull.v1.*
-
-# This is needed to avoid proguard warnings like:
-#   com.google.devtools.build.android.desugar.runtime.ThrowableExtension is not being kept as
-#     'com.google.devtools.build.android.desugar.runtime.ThrowableExtension', but remapped to
-#     'a.a.a.a.a.a.a.a'
--dontwarn com.google.devtools.build.android.desugar.runtime.**
diff --git a/components/cronet/android/test/cronet_url_request_test.cc b/components/cronet/android/test/cronet_url_request_test.cc
new file mode 100644
index 0000000..4fc6dfaf
--- /dev/null
+++ b/components/cronet/android/test/cronet_url_request_test.cc
@@ -0,0 +1,14 @@
+// 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 "jni/CronetUrlRequestTest_jni.h"
+#include "net/base/load_flags.h"
+
+using base::android::JavaParamRef;
+
+static jint JNI_CronetUrlRequestTest_GetConnectionMigrationDisableLoadFlag(
+    JNIEnv* env,
+    const JavaParamRef<jclass>& jcaller) {
+  return net::LOAD_DISABLE_CONNECTION_MIGRATION;
+}
\ No newline at end of file
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
index 8b50f09..6dc8955 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
@@ -183,7 +183,7 @@
 
     void runConnectionMigrationTest(boolean disableConnectionMigration) {
         // URLRequest load flags at net/base/load_flags_list.h.
-        int connectionMigrationLoadFlag = 1 << 17;
+        int connectionMigrationLoadFlag = nativeGetConnectionMigrationDisableLoadFlag();
         TestUrlRequestCallback callback = new TestUrlRequestCallback();
         callback.setAutoAdvance(false);
         // Create builder, start a request, and check if default load_flags are set correctly.
@@ -210,7 +210,6 @@
     /**
      * Tests that disabling connection migration sets the URLRequest load flag correctly.
      */
-    @DisabledTest(message = "crbug.com/830707")
     @Test
     @SmallTest
     @Feature({"Cronet"})
@@ -2335,4 +2334,7 @@
         callback.blockForDone();
         assertTrue(CronetTestUtil.nativeGetTaggedBytes(tag) > priorBytes);
     }
+
+    // Return connection migration disable load flag value.
+    private static native int nativeGetConnectionMigrationDisableLoadFlag();
 }
diff --git a/components/cronet/tools/generate_javadoc.py b/components/cronet/tools/generate_javadoc.py
index a76636cf..6bf72c9 100755
--- a/components/cronet/tools/generate_javadoc.py
+++ b/components/cronet/tools/generate_javadoc.py
@@ -6,7 +6,6 @@
 
 import optparse
 import os
-import shutil
 import sys
 import tempfile
 
@@ -34,7 +33,8 @@
                           CronetPostprocessor(md), '_end')
 
 
-def GenerateJavadoc(options, src_dir, output_dir):
+def GenerateJavadoc(options, src_dir):
+  output_dir = os.path.abspath(os.path.join(options.output_dir, 'javadoc'))
   working_dir = os.path.join(options.input_dir, 'android', 'api')
   overview_file = os.path.abspath(options.overview_file)
 
@@ -72,14 +72,6 @@
     build_utils.DeleteDirectory(output_dir)
     raise
 
-  # Create an index.html file at the root as this is the accepted format.
-  # Do this by copying reference/index.html and adjusting the path.
-  with open(os.path.join(output_dir, 'reference', 'index.html'), 'r') as \
-      old_index, open(os.path.join(output_dir, 'index.html'), 'w') as new_index:
-    for line in old_index:
-      new_index.write(line.replace('classes.html',
-                                   os.path.join('reference', 'classes.html')))
-
 
 def main():
   parser = optparse.OptionParser()
@@ -89,7 +81,7 @@
   parser.add_option('--input-src-jar', help='Cronet api source jar')
   parser.add_option('--overview-file', help='Path of the overview page')
   parser.add_option('--readme-file', help='Path of the README.md')
-  parser.add_option('--zip-file', help='Path to ZIP archive of javadocs.')
+  parser.add_option('--stamp', help='Path to touch on success.')
   parser.add_option('--android-sdk-jar', help='Path to android.jar')
 
   options, _ = parser.parse_args()
@@ -104,18 +96,16 @@
   net_docs.ProcessDocs([options.readme_file], options.input_dir,
                        options.output_dir, extensions=[CronetExtension()])
 
-  output_dir = os.path.abspath(os.path.join(options.output_dir, 'javadoc'))
-  GenerateJavadoc(options, os.path.abspath(unzipped_jar_path), output_dir)
+  GenerateJavadoc(options, os.path.abspath(unzipped_jar_path))
 
-  if options.zip_file:
-    assert options.zip_file.endswith('.zip')
-    shutil.make_archive(options.zip_file[:-4], 'zip', output_dir)
+  if options.stamp:
+    build_utils.Touch(options.stamp)
   if options.depfile:
-    assert options.zip_file
+    assert options.stamp
     deps = []
     for root, _, filenames in os.walk(options.input_dir):
       deps.extend(os.path.join(root, f) for f in filenames)
-    build_utils.WriteDepfile(options.depfile, options.zip_file, deps)
+    build_utils.WriteDepfile(options.depfile, options.stamp, deps)
   # Clean up temporary output directory.
   build_utils.DeleteDirectory(unzipped_jar_path)
 
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.cc
index 614cb7a0..124bd09e 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.cc
@@ -115,6 +115,8 @@
 }
 
 bool DataReductionProxySettings::IsDataReductionProxyEnabled() const {
+  if (spdy_proxy_auth_enabled_.GetPrefName().empty())
+    return false;
   return spdy_proxy_auth_enabled_.GetValue() ||
          params::ShouldForceEnableDataReductionProxy();
 }
diff --git a/components/ntp_snippets/contextual/contextual_content_suggestions_service_proxy.cc b/components/ntp_snippets/contextual/contextual_content_suggestions_service_proxy.cc
index d14151bc..9f3a2e3 100644
--- a/components/ntp_snippets/contextual/contextual_content_suggestions_service_proxy.cc
+++ b/components/ntp_snippets/contextual/contextual_content_suggestions_service_proxy.cc
@@ -85,7 +85,13 @@
 void ContextualContentSuggestionsServiceProxy::ReportEvent(
     ukm::SourceId ukm_source_id,
     ContextualSuggestionsEvent event) {
-  DCHECK(ukm_source_id != ukm::kInvalidSourceId);
+  // TODO(pnoland): investigate how we can get into this state(one known
+  // example is if we switch tabs and there's no committed navigation in the new
+  // tab) and prevent it from happening. Replace the early return with a DCHECK
+  // once this is done.
+  if (ukm_source_id == ukm::kInvalidSourceId) {
+    return;
+  }
 
   // Flush the previous page (if any) and setup the new page.
   if (ukm_source_id != last_ukm_source_id_) {
diff --git a/components/omnibox/browser/autocomplete_provider_unittest.cc b/components/omnibox/browser/autocomplete_provider_unittest.cc
index 05fb984..00f6c04f3 100644
--- a/components/omnibox/browser/autocomplete_provider_unittest.cc
+++ b/components/omnibox/browser/autocomplete_provider_unittest.cc
@@ -594,11 +594,9 @@
       switches::kExtraSearchQueryParams, "a=b");
   RunExactKeymatchTest(true);
   CopyResults();
-  ASSERT_EQ(2U, result_.size());
+  ASSERT_EQ(1U, result_.size());
   EXPECT_EQ("http://keyword/test",
             result_.match_at(0)->destination_url.possibly_invalid_spec());
-  EXPECT_EQ("http://defaultturl/k%20test?a=b",
-            result_.match_at(1)->destination_url.possibly_invalid_spec());
 }
 
 // Test that redundant associated keywords are removed.
diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc
index a9e268f..a495802 100644
--- a/components/omnibox/browser/search_provider.cc
+++ b/components/omnibox/browser/search_provider.cc
@@ -995,22 +995,25 @@
       }
     }
 
-    SearchSuggestionParser::SuggestResult verbatim(
-        /*suggestion=*/trimmed_verbatim,
-        AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
-        /*subtype_identifier=*/0,
-        /*match_contents=*/trimmed_verbatim,
-        /*match_contents_prefix=*/base::string16(),
-        /*annotation=*/base::string16(), answer_contents, answer_type,
-        std::move(answer), /*suggest_query_params=*/std::string(),
-        /*deletion_url=*/std::string(),
-        /*image_dominant_color=*/std::string(),
-        /*image_url=*/std::string(),
-        /*from_keyword_provider=*/false, verbatim_relevance,
-        relevance_from_server, /*should_prefetch=*/false,
-        /*input_text=*/trimmed_verbatim);
-    AddMatchToMap(verbatim, std::string(), did_not_accept_default_suggestion,
-                  false, keyword_url != nullptr, &map);
+    // Don't add WYT when user requested keyword search.
+    if (keyword_input_.text().empty()) {
+      SearchSuggestionParser::SuggestResult verbatim(
+          /*suggestion=*/trimmed_verbatim,
+          AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED,
+          /*subtype_identifier=*/0,
+          /*match_contents=*/trimmed_verbatim,
+          /*match_contents_prefix=*/base::string16(),
+          /*annotation=*/base::string16(), answer_contents, answer_type,
+          std::move(answer), /*suggest_query_params=*/std::string(),
+          /*deletion_url=*/std::string(),
+          /*image_dominant_color=*/std::string(),
+          /*image_url=*/std::string(),
+          /*from_keyword_provider=*/false, verbatim_relevance,
+          relevance_from_server, /*should_prefetch=*/false,
+          /*input_text=*/trimmed_verbatim);
+      AddMatchToMap(verbatim, std::string(), did_not_accept_default_suggestion,
+                    false, keyword_url != nullptr, &map);
+    }
   }
   if (!keyword_input_.text().empty()) {
     // We only create the verbatim search query match for a keyword
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index f8b71aa1..30746da 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -2180,7 +2180,7 @@
       },
       'example_value': False,
       'id': 375,
-      'caption': '''Safe Browsing enable state for trusted sources''',
+      'caption': '''Enable Safe Browsing for trusted sources''',
       'tags': ['local-data-access'],
       'desc': '''Identify if <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> can allow download without Safe Browsing checks when it's from a trusted source.
 
@@ -10122,7 +10122,7 @@
       This policy allows administrators to provide printer configurations for
       their users.
 
-      <ph name="PRINTER_DISPLAY_NAME">display_name</ph> and <ph name="PRINTER_DESCRIPTION">description</ph> are free form strings that can be customized for ease of printer selection. <ph name="PRINTER_MANUFACTURER">manufacturer</ph> and <ph name="PRINTER_MODEL">model</ph> serve to ease printer identification by end users. They represent the manufacturer and model of the printer. <ph name="PRINTER_URI">uri</ph> should be an address reachable from a client computer including the <ph name="URI_SCHEME">scheme</ph>, <ph name="URI_PORT">port</ph>, and <ph name="URI_QUEUE">queue</ph>. <ph name="PRINTER_UUID">uuid</ph> is optional.  If provided, it is used to help deduplicate <ph name="ZEROCONF_DISCOVERY">zeroconf</ph> printers.
+      <ph name="PRINTER_DISPLAY_NAME">display_name</ph> and <ph name="PRINTER_DESCRIPTION">description</ph> are free-form strings that can be customized for ease of printer selection. <ph name="PRINTER_MANUFACTURER">manufacturer</ph> and <ph name="PRINTER_MODEL">model</ph> serve to ease printer identification by end users. They represent the manufacturer and model of the printer. <ph name="PRINTER_URI">uri</ph> should be an address reachable from a client computer including the <ph name="URI_SCHEME">scheme</ph>, <ph name="URI_PORT">port</ph>, and <ph name="URI_QUEUE">queue</ph>. <ph name="PRINTER_UUID">uuid</ph> is optional. If provided, it is used to help deduplicate <ph name="ZEROCONF_DISCOVERY">zeroconf</ph> printers.
 
       <ph name="PRINTER_EFFECTIVE_MODEL">effective_model</ph> must match one of the strings which represent a <ph name="PRODUCT_NAME">$2<ex>Google Chrome OS</ex></ph> supported printer. The string will be used to identify and install the appropriate PPD for the printer. More information can be found at https://support.google.com/chrome?p=noncloudprint.
 
diff --git a/components/policy/resources/policy_templates_ar.xtb b/components/policy/resources/policy_templates_ar.xtb
index 0e5ee33..6e83dba 100644
--- a/components/policy/resources/policy_templates_ar.xtb
+++ b/components/policy/resources/policy_templates_ar.xtb
@@ -157,9 +157,9 @@
       من استخدام ARC.</translation>
 <translation id="1561424797596341174">إلغاء السياسة لإصدارات تصحيح الأخطاء لمضيف الوصول البعيد</translation>
 <translation id="1561967320164410511">‏U2F إلى جانب الإضافات للتأكيد الفردي</translation>
-<translation id="1574554504290354326">‏تم إيقاف هذا الإعداد. يمكنك استبداله بسياسة SafeBrowsingExtendedReportingEnabled التي يعادل تفعيلها أو إيقافها تعيين سياسة SafeBrowsingExtendedReportingOptInAllowed على وضع  "False".
+<translation id="1574554504290354326">‏تم إيقاف هذا الإعداد، يمكنك استبداله بسياسة SafeBrowsingExtendedReportingEnabled التي يعادل تفعيلها أو إيقافها تعيين سياسة SafeBrowsingExtendedReportingOptInAllowed على الوضع "False".
 
-      تعيين هذه السياسة على وضع "False" يَمنع المستخدمين من إرسال بعض من معلومات النظام ومحتوى الصفحة إلى خوادم Google. وفي حال تعيين هذه السياسة على وضع "True" أو عدم إعدادها بالأساس، يسمح ذلك للمستخدمين بإرسال بعض من معلومات النظام ومحتوى الصفحة إلى "التصفُّح الآمن" للمساعدة في رصد المواقع والتطبيقات الضارة.
+      يَمنع تعيين هذه السياسة على الوضع "False" المستخدمين من إرسال بعض من معلومات النظام ومحتوى الصفحة إلى خوادم Google. وفي حال تعيين هذه السياسة على الوضع "True" أو عدم إعدادها بالأساس، يسمح ذلك للمستخدمين بإرسال بعض من معلومات النظام ومحتوى الصفحة إلى "التصفُّح الآمن" للمساعدة في رصد المواقع والتطبيقات الضارة.
 
       لمزيد من المعلومات حول "التصفُّح الآمن"، يُرجى زيارة الرابط https://developers.google.com/safe-browsing.</translation>
 <translation id="1583248206450240930">استخدام <ph name="PRODUCT_FRAME_NAME" /> بشكل تلقائي</translation>
@@ -204,7 +204,7 @@
 <translation id="1797233582739332495">عرض رسالة مطالبة مكررة للمستخدم تشير إلى ضرورة إعادة التشغيل</translation>
 <translation id="1803646570632580723">قائمة التطبيقات المثبتة لعرضها في المشغل</translation>
 <translation id="1808715480127969042">حظر ملفات تعريف الارتباط في هذه المواقع</translation>
-<translation id="1810261428246410396">السماح باستخدام التوصيل الفوري.</translation>
+<translation id="1810261428246410396">السماح باستخدام التوصيل الفوري</translation>
 <translation id="1827523283178827583">استخدام خوادم وكيلة ثابتة</translation>
 <translation id="1843117931376765605">معدل تحديث سياسة المستخدم</translation>
 <translation id="1844620919405873871">تهيِّئ السياسات المتعلقة بإلغاء القفل السريع.</translation>
@@ -244,17 +244,15 @@
       وإذا تم تعيين السياسة على الوضع "false"، سيتم إيقاف إعداد هذه التقارير.
 
       وفي حال عدم ضبط السياسة، سيتم إيقاف هذه الميزة على الأجهزة غير المُدارة وتفعيلها على الأجهزة المُدارة.</translation>
-<translation id="1929709556673267855">‏توفِّر السياسة عمليات تهيئة لطابعات المؤسسة المرتبطة بالأجهزة.
+<translation id="1929709556673267855">‏توفِّر السياسة عمليات تهيئة لطابعات المؤسسة المرتبطة بالأجهزة وتسمح بتوفير عمليات تهيئة الطابعات لأجهزة <ph name="PRODUCT_OS_NAME" /> أيضًا. ويتطابق التنسيق مع تنسيق معجم NativePrinters، لكن أضيف حقل "id" أو "guid" إلزامي لكل طابعة لتحديد ما إذا سيتم إضافتها إلى القوائم البيضاء أو القوائم السوداء.
 
-      تسمح لك هذه السياسة بتوفير عمليات تهيئة الطابعات لأجهزة <ph name="PRODUCT_OS_NAME" />.  ويتطابق التنسيق مع تنسيق معجم NativePrinters، بالإضافة إلى حقل "id" أو "guid" إلزامي لكل طابعة من أجل الإضافة إلى القوائم البيضاء أو القوائم السوداء.
-
-      يجب ألّا يتجاوز حجم الملف 5 ميغابايت وأن يكون مُشفرًا بترميز جافا سكريبت (JSON).  ومن المُقدَّر أن يتم تشفير ملف يتضمّن حوالي 21000 طابعة كملف بحجم 5 ميغابايت.  ويتم استخدام تجزئة التشفير للتحقُّق من سلامة التنزيل.
+      ويجب ألّا يتجاوز حجم الملف 5 ميغابايت وأن يكون مُشفرًا بترميز جافا سكريبت (JSON). ومن المُقدَّر أن يتم تشفير ملف يتضمّن نحو 21 ألف طابعة كملف بحجم 5 ميغابايت. ويتم استخدام تجزئة التشفير للتحقُّق من سلامة التنزيل.
 
       يتم تنزيل الملف ووضعه في ذاكرة التخزين المؤقّت. وستتم إعادة تنزيله متى تغيّرت التجزئة أو عنوان URL.
 
-      إذا كانت السياسة مُعيَّنة، سينزِّل <ph name="PRODUCT_OS_NAME" /> الملف لعمليات تهيئة الطابعات وسيجعل الطابعات متاحة بما يتوافق مع <ph name="DEVICE_PRINTERS_ACCESS_MODE" /> و<ph name="DEVICE_PRINTERS_WHITELIST" /> و<ph name="DEVICE_PRINTERS_BLACKLIST" />.
+      إذا كانت السياسة مُعيَّنة، فسينزِّل <ph name="PRODUCT_OS_NAME" /> الملف لعمليات تهيئة الطابعات وسيجعل الطابعات متاحة بما يتوافق مع <ph name="DEVICE_PRINTERS_ACCESS_MODE" /> و<ph name="DEVICE_PRINTERS_WHITELIST" /> و<ph name="DEVICE_PRINTERS_BLACKLIST" />.
 
-      لا تؤثِّر هذه السياسة على ما إذا كان يمكن للمستخدمين تهيئة الطابعات على الأجهزة الفردية أم لا.  حيث تم إعدادها لتكون مكمّلة لتهيئة الطابعات من قِبل المستخدمين الفرديين.
+      لا تؤثِّر هذه السياسة على إمكانية تهيئة المستخدمين للطابعات على الأجهزة الفردية ويتم إعدادها لتكون مكمّلة لتهيئة الطابعات من قِبل المستخدمين الفرديين.
 
       هذه السياسة مُضافة إلى <ph name="BULK_PRINTERS_POLICY" />.
 
@@ -292,20 +290,20 @@
 
 لاحظ أنه في حالة دعم النظام الأساسي لإشعارات السياسة، سيتم تعيين تأخير التحديث إلى 24 ساعة (مع تجاهل جميع الإعدادات التلقائية وقيمة هذه السياسة) لأنه من المتوقع أن إشعارات السياسة ستفرض تحديثًا تلقائيًا في الوقت الذي يتم فيه تغيير السياسة، مما يجعل المزيد من عمليات التحديث المتكررة غير لازمة.</translation>
 <translation id="2024476116966025075">تهيئة اسم النطاق المطلوب لعملاء الدخول عن بُعد</translation>
-<translation id="202757291638965203">‏تهيئ السياسة قائمة الطابعات.
+<translation id="202757291638965203">‏تهيّئ السياسة قائمة الطابعات.
 
       تسمح هذه السياسة للمشرفين بتوفير عمليات تهيئة الطابعات
       للمستخدمين.
 
-      <ph name="PRINTER_DISPLAY_NAME" /> و<ph name="PRINTER_DESCRIPTION" /> هما سلسلتان حرتان يمكن تخصيصهما لتسهيل اختيار الطابعة. ويفيد <ph name="PRINTER_MANUFACTURER" /> و<ph name="PRINTER_MODEL" /> في تسهيل تعرُّف المستخدمين على الطابعة، حيث يمثّلان الشركة المصنّعة للطابعة وطرازها. يجب أن يكون <ph name="PRINTER_URI" /> عنوانًا يمكن الوصول إليه من كمبيوتر العميل، بما في ذلك <ph name="URI_SCHEME" /> و<ph name="URI_PORT" /> و<ph name="URI_QUEUE" />. يكون <ph name="PRINTER_UUID" /> اختياريًا،  وفي حال توفّره، يتم استخدامه للمساعدة في إزالة تكرار طابعات <ph name="ZEROCONF_DISCOVERY" />.
+      <ph name="PRINTER_DISPLAY_NAME" /> و<ph name="PRINTER_DESCRIPTION" /> هما سلسلتان حرتان يمكن تخصيصهما لتسهيل اختيار الطابعة. أمّا <ph name="PRINTER_MANUFACTURER" /> و<ph name="PRINTER_MODEL" /> فيسهّلان على المستخدمين مهمّة التعرّف على الطابعة، إذ يمثّلان الشركة المصنّعة للطابعة وطرازها. يجب أن يكون <ph name="PRINTER_URI" /> عنوانًا يمكن الوصول إليه من كمبيوتر العميل، بما في ذلك <ph name="URI_SCHEME" /> و<ph name="URI_PORT" /> و<ph name="URI_QUEUE" />. يكون <ph name="PRINTER_UUID" /> اختياريًا، وفي حال توفّره، يتم استخدامه للمساعدة في إزالة تكرار طابعات <ph name="ZEROCONF_DISCOVERY" />.
 
       يجب أن يُطابِق <ph name="PRINTER_EFFECTIVE_MODEL" /> إحدى السلاسل التي تمثل طابعة <ph name="PRODUCT_NAME" /> مدعومة. سيتم استخدام السلسلة للتعرُّف على ملف PPD المناسب للطابعة وتثبيته. يمكن الحصول على مزيد من المعلومات على الرابط https://support.google.com/chrome?p=noncloudprint.
 
       يكتمل إعداد الطابعة عند استخدامها لأول مرة، ولا يتم تنزيل ملفات PPD حتى يتم استخدام الطابعة. وبعد ذلك، يتم تخزين ملفات PPD المستخدمة بشكل متكرر تخزينًا مؤقتًا.
 
-      لا تؤثِّر هذه السياسة على ما إذا كان يمكن للمستخدمين تهيئة الطابعات على الأجهزة الفردية أم لا.  حيث تم إعدادها لتكون مكمّلة لتهيئة الطابعات من قِبل المستخدمين الفرديين.
+      لا تؤثِّر هذه السياسة على إمكانية تهيئة المستخدمين للطابعات على الأجهزة الفردية، فقد تم إعدادها لتكون مكمّلة لتهيئة الطابعات من قِبل المستخدمين الفرديين.
 
-      بالنسبة إلى أجهزة Active Directory المُدارة، تدعم هذه السياسة توسيع <ph name="MACHINE_NAME_VARIABLE" /> ليشمل اسم جهاز Active Directory أو سلسلة فرعية له. على سبيل المثال، إذا كان اسم الجهاز <ph name="MACHINE_NAME_EXAMPLE" />، حينئذٍ سيتم استبدال <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> بسلسلة مكونة من 4 أحرف بعد الموضع السادس، مثل <ph name="MACHINE_NAME_PART_EXAMPLE" />. يُرجى ملاحظة أن الموضع يبدأ من الصفر.
+      بالنسبة إلى أجهزة Active Directory المُدارة، تدعم هذه السياسة توسيع <ph name="MACHINE_NAME_VARIABLE" /> ليشمل اسم جهاز Active Directory أو سلسلة فرعية له. على سبيل المثال، إذا كان اسم الجهاز <ph name="MACHINE_NAME_EXAMPLE" />، يتم استبدال <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> بالأحرف الأربعة التي تلي الموضع السادس، مثل <ph name="MACHINE_NAME_PART_EXAMPLE" />. يُذكر أن الموضع يبدأ من الصفر.
       </translation>
 <translation id="2030905906517501646">الكلمة الرئيسية لمزود البحث التلقائي</translation>
 <translation id="203096360153626918">‏لا تؤثر هذه السياسة على تطبيقات Android. وسيكون بإمكان هذه التطبيقات الدخول إلى وضع ملء الشاشة حتى وإن تم تعيين هذه السياسة على <ph name="FALSE" />.</translation>
@@ -556,20 +554,17 @@
           إذا لم يتم تعيين هذه السياسة، تكون القيمة التلقائية "true" ويتم تفعيل السياسة NTLMv2.</translation>
 <translation id="2623014935069176671">انتظار نشاط المستخدم الأولي</translation>
 <translation id="262740370354162807">تفعيل إرسال المستندات إلى <ph name="CLOUD_PRINT_NAME" /></translation>
-<translation id="2627554163382448569">‏توفِّر السياسة عمليات تهيئة لطابعات المؤسسة.
+<translation id="2627554163382448569">‏توفِّر السياسة عمليات تهيئة لطابعات المؤسسة وتسمح بتوفير عمليات تهيئة الطابعات لأجهزة <ph name="PRODUCT_OS_NAME" /> أيضًا. ويتطابق التنسيق مع تنسيق معجم NativePrinters، لكن أضيف حقل "id" أو "guid" إلزامي لكل طابعة لتحديد ما إذا سيتم إضافتها إلى القوائم البيضاء أو القوائم السوداء.
 
-      تسمح لك هذه السياسة بتوفير عمليات تهيئة الطابعات لأجهزة <ph name="PRODUCT_OS_NAME" />.  ويتطابق التنسيق مع تنسيق معجم NativePrinters، بالإضافة إلى حقل "id" أو "guid" إلزامي لكل طابعة من أجل الإضافة إلى القوائم البيضاء أو القوائم السوداء.
-
-
-      يجب ألّا يتجاوز حجم الملف 5 ميغابايت وأن يكون مُشفرًا بترميز جافا سكريبت (JSON).  ومن المُقدَّر أن يتم تشفير ملف يتضمن حوالي 21000 طابعة كملف بحجم 5 ميغابايت.  ويتم استخدام تجزئة التشفير للتحقُّق من سلامة التنزيل.
+      ويجب ألّا يتجاوز حجم الملف 5 ميغابايت وأن يكون مُشفرًا بترميز جافا سكريبت (JSON). ومن المُقدَّر أن يتم تشفير ملف يتضمن نحو 21 ألف طابعة كملف بحجم 5 ميغابايت. ويتم استخدام تجزئة التشفير للتحقُّق من سلامة التنزيل.
 
       يتم تنزيل الملف ووضعه في ذاكرة التخزين المؤقّت. وستتم إعادة تنزيله متى تغيّرت التجزئة أو عنوان URL.
 
       إذا كانت السياسة مُعيَّنة، سينزِّل <ph name="PRODUCT_OS_NAME" /> الملف لعمليات تهيئة الطابعات وسيجعل الطابعات متاحة بما يتوافق مع <ph name="BULK_PRINTERS_ACCESS_MODE" /> و<ph name="BULK_PRINTERS_WHITELIST" /> و<ph name="BULK_PRINTERS_BLACKLIST" />.
 
-      إذا عيّنت هذه السياسة، لا يمكن للمستخدمين إلغاؤها.
+      إذا عيّنت هذه السياسة، لا يمكن للمستخدمين تغييرها أو إلغاؤها.
 
-      لا تؤثِّر هذه السياسة على ما إذا كان يمكن للمستخدمين تهيئة الطابعات على الأجهزة الفردية أم لا.  حيث تم إعدادها لتكون مكمّلة لتهيئة الطابعات من قِبل المستخدمين الفرديين.
+      لا تؤثِّر هذه السياسة على إمكانية تهيئة المستخدمين للطابعات على الأجهزة الفردية، فقد تم إعدادها لتكون مكمّلة لتهيئة الطابعات من قِبل المستخدمين الفرديين.
       </translation>
 <translation id="2633084400146331575">تفعيل التعليقات المنطوقة</translation>
 <translation id="2646290749315461919">‏للسماح لك بتعيين ما إذا كان يُسمح للمواقع الإلكترونية بتتبع الموقع الفعلي للمستخدم. يمكن السماح بتتبع الموقع الفعلي بشكل تلقائي أو رفضه بشكل تلقائي أو يمكن سؤال المستخدم في كل مرة يطلب فيها موقع الويب الموقع الفعلي. إذا تم ترك هذه السياسة بدون تعيين، فسيتم استخدام السياسة 'AskGeolocation' وسيتمكن المستخدم من تغييرها.</translation>
@@ -625,9 +620,9 @@
 <translation id="2823870601012066791">‏موقع سجل Windows لعملاء <ph name="PRODUCT_OS_NAME" />:</translation>
 <translation id="2824715612115726353">تفعيل وضع التصفح المتخفي</translation>
 <translation id="2838830882081735096">‏عدم السماح بترحيل البيانات وARC</translation>
-<translation id="2840269525054388612">‏تُحدد السياسة الطابعات التي يمكن لمستخدم استخدامها.
+<translation id="2840269525054388612">‏تُحدد السياسة الطابعات التي يمكن لأي مستخدم استخدامها.
 
-      لا يتم استخدام هذه السياسة إلا في حال اختيار <ph name="PRINTERS_WHITELIST" /> لـ <ph name="DEVICE_PRINTERS_ACCESS_MODE" />
+      لا يتم استخدام هذه السياسة إلا في حال اختيار <ph name="PRINTERS_WHITELIST" /> لـ <ph name="DEVICE_PRINTERS_ACCESS_MODE" />.
 
       في حال استخدام هذه السياسة، لا تُتاح طابعات للمستخدم إلا تلك التي تحمل أرقام تعريف مُطابقة للقيم المُدرجة في هذه السياسة. ويجب أن تتوافق أرقام التعريف مع الحقل "id" أو "guid" في الملف المُحدَّد في <ph name="DEVICE_PRINTERS_POLICY" />.
       </translation>
@@ -831,9 +826,9 @@
 <translation id="3547954654003013442">إعدادات الخادم الوكيل</translation>
 <translation id="3556806727696701427">‏تتيح تفعيل ميزة "التصفُّح الآمن" في <ph name="PRODUCT_NAME" /> وتمنع المستخدمين من تغيير هذا الإعداد.
 
-      في حال تفعيل هذا الإعداد، يكون "التصفُّح الآمن" نشطًا دائمًا.
+      في حال تفعيل هذا الإعداد، يكون "التصفُّح الآمن" مفعّلاً دائمًا.
 
-      وفي حال إيقاف هذا الإعداد، يكون "التصفُّح الآمن" غير نشط مطلقًا.
+      وفي حال إيقاف هذا الإعداد، لن يتم تفعيل "التصفُّح الآمن" مطلقًا.
 
       في حال تفعيل هذا الإعداد أو إيقافه، لا يمكن للمستخدمين تغيير إعداد "تفعيل الحماية من التصيّد الاحتيالي والبرامج الضارة" أو إلغاؤه في <ph name="PRODUCT_NAME" />.
 
@@ -841,7 +836,7 @@
 
      يرجى الاطّلاع على https://developers.google.com/safe-browsing للحصول على مزيد من المعلومات حول "التصفُّح الآمن".
 
-      هذه السياسة غير متاحة على النسخ الافتراضية لنظام التشغيل Windows التي لم تنضم إلى نطاق <ph name="MS_AD_NAME" />.</translation>
+      هذه السياسة غير متاحة على إصدارات نظام التشغيل Windows التي لم تنضم إلى نطاق <ph name="MS_AD_NAME" />.</translation>
 <translation id="3577251398714997599">إعداد الإعلانات للمواقع التي تتضمن إعلانات متداخلة</translation>
 <translation id="3591584750136265240">تهيئة سلوك مصادقة تسجيل الدخول</translation>
 <translation id="3627678165642179114">تفعيل أو إيقاف خدمة التدقيق الإملائي على الويب</translation>
@@ -874,7 +869,7 @@
       تسمح هذه السياسة بإيقاف متطلبات الكشف عن شهادة الشفافية لسلاسل الشهادات التي تضم شهادات تتضمن واحدة من تجزئات subjectPublicKeyInfo المحدَّدة. وبالنسبة للشهادات التي قد تكون غير موثوقة، نتيجة عدم الكشف عنها علنًا بشكلٍ سليم، فتسمح هذه السياسة بمواصلة استخدامها في مضيفات المؤسسات. 
 
 
-      ولإيقاف فرض شهادة الشفافية عند تعيين هذه السياسة، يجب أن تكون التجزئة ضمن subjectPublicKeyInfo التي تظهر في شهادة CA التي يتم التعرف عليها كمرجع تصديق قديم (CA). ويكون مرجع التصديق القديم مرجع تصديق موثوقاُ به علنياً وتلقائيًا عن طريق واحد أو أكثر من أنظمة التشغيل التي يتم دعمها من <ph name="PRODUCT_NAME" />، ولكن لا يتم الوثوق به من قبل المشروع المفتوح المصدر لنظام Android أو <ph name="PRODUCT_OS_NAME" />.
+      ولإيقاف فرض شهادة الشفافية عند تعيين هذه السياسة، يجب أن تكون التجزئة ضمن subjectPublicKeyInfo التي تظهر في شهادة CA التي يتم التعرف عليها كمرجع تصديق قديم (CA). ويكون مرجع التصديق القديم مرجع تصديق موثوقًا به علنيًا وتلقائيًا عن طريق واحد أو أكثر من أنظمة التشغيل التي يتم دعمها من <ph name="PRODUCT_NAME" />، ولكن لا يتم الوثوق به من قبل المشروع المفتوح المصدر لنظام Android أو <ph name="PRODUCT_OS_NAME" />.
 
       يتم تحديد تجزئة subjectPublicKeyInfo عن طريق ربط الاسم الخوارزمي للتجزئة، والحرف "/" والترميز Base64 لخوارزمية التجزئة التي يتم تطبيقها على subjectPublicKeyInfo بترميز DER للشهادة المحدَّدة. ويكون لترميز Base64 هذا تنسيق الملف المرجعي لـ SPKI نفسه، كما تم تحديده في RFC 7469 في الفقرة 2.4. يتم تجاهل خوارزميات التجزئة غير المتعارف عليها، وتكون خوارزمية التجزئة الوحيدة المدعومة في الوقت الحالي هي "sha256".
 
@@ -1039,7 +1034,7 @@
 
       بخلاف ذلك، قد يتم التعيين على إحدى القيم التالية: "tls1.2" أو "tls1.3". وعند التعيين، لن يستخدم <ph name="PRODUCT_NAME" /> إصدارات طبقة المقابس الآمنة/طبقة النقل الآمنة الأعلى من الإصدار المحدد. وسيتم تجاهل أي قيمة غير معروفة.</translation>
 <translation id="4121350739760194865">منع العروض الترويجية للتطبيقات من الظهور في صفحة علامة التبويب الجديدة</translation>
-<translation id="412697421478384751">تتيح للمستخدمين تعيين أرقام تعريف شخصية ضعيفة كرقم التعريف الشخصي لشاشة التأمين</translation>
+<translation id="412697421478384751">إتاحة تعيين المستخدمين لأرقام تعريف شخصية ضعيفة كرقم التعريف الشخصي لشاشة القفل.</translation>
 <translation id="4157003184375321727">تسجيل إصدار نظام التشغيل والبرامج الثابتة</translation>
 <translation id="4157594634940419685">‏السماح بالوصول إلى طابعات CUPS الأصلية</translation>
 <translation id="4183229833636799228">إعداد <ph name="FLASH_PLUGIN_NAME" /> التلقائي</translation>
@@ -1067,7 +1062,7 @@
 <translation id="4239720644496144453">‏لا تُستخدم ذاكرة التخزين المؤقت مع تطبيقات Android. في حالة تثبيت عدة مستخدمين لنفس تطبيق Android، سيتم تنزيله من جديد لكلّ مستخدم.</translation>
 <translation id="4250680216510889253">لا</translation>
 <translation id="4261820385751181068">لغة شاشة تسجيل الدخول إلى الجهاز</translation>
-<translation id="427220754384423013">‏تُحدد السياسة الطابعات التي يمكن لمستخدم استخدامها.
+<translation id="427220754384423013">‏تُحدد السياسة الطابعات التي يمكن لأي مستخدم استخدامها.
 
       لا يتم استخدام هذه السياسة إلا في حال اختيار <ph name="PRINTERS_WHITELIST" /> لـ <ph name="BULK_PRINTERS_ACCESS_MODE" />.
 
@@ -1114,7 +1109,7 @@
 <translation id="437791893267799639">‏لم يتم تعيين السياسة، عدم السماح بترحيل البيانات وARC</translation>
 <translation id="4389091865841123886">‏يمكنك تهيئة التأكيد عن بعد باستخدام آلية TPM.</translation>
 <translation id="4410236409016356088">تفعيل تقييد معدل نقل البيانات للشبكة</translation>
-<translation id="441217499641439905">‏إيقاف Google Drive عبر الاتصالات الخلويّة في تطبيق الملفات في نظام التشغيل <ph name="PRODUCT_OS_NAME" /></translation>
+<translation id="441217499641439905">‏إيقاف Google Drive عبر الاتصالات الخلويّة في تطبيق الملفات في نظام التشغيل <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="4418726081189202489">‏يؤدي تعيين هذه السياسة على "false" إلى منع <ph name="PRODUCT_NAME" /> من إرسال طلبات البحث إلى خادم Google أحيانًا لاسترداد طابع زمني دقيق. وسيتم تفعيل طلبات البحث هذه إذا تم تعيين هذه السياسة على "True" أو لم يتم تعيينها.</translation>
 <translation id="4423597592074154136">تحديد إعدادات الخادم الوكيل يدويًا</translation>
 <translation id="4429220551923452215">تفعيل اختصار التطبيقات أو إيقافه في شريط علامات متابعة القراءة. 
@@ -1219,7 +1214,7 @@
           وبشكل تلقائي، سيتلقّى المستخدمون رسالة تحذير، وليس رسالة خطأ، إذا تم اعتبار أرقام التعريف الشخصية ضعيفةً.</translation>
 <translation id="4723829699367336876">تفعيل اجتياز الجدار الناري من عميل يتمتع بإمكانية الوصول عن بعد</translation>
 <translation id="4725528134735324213">‏تفعيل Android Backup Service</translation>
-<translation id="4725801978265372736">تتطلب تطابق اسم المستخدم المحلي مع المالك المضيف الذي يتمتع بإمكانية الوصول عن بُعد</translation>
+<translation id="4725801978265372736">وجوب تطابق اسم المستخدم المحلي مع المالك المضيف الذي يتمتع بإمكانية الوصول عن بُعد.</translation>
 <translation id="4733471537137819387">‏النُهج ذات الصلة بمصادقة HTTP المتكاملة.</translation>
 <translation id="4744190513568488164">الخوادم التي قد يُجري <ph name="PRODUCT_NAME" /> تفويضًا إليها.
 
@@ -1409,13 +1404,13 @@
 <translation id="5370279767682621504">‏تفعيل دعم HTTP/0.9 في المنافذ غير التلقائية</translation>
 <translation id="5378985487213287085">‏للسماح لك بتعيين ما إذا كان يُسمح للمواقع الإلكترونية بعرض إشعارات سطح المكتب. يمكن السماح بعرض إشعارات سطح المكتب بشكل تلقائي أو رفضها بشكل تلقائي أو يمكن سؤال المستخدم في كل مرة يريد فيها موقع الويب عرض إشعارات سطح المكتب. إذا تم ترك هذه السياسة بدون تعيين، فسيتم استخدام السياسة 'AskNotifications' وسيتمكن المستخدم من تغييرها.</translation>
 <translation id="538108065117008131">السماح لـ <ph name="PRODUCT_FRAME_NAME" /> بالتعامل مع أنواع المحتوى التالية.</translation>
-<translation id="5391363090783552279">‏في حال تعيين هذه السياسة على وضع "true"، سيتصل <ph name="PRODUCT_NAME" /> بأجهزة البث في جميع عناوين IP، وليس فقط بعناوين RFC1918/RFC4913 الخاصة.
-          في حال تعيين هذه السياسة على وضع "false"، سيتصل <ph name="PRODUCT_NAME" /> بأجهزة البث في عناوين RFC1918/RFC4913 الخاصة فقط.
+<translation id="5391363090783552279">‏في حال تعيين هذه السياسة على الوضع "true"، سيتصل <ph name="PRODUCT_NAME" /> بأجهزة البث في جميع عناوين IP، وليس فقط عناوين RFC1918/RFC4913 الخاصة.
+          في حال تعيين هذه السياسة على الوضع "false"، سيتصل <ph name="PRODUCT_NAME" /> بأجهزة البث في عناوين RFC1918/RFC4913 الخاصة فقط.
 
           في حال عدم تعيين هذه السياسة، سيتصل <ph name="PRODUCT_NAME" /> بأجهزة البث في عناوين RFC1918/RFC4913 الخاصة فقط، ما لم يتم تفعيل ميزة CastAllowAllIPs.
 
 
-          في حال تعيين سياسة "EnableMediaRouter" على وضع "false"، لن يصبح لقيمة هذه السياسة أي تأثير.</translation>
+          في حال تعيين سياسة "EnableMediaRouter" على الوضع "false"، لن يصبح لقيمة هذه السياسة أي تأثير.</translation>
 <translation id="5392172595902933844">‏يتم إرسال معلومات حول حالة جهاز Android إلى
       الخادم مرة أخرى.
 
@@ -1785,15 +1780,15 @@
 
       إذا تركت هذه السياسة غير مُعينة، فسيتم تفعيل توقع الشبكة ولكن سيظل المستخدم قادرًا على تغييره.</translation>
 <translation id="6658245400435704251">لتحديد عدد الثواني التي يجوز للجهاز بعد انقضائها تأخير تنزيل أحد التحديثات بشكل عشوائي بدءًا من وقت نشر التحديث أول مرة من الخادم. وربما ينتظر الجهاز بعض هذا الوقت باعتباره ضمن الوقت المستغرق حتى الاكتمال والجزء المتبقي من الوقت باعتباره ضمن بعض عمليات البحث عن التحديثات. على أيّ حال، فإن التشتيت يكون أكبر من أو يساوي مقدارًا ثابتًا من الوقت ولذلك فإن الجهاز لا يتوقف أبدًا لانتظار تنزيل أحد التحديثات باستمرار.</translation>
-<translation id="6665670272107384733">تحديد عدد المرّات التي يلزم المستخدم فيها بإدخال كلمة المرور لاستخدام ميزة "إلغاء القفل السريع"</translation>
+<translation id="6665670272107384733">تحديد المهلة لطلب إدخال كلمة المرور من جديد لاستخدام ميزة "إلغاء القفل السريع".</translation>
 <translation id="6689792153960219308">الإبلاغ عن حالة الأجهزة</translation>
 <translation id="6698071416141001300">تم تشغيل الإبلاغ عن الحسابات المعرضة للخطر لحماية كلمة المرور من خلال إعادة استخدام كلمة المرور.</translation>
 <translation id="6699880231565102694">تفعيل المصادقة الثنائية لعمليات استضافة الدخول عن بُعد</translation>
 <translation id="6702257826895463228">‏تسمح هذه السياسة للمواقع بالانتقال وفتح النوافذ المنبثقة في آنٍ واحد.
 
-...... للحصول على شرح كامل، يمكنك الاطِّلاع على https://www.chromestatus.com/features/5675755719622656.
-...... في حال تفعيل هذه السياسة، سيتم السماح للمواقع بالانتقال وفتح علامات تبويب/نوافذ جديدة في آنٍ واحد.
-...... في حال إيقاف هذه السياسة أو عدم تعيينها، لن يتم السماح للمواقع بالانتقال وفتح علامة تبويب/نوافذ جديدة في آنٍ واحد.</translation>
+       للحصول على شرح كامل، يمكنك الاطِّلاع على https://www.chromestatus.com/features/5675755719622656.
+       في حال تفعيل هذه السياسة، سيتم السماح للمواقع بالانتقال وفتح علامات التبويب/النوافذ الجديدة في آنٍ واحد.
+       في حال إيقاف هذه السياسة أو عدم تعيينها، لن يتم السماح للمواقع بالانتقال وفتح علامة التبويب/النوافذ الجديدة في آنٍ واحد.</translation>
 <translation id="6724842112053619797">‏في حالة تفعيل هذا الإعداد، سيتم أيضًا تسجيل الإعدادات المخزّنة في الملفات الشخصية في <ph name="PRODUCT_NAME" />، مثل الإشارات المرجعية، وبيانات الملء التلقائي، وكلمات المرور وغيرها، في ملف مخزّن في مجلد الملف الشخصي للتجوال التابع للمستخدم أو في موقع تم تحديده من قِبل المشرف من خلال سياسة <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" />. ويعمل تفعيل هذه السياسة على إيقاف المزامنة عبر السحاب.
 
       في حالة إيقاف هذه السياسة أو تركها بدون تعيين، سيتم استخدام الملفات الشخصية المحلية العادية فقط.
@@ -1854,7 +1849,7 @@
 
       يتعذّر على المستخدمين تغيير هذا الإعداد أو إلغاؤه.</translation>
 <translation id="6908640907898649429">لتهيئة مزود البحث التلقائي. يمكنك تحديد مزود البحث التلقائي الذي سيستخدمه المستخدم، أو اختيار إيقاف مزود البحث التلقائي.</translation>
-<translation id="6913068954484253496">‏السماح  لـ <ph name="PRODUCT_NAME" /> بالاتصال بأجهزة البث في جميع عناوين IP.</translation>
+<translation id="6913068954484253496">‏السماح لـ <ph name="PRODUCT_NAME" /> بالاتصال بأجهزة البث في جميع عناوين IP</translation>
 <translation id="6915442654606973733">‏تفعيل ميزة الدخول إلى التعليقات المنطوقة.
 
           في حالة تعيين هذه السياسة على "true"، سيتم تفعيل التعليقات المنطوقة على الدوام.
@@ -1972,7 +1967,7 @@
           لا يتم السماح بالتشغيل التلقائي إلا للنطاقات الواردة بوضوح في سياسة <ph name="PLUGINS_ALLOWED_FOR_URLS_POLICY_NAME" />. إذا كنت ترغب في تفعيل التشغيل التلقائي لجميع المواقع، ينبغي لك إضافة http://* وhttps://* إلى هذه القائمة.
 
           إذا لم يتم تعيين هذه السياسة، سيتمكن المستخدم من تغيير هذا الإعداد يدويًا.</translation>
-<translation id="723103540848640830">تحديد الحد الأدنى لطول رقم التعريف الشخصي لشاشة التأمين</translation>
+<translation id="723103540848640830">تحديد الحد الأدنى لطول رقم التعريف الشخصي لشاشة القفل</translation>
 <translation id="7234280155140786597">أسماء مضيفي الرسائل الأصلية المحظورة (أو * للكل)</translation>
 <translation id="7236775576470542603">تعيين النوع التلقائي من مكبر الشاشة الذي يتم تفعيله في شاشة تسجيل الدخول.
 
@@ -2031,7 +2026,7 @@
 <translation id="7336878834592315572">الاحتفاظ بملفات تعريف الارتباط طوال مدة الجلسة</translation>
 <translation id="7340034977315324840">تسجيل أوقات نشاط الجهاز</translation>
 <translation id="7343497214039883642">ملف تهيئة طابعة المؤسسة للأجهزة</translation>
-<translation id="7367028210010532881">‏تعرض خدمة "التصفُّح الآمن" صفحة تحذير عند انتقال المستخدم إلى المواقع التي تم الإبلاغ عنها بأنها ضارة. تفعيل هذا الإعداد يمنع المستخدمين من متابعة الانتقال من صفحة التحذير إلى الموقع الضار.
+<translation id="7367028210010532881">‏تعرض خدمة "التصفُّح الآمن" صفحة تحذير عند انتقال المستخدم إلى المواقع التي تم الإبلاغ بأنها ضارة. تفعيل هذا الإعداد يمنع المستخدمين من متابعة الانتقال من صفحة التحذير إلى الموقع الضار.
 
       عند إيقاف هذا الإعداد أو عدم تهيئته، يمكن للمستخدمين المتابعة إلى الموقع الذي تم الإبلاغ عنه بعد ظهور التحذير.
 
@@ -2073,11 +2068,11 @@
       إذا تم التعيين إلى GAIA، سيتم إجراء تسجيل الدخول عبر تدفق مصادقة GAIA العادي.
 
       إذا تم التعيين إلى SAML_INTERSTITIAL، سيظهر تسجيل الدخول شاشة بإعلانات بينية تقترح على المستخدم الانتقال للأمام من خلال المصادقة عبر SAML IdP لنطاق التسجيل للجهاز، أو الرجوع إلى تدفق تسجيل دخول GAIA العادي.</translation>
-<translation id="755951849901630953">‏تتيح هذه السياسة تفعيل تحديثات كافة المكوّنات في <ph name="PRODUCT_NAME" /> عند تعيينها على وضع "true" أو إلغاء تعيينها.
+<translation id="755951849901630953">‏تتيح هذه السياسة تفعيل تحديثات كافة المكوّنات في <ph name="PRODUCT_NAME" /> عند تعيينها على الوضع "true" أو إلغاء تعيينها.
 
-      في حال التعيين على وضع "false"، يتم إيقاف تحديثات المكونات. ومع ذلك، يتم استثناء بعض المكونات من هذه السياسة: لن يتم إيقاف التحديثات لأي مكون لا يحتوي على رمز قابل للتنفيذ، أو لا يغيّر بشكلٍ كبير من سلوك المتصفح، أو يعدّ مهمًا للأمان.
-      تتضمن الأمثلة على هذه المكونات قوائم الشهادات الباطلة وبيانات التصفُّح الآمن.
-      يمكنك الاطِّلاع على https://developers.google.com/safe-browsing لمزيد من المعلومات حول التصفُّح الآمن.</translation>
+      في حال التعيين على الوضع "false"، يتم إيقاف تحديثات المكونات. ومع ذلك، يتم استثناء بعض المكونات من هذه السياسة: لن يتم إيقاف التحديثات لأي مكون لا يحتوي على رمز قابل للتنفيذ، أو لا يغيّر بشكلٍ كبير من سلوك المتصفح، أو يعدّ مهمًا للأمان.
+      تتضمن الأمثلة على هذه المكونات قوائم الشهادات الباطلة وبيانات "التصفُّح الآمن".
+      يمكنك الاطِّلاع على https://developers.google.com/safe-browsing لمزيد من المعلومات حول "التصفُّح الآمن".</translation>
 <translation id="757395965347379751">‏عند تفعيل هذا الإعداد، يسمح <ph name="PRODUCT_NAME" /> لشهادات SHA-1 الموقعة طالما يتم التحقق منهم بنجاح وربطها بشهادات CA المثبتة محليًا.
 
       لاحظ أن هذه السياسة تعتمد على حزم التحقق من شهادة نظام التشغيل التي تسمح بعمليات توقيع SHA-1. وفي حالة تغيير تحديث نظام التشغيل معالجة نظام التشغيل لشهادات SHA-1، فمن الممكن أن تكون هذه السياسة غير نافذة المفعول بعد الآن.  علاوة على ذلك، تعد هذه السياسة بمثابة حل بديل مؤقت لمنح المؤسسات المزيد من الوقت للانتقال من SHA-1. وسيتم إزالة هذه السياسة اعتبارًا من الأول من (يناير) 2019.
@@ -2104,21 +2099,21 @@
       إذا تم تفعيل هذا الإعداد، فسيستخدم <ph name="PRODUCT_NAME" /> اللغة المحددة. وإذا كانت اللغة التي تمت تهيئتها غير متاحة، فسيتم استخدام 'en-US' بدلاً منها.
 
       إذا تم إيقاف هذا الإعداد، فسيستخدم <ph name="PRODUCT_NAME" /> اللغة المفضلة التي حددها المستخدم (إذا تمت تهيئتها) أو لغة النظام أو اللغة البديلة 'en-US'.</translation>
-<translation id="7641363659597330616">‏نتيح هذه السياسة تهيئة نوع التنزيلات التي سيحظرها <ph name="PRODUCT_NAME" /> بالكامل، بدون السماح للمستخدمين بتجاوز قرار الأمان.
+<translation id="7641363659597330616">‏نتيح هذه السياسة تهيئة نوع عمليات التنزيل التي سيحظرها <ph name="PRODUCT_NAME" /> بالكامل، بدون السماح للمستخدمين بتجاوز قرار الأمان.
 
-      في حال تعيين هذه السياسة، سيمنع <ph name="PRODUCT_NAME" /> أنواعًا معينة من التنزيلات، ولن يسمح للمستخدم بتجاوز تحذيرات الأمان.
+      في حال تعيين هذه السياسة، سيمنع <ph name="PRODUCT_NAME" /> أنواعًا معينة من عمليات التنزيل، ولن يسمح للمستخدم بتجاوز تحذيرات الأمان.
 
-      عند تحديد خيار "حظر التنزيلات الخطيرة"، يتم السماح بجميع التنزيلات، باستثناء تلك التي تحمل تحذيرات "التصفُّح الآمن".
+      عند تحديد خيار "حظر التنزيلات الخطيرة"، يتم السماح بجميع عمليات التنزيل، باستثناء تلك التي تحمل تحذيرات "التصفُّح الآمن".
 
-      عند تحديد خيار "حظر التنزيلات التي يُحتمل أن تكون خطيرة"، يتم السماح بجميع التنزيلات، باستثناء تلك التي تحمل تحذيرات "التصفُّح الآمن" بوجود تنزيلات يُحتمل أن تكون خطيرة.
+      عند تحديد خيار "حظر عمليات التنزيل التي يُحتمل أن تكون خطيرة"، يتم السماح بجميع عمليات التنزيل، باستثناء تلك التي تحمل تحذيرات "التصفُّح الآمن" بوجود عمليات التنزيل يُحتمل أن تكون خطيرة.
 
 
-      عند تحديد خيار "حظر جميع التنزيلات"، يتم حظر جميع التنزيلات.
+      عند تحديد خيار "حظر جميع عمليات التنزيل"، يتم حظر جميع عمليات التنزيل.
 
-      في حال عدم تعيين هذه السياسة، (أو عند تحديد خيار "بلا قيود خاصة")، ستخضع التنزيلات للقيود الأمنية المعتادة استنادًا إلى نتائج تحليل "التصفُّح الآمن".
+      في حال عدم تعيين هذه السياسة، (أو عند تحديد خيار "بلا قيود خاصة")، ستخضع عمليات التنزيل للقيود الأمنية المعتادة استنادًا إلى نتائج تحليل "التصفُّح الآمن".
 
 
-      يذكر أن هذه القيود تنطبق على التنزيلات التي تم تشغيلها من محتوى صفحة الويب، بالإضافة إلى خيار قائمة سياقات "رابط التحميل ...". لا تنطبق هذه القيود على حفظ/تنزيل الصفحة المعروضة حاليًا، ولا تنطبق على الحفظ بتنسيق PDF من خيارات الطباعة. 
+      يذكر أن هذه القيود تنطبق على عمليات التنزيل التي تم تشغيلها من محتوى صفحة الويب، بالإضافة إلى خيار قائمة سياقات "رابط التحميل ...". لا تنطبق هذه القيود على حفظ/تنزيل الصفحة المعروضة حاليًا، ولا تنطبق على الحفظ بتنسيق PDF من خيارات الطباعة. 
 
       يمكنك الاطِّلاع على https://developers.google.com/safe-browsing لمزيد من المعلومات حول "التصفُّح الآمن".</translation>
 <translation id="7643883929273267746">تقييد الحسابات المرئية في <ph name="PRODUCT_NAME" /></translation>
@@ -2372,7 +2367,7 @@
       إذا تم ترك هذه السياسة دون تعيين أو تم إيقافها، فسيتم استخدام المكوّن الإضافي PDF لفتح ملفات PDF ما لم يوقفه المستخدم.</translation>
 <translation id="8402079500086185021">‏فتح ملفات PDF خارجيًا دائمًا</translation>
 <translation id="8412312801707973447">‏ما إذا كانت فحوصات OCSP/CRL على الإنترنت يتم تنفيذها أم لا</translation>
-<translation id="8417305981081876834">تحديد الحد الأقصى لطول رقم التعريف الشخصي لشاشة التأمين</translation>
+<translation id="8417305981081876834">تحديد الحد الأقصى لطول رقم التعريف الشخصي لشاشة القفل</translation>
 <translation id="841977920223099909">مشغّل تحذير حماية كلمة المرور</translation>
 <translation id="8424255554404582727">إعداد تدوير شاشة العرض التلقائية، المعاد تطبيقه في كل إعادة تشغيل</translation>
 <translation id="8426231401662877819">تدوير الشاشة في اتجاه عقارب الساعة بمقدار 90 درجة</translation>
@@ -2451,11 +2446,11 @@
 
       يُرسِل "إعداد التقارير الموسَّع" بعضاً من معلومات النظام ومحتوى الصفحة إلى خوادم Google للمساعدة في رصد المواقع والتطبيقات الضارة.
 
-      في حال تعيين الإعداد على وضع "true"، يتم إنشاء التقارير وإرسالها عند الضرورة فقط (مثلاً عند ظهور إعلانات بينية للأمان).
+      في حال تعيين الإعداد على الوضع "true"، يتم إنشاء التقارير وإرسالها عند الضرورة فقط (مثلاً عند ظهور إعلانات بينية للأمان).
 
-      في حال التعيين على وضع "false"، لن يتم إرسال التقارير مطلقًا.
+      في حال التعيين على الوضع "false"، لن يتم إرسال التقارير مطلقًا.
 
-      في حال تعيين هذه السياسة على وضع "true" أو "false"، لن يتمكن المستخدم من تعديل هذا الإعداد.
+      في حال تعيين هذه السياسة على الوضع "true" أو "false"، لن يتمكن المستخدم من تعديل هذا الإعداد.
 
       في حال عدم تعيين هذه السياسة، سيتمكَّن المستخدم من تغيير الإعداد والتحكُّم بإمكانية إرسال التقارير أم لا.
 
diff --git a/components/policy/resources/policy_templates_bn.xtb b/components/policy/resources/policy_templates_bn.xtb
index 633e32c..e314a6f 100644
--- a/components/policy/resources/policy_templates_bn.xtb
+++ b/components/policy/resources/policy_templates_bn.xtb
@@ -283,7 +283,7 @@
           বর্তমানে এই বৈশিষ্ট্যটি সার্ভার-সাইডে অক্ষম রয়েছে।</translation>
 <translation id="1929709556673267855">ডিভাইসগুলির সাথে সংযুক্ত এন্টারপ্রাইজ প্রিন্টারগুলির জন্য কনফিগারেশন প্রদান করে।
 
-      এই পলিসির মাধ্যমে আপনি <ph name="PRODUCT_OS_NAME" /> ডিভাইসগুলিতে প্রিন্টার কনফিগারেশন প্রদান করতে পারবেন।  whitelisting বা blacklisting এর জন্য ফর্ম্যাটটি NativePrinters ডিরেক্টরির অনুরূপ, যা প্রতি প্রিন্টারের জন্য একটি অতিরিক্ত "ID" বা "guid" ক্ষেত্র অন্তর্ভুক্ত করে।
+      এই নীতির মাধ্যমে আপনি <ph name="PRODUCT_OS_NAME" /> ডিভাইসগুলিতে প্রিন্টার কনফিগারেশন প্রদান করতে পারবেন।  সাদাতালিকাভুক্তি বা কালোতালিকাভুক্তির জন্য ফর্ম্যাটটি NativePrinters ডিরেক্টরির অনুরূপ, যা প্রতি প্রিন্টারের জন্য একটি অতিরিক্ত "ID" বা "guid" ক্ষেত্র অন্তর্ভুক্ত করে।
 
       ফাইলের সাইজ যেন ৫ MB এর বেশি না হয় এবং অবশ্যই JSON এ এনকোড করা থাকে।  অনুমান করা হয় যে একটি ৫ MB এর ফাইলে আনুমানিক ২১,০০০টি প্রিন্টারের তথ্য রাখা যেতে পারে।  ডাউনলোডের সম্পূর্ণতা যাচাই করতে ক্রিপ্টোগ্রাফিক হ্যাশ ব্যবহার করা হয়।
 
@@ -291,11 +291,11 @@
 
       যদি এই নীতিটি সেট করা থাকে, তাহলে <ph name="PRODUCT_OS_NAME" /> প্রিন্টার কনফিগারেশনের জন্য ফাইলটি ডাউনলোড করবে ও <ph name="DEVICE_PRINTERS_ACCESS_MODE" />, <ph name="DEVICE_PRINTERS_WHITELIST" /> এবং <ph name="DEVICE_PRINTERS_BLACKLIST" /> এর নীতি অনুযায়ী প্রিন্টার পাওয়া যাবে।
 
-      ব্যবহারকারীরা স্বতন্ত্র ডিভাইসে প্রিন্টার কনফিগার করতে পারবেন কিনা তার উপর এই নীতির কোনও প্রভাব থাকে না।  এই নীতির উদ্দেশ্য হল স্বতন্ত্র ব্যবহারকারীদের দ্বারা করা প্রিন্টারের কনফিগারেশনের সাথে অতিরিক্ত সহায়তা প্রদান করা।
+      ব্যবহারকারীরা স্বতন্ত্র ডিভাইসে প্রিন্টার কনফিগার করতে পারবেন কিনা তার উপর এই নীতির কোনও প্রভাব থাকে না।  এই নীতির উদ্দেশ্য হল স্বতন্ত্র ব্যবহারকারীদের করা প্রিন্টারের কনফিগারেশনের সাথে অতিরিক্ত সহায়তা প্রদান করা।
 
       এই নীতিটি <ph name="BULK_PRINTERS_POLICY" /> এর উপর অতিরিক্ত নীতি হিসেবে কাজ করে।
 
-      যদি এই নীতিটি আনসেট করা হয় তাহলে কোনও ডিভাইস প্রিন্টার থাকবে না এবং অন্যান্য <ph name="DEVICE_PRINTERS_POLICY_PATTERN" /> নীতিগুলি উপেক্ষা করা হবে।
+      এই নীতিটি সেট করা না হলে কোনও ডিভাইস প্রিন্টার থাকবে না এবং অন্যান্য <ph name="DEVICE_PRINTERS_POLICY_PATTERN" /> নীতিগুলি উপেক্ষা করা হবে।
       </translation>
 <translation id="193259052151668190">USB বিচ্ছিন্ন করা যায় এমন ডিভাইসের পরিচ্ছন্ন তালিকা</translation>
 <translation id="1933378685401357864">ওয়ালপেপার ছবি</translation>
@@ -340,15 +340,15 @@
 
       এই নীতির ফলে প্রশাসকরা তাদের ব্যবহারকারীদের জন্য প্রিন্টারের কনফিগারেশন সরবরাহ করতে পারে।
 
-      <ph name="PRINTER_DISPLAY_NAME" /> এবং <ph name="PRINTER_DESCRIPTION" /> এমন দুটি স্ট্রিং যেগুলি সহজে প্রিন্টার বেছে নেওয়ার জন্য কাস্টমাইজ করা যায়। <ph name="PRINTER_MANUFACTURER" /> এবং <ph name="PRINTER_MODEL" /> এর সাহায্যে ব্যবহারকারীরা সহজে নির্দিষ্ট কোনও প্রিন্টার চিনে নিতে পারেন। এই দুটি স্ট্রিং এ প্রিন্টারের প্রস্তুতকারক এবং প্রিন্টারের মডেল নম্বর দেখা যায়। <ph name="PRINTER_URI" /> এ এমন একটি ঠিকানা রাখতে হবে যেটি <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> এবং <ph name="URI_QUEUE" /> সহ অন্যান্য ক্লায়েন্ট কম্পিউটার থেকে অ্যাক্সেস করা যাবে। <ph name="PRINTER_UUID" /> এর তথ্যটি ঐচ্ছিক। উল্লেখ করা থাকলে এই তথ্যটি <ph name="ZEROCONF_DISCOVERY" /> প্রিন্টারের ডুপ্লিকেট তৈরি করতে ব্যবহার করা হয়।
+      <ph name="PRINTER_DISPLAY_NAME" /> এবং <ph name="PRINTER_DESCRIPTION" /> এমন দুটি স্ট্রিং যেগুলি সহজে প্রিন্টার বেছে নেওয়ার জন্য কাস্টমাইজ করা যায়। <ph name="PRINTER_MANUFACTURER" /> এবং <ph name="PRINTER_MODEL" /> এর সাহায্যে ব্যবহারকারীরা সহজে নির্দিষ্ট কোনও প্রিন্টার চিনে নিতে পারেন। এই দুটি স্ট্রিং-এ প্রিন্টারের প্রস্তুতকারক এবং প্রিন্টারের মডেল নম্বর দেখা যায়। <ph name="PRINTER_URI" />-এ এমন একটি ঠিকানা রাখতে হবে যেটি <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> এবং <ph name="URI_QUEUE" /> সহ অন্যান্য ক্লায়েন্ট কম্পিউটার থেকে অ্যাক্সেস করা যাবে। <ph name="PRINTER_UUID" /> এর তথ্যটি ঐচ্ছিক। উল্লেখ করা থাকলে এই তথ্যটি <ph name="ZEROCONF_DISCOVERY" /> প্রিন্টারের ডুপ্লিকেট তৈরি করতে ব্যবহার করা হয়।
 
-      <ph name="PRINTER_EFFECTIVE_MODEL" /> এর তথ্যটিকে অবশ্যই এমন কোনও একটি স্ট্রিং এর সাথে মিলতে হবে যেটি <ph name="PRODUCT_NAME" /> সমর্থিত প্রিন্টারকে নির্দেশ করে।  প্রিন্টারের জন্য যথাযথ PPD শনাক্ত এবং ইনস্টল করতে এই স্ট্রিংটি ব্যবহার করা হবে। আরও তথ্যের জন্য https://support.google.com/chrome?p=noncloudprint এ যান।
+      <ph name="PRINTER_EFFECTIVE_MODEL" /> এর তথ্যটিকে অবশ্যই এমন কোনও একটি স্ট্রিং-এর সাথে মিলতে হবে যেটি <ph name="PRODUCT_NAME" /> সমর্থিত প্রিন্টারকে নির্দেশ করে। প্রিন্টারের জন্য যথাযথ PPD শনাক্ত এবং ইনস্টল করতে এই স্ট্রিংটি ব্যবহার করা হবে। আরও তথ্যের জন্য https://support.google.com/chrome?p=noncloudprint এ যান।
 
       কোনও প্রিন্টার প্রথমবার ব্যবহার করার সময় সেটি সেট-আপ করা হয়।  প্রিন্টার ব্যবহার করা শুরু না করা পর্যন্ত PPD ডাউনলোড করা হয় না।  তার পর থেকে ঘনঘন ব্যবহার করা PPDগুলি ক্যাশে সঞ্চিত রাখা হয়।
 
-      ব্যবহারকারীরা বিভিন্ন স্বতন্ত্র ডিভাইসে প্রিন্টার কনফিগার করতে পারছেন কিনা, তা এই নীতির দ্বারা নিয়ন্ত্রিত নয়।  স্বতন্ত্র ব্যবহারকারীর প্রিন্টার কনফিগার করার সম্পূরক হিসাবে কাজ করাই এই নীতির লক্ষ্য।
+      ব্যবহারকারীরা বিভিন্ন স্বতন্ত্র ডিভাইসে প্রিন্টার কনফিগার করতে পারছেন কিনা, তা এই নীতির দ্বারা নিয়ন্ত্রিত নয়।  স্বতন্ত্র ব্যবহারকারীর প্রিন্টার কনফিগার করার সম্পূরক হিসেবে কাজ করাই এই নীতির লক্ষ্য।
 
-      সক্রিয় ডাইরেক্টরিটি একটি স্বয়ংক্রিয় ডিভাইসের জন্য <ph name="MACHINE_NAME_VARIABLE" /> নামে পরিচিত এই নীতিটি সমর্থন করে, অথবা অ্যাক্টিভ ডাইরেক্টরি মেশিনের নামের একটি এক্সটেনশন। উদাহরণস্বরূপ, যদি মেশিনের নামটি <ph name="MACHINE_NAME_EXAMPLE" /> থাকে, তাহলে <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />টি ৬টি অবস্থার পরে ৪টি অক্ষর দ্বারা প্রতিস্থাপিত হবে, অর্থাত <ph name="MACHINE_NAME_PART_EXAMPLE" />। লক্ষ্য করুন যে অবস্থানটি শূন্য ভিত্তিক।
+      অ্যাক্টিভ ডাইরেক্টরি পরিচালিত ডিভাইসের জন্য এই নীতিটি <ph name="MACHINE_NAME_VARIABLE" /> নাম থেকে শুরু করে, অ্যাক্টিভ ডাইরেক্টরি মেশিনের নাম বা এর একটি এক্সটেনশন সমর্থন করে। উদাহরণস্বরূপ, যদি মেশিনের নামটি <ph name="MACHINE_NAME_EXAMPLE" /> থাকে, তাহলে <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" />টি ৬টি অবস্থার পরে ৪টি অক্ষর দ্বারা প্রতিস্থাপিত হবে, অর্থাত <ph name="MACHINE_NAME_PART_EXAMPLE" />। লক্ষ্য করুন যে অবস্থানটি শূন্য ভিত্তিক।
       </translation>
 <translation id="2030905906517501646">ডিফল্ট অনুসন্ধান প্রদানকারী কিওয়ার্ড</translation>
 <translation id="203096360153626918">Android অ্যাপ্লিকেশানের উপর এই নীতির কোনো প্রভাব নেই। এই নীতিটি <ph name="FALSE" /> এ সেট করা হলেও, সেগুলি পূর্ণস্ক্রীন মোডে ঢুকতে পারবে।</translation>
@@ -637,7 +637,7 @@
 <translation id="262740370354162807"><ph name="CLOUD_PRINT_NAME" />-তে দস্তাবেজ জমা সক্ষম করুন</translation>
 <translation id="2627554163382448569">এন্টারপ্রাইজ প্রিন্টারগুলির জন্য কনফিগারেশন প্রদান করে।
 
-      এই নীতির মাধ্যমে আপনি <ph name="PRODUCT_OS_NAME" /> ডিভাইসগুলিতে প্রিন্টার কনফিগারেশন প্রদান করতে পারবেন।  whitelisting বা blacklisting এর জন্য ফর্ম্যাটটি NativePrinters ডিরেক্টরির অনুরূপ, যা প্রতি প্রিন্টারের জন্য একটি অতিরিক্ত "ID" বা "guid" ক্ষেত্র অন্তর্ভুক্ত করে।
+      এই নীতির মাধ্যমে আপনি <ph name="PRODUCT_OS_NAME" /> ডিভাইসগুলিতে প্রিন্টার কনফিগারেশন প্রদান করতে পারবেন।  সাদাতালিকাভুক্তি বা কালোতালিকাভুক্তির জন্য ফর্ম্যাটটি NativePrinters ডিরেক্টরির অনুরূপ, যা প্রতি প্রিন্টারের জন্য একটি অতিরিক্ত "ID" বা "guid" ক্ষেত্র অন্তর্ভুক্ত করে।
 
       ফাইলের সাইজ যেন ৫ MB এর বেশি না হয় এবং অবশ্যই JSON এ এনকোড করা থাকে।  অনুমান করা হয় যে একটি ৫ MB এর ফাইলে আনুমানিক ২১,০০০টি প্রিন্টারের তথ্য রাখা যেতে পারে।  ডাউনলোডের সম্পূর্ণতা যাচাই করতে ক্রিপ্টোগ্রাফিক হ্যাশ ব্যবহার করা হয়।
 
@@ -715,7 +715,7 @@
 <translation id="2838830882081735096">ডেটা মাইগ্রেশন এবং ARC এর অনুমতি দেবেন না</translation>
 <translation id="2840269525054388612">এমন প্রিন্টারের বিষয়ে উল্লেখ করে যেটি ব্যবহারকারী ব্যবহার করতে পারবেন।
 
-      এই নীতিটি শুধুমাত্র তবেই ব্যবহার করা হয় যদি <ph name="DEVICE_PRINTERS_ACCESS_MODE" /> এর জন্য <ph name="PRINTERS_WHITELIST" /> বেছে নেওয়া হয়।
+       শুধুমাত্র <ph name="DEVICE_PRINTERS_ACCESS_MODE" /> এর জন্য <ph name="PRINTERS_WHITELIST" /> বেছে নেওয়া হলেই এই নীতিটি ব্যবহার করা হয়।
 
       যদি এই নীতিটি ব্যবহার করা হয় তাহলে ব্যবহারকারী শুধুমাত্র সেই প্রিন্টার ব্যবহার করতে পারবেন যেটির আইডি এই নীতিতে উল্লেখ করা মানের সাথে মিলে যায়। আইডিকে <ph name="DEVICE_PRINTERS_POLICY" />-এ উল্লেখ করা "id" অথবা "guid"-এ দেওয়া মানের অনুরূপ হতে হবে।
       </translation>
@@ -1228,7 +1228,7 @@
 <translation id="4261820385751181068">ডিভাইস সাইন-ইন স্ক্রিন লোকেল</translation>
 <translation id="427220754384423013">এমন প্রিন্টারের বিষয়ে উল্লেখ করে যেটি ব্যবহারকারী ব্যবহার করতে পারবেন।
 
-      এই নীতিটি শুধুমাত্র তবেই ব্যবহার করা হয় যদি <ph name="BULK_PRINTERS_ACCESS_MODE" /> এর জন্য <ph name="PRINTERS_WHITELIST" /> বেছে নেওয়া হয়।
+      শুধুমাত্র <ph name="BULK_PRINTERS_ACCESS_MODE" /> এর জন্য <ph name="PRINTERS_WHITELIST" /> বেছে নেওয়া হলেই এই নীতিটি ব্যবহার করা হয়।
 
       যদি এই নীতিটি ব্যবহার করা হয় তাহলে ব্যবহারকারী শুধুমাত্র সেই প্রিন্টার ব্যবহার করতে পারবেন যেটির আইডি এই নীতিতে উল্লেখ করা মানের সাথে মিলে যায়। আইডিকে <ph name="BULK_PRINTERS_POLICY" />-এ উল্লেখ করা "id" অথবা "guid"-এ দেওয়া মানের অনুরূপ হতে হবে।
       </translation>
@@ -2401,7 +2401,7 @@
       সেটিংটি যদি সেট না করা থাকে বা সত্যতে সেট করা থাকে, তাহলে নথিভুক্ত ডিভাইসগুলি OS এবং ফার্মওয়্যারের সংস্করণ পর্যায়ক্রমে প্রতিবেদন করবে৷ সেটিংটি যদি মিথ্যাতে সেট করা থাকে, তাহলে সংস্করণ তথ্য প্রতিবেদন করা হবে না৷</translation>
 <translation id="7498946151094347510">এমন প্রিন্টারের বিষয়ে উল্লেখ করে যেটি কোনও ব্যবহারকারী ব্যবহার করতে পারবেন না।
 
-      এই নীতিটি শুধুমাত্র তবেই ব্যবহার করা হয় যদি <ph name="DEVICE_PRINTERS_ACCESS_MODE" /> এর জন্য <ph name="PRINTERS_BLACKLIST" /> বেছে নেওয়া হয়।
+      শুধুমাত্র <ph name="DEVICE_PRINTERS_ACCESS_MODE" /> এর জন্য <ph name="PRINTERS_BLACKLIST" /> বেছে নেওয়া হলেই এই নীতিটি ব্যবহার করা হয়।
 
       যদি এই নীতিটি ব্যবহার করা হয় তাহলে ব্যবহারকারী এতে তালিকাভুক্ত আইডির প্রিন্টার ছাড়া অন্য সমস্ত প্রিন্টার ব্যবহার করতে পারবেন। আইডিকে <ph name="DEVICE_PRINTERS_POLICY" />-এ উল্লেখ করা "id" অথবা "guid"-এ দেওয়া মানের অনুরূপ হতে হবে।
       </translation>
@@ -2789,7 +2789,7 @@
 <translation id="8566842294717252664">নতুন ট্যাব পৃষ্ঠা এবং অ্যাপ্লিকেশান লঞ্চার থেকে ওয়েব দোকানটি লুকায়</translation>
 <translation id="8586528890725660268">এমন প্রিন্টারের বিষয়ে উল্লেখ করে যেটি কোনও ব্যবহারকারী ব্যবহার করতে পারবেন না।
 
-      এই নীতিটি শুধুমাত্র তবেই ব্যবহার করা হয় যদি <ph name="BULK_PRINTERS_ACCESS_MODE" /> এর জন্য <ph name="PRINTERS_BLACKLIST" /> বেছে নেওয়া হয়।
+      শুধুমাত্র <ph name="BULK_PRINTERS_ACCESS_MODE" /> এর জন্য <ph name="PRINTERS_BLACKLIST" /> বেছে নেওয়া হলেই এই নীতিটি ব্যবহার করা হয়।
 
       যদি এই নীতিটি ব্যবহার করা হয় তাহলে ব্যবহারকারী এতে তালিকাভুক্ত আইডির প্রিন্টার ছাড়া অন্য সমস্ত প্রিন্টার ব্যবহার করতে পারবেন। আইডিকে <ph name="BULK_PRINTERS_POLICY" />-এ উল্লেখ করা "id" অথবা "guid"-এ দেওয়া মানের অনুরূপ হতে হবে।
       </translation>
diff --git a/components/policy/resources/policy_templates_cs.xtb b/components/policy/resources/policy_templates_cs.xtb
index 0b58a6e1..8323f788 100644
--- a/components/policy/resources/policy_templates_cs.xtb
+++ b/components/policy/resources/policy_templates_cs.xtb
@@ -398,6 +398,20 @@
           Pokud zásada není nastavena, okno s upozorněním se nezobrazí.
 
           Hodnota zásady by měla být stanovena v milisekundách. Hodnoty musí být menší nebo stejné jako prodleva nečinnosti.</translation>
+<translation id="2289578386193672044">Určuje seznam aplikací a rozšíření, které se instalují na pozadí bez zásahu uživatele a které uživatel nemůže odinstalovat ani deaktivovat. Všechna oprávnění požadovaná aplikacemi nebo rozšířeními jsou udělována implicitně bez zásahu uživatele, a to včetně všech dodatečných oprávnění požadovaných budoucími verzemi aplikace nebo rozšíření. Kromě toho jsou udělována také oprávnění k používání těchto rozhraní API pro rozšíření: enterprise.deviceAttributes a enterprise.platformKeys. (Tato rozhraní API jsou k dispozici pouze u aplikací/rozšíření, jejichž instalace je vynucena.)
+
+Tato zásada má přednost před potenciálně konfliktní zásadou <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />. Bude-li aplikace nebo rozšíření, které bylo dříve vynuceně nainstalováno, z tohoto seznamu odebráno, <ph name="PRODUCT_NAME" /> je automaticky odinstaluje.
+
+U instancí systému Windows, které nejsou propojeny s doménou <ph name="MS_AD_NAME" />, je vynucená instalace omezena pouze na aplikace a rozšíření z Internetového obchodu Chrome.
+
+Zdrojový kód libovolného rozšíření mohou uživatelé pomocí Nástrojů pro vývojáře upravit (což může způsobit, že rozšíření nebude fungovat). Pokud je to problém, nastavte zásadu <ph name="DEVELOPER_TOOLS_POLICY_NAME" />.
+
+Každá položka v seznamu zásady představuje řetězec, který obsahuje ID rozšíření a volitelně také adresu URL pro aktualizaci oddělené středníkem (<ph name="SEMICOLON" />). ID rozšíření je řetězec s 32 písmeny a naleznete jej například zde: <ph name="CHROME_EXTENSIONS_LINK" /> (v režimu pro vývojáře). Pokud je zadána adresa URL pro aktualizaci, měla by odkazovat na dokument XML manifestu aktualizace (viz <ph name="LINK_TO_EXTENSION_DOC1" />). Ve výchozím nastavení se použije adresa URL pro aktualizaci Internetového obchodu Chrome (v současné době https://clients2.google.com/service/update2/crx). Adresa URL pro aktualizaci nastavená v této zásadě slouží pouze k počáteční instalaci. Další aktualizace rozšíření budou používat adresu URL pro aktualizaci uvedenou v manifestu rozšíření.
+ Upozorňujeme, že až do verze 67 prohlížeče <ph name="PRODUCT_NAME" /> bylo explicitní zadání adresy URL pro aktualizaci povinné.
+
+Například <ph name="EXTENSION_POLICY_EXAMPLE" /> nainstaluje aplikaci <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> ze standardní adresy URL pro aktualizaci z Internetového obchodu Chrome. Další informace o hostování rozšíření viz <ph name="LINK_TO_EXTENSION_DOC2" />.
+
+Je-li tato zásada ponechána nenastavená, žádné aplikace ani rozšíření se automaticky neinstalují a uživatel v prohlížeči <ph name="PRODUCT_NAME" /> může kteroukoliv aplikaci nebo rozšíření odinstalovat.</translation>
 <translation id="2292084646366244343"><ph name="PRODUCT_NAME" /> může k opravení pravopisných chyb použít webovou službu společnosti Google. Je-li toto nastavení zapnuto, služba je používána neustále. Je-li nastavení vypnuto, služba není používána nikdy.
 
       Kontrolu pravopisu lze nicméně provést pomocí staženého slovníku. Tato zásada se vztahuje pouze na používání internetových služeb.
@@ -702,6 +716,13 @@
           Tato zásada je volitelná. Pokud není nastavena, nebudou prováděna žádná nahrazení vyhledávacích dotazů.
 
           Tato zásada je zohledňována pouze v případě, že je aktivována zásada DefaultSearchProviderEnabled.</translation>
+<translation id="3056439054015239107">
+      Tato zásada platí pro přihlašovací obrazovku. Prostudujte si také zásadu <ph name="SITE_PER_PROCESS_POLICY_NAME" />, která platí pro uživatelskou relaci. Obě zásady doporučujeme nastavit na stejnou hodnotu. Pokud se hodnoty neshodují, může při zahajování uživatelské relace dojít ke zpoždění způsobenému používáním hodnoty zadané v zásadě pro uživatele.
+      Chcete-li využívat izolaci, ale omezit její dopad na uživatele, použijte zásadu IsolateOrigins se seznamem webů, které chcete izolovat. Toto nastavení SitePerProcess izoluje všechny weby.
+      Pokud tuto zásadu povolíte, bude se každý web spouštět ve vlastním procesu.
+      Pokud je tato zásada zakázána, žádná explicitní izolace webů se provádět nebude a zkušební verze zásad IsolateOrigins a SitePerProcess budou zakázány. Uživatelé budou zásadu SitePerProcess moci povolit ručně.
+      Pokud tuto zásadu nenakonfigurujete, uživatel toto nastavení bude moci změnit.
+      </translation>
 <translation id="306887062252197004">Tato zásada povoluje uživatelům funkce WebDriver přepsat zásady, které by mohly narušovat operace této funkce.
 
 V současné době tato zásada deaktivuje zásady SitePerProcess a IsolateOrigins.
@@ -862,6 +883,7 @@
 <translation id="3660562134618097814">Přenos souborů cookie od poskytovatele identity SAML při přihlášení</translation>
 <translation id="3709266154059827597">Konfigurace seznamu zakázaných položek instalace rozšíření</translation>
 <translation id="3711895659073496551">Pozastavit</translation>
+<translation id="3715569262675717862">Ověřování založené na certifikátech klientů</translation>
 <translation id="3736879847913515635">Povolit přidání osoby ve správci uživatelů</translation>
 <translation id="3737544779868348650">Název hostitele používaný pro zařízení v síti</translation>
 <translation id="3740754010292550733">Nastavit dobu oznámení o restartu z důvodu aktualizace</translation>
@@ -1896,6 +1918,15 @@
       Pokud nechcete povolovat přihlášení k jinému účtu pomocí anonymního režimu, zvažte zablokování tohoto režimu pomocí zásady IncognitoModeAvailability.
 
       Upozorňujeme, že uživatelé budou moci získat přístup ke službám Google v neověřeném stavu tím, že zablokují soubory cookie.</translation>
+<translation id="6738326937072482736">Konfiguruje dostupnost a chování funkce aktualizace firmwaru <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+Jednotlivá nastavení lze zadat ve vlastnostech objektu JSON:
+
+<ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH" />: Pokud je nastavena na hodnotu <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE" />, uživatelé budou moci spustit proces Powerwash a nainstalovat aktualizaci firmwaru <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+<ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE" />: Pokud je nastavena na hodnotu <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE" />, uživatelé budou moci spustit proces aktualizace firmwaru <ph name="TPM_FIRMWARE_UPDATE_TPM" />, při kterém zůstane zachován stav celého zařízení (včetně registrace do podnikové sítě), ale budou ztracena data uživatele. Tento aktualizovaný postup je k dispozici od verze 68.
+
+Pokud tato zásada není nastavena, funkce aktualizace firmwaru <ph name="TPM_FIRMWARE_UPDATE_TPM" /> nebude k dispozici.</translation>
 <translation id="6757438632136860443">Umožňuje nastavit seznam vzorů adres URL webů, které mají povoleno spouštět plugin <ph name="FLASH_PLUGIN_NAME" />.
 
           Pokud tuto zásadu nenastavíte, použije se pro všechny weby globální výchozí hodnota buď ze zásady DefaultPluginsSetting (pokud je nastavena), nebo z osobní konfigurace uživatele.</translation>
@@ -1914,6 +1945,12 @@
 <translation id="687046793986382807">V prohlížečích <ph name="PRODUCT_NAME" /> verze 35 a novějších byla tato zásada zrušena.
 
       Informace o paměti jsou stránce hlášeny bez ohledu na nastavení této možnosti. Velikosti jsou však hlášeny jen po určitých přírůstcích a frekvence aktualizací je z bezpečnostních důvodů omezena. Chcete-li získat přesná data v reálném čase, použijte prosím nástroje, jako je Telemetry.</translation>
+<translation id="6870914592443697993">
+      Tato zásada platí pro přihlašovací obrazovku. Prostudujte si také zásadu <ph name="ISOLATE_ORIGINS_POLICY_NAME" />, která platí pro uživatelskou relaci. Obě zásady doporučujeme nastavit na stejnou hodnotu. Pokud se hodnoty neshodují, může při zahajování uživatelské relace dojít ke zpoždění způsobenému používáním hodnoty zadané v zásadě pro uživatele.
+      Pokud tuto zásadu povolíte, každý z uvedených zdrojů v seznamu odděleném čárkami bude spouštěn ve vlastním procesu. Budou izolovány i zdroje uvedené v subdoménách – např. pokud zadáte web https://example.com/, bude izolována také subdoména https://foo.example.com/, která je jeho součástí.
+      Pokud je tato zásada zakázána, žádná explicitní izolace webů se provádět nebude a zkušební verze zásad IsolateOrigins a SitePerProcess budou zakázány. Uživatelé budou zásadu IsolateOrigins moci povolit ručně.
+      Pokud tuto zásadu ponecháte nenakonfigurovanou, použije se pro přihlašovací obrazovku výchozí nastavení platformy týkající se izolace webů.
+      </translation>
 <translation id="6894178810167845842">Adresa URL stránky Nová karta</translation>
 <translation id="6899705656741990703">Zjistit nastavení proxy serveru automaticky</translation>
 <translation id="6903814433019432303">Tato zásada je aktivní pouze v režimu pro obchody.
@@ -2169,6 +2206,7 @@
       Pokud je nastavena na hodnotu False, jsou aktualizace komponent zakázány. Na některé komponenty se však tato zásada nevztahuje – nebudou zakázány aktualizace komponent, které neobsahují spustitelný kód, nemění významně chování prohlížeče nebo jsou nezbytně nutné k zajištění bezpečnosti.
       Mezi takové komponenty patří například seznamy zneplatněných certifikátů a údaje Bezpečného prohlížení.
       Další informace o Bezpečném prohlížení najdete na stránce https://developers.google.com/safe-browsing.</translation>
+<translation id="7566878661979235378">Typ ověření při přihlášení pomocí technologie SAML</translation>
 <translation id="757395965347379751">Když je toto nastavení aktivováno, povoluje <ph name="PRODUCT_NAME" /> certifikáty podepsané algoritmem SHA-1, pokud je možné je úspěšně ověřit a propojit s místně nainstalovanými certifikáty CA.
 
       Upozorňujeme, že tato zásada závisí na tom, zda podpisy SHA-1 povoluje ověřovací mechanismus operačních systému. Pokud při aktualizaci operačního systému dojde ke změně zpracování certifikátů SHA-1, tato zásada již nemusí fungovat. Tato zásada je určena jako dočasné řešení, které podnikům poskytne více času k přechodu na jiné podpisy než SHA-1. Tato zásada bude odstraněna kolem 1. ledna 2019.
@@ -2342,6 +2380,17 @@
 
           Pokud je toto nastavení vypnuto a odchozí připojení UDP jsou filtrována bránou firewall, může se tento počítač připojit pouze k hostitelským počítačům v místní síti.</translation>
 <translation id="7976157349247117979">Název cíle <ph name="PRODUCT_NAME" /></translation>
+<translation id="7978060394348264922">
+      Chcete-li využívat izolaci, ale omezit její dopad na uživatele, použijte zásadu IsolateOrigins se seznamem webů, které chcete izolovat. Toto nastavení SitePerProcess izoluje všechny weby.
+
+      Pokud tuto zásadu povolíte, bude se každý web spouštět ve vlastním procesu.
+
+      Pokud je tato zásada zakázána, žádná explicitní izolace webů se provádět nebude a zkušební verze zásad IsolateOrigins a SitePerProcess budou zakázány. Uživatelé budou zásadu SitePerProcess moci povolit ručně.
+
+      Pokud tuto zásadu nenakonfigurujete, uživatel toto nastavení bude moci změnit.
+
+V systému <ph name="PRODUCT_OS_NAME" /> je doporučeno nastavit na stejnou hodnotu také zásadu zařízení <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" />. Pokud se hodnoty neshodují, může při zahajování uživatelské relace dojít ke zpoždění způsobenému používáním hodnoty zadané v zásadě pro uživatele.
+      </translation>
 <translation id="7980227303582973781">Bez zvláštních omezení</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="802147957407376460">Otočit obrazovku o 0 stupňů</translation>
@@ -2531,6 +2580,13 @@
 Chcete-li zadat několik názvů serverů, oddělte je čárkami. Zástupné znaky (*) jsou povoleny.
 
 Pokud zásada zůstane nenastavena, pokusí se <ph name="PRODUCT_NAME" /> zjistit, zda se server nachází v intranetu, a teprve poté bude reagovat na požadavky IWA. Pokud bude server zjištěn jako internet, bude <ph name="PRODUCT_NAME" /> požadavky IWA ignorovat.</translation>
+<translation id="8667812577403206506">Umožňuje určit, zda má být v systému Chrome OS povoleno spouštění virtuálních počítačů.
+
+      Pokud je tato zásada nastavena na hodnotu True, spouštění virtuálních počítačů je v zařízení povoleno.
+      Pokud je tato zásada nastavena na hodnotu False, spouštění virtuálních počítačů v zařízení povoleno není.
+      Při změně na hodnotu False se na spouštění nových virtuálních počítačů použije nové nastavení, ale již spuštěné virtuální počítače nebudou ukončeny.
+      Pokud na spravovaném zařízení není nastavena tato zásada, je v něm spouštění virtuálních počítačů zakázáno.
+      Na zařízeních, která nejsou spravována, je spouštění virtuálních počítačů povoleno.</translation>
 <translation id="8672321184841719703">Cílová verze automatické aktualizace</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Ochrana hesla – upozornění je spouštěno opětovným použitím hesla</translation>
@@ -2651,6 +2707,7 @@
 
       Tuto zásadu byste neměli aktivovat v případě, že je zásada <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> zapnuta na Povoleno. Obě se totiž týkají stejné funkce na straně klienta. V tomto případě je synchronizace hostovaná na Googlu zcela vypnuta.</translation>
 <translation id="8955719471735800169">Zpět na začátek</translation>
+<translation id="8959992920425111821">Výchozí konfigurace</translation>
 <translation id="8960850473856121830">Vzory v tomto seznamu budou porovnány s bezpečnostními údaji o původu požadované adresy URL. Pokud bude nalezena shoda, přístup k zařízením pro záznam zvuku bude udělen bez vyzvání.
 
 POZNÁMKA: Až do verze 45 byla tato zásada podporována pouze v režimu veřejného terminálu.</translation>
@@ -2659,6 +2716,12 @@
 <translation id="8976248126101463034">Povolit ověřování gnubby pro hostitele vzdáleného přístupu</translation>
 <translation id="8976531594979650914">Jako výchozí tiskárnu použít výchozí tiskárnu systému</translation>
 <translation id="8992176907758534924">Nepovolit zobrazení obrázků žádným webovým stránkám</translation>
+<translation id="9034729899149506577">
+      Pokud tuto zásadu povolíte, každý z uvedených zdrojů v seznamu odděleném čárkami bude spouštěn ve vlastním procesu. Budou izolovány i zdroje uvedené v subdoménách – např. pokud zadáte web https://example.com/, bude izolována také subdoména https://foo.example.com/, která je jeho součástí.
+      Pokud je tato zásada zakázána, žádná explicitní izolace webů se provádět nebude a zkušební verze zásad IsolateOrigins a SitePerProcess budou zakázány. Uživatelé budou zásadu IsolateOrigins moci povolit ručně.
+      Pokud tuto zásadu nenakonfigurujete, uživatel toto nastavení bude moci změnit.
+      V systému <ph name="PRODUCT_OS_NAME" /> je doporučeno nastavit na stejnou hodnotu také zásadu zařízení <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" />. Pokud se hodnoty obou zásad nebudou shodovat, při zahájení uživatelské relace může dojít k prodlevě, zatímco se bude přecházet na hodnotu nastavenou zásadou pro uživatele.
+      </translation>
 <translation id="9035964157729712237">ID rozšíření, která mají být vyňata ze seznamu zakázaných</translation>
 <translation id="9042911395677044526">Umožňuje přenést nastavení sítě, která se uplatní pro jednotlivé uživatele v zařízení se systémem <ph name="PRODUCT_OS_NAME" />. Konfigurace sítě je řetězec ve formátu JSON, který se řídí definicí formátu Open Network Configuration popsanou na stránce <ph name="ONC_SPEC_URL" />.</translation>
 <translation id="9084985621503260744">Určuje, zda aktivita videa ovlivňuje správu napájení</translation>
@@ -2708,6 +2771,13 @@
 <translation id="9187743794267626640">Zakázat připojení externího úložiště</translation>
 <translation id="9197740283131855199">Procento, o které bude prodloužena prodleva ztmavení obrazovky, pokud uživatel po ztmavení provedete nějakou činnost</translation>
 <translation id="9200828125069750521">Parametry pro adresu URL obrázku používající metodu POST</translation>
+<translation id="9210953373038593554">Konfiguruje typ ověření pro přihlášení pomocí technologie SAML.
+
+      Když tato zásada není nastavena nebo je nastavena na možnost Default (hodnota 0), určuje chování při přihlašování pomocí technologie SAML prohlížeč na základě jiných faktorů. V nejzákladnějším případě se k ověření uživatele a ochraně dat uživatele uložených v mezipaměti používají hesla, která ručně zadávají uživatelé.
+
+      Když je tato zásada nastavena na možnost ClientCertificate (hodnota 1), pro nově přidané uživatele, kteří se přihlašují pomocí technologie SAML, se používá ověření pomocí certifikátu klienta. Pro takové uživatele se nepoužívají žádná hesla a jejich místní data uložená v mezipaměti jsou chráněna pomocí odpovídajících kryptografických klíčů. Pomocí tohoto nastavení lze nakonfigurovat například ověřování uživatelů pomocí čipových karet. (Aplikace middleware pro čipové karty je potřeba nainstalovat pomocí zásady DeviceLoginScreenAppInstallList.)
+
+      Tato zásada má vliv pouze na uživatele, kteří používají ověření pomocí technologie SAML.</translation>
 <translation id="9213347477683611358">Slouží ke konfiguraci obrázku tapety na úrovni zařízení, který se bude zobrazovat na přihlašovací obrazovce, pokud se do zařízení dosud nepřihlásil žádný uživatel. Zásadu nastavíte zadáním adresy URL, ze které může zařízení se systémem Chrome OS obrázek tapety stáhnout, a kryptografické hodnoty hash k ověření integrity staženého obsahu. Obrázek musí být ve formátu JPEG a jeho velikost nesmí překročit 16 MB. Adresa URL musí být přístupná bez ověření. Obrázek tapety se stáhne a uloží do mezipaměti. Při každé změně adresy URL nebo hodnoty hash se obrázek stáhne znovu.
 
       Tuto zásadu je třeba zadat jako řetězec, který udává adresu URL a hodnotu hash ve formátu JSON. Příklad:
diff --git a/components/policy/resources/policy_templates_da.xtb b/components/policy/resources/policy_templates_da.xtb
index eb097278..9341e1c 100644
--- a/components/policy/resources/policy_templates_da.xtb
+++ b/components/policy/resources/policy_templates_da.xtb
@@ -62,7 +62,7 @@
 
       RollbackDisabled anvendes som standard.</translation>
 <translation id="1221359380862872747">Indlæs de angivne webadresser ved demologin</translation>
-<translation id="1223789468190631420">Aktiveringstilstand for Beskyttet browsing i forbindelse med godkendte kilder</translation>
+<translation id="1223789468190631420">Aktivér Beskyttet browsing i forbindelse med godkendte kilder</translation>
 <translation id="123081309365616809">Aktivér casting af indhold til enheden</translation>
 <translation id="1257550411839719984">Angiv standardmappe til downloads</translation>
 <translation id="1265053460044691532">Begræns den tid, hvor en bruger, der er godkendt via SAML, kan logge på offline</translation>
diff --git a/components/policy/resources/policy_templates_el.xtb b/components/policy/resources/policy_templates_el.xtb
index ea2cb9d..aaf0d38 100644
--- a/components/policy/resources/policy_templates_el.xtb
+++ b/components/policy/resources/policy_templates_el.xtb
@@ -413,6 +413,27 @@
           Όταν δεν ορίζεται πολιτική, δεν εμφανίζεται παράθυρο διαλόγου προειδοποίησης.
 
           Η τιμή της πολιτικής θα πρέπει να οριστεί σε χιλιοστά του δευτερολέπτου. Οι τιμές θα πρέπει να είναι μικρότερες ή ίσες με την καθυστέρηση της αδράνειας.</translation>
+<translation id="2289578386193672044">Καθορίζει μια λίστα εφαρμογών και επεκτάσεων που εγκαθίστανται στο παρασκήνιο,
+          χωρίς αλληλεπίδραση με τον χρήστη και οι οποίες δεν μπορούν να απεγκατασταθούν ή
+          να απενεργοποιηθούν από τον χρήστη. Όλες οι άδειες που ζητούν οι
+          εφαρμογές/επεκτάσεις εκχωρούνται ρητά, χωρίς αλληλεπίδραση με τον χρήστη,
+          συμπεριλαμβανομένων τυχόν πρόσθετων αδειών που ζητούνται από μελλοντικές εκδόσεις
+          της εφαρμογής/επέκτασης. Επιπλέον, εκχωρούνται δικαιώματα για τα
+          API επέκτασης enterprise.deviceAttributes και enterprise.platformKeys.
+          (Αυτά τα δύο API δεν είναι διαθέσιμα στις εφαρμογές/επεκτάσεις των οποίων
+          η εγκατάσταση δεν ήταν αναγκαστική.)
+
+          Αυτή η πολιτική έχει προτεραιότητα σε σχέση με μια πολιτική <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> με την οποία πιθανόν έρχεται σε διένεξη. Εάν κάποια εφαρμογή ή επέκταση, η εγκατάσταση της οποίας ήταν αναγκαστική στο παρελθόν, καταργηθεί από αυτήν τη λίστα, θα απεγκατασταθεί αυτόματα από το <ph name="PRODUCT_NAME" />.
+
+          Για παρουσίες Windows που δεν συμμετέχουν σε τομέα <ph name="MS_AD_NAME" />, η αναγκαστική εγκατάσταση περιορίζεται στις εφαρμογές και στις επεκτάσεις που περιλαμβάνονται στο Chrome Web Store
+
+          Λάβετε υπόψη ότι ο πηγαίος κώδικας οποιασδήποτε επέκτασης μπορεί να τροποποιηθεί από τους χρήστες μέσω των Εργαλείων για προγραμματιστές (με κίνδυνο η επέκταση να καταστεί δυσλειτουργική). Εάν αυτό σας ανησυχεί, τότε θα πρέπει να οριστεί η πολιτική  <ph name="DEVELOPER_TOOLS_POLICY_NAME" />.
+
+          Κάθε στοιχείο λίστας της πολιτικής είναι μια συμβολοσειρά που περιέχει ένα αναγνωριστικό επέκτασης και, προαιρετικά, ένα URL "ενημέρωσης" που διαχωρίζεται με ελληνικό ερωτηματικό (<ph name="SEMICOLON" />). Το αναγνωριστικό επέκτασης είναι μια συμβολοσειρά 32 γραμμάτων που βρίσκεται, για παράδειγμα, στο <ph name="CHROME_EXTENSIONS_LINK" />, στη λειτουργία προγραμματιστή. Το URL "ενημέρωσης" θα πρέπει να οδηγεί σε ένα έγγραφο Update Manifest XML, όπως περιγράφεται στο <ph name="LINK_TO_EXTENSION_DOC1" />. Από προεπιλογή, χρησιμοποιείται το URL ενημέρωσης του Chrome Web Store (το οποίο προς το παρόν είναι το "https://clients2.google.com/service/update2/crx"). Λάβετε υπόψη ότι το URL "ενημέρωσης" που έχει οριστεί σε αυτήν την πολιτική χρησιμοποιείται μόνο για την αρχική εγκατάσταση. Οι επόμενες ενημερώσεις της επέκτασης περιλαμβάνουν το URL ενημέρωσης που υποδεικνύεται στο μανιφέστο της επέκτασης. Λάβετε, επίσης, υπόψη ότι ο ρητός προσδιορισμός του URL "ενημέρωσης" ήταν υποχρεωτικός στις εκδόσεις του <ph name="PRODUCT_NAME" /> μέχρι και την έκδοση 67.
+
+          Για παράδειγμα, το <ph name="EXTENSION_POLICY_EXAMPLE" /> εγκαθιστά την εφαρμογή <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> από το βασικό URL "ενημέρωσης" του Chrome Web Store. Για περισσότερες πληροφορίες σχετικά με τη φιλοξενία επεκτάσεων, ανατρέξτε στη διεύθυνση: <ph name="LINK_TO_EXTENSION_DOC2" />.
+
+          Εάν αυτή η πολιτική δεν οριστεί, δεν θα εγκατασταθούν αυτόματα εφαρμογές ή επεκτάσεις και ο χρήστης μπορεί να απεγκαταστήσει οποιαδήποτε εφαρμογή ή επέκταση στο <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2292084646366244343">Το <ph name="PRODUCT_NAME" /> μπορεί να χρησιμοποιήσει μια υπηρεσία ιστού Google για να βοηθήσει τη διόρθωση ορθογραφικών λαθών. Εάν ενεργοποιηθεί αυτή η ρύθμιση, τότε αυτή η υπηρεσία χρησιμοποιείται πάντα. Εάν απενεργοποιηθεί αυτή η ρύθμιση, τότε αυτή η υπηρεσία δεν χρησιμοποιείται ποτέ.
 
       Ο ορθογραφικός έλεγχος μπορεί να χρησιμοποιηθεί ακόμη με τη χρήση ενός λεξικού του οποίου έχει πραγματοποιηθεί λήψη. Αυτή η πολιτική αφορά μόνο τη χρήση της υπηρεσίας στο διαδίκτυο.
@@ -709,6 +730,16 @@
           Αυτή η πολιτική είναι προαιρετική. Αν δεν οριστεί, δεν θα παρουσιαστεί καμία αντικατάσταση όρου αναζήτησης.
 
           Αυτή η πολιτική τηρείται μόνο αν η πολιτική "DefaultSearchProviderEnabled" είναι ενεργοποιημένη.</translation>
+<translation id="3056439054015239107">
+      Αυτή η πολιτική ισχύει για την οθόνη σύνδεσης. Δείτε επίσης την πολιτική <ph name="SITE_PER_PROCESS_POLICY_NAME" />, η οποία ισχύει για την περίοδο σύνδεσης χρήστη. Συνιστάται να ορίσετε την ίδια τιμή και για τις δύο πολιτικές. Εάν οι τιμές δεν είναι ίδιες, μπορεί να υπάρξει καθυστέρηση κατά την είσοδο σε μια περίοδο σύνδεσης χρήστη όταν εφαρμόζεται η τιμή που προσδιορίζεται από την πολιτική χρήστη
+      Μπορείτε εάν θέλετε να ανατρέξετε στη ρύθμιση της πολιτικής IsolateOrigins, για να
+      αξιοποιήσετε τα καλύτερα στοιχεία και των δύο επιλογών, την απομόνωση και την περιορισμένη επίδραση για τους χρήστες, χρησιμοποιώντας την πολιτική
+      IsolateOrigins με μια λίστα ιστοτόπων που θέλετε να απομονώσετε. Αυτή η ρύθμιση,
+      το SitePerProcess, απομονώνει όλους τους ιστοτόπους.
+      Εάν η πολιτική είναι ενεργοποιημένη, κάθε ιστότοπος θα εκτελεί τη δική του διαδικασία.
+      Εάν η πολιτική είναι απενεργοποιημένη, δεν θα πραγματοποιείται ρητή απομόνωση ιστοτόπου και οι δοκιμές πεδίου των IsolateOrigins και SitePerProcess θα απενεργοποιηθούν. Οι χρήστες θα διατηρήσουν τη δυνατότητα χειροκίνητης ενεργοποίησης της πολιτικής SitePerProcess.
+      Εάν η πολιτική δεν έχει διαμορφωθεί, ο χρήστης θα μπορεί να αλλάξει αυτήν τη ρύθμιση.
+      </translation>
 <translation id="306887062252197004">Αυτή η πολιτική επιτρέπει στους χρήστες της λειτουργίας WebDriver να παρακάμπτουν
       πολιτικές που μπορεί να επηρεάσουν τη λειτουργία της.
 
@@ -874,6 +905,7 @@
 <translation id="3660562134618097814">Μεταφορά cookie SAML IdP κατά τη σύνδεση</translation>
 <translation id="3709266154059827597">Διαμόρφωση λίστας αποκλεισμένων για την εγκατάσταση επέκτασης</translation>
 <translation id="3711895659073496551">Αναστολή</translation>
+<translation id="3715569262675717862">Έλεγχος ταυτότητας που βασίζεται σε πιστοποιητικά πελάτη</translation>
 <translation id="3736879847913515635">Ενεργοποίηση προσθήκης ατόμου στο Εργαλείο διαχείρισης χρηστών</translation>
 <translation id="3737544779868348650">Όνομα κεντρικού υπολογιστή δικτύου συσκευής</translation>
 <translation id="3740754010292550733">Ρύθμιση της περιόδου για ειδοποιήσεις επανεκκίνησης ενημέρωσης</translation>
@@ -1907,6 +1939,15 @@
       Σε περίπτωση που δεν επιτρέπεται η σύνδεση σε διαφορετικό λογαριασμό μέσω της Κατάστασης ανώνυμης περιήγησης, εξετάστε το ενδεχόμενο αποκλεισμού της λειτουργίας χρησιμοποιώντας την πολιτική IncognitoModeAvailability.
 
       Λάβετε υπόψη ότι οι χρήστες θα μπορούν να έχουν πρόσβαση στις υπηρεσίες Google σε μια κατάσταση για την οποία δεν πραγματοποιείται έλεγχος ταυτότητας, αποκλείοντας τα cookie τους.</translation>
+<translation id="6738326937072482736">Διαμορφώνει τη διαθεσιμότητα και τη συμπεριφορά της λειτουργίας ενημέρωσης υλικολογισμικού <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+      Μπορούν να καθοριστούν μεμονωμένες ρυθμίσεις στις ιδιότητες JSON:
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH" />: Εάν οριστεί σε <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE" />, οι χρήστες θα μπορούν να ενεργοποιήσουν τη ροή powerwash για την εγκατάσταση μιας ενημέρωσης υλικολογισμικού <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE" />: Εάν οριστεί σε <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE" />, οι χρήστες θα μπορούν να καλέσουν τη ροή ενημέρωσης υλικολογισμικού <ph name="TPM_FIRMWARE_UPDATE_TPM" /> που διατηρεί την κατάσταση ολόκληρης της συσκευής (συμπεριλαμβανομένης της εταιρικής εγγραφής), αλλά χάνει τα δεδομένα χρήστη. Αυτή η ροή ενημέρωσης είναι διαθέσιμη από την έκδοση 68.
+
+      Εάν δεν οριστεί η πολιτική, η λειτουργία ενημέρωσης υλικολογισμικού <ph name="TPM_FIRMWARE_UPDATE_TPM" /> δεν θα είναι διαθέσιμη.</translation>
 <translation id="6757438632136860443">Σας επιτρέπει να ορίσετε μια λίστα μοτίβων URL που καθορίζουν ιστοτόπους οι οποίοι δεν επιτρέπεται να εκτελούν την προσθήκη <ph name="FLASH_PLUGIN_NAME" />.
 
           Εάν αυτή η πολιτική δεν οριστεί, η καθολική προεπιλεγμένη τιμή θα χρησιμοποιείται για όλους τους ιστοτόπους είτε μέσω της πολιτικής "DefaultPluginsSetting", εάν έχει οριστεί, είτε μέσω της προσωπικής διαμόρφωσης του χρήστη.</translation>
@@ -1927,6 +1968,17 @@
       Οι πληροφορίες μνήμης αναφέρονται στη σελίδα ούτως ή άλλως, ανεξάρτητα από την τιμή της επιλογής, αλλά τα μεγέθη που αναφέρονται
       είναι μειωμένα και ο ρυθμός ενημερώσεων περιορίζεται για λόγους ασφάλειας. Για να αποκτήσετε ακριβή δεδομένα σε πραγματικό χρόνο,
       χρησιμοποιήστε εργαλεία όπως η τηλεμετρία.</translation>
+<translation id="6870914592443697993">
+      Αυτή η πολιτική ισχύει για την οθόνη σύνδεσης. Δείτε επίσης την πολιτική <ph name="ISOLATE_ORIGINS_POLICY_NAME" />, η οποία ισχύει για την περίοδο σύνδεσης χρήστη. Συνιστάται να ορίσετε την ίδια τιμή και για τις δύο πολιτικές. Εάν οι τιμές δεν είναι ίδιες, μπορεί να υπάρξει καθυστέρηση κατά την είσοδο σε μια περίοδο σύνδεσης χρήστη όταν εφαρμόζεται η τιμή που προσδιορίζεται από την πολιτική χρήστη.
+      Εάν η πολιτική είναι ενεργοποιημένη, καθεμία από τις καθορισμένες προελεύσεις σε μια
+      λίστα διαχωρισμένη με κόμματα θα εκτελεί τη δική της διαδικασία. Με αυτόν τον τρόπο, θα απομονωθούν επίσης
+      οι προελεύσεις που καθορίζονται από υποτομείς. Για παράδειγμα, ο καθορισμός του https://example.com/ θα
+      προκαλέσει επίσης την απομόνωση του https://foo.example.com/ ως μέρους του ιστοτόπου
+      https://example.com/.
+      Εάν η πολιτική είναι απενεργοποιημένη, δεν θα πραγματοποιείται ρητή απομόνωση ιστοτόπου και οι δοκιμές πεδίου των IsolateOrigins και SitePerProcess θα απενεργοποιηθούν. Οι χρήστες θα διατηρήσουν τη δυνατότητα χειροκίνητης ενεργοποίησης της πολιτικής SitePerProcess.
+
+      Εάν η πολιτική δεν έχει διαμορφωθεί, θα χρησιμοποιηθούν οι προεπιλεγμένες ρυθμίσεις απομόνωσης ιστοτόπου της πλατφόρμας για την οθόνη σύνδεσης.
+      </translation>
 <translation id="6894178810167845842">URL Σελίδας σε νέα καρτέλα</translation>
 <translation id="6899705656741990703">Ρυθμίσεις διακομιστή μεσολάβησης για αυτόματο εντοπισμό</translation>
 <translation id="6903814433019432303">Αυτή η λειτουργία είναι ενεργή μόνο σε εμπορική λειτουργία.
@@ -2190,6 +2242,7 @@
       Εάν οριστεί ως ψευδής (false), οι ενημερώσεις των στοιχείων απενεργοποιούνται. Ωστόσο, ορισμένα στοιχεία εξαιρούνται από αυτήν την πολιτική: οι ενημερώσεις σε οποιοδήποτε στοιχείο δεν περιέχει εκτελέσιμο κώδικα ή δεν τροποποιεί σημαντικά τη συμπεριφορά του προγράμματος περιήγησης ή είναι κρίσιμο για την ασφάλειά του δεν πρόκειται να απενεργοποιηθεί.
       Παραδείγματα αυτών των στοιχείων περιλαμβάνουν τις λίστες ακυρωμένων πιστοποιητικών και τα δεδομένα ασφαλούς περιήγησης.
       Επισκεφτείτε τη διεύθυνση https://developers.google.com/safe-browsing για περισσότερες πληροφορίες σχετικά με την Ασφαλή περιήγηση.</translation>
+<translation id="7566878661979235378">Τύπος ελέγχου ταυτότητας για σύνδεση SAML</translation>
 <translation id="757395965347379751">Όταν είναι ενεργοποιημένη αυτή η ρύθμιση, το <ph name="PRODUCT_NAME" /> επιτρέπει τα υπογεγραμμένα πιστοποιητικά SHA-1 εφόσον επικυρωθούν επιτυχώς και συνδέονται με τοπικά εγκατεστημένα πιστοποιητικά CA.
 
       Λάβετε υπόψη ότι αυτή η πολιτική εξαρτάται από τη στοίβα επαλήθευσης πιστοποιητικού λειτουργικού συστήματος που επιτρέπει τις υπογραφές SHA-1. Εάν μια ενημέρωση λειτουργικού συστήματος αλλάξει τον χειρισμό των πιστοποιητικών SHA-1 από το λειτουργικό σύστημα, αυτή η πολιτική ενδέχεται να μην έχει πλέον κάποιο αποτέλεσμα. Επιπλέον αυτή η πολιτική προορίζεται για προσωρινή λύση που θα δώσει στις επιχειρήσεις περισσότερο χρόνο να καταργήσουν το SHA-1.  Αυτή η πολιτική θα καταργηθεί την ή περίπου την 1η Ιανουαρίου 2019.
@@ -2365,6 +2418,16 @@
 
           Αν αυτή η ρύθμιση είναι απενεργοποιημένη και οι εξερχόμενες συνδέσεις UDP φιλτράρονται από το τείχος προστασίας, τότε αυτός ο υπολογιστής θα μπορεί να συνδεθεί μόνο με κεντρικούς υπολογιστές εντός του τοπικού δικτύου.</translation>
 <translation id="7976157349247117979">Το όνομα του προορισμού του <ph name="PRODUCT_NAME" /></translation>
+<translation id="7978060394348264922">
+      Μπορείτε εάν θέλετε να ανατρέξετε στη ρύθμιση της πολιτικής IsolateOrigins, για να
+      αξιοποιήσετε τα καλύτερα στοιχεία και των δύο επιλογών, την απομόνωση και την περιορισμένη επίδραση για τους χρήστες, χρησιμοποιώντας την πολιτική
+      IsolateOrigins με μια λίστα ιστοτόπων που θέλετε να απομονώσετε. Αυτή η ρύθμιση,
+      το SitePerProcess, απομονώνει όλους τους ιστοτόπους.
+      Εάν η πολιτική είναι ενεργοποιημένη, κάθε ιστότοπος θα εκτελεί τη δική του διαδικασία.
+      Εάν η πολιτική είναι απενεργοποιημένη, δεν θα πραγματοποιείται ρητή απομόνωση ιστοτόπου και οι δοκιμές πεδίου των IsolateOrigins και SitePerProcess θα απενεργοποιηθούν. Οι χρήστες θα διατηρήσουν τη δυνατότητα χειροκίνητης ενεργοποίησης της πολιτικής SitePerProcess
+      Εάν η πολιτική δεν έχει διαμορφωθεί, ο χρήστης θα μπορεί να αλλάξει αυτήν τη ρύθμιση.
+      Για το <ph name="PRODUCT_OS_NAME" />, συνιστάται επίσης η ρύθμιση της πολιτικής χρήσης συσκευής <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> στην ίδια τιμή. Εάν οι τιμές που προσδιορίζονται από τις δύο πολιτικές δεν είναι ίδιες, μπορεί να υπάρξει καθυστέρηση κατά την είσοδο σε μια περίοδο σύνδεσης χρήστη όταν εφαρμόζεται η τιμή που προσδιορίζεται από την πολιτική χρήστη.
+      </translation>
 <translation id="7980227303582973781">Δεν υπάρχουν ειδικοί περιορισμοί</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="802147957407376460">Περιστροφή οθόνης κατά 0 μοίρες</translation>
@@ -2564,6 +2627,13 @@
           Διαχωρισμός πολλών ονομάτων διακομιστών με κόμματα. Επιτρέπονται χαρακτήρες μπαλαντέρ (*).
 
           Αν δεν ορίσετε αυτήν την πολιτική, το <ph name="PRODUCT_NAME" /> θα προσπαθήσει να διαπιστώσει αν ένας διακομιστής ανήκει στο εσωτερικό δίκτυο και μόνο τότε θα απαντήσει σε αιτήματα IWA. Αν διαπιστωθεί ότι κάποιος διακομιστής προέρχεται από το διαδίκτυο, τα αιτήματα IWA από αυτόν θα παραβλέπονται από το <ph name="PRODUCT_NAME" />.</translation>
+<translation id="8667812577403206506">Σας επιτρέπει να ελέγχετε εάν θα επιτρέπεται η εκτέλεση εικονικών μηχανημάτων στο Chrome OS.
+
+      Εάν η πολιτική οριστεί ως True, επιτρέπεται στη συσκευή να εκτελεί εικονικά μηχανήματα.
+     Εάν η πολιτική οριστεί ως False, δεν θα επιτρέπεται στη συσκευή να εκτελεί εικονικά μηχανήματα.
+      Όταν η πολιτική αλλάξει σε False, εφαρμόζεται στην έναρξη νέων εικονικών μηχανημάτων, αλλά δεν τερματίζει τη λειτουργία εικονικών μηχανημάτων που εκτελούνται ήδη.
+      Εάν αυτή η πολιτική δεν οριστεί σε μια διαχειριζόμενη συσκευή, δεν επιτρέπεται στη συσκευή να εκτελεί εικονικά μηχανήματα. 
+      Επιτρέπεται στις μη διαχειριζόμενες συσκευές να εκτελούν εικονικά μηχανήματα.</translation>
 <translation id="8672321184841719703">Στόχευση έκδοσης αυτόματης ενημέρωσης</translation>
 <translation id="867410340948518937">U2F (Καθολικός δευτερεύων παράγοντας)</translation>
 <translation id="8685024486845674965">Η προειδοποίηση προστασίας κωδικού πρόσβασης ενεργοποιείται από την επαναχρησιμοποίηση του κωδικού πρόσβασης</translation>
@@ -2682,6 +2752,7 @@
 
       Αυτή η πολιτική δεν πρέπει να ενεργοποιείται όταν η πολιτική <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> έχει οριστεί ως ενεργή, καθώς αυτή η λειτουργία χρησιμοποιεί την ίδια λειτουργία από την πλευρά της εφαρμογής πελάτη. Ο συγχρονισμός που φιλοξενεί η Google απενεργοποιείται πλήρως σε αυτήν την περίπτωση.</translation>
 <translation id="8955719471735800169">Επιστροφή στην κορυφή</translation>
+<translation id="8959992920425111821">Προεπιλεγμένη διαμόρφωση</translation>
 <translation id="8960850473856121830">Τα μοτίβα σε αυτήν τη λίστα θα αντιστοιχιστούν με την προέλευση ασφαλείας
       του URL που στέλνει το αίτημα. Αν εντοπιστεί αντιστοίχιση, θα παραχωρείται
       πρόσβαση στις συσκευές καταγραφής ήχου χωρίς ερώτηση.
@@ -2692,6 +2763,16 @@
 <translation id="8976248126101463034">Αποδοχή ελέγχου ταυτότητας gnubby για κεντρικούς υπολογιστές απομακρυσμένης πρόσβασης</translation>
 <translation id="8976531594979650914">Χρήση προεπιλεγμένου εκτυπωτή συστήματος ως προεπιλογής</translation>
 <translation id="8992176907758534924">Μην επιτρέπεται σε κανέναν ιστότοπο η εμφάνιση εικόνων</translation>
+<translation id="9034729899149506577">
+      Εάν η πολιτική είναι ενεργοποιημένη, καθεμία από τις καθορισμένες προελεύσεις σε μια
+      λίστα διαχωρισμένη με κόμματα θα εκτελεί τη δική της διαδικασία. Με αυτόν τον τρόπο, θα απομονωθούν επίσης
+      οι προελεύσεις που καθορίζονται από υποτομείς. Για παράδειγμα, ο καθορισμός του https://example.com/ θα
+      προκαλέσει επίσης την απομόνωση του https://foo.example.com/ ως μέρους του ιστοτόπου
+      https://example.com/.
+      Εάν η πολιτική είναι απενεργοποιημένη, δεν θα πραγματοποιείται ρητή απομόνωση ιστοτόπου και οι δοκιμές πεδίου των IsolateOrigins και SitePerProcess θα απενεργοποιηθούν. Οι χρήστες θα διατηρήσουν τη δυνατότητα χειροκίνητης ενεργοποίησης της πολιτικής SitePerProcess.
+      Εάν η πολιτική δεν έχει διαμορφωθεί, ο χρήστης θα μπορεί να αλλάξει αυτήν τη ρύθμιση.
+      Για το <ph name="PRODUCT_OS_NAME" />, συνιστάται επίσης η ρύθμιση της πολιτικής χρήσης συσκευής <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" /> στην ίδια τιμή. Εάν οι τιμές που προσδιορίζονται από τις δύο πολιτικές δεν είναι ίδιες, μπορεί να υπάρξει καθυστέρηση κατά την είσοδο σε μια περίοδο σύνδεσης χρήστη όταν εφαρμόζεται η τιμή που προσδιορίζεται από την πολιτική χρήστη.
+      </translation>
 <translation id="9035964157729712237">Αναγνωριστικά επέκτασης για εξαίρεση από τη λίστα αποκλεισμένων</translation>
 <translation id="9042911395677044526">Επιτρέπει την προώθηση της διαμόρφωσης δικτύου για την εφαρμογή ανά χρήστη σε μια συσκευή <ph name="PRODUCT_OS_NAME" />. Η διαμόρφωση δικτύου είναι μια συμβολοσειρά με μορφοποίηση JSON, όπως καθορίζεται από την Ανοιχτή μορφή διαμόρφωσης δικτύου που περιγράφεται στο <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Καθορίζει εάν η δραστηριότητα βίντεο επηρεάζει τη διαχείριση ηλεκτρικής ενέργειας</translation>
@@ -2743,6 +2824,13 @@
 <translation id="9187743794267626640">Απενεργοποίηση σύνδεσης εξωτερικής συσκευής αποθήκευσης</translation>
 <translation id="9197740283131855199">Ποσοστό προσαρμογής της καθυστέρησης μείωσης της φωτεινότητας της οθόνης, αν ο χρήστης γίνει ενεργός μετά τη μείωση φωτεινότητας</translation>
 <translation id="9200828125069750521">Παράμετροι για τη διεύθυνση URL εικόνας που χρησιμοποιεί POST</translation>
+<translation id="9210953373038593554">Διαμορφώνει τον τύπο ελέγχου ταυτότητας για τις συνδέσεις SAML.
+
+      Εάν αυτή η πολιτική δεν έχει οριστεί ή έχει οριστεί στην προεπιλεγμένη τιμή (τιμή 0), η συμπεριφορά των συνδέσεων SAML καθορίζεται από το πρόγραμμα περιήγησης με βάση άλλους παράγοντες. Στο πιο βασικό σενάριο, ο έλεγχος ταυτότητας χρήστη και η προστασία των δεδομένων χρήστη στην κρυφή μνήμη βασίζονται σε κωδικούς πρόσβασης που καταχωρίζουν χειροκίνητα οι χρήστες.
+
+      Εάν αυτή η πολιτική έχει οριστεί σε ClientCertificate (τιμή 1), χρησιμοποιείται έλεγχος ταυτότητας βάσει πιστοποιητικού πελάτη για τους νέους χρήστες που προστίθενται και οι οποίοι συνδέονται μέσω SAML. Δεν χρησιμοποιούνται κωδικοί πρόσβασης για αυτούς τους χρήστες και τα τοπικά δεδομένα τους στην κρυφή μνήμη προστατεύονται με αντίστοιχα κρυπτογραφικά κλειδιά. Για παράδειγμα, αυτή η ρύθμιση επιτρέπει τη διαμόρφωση ενός ελέγχου ταυτότητας χρήστη βάσει έξυπνης κάρτας (έχετε υπόψη ότι θα πρέπει να εγκατασταθούν εφαρμογές middleware έξυπνων καρτών μέσω της πολιτικής DeviceLoginScreenAppInstallList).
+
+      Αυτή η πολιτική επηρεάζει μόνο χρήστες που πραγματοποιούν έλεγχο ταυτότητας μέσω SAML.</translation>
 <translation id="9213347477683611358">Διαμόρφωση της εικόνας ταπετσαρίας σε επίπεδο συσκευής, η οποία εμφανίζεται στην οθόνη σύνδεσης, εάν δεν έχει συνδεθεί ακόμα κανένας χρήστης στη συσκευή. Η πολιτική ορίζεται μέσω του καθορισμού του URL από το οποίο η συσκευή Chrome OS μπορεί να κατεβάσει την εικόνα ταπετσαρίας και έναν κατακερματισμό κρυπτογράφησης ο οποίος χρησιμοποιείται για την επαλήθευση της ακεραιότητας της λήψης. Η εικόνα θα πρέπει να είναι σε μορφή JPEG και το μέγεθος του αρχείου δεν θα πρέπει να ξεπερνά τα 16 MB. Το URL θα πρέπει να είναι προσβάσιμο χωρίς περαιτέρω έλεγχο ταυτότητας. Η εικόνα ταπετσαρίας λαμβάνεται και αποθηκεύεται στην κρυφή μνήμη. Η λήψη της θα επαναλαμβάνεται κάθε φορά που αλλάζει το URL ή ο κατακερματισμός.
 
       Η πολιτική θα πρέπει να καθορίζεται ως μια συμβολοσειρά που εκφράζει το URL και τον κατακερματισμό (hash) με τη μορφή JSON, π.χ.,
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 546a08d3..7a35aa1 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -414,6 +414,27 @@
           Cuando no se establece esta política, no se muestra ningún cuadro de diálogo de advertencia.
 
           El valor de la política se debe especificar en milisegundos. Los valores deben ser inferiores o iguales al tiempo de espera de inactividad.</translation>
+<translation id="2289578386193672044">Especifica una lista de aplicaciones y extensiones que se instalan de forma automática,
+          sin la interacción del usuario, y que el usuario no puede inhabilitar ni
+          desinstalar. Los permisos solicitados por las
+          aplicaciones o las extensiones se aceptan de forma implícita, sin la interacción del usuario,
+          incluidos los permisos que soliciten las próximas versiones de
+          la aplicación o extensión. Además, se aceptan los permisos para las
+          API de las extensiones enterprise.deviceAttributes y enterprise.platformKeys.
+          Estas dos API no están disponibles para las aplicaciones o las extensiones que
+          no se hayan instalado de manera forzada-
+
+          Esta política prevalece frente a una política <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> que pueda ser conflictiva. Si una aplicación o extensión que se haya instalado anteriormente de manera forzada se elimina de la lista, <ph name="PRODUCT_NAME" /> la desinstalará automáticamente.
+
+          Para las instancias de Windows que no se hayan unido a un dominio de <ph name="MS_AD_NAME" />, la instalación forzada se limitará a las aplicaciones y extensiones disponibles en Chrome Web Store.
+
+          Ten en cuenta que es posible que los usuarios modifiquen el código fuente de las extensiones mediante las Herramientas para desarrolladores (lo que puede provocar problemas de funcionamiento). Si te preocupa, configura la política <ph name="DEVELOPER_TOOLS_POLICY_NAME" />.
+
+          Cada elemento de la lista de la política es una cadena que contiene un ID de extensión y, opcionalmente, una URL de "actualización" separados por punto y coma (<ph name="SEMICOLON" />). El ID de extensión es la cadena de 32 letras que aparece, por ejemplo, en <ph name="CHROME_EXTENSIONS_LINK" /> cuando está habilitado el modo desarrollador. La URL de "actualización", si se especifica, debe dirigir a un documento XML de un archivo de manifiesto de actualización, como se describe en <ph name="LINK_TO_EXTENSION_DOC1" />. De forma predeterminada, se usa la URL de actualización de Chrome Web Store (que actualmente es "https://clients2.google.com/service/update2/crx"). Ten en cuenta que la URL de "actualización" definida en esta política solo se usa en la instalación inicial. Las actualizaciones posteriores de la extensión usarán la URL de actualización indicada en el archivo de manifiesto de la extensión. Además, hasta la versión 67 (incluida) de <ph name="PRODUCT_NAME" /> es obligatorio especificar la URL de "actualización" de forma explícita.
+
+          Por ejemplo, <ph name="EXTENSION_POLICY_EXAMPLE" /> instala la aplicación <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> desde la URL de "actualización" estándar de Chrome Web Store. Para obtener más información sobre cómo alojar extensiones, consulta la página <ph name="LINK_TO_EXTENSION_DOC2" />.
+
+          Si no se le asigna ningún valor a esta política, no se instalará ninguna aplicación ni extensión automáticamente y el usuario podrá desinstalar cualquier aplicación o extensión de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2292084646366244343"><ph name="PRODUCT_NAME" /> puede utilizar un servicio web de Google que permite corregir errores ortográficos. Si esta opción está habilitada, este servicio se utiliza en todo momento. Por el contrario, si se inhabilita, este servicio no se utilizará nunca.
 
       Aun así, la función de corrección ortográfica se puede utilizar si se descarga un diccionario, ya que esta política solo controla el uso del servicio online.
@@ -723,6 +744,16 @@
           Esta política es opcional. Si no se establece, no se realizará ninguna sustitución de los términos de búsqueda.
 
           Solo se respetará esta política si la política "DefaultSearchProviderEnabled" está habilitada.</translation>
+<translation id="3056439054015239107">
+      Esta política se aplica a la pantalla de inicio de sesión. También puedes consultar la política <ph name="SITE_PER_PROCESS_POLICY_NAME" /> que se aplica a la sesión del usuario. Te recomendamos que asignes el mismo valor a ambas políticas. Si los valores no coinciden, es posible que se produzca un retraso al acceder a una sesión de usuario mientras se aplica el valor especificado por la política del usuario.
+      Para conseguir tanto aislamiento como
+      un impacto limitado para los usuarios, utiliza la política
+      IsolateOrigins con una lista de los sitios web que quieras aislar. La opción
+      SitePerProcess aísla todos los sitios web.
+      Si se habilita la política, cada sitio web se ejecuta en un proceso propio.
+      Si se inhabilita, no se aplica ningún aislamiento de sitios web explícito y se inhabilitarán las pruebas de campo de IsolateOrigins y SitePerProcess. Los usuarios podrán seguir habilitando la política SitePerProcess manualmente.
+      Si no se configura la política, el usuario podrá cambiar esta opción.
+      </translation>
 <translation id="306887062252197004">Esta política permite que los usuarios de la función WebDriver anulen las políticas que puedan interferir en su funcionamiento.
 
       Actualmente esta política inhabilita las políticas SitePerProcess y IsolateOrigins.
@@ -885,6 +916,7 @@
 <translation id="3660562134618097814">Transferir las cookies del proveedor de identidad SAML durante el inicio de sesión</translation>
 <translation id="3709266154059827597">Configurar lista negra de instalación de extensiones</translation>
 <translation id="3711895659073496551">Suspender</translation>
+<translation id="3715569262675717862">Autenticación basada en certificados de cliente</translation>
 <translation id="3736879847913515635">Habilitar Añadir persona en el administrador de usuarios</translation>
 <translation id="3737544779868348650">Nombre de host de la red del dispositivo</translation>
 <translation id="3740754010292550733">Definir el periodo de las notificaciones de reinicio para aplicar una actualización</translation>
@@ -1932,6 +1964,15 @@
       En caso de que no deba permitirse iniciar sesión en otra cuenta a través del modo incógnito, este se puede bloquear con la política IncognitoModeAvailability.
 
       Ten en cuenta que los usuarios podrán acceder a los servicios de Google sin tener que identificarse bloqueando las cookies.</translation>
+<translation id="6738326937072482736">Configura la disponibilidad y el comportamiento de la función de actualización del firmware de <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+      Los ajustes individuales se pueden especificar en las propiedades del archivo JSON:
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH" />: si se le asigna el valor <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE" />, los usuarios pueden activar el flujo de Powerwash para instalar una actualización del firmware de <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE" />: si se le asigna el valor <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE" />, los usuarios pueden ejecutar el flujo de actualizaciones del firmware de <ph name="TPM_FIRMWARE_UPDATE_TPM" /> que conserva el estado a nivel de dispositivo (incluido el registro de empresa), pero pierde los datos de usuario. Este flujo de actualizaciones está disponible a partir de la versión 68.
+
+      Si no se le asigna ningún valor a la política, no se puede actualizar el firmware de <ph name="TPM_FIRMWARE_UPDATE_TPM" />.</translation>
 <translation id="6757438632136860443">Permite configurar una lista de patrones de URL que especifican los sitios web que pueden ejecutar el complemento <ph name="FLASH_PLUGIN_NAME" />.
 
           Si esta política no se configura, se usará para todos los sitios web el valor general predeterminado que se indique en la política "DefaultPluginsSetting" (si se ha configurado) o las preferencias personales del usuario (en caso contrario).</translation>
@@ -1950,6 +1991,16 @@
 <translation id="687046793986382807">Esta política no está disponible a partir de la versión 35 de <ph name="PRODUCT_NAME" />.
 
       La información sobre memoria se notifica a la página, independientemente del valor de la opción, pero los tamaños notificados están restringidos y la frecuencia de actualizaciones está limitada por razones de seguridad. Para obtener información precisa en tiempo real, debes utilizar herramientas como la telemetría.</translation>
+<translation id="6870914592443697993">
+      Esta política se aplica a la pantalla de inicio de sesión. También puedes consultar la política <ph name="ISOLATE_ORIGINS_POLICY_NAME" /> que se aplica a la sesión del usuario. Te recomendamos que asignes el mismo valor a ambas políticas. Si los valores no coinciden, es posible que se produzca un retraso al acceder a una sesión de usuario mientras se aplica el valor especificado por la política del usuario.
+      Si se habilita la política, cada uno de los orígenes especificados en una
+      lista de elementos separados por comas se ejecutará en un proceso propio. También se aislarán
+      los orígenes de los subdominios correspondientes (p. ej., si especificas https://example.com/
+      se aislará https://foo.example.com/ como parte del sitio web
+      https://example.com/).
+      Si se inhabilita, no se aplica ningún aislamiento explícito de sitios web y se inhabilitan las pruebas de campo de IsolateOrigins y SitePerProcess. Los usuarios podrán seguir habilitando la política IsolateOrigins manualmente.
+      Si no se configura, se utilizarán los ajustes predeterminados de aislamiento de sitios web de la plataforma para la pantalla de inicio de sesión.
+      </translation>
 <translation id="6894178810167845842">URL de la página Nueva pestaña</translation>
 <translation id="6899705656741990703">Detección automática de la configuración del proxy</translation>
 <translation id="6903814433019432303">Esta política solo se encuentra activa en el modo de venta.
@@ -2214,6 +2265,7 @@
       Si se le asigna el valor "False", se inhabilitan las actualizaciones de los componentes. Sin embargo, algunos componentes quedan exentos de esta política: no se inhabilitarán las actualizaciones de cualquier componente que no contenga ningún código ejecutable, que no influya en el funcionamiento del navegador de forma significativa o que sea esencial para su seguridad.
       Entre los ejemplos de estos componentes se incluyen las listas de revocación de certificados y los datos de navegación segura.
       Consulta la página https://developers.google.com/safe-browsing para obtener más información sobre la función Navegación Segura.</translation>
+<translation id="7566878661979235378">Tipo de autenticación de inicio de sesión con SAML</translation>
 <translation id="757395965347379751">Si se habilita esta opción, <ph name="PRODUCT_NAME" /> permitirá los certificados SHA-1 firmados siempre que se validen correctamente y se vinculen a certificados de CA instalados localmente.
 
       Ten en cuenta que esta política depende de la pila de verificación de certificados del sistema operativo que permite las firmas SHA-1. Si una actualización del sistema operativo cambia la forma en que este gestiona los certificados SHA-1, es posible que la política deje de estar efectiva. Además, el objetivo de esta política es proporcionar a las empresas una solución temporal para que tengan más tiempo para abandonar los certificados SHA-1. Esta política se retirará sobre el 1 de enero de 2019.
@@ -2389,6 +2441,16 @@
 
           Si se inhabilita esta opción y el firewall filtra las conexiones UDP salientes, el ordenador solo podrá establecer conexión con hosts dentro de la red local.</translation>
 <translation id="7976157349247117979">Nombre del destino de <ph name="PRODUCT_NAME" /></translation>
+<translation id="7978060394348264922">
+      Para conseguir tanto aislamiento como
+      un impacto limitado para los usuarios, utiliza la política
+      IsolateOrigins con una lista de los sitios web que quieras aislar. La opción
+      SitePerProcess aísla todos los sitios web.
+      Si se habilita la política, cada sitio web se ejecuta en un proceso propio.
+      Si se inhabilita, no se aplica ningún aislamiento explícito de sitios web y se inhabilitan las pruebas de campo de IsolateOrigins y SitePerProcess. Los usuarios podrán seguir habilitando la política SitePerProcess manualmente
+      Si no se configura la política, el usuario podrá cambiar esta opción.
+      En <ph name="PRODUCT_OS_NAME" />, también se recomienda asignar el mismo valor a la política de dispositivos <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" />. Si los valores especificados por las dos políticas no coinciden, es posible que se produzca un retraso al acceder a una sesión de usuario mientras se aplica el valor especificado por la política del usuario.
+      </translation>
 <translation id="7980227303582973781">Sin restricciones especiales</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="802147957407376460">Girar la pantalla 0 grados</translation>
@@ -2588,6 +2650,13 @@
           Los distintos nombres de servidor se deben separar con comas. Se permite el uso de caracteres comodín (*).
 
           Si no se establece esta política, <ph name="PRODUCT_NAME" /> intentará detectar si un servidor se encuentra en la intranet y solo entonces responderá a las solicitudes de IWA. Si se detecta Internet como servidor, <ph name="PRODUCT_NAME" /> ignorará las solicitudes de IWA que procedan de él.</translation>
+<translation id="8667812577403206506">Permite controlar si las máquinas virtuales se pueden ejecutar en Chrome OS.
+
+      Si se le asigna el valor "True" a esta política, el dispositivo puede ejecutar máquinas virtuales.
+      Si se le asigna el valor "False" a esta política, el dispositivo no puede ejecutar máquinas virtuales.
+      Cuando esta política cambia al valor "False", se aplica al iniciar nuevas máquinas virtuales, pero no apaga las máquinas virtuales que ya se estén ejecutando.
+      Si no se le asigna ningún valor a esta política en un dispositivo administrado, el dispositivo no puede ejecutar máquinas virtuales.
+      Los dispositivos no administrados pueden ejecutar máquinas virtuales.</translation>
 <translation id="8672321184841719703">Versión de destino de actualizaciones automáticas</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">La advertencia de protección de contraseña se activa al reutilizar la contraseña</translation>
@@ -2708,6 +2777,7 @@
 
       Esta política no se debe habilitar si la política <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> está habilitada, ya que esta función comparte la misma funcionalidad del cliente. En este caso, la sincronización alojada por Google está completamente inhabilitada.</translation>
 <translation id="8955719471735800169">Volver al principio</translation>
+<translation id="8959992920425111821">Configuración predeterminada</translation>
 <translation id="8960850473856121830">Los patrones de esta lista se compararán con el origen de seguridad de la URL solicitante. Si se encuentra alguna coincidencia, se concederá acceso a dispositivos de captura de audio sin solicitarlo.
 
       NOTA: Hasta la versión 45, esta política solo se admitía en modo kiosco.</translation>
@@ -2716,6 +2786,16 @@
 <translation id="8976248126101463034">Permitir la autenticación gnubby para los hosts de acceso remoto</translation>
 <translation id="8976531594979650914">Usar impresora predeterminada del sistema como opción predeterminada</translation>
 <translation id="8992176907758534924">No permitir que todos los sitios muestren imágenes</translation>
+<translation id="9034729899149506577">
+      Si se habilita la política, cada uno de los orígenes especificados en una
+      lista de elementos separados por comas se ejecutará en un proceso propio. También se aislarán
+      los orígenes de los subdominios correspondientes (p. ej., si especificas https://example.com/
+      se aislará https://foo.example.com/ como parte del sitio web
+      https://example.com/).
+      Si se inhabilita, no se aplica ningún aislamiento explícito de sitios web y se inhabilitan las pruebas de campo de IsolateOrigins y SitePerProcess. Los usuarios podrán seguir habilitando la política IsolateOrigins manualmente.
+      Si no se configura la política, el usuario podrá cambiar esta opción.
+      En <ph name="PRODUCT_OS_NAME" />, también se recomienda asignar el mismo valor a la política de dispositivos <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" />. Si los valores especificados por las dos políticas no coinciden, es posible que se produzca un retraso al acceder a una sesión de usuario mientras se aplica el valor especificado por la política del usuario.
+      </translation>
 <translation id="9035964157729712237">ID de extensiones que no deben estar incluidas en la lista negra</translation>
 <translation id="9042911395677044526">Permite aplicar la configuración de red al dispositivo <ph name="PRODUCT_OS_NAME" /> de cada usuario. La configuración de red es una cadena escrita en formato JSON, tal como se define en la siguiente página sobre el formato Open Network Configuration: <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Especificar si la actividad de vídeo afecta a la administración de energía</translation>
@@ -2766,6 +2846,13 @@
 <translation id="9187743794267626640">Inhabilitar la activación del almacenamiento externo</translation>
 <translation id="9197740283131855199">Porcentaje que permite ajustar el tiempo de espera de inactividad de la pantalla si el usuario vuelve a ser activo después de la inactividad</translation>
 <translation id="9200828125069750521">Parámetros para URL de imagen que utiliza POST</translation>
+<translation id="9210953373038593554">Configura el tipo de autenticación de inicios de sesión con SAML.
+
+      Cuando no se le asigna ningún valor a esta política o se le asigna el valor "Default" (valor 0), el navegador determina el comportamiento de los inicios de sesión con SAML en función de otros factores. En el caso más simple, la autenticación de usuario y la protección de los datos de usuario almacenados en la caché se basan en contraseñas que los usuarios han introducido de forma manual.
+
+      Si se le asigna el valor "ClientCertificate" (valor 1), se utiliza la autenticación con certificado de cliente para los usuarios añadidos recientemente que inicien sesión a través de SAML. No se utiliza ninguna contraseña para estos usuarios y sus datos locales almacenados en caché se protegen con las claves criptográficas correspondientes. Por ejemplo, esta opción permite configurar la autenticación de usuario basada en tarjetas inteligentes (ten en cuenta que las aplicaciones middleware de tarjetas inteligentes deben instalarse mediante la política DeviceLoginScreenAppInstallList).
+
+      Esta política solo afecta a los usuarios que usen la autenticación con SAML.</translation>
 <translation id="9213347477683611358">Permite configurar la imagen de fondo de pantalla del dispositivo que se muestra en la pantalla de inicio de sesión si ningún usuario ha iniciado sesión en el dispositivo. La política se define especificando la URL desde la que el dispositivo Chrome OS puede descargar la imagen de fondo de pantalla y un hash criptográfico que se utiliza para verificar la integridad de la descarga. La imagen debe tener formato JPEG y un tamaño no superior a 16 MB. Se debe poder acceder a la URL sin autenticación. La imagen de fondo de pantalla se descarga, se almacena en caché y se vuelve a descargar cada vez que se produce un cambio en la URL o en el hash.
 
       La política se debe especificar como una cadena que represente la URL y el hash en formato JSON, p.ej.,
diff --git a/components/policy/resources/policy_templates_gu.xtb b/components/policy/resources/policy_templates_gu.xtb
index e3a5396d..a62ab94 100644
--- a/components/policy/resources/policy_templates_gu.xtb
+++ b/components/policy/resources/policy_templates_gu.xtb
@@ -250,7 +250,7 @@
 <translation id="1797233582739332495">વપરાશકર્તાને રીલૉન્ચ કરવાની આવશ્યકતા છે તેવું વારંવાર દર્શાવતો સંકેત બતાવો</translation>
 <translation id="1803646570632580723">લૉન્ચરમાં બતાવવા માટે પિન કરેલી એપ્લિકેશંસની સૂચિ</translation>
 <translation id="1808715480127969042">આ સાઇટ્સ પર કૂકીઝને અવરોધિત કરો</translation>
-<translation id="1810261428246410396">ઇન્સ્ટન્ટ ટેથરિંગનો ઉપયોગ કરવાની મંજૂરી આપો.</translation>
+<translation id="1810261428246410396">ઝટપટ ઇન્ટરનેટ શેર કરવાની સુવિધાનો ઉપયોગ કરવાની મંજૂરી આપો.</translation>
 <translation id="1827523283178827583">સ્થિર પ્રોક્સી સર્વર્સનો ઉપયોગ કરો</translation>
 <translation id="1843117931376765605">વપરાશકર્તા નીતિ માટે રેટ તાજો કરો</translation>
 <translation id="1844620919405873871">ઝડપી અનલૉકથી સંબંધિત નીતિઓને ગોઠવે છે.</translation>
@@ -336,7 +336,7 @@
 <translation id="2030905906517501646">ડિફૉલ્ટ શોધ પ્રદાતા કીવર્ડ</translation>
 <translation id="203096360153626918">આ નીતિનો Android ઍપ્લિકેશનો પર કોઈ પ્રભાવ પડતો નથી. તે પૂર્ણસ્ક્રીન મોડમાં દાખલ થવામાં સમર્થ હશે, પછી ભલેને આ નીતિ <ph name="FALSE" /> પર સેટ કરેલ હોય.</translation>
 <translation id="2043770014371753404">બંધ કરેલ એન્ટરપ્રાઇઝ પ્રિન્ટર</translation>
-<translation id="2057317273526988987">URLsની સૂચિની ઍક્સેસને મંજૂરી આપો</translation>
+<translation id="2057317273526988987">URLsની સૂચિના ઍક્સેસને મંજૂરી આપો</translation>
 <translation id="2061810934846663491">રિમોટ ઍક્સેસ હોસ્ટ માટે આવશ્યક ડોમેન નામ ગોઠવે છે</translation>
 <translation id="206623763829450685"><ph name="PRODUCT_NAME" /> દ્વારા કઈ HTTP પ્રમાણીકરણ યોજનાઓ સમર્થિત છે તેનો ઉલ્લેખ કરે છે.
 
@@ -977,13 +977,13 @@
 <translation id="3758249152301468420">વિકાસકર્તા  ટુલ્સ અક્ષમ કરો</translation>
 <translation id="3764248359515129699">લેગસી સર્ટિફિકેટ ઑથોરિટિઝની એક સૂચિ માટે પ્રમાણપત્ર પારદર્શકતાની આવશ્યકતાઓનું પાલન કરાવવાનું બંધ કરે છે. 
 
-       આ નીતિ તેવી પ્રમાણપત્ર શૃંખલાઓ માટે પારદર્શકતાની સ્પષ્ટતાની આવશ્યકતાને બંધ કરવા માટે મંજૂરી આપે છે, જેમાં નિર્દિષ્ટ કરેલમાંના એક subjectPublicKeyInfo હૅશનો સમાવેશ થતો હોય. આ તેવા પ્રમાણપત્રોને મંજૂરી આપે છે જે અન્ય કિસ્સામાં અવિશ્વાસપાત્ર હોત, કારણ કે તેઓ એંટરપ્રાઇઝ હોસ્ટ તરીકે વપરાતા રહેવા માટે યોગ્ય રીતે સાર્વજનિક રૂપમાં બતાવવામાં આવેલ ન હતાં.     
+      આ નીતિ તેવી પ્રમાણપત્ર શૃંખલાઓ માટે પારદર્શકતાની સ્પષ્ટતાની આવશ્યકતાને બંધ કરવા માટે મંજૂરી આપે છે, જેમાં નિર્દિષ્ટ કરેલમાંના એક subjectPublicKeyInfo હૅશનો સમાવેશ થતો હોય. આ તેવા પ્રમાણપત્રોને મંજૂરી આપે છે જે અન્ય કિસ્સામાં અવિશ્વાસપાત્ર હોત, કારણ કે તેઓ એંટરપ્રાઇઝ હોસ્ટ તરીકે વપરાતા રહેવા માટે યોગ્ય રીતે સાર્વજનિક રૂપમાં બતાવવામાં આવેલ ન હતાં.     
 
-       જ્યારે આ નીતિ સેટ કરેલ હોય ત્યારે પ્રમાણપત્ર પારદર્શકતા અનુપાલનને બંધ કરવા માટે, હૅશ Legacy Certificate Authority (CA) દ્વારા ઓળખાયેલ CA પ્રમાણપત્રમાં આવતા subjectPublicKeyInfo ની હોવું જોઇએ. લેગસી CA એવું CA છે જે <ph name="PRODUCT_NAME" /> દ્વારા ડિફૉલ્ટ એક કે વધુ ઑપરેટિંગ સિસ્ટમ દ્વારા સમર્થિત હોય પણ, Android ઓપન સૉર્સ પ્રોજેક્ટ અથવા <ph name="PRODUCT_OS_NAME" /> પર વિશ્વાસ કરતા ન હોય.
+      જ્યારે આ નીતિ સેટ કરેલ હોય ત્યારે પ્રમાણપત્ર પારદર્શકતા અનુપાલનને બંધ કરવા માટે, હૅશ તે CA પ્રમાણપત્રમાં દેખાતા Legacy Certificate Authority (CA) તરીકે માન્યતા પ્રાપ્ત કરેલ subjectPublicKeyInfoનો હોવો જોઈએ. લેગસી CA એવું CA છે જે <ph name="PRODUCT_NAME" /> દ્વારા સમર્થિત એક કે વધુ ડિફૉલ્ટ ઑપરેટિંગ સિસ્ટમ પર સાર્વજનિક રૂપે વિશ્વસનીય હોય છે, પણ Android ઓપન સૉર્સ પ્રોજેક્ટ અથવા <ph name="PRODUCT_OS_NAME" /> પર વિશ્વસનીય હોતું નથી.
 
-        subjectPublicKeyInfo હૅશને ઍલ્ગોરિધમ નામ, "/" અક્ષર, અને નિર્દિષ્ટ પ્રમાણપત્રના DER-એન્કોડ કરેલ subjectPublicKeyInfo પર લાગુ કરેલ તે હૅશ ઍલ્ગોરિધમના Base64 એન્કોડિંગ સાથે સંયોજિત કરીને નિર્દિષ્ટ કરાય છે. આ Base64 એન્કોડિંગ એ RFC 7469, વિભાગ 2.4 માં વ્યાખ્યાયિત છે તેમ, SPKI Fingerprint જેવું જ ફૉર્મેટ છે. વણઓળખાયેલ હૅશ ઍલ્ગોરિધમને અવગણવામાં આવે છે. આ સમયે સમર્થિત એકમાત્ર હૅશ ઍલ્ગોરિધમ "sha256" છે.
+      subjectPublicKeyInfo હૅશને ઍલ્ગોરિધમ નામ, "/" અક્ષર, અને નિર્દિષ્ટ પ્રમાણપત્રના DER-એન્કોડ કરેલ subjectPublicKeyInfo પર લાગુ કરેલ તે હૅશ ઍલ્ગોરિધમના Base64 એન્કોડિંગ સાથે સંયોજિત કરીને નિર્દિષ્ટ કરાય છે. આ Base64 એન્કોડિંગ એ RFC 7469, વિભાગ 2.4 માં વ્યાખ્યાયિત છે તેમ, SPKI Fingerprint જેવું જ ફૉર્મેટ છે. વણઓળખાયેલ હૅશ ઍલ્ગોરિધમને અવગણવામાં આવે છે. આ સમયે સમર્થિત એકમાત્ર હૅશ ઍલ્ગોરિધમ "sha256" છે.
   
-       જો આ નીતિ સેટ કરેલ ન હોય, તો એવું કોઈપણ પ્રમાણપત્ર જે પ્રમાણપત્ર પારદર્શકતા નીતિ મુજબ જાહેર કરવું આવશ્યક હોય અને જો તેને પ્રમાણપત્ર પારદર્શકતા મુજબ જાહેર કરેલ ન હોય તો તે અવિશ્વાસપાત્ર ગણાશે.</translation>
+      જો આ નીતિ સેટ કરેલ ન હોય, તો એવું કોઈપણ પ્રમાણપત્ર જે પ્રમાણપત્ર પારદર્શકતા નીતિ મુજબ જાહેર કરવું આવશ્યક હોય અને જો તેને પ્રમાણપત્ર પારદર્શકતા મુજબ જાહેર કરેલ ન હોય તો તે અવિશ્વાસપાત્ર ગણાશે.</translation>
 <translation id="3765260570442823273">નિષ્ક્રિય લૉગ-આઉટની અવધિ ચેતવણી સંદેશ</translation>
 <translation id="377044054160169374">અપમાનજનક અનુભવ હસ્તક્ષેપ અમલબજાવણી</translation>
 <translation id="3780152581321609624">Kerberos SPN માં અ-માનક પોર્ટ શામેલ કરો</translation>
@@ -1498,7 +1498,7 @@
 
       જો તે સેટ કરેલું ન હોય, તો વપરાશકર્તાને આયાત કરવું કે નહીં તે પૂછવામાં આવશે અથવા આયાત કરવું આપમેળે થઈ શકે છે.</translation>
 <translation id="5056708224511062314">સ્ક્રીન બૃહદદર્શક અક્ષમ છે</translation>
-<translation id="5058573563327660283">આપમેળે ક્લિન-અપ દરમિયાન ડિસ્ક પર જગ્યા ખાલી કરવા માટે ઉપયોગમાં લેવાતી વ્યૂહનીતિ પસંદ કરો (ટાળવું)</translation>
+<translation id="5058573563327660283">આપમેળે ક્લિન-અપ દરમિયાન ડિસ્ક પર જગ્યા ખાલી કરવા માટે ઉપયોગમાં લેવાતી વ્યૂહનીતિ પસંદ કરો (ટાળવામાં આવી)</translation>
 <translation id="5067143124345820993">લૉગિન વપરાશકર્તા વ્હાઇટ સૂચિ</translation>
 <translation id="5068140065960598044"><ph name="PRODUCT_NAME" /> ક્લાઉડ નીતિ મશીન નીતિને ઓવરરાઇડ કરે છે.</translation>
 <translation id="5075834892754086022">જો આ નીતિ સેટ કરેલી હોય, તો ગોઠવવામાં આવેલ ન્યૂનતમ પિન લંબાઈ લાગુ થાય
@@ -2553,9 +2553,9 @@
        આ નીતિ તેવી પ્રમાણપત્ર શૃંખલાઓ માટે પારદર્શકતાની સ્પષ્ટતાની આવશ્યકતાને બંધ કરવા માટે મંજૂરી આપે છે, જેમાં નિર્દિષ્ટ કરેલમાંના એક subjectPublicKeyInfo હૅશનો સમાવેશ થતો હોય. આ તેવા પ્રમાણપત્રોને મંજૂરી આપે છે જે અન્ય કિસ્સામાં અવિશ્વાસપાત્ર હોત, કારણ કે તેઓ એંટરપ્રાઇઝ હોસ્ટ તરીકે વપરાતા રહેવા માટે યોગ્ય રીતે સાર્વજનિક રૂપમાં બતાવવામાં આવેલ ન હતાં.
 
       પ્રમાણપત્ર પારદર્શકતા અનુપાલનને બંધ થવા દેવા માટે, નીચેનામાંથી એક શરત પૂર્ણ થવી આવશ્યક છે:
-      1. હૅશ સર્વર પ્રમાણપત્રના subjectPublicKeyInfoની હોય.
-      2. હૅશ એવી subjectPublicKeyInfoનું હોય, જે પ્રમાણપત્ર શૃંખલામાંના એક CA પ્રમાણપત્રમાં આવતું હોય, એ CA પ્રમાણપત્ર X.509v3 nameConstraints એક્સ્ટેંશન દ્વારા મર્યાદિત હોય, એકથી વધુ directoryName nameConstraints permittedSubtreesમાં હાજર હોય, અને directoryNameમાં એક organizationName એટ્રિબ્યુટનો સમાવેશ થતો હોય.
-      3. હૅશ એવી subjectPublicKeyInfoનું હોય જે પ્રમાણપત્ર શૃંખલામાંના એક CA પ્રમાણપત્રમાં આવતું હોય, CA પ્રમાણપત્રમાં પ્રમાણપત્ર વિષયમાં એકથી વધુ organizationName એટ્રિબ્યૂટનો સમાવેશ થતો હોય અને સર્વરના પ્રમાણપત્રમાં બાઇટ દર બાઇટ સમાન મૂલ્યો સાથે એકસરખી સંખ્યામાં, એક જ ક્રમમાં organizationName એટ્રિબ્યુટ હોય.
+      1. હૅશ તે સર્વર પ્રમાણપત્રના subjectPublicKeyInfoનો હોય.
+      2. હૅશ એવા subjectPublicKeyInfoનો હોય, જે પ્રમાણપત્ર શૃંખલામાંના એક CA પ્રમાણપત્રમાં આવતો હોય, એ CA પ્રમાણપત્ર X.509v3 nameConstraints એક્સ્ટેંશન દ્વારા મર્યાદિત હોય, એકથી વધુ directoryName nameConstraints permittedSubtreesમાં હાજર હોય, અને directoryNameમાં એક organizationName એટ્રિબ્યુટનો સમાવેશ થતો હોય.
+      3. હૅશ એવા subjectPublicKeyInfoનો હોય જે પ્રમાણપત્ર શૃંખલામાંના એક CA પ્રમાણપત્રમાં આવતો હોય, CA પ્રમાણપત્રમાં પ્રમાણપત્ર વિષયમાં એકથી વધુ organizationName એટ્રિબ્યૂટનો સમાવેશ થતો હોય અને સર્વરના પ્રમાણપત્રમાં બાઇટ દર બાઇટ સમાન મૂલ્યો સાથે એકસરખી સંખ્યામાં, એક જ ક્રમમાં organizationName એટ્રિબ્યુટ હોય.
 
       subjectPublicKeyInfo હૅશને ઍલ્ગોરિધમ નામ, "/" અક્ષર અને નિર્દિષ્ટ પ્રમાણપત્રના DER-એન્કોડ કરેલ subjectPublicKeyInfo પર લાગુ કરેલ તે હૅશ ઍલ્ગોરિધમના Base64 એન્કોડિંગ સાથે સંયોજિત કરીને નિર્દિષ્ટ કરાય છે. આ Base64 એન્કોડિંગ એ RFC 7469, વિભાગ 2.4 માં વ્યાખ્યાયિત છે તેમ, SPKI Fingerprint જેવું જ ફૉર્મેટ છે. વણઓળખાયેલ હૅશ ઍલ્ગોરિધમને અવગણવામાં આવે છે. આ સમયે સમર્થિત એકમાત્ર હૅશ ઍલ્ગોરિધમ "sha256" છે.
 
diff --git a/components/policy/resources/policy_templates_hr.xtb b/components/policy/resources/policy_templates_hr.xtb
index f878149..1ba66bd4 100644
--- a/components/policy/resources/policy_templates_hr.xtb
+++ b/components/policy/resources/policy_templates_hr.xtb
@@ -409,6 +409,27 @@
           Kada ovo pravilo nije postavljeno, ne prikazuje se dijaloški okvir upozorenja.
 
           Vrijednost pravila treba biti navedena u milisekundama. Vrijednosti se prilagođavaju kako bi bile manje ili jednake odgodi neaktivnosti.</translation>
+<translation id="2289578386193672044">Određuje popis aplikacija i proširenja koja se instaliraju u pozadini,
+          bez interakcije s korisnikom, i koje korisnik ne može deinstalirati
+          niti onemogućiti. Sva dopuštenja koja aplikacije/proširenja
+          zahtijevaju dodjeljuju se implicitno, bez interakcije s korisnikom,
+          uključujući sva dodatna dopuštenja koja bi buduće verzije
+          aplikacije/proširenja mogle zahtijevati. Osim toga, dopuštenja se dodjeljuju
+          za API-je proširenja enterprise.deviceAttributes i enterprise.platformKeys.
+          (Ta dva API-ja nisu dostupna aplikacijama/proširenjima koji nisu
+          prisilno instalirani.)
+
+          Ovo pravilo ima prednost pred potencijalno sukobljenim pravilom <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />. Ako se s popisa uklone aplikacija ili proširenje koji su prethodno bili prisilno instalirani, <ph name="PRODUCT_NAME" /> automatski će ih deinstalirati.
+
+          Za instance Windowsa koje nisu pridružene domeni <ph name="MS_AD_NAME" /> prisilna instalacija ograničena je na aplikacije i proširenja navedene u Chrome web-trgovini.
+
+          Korisnici mogu izmijeniti izvorni kôd proširenja pomoću Alata za razvojne programere (zbog čega proširenje može prestati funkcionirati). Ako to predstavlja problem, postavite pravilo <ph name="DEVELOPER_TOOLS_POLICY_NAME" />.
+
+          Svaka stavka pravila niz je koji sadrži ID proširenja i URL za "ažuriranje" odvojene točkom sa zarezom (<ph name="SEMICOLON" />). ID proširenja niz je od 32 slova koji se primjerice može pronaći na <ph name="CHROME_EXTENSIONS_LINK" /> u načinu rada razvojnog programera. URL za "ažuriranje", ako se navede, treba usmjeravati na XML dokument manifesta ažuriranja kako je opisano u dokumentu <ph name="LINK_TO_EXTENSION_DOC1" />. Prema zadanim postavkama, upotrebljava se URL za ažuriranje Chrome web-trgovine (koji je trenutačno "https://clients2.google.com/service/update2/crx"). URL za "ažuriranje" postavljen u ovom pravilu upotrebljava se samo za prvo instaliranje, dok će se za daljnja ažuriranja proširenja upotrebljavati URL ažuriranja naveden u manifestu proširenja. Napominjemo i da je eksplicitno navođenje URL-a za "ažuriranje" bilo obavezno u verzijama preglednika <ph name="PRODUCT_NAME" /> zaključno s verzijom 67.
+
+          Na primjer, <ph name="EXTENSION_POLICY_EXAMPLE" /> instalira aplikaciju <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> sa standardnog URL-a za "ažuriranje" Chrome web-trgovine. Više informacija o hostingu proširenja potražite ovdje: <ph name="LINK_TO_EXTENSION_DOC2" />.
+
+         Ako se to pravilo ne postavi, aplikacije ili proširenja neće se instalirati automatski i korisnik može deinstalirati bilo koju aplikaciju ili proširenje u pregledniku <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2292084646366244343">Proizvod <ph name="PRODUCT_NAME" /> može upotrebljavati Googleovu web-uslugu za ispravljanje pravopisnih pogrešaka. Ako je ta postavka omogućena, ta se usluga uvijek upotrebljava. Ako je ta postavka onemogućena, ta se usluga nikad ne upotrebljava.
 
       Provjera pravopisa još se uvijek može vršiti pomoću preuzetog rječnika; to pravilo upravlja samo upotrebom mrežne usluge.
@@ -697,6 +718,16 @@
           Pravilo nije obavezno. Ako nije postavljeno, neće se vršiti zamjena pojma za pretraživanje.
 
           Pravilo se primjenjuje samo ako je pravilo "DefaultSearchProviderEnabled" omogućeno.</translation>
+<translation id="3056439054015239107">
+      To se pravilo primjenjuje na zaslon za prijavu. Pogledajte i pravilo <ph name="SITE_PER_PROCESS_POLICY_NAME" /> koje se primjenjuje na korisničku sesiju. Preporučujemo da oba pravila postavite na istu vrijednost. Ako se vrijednosti ne podudaraju, možda će prilikom otvaranja korisničke sesije biti potrebno pričekati dok se ne primijeni vrijednost koja je određena korisničkim pravilom.
+      Možda biste trebali razmisliti o postavci pravila IsolateOrigins da biste
+      iskoristili prednosti obje značajke, izolacije i ograničenog utjecaja za
+      korisnike, koristeći IsolateOrigins s popisom web-lokacija koje želite izolirati.
+      Ova postavka, SitePerProcess, izolira sve web-lokacije.
+      Ako se to pravilo omogući, svaka će se web-lokacija izvoditi u svojem procesu.
+      Ako se to pravilo onemogući, neće doći do eksplicitne izolacije web-lokacija i onemogućit će se radne verzije postavki IsolateOrigins i SitePerProcess. Korisnici će i dalje moći ručno omogućiti SitePerProcess.
+      Ako se to pravilo ne konfigurira, korisnik će moći promijeniti tu postavku.
+      </translation>
 <translation id="306887062252197004">Ovo pravilo omogućuje korisnicima značajke WebDriver da nadjačaju
       pravila koja mogu ometati njezin rad.
 
@@ -855,6 +886,7 @@
 <translation id="3660562134618097814">Prenesi kolačiće SAML IdP-a tijekom prijave</translation>
 <translation id="3709266154059827597">Konfiguriraj crnu listu instalacije proširenja</translation>
 <translation id="3711895659073496551">Obustavi</translation>
+<translation id="3715569262675717862">Autentifikacija na temelju korisničkih certifikata</translation>
 <translation id="3736879847913515635">Omogućivanje dodavanja osobe u upravitelju korisnika</translation>
 <translation id="3737544779868348650">Naziv hosta mreže uređaja</translation>
 <translation id="3740754010292550733">Postavi razdoblje za obavijesti o ponovnom pokretanju radi ažuriranja</translation>
@@ -1842,6 +1874,15 @@
       U slučaju da prijavljivanje na drugi račun ne treba biti dopušteno u anonimnom načinu, razmislite o blokiranju tog načina rada pomoću pravila IncognitoModeAvailability.
 
       Napominjemo da će korisnici moći pristupiti Googleovim uslugama bez autentifikacije ako blokiraju kolačiće.</translation>
+<translation id="6738326937072482736">Konfigurira dostupnost i ponašanje funkcije ažuriranja <ph name="TPM_FIRMWARE_UPDATE_TPM" /> opreme.
+
+      Pojedinačne postavke mogu se navesti u JSON svojstvima:
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH" />: ako se postavi na <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE" />, korisnici će moći pokrenuti tijek powerwasha da bi instalirali ažuriranje <ph name="TPM_FIRMWARE_UPDATE_TPM" /> opreme.
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE" />: ako se postavi na <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE" />, korisnici će moći aktivirati tijek ažuriranja <ph name="TPM_FIRMWARE_UPDATE_TPM" /> opreme koji zadržava stanje na razini uređaja (uključujući registraciju organizacije), no gubi podatke korisnika. Taj je tijek ažuriranja dostupan od verzije 68.
+
+      Ako se to pravilo ne postavi, funkcija ažuriranja <ph name="TPM_FIRMWARE_UPDATE_TPM" /> opreme neće biti dostupna.</translation>
 <translation id="6757438632136860443">Omogućuje vam postavljanje popisa uzoraka URL-ova koji navode web-lokacije kojima je dopušteno pokretanje dodatka <ph name="FLASH_PLUGIN_NAME" />.
 
           Ako se to pravilo ne postavi, za sve web-lokacije upotrebljavat će se globalna zadana vrijednost iz pravila "DefaultPluginsSetting", ako je to pravilo postavljeno, ili vrijednost iz korisnikove osobne konfiguracije.</translation>
@@ -1860,6 +1901,16 @@
 <translation id="687046793986382807">To se pravilo više ne primjenjuje od verzije 35 proizvoda <ph name="PRODUCT_NAME" />.
 
       Neovisno o vrijednosti opcije, informacije o memoriji prijavljuju se za stranicu, ali se prijavljene veličine kvantiziraju, a stopa ažuriranja ograničena je iz sigurnosnih razloga. Za dobivanje preciznih podataka u stvarnom vremenu upotrijebite alate kao što je Telemetrija.</translation>
+<translation id="6870914592443697993">
+      To se pravilo primjenjuje na zaslon za prijavu. Pogledajte i pravilo <ph name="ISOLATE_ORIGINS_POLICY_NAME" /> koje se primjenjuje na korisničku sesiju. Preporučujemo da oba pravila postavite na istu vrijednost. Ako se vrijednosti ne podudaraju, možda će prilikom otvaranja korisničke sesije biti potrebno pričekati dok se ne primijeni vrijednost koja je određena korisničkim pravilom.
+      Ako se to pravilo omogući, svaki od navedenih izvora na popisu odijeljenom
+      zarezima izvodit će se u svojem procesu. Time će se također izolirati
+      izvori navedeni prema poddomenama, npr. ako se navede
+      https://example.com/ izolirat će se i https://foo.example.com/ kao dio
+      web-lokacije https://example.com/.
+      Ako se to pravilo onemogući, neće doći do eksplicitne izolacije web-lokacija i onemogućit će se radne verzije postavki IsolateOrigins i SitePerProcess. Korisnici će i dalje moći ručno omogućiti IsolateOrigins.
+      Ako se to pravilo ne konfigurira, za zaslon za prijavu upotrebljavat će se zadane postavke platforme za izolaciju web-lokacija.
+      </translation>
 <translation id="6894178810167845842">URL stranice nove kartice</translation>
 <translation id="6899705656741990703">Automatski detektiraj proxy postavke</translation>
 <translation id="6903814433019432303">To je pravilo aktivno samo u prodajnom načinu.
@@ -2099,6 +2150,7 @@
       Ako se postavi na False, ažuriranje je komponenti onemogućeno. No neke su komponente izuzete od tog pravila i dalje će se ažurirati, a to su komponente koje ne sadrže izvršni kôd, koje bitno ne mijenjaju ponašanje preglednika ili koje su važne za sigurnost.
       Primjeri takvih komponenti uključuju popise opozvanih certifikata i podatke Sigurnog pregledavanja.
       Više informacija o Sigurnom pregledavanju potražite na stranici https://developers.google.com/safe-browsing.</translation>
+<translation id="7566878661979235378">Vrsta autentifikacije za SAML prijavu</translation>
 <translation id="757395965347379751">Kada je ta postavka omogućena, <ph name="PRODUCT_NAME" /> dopušta certifikate s SHA-1 potpisom ako se uspješno ovjere i povežu s lokalno instaliranim CA certifikatima.
 
       Napominjemo da to pravilo ovisi o tome dopušta li snop za potvrdu certifikata operativnog sustava SHA-1 potpise. Ako se ažuriranjem OS-a promijeni njegovo rukovanje SHA-1 certifikatima, to pravilo možda više neće imati utjecaja. Nadalje, to je pravilo predviđeno kao privremeno rješenje kako bi organizacije imale više vremena za napuštanje algoritma SHA-1. Pravilo će se ukloniti 1. siječnja 2019. ili oko tog datuma.
@@ -2263,6 +2315,16 @@
 <translation id="7961779417826583251">Onemogući provedbu Transparentnosti certifikata za popis starih tijela za izdavanje certifikata</translation>
 <translation id="7974114691960514888">Ovo pravilo više se ne podržava. Omogućuje upotrebu STUN i relejnih poslužitelja prilikom povezivanja s udaljenim klijentom. Ako je ova postavka omogućena, onda ovo računalo može otkriti udaljena računala hostove i povezati se s njima, čak i ako su odvojena vatrozidom. Ako je ova postavka onemogućena, a izlazne UDP veze filtrirane su vatrozidom, onda se ovo računalo može jedino povezati s računalima hostovima unutar lokalne mreže.</translation>
 <translation id="7976157349247117979">Naziv odredišta za <ph name="PRODUCT_NAME" /></translation>
+<translation id="7978060394348264922">
+      Možda biste trebali razmisliti o postavci pravila IsolateOrigins da biste
+      iskoristili prednosti obje značajke, izolacije i ograničenog utjecaja za
+      korisnike, koristeći IsolateOrigins s popisom web-lokacija koje želite izolirati.
+      Ova postavka, SitePerProcess, izolira sve web-lokacije.
+      Ako se to pravilo omogući, svaka će se web-lokacija izvoditi u svojem procesu.
+      Ako se to pravilo onemogući, neće doći do eksplicitne izolacije web-lokacija i onemogućit će se radne verzije postavki IsolateOrigins i SitePerProcess. Korisnici će i dalje moći ručno omogućiti SitePerProcess.
+      Ako se to pravilo ne konfigurira, korisnik će moći promijeniti tu postavku.
+      U sustavu <ph name="PRODUCT_OS_NAME" /> preporučujemo da pravilo za uređaje <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> također postavite na istu vrijednost. Ako se vrijednosti koje navode ta dva pravila ne podudaraju, možda će prilikom otvaranja korisničke sesije biti potrebno pričekati dok se ne primijeni vrijednost koja je određena korisničkim pravilom.
+      </translation>
 <translation id="7980227303582973781">Nema posebnih ograničenja</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="802147957407376460">Zakreni zaslon 0 stupnjeva</translation>
@@ -2462,6 +2524,13 @@
           Razdvojite više poslužitelja zarezima. Zamjenski su znakovi (*) dopušteni.
 
           Ako ne postavite ovo pravilo, <ph name="PRODUCT_NAME" /> pokušat će otkriti je li poslužitelj na intranetu te će jedino tada odgovoriti na IWA zahtjeve. Ako otkrije da se radi o poslužitelju na internetu, <ph name="PRODUCT_NAME" /> zanemarit će njegove IWA zahtjeve.</translation>
+<translation id="8667812577403206506">Omogućuje vam da odredite je li virtualnim računalima dopušteno pokretanje na OS-u Chrome.
+
+      Ako je pravilo postavljeno na True, uređaju je dopušteno pokretanje virtualnih računala.
+      Ako je pravilo postavljeno na False, uređaju nije dopušteno pokretanje virtualnih računala.
+      Kada se to pravilo promijeni na False, primjenjuje se na pokretanje novih virtualnih računala, ali ne isključuje virtualna računala koja su već pokrenuta.
+      Kada to pravilo nije postavljeno na upravljanom uređaju, uređaju nije dopušteno pokretanje virtualnih računala.
+      Neupravljanim je uređajima dopušteno pokretanje virtualnih računala.</translation>
 <translation id="8672321184841719703">Ciljna verzija automatskog ažuriranja</translation>
 <translation id="867410340948518937">U2F (univerzalna dvostruka autentifikacija)</translation>
 <translation id="8685024486845674965">Upozorenje o zaštiti zaporkom aktivira se ponovnom upotrebom zaporke</translation>
@@ -2576,6 +2645,7 @@
 
       To se pravilo ne bi trebalo omogućivati kada je pravilo <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> postavljeno na omogućeno jer ta značajka dijeli istu klijentsku funkciju. Sinkronizacija hostirana na Googleu u tom je slučaju potpuno onemogućena.</translation>
 <translation id="8955719471735800169">Natrag na vrh</translation>
+<translation id="8959992920425111821">Zadana konfiguracija</translation>
 <translation id="8960850473856121830">Uzorci na tom popisu usporedit će se sa sigurnosnim izvorištem
       URL-a koji šalje zahtjev. Ako se pronađe podudaranje, pristup uređajima
       za snimanje zvuka dopuštat će se bez upita.
@@ -2586,6 +2656,16 @@
 <translation id="8976248126101463034">Dopusti autentifikaciju "gnubby" za hostove daljinskog pristupa</translation>
 <translation id="8976531594979650914">Upotrijebi zadani pisač sustava kao zadani</translation>
 <translation id="8992176907758534924">Ne dopuštaj web-lokacijama prikazivanje slika</translation>
+<translation id="9034729899149506577">
+      Ako se to pravilo omogući, svaki od navedenih izvora na popisu
+      odijeljenom zarezima izvodit će se u svojem procesu. Time će se također
+      izolirati izvori navedeni prema poddomenama, npr. ako se navede
+      https://example.com/, izolirat će se i https://foo.example.com/ kao dio
+      web-lokacije https://example.com/.
+      Ako se to pravilo onemogući, neće doći do eksplicitne izolacije web-lokacija i onemogućit će se radne verzije postavki IsolateOrigins i SitePerProcess. Korisnici će i dalje moći ručno omogućiti IsolateOrigins.
+      Ako se to pravilo ne konfigurira, korisnik će moći promijeniti tu postavku.
+      U sustavu <ph name="PRODUCT_OS_NAME" /> preporučujemo da pravilo za uređaje <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" /> također postavite na istu vrijednost. Ako se vrijednosti koje navode ta dva pravila ne podudaraju, možda će prilikom otvaranja korisničke sesije biti potrebno pričekati dok se ne primijeni vrijednost koja je određena korisničkim pravilom.
+      </translation>
 <translation id="9035964157729712237">ID-jevi proširenja za izuzimanje s crne liste</translation>
 <translation id="9042911395677044526">Omogućuje nametanje mrežne konfiguracije za primjenu po korisniku na uređaju <ph name="PRODUCT_OS_NAME" />. Mrežna je konfiguracija niz u formatu JSON, kao što je definirano formatom "Open Network Configuration" koji je opisan na adresi <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Odredi utječe li aktivnost videozapisa na upravljanje napajanjem</translation>
@@ -2630,6 +2710,13 @@
 <translation id="9187743794267626640">Onemogući priključivanje vanjske pohrane</translation>
 <translation id="9197740283131855199">Postotak skaliranja odgode zatamnjivanja zaslona ako korisnik postane aktivan nakon zatamnjivanja</translation>
 <translation id="9200828125069750521">Parametri za URL slike koji upotrebljava POST</translation>
+<translation id="9210953373038593554">Konfigurira vrstu autentifikacije za SAML prijave.
+
+      Kada se to pravilo ne postavi ili se postavi na zadano (vrijednost 0), ponašanje SAML prijava određeno je preglednikom ovisno o drugim čimbenicima. U najjednostavnijem slučaju autentifikacija korisnika i zaštita predmemoriranih podataka korisnika temelje se na zaporkama koje su korisnici unijeli ručno.
+
+      Kada se to pravilo postavi na ClientCertificate (vrijednost 1), autentifikacija korisničkim certifikatom upotrebljava se za novo dodane korisnike koji se prijavljuju putem SAML-a. Za te se korisnike ne upotrebljavaju nikakve zaporke i njihovi se predmemorirani lokalni podaci štite pomoću odgovarajućih kriptografskih ključeva. Na primjer, ta postavka omogućuje konfiguriranje autentifikacije korisnika na temelju pametne kartice (napominjemo da se posredničke aplikacije za pametne kartice trebaju instalirati pomoću pravila DeviceLoginScreenAppInstallList).
+
+      To se pravilo primjenjuje samo na korisnike koji se autentificiraju putem SAML-a.</translation>
 <translation id="9213347477683611358">Konfigurira pozadinsku sliku koja se prikazuje na zaslonu za prijavu na razini uređaja ako na uređaju još nema prijavljenih korisnika. Pravilo se postavlja određivanjem URL-a s kojega uređaj s OS-om Chrome može preuzeti pozadinsku sliku i kriptografskog raspršivanja za provjeru integriteta preuzimanja. Slika mora biti u JPEG formatu i ne smije biti veća od 16 MB. URL-u se mora moći pristupiti bez autentifikacije. Pozadinska slika preuzima se i sprema u predmemoriju. Ponovo će se preuzeti svaki put kada se URL ili raspršivanje promijene.
 
       Pravilo se navodi kao niz koji izražava URL i sažetak u JSON obliku, na primjer:
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index cefedf0..b9095d7 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -409,6 +409,19 @@
           Saat kebijakan ini tidak disetel, dialog peringatan tidak akan ditampilkan.
 
           Nilai kebijakan harus ditentukan dalam milidetik. Nilai dibatasi agar kurang dari atau sama dengan penundaan menganggur.</translation>
+<translation id="2289578386193672044">Menentukan daftar aplikasi dan ekstensi yang diinstal tanpa menampilkan notifikasi kepada pengguna, tanpa interaksi pengguna, dan yang tidak dapat di-uninstal atau dinonaktifkan oleh pengguna. Semua izin yang diminta oleh aplikasi/ekstensi akan diberikan secara implisit, tanpa interaksi pengguna, termasuk izin tambahan apa pun yang diminta oleh versi aplikasi/ekstensi yang berikutnya. Selain itu, izin diberikan untuk API ekstensi enterprise.deviceAttributes dan enterprise.platformKeys. (Kedua API ini tidak tersedia untuk aplikasi/ekstensi yang tidak diinstal paksa.)
+
+Kebijakan ini lebih diutamakan daripada kebijakan <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> yang berpotensi bertentangan. Jika aplikasi atau ekstensi yang sebelumnya diinstal paksa telah dihapus dari daftar ini, aplikasi/ekstensi tersebut otomatis di-uninstal oleh <ph name="PRODUCT_NAME" />.
+
+Untuk instance Windows yang tidak tergabung dalam domain <ph name="MS_AD_NAME" />, penginstalan paksa dibatasi untuk aplikasi dan ekstensi yang tercantum di Chrome Web Store.
+
+Perlu diperhatikan bahwa kode sumber untuk ekstensi apa pun dapat diubah oleh pengguna melalui Fitur Developer (berpotensi merender disfungsi ekstensi). Jika hal ini menjadi masalah, kebijakan <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> sebaiknya disetel.
+
+Setiap item daftar kebijakan merupakan string yang berisi ID ekstensi dan, secara opsional, URL "update" yang dipisah dengan titik koma (<ph name="SEMICOLON" />). ID ekstensi adalah string 32 huruf yang ditemukan misalnya di <ph name="CHROME_EXTENSIONS_LINK" /> saat dalam mode developer. URL "update", jika ditentukan, seharusnya mengarah ke dokumen XML Manifes Update seperti yang dijelaskan dalam <ph name="LINK_TO_EXTENSION_DOC1" />. Secara default, URL update Chrome Web Store digunakan (yang saat ini adalah "https://clients2.google.com/service/update2/crx"). Perhatikan bahwa URL "update" yang disetel di kebijakan ini hanya digunakan untuk penginstalan awal; update ekstensi berikutnya akan menggunakan URL update yang ditunjukkan dalam manifes ekstensi. Perhatikan juga bahwa menentukan URL "update" secara eksplisit harus dilakukan di versi <ph name="PRODUCT_NAME" /> hingga dan termasuk 67.
+
+Misalnya, <ph name="EXTENSION_POLICY_EXAMPLE" /> menginstal aplikasi <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> dari URL "update" Chrome Web Store standar. Untuk informasi selengkapnya tentang cara menghosting ekstensi, lihat: <ph name="LINK_TO_EXTENSION_DOC2" />.
+
+Jika kebijakan ini tidak disetel, tidak ada aplikasi atau ekstensi yang otomatis diinstal dan pengguna dapat meng-uninstal aplikasi atau ekstensi apa pun di <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2292084646366244343"><ph name="PRODUCT_NAME" /> dapat menggunakan layanan web Google untuk membantu mengatasi masalah ejaan yang salah. Jika setelan ini diaktifkan, layanan ini akan selalu digunakan. Jika setelan ini dinonaktifkan, layanan ini tidak akan pernah digunakan.
 
       Memeriksa ejaan tetap dapat dilakukan menggunakan kamus yang didownload; kebijakan ini hanya mengontrol penggunaan layanan online.
@@ -699,6 +712,9 @@
           Kebijakan ini adalah opsional. Jika tidak disetel, penggantian istilah penelusuran tidak akan dilakukan.
 
           Kebijakan ini hanya akan ditaati jika kebijakan 'DefaultSearchProviderEnabled' diaktifkan.</translation>
+<translation id="3056439054015239107">
+      Kebijakan ini berlaku untuk layar login. Lihat juga kebijakan <ph name="SITE_PER_PROCESS_POLICY_NAME" /> yang berlaku untuk sesi pengguna. Sebaiknya setel kedua kebijakan ini ke nilai yang sama. Jika nilai tidak cocok, mungkin terjadi keterlambatan saat masuk sesi pengguna sementara nilai yang ditentukan oleh kebijakan pengguna sedang diterapkan. Anda dapat mempertimbangkan setelan kebijakan IsolateOrigins untuk mendapatkan yang terbaik dari kedua fungsi, yaitu isolasi dan dampak terbatas bagi pengguna, dengan menggunakan IsolateOrigins yang berisi daftar situs yang ingin Anda isolasi. Setelan ini, SitePerProcess, mengisolasi semua situs. Jika kebijakan diaktifkan, tiap situs akan dijalankan dalam prosesnya sendiri. Jika kebijakan dinonaktifkan, Isolasi Situs eksplisit tidak akan terjadi dan uji coba kolom IsolateOrigins dan SitePerProcess akan dinonaktifkan. Pengguna tetap dapat mengaktifkan SitePerProcess secara manual. Jika kebijakan tidak dikonfigurasi, pengguna dapat mengubah setelan ini.
+      </translation>
 <translation id="306887062252197004">Kebijakan ini memungkinkan pengguna fitur WebDriver mengganti kebijakan
       yang dapat mengganggu pengoperasiannya.
 
@@ -860,6 +876,7 @@
 <translation id="3660562134618097814">Transfer cookie SAML IdP saat proses masuk.</translation>
 <translation id="3709266154059827597">Konfigurasikan daftar hitam pemasangan ekstensi</translation>
 <translation id="3711895659073496551">Tangguhkan</translation>
+<translation id="3715569262675717862">Autentikasi berdasarkan sertifikat klien</translation>
 <translation id="3736879847913515635">Mengaktifkan penambahan orang di pengelola pengguna</translation>
 <translation id="3737544779868348650">Hostname jaringan perangkat</translation>
 <translation id="3740754010292550733">Setel periode notifikasi untuk peluncuran ulang update</translation>
@@ -1842,6 +1859,15 @@
       Jika tidak diizinkan untuk login ke akun lain melalui Mode penyamaran, blokir mode tersebut menggunakan kebijakan IncognitoModeAvailability.
 
       Perhatikan bahwa pengguna akan dapat mengakses layanan Google dalam kondisi tidak terautentikasi dengan memblokir cookienya.</translation>
+<translation id="6738326937072482736">Mengonfigurasi ketersediaan dan perilaku fungsi update firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+Setiap setelan dapat ditentukan di properti JSON:
+
+<ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH" />: Jika disetel ke <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE" />, pengguna dapat memicu alur powerwash untuk menginstal update firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+<ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE" />: Jika disetel ke <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE" />, pengguna dapat menjalankan alur update firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" /> yang mempertahankan status di seluruh perangkat (termasuk pendaftaran perusahaan), namun kehilangan data pengguna. Alur update ini tersedia mulai dari versi 68.
+
+Jika kebijakan ini tidak disetel, fungsi update firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" /> tidak akan tersedia.</translation>
 <translation id="6757438632136860443">Memungkinkan Anda menetapkan daftar pola URL yang menentukan situs yang diizinkan menjalankan plugin <ph name="FLASH_PLUGIN_NAME" />.
 
           Jika kebijakan tidak disetel, nilai default global akan digunakan untuk semua situs, baik dari kebijakan 'DefaultPluginsSetting' jika disetel, atau konfigurasi pribadi pengguna.</translation>
@@ -1862,6 +1888,9 @@
       Bagaimanapun juga info memori dilaporkan ke halaman, terlepas dari nilai opsinya, namun ukuran yang dilaporkan
       dikuantisasi dan tingkat pembaruan dibatasi karena alasan keamanan. Untuk memperoleh data akurat dalam waktu nyata,
       silakan gunakan alat seperti Telemetri.</translation>
+<translation id="6870914592443697993">
+      Kebijakan ini berlaku untuk layar login. Lihat juga kebijakan <ph name="ISOLATE_ORIGINS_POLICY_NAME" /> yang berlaku untuk sesi pengguna. Sebaiknya setel kedua kebijakan dengan nilai yang sama. Jika nilainya tidak sama, dapat menimbulkan penundaan saat memasukkan sesi pengguna ketika nilai yang ditentukan oleh kebijakan pengguna sedang diterapkan. Jika kebijakan ini diaktifkan, setiap asal yang diberi nama di daftar yang dipisahkan koma akan dijalankan dalam prosesnya masing-masing. Tindakan ini juga akan mengisolasi asal yang diberi nama oleh subdomain; misalnya, menentukan https://example.com/ juga akan menyebabkan https://foo.example.com/ diisolasi sebagai bagian dari situs https://example.com/. Jika kebijakan ini dinonaktifkan, Isolasi Situs eksplisit tidak akan terjadi dan uji coba kolom IsolateOrigins dan SitePerProcess akan dinonaktifkan. Pengguna tetap dapat mengaktifkan IsolateOrigins secara manual. Jika kebijakan tidak dikonfigurasi, setelan isolasi situs default platform akan digunakan untuk layar login.
+      </translation>
 <translation id="6894178810167845842">URL halaman Tab Baru</translation>
 <translation id="6899705656741990703">Mendeteksi setelan proxy secara otomatis</translation>
 <translation id="6903814433019432303">Kebijakan ini aktif dalam mode eceran saja.
@@ -2108,6 +2137,7 @@
       Jika disetel ke False, update komponen akan dinonaktifkan. Namun, sebagian komponen akan dikecualikan dari kebijakan ini: update komponen apa pun yang tidak berisi kode yang dapat dijalankan, atau tidak mengubah perilaku browser secara signifikan, atau demi alasan keamanan, tidak akan dinonaktifkan.
       Contoh komponen tersebut meliputi daftar pembatalan sertifikat dan data Safe Browsing.
       Lihat https://developers.google.com/safe-browsing untuk mendapatkan informasi selengkapnya terkait Safe Browsing.</translation>
+<translation id="7566878661979235378">Jenis autentikasi login SAML</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.
@@ -2212,7 +2242,7 @@
           <ph name="PROXY_HELP_URL" />.</translation>
 <translation id="7781069478569868053">Halaman Tab Baru</translation>
 <translation id="7788511847830146438">Per Profil</translation>
-<translation id="7801886189430766248">Jika kebijakan ini disetel ke true, data aplikasi Android akan diupload ke server Pencadangan Android dan dipulihkan saat pemasangan ulang aplikasi untuk aplikasi yang kompatibel.
+<translation id="7801886189430766248">Jika kebijakan ini disetel ke true, data aplikasi Android akan diupload ke server Backup Android dan dipulihkan saat pemasangan ulang aplikasi untuk aplikasi yang kompatibel.
 
       Jika kebijakan ini disetel ke false, Android Backup Service akan dinonaktifkan.
 
@@ -2252,7 +2282,7 @@
 <translation id="7882585827992171421">Kebijakan ini hanya aktif dalam mode ritel.
 
       Menentukan id ekstensi untuk digunakan sebagai tirai layar pada layar masuk. Ekstensi haruslah bagian dari AppPack yang dikonfigurasi untuk domain ini melalui kebijakan DeviceAppPack.</translation>
-<translation id="7882857838942884046">Menonaktifkan Google Sync akan menyebabkan Pencadangan dan Pemulihan Android tidak berfungsi dengan benar.</translation>
+<translation id="7882857838942884046">Menonaktifkan Google Sync akan menyebabkan Backup dan Pemulihan Android tidak berfungsi dengan benar.</translation>
 <translation id="7882890448959833986">Sembunyikan peringatan OS tidak didukung</translation>
 <translation id="7912255076272890813">Konfigurasikan jenis aplikasi/ekstensi yang diizinkan</translation>
 <translation id="7915236031252389808">Anda dapat menetapkan URL ke file .pac proxy di sini.
@@ -2272,6 +2302,9 @@
 <translation id="7961779417826583251">Nonaktifkan penerapan Transparansi Sertifikat untuk daftar Otoritas Sertifikat Lama</translation>
 <translation id="7974114691960514888">Kebijakan ini tidak lagi didukung. Mengaktifkan penggunaan STUN dan server relay saat menyambungkan ke klien jarak jauh. Jika setelan ini diaktifkan, maka komputer ini dapat menemukan dan tersambung ke komputer host jarak jauh bahkan jika dipisahkan oleh firewall. Jika setelan ini dinonaktifkan dan sambungan UDP keluar difilter oleh firewall, maka komputer ini hanya dapat tersambung ke komputer host dalam jaringan lokal.</translation>
 <translation id="7976157349247117979">Nama tujuan <ph name="PRODUCT_NAME" /></translation>
+<translation id="7978060394348264922">
+      Anda dapat mempertimbangkan setelan kebijakan IsolateOrigins untuk mendapatkan yang terbaik dari kedua fungsi, yaitu isolasi dan dampak terbatas bagi pengguna, dengan menggunakan IsolateOrigins yang berisi daftar situs yang ingin Anda isolasi. Setelan ini, SitePerProcess, mengisolasi semua situs. Jika kebijakan diaktifkan, tiap situs akan dijalankan dalam prosesnya sendiri. Jika kebijakan dinonaktifkan, Isolasi Situs eksplisit tidak akan terjadi dan uji coba kolom IsolateOrigins dan SitePerProcess akan dinonaktifkan. Pengguna tetap dapat mengaktifkan SitePerProcess secara manual. Jika kebijakan tidak dikonfigurasi, pengguna dapat mengubah setelan ini. Di <ph name="PRODUCT_OS_NAME" />, sebaiknya setel juga kebijakan perangkat <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> ke nilai yang sama. Jika nilai yang ditentukan oleh kedua kebijakan tidak cocok, mungkin terjadi keterlambatan saat masuk sesi pengguna sementara nilai yang ditentukan oleh kebijakan pengguna sedang diterapkan.
+      </translation>
 <translation id="7980227303582973781">Tidak ada batasan khusus</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="802147957407376460">Putar layar sebesar 0 derajat</translation>
@@ -2471,6 +2504,7 @@
           Pisahkan beberapa nama server dengan koma. Karakter pengganti (*) diizinkan.
 
           Jika Anda membiarkan kebijakan ini tidak disetel, <ph name="PRODUCT_NAME" /> akan mencoba mendeteksi apakah server ada di internet dan akan menanggapi permintaan IWA setelahnya.  Jika server terdeteksi sebagai internet, permintaan IWA darinya akan diabaikan oleh <ph name="PRODUCT_NAME" />.</translation>
+<translation id="8667812577403206506">Mengizinkan Anda untuk mengontrol apakah mesin virtual diizinkan untuk berjalan di Chrome OS atau tidak. Jika kebijakan disetel ke True, perangkat diizinkan untuk menjalankan mesin virtual. Jika kebijakan disetel ke False, perangkat tidak diizinkan untuk menjalankan mesin virtual. Jika kebijakan ini diubah ke False, setelan ini berlaku untuk mesin virtual yang baru dimulai, tetapi tidak mematikan mesin virtual yang sedang berjalan. Jika kebijakan ini tidak disetel di perangkat yang dikelola, perangkat tidak diizinkan untuk menjalankan mesin virtual. Perangkat yang tidak dikelola diizinkan untuk menjalankan mesin virtual.</translation>
 <translation id="8672321184841719703">Versi Pembaruan Otomatis Target</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Peringatan perlindungan sandi dipicu oleh penggunaan ulang sandi</translation>
@@ -2581,6 +2615,7 @@
 
       Kebijakan ini seharusnya tidak diaktifkan jika kebijakan <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> diaktifkan, karena fitur tersebut menggunakan fungsi sisi klien yang sama. Jika terjadi kasus seperti ini, sinkronisasi yang dihosting Google akan dinonaktifkan sepenuhnya.</translation>
 <translation id="8955719471735800169">Kembali ke atas</translation>
+<translation id="8959992920425111821">Konfigurasi default</translation>
 <translation id="8960850473856121830">Pola dalam daftar ini akan dicocokan dengan asal
       keamanan URL yang meminta.  Jika tidak ditemukan kecocokan, akses ke perangkat
       yang merekam audio akan diberikan tanpa permintaan.
@@ -2591,6 +2626,9 @@
 <translation id="8976248126101463034">Izinkan autentikasi gnubby untuk host akses jarak jauh</translation>
 <translation id="8976531594979650914">Menggunakan Printer Default Sistem sebagai Default</translation>
 <translation id="8992176907758534924">Jangan izinkan situs apa pun menampilkan gambar</translation>
+<translation id="9034729899149506577">
+      Jika kebijakan ini diaktifkan, setiap asal bernama dalam daftar yang dipisahkan koma akan dijalankan dalam prosesnya sendiri. Hal ini juga akan mengisolasi asal yang diberi nama menurut subdomain; mis. menyebutkan https://example.com/ juga akan menyebabkan https://foo.example.com/ diisolasi sebagai bagian dari situs https://example.com/. Jika kebijakan ini dinonaktifkan, Isolasi Situs eksplisit tidak akan terjadi dan uji coba kolom IsolateOrigins dan SitePerProcess akan dinonaktifkan. Pengguna tetap dapat mengaktifkan IsolateOrigins secara manual. Jika kebijakan tidak dikonfigurasi, pengguna dapat mengubah setelan ini. Di <ph name="PRODUCT_OS_NAME" />, sebaiknya setel juga kebijakan perangkat <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" /> ke nilai yang sama. Jika nilai yang ditentukan oleh kedua kebijakan tidak cocok, mungkin terjadi keterlambatan saat masuk sesi pengguna sementara nilai yang ditentukan oleh kebijakan pengguna sedang diterapkan.
+      </translation>
 <translation id="9035964157729712237">ID Ekstensi yang dikeluarkan dari daftar hitam</translation>
 <translation id="9042911395677044526">Memungkinkan konfigurasi jaringan dorongan untuk diterapkan per pengguna ke perangkat <ph name="PRODUCT_OS_NAME" />. Konfigurasi jaringan adalah string berformat JSON seperti yang didefinisikan oleh format Konfigurasi Jaringan Terbuka yang diuraikan di <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Tentukan apakah aktivitas video memengaruhi pengelolaan daya</translation>
@@ -2635,6 +2673,13 @@
 <translation id="9187743794267626640">Menonaktifkan pemasangan penyimpanan eksternal</translation>
 <translation id="9197740283131855199">Persentase yang digunakan untuk menskalakan penundaan layar redup jika pengguna aktif setelah peredupan</translation>
 <translation id="9200828125069750521">Parameter untuk URL gambar yang menggunakan POST</translation>
+<translation id="9210953373038593554">Mengonfigurasi jenis autentikasi untuk login SAML.
+
+Jika kebijakan ini tidak disetel atau disetel ke Default (nilai 0), perilaku login SAML ditentukan oleh browser yang bergantung pada faktor lain. Pada skenario yang paling dasar, autentikasi pengguna dan perlindungan data pengguna yang disimpan dalam cache berdasarkan pada sandi yang secara manual dimasukkan oleh pengguna.
+
+Jika kebijakan ini disetel ke ClientCertificate (nilai 1), autentikasi sertifikat klien digunakan untuk penambahkan pengguna baru yang login melalui SAML. Tidak ada sandi yang digunakan untuk pengguna tersebut, dan data lokalnya yang disimpan dalam cache dilindungi menggunakan kunci kriptografi yang sesuai. Misalnya, setelan ini memungkinkan konfigurasi kartu smart berdasarkan autentikasi pengguna (perlu diketahui bahwa aplikasi middleware kartu smart harus diinstal melalui kebijakan DeviceLoginScreenAppInstallList).
+
+Kebijakan ini hanya memengaruhi pengguna yang melakukan autentikasi menggunakan SAML.</translation>
 <translation id="9213347477683611358">Mengonfigurasi gambar wallpaper tingkat perangkat yang ditampilkan di layar login jika belum ada pengguna yang login ke perangkat. Kebijakan ini disetel dengan menetapkan URL tempat perangkat Chrome OS dapat mendownload gambar wallpaper dan potongan kriptografi yang digunakan untuk memverifikasi integritas download. Gambar harus dalam format JPEG dan ukuran filenya tidak boleh melebihi 16MB. URL harus dapat diakses tanpa autentikasi apa pun. Gambar wallpaper akan didownload dan disimpan dalam cache. Gambar ini akan didownload jika URL atau potongan berubah.
 
       Kebijakan ini harus ditetapkan sebagai string yang mengekspresikan URL dan potongan dalam format JSON, misalnya:
diff --git a/components/policy/resources/policy_templates_kn.xtb b/components/policy/resources/policy_templates_kn.xtb
index 76b6b237..bfcb2ca 100644
--- a/components/policy/resources/policy_templates_kn.xtb
+++ b/components/policy/resources/policy_templates_kn.xtb
@@ -914,13 +914,13 @@
 <translation id="3758249152301468420">ಡೆವಲಪರ್ ಪರಿಕರಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸು</translation>
 <translation id="3764248359515129699">ಪರಂಪರಾನುಗತ ಪ್ರಮಾಣಪತ್ರ ಪ್ರಾಧಿಕಾರಗಳ ಪಟ್ಟಿಗೆ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಅಗತ್ಯಗಳ ಜಾರಿಗೊಳಿಸುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.
 
-      ಈ ಕಾರ್ಯನೀತಿಯು subjectPublicKeyInfo ಹ್ಯಾಶಸ್‌ಗಳ ಪ್ರಮಾಣಪತ್ರ ಸರಪಳಿಗಾಗಿ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಪ್ರಕಟಣೆಗಳ ಅವಶ್ಯಕತೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಇದು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಎಂಟರ್‌ಪ್ರೈಸ್ ಹೋಸ್ಟ್‌ಗಳಿಗಾಗಿ ಬಳಸುವುದನ್ನು ಮುಂದುವರೆಸಲು ಬಿಡುವುದಿಲ್ಲ ಏಕೆಂದರೆ ಅವುಗಳನ್ನು ಸಾರ್ವಜನಿಕವಾಗಿ ಬಹಿರಂಗ ಪಡಿಸಿಲ್ಲ.
+      ಈ ಕಾರ್ಯನೀತಿಯು, ನಿರ್ದಿಷ್ಟಪಡಿಸಿರುವ subjectPublicKeyInfo ಹ್ಯಾಶ್‍ಗಳ ಪೈಕಿ ಒಂದರೊಂದಿಗೆ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಹೊಂದಿರುವ ಪ್ರಮಾಣಪತ್ರ ಸರಪಳಿಗಾಗಿ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಬಹಿರಂಗಪಡಿಸುವಿಕೆಯ ಅಗತ್ಯಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವುದನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಇದು ಎಂಟರ್‌ಪ್ರೈಸ್ ಹೋಸ್ಟ್‌ಗಳಿಗಾಗಿ ಬಳಸಲು ಅನ್ಯಥಾ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿಲ್ಲ ಎಂದು ಪರಿಗಣಿಸಿರುವ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಅವುಗಳನ್ನು ಸೂಕ್ತವಾಗಿ ಸಾರ್ವಜನಿಕವಾಗಿ ಬಹಿರಂಗಪಡಿಸಿಲ್ಲ.
 
-     ಈ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಸೆಟ್‌ ಮಾಡಿದಾಗ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬೇಕಾದ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಜಾರಿಗೊಳಿಸುವ ಸಲುವಾಗಿ, ಪಾರಂಪರಿಕ ಪ್ರಮಾಣಪತ್ರ ಪ್ರಾಧಿಕಾರ (CA) ಎಂದು ಗುರುತಿಸಲ್ಪಟ್ಟ CA ಪ್ರಮಾಣಪತ್ರ ಹ್ಯಾಶ್‌ನ subjectPublicKeyInfo ನಲ್ಲಿ ಗೋಚರಿಸಬೇಕು. ಒಂದು ಪಾರಂಪರಿಕ CA ಡಿಫಾಲ್ಟ್ ಆಗಿ <ph name="PRODUCT_NAME" /> ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಂಗಳಿಂದ ಸಾರ್ವಜನಿಕವಾಗಿ ನಂಬಲರ್ಹವಾದ CA ಆಗಿದೆ, ಆದರೆ Android ಮುಕ್ತ ಮೂಲ ಪ್ರಾಜೆಕ್ಟ್‌‌ ಅಥವಾ <ph name="PRODUCT_OS_NAME" /> ನಿಂದ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿಲ್ಲ.
+     ಈ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಹೊಂದಿಸಿದಾಗ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಜಾರಿಗೊಳಿಸುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯವಾಗಿರಿಸುವ ಸಲುವಾಗಿ, ಪರಂಪರಾನುಗತ ಪ್ರಮಾಣಪತ್ರ ಪ್ರಾಧಿಕಾರ (CA) ಎಂದು ಗುರುತಿಸಲ್ಪಟ್ಟ CA ಪ್ರಮಾಣಪತ್ರದಲ್ಲಿ subjectPublicKeyInfo ನಲ್ಲಿ ಕಾಣಿಸುವಂತಹ ಹ್ಯಾಶ್ ಇರಬೇಕು. ಒಂದು ಪರಂಪರಾನುಗತ CA, ಡೀಫಾಲ್ಟ್ ಆಗಿ <ph name="PRODUCT_NAME" /> ಬೆಂಬಲಿಸುವಂತಹ ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಂಗಳಿಂದ ಸಾರ್ವಜನಿಕವಾಗಿ ನಂಬಲರ್ಹವಾದ CA ಆಗಿದೆ, ಆದರೆ Android ಓಪನ್ ಸೋರ್ಸ್ ಪ್ರಾಜೆಕ್ಟ್‌‌ ಅಥವಾ <ph name="PRODUCT_OS_NAME" /> ನಿಂದ ಇದು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿಲ್ಲ.
 
-      ಒಂದು subjectPublicKeyInfo ಹ್ಯಾಶ್‌ ಅನ್ನು ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್ ಹೆಸರನ್ನು ಸಂಯೋಜನೆ ಮಾಡುವ ಮೂಲಕ ಸೂಚಿಸಲಾಗುತ್ತದೆ, "/" ನ ಅಕ್ಷರ, ಮತ್ತು ಆ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌ನ Base64 ಎನ್‌ಕೋಡಿಂಗ್‌ DER-ಎನ್‌ಕೋಡೆಡ್‌ಗೆ ಅನ್ವಯಿಸಲಾದ subjectPublicKeyInfo ನಿರ್ದಿಷ್ಟವಾದ ಪ್ರಮಾಣಪತ್ರ. ಈ Base64 ಎನ್‌ಕೋಡಿಂಗ್‌ RFC 7469, ವಿಭಾಗ 2.4 ರಲ್ಲಿ ವಿವರಿಸಿದಂತೆ SPKI ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ನಂತೆಯೇ ಇರುವ ಸ್ವರೂಪವಾಗಿದೆ. ಗುರುತಿಸದ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗುತ್ತದೆ. "sha256" ಮಾತ್ರವೇ ಈ ಸಮಯದಲ್ಲಿ ಬೆಂಬಲಿತವಾದ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌.
+      subjectPublicKeyInfo ಹ್ಯಾಶ್‌ ಅನ್ನು ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್ ಹೆಸರು, "/"  ಅಕ್ಷರವನ್ನು ಸಂಯೋಜಿಸುವ ಮೂಲಕ ಸೂಚಿಸಲಾಗುತ್ತದೆ ಹಾಗೂ ಆ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌ನ Base64 ಎನ್‌ಕೋಡಿಂಗ್‌ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಪ್ರಮಾಣಪತ್ರದ DER-ಎನ್‌ಕೋಡ್ ಮಾಡಲ್ಪಟ್ಟ subjectPublicKeyInfo ಗೆ ಅನ್ವಯಿಸಲಾಗಿದೆ. ಈ Base64 ಎನ್‌ಕೋಡಿಂಗ್‌ RFC 7469, ವಿಭಾಗ 2.4 ರಲ್ಲಿ ವಿವರಿಸಿದಂತೆ SPKI ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ನಂತೆಯೇ ಇರುವ ಫಾರ್ಮ್ಯಾಟ್ ಆಗಿದೆ. ಗುರುತಿಸದ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗುತ್ತದೆ. "sha256" ಮಾತ್ರವೇ ಈ ಸಮಯದಲ್ಲಿ ಬೆಂಬಲಿತವಾದ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌ ಆಗಿದೆ.
 
-      ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, ಪ್ರಮಾಣಪತ್ರದ ಪಾರದರ್ಶಕತೆಯ ಮೋಲಕ ಬಹಿರಂಗ ಪಡಿಸಬೇಕಾದ ಯಾವುದೇ ಪ್ರಮಾಣಪತ್ರವನ್ನು ನಂಬಲರ್ಹವಲ್ಲದೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ ಪ್ರಮಾಣಪತ್ರ ಪಾದರ್ಶಕತೆ ನೀತಿಯ ಪ್ರಕಾರ ಬಹಿರಂಗ ಪಡಿಸದಿದ್ದರೆ.</translation>
+      ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಕಾರ್ಯನೀತಿಯ ಪ್ರಕಾರ ಬಹಿರಂಗಪಡಿಸದಿದ್ದರೆ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆಯ ಮೂಲಕ ಬಹಿರಂಗಪಡಿಸಬೇಕಾದ ಯಾವುದೇ ಪ್ರಮಾಣಪತ್ರವನ್ನು ನಂಬಲರ್ಹವಲ್ಲದೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="3765260570442823273">ತಟಸ್ಥ ಲಾಗ್-ಔಟ್ ಎಚ್ಚರಿಕೆ ಸಂದೇಶದ ಅವಧಿ</translation>
 <translation id="377044054160169374">ನಿಂದನೀಯ ಅನುಭವ ತಡೆಗಟ್ಟುವಿಕೆಯ ಜಾರಿ</translation>
 <translation id="3780152581321609624">Kerberos SPN ನಲ್ಲಿ ಪ್ರಮಾಣಿತವಲ್ಲದ ಪೋರ್ಟ್ ಅನ್ನು ಸೇರಿಸು</translation>
@@ -1510,13 +1510,13 @@
 <translation id="5370279767682621504">ಡಿಫಾಲ್ಟ್ ಅಲ್ಲದ ಪೋರ್ಟ್‌ಗಳಲ್ಲಿ HTTP/0.9 ಬೆಂಬಲವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="5378985487213287085">ಡೆಸ್ಕ್‌ಟಾಪ್ ಅಧಿಸೂಚನೆಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆಯೆ ಎಂದು ಹೊಂದಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಡೆಸ್ಕ್‌ಟಾಪ್ ಅಧಿಸೂಚನೆಗಳ ಪ್ರದರ್ಶನವನ್ನು ಡಿಫಾಲ್ಟ್ ಆಗಿ ಅನುಮತಿಸಬಹುದು, ಡಿಫಾಲ್ಟ್ ಆಗಿ ನಿರಾಕರಿಸಬಹುದು ಅಥವಾ ಡೆಸ್ಕ್‌ಟಾಪ್ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಬೇಕೆಂದಾಗಲೆಲ್ಲ ಬಳಕೆದಾರರನ್ನು ಕೇಳಬಹುದಾಗಿದೆ. ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೆಯೆ ಬಿಟ್ಟರೆ, 'AskNotifications' ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಮತ್ತು ಬಳಕೆದಾರರು ಅದನ್ನು ಬದಲಿಸಬಹುದಾಗಿದೆ.</translation>
 <translation id="538108065117008131">ಮುಂದಿನ ವಿಷಯದ ವಿಧಾನಗಳನ್ನು ನಿರ್ವಹಿಸಲು <ph name="PRODUCT_FRAME_NAME" /> ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ.</translation>
-<translation id="5391363090783552279">ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದಲ್ಲಿ, <ph name="PRODUCT_NAME" /> ಕೇವಲ RFC1918/RFC4913 ಖಾಸಗಿ ವಿಳಾಸಗಳಷ್ಟೇ ಅಲ್ಲದೆ ಎಲ್ಲಾ IP ವಿಳಾಸಗಳಲ್ಲಿ ಬಿತ್ತರಿಸುವ ಸಾಧನಗಳಿಗೆ  ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ.
+<translation id="5391363090783552279">ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದಲ್ಲಿ, <ph name="PRODUCT_NAME" /> ಕೇವಲ RFC1918/RFC4913 ಖಾಸಗಿ ವಿಳಾಸಗಳಷ್ಟೇ ಅಲ್ಲದೆ ಎಲ್ಲಾ IP ವಿಳಾಸಗಳಲ್ಲಿ ಬಿತ್ತರಿಸುವ ಸಾಧನಗಳಿಗೆ  ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ.
 
-         ಈ ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದಲ್ಲಿ, RFC1918/RFC4913 ಖಾಸಗಿ ವಿಳಾಸಗಳಲ್ಲಿನ ಬಿತ್ತರಿಸುವ ಸಾಧನಗಳಿಗೆ ಮಾತ್ರ <ph name="PRODUCT_NAME" /> ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ.
+         ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದಲ್ಲಿ, RFC1918/RFC4913 ಖಾಸಗಿ ವಿಳಾಸಗಳಲ್ಲಿ ಮಾತ್ರ ಬಿತ್ತರಿಸುವ ಸಾಧನಗಳಿಗೆ <ph name="PRODUCT_NAME" /> ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ.
 
-          ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದಲ್ಲಿ, CastAllowAllIPs ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸದ ಹೊರತು RFC1918/RFC4913 ಖಾಸಗಿ ವಿಳಾಸಗಳಲ್ಲಿನ ಬಿತ್ತರಿಸುವ ಸಾಧನಗಳಿಗೆ ಮಾತ್ರ <ph name="PRODUCT_NAME" /> ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ.
+          ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದಲ್ಲಿ, CastAllowAllIPs ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸದ ಹೊರತು RFC1918/RFC4913 ಖಾಸಗಿ ವಿಳಾಸಗಳಲ್ಲಿ ಮಾತ್ರ ಬಿತ್ತರಿಸುವ ಸಾಧನಗಳಿಗೆ <ph name="PRODUCT_NAME" /> ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ.
 
-          "EnableMediaRouter" ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದರೆ, ಈ ನೀತಿಯ ಮೌಲ್ಯವು ನಂತರ ಯಾವುದೇ ಪರಿಣಾಮವನ್ನು ಹೊಂದಿರುವುದಿಲ್ಲ.</translation>
+          "EnableMediaRouter" ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದರೆ, ಈ ಕಾರ್ಯನೀತಿಯ ಮೌಲ್ಯವು ಯಾವುದೇ ಪರಿಣಾಮವನ್ನು ಹೊಂದಿರುವುದಿಲ್ಲ.</translation>
 <translation id="5392172595902933844">Android ಸ್ಥಿತಿಯ ಕುರಿತಾದ ಮಾಹಿತಿಯನ್ನು ಸರ್ವರ್‌ಗೆ ಮರಳಿ ಕಳುಹಿಸಲಾಗುತ್ತದೆ.
 
       ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂಬುದಾಗಿ ಹೊಂದಿಸಿದರೆ ಅಥವಾ ಹೊಂದಿಸದೇ ಇದ್ದರೆ, ಯಾವುದೇ ಸ್ಥಿತಿ ಮಾಹಿತಿಯನ್ನು ವರದಿ ಮಾಡಲಾಗುವುದಿಲ್ಲ.
@@ -1958,8 +1958,8 @@
 <translation id="6702257826895463228">ಏಕಕಾಲದಲ್ಲಿ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಲು ಮತ್ತು ಪಾಪ್-ಅಪ್‌ಗಳನ್ನು ತೆರೆಯಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸುತ್ತದೆ.
 
       ಪೂರ್ಣ ವಿವರಣೆಗಾಗಿ, https://www.chromestatus.com/features/5675755719622656 ನೋಡಿ.
-      ಈ ನೀತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, ಏಕಕಾಲದಲ್ಲಿ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಲು ಮತ್ತು ಹೊಸ ವಿಂಡೋ/ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೆರೆಯಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸುತ್ತದೆ.
-      ಈ ನೀತಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, ಏಕಕಾಲದಲ್ಲಿ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಲು ಮತ್ತು ಹೊಸ ವಿಂಡೋ/ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೆರೆಯಲು ಸೈಟ್‌ಗಳಿಗೆ ನಿರಾಕರಿಸುತ್ತದೆ.</translation>
+      ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, ಏಕಕಾಲದಲ್ಲಿ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಲು ಮತ್ತು ಹೊಸ ವಿಂಡೋ/ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೆರೆಯಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸುತ್ತದೆ.
+      ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, ಏಕಕಾಲದಲ್ಲಿ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಲು ಮತ್ತು ಹೊಸ ವಿಂಡೋ/ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೆರೆಯಲು ಸೈಟ್‌ಗಳಿಗೆ ನಿರಾಕರಿಸುತ್ತದೆ.</translation>
 <translation id="6724842112053619797">ನೀವು ಈ ಸೆಟ್ಟಿಂಗ್‌ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಸ್ವಯಂ ಭರ್ತಿ ಡೇಟಾ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಇತ್ಯಾದಿಯಂತಹ <ph name="PRODUCT_NAME" />ಪ್ರೊಫೈಲ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿತವಾದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಇದನ್ನು <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" />ನೀತಿಯ ಮೂಲಕ ನಿರ್ವಾಹಕರು ಸೂಚಿಸಲಾದ ರೋಮಿಂಗ್ ಬಳಕೆದಾರ ಪ್ರೊಫೈಲ್ ಫೋಲ್ಡರ್ ಅಥವಾ ಸ್ಥಳದಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾದ ಫೈಲ್‌ಗೆ ಸಹ ಬರೆಯಲಾಗುತ್ತದೆ.
 ಈ ನೀತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದಾಗ ಕ್ಲೌಡ್‌ ಸಿಂಕ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.
  
@@ -2012,7 +2012,7 @@
 
       ಬಳಕೆದಾರರಿಗೆ ಈ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಿಸಲು ಅಥವಾ ಅತಿಕ್ರಮಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="6908640907898649429">ಡಿಫಾಲ್ಟ್ ಹುಡುಕಾಟ ನೀಡುಗನನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತದೆ. ಬಳಕೆದಾರನು ಬಳಸುವ ಅಥವಾ ಡಿಫಾಲ್ಟ್ ಹುಡುಕಾಟವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಆರಿಸುವ ಡಿಫಾಲ್ಟ್ ಹುಡುಕಾಟ ನೀಡುಗನನ್ನು ನೀವು ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು.</translation>
-<translation id="6913068954484253496">ಎಲ್ಲಾ IP ವಿಳಾಸಗಳಲ್ಲಿ ಬಿತ್ತರಿಸುವ ಸಾಧನಗಳಿಗೆ ಸಂಪರ್ಕಗೊಳ್ಳಲು <ph name="PRODUCT_NAME" /> ಅನುಮತಿಸಿ</translation>
+<translation id="6913068954484253496">ಎಲ್ಲಾ IP ವಿಳಾಸಗಳಲ್ಲಿ ಬಿತ್ತರಿಸುವ ಸಾಧನಗಳಿಗೆ ಸಂಪರ್ಕಗೊಳ್ಳಲು <ph name="PRODUCT_NAME" /> ಗೆ ಅನುಮತಿಸಿ</translation>
 <translation id="6915442654606973733">ಮಾತಿನ ಪ್ರತಿಕ್ರಿಯೆ ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.
 
           ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದರೆ, ಮಾತಿನ ಪ್ರತಿಕ್ರಿಯೆಯು ಯಾವಾಗಲೂ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ.
@@ -2272,13 +2272,13 @@
 
       ನೀವು ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸಿದರೆ, <ph name="PRODUCT_NAME" /> ಕೆಲವು ಪ್ರಕಾರದ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ತಡೆಯುತ್ತದೆ, ಮತ್ತು ಬಳಕೆದಾರರು ಯಾವುದೇ ಸುರಕ್ಷತೆ ಎಚ್ಚರಿಕೆಗಳನ್ನು ಬೈಪಾಸ್‌ ಮಾಡಲು ಬಿಡುವುದಿಲ್ಲ.
 
-      'ಅಪಾಯಕಾರಿ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ' ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿದಾಗ, ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಎಚ್ಚರಿಕೆಗಳಿಗೆ ಒಳಗೊಂಡಿರುವ ಡೌನ್‍ಲೋಡ್‍ಗಳನ್ನು ಹೊರತುಪಡಿಸಿ, ಬೇರೆಲ್ಲಾ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ.
+      'ಅಪಾಯಕಾರಿ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ' ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿದಾಗ, ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಎಚ್ಚರಿಕೆಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಡೌನ್‍ಲೋಡ್‍ಗಳನ್ನು ಹೊರತುಪಡಿಸಿ, ಬೇರೆಲ್ಲಾ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ.
 
       'ಸಂಭವನೀಯವಾಗಿ ಅಪಾಯಕಾರಿಯಾಗಿರುವ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ' ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿದಾಗ, ಸಂಭವನೀಯವಾಗಿ ಅಪಾಯಕಾರಿಯಾಗಿರುವ ಡೌನ್‍ಲೋಡ್‍ಗಳ ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಎಚ್ಚರಿಕೆಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ಹೊರತುಪಡಿಸಿ ಬೇರೆಲ್ಲಾ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ.
 
       'ಎಲ್ಲಾ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ' ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿದಾಗ, ಎಲ್ಲಾ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ.
 
-      ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಸೆಟ್‌ ಮಾಡದೇ ಇದ್ದಾಗ (ಅಥವಾ 'ಯಾವುದೇ ವಿಶೇಷ ನಿರ್ಬಂಧನೆಗಳಿಲ್ಲ' ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿದಾಗ), ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ವಿಶ್ಲೇಷಣಾ ಫಲಿತಾಂಶಗಳನ್ನು ಆಧರಿಸಿ, ಡೌನ್‌ಲೋಡ್‌ಗಳು ಸಾಮಾನ್ಯ ಭದ್ರತಾ ನಿರ್ಬಂಧಗಳಿಗೆ ಒಳಪಡುತ್ತವೆ.
+      ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಇದ್ದಾಗ (ಅಥವಾ 'ಯಾವುದೇ ವಿಶೇಷ ನಿರ್ಬಂಧನೆಗಳಿಲ್ಲ' ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿದಾಗ), ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ವಿಶ್ಲೇಷಣಾ ಫಲಿತಾಂಶಗಳನ್ನು ಆಧರಿಸಿ, ಡೌನ್‌ಲೋಡ್‌ಗಳು ಸಾಮಾನ್ಯ ಭದ್ರತಾ ನಿರ್ಬಂಧಗಳಿಗೆ ಒಳಪಡುತ್ತವೆ.
  
       ಈ ನಿರ್ಬಂಧಗಳು ವೆಬ್ ಪುಟದ ವಿಷಯದಿಂದ ಟ್ರಿಗರ್ ಆಗಿರುವ ಡೌನ್‍ಲೋಡ್‍ಗಳ ಜೊತೆಗೆ 'ಡೌನ್‌ಲೋಡ್ ಲಿಂಕ್...' ಸಂದರ್ಭದ ಮೆನು ಆಯ್ಕೆಗೆ ಅನ್ವಯಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ಗಮನಿಸಿ. ಪ್ರಸ್ತುತ ಪ್ರದರ್ಶಿತವಾಗಿರುವ ಪುಟದ ಉಳಿಸುವಿಕೆ / ಡೌನ್‌ಲೋಡ್‌ಗೆ ಈ ನಿರ್ಬಂಧಗಳು ಅನ್ವಯಿಸುವುದಿಲ್ಲ, ಅಂತೆಯೇ ಮುದ್ರಣದ ಆಯ್ಕೆಗಳಲ್ಲಿ, PDF ರೂಪದಲ್ಲಿ ಉಳಿಸುವುದಕ್ಕೂ ಇವು ಅನ್ವಯಿಸುವುದಿಲ್ಲ.
 
@@ -2363,16 +2363,16 @@
      ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡದೇ ಇದ್ದರೆ ಬಳಕೆದಾರರಿಗೆ Android ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ Android ಬ್ಯಾಕಪ್ ಸೇವೆಯನ್ನು ಆನ್ ಮತ್ತು ಆಫ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation>
 <translation id="780603170519840350">subjectPublicKeyInfo ಹ್ಯಾಶ್‍ಗಳ ಪಟ್ಟಿಗೆ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಅಗತ್ಯಗಳ ಜಾರಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.
 
-      ಈ ನೀತಿಯು subjectPublicKeyInfo ಹ್ಯಾಶಸ್‌ಗಳ ಪ್ರಮಾಣಪತ್ರ ಸರಪಳಿಗಾಗಿ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಪ್ರಕಟಣೆಗಳ ಅವಶ್ಯಕತೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಇದು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಎಂಟರ್‌ಪ್ರೈಸ್ ಹೋಸ್ಟ್‌ಗಳಿಗಾಗಿ ಬಳಸುವುದನ್ನು ಮುಂದುವರೆಸಲು ಬಿಡುವುದಿಲ್ಲ ಏಕೆಂದರೆ ಅವುಗಳನ್ನು ಸಾರ್ವಜನಿಕವಾಗಿ ಬಹಿರಂಗ ಪಡಿಸಿಲ್ಲ.
+      ಈ ಕಾರ್ಯನೀತಿಯು, ನಿರ್ದಿಷ್ಟಪಡಿಸಿರುವ subjectPublicKeyInfo ಹ್ಯಾಶ್‍ಗಳ ಪೈಕಿ ಒಂದರೊಂದಿಗೆ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಹೊಂದಿರುವ ಪ್ರಮಾಣಪತ್ರ ಸರಪಳಿಗಾಗಿ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಬಹಿರಂಗಪಡಿಸುವಿಕೆಯ ಅಗತ್ಯಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವುದನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಇದು ಎಂಟರ್‌ಪ್ರೈಸ್ ಹೋಸ್ಟ್‌ಗಳಿಗಾಗಿ ಬಳಸಲು ಅನ್ಯಥಾ ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲ ಎಂದು ಪರಿಗಣಿಸಿರುವ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಅವುಗಳನ್ನು ಸೂಕ್ತವಾಗಿ ಸಾರ್ವಜನಿಕವಾಗಿ ಬಹಿರಂಗಪಡಿಸಿಲ್ಲ.
 
-     ಈ ನೀತಿಯನ್ನು ಸೆಟ್ ಮಾಡಿದಾಗ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬೇಕಾದ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಜಾರಿಗೊಳಿಸಲು, ಕೆಳಗಿನ ಷರತ್ತಗಳಲ್ಲಿ ಒಂದನ್ನು ಪೂರೈಸಬೇಕು:
-      1. subjectPublicKeyInfo ಹ್ಯಾಶ್‌ ಸರ್ವರ್‌ನ ಪ್ರಮಾಣಪತ್ರದ್ದಾಗಿರುತ್ತದೆ.
-      2. ಪ್ರಮಾಣಪತ್ರದ ಸರಪಳಿಗಳಲ್ಲಿ subjectPublicKeyInfo ಹ್ಯಾಶ್‌ನ CA ಪ್ರಮಾಣಪತ್ರದಲ್ಲಿ ಗೋಚರಿಸುತ್ತದೆ, ಆ CA ಪ್ರಮಾಣಪತ್ರವು X.509v3 ಹೆಸರಿನ ನಿರ್ಬಂಧಿತ ವಿಸ್ತರಣೆ, ಅನುಮತಿಸಲಾದ ಸಬ್‌ಟ್ರೀಗಳಲ್ಲಿ ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಡೈರೆಕ್ಟರಿಯ ಹೆಸರಿನ ಮೂಲಕ ನಿರ್ಬಂಧಿಸಲ್ಪಟ್ಟ ಹೆಸರು ಇರುತ್ತದೆ, ಮತ್ತು ಡೈರೆಕ್ಟರಿಯ ಹೆಸರಿನಲ್ಲಿ ಸಂಸ್ಥೆಯ ಹೆಸರಿನ ಗುಣಲಕ್ಷಣಗಳಿರುತ್ತದೆ. 
-      3. ಪ್ರಮಾಣಪತ್ರದ ಸರಪಳಿಗಳಲ್ಲಿ subjectPublicKeyInfo ಹ್ಯಾಶ್‌ನ CA ಪ್ರಮಾಣಪತ್ರದಲ್ಲಿ ಗೋಚರಿಸುತ್ತದೆ, ಆ CA ಪ್ರಮಾಣಪತ್ರವು ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಸಂಸ್ಥೆಯ ಹೆಸರಿನ ಗುಣಲಕ್ಷಣಗಳು ಪ್ರಮಾಣಪತ್ರದ ವಿಷಯದಲ್ಲಿರುತ್ತದೆ, ಮತ್ತು ಸರ್ವರ್‌ನ ಪ್ರಮಾಣಪತ್ರವು ಅದೇ ಸಂಖ್ಯೆಯ ಸಂಸ್ಥೆಯ ಹೆಸರಿನ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ.
+     ಈ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಹೊಂದಿಸಿದಾಗ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಜಾರಿಗೊಳಿಸುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯವಾಗಿರಿಸುವ ಸಲುವಾಗಿ, ಕೆಳಗಿನ ಷರತ್ತುಗಳಲ್ಲಿ ಒಂದನ್ನು ಪೂರೈಸಬೇಕು:
+      1. ಹ್ಯಾಶ್‌, ಸರ್ವರ್‌ ಪ್ರಮಾಣಪತ್ರದ subjectPublicKeyInfo ನದ್ದಾಗಿರುತ್ತದೆ.
+      2. ಹ್ಯಾಶ್, subjectPublicKeyInfo ನದ್ದಾಗಿರುತ್ತದೆ ಮತ್ತು ಇದು ಪ್ರಮಾಣಪತ್ರ ಸರಪಳಿಯಲ್ಲಿ CA ಪ್ರಮಾಣಪತ್ರದಲ್ಲಿ ಗೋಚರಿಸುತ್ತದೆ, ಆ CA ಪ್ರಮಾಣಪತ್ರವು X.509v3 nameConstraints ವಿಸ್ತರಣೆ ಮೂಲಕ ನಿರ್ಬಂಧಿಸಲ್ಪಟ್ಟಿದೆ, permittedSubtrees ನಲ್ಲಿ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು directoryName nameConstraints ಇರುತ್ತದೆ, ಮತ್ತು directoryName, organizationName ಗುಣಲಕ್ಷಣವನ್ನು ಹೊಂದಿರುತ್ತದೆ. 
+      3. ಹ್ಯಾಶ್, subjectPublicKeyInfo ನದ್ದಾಗಿರುತ್ತದೆ ಮತ್ತು ಇದು ಪ್ರಮಾಣಪತ್ರ ಸರಪಳಿಯಲ್ಲಿ CA ಪ್ರಮಾಣಪತ್ರದಲ್ಲಿ ಗೋಚರಿಸುತ್ತದೆ, CA ಪ್ರಮಾಣಪತ್ರವು ಪ್ರಮಾಣಪತ್ರ ವಿಷಯದಲ್ಲಿ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು organizationName ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ ಮತ್ತು ಸರ್ವರ್‌ನ ಪ್ರಮಾಣಪತ್ರವು ಅಷ್ಟೇ ಸಂಖ್ಯೆಯ organizationName ಗುಣಲಕ್ಷಣಗಳನ್ನು, ಅದೇ ಕ್ರಮದಲ್ಲಿ ಮತ್ತು ಬೈಟ್-ಗೆ-ಬೈಟ್ ನಂತೆ ತದ್ರೂಪ ಮೌಲ್ಯದ ಜೊತೆಗೆ ಹೊಂದಿರುತ್ತದೆ.
 
-      ಒಂದು subjectPublicKeyInfo ಹ್ಯಾಶ್‌ ಅನ್ನು ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್ ಹೆಸರನ್ನು ಸಂಯೋಜನೆ ಮಾಡುವ ಮೂಲಕ ಸೂಚಿಸಲಾಗುತ್ತದೆ, "/" ನ ಅಕ್ಷರ, ಮತ್ತು ಆ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌ನ Base64 ಎನ್‌ಕೋಡಿಂಗ್‌ DER-ಎನ್‌ಕೋಡೆಡ್‌ಗೆ ಅನ್ವಯಿಸಲಾದ subjectPublicKeyInfo ನಿರ್ದಿಷ್ಟವಾದ ಪ್ರಮಾಣಪತ್ರ. ಈ Base64 ಎನ್‌ಕೋಡಿಂಗ್‌ RFC 7469, ವಿಭಾಗ 2.4 ರಲ್ಲಿ ವಿವರಿಸಿದಂತೆ SPKI ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ನಂತೆಯೇ ಇರುವ ಸ್ವರೂಪವಾಗಿದೆ. ಗುರುತಿಸದ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗುತ್ತದೆ. "sha256" ಮಾತ್ರವೇ ಈ ಸಮಯದಲ್ಲಿ ಬೆಂಬಲಿತವಾದ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌.
+      subjectPublicKeyInfo ಹ್ಯಾಶ್‌ ಅನ್ನು ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್ ಹೆಸರು, "/" ಅಕ್ಷರವನ್ನು ಸಂಯೋಜಿಸುವ ಮೂಲಕ ಸೂಚಿಸಲಾಗುತ್ತದೆ, ಮತ್ತು ಆ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‍ನ Base64 ಎನ್‌ಕೋಡಿಂಗ್‌ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಪ್ರಮಾಣಪತ್ರದ DER-ಎನ್‌ಕೋಡ್ ಮಾಡಲ್ಪಟ್ಟ subjectPublicKeyInfo ಗೆ ಅನ್ವಯಿಸಲಾಗಿದೆ. ಈ Base64 ಎನ್‌ಕೋಡಿಂಗ್‌ RFC 7469, ವಿಭಾಗ 2.4 ರಲ್ಲಿ ವಿವರಿಸಿದಂತೆ SPKI ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ನಂತೆಯೇ ಇರುವ ಫಾರ್ಮ್ಯಾಟ್‍ನದ್ದಾಗಿದೆ. ಗುರುತಿಸದ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗುತ್ತದೆ. "sha256" ಮಾತ್ರವೇ ಈ ಸಮಯದಲ್ಲಿ ಬೆಂಬಲಿತವಾದ ಹ್ಯಾಶ್ ಅಲ್ಗಾರಿದಮ್‌.
 
-      ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, ಪ್ರಮಾಣಪತ್ರದ ಪಾರದರ್ಶಕತೆಯ ಮೂಲಕ ಬಹಿರಂಗ ಪಡಿಸಬೇಕಾದ ಯಾವುದೇ ಪ್ರಮಾಣಪತ್ರವನ್ನು ನಂಬಲರ್ಹವಲ್ಲದೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ ಪ್ರಮಾಣಪತ್ರ ಪಾದರ್ಶಕತೆ ನೀತಿಯ ಪ್ರಕಾರ ಬಹಿರಂಗ ಪಡಿಸದಿದ್ದರೆ.</translation>
+      ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ಕಾರ್ಯನೀತಿಯ ಪ್ರಕಾರ ಬಹಿರಂಗಪಡಿಸದಿದ್ದರೆ ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆಯ ಮೂಲಕ ಬಹಿರಂಗಪಡಿಸಬೇಕಾದ ಯಾವುದೇ ಪ್ರಮಾಣಪತ್ರವನ್ನು ನಂಬಲರ್ಹವಲ್ಲದೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="7818131573217430250">ಲಾಗಿನ್ ಪರದೆಯಲ್ಲಿ ಉನ್ನತ ಕಾಂಟ್ರಾಸ್ಟ್ ಮೋಡ್‌ನ ಡಿಫಾಲ್ಟ್ ಸ್ಥಿತಿಯನ್ನು ಹೊಂದಿಸಿ</translation>
 <translation id="7822837118545582721">ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂಬುದಕ್ಕೆ ಹೊಂದಿಸಿದಾಗ, ಬಳಕೆದಾರರಿಗೆ ಬಾಹ್ಯ ಸಂಗ್ರಹಣಾ ಸಾಧನಗಳಿಗೆ ಏನನ್ನೂ ಬರೆಯಲಾಗುವುದಿಲ್ಲ.
 
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 4f2246b..afaba1d 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -419,6 +419,27 @@
           이 정책이 설정되어 있지 않으면 경고 대화상자가 표시되지 않습니다.
 
           정책 값은 밀리초 단위로 지정해야 하며, 유휴 지연 시간보다 작거나 같도록 값이 잘립니다.</translation>
+<translation id="2289578386193672044">사용자가 개입하지 않아도 자동으로 설치되고 사용자가 삭제하거나
+          사용 중지할 수 없는 앱 및 확장 프로그램의 목록을 지정합니다. 
+          앱/확장 프로그램의 향후 버전에서 요청하는 추가 권한을 포함한
+          앱/확장 프로그램에서 요청하는 모든 권한은 사용자의 개입 없이
+          암묵적으로 허용됩니다. 또한 권한은 
+          enterprise.deviceAttributes 및 enterprise.platformKeys
+          확장 프로그램 API에 부여됩니다
+          (이 두 API는 강제 설치되지 않은
+          앱/확장 프로그램에는 사용할 수 없음).
+
+          이 정책은 잠재적으로 충돌할 수 있는 <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> 정책보다 우선합니다. 이전에 강제 설치된 앱 또는 확장 프로그램이 목록에서 삭제되면 <ph name="PRODUCT_NAME" />에 의해 자동으로 제거됩니다.
+
+          <ph name="MS_AD_NAME" /> 도메인에 가입되지 않은 Windows 인스턴스는 Chrome 웹 스토어에 포함된 앱/확장 프로그램으로만 강제 설치가 제한됩니다.
+
+          확장 프로그램의 소스 코드는 사용자가 개발자 도구를 통해 변경할 수 있습니다(확장 프로그램의 오작동을 야기할 수 있음). 이 부분이 걱정된다면 <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> 정책을 설정해야 합니다.
+
+          정책의 각 목록 항목은 확장 프로그램 ID 및 선택적으로 ‘업데이트’ URL을 세미콜론(<ph name="SEMICOLON" />)으로 구분해 놓은 문자열입니다. 확장 프로그램 ID는 개발자 모드일 때 <ph name="CHROME_EXTENSIONS_LINK" />에서 확인되는 것과 같은 32자의 문자열입니다. ‘업데이트’ URL은 지정된 경우 <ph name="LINK_TO_EXTENSION_DOC1" />에서 설명한 것처럼 업데이트 매니페스트 XML 문서로 연결되어야 합니다. 기본적으로 Chrome 웹 스토어의 업데이트 URL(현재 ‘https://clients2.google.com/service/update2/crx’)이 사용됩니다. 이 정책에서 설정된 ‘업데이트’ URL은 초기 설치용으로만 사용되며, 이후 확장 프로그램의 업데이트는 확장 프로그램의 매니페스트에 있는 업데이트 URL을 사용합니다. 또한 ‘업데이트’ URL을 명시적으로 지정하는 것은 <ph name="PRODUCT_NAME" /> 버전 67 이상에서 필수입니다.
+
+          예를 들어 <ph name="EXTENSION_POLICY_EXAMPLE" />은(는) 표준 Chrome 웹 스토어 ‘업데이트’ URL에서 <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> 앱을 설치합니다. 확장 프로그램 호스팅에 관한 정보는 <ph name="LINK_TO_EXTENSION_DOC2" /> 페이지를 참조하세요.
+
+          이 정책이 설정되지 않으면 어떠한 앱 또는 확장 프로그램도 자동 설치되지 않고 사용자는 <ph name="PRODUCT_NAME" />의 모든 앱 또는 확장 프로그램도 제거할 수 있습니다.</translation>
 <translation id="2292084646366244343"><ph name="PRODUCT_NAME" />은(는) Google 웹 서비스를 사용하여 맞춤법 오류를 해결할 수 있습니다. 이 설정을 사용하면 해당 서비스를 항상 사용할 수 있습니다. 이 설정을 사용 중지하면 해당 서비스는 사용되지 않습니다.
 
       맞춤법 검사는 다운로드한 사전을 사용하여 계속 시행할 수 있으며, 이 정책은 온라인 서비스의 사용 여부만 제어합니다.
@@ -723,6 +744,16 @@
           이 정책은 선택사항입니다. 설정하지 않으면 검색어가 대체됩니다.
 
           이 정책은 'DefaultSearchProviderEnabled' 정책을 사용하도록 설정한 경우에만 적용됩니다.</translation>
+<translation id="3056439054015239107">
+      이 정책은 로그인 화면에 적용됩니다. 사용자 세션에 적용되는 <ph name="SITE_PER_PROCESS_POLICY_NAME" />도 참조하시기 바랍니다. 두 정책을 동일한 값으로 설정하는 것이 좋습니다. 두 정책을 다른 값으로 설정하면 사용자 세션을 시작할 때 지연이 발생할 수 있으며 사용자 정책으로 지정된 값이 적용됩니다.
+      IsolateOrigins 정책 설정을 확인하고, 격리하려는 사이트 목록이
+      포함된 IsolateOrigins를 사용하여 사이트를 격리하는 동시에
+      사용자에게 미치는 영향을 제한하는 것이 좋습니다. SitePerProcess
+      설정은 모든 사이트를 격리합니다.
+      정책을 사용 설정하면 각 사이트는 자체 프로세스로 작동합니다.
+      정책이 사용 중지되면 명시적인 사이트 격리는 이루어지지 않고 IsolateOrigins 및 SitePerProcess 필드 평가판이 사용 중지됩니다. 사용자는 계속해서 SitePerProcess를 직접 사용 설정할 수 있습니다.
+      정책을 구성하지 않으면 사용자가 이 설정을 변경할 수 있게 됩니다.
+      </translation>
 <translation id="306887062252197004">이 정책은 WebDriver 기능 사용자가 작업을 방해할 수 있는 정책을
       재정의할 수 있도록 해 줍니다.
 
@@ -888,6 +919,7 @@
 <translation id="3660562134618097814">로그인 중 SAML IdP 쿠키 전송</translation>
 <translation id="3709266154059827597">확장 프로그램 설치 차단목록 설정</translation>
 <translation id="3711895659073496551">일시중지</translation>
+<translation id="3715569262675717862">클라이언트 인증서를 기반으로 하는 인증</translation>
 <translation id="3736879847913515635">사용자 관리자에서 사용자 추가 허용</translation>
 <translation id="3737544779868348650">기기 네트워크 호스트 이름</translation>
 <translation id="3740754010292550733">업데이트를 위한 재실행 알림 표시 기간 설정</translation>
@@ -1924,6 +1956,15 @@
       시크릿 모드를 통해 다른 계정에 로그인하지 못하도록 하려면 IncognitoModeAvailability 정책을 사용하여 시크릿 모드를 차단해 보세요.
 
       참고: 사용자가 쿠키를 차단하면 인증되지 않은 상태로 Google 서비스에 액세스할 수 있습니다.</translation>
+<translation id="6738326937072482736"><ph name="TPM_FIRMWARE_UPDATE_TPM" /> 펌웨어 업데이트 기능의 사용 가능 여부 및 동작을 구성합니다.
+
+      개별 설정을 JSON 속성으로 지정할 수 있습니다.
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH" />: <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE" />(으)로 설정된 경우 사용자는 파워워시 절차를 실행하여 <ph name="TPM_FIRMWARE_UPDATE_TPM" /> 펌웨어 업데이트를 설치할 수 있습니다.
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE" />: <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE" />(으)로 설정된 경우 사용자는 <ph name="TPM_FIRMWARE_UPDATE_TPM" /> 펌웨어 업데이트 절차를 호출할 수 있습니다. 이 펌웨어 업데이트 절차는 엔터프라이즈 등록을 포함한 기기 상태를 유지하지만 사용자 데이터가 손실됩니다. 이 업데이트 절차는 버전 68부터 사용할 수 있습니다.
+
+      정책이 설정되지 않은 경우 <ph name="TPM_FIRMWARE_UPDATE_TPM" /> 펌웨어 업데이트 기능을 사용할 수 없습니다.</translation>
 <translation id="6757438632136860443"><ph name="FLASH_PLUGIN_NAME" /> 플러그인 실행을 허용할 사이트를 지정하는 URL 패턴 목록을 설정하도록 허용합니다.
 
           이 정책을 설정하지 않으면 'DefaultPluginsSetting' 정책(설정된 경우) 또는 사용자 개인 설정의 전체 기본값이 모든 사이트에 사용됩니다.</translation>
@@ -1944,6 +1985,16 @@
       메모리 정보는 옵션 값과 관계없이 페이지에 보고되지만 보안 상의 이유로 보고되는
       크기가 정량화되고 업데이트 빈도가 제한됩니다. 정확한 실시간 데이터를 얻으려면
       원격계측기와 같은 도구를 사용하시기 바랍니다.</translation>
+<translation id="6870914592443697993">
+      이 정책은 로그인 화면에 적용됩니다. 사용자 세션에 적용되는 <ph name="ISOLATE_ORIGINS_POLICY_NAME" />도 참조하시기 바랍니다. 두 정책을 동일한 값으로 설정하는 것이 좋습니다. 두 정책을 다른 값으로 설정하면 사용자 세션을 시작할 때 지연이 발생할 수 있으며 사용자 정책으로 지정된 값이 적용됩니다.
+      정책을 사용 설정하면 쉼표로 구분된 목록에 이름이 지정된 각 출처는
+      자체 프로세스로 작동합니다. 이 정책은 하위 도메인으로 이름이 지정된
+      출처도 격리합니다. 예를 들어, https://example.com/을
+      지정하면 https://foo.example.com/ 또한 https://example.com/
+      사이트의 일부로 여겨져 격리됩니다.
+      정책이 사용 중지되면 명시적인 사이트 격리는 이루어지지 않고 IsolateOrigins 및 SitePerProcess 필드 평가판이 사용 중지됩니다. 사용자는 계속해서 IsolateOrigins를 직접 사용 설정할 수 있습니다.
+      정책을 구성하지 않으면 로그인 화면에 플랫폼 기본 사이트 격리 설정이 사용됩니다.
+      </translation>
 <translation id="6894178810167845842">새 탭 페이지 URL</translation>
 <translation id="6899705656741990703">프록시 설정 자동 감지</translation>
 <translation id="6903814433019432303">이 정책은 판매 모드일 때만 사용할 수 있습니다.
@@ -2208,6 +2259,7 @@
       False로 설정하면 구성요소 업데이트가 사용 중지됩니다. 하지만 일부 구성요소는 이 정책에서 제외됩니다. 예를 들어 실행 코드가 포함되지 않거나, 브라우저 작동 방식을 심각하게 변경하지 않거나, 보안에 중요한 구성요소 업데이트는 사용 중지되지 않습니다.
       이와 같은 구성요소의 예로는 인증서 해지 목록 및 세이프 브라우징 데이터가 있습니다.
       세이프 브라우징에 관해 자세히 알아보려면 https://developers.google.com/safe-browsing 페이지를 참조하세요.</translation>
+<translation id="7566878661979235378">SAML 로그인 인증 유형</translation>
 <translation id="757395965347379751">이 설정이 사용 설정되었다면 <ph name="PRODUCT_NAME" />은(는) 로컬에 설치된 CA 인증서를 성공적으로 확인하고 체인을 구축하는 한 SHA-1 서명 인증서를 허용합니다.
 
       이 정책은 SHA-1 서명을 허용하는 운영체제 인증서 확인 스택에 따라 다릅니다. OS 업데이트가 SHA-1 인증서의 OS 처리를 변경하는 경우 이 정책은 더 이상 유효하지 않을 수 있습니다. 또한 이 정책은 기업에게 SHA-1에서 전환할 시간을 부여하는 임시 해결 방법으로 활용됩니다. 이 정책은 2019년 1월 1일쯤 삭제될 예정입니다.
@@ -2383,6 +2435,16 @@
 
           이 설정을 사용 중지하고 발신 UDP 연결이 방화벽에 의해 필터링되는 경우 이 컴퓨터는 로컬 네트워크 내에 있는 호스트 컴퓨터에만 연결할 수 있습니다.</translation>
 <translation id="7976157349247117979"><ph name="PRODUCT_NAME" /> 전송 대상의 이름</translation>
+<translation id="7978060394348264922">
+      IsolateOrigins 정책 설정을 확인하고, 격리하려는 사이트 목록이
+      포함된 IsolateOrigins를 사용하여 사이트를 격리하는 동시에
+      사용자에게 미치는 영향을 제한하는 것이 좋습니다. SitePerProcess
+      설정은 모든 사이트를 격리합니다.
+      정책을 사용 설정하면 각 사이트는 자체 프로세스로 작동합니다.
+      정책이 사용 중지되면 명시적인 사이트 격리는 이루어지지 않고 IsolateOrigins 및 SitePerProcess 필드 평가판이 사용 중지됩니다. 사용자는 계속해서 SitePerProcess를 직접 사용 설정할 수 있습니다.
+      정책을 구성하지 않으면 사용자가 이 설정을 변경할 수 있게 됩니다.
+      <ph name="PRODUCT_OS_NAME" />에서 <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> 기기 정책을 같은 값으로 설정하는 것이 좋습니다. 두 정책을 다른 값으로 설정하면 사용자 세션을 시작할 때 지연이 발생할 수 있으며 사용자 정책으로 지정된 값이 적용됩니다.
+      </translation>
 <translation id="7980227303582973781">특별한 제한 없음</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="802147957407376460">화면을 0도 회전</translation>
@@ -2582,6 +2644,13 @@
           여러 개의 서버 이름은 콤마(,)로 구분되며 와일드카드(*)를 사용할 수 있습니다.
 
           이 정책을 설정하지 않으면 서버가 인트라넷에 있는 경우 <ph name="PRODUCT_NAME" />이(가) 감지하여 IWA 요청에만 응답합니다. 서버가 인트라넷으로 감지된 경우 <ph name="PRODUCT_NAME" />이(가) IWA 요청을 무시합니다.</translation>
+<translation id="8667812577403206506">Chrome OS에서의 가상 머신 실행 허용 여부를 제어할 수 있습니다.
+
+      이 정책을 True로 설정하면 기기에서 가상 머신을 실행할 수 있습니다.
+      이 정책을 False로 설정하면 기기에서 가상 머신을 실행할 수 없습니다.
+      이 정책을 False로 변경하면 새로운 가상 머신에 적용되며 이미 실행되고 있는 가상 머신이 종료되지는 않습니다.
+      관리 대상 기기에서 이 정책을 설정하지 않으면 기기에서 가상 머신을 실행할 수 없습니다.
+      관리 대상이 아닌 기기에서는 가상 머신을 실행할 수 있습니다.</translation>
 <translation id="8672321184841719703">자동 업데이트 버전 타겟팅</translation>
 <translation id="867410340948518937">U2F(범용 2차 요소)</translation>
 <translation id="8685024486845674965">비밀번호가 재사용되어 비밀번호 보호 경고가 실행됨</translation>
@@ -2700,6 +2769,7 @@
 
       이 정책은 <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> 정책을 사용하도록 설정한 경우 해당 기능에서 동일한 클라이언트측 기능을 공유하기 때문에 사용 설정하면 안 됩니다. 이 경우 Google에서 호스팅하는 동기화 서비스는 완전히 사용 중지됩니다.</translation>
 <translation id="8955719471735800169">맨위로</translation>
+<translation id="8959992920425111821">기본 구성</translation>
 <translation id="8960850473856121830">이 목록의 패턴을 요청 URL의 보안 출처와 비교합니다.
       일치하는 항목이 확인되는 경우 메시지를 표시하지 않고 오디오 캡처
       기기에 대한 액세스 권한을 부여합니다.
@@ -2710,6 +2780,16 @@
 <translation id="8976248126101463034">원격 액세스 호스트에 대한 gnubby 인증 허용</translation>
 <translation id="8976531594979650914">시스템 기본 프린터를 기본값으로 사용</translation>
 <translation id="8992176907758534924">모든 사이트에서 이미지 표시 허용 안함</translation>
+<translation id="9034729899149506577">
+      정책을 사용 설정하면 쉼표로 구분된 목록에 이름이 지정된 각 출처는
+      자체 프로세스로 작동합니다. 이 정책은 하위 도메인으로 이름이 지정된
+      출처도 격리합니다. 예를 들어, https://example.com/을
+      지정하면 https://foo.example.com/ 또한 https://example.com/
+      사이트의 일부로 여겨져 격리됩니다.
+      정책이 사용 중지되면 명시적인 사이트 격리는 이루어지지 않고 IsolateOrigins 및 SitePerProcess 필드 평가판이 사용 중지됩니다. 사용자는 계속해서 IsolateOrigins를 직접 사용 설정할 수 있습니다.
+      정책을 구성하지 않으면 사용자가 이 설정을 변경할 수 있게 됩니다.
+      <ph name="PRODUCT_OS_NAME" />에서 <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" /> 기기 정책을 같은 값으로 설정하는 것이 좋습니다. 두 정책을 다른 값으로 설정하면 사용자 세션을 시작할 때 지연이 발생할 수 있으며 사용자 정책으로 지정된 값이 적용됩니다.
+      </translation>
 <translation id="9035964157729712237">차단목록에서 제외할 확장 프로그램 ID</translation>
 <translation id="9042911395677044526"><ph name="PRODUCT_OS_NAME" /> 기기에 사용자별로 적용되는 네트워크 구성을 사용하도록 허용합니다. 네트워크 구성은 <ph name="ONC_SPEC_URL" />에서 설명한 개방형 네트워크 구성에서 정의한 대로 JSON 형식의 문자열입니다. </translation>
 <translation id="9084985621503260744">동영상 활동이 전원 관리에 영향을 미치는지 여부 지정</translation>
@@ -2761,6 +2841,13 @@
 <translation id="9187743794267626640">외부 저장소 마운트 사용 중지</translation>
 <translation id="9197740283131855199">화면이 어두워진 후 사용자의 활동이 감지될 때 화면 어둡게 하기 지연 시간이 조정되는 비율</translation>
 <translation id="9200828125069750521">POST를 사용하는 이미지 URL용 매개변수</translation>
+<translation id="9210953373038593554">SAML 로그인 인증 유형을 구성합니다.
+
+      이 정책이 설정되지 않거나 기본으로 설정되면(값 0) SAML 로그인의 동작은 다른 요인에 따라 브라우저에서 결정됩니다. 가장 기본적인 시나리오에서는 사용자 인증 및 캐시된 사용자 데이터의 보호가 사용자가 직접 입력한 비밀번호를 바탕으로 이루어집니다.
+
+      이 정책이 ClientCertificate(값 1)으로 설정되면 SAML을 통해 로그인하는 새로 추가된 사용자에게 클라이언트 인증서 인증을 사용합니다. 이러한 사용자에게는 비밀번호를 사용하지 않으며 이러한 사용자의 캐시된 로컬 데이터는 해당 암호화 키를 사용하여 보호됩니다. 예를 들어 이 설정을 사용하면 스마트카드 기반 사용자 인증 구성이 허용됩니다(스마트카드 미들웨어 앱은 DeviceLoginScreenAppInstallList 정책을 통해 설치되어야 함).
+
+      이 정책은 SAML을 사용하여 인증한 사용자에게만 영향을 미칩니다.</translation>
 <translation id="9213347477683611358">기기에 로그인한 사용자가 없을 때 로그인 화면에 표시되는 기기 수준의 배경화면 이미지를 설정합니다. 이 정책은 Chrome OS 기기에서 배경화면 이미지를 다운로드할 URL과 다운로드의 무결성을 확인하는 데 사용되는 암호화 해시를 지정하여 설정할 수 있습니다. 이미지는 JPEG 형식이어야 하며 파일 크기는 16MB를 넘지 않아야 합니다. URL은 어떠한 인증도 없이 액세스할 수 있어야 합니다. 배경화면 이미지는 다운로드 및 캐시됩니다. URL이나 해시가 변경될 때마다 배경화면 이미지도 다시 다운로드됩니다.
 
       이 정책은 JSON 형식으로 URL과 해시를 표현하는 문자열로 지정되어야 합니다. 예:
diff --git a/components/policy/resources/policy_templates_ml.xtb b/components/policy/resources/policy_templates_ml.xtb
index a190eeb7..414fdc28 100644
--- a/components/policy/resources/policy_templates_ml.xtb
+++ b/components/policy/resources/policy_templates_ml.xtb
@@ -52,6 +52,7 @@
 <translation id="1152117524387175066">ബൂട്ടിലെ ഉപകരണത്തിന്റെ ഡെവലപ്പർ സ്വിച്ചിന്റെ നില റിപ്പോർട്ടുചെയ്യുക.
 
       നയം 'തെറ്റ്' എന്ന് സജ്ജമാക്കുകയാണെങ്കിൽ, ഡെവലപ്പർ സ്വിച്ചിന്റെ നില റിപ്പോർട്ടുചെയ്യില്ല.</translation>
+<translation id="1160479894929412407">QUIC പ്രോട്ടോക്കോൾ അനുവദിക്കുക</translation>
 <translation id="1160939557934457296">സുരക്ഷിത ബ്രൗസിംഗ് മുന്നറിയിപ്പ് പേജിൽ നിന്നും തുടരുന്നത് അപ്രാപ്‌തമാക്കുക</translation>
 <translation id="1194005076170619046">പ്രവർത്തനരഹിതമാക്കുകയാണെങ്കിൽ, സെഷൻ സജീവമായിരിക്കുന്ന സമയത്ത് വലിയ ചുവപ്പ് വർണ്ണത്തിലുള്ള ഒരു ലോഗ്ഔട്ട് ബട്ടൺ കാണിക്കുകയും സ്‌ക്രീൻ ലോക്ക് ആകാതെ നിലനിൽക്കുകയും ചെയ്യും.
 
@@ -65,6 +66,7 @@
 
        RollbackDisabled ആണ് ഡിഫോൾട്ട്.</translation>
 <translation id="1221359380862872747">ഡെമോ ലോഗിനിൽ വ്യക്തമാക്കിയ url-കൾ ലോഡുചെയ്യുക</translation>
+<translation id="1223789468190631420">വിശ്വസനീയ ഉറവിടങ്ങൾക്ക് സുരക്ഷിത ബ്രൗസിംഗ് പ്രവർത്തനക്ഷമം</translation>
 <translation id="123081309365616809">ഉപകരണത്തിലേക്ക് കാസ്‌റ്റുചെയ്യുന്ന ഉള്ളടക്കം പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="1257550411839719984">ഡിഫോൾട്ട് ഡൗൺലോഡ് ഡയറക്ടറി സജ്ജീകരിക്കുക</translation>
 <translation id="1265053460044691532">SAML വഴി പ്രാമാണീകരിച്ച ഒരു ഉപയോക്താവിനായി ഓഫ്‌ലൈനിൽ ലോഗുചെയ്യാനാകുന്ന സമയം പരിമിതപ്പെടുത്തുക</translation>
@@ -101,6 +103,7 @@
 
       ഈ നയം 'false' എന്ന് സജ്ജമാക്കുകയാണെങ്കിൽ, ആരംഭിക്കുന്നതിന് <ph name="PRODUCT_NAME" /> അതിഥി പ്രൊഫൈലുകളെ അനുവദിക്കില്ല.</translation>
 <translation id="1363275621236827384">ഹാർഡ്‌വെയർ പ്രൊഫൈലുകൾക്കായി Quirks സെർവറിലേക്കുള്ള ചോദ്യങ്ങൾ പ്രവർത്തനക്ഷമമാക്കുക</translation>
+<translation id="1384459581748403878">റെഫറൻസ്: <ph name="REFERENCE_URL" /></translation>
 <translation id="1387596372902085462">Symantec Corporation-ന്റെ Legacy PKI Infrastructure-ൽ വിശ്വാസ്യത അർപ്പിക്കണോ</translation>
 <translation id="1393485621820363363">പ്രവർത്തനക്ഷമമാക്കിയ എന്‍റർപ്രൈസ് ഉപകരണ പ്രിന്ററുകൾ</translation>
 <translation id="1397855852561539316">സ്ഥിരസ്ഥിതി തിരയൽ ദാതാവ് നിര്‍ദേശിക്കുന്ന URL</translation>
@@ -179,8 +182,10 @@
 
           കൂടുതൽ വിശദമായ ഉദാഹരണങ്ങൾക്ക്, ഇത് സന്ദർശിക്കുക:
           <ph name="PROXY_HELP_URL" /></translation>
+<translation id="1502843533062797703">മൂന്നാം കക്ഷി സോഫ്‌റ്റ്‌വെയർ ഇഞ്ചെക്ഷൻ ബ്ലോക്കിംഗ് പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="1504431521196476721">വിദൂര അറ്റസ്‌റ്റേഷൻ</translation>
 <translation id="1509692106376861764"><ph name="PRODUCT_NAME" /> പതിപ്പ് 29 മുതൽ ഈ നയം റദ്ദാക്കി.</translation>
+<translation id="1514888685242892912"><ph name="PRODUCT_NAME" /> പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="1522425503138261032">ഉപയോക്താക്കളുടെ ഭൌതിക ലൊക്കേഷന്‍ ട്രാക്കുചെയ്യാന്‍ സൈറ്റുകളെ സഹായിക്കുക</translation>
 <translation id="152657506688053119">സ്ഥിര തിരയൽ ദാതാവിനുള്ള ഇതര URL-കളുടെ ലിസ്റ്റ്</translation>
 <translation id="1530812829012954197">ഹോസ്റ്റ് ബ്രൌസറില്‍ ഇനി പറയുന്ന URL പാറ്റേണുകള്‍ എല്ലായ്പ്പോഴും റെന്‍ഡര്‍ ചെയ്യുക</translation>
@@ -193,6 +198,11 @@
       ചെയ്‌തിട്ടില്ലെങ്കിലോ, എന്റർപ്രൈസ് ഉപയോക്താക്കൾക്ക് ARC ഉപയോഗിക്കാനാവില്ല.</translation>
 <translation id="1561424797596341174">റിമോട്ട് ആക്‌സസ്സ് ഹോസ്‌റ്റിന്റെ ഡീബഗ് ബിൽഡുകൾക്കായി നയം അസാധുവാക്കുന്നു</translation>
 <translation id="1561967320164410511">വ്യക്തിഗത സാക്ഷ്യപ്പെടുന്നതിന്റെ U2F പ്ലസ് വിപുലീകരണങ്ങൾ</translation>
+<translation id="1574554504290354326">ഈ ക്രമീകരണം അവസാനിപ്പിച്ചു, പകരം SafeBrowsingExtendedReportingEnabled ഉപയോഗിക്കുക. SafeBrowsingExtendedReportingEnabled പ്രവർത്തനക്ഷമമാക്കുന്നതോ പ്രവർത്തനരഹിതമാക്കുന്നതോ, SafeBrowsingExtendedReportingOptInAllowed 'ഫാൾസ്' ആയി സജ്ജീകരിക്കുന്നതിന് തുല്യമാണ്.
+
+      ഈ നയം 'ഫാൾസ്' എന്ന് സജ്ജമാക്കുന്നത്, ചില സിസ്‌റ്റം വിവരങ്ങളും പേജ് ഉള്ളടക്കവും Google സെർവറുകളിലേക്ക് അയയ്‌ക്കാൻ തിരഞ്ഞെടുക്കുന്നതിൽ നിന്ന് ഉപയോക്താക്കളെ തടയും. ഈ ക്രമീകരണം 'ട്രൂ' ആണെങ്കിലോ കോൺഫിഗർ ചെയ്തിട്ടില്ലെങ്കിലോ, അപകടകരമായ ആപ്പുകളും സൈറ്റുകളും കണ്ടെത്താൻ സഹായിക്കാൻ, 'സുരക്ഷിത ബ്രൗസിംഗ്' എന്നതിലേക്ക് ചില സിസ്‌റ്റം വിവരങ്ങളും പേജ് ഉള്ളടക്കവും അയയ്‌ക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുന്നതാണ്.
+
+      സുരക്ഷിത ബ്രൗസിംഗിനെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് https://developers.google.com/safe-browsing കാണുക.</translation>
 <translation id="1583248206450240930">സ്ഥിരസ്ഥിതിയായി <ph name="PRODUCT_FRAME_NAME" /> ഉപയോഗിക്കുക</translation>
 <translation id="1608755754295374538">ആവശ്യപ്പെടാതെ തന്നെ ഓഡിയോ ക്യാപ്‌ചർ ഉപകരണങ്ങളിലേക്ക് ആക്‌സസ്സ് ലഭിക്കുന്ന URL-കൾ</translation>
 <translation id="1617235075406854669">ബ്രൗസർ, ഡൗൺലോഡ് ചരിത്രം എന്നിവ ഇല്ലാതാക്കുന്നത് പ്രവർത്തനക്ഷമമാക്കുക</translation>
@@ -237,6 +247,7 @@
 <translation id="1797233582739332495">വീണ്ടും സമാരംഭിക്കൽ  ആവശ്യമാണെന്ന് സൂചിപ്പിക്കുന്ന ആവർത്തിച്ചുള്ള നിര്‍ദ്ദേശം ഉപയോക്താവിനെ കാണിക്കുക</translation>
 <translation id="1803646570632580723">ലോഞ്ചറിൽ കാണിക്കുന്നതിനുള്ള പിൻ ചെയ്‌ത അപ്ലിക്കേഷനുകളുടെ ലിസ്റ്റ്</translation>
 <translation id="1808715480127969042">ഈ സൈറ്റുകളില്‍ കുക്കികള്‍ തടയുക</translation>
+<translation id="1810261428246410396">ഇൻസ്‌റ്റന്റ് ടെതറിംഗ് ഉപയോഗിക്കാൻ അനുവദിക്കുക.</translation>
 <translation id="1827523283178827583">സ്ഥിരപ്പെടുത്തിയ പ്രോക്സി സെര്‍വറുകള്‍ ഉപയോഗിക്കുക</translation>
 <translation id="1843117931376765605">ഉപയോക്തൃ നയത്തിനായുള്ള പുതുക്കിയ നിരക്ക്</translation>
 <translation id="1844620919405873871">അതിവേഗ അൺലോക്കുമായി ബന്ധപ്പെട്ട നയങ്ങളെ കോൺഫിഗർ ചെയ്യുന്നു.</translation>
@@ -245,6 +256,7 @@
             ഈ നയം ഓപ്‌ഷണൽ ആണ്. സജ്ജമാക്കിയില്ലെങ്കിൽ, GET രീതി ഉപയോഗിച്ച് തൽക്ഷണ തിരയൽ അഭ്യർത്ഥന അയയ്‌ക്കും.
 
           'DefaultSearchProviderEnabled' നയം പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ മാത്രമേ ഈ നയം ബാധകമാകൂ.</translation>
+<translation id="1852294065645015766">മീഡിയ സ്വമേധയാ പ്ലേ ചെയ്യൽ അനുവദിക്കുക</translation>
 <translation id="1859859319036806634">മുന്നറിയിപ്പ്: പതിപ്പ് 52-നുശേഷം <ph name="PRODUCT_NAME" /> എന്നതിൽ നിന്ന് ഈ TLS പതിപ്പ് ഫാൾബാക്ക് നീക്കംചെയ്യുകയും (ഏകദേശം 2016 സെപ്‌റ്റംബറോടുകൂടി) തുടർന്ന് ഈ നയം പ്രവർത്തിക്കാതാകുകയും ചെയ്യും.
 
       TLS ഹാൻഡ്‌ഷേക്ക് പരാജയപ്പെടുമ്പോൾ, HTTPS സെർവറുകളിലെ ബഗുകൾ പരിഹരിക്കുന്നതിനായി, TLS-ന്റെ ഒരു കുറഞ്ഞ പതിപ്പുപയോഗിച്ച് കണക്ഷൻ ലഭ്യമാക്കാൻ ആദ്യം <ph name="PRODUCT_NAME" /> വീണ്ടും ശ്രമിക്കും. ഈ ഫാൾബാക്ക് പ്രോസസ്സ് അവസാനിക്കുന്ന പതിപ്പിനെ ഈ ക്രമീകരണം കോൺഫിഗർ ചെയ്യുന്നു. പതിപ്പ് മാറ്റം സെർവർ ശരിയായി നിർവഹിക്കുന്നുണ്ടെങ്കിൽ, (അതായത്, കണക്ഷൻ നിർത്താതെതന്നെ), ഈ ക്രമീകരണം പ്രയോഗിക്കുന്നതല്ല. തൽഫലമായുണ്ടാകുന്ന കണക്ഷൻ ഇത് പരിഗണിക്കാതെ തന്നെ, SSLVersionMin എന്നതുമായി ചേർന്ന് പ്രവർത്തിക്കുകയും വേണം.
@@ -321,6 +333,7 @@
 <translation id="1988371335297483117"><ph name="PRODUCT_OS_NAME" />-ലെ യാന്ത്രിക-അപ്‌ഡേറ്റ് പേലോഡുകൾ HTTPS-നുകരം HTTP വഴി ഡൗൺലോഡുചെയ്യാനാകും. ഇത് HTTP ഡൗൺലോഡുകളുടെ സുതാര്യ HTTP കാഷേ ചെയ്യൽ അനുവദിക്കുന്നു.
 
       ഈ നയം true എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, HTTP വഴി യാന്ത്രിക-അപ്ഡേറ്റ് പേലോഡുകൾ ഡൗൺലോഡുചെയ്യാൻ <ph name="PRODUCT_OS_NAME" /> ശ്രമിക്കും. ഈ നയം false എന്നായി സജ്ജീകരിക്കുകയോ സജ്ജീകരിക്കാത്ത നിലയിലോ ആണെങ്കിൽ, യാന്ത്രിക-അപ്‌ഡേറ്റ് പേലോഡുകൾ ഡൗൺലോഡുചെയ്യുന്നതിന് HTTPS ഉപയോഗിക്കും.</translation>
+<translation id="199764499252435679"><ph name="PRODUCT_NAME" /> ഉൽപ്പന്നത്തിൽ ഘടക അപ്‌ഡേറ്റുകൾ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="1997994951395619441">നിങ്ങൾ ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുകയാണെങ്കിൽ, <ph name="PRODUCT_NAME" /> ഒരു ബുക്ക്‌മാർക്ക് ബാർ കാണിക്കും.
 
       നിങ്ങൾ ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കുകയാണെങ്കിൽ, ഉപയോക്താക്കൾക്ക് ബുക്ക്‌മാർക്ക് ബാർ ഒരിക്കലും കാണാൻ കഴിയില്ല.
@@ -355,6 +368,7 @@
 <translation id="2030905906517501646">സ്ഥിരസ്ഥിതി തിരയൽ ദാതാവിന്‍റെ കീവേഡ്</translation>
 <translation id="203096360153626918">ഈ നയം Android ആപ്‌സുകൾക്ക് ബാധകമല്ല. നയം <ph name="FALSE" /> എന്ന് സജ്ജമാക്കിയിരിക്കുകയാണെങ്കിൽ പോലും അവയ്‌ക്ക് പൂർണ്ണസ്‌ക്രീൻ മോഡിലേക്ക് മാറാനാകും.</translation>
 <translation id="2043770014371753404">എന്‍റർപ്രൈസ് പ്രിന്‍ററുകൾ പ്രവർത്തനരഹിതമാക്കി</translation>
+<translation id="2057317273526988987">URL-കളുടെ ഒരു ലിസ്റ്റിലേക്കുള്ള ആക്‌സസ് അനുവദിക്കുക</translation>
 <translation id="2061810934846663491">വിദൂര ആക്‌സസ്സ് ഹോസ്‌റ്റിന് ആവശ്യമായുള്ള ഡൊമെയ്‌ൻ പേരുകൾ കോൺഫിഗർ ചെയ്യുക</translation>
 <translation id="206623763829450685"><ph name="PRODUCT_NAME" /> പിന്തുണയ്‌ക്കുന്ന HTTP പ്രാമാണീകരണ സ്‌കീമുകൾ ഏതെന്ന് വ്യക്തമാക്കുന്നു.
 
@@ -369,6 +383,7 @@
 സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, ഇതിന്റെ മെനുവിലെ സൂക്ഷ്‌മമായ മാറ്റങ്ങളിലൂടെ വീണ്ടും സമാരംഭിക്കൽ ആവശ്യമാണെന്ന് <ph name="PRODUCT_NAME" /> ഉപയോക്താവിനോട് സൂചിപ്പിക്കുന്നു. 'ശുപാർശ ചെയ്‌തു' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, വീണ്ടും സമാരംഭിക്കൽ ശുപാർശ ചെയ്‌തിരിക്കുന്നതായി ആവർത്തിച്ചുള്ള മുന്നറിയിപ്പ് ഉപയോക്താവിനെ കാണിക്കും. വീണ്ടും സമാരംഭിക്കൽ നീട്ടിവെക്കാനായി ഉപയോക്താവിന് ഈ മുന്നറിയിപ്പ് നിരാകരിക്കാനാവും. 'ആവശ്യമാണ്' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, അറിയിപ്പ് കാലാവധി കഴിഞ്ഞാലുടൻ, ബ്രൗസർ നിർബന്ധിത  സമാരംഭിക്കലിന് വിധേയമാകുമെന്ന് സൂചിപ്പിക്കുന്ന ആവർത്തിച്ചുള്ള മുന്നറിയിപ്പ് ഉപയോക്താവിനെ കാണിക്കും. ഡിഫോൾട്ടായി ഏഴ് ദിവസമാണ് ഇതിന്റെ കാലാവധി, മാത്രമല്ല <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> നയ ക്രമീകരണം വഴി ഇത് കോണ്‍ഫിഗര്‍ ചെയ്‌തേക്കാം.
 
   വീണ്ടും സമാരംഭിക്കലിനെ തുടർന്ന് ഉപയോക്താവിന്റെ സെഷൻ പുനഃസ്ഥാപിക്കപ്പെടും.</translation>
+<translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> ഉൽപ്പന്നത്തിലേക്ക് സൈൻ ഇൻ ചെയ്യാൻ അനുവദിക്കുക</translation>
 <translation id="2077129598763517140">ലഭ്യമാകുമ്പോൾ ഹാർഡ്‌വെയർ ത്വരിതപ്പെടുത്തൽ ഉപയോഗിക്കുക</translation>
 <translation id="2077273864382355561">ബാറ്ററി പവറിൽ പ്രവർത്തിക്കുമ്പോൾ സ്‌ക്രീൻ ഓഫ് ആകുന്നതിന്റെ കാലതാമസം</translation>
 <translation id="2082205219176343977">ഉപകരണത്തിന് അനുവദനീയമായ കുറഞ്ഞ Chrome പതിപ്പ് കോണ്‍ഫിഗര്‍ ചെയ്യുക.</translation>
@@ -661,6 +676,7 @@
 <translation id="2646290749315461919">ഉപയോക്താക്കളുടെ ഭൗതിക ലൊക്കേഷൻ ട്രാക്കുചെയ്യുന്നതിന് വെബ്‌സൈറ്റുകളെ അനുവദിക്കേണ്ടതുണ്ടോ എന്നത് സജ്ജീകരിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഉപയോക്താക്കളുടെ ഭൗതിക ലൊക്കേഷൻ ട്രാക്കുചെയ്യുന്നത് എല്ലാ വെബ്‌സൈറ്റുകൾക്കായും ഒന്നുകിൽ അനുവദിക്കപ്പെട്ടതോ അല്ലെങ്കിൽ നിരസിക്കപ്പെട്ടതോ ആയിരിക്കാം.
 
           ഈ നയം സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിൽ, ഉപയോക്താക്കൾക്ക് മാറ്റാൻ കഴിയുന്ന വിധത്തിൽ 'AskGeolocation' ഉപയോഗിക്കുന്നതാണ്.</translation>
+<translation id="2647069081229792812">ബുക്ക്‌മാർക്ക് എഡിറ്റിംഗ് പ്രവർത്തനക്ഷമമോ പ്രവർത്തനരഹിതതോ ആക്കുക</translation>
 <translation id="2649896281375932517">തീരുമാനമെടുക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുക.</translation>
 <translation id="2650049181907741121">ഉപയോക്താവ് ലിഡ് അടയ്‌ക്കുമ്പോൾ നടത്തേണ്ട പ്രവർത്തനം</translation>
 <translation id="2655233147335439767">ഒരു ഡിഫോൾട്ട് തിരയൽ നടത്തുമ്പോൾ ഉപയോഗിക്കുന്ന തിരയൽ എഞ്ചിനിന്റെ URL വ്യക്തമാക്കുന്നു. URL-ൽ '<ph name="SEARCH_TERM_MARKER" />' സ്‌ട്രിംഗ് അടങ്ങിയിരിക്കണം, ഇത് അന്വേഷണ സമയത്ത് ഉപയോക്താവ് തിരയുന്ന പദങ്ങളെ മാറ്റി പകരം വയ്‌ക്കും.
@@ -701,6 +717,7 @@
 <translation id="2769952903507981510">വിദൂര ആക്‌സസ്സ് ഹോസ്റ്റിന് ആവശ്യമായുള്ള ഡൊമെയ്‌ൻ പേര് കോൺഫിഗർ ചെയ്യുക</translation>
 <translation id="2787173078141616821">Android-ന്റെ നിലയെ കുറിച്ചുള്ള വിവരം റിപ്പോർട്ടുചെയ്യുക</translation>
 <translation id="2793923553868251161">ഉത്ഭവങ്ങൾ സുരക്ഷിത സന്ദർഭമായി പരിഗണിക്കപ്പെടും.</translation>
+<translation id="2799297758492717491">URL പാറ്റേണുകളുടെ ഒരു വൈറ്റ്‌ലിസ്റ്റിൽ, മീഡിയ സ്വമേധയാ പ്ലേ ചെയ്യൽ അനുവദിക്കുക</translation>
 <translation id="2801230735743888564">ഉപകരണം ഓഫ്‌ലൈനായിരിക്കുമ്പോൾ ദിനോസർ ഈസ്‌റ്റർ എഗ്ഗ് ഗെയിം പ്ലേ ചെയ്യുന്നതിന് ഉപയോക്താക്കളെ അനുവദിക്കുക.
 
       നയം False ആയി സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ, ഉപകരണം ഓഫ്‌ലൈനായിരിക്കുമ്പോൾ ദിനോസർ ഈസ്‌റ്റർ എഗ്ഗ് ഗെയിം പ്ലേ ചെയ്യുന്നതിന് ഉപയോക്താക്കൾക്ക് കഴിയില്ല. ക്രമീകരണം True ആയി സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ, ദിനോസർ ഈസ്‌റ്റർ എഗ്ഗ് ഗെയിം പ്ലേ ചെയ്യുന്നതിന് ഉപയോക്താക്കളെ അനുവദിക്കുന്നതാണ്. ഈ നയം സജ്ജമാക്കിയിട്ടില്ലെങ്കിൽ, എൻറോൾ ചെയ്‌തിട്ടുള്ള Chrome OS-ൽ ദിനോസർ ഈസ്‌റ്റർ എഗ്ഗ് ഗെയിം പ്ലേ ചെയ്യുന്നതിന് ഉപയോക്താക്കൾക്ക് അനുവാദമുണ്ടാകില്ല, പക്ഷേ മറ്റ് സാഹചര്യങ്ങളിൽ ഇത് പ്ലേ ചെയ്യാൻ അനുവാദമുണ്ടാകും.</translation>
@@ -971,6 +988,19 @@
 <translation id="3524204464536655762">WebUSB API വഴി, USB ഉപകരണങ്ങളിലേക്ക് ആക്‌സസ് അഭ്യർത്ഥിക്കാൻ ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്</translation>
 <translation id="3528000905991875314">സമാന്തര പിശക് പേജുകള്‍ പ്രാപ്തമാക്കുക</translation>
 <translation id="3547954654003013442">പ്രോക്‌സി ക്രമീകരണം</translation>
+<translation id="3556806727696701427"><ph name="PRODUCT_NAME" /> ഉൽപ്പന്നത്തിന്റെ സുരക്ഷിത ബ്രൗസിംഗ് സവിശേഷത പ്രവർത്തനക്ഷമമാക്കുകയും ഈ ക്രമീകരണം മാറ്റുന്നതിൽ നിന്ന് ഉപയോക്താക്കളെ തടയുകയും ചെയ്യുന്നു.
+
+ഈ ക്രമീകരണം നിങ്ങൾ പ്രവർത്തനക്ഷമമാക്കുകയാണെങ്കിൽ സുരക്ഷിത ബ്രൗസിംഗ് എല്ലായ്‌പ്പോഴും സജീവമായിരിക്കും.
+
+      ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയാൽ സുരക്ഷിത ബ്രൗസിംഗ് ഒരിക്കലും സജീവമായിരിക്കില്ല.
+
+      ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമോ പ്രവർത്തനരഹിതമോ ആക്കുകയാണെങ്കിൽ ഉപയോക്താക്കൾക്ക് <ph name="PRODUCT_NAME" /> എന്നതിലെ "ഫിഷിംഗ്, മാൽവെയർ സംരക്ഷണം പ്രവർത്തനക്ഷമമാക്കുക" എന്ന ക്രമീകരണം മാറ്റാനോ അസാധുവാക്കാനോ കഴിയില്ല.
+
+      ഈ നയം സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിൽ ഇത് പ്രവർത്തനക്ഷമമാകും, എന്നാൽ ഉപയോക്താക്കൾക്ക് മാറ്റാനാവും.
+
+      സുരക്ഷിത ബ്രൗസിംഗുമായി ബന്ധപ്പെട്ട കൂടുതൽ വിവരങ്ങൾക്കായി https://developers.google.com/safe-browsing കാണുക.
+
+<ph name="MS_AD_NAME" /> ഡൊമെയ്‌നുമായി ചേർന്നിട്ടില്ലാത്ത Windows ഇൻസ്റ്റൻസുകളിൽ ഈ നയം ലഭ്യമല്ല.</translation>
 <translation id="3577251398714997599">തടസ്സമുണ്ടാക്കുന്ന പരസ്യങ്ങളുള്ള സൈറ്റുകൾക്കുള്ള പരസ്യ ക്രമീകരണം</translation>
 <translation id="3591584750136265240">ലോഗിൻ പരിശോധിച്ചുറപ്പിക്കൽ പ്രവർത്തന രീതി കോൺഫിഗർ ചെയ്യുക</translation>
 <translation id="3627678165642179114">അക്ഷരപിശക് പരിശോധനാ സേവനം പ്രാപ്‌തമാക്കുക അല്ലെങ്കിൽ അപ്രാപ്‌തമാക്കുക</translation>
@@ -1004,6 +1034,15 @@
 
       ഈ നയങ്ങളെ സജ്ജമാക്കാതെ വിടുകയാണെങ്കിൽ, അത് ഉപയോക്താക്കളെ അവരുടെ തന്നെ പ്രോക്‌സി ക്രമീകരണം തിരഞ്ഞെടുക്കാൻ അനുവദിക്കുന്നതിനിടയാക്കും.</translation>
 <translation id="3758249152301468420">ഡെവലപ്പര്‍ ഉപകരണങ്ങള്‍ അപ്രാപ്തമാക്കുക</translation>
+<translation id="3764248359515129699">ലെഗസി സർട്ടിഫിക്കറ്റ് അധികാരികളുടെ ഒരു ലിസ്‌റ്റിനായുള്ള 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി' ആവശ്യകതകൾ നടപ്പിലാക്കുന്നത് പ്രവർത്തനരഹിതമാക്കുന്നു.
+
+      subjectPublicKeyInfo ഹാഷുകളിലെ ഏതെങ്കിലും നിർദ്ദിഷ്‌ട സർട്ടിഫിക്കറ്റുകളുള്ള സർട്ടിഫിക്കറ്റ് ശൃംഖലയ്ക്കായി, 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി' വെളിപ്പെടുത്തൽ ആവശ്യകതകൾ പ്രവർത്തനരഹിതമാക്കാൻ ഈ നയം അനുവദിക്കുന്നു. സർട്ടിഫിക്കറ്റുകൾ ശരിയായ രീതിയിൽ എല്ലാവർക്കുമായി വെളിപ്പെടുത്തിയിട്ടില്ലാത്തതിനാൽ, അതിന്റെ വിശ്വാസ്യത നഷ്‌ടമാകുമെങ്കിലും തുടർന്നും എന്റർപ്രൈസ് ഹോസ്‌റ്റുകൾക്കായി അതിനെ ഉപയോഗിക്കാൻ ഇത് അനുവദിക്കും. 
+
+      ഈ നയം സജ്ജീകരിച്ചിരിക്കുമ്പോൾ, 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി' പ്രവർത്തനരഹിതമാക്കുന്നതിനായി, ലെഗസി സർട്ടിഫിക്കറ്റ് അതോറിറ്റി (CA) ആയി അംഗീകരിച്ചിട്ടുള്ള CA സർട്ടിഫിക്കറ്റിൽ കാണപ്പെടുന്ന ഒരു subjectPublicKeyInfo ആയിരിക്കണം ഹാഷ്. പൊതുവായി വിശ്വസിക്കുന്ന ഡിഫോൾട്ട് ആയതോ, <ph name="PRODUCT_NAME" /> പിന്തുണയ്ക്കുന്ന ഒന്നോ അതിലധികമോ ഓപ്പറേറ്റിംഗ് സിസ്‌റ്റങ്ങളോ ഉള്ള CA ആണ് ഒരു ലെഗസി CA, പക്ഷേ Android ഓപ്പൺ സോഴ്‌സ് പ്രോജക്റ്റ് അല്ലെങ്കിൽ <ph name="PRODUCT_OS_NAME" /> ഇത് വിശ്വസിക്കുന്നില്ല.
+      
+      ഹാഷ് അൽഗരിത നാമം, "/" ക്യാരക്റ്റർ, നിർദ്ദിഷ്‌ട സർട്ടിഫിക്കറ്റിലെ DER-‌എൻകോഡ് ചെയ്‌ത subjectPublicKeyInfo എന്നതിന് ആ ഹാഷ് അൽഗരിതത്തിന്റെ Base64 എൻകോഡിംഗ് ബാധകമാക്കൽ, എന്നിവയെ പരസ്‌പരം ബന്ധിപ്പിച്ചാണ് ഒരു subjectPublicKeyInfo ഹാഷിനെ വേർതിരിക്കുന്നത്. RFC 7469, സെക്‌ഷൻ 2.4-ൽ നിർവചിച്ചിരിക്കുന്നത് പോലെ, ഈ Base64 എൻകോഡിംഗ് എന്നത് SPKI ഫിംഗർപ്രിന്റിന് സമാനമായ ഫോർമാറ്റാണ്. തിരിച്ചറിയപ്പെടാത്ത ഹാഷ് അൽഗരിതം അവഗണിക്കപ്പെടുന്നു. ഈ സമയത്ത് പിന്തുണയ്‌ക്കപ്പെടുന്ന ഒരേ ഒരു ഹാഷ് അൽഗരിതം "sha256" ആണ്.
+
+      ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, സർട്ടിഫിക്കറ്റ് 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി' അനുസരിച്ച് വെളിപ്പെടുത്തിയിട്ടില്ലാത്തതും എന്നാൽ 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി'യിലൂടെ വെളിപ്പെടുത്തേണ്ടതുമായ ഏതൊരു സർട്ടിഫിക്കറ്റിനെയും വിശ്വാസ്യതയില്ലാത്തതായി മാത്രമേ പരിഗണിക്കുകയുള്ളൂ.</translation>
 <translation id="3765260570442823273">നിഷ്‌ക്രിയ ലോഗ്-ഔട്ട് മുന്നറിയിപ്പ് സന്ദേശത്തിന്റെ സമയദൈർഘ്യം</translation>
 <translation id="377044054160169374">ദുരുപയോഗ അനുഭവ ഇടപെടൽ നടപ്പിലാക്കൽ</translation>
 <translation id="3780152581321609624">Kerberos SPN-ല്‍ സ്റ്റാന്‍ഡേര്‍ഡല്ലാത്ത പോര്‍ട്ട് ഉള്‍പ്പെടുത്തുക</translation>
@@ -1125,6 +1164,7 @@
 
       ഈ നയം ശരിയാണെന്ന് സജ്ജമാക്കിയിരിക്കുന്നെങ്കിൽ, നെറ്റ്‌വർക്ക് പാക്കറ്റുകളുടെ നിരീക്ഷണം (<ph name="HEARTBEATS_TERM" /> എന്ന് വിളിക്കുന്നു) അയയ്‌ക്കും.
       തെറ്റാണെന്ന് സജ്ജമാക്കുകയോ സജ്ജമാക്കാതിരിക്കുകയോ ആണെങ്കിൽ, പാക്കറ്റുകളൊന്നും അയയ്‌ക്കില്ല.</translation>
+<translation id="3958586912393694012">Smart Lock ഉപയോഗിക്കാൻ അനുവദിക്കുക</translation>
 <translation id="3963602271515417124">'ശരി' എന്നാണെങ്കിൽ, ഉപകരണത്തിന് വിദൂര അറ്റസ്‌റ്റേഷൻ അനുവദനീയമാണ് ഒപ്പം സർട്ടിഫിക്കറ്റ് സ്വയമേവ സൃഷ്‌ടിച്ച് ഉപകരണ മാനേജ്‌മെന്റ് സെർവറിൽ അപ്‌ലോഡുചെയ്യും‌.
 
           ഇത് 'തെറ്റ്' എന്ന് സജ്ജമാക്കുകയോ സജ്ജമാക്കാതിരിക്കുകയോ ആണെങ്കിൽ സർട്ടിഫിക്കറ്റൊന്നും സൃഷ്‌ടിക്കില്ല ഒപ്പം enterprise.platformKeys വിപുലീകരണ API-യിലേക്കുള്ള കോളുകൾ പരാജയപ്പെടുകയും ചെയ്യും‌.</translation>
@@ -1195,7 +1235,9 @@
       നിങ്ങൾ ഈ നയം സജ്ജമാക്കുകയാണെങ്കിൽ, ഉപയോക്താക്കൾക്ക് അത് മാറ്റാനോ അസാധുവാക്കാനോ കഴിയില്ല.
 
       ഈ നയം സജ്ജീകരിക്കാതെ വിടുകയാണെങ്കിൽ, ഡെസ്‌ക്ടോപ്പിലും ലോഗിൻ സ്ക്രീൻ പശ്ചാത്തലത്തിലും ദൃശ്യമാക്കുന്നതിന് ഉപയോക്താവിന് ഒരു ചിത്രം തിരഞ്ഞെടുക്കാനാകും.</translation>
+<translation id="412697421478384751">ലോക്ക് സ്‌ക്രീൻ പിൻ നമ്പറിൽ ദുർബലമായ പിൻ നമ്പറുകൾ സജ്ജീകരിക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുക</translation>
 <translation id="4157003184375321727">OS, ഫേംവെയർ പതിപ്പ് എന്നിവ റിപ്പോർട്ടുചെയ്യുക</translation>
+<translation id="4157594634940419685">നേറ്റീവ് CUPS പ്രിന്ററുകളിലേക്ക് ആക്സസ് അനുവദിക്കുക</translation>
 <translation id="4163705126749612234">വിദൂര ആക്‌സസ്സ് ക്ലയന്റുകൾക്ക് ബാധകമാകുന്ന ആവശ്യമായ ക്ലയന്റ് ഡൊമെയ്‌ൻ പേര് കോൺഫിഗർ ചെയ്യുന്നതിനൊപ്പം, ഇത് മാറ്റുന്നതിൽ നിന്നും ഉപയോക്താക്കളെ തടയുകയും ചെയ്യുന്നു. 
 
           ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുകയാണെങ്കിൽ, നിർദ്ദിഷ്‌ട ഡൊമെയ്‌നിൽ നിന്നുള്ള ക്ലയന്റുകൾക്ക് മാത്രമേ ഹോസ്‌റ്റിലേക്ക് കണക്‌റ്റുചെയ്യാനാകൂ. 
@@ -1285,6 +1327,8 @@
 <translation id="4377599627073874279">എല്ലാ ഇമേജും കാണിക്കുന്നതിന്‌ എല്ലാ സൈറ്റുകളെയും അനുവദിക്കുക</translation>
 <translation id="437791893267799639">നയം സജ്ജമാക്കാതെയും, ഡാറ്റ മൈഗ്രേഷനും ARC-യും അനുവദിക്കാതെയുമിരിക്കുക</translation>
 <translation id="4389091865841123886">TPM മെക്കാനിസം ഉപയോഗിച്ച് വിദൂര അറ്റസ്‌റ്റേഷൻ കോൺഫിഗർ ചെയ്യുക.</translation>
+<translation id="4410236409016356088">ത്രോട്ടിലിംഗ് നെറ്റ്‌വർക്ക് ബാൻഡ്‌വിഡ്‌ത്ത് പ്രവർത്തനക്ഷമമാക്കുക</translation>
+<translation id="441217499641439905"><ph name="PRODUCT_OS_NAME" /> ഫയലുകളുടെ ആപ്പിൽ സെല്ലുലാർ കണക്ഷനുകളിലൂടെ Google ഡ്രൈവ് പ്രവർത്തനരഹിതമാക്കുക</translation>
 <translation id="4415603335307944578">ഈ നയം 'ശരി' എന്ന് സജ്ജമാക്കുകയാണെങ്കിലോ കോൺഫിഗർചെയ്‌തിട്ടില്ലെങ്കിലോ, OS അപ്‌ഗ്രേഡിനുശേഷം ബ്രൗസർ ആദ്യ സമാരംഭിക്കലിൽ വീണ്ടും സ്വാഗത പേജ് കാണിക്കും. 
 
       ഈ നയം 'തെറ്റ്' എന്ന് സജ്ജമാക്കുകയാണെങ്കിൽ OS അപ്‌ഗ്രേഡിനുശേഷം ബ്രൗസർ ആദ്യ സമാരംഭിക്കലിൽ വീണ്ടും സ്വാഗത പേജ് കാണിക്കില്ല.</translation>
@@ -1308,6 +1352,7 @@
       </translation>
 <translation id="4442582539341804154">ഉപകരണം നിഷ്‌ക്രിയമാകുമ്പോഴോ താൽക്കാലികമായി നിർത്തുമ്പോഴോ ലോക്ക് പ്രാപ്‌തമാക്കുക</translation>
 <translation id="4449545651113180484">സ്‌ക്രീൻ 270 ഡിഗ്രി ഘടികാരദിശയിൽ തിരിക്കുക</translation>
+<translation id="4454820008017317557"><ph name="PRODUCT_NAME" /> ഉൽപ്പന്നത്തിന്റെ ടൂള്‍ബാര്‍ ഐക്കൺ കാണിക്കുക</translation>
 <translation id="4467952432486360968">മൂന്നാം കക്ഷി കുക്കികള്‍ തടയുക</translation>
 <translation id="4474167089968829729">പാസ്‌വേഡ് മാനേജറിൽ പാസ്‌വേഡുകൾ സംരക്ഷിക്കുന്നത് പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="4476769083125004742">ഈ നയം <ph name="BLOCK_GEOLOCATION_SETTING" /> എന്ന് സജ്ജമാക്കുകയാണെങ്കിൽ, Android ആപ്‌സുകൾക്ക് ലൊക്കേഷൻ വിവരം ആക്‌സസ് ചെയ്യാനാവില്ല. ഈ നയം മറ്റേതെങ്കിലും മൂല്യത്തിലേക്ക് സജ്ജമാക്കുകയോ സജ്ജമാക്കാതെ വിടുകയോ ആണെങ്കിൽ, ഒരു Android ആപ്പിന് ലൊക്കേഷൻ വിവരം ആക്‌സസ് ചെയ്യേണ്ടപ്പോൾ ഉപയോക്താവിന്റെ അനുമതി ആവശ്യപ്പെടുന്നതാണ്.</translation>
@@ -1321,6 +1366,7 @@
       നിങ്ങൾ ഈ ക്രമീകരണം പ്രാപ്‌തമാക്കുകയാണ് അല്ലെങ്കിൽ അപ്രാപ്‌തമാക്കുകയാണെങ്കിൽ, ഉപയോക്താവിന് <ph name="PRODUCT_NAME" />-ലെ ക്രമീകരണത്തെ മാറ്റാനോ അല്ലെങ്കിൽ മറികടക്കാനോ കഴിയില്ല.
 
       ഈ നയം സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിൽ, ഹോം ബട്ടൺ ദൃശ്യമാക്കണോ എന്നത് തിരഞ്ഞെടുക്കാൻ ഉപയോക്താവിനെ അനുവദിക്കും.</translation>
+<translation id="4483649828988077221">സ്വമേധയാലുള്ള അപ്‌ഡേറ്റ് പ്രവർത്തനരഹിതമാക്കുക</translation>
 <translation id="4485425108474077672">പുതിയ ടാബ് പേജ് URL കോൺഫിഗർ ചെയ്യുക</translation>
 <translation id="4492287494009043413">സ്‌ക്രീൻഷോട്ട് എടുക്കൽ അപ്രാപ്‌തമാക്കുക</translation>
 <translation id="4497968613298501984">എന്റർപ്രൈസ് ലോഗിന്നിനുള്ള URL-കളുടെ ലിസ്‌റ്റ് കോൺഫിഗർ ചെയ്യുക (HTTP, HTTPS സ്‌കീമുകൾക്ക് മാത്രം). പാസ്‍വേഡിന്റെ വിരലടയാളം ഈ URL-കളിൽ ക്യാപ്‌ചർ ചെയ്യുകയും പാസ്‍വേഡ് പുനരുപയോഗ കണ്ടെത്തലിന് ഉപയോഗിക്കുകയും ചെയ്യും.
@@ -1417,6 +1463,7 @@
           പിൻ നമ്പറിനെ ദുർബലമായി കണക്കാക്കുകയാണെങ്കിൽ ഉപയോക്താക്കൾക്ക് ഡിഫോൾട്ടായി ഒരു മുന്നറിയിപ്പ് ലഭിക്കും, എന്നാൽ അതൊരു പിശകല്ല.</translation>
 <translation id="4723829699367336876">വിദൂര ആക്സസ് ക്ലയന്റിൽ നിന്നും ഫയർവാൾ സഞ്ചാരം സാധ്യമാക്കുക</translation>
 <translation id="4725528134735324213">Android ബാക്കപ്പ് സേവനം പ്രവർത്തനക്ഷമമാക്കുക</translation>
+<translation id="4725801978265372736">പ്രാദേശിക ഉപയോക്താവിന്റെ പേരും റിമോട്ട് ആക്‌സസുള്ള ഹോസ്റ്റ് ഉടമയുടെ പേരും പൊരുത്തപ്പെടേണ്ടതാണ്</translation>
 <translation id="4733471537137819387">സം‍യോജിപ്പിക്കപ്പെട്ട HTTP പ്രാമാണീകരണവുമായി ബന്ധപ്പെട്ട നയങ്ങള്‍.</translation>
 <translation id="4744190513568488164"><ph name="PRODUCT_NAME" /> നിയുക്തമാക്കാനിടയുള്ള സെർവറുകൾ.
 
@@ -1515,6 +1562,7 @@
 
 സ്വയമേവ സംഭവിക്കേണ്ടതുണ്ടോ എന്ന് ഉപയോക്താവിനോട് ആവശ്യപ്പെട്ടേക്കാം.</translation>
 <translation id="5056708224511062314">സ്‌ക്രീൻ മാഗ്നിഫയർ പ്രവർത്തനരഹിതമാക്കി</translation>
+<translation id="5058573563327660283">സ്വമേധയാലുള്ള ക്ലീൻ അപ്പിനിടെ ഡിസ്‌ക് ഇടം ശൂന്യമാക്കാൻ ഉപയോഗിച്ച സ്‌ട്രാറ്റജി തിരഞ്ഞെടുക്കുന്നു (ഒഴിവാക്കി)</translation>
 <translation id="5067143124345820993">ലോഗിൻ ഉപയോക്താവിന്റെ വൈറ്റ്‌ ലിസ്റ്റ്</translation>
 <translation id="5068140065960598044">മെഷീൻ നയത്തെ <ph name="PRODUCT_NAME" /> ക്ലൗഡ് നയം അസാധുവാക്കുന്നു.</translation>
 <translation id="5075834892754086022">നയം സജ്ജമാക്കുകയാണെങ്കിൽ, കോൺഫിഗർ ചെയ്‌ത ചുരുങ്ങിയ പിൻ ദൈർഘ്യം നടപ്പിലാകും. (കൃത്യമായ ഏറ്റവും കുറഞ്ഞ പിൻ ദൈർഘ്യം 1 ആണ്; 1-ൽ കുറഞ്ഞ മൂല്യങ്ങൾ 1 ആയി കണക്കാക്കും.)
@@ -1551,6 +1599,7 @@
       ഈ നയം സജ്ജമാക്കിയിട്ടില്ലെങ്കിൽ, ഡിഫോൾട്ടായ ഇടവേള 3 മിനിറ്റ് ആണ്. ഏറ്റവും
       കുറഞ്ഞ ഇടവേള 30 സെക്കൻഡും ഏറ്റവും കൂടിയ ഇടവേള 24 മണിക്കൂറുമാണ് - ഈ
       പരിധിക്ക് പുറത്തുള്ള മൂല്യങ്ങളെ ഇതുമായി സംയോജിപ്പിക്കും.</translation>
+<translation id="5163002264923337812">പഴയ വെബ് അടിസ്ഥാനമാക്കിയുള്ള സൈൻ ഇൻ ഫ്ലോ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="5182055907976889880"><ph name="PRODUCT_OS_NAME" />-ൽ Google ഡ്രൈവ് കോൺഫിഗർ ചെയ്യുക.</translation>
 <translation id="5183383917553127163">അനുമതിയില്ലാത്ത ലിസ്റ്റിന്‌ ബാധകമല്ലാത്ത വിപുലീകരണങ്ങള്‍ നിര്‍ദേശിക്കാന്‍ നിങ്ങളെ അനുവദിക്കുന്നു.
 
@@ -1640,10 +1689,18 @@
 <translation id="5366977351895725771">false എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, ഈ ഉപയോക്താവ് മുഖേന സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താവിനെ സൃഷ്‌ടിക്കൽ പ്രവർത്തനരഹിതമാകും. നിലവിലുള്ള സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെല്ലാം തുടർന്നും ലഭ്യമാകും.
 
           true എന്നതായി സജ്ജമാക്കുകയോ കോൺഫിഗർ ചെയ്യാതിരിക്കുകയോ ആണെങ്കിൽ, ഈ ഉപയോക്താവിന് സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെ സൃഷ്‌ടിക്കാനും നിയന്ത്രിക്കാനും കഴിയും.</translation>
+<translation id="5370279767682621504">ഡിഫോൾട്ട് അല്ലാത്ത പോർട്ടുകളിൽ HTTP/0.9 പിന്തുണ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="5378985487213287085">ഡെസ്‌ക്‌ടോപ്പ് അറിയിപ്പുകൾ ദൃശ്യമാക്കുന്നതിന് വെബ്‌സൈറ്റുകളെ അനുവദിക്കുന്നത് സജ്ജമാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഡെസ്‌ക്‌ടോപ്പ് അറിയിപ്പുകൾ ദൃശ്യമാക്കുന്നത് സ്ഥിരസ്ഥിതിയായി അനുവദിച്ചേക്കാം, സ്ഥിരസ്ഥിതിയായി അവഗണിച്ചേക്കാം അല്ലെങ്കിൽ ഡെസ്‌ക്‌ടോപ്പ് അറിയിപ്പുകൾ ദൃശ്യമാക്കുന്നതിന് എല്ലാ സമയത്തും ഉപയോക്താവിനോട് ചോദിച്ചേക്കാം.
 
           ഈ നയം സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിൽ, 'AskNotifications' എന്നത് ഉപയോഗിക്കും കൂടാതെ ഉപയോക്താവിന് ഇത് മാറ്റാൻ കഴിയും.</translation>
 <translation id="538108065117008131">ഇനി പറയുന്ന ഉള്ളടക്ക തരങ്ങള്‍ കൈകാര്യം ചെയ്യാന്‍ <ph name="PRODUCT_FRAME_NAME" />-നെ അനുവദിക്കുന്നു.</translation>
+<translation id="5391363090783552279">ഈ നയം 'ട്രൂ' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, RFC1918/RFC4913 സ്വകാര്യ വിലാസങ്ങളിലെ മാത്രമല്ല എല്ലാ IP വിലാസങ്ങളിലെ Cast ഉപകരണങ്ങളിലേക്കും <ph name="PRODUCT_NAME" /> കണക്‌റ്റ് ചെയ്യും.
+
+          ഈ നയം 'ഫാൾസ്' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, RFC1918/RFC4913 സ്വകാര്യ വിലാസങ്ങളിലെ Cast ഉപകരണങ്ങളിലേക്ക് മാത്രമായിരിക്കും <ph name="PRODUCT_NAME" /> കണ‌ക്റ്റ് ചെയ്യുക.
+
+          ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, CastAllowAllIPs ഫീച്ചറുകൾ പ്രവർത്തനക്ഷമമല്ലാത്ത പക്ഷം, RFC1918/RFC4913 സ്വകാര്യ വിലാസങ്ങളിലെ Cast ഉപകരണങ്ങളിലേക്ക് മാത്രം <ph name="PRODUCT_NAME" /> കണക്‌റ്റ് ചെയ്യും.
+
+          "EnableMediaRouter" നയം 'ഫാൾസ്' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, അപ്പോൾ ഈ നയത്തിന്റെ മൂല്യത്തിൽ പ്രഭാവമൊന്നും ഉണ്ടാക്കില്ല.</translation>
 <translation id="5392172595902933844">Android-ന്റെ സ്‌റ്റാറ്റസിനെ കുറിച്ചുള്ള വിവരങ്ങൾ സെർവറിലേക്ക് തിരികെ അയയ്‌ക്കുന്നു.
 
      നയം 'തെറ്റ്' എന്ന് സജ്ജമാക്കുകയോ സജ്ജമാക്കാതെ വിടുകയോ ആണെങ്കിൽ, സ്‌റ്റാറ്റസ് വിവരങ്ങളൊന്നും റിപ്പോർട്ടുചെയ്യില്ല.
@@ -2032,6 +2089,8 @@
           നിങ്ങൾ "പ്രോക്‌സി സെർവർ സ്വയമേവ കണ്ടെത്തുക," തിരഞ്ഞെടുക്കുകയാണെങ്കിൽ, Android ആപ്പുകൾക്ക് "http://wpad/wpad.dat" സ്‌ക്രിപ്‌റ്റ് URL ലഭ്യമാക്കും. പ്രോക്‌സി സ്വയമേവ കണ്ടെത്തൽ പ്രോട്ടോക്കോളിന്റെ മറ്റ് ഭാഗങ്ങളൊന്നും ഉപയോഗിക്കില്ല.
 
           നിങ്ങൾ ".pac പ്രോക്‌സി സ്‌ക്രിപ്‌റ്റ്," തിരഞ്ഞെടുക്കുകയാണെങ്കിൽ Android ആപ്പുകൾക്ക് സ്‌ക്രിപ്‌റ്റ് URL നൽകുന്നതാണ്.</translation>
+<translation id="6440051664870270040">ഒരേ സമയത്ത് നാവിഗേറ്റ് ചെയ്യാനും പോപ്പ്-അപ്പുകൾ തുറക്കാനും സൈറ്റുകളെ അനുവദിക്കുക</translation>
+<translation id="645425387487868471"><ph name="PRODUCT_NAME" /> ഉൽപ്പന്നത്തിന്റെ നിർബന്ധിത സൈൻ ഇൻ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="6467613372414922590">ഉപയോക്തൃനില പ്രാദേശിക സന്ദേശമയയ്‌ക്കൽ ഹോസ്‌‌റ്റുകളെ അനുവദിക്കുക (അഡ്‌മിൻ അനുമതികളില്ലാതെ ഇൻസ്‌റ്റാൾചെയ്‌തത്)</translation>
 <translation id="6468980648680553776">ഈ നയം അവസാനിപ്പിച്ചിരിക്കുന്നു. പകരം RemoteAccessHostClientDomainList ഉപയോഗിക്കുക.</translation>
 <translation id="6473623140202114570">സുരക്ഷിത ബ്രൗസിംഗ് മുന്നറിയിപ്പ് ട്രിഗർ ചെയ്യാത്ത ഡൊമെയ്‌നുകളുടെ ലിസ്റ്റ് കോൺഫിഗർ ചെയ്യുക.</translation>
@@ -2105,9 +2164,15 @@
 
       ഈ നയം സജ്ജീകരിക്കാതെ വിടുകയാണെങ്കിൽ, നെറ്റ്‌വർക്ക് പ്രവചനം പ്രവർത്തനക്ഷമമാകും എന്നാൽ ഉപയോക്താവിന് അത് മാറ്റാനാകും.</translation>
 <translation id="6658245400435704251">സെർവറിലേക്ക് ആദ്യമായി അപ്‌ഡേറ്റ് നീക്കപ്പെട്ട സമയത്തിന് ശേഷം, ആ അപ്‌ഡേറ്റിന്റെ ഡൗൺലോഡിനെ യാദൃശ്ചികമായി ഒരു ഉപകരണം, എത്ര നിമിഷങ്ങളോളം കാലതാമസം വരുത്താം എന്ന് സൂചിപ്പിക്കുന്നു. ഉപകരണം, ഈ കാലതാമസ സമയത്തിന്റെ ഒരു ഭാഗം ചുവർ ഘടികാരത്തിന്റെ അടിസ്ഥാനത്തിൽ കാലതാമസം വരുത്താം, അപ്‌ഡേറ്റ് പരിശോധനകളുടെ എണ്ണത്തെ അടിസ്ഥാനമാക്കിയാണ് ഉപകരണം ബാക്കിയുള്ള ഭാഗം കാലതാമസം വരുത്തുന്നത്. എന്ത് സാഹചര്യമായാലും, ശാശ്വതമായി ഒരു അപ്‌ഡേറ്റ് ഡൗൺലോഡ് ചെയ്യുന്നതിനായി കാത്തിരിക്കുന്ന തരത്തിൽ ഉപകരണം സ്‌തംഭിച്ചുപോകാതിരിക്കുന്നതിനായി ഒരു സ്ഥിര അളവ് സമയത്തിലേക്ക് സ്‌കാറ്റർ നിർബന്ധിതമാക്കപ്പെടുന്നു.</translation>
+<translation id="6665670272107384733">അതിവേഗ അൺലോക്ക് ഉപയോഗിക്കാൻ ഉപയോക്താവ് എത്രതവണ പാസ്‌വേഡ് നൽകണമെന്നത് സജ്ജീകരിക്കുക</translation>
 <translation id="6689792153960219308">ഹാർഡ്‌വെയർ നില റിപ്പോർട്ട് ചെയ്യുക</translation>
 <translation id="6698071416141001300">പാസ്‌വേഡ് പുനരുപയോഗിച്ച്, പാസ്‍വേഡ് പരിരക്ഷ വഴി അപകടസാധ്യതാ അക്കൗണ്ട് ഫ്ലാഗ് ചെയ്യൽ ട്രിഗര്‍ ചെയ്തു</translation>
 <translation id="6699880231565102694">വിദൂര ആക്‌സസ്സ് ഹോസ്റ്റുകൾക്കായി ഇരട്ട-വസ്‌തുതാ പ്രാമാണീകരണം പ്രാപ്‌തമാക്കുക</translation>
+<translation id="6702257826895463228">ഒരേ സമയത്ത് നാവിഗേറ്റ് ചെയ്യാനും പോപ്പ്-അപ്പുകൾ തുറക്കാനും സൈറ്റുകളെ അനുവദിക്കുക
+
+     സമ്പൂർണ വിശദീകരണത്തിനായി https://www.chromestatus.com/features/5675755719622656 കാണുക.
+      ഈ നയം പ്രവർത്തനക്ഷമമാണെങ്കിൽ, സൈറ്റുകൾക്ക് ഒരേ സമയം നാവിഗേറ്റ് ചെയ്യാനും പുതിയ വിൻഡോകൾ/ടാബുകൾ തുറക്കാനും അനുവാദമുണ്ടായിരിക്കും.
+      ഈ നയം പ്രവർത്തനരഹിതമോ സജ്ജീകരിക്കാത്ത നിലയിലോ ആണെങ്കിൽ, സൈറ്റുകൾക്ക് ഒരേ സമയം നാവിഗേറ്റ് ചെയ്യാനും പുതിയ വിൻഡോകൾ/ടാബുകൾ തുറക്കാനും അനുവാദമുണ്ടായിരിക്കില്ല.</translation>
 <translation id="6724842112053619797">റോമിംഗ് ഉപയോക്തൃ പ്രൊഫൈൽ ഫോൾഡറിലോ <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" /> നയം വഴി അഡ്‌മിനിസ്‌ട്രേറ്റർ നൽകിയ ലൊക്കേഷനിലോ സൂക്ഷിച്ചിട്ടുള്ള ഒരു ഫയലിൽ, ബുക്ക്‌മാർക്കുകൾ, സ്വയമേവ പൂരിപ്പിക്കുന്ന വിവരങ്ങൾ, പാസ്‌വേഡുകൾ എന്നിവ പോലെ <ph name="PRODUCT_NAME" /> പ്രൊഫൈലുകളിൽ സൂക്ഷിച്ചിരിക്കുന്ന ക്രമീകരണവും റൈറ്റുചെയ്യും. ഈ നയം പ്രവർത്തനസജ്ജമാക്കുമ്പോൾ ക്ലൗഡ് സമന്വയിപ്പിക്കൽ പ്രവർത്തനരഹിതമാക്കുന്നു.
 
       ഈ നയം പ്രവർത്തനരഹിതമാക്കുകയോ അല്ലെങ്കിൽ സജ്ജമാക്കാതെ വിടുകയോ ആണെങ്കിൽ, സാധാരണ ലോക്കൽ ‌പ്രൊഫൈലുകൾ മാത്രമേ ഉപയോഗിക്കൂ.
@@ -2168,6 +2233,7 @@
 
       ഈ ക്രമീകരണം മാറ്റാനോ അസാധുവാക്കാനോ ഉപയോക്താക്കൾക്കാവില്ല.</translation>
 <translation id="6908640907898649429">സ്ഥിരസ്ഥിതി തിരയൽ ദാതാവിനെ കോണ്‍ഫിഗര്‍ ചെയ്യുന്നു. ഉപയോക്താവ് ഉപയോഗിക്കുന്ന അല്ലെങ്കില്‍ സ്ഥിരസ്ഥിതി തിരയൽ അപ്രാപ്തമാക്കാനായി തെരഞ്ഞെടുക്കുന്ന സ്ഥിരസ്ഥിതി തിരയൽ ദാതാവിനെ നിങ്ങള്‍ക്ക് നിര്‍ദേശിക്കാന്‍ കഴിയും</translation>
+<translation id="6913068954484253496">എല്ലാ IP വിലാസങ്ങളിലെയും Cast ഉപകരണങ്ങളിലേക്ക് കണക്‌റ്റ് ചെയ്യുന്നതിന് <ph name="PRODUCT_NAME" /> ഉൽപ്പന്നത്തെ അനുവദിക്കുക.</translation>
 <translation id="6915442654606973733">സംഭാഷണ ഫീഡ്‌ബാക്ക് ഉപയോഗസഹായി സവിശേഷത പ്രവർത്തനക്ഷമമാക്കുക.
 
           ഈ നയം true എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, സംഭാഷണ ഫീഡ്‌ബാക്ക് എല്ലായ്‌പ്പോഴും പ്രവർത്തനക്ഷമമായിരിക്കും.
@@ -2271,6 +2337,7 @@
 <translation id="7123160381479171745">ഉപകരണത്തിൽ ലോഗിൻ ചെയ്യാൻ അനുമതിയുള്ള ഉപയോക്താക്കളുടെ ലിസ്‌റ്റ് നിർവചിക്കുന്നു. <ph name="USER_WHITELIST_ENTRY_FORMAT" /> ഫോമിലെ എൻട്രികൾ <ph name="USER_WHITELIST_ENTRY_EXAMPLE" /> പോലുള്ളതാണ്. ഒരു ഡൊമെയ്‌നിൽ അനിയന്ത്രിതമായി ഉപയോക്താക്കളെ അനുവദിക്കുന്നതിന്, <ph name="USER_WHITELIST_ENTRY_WILDCARD" /> ഫോം എൻട്രികൾ ഉപയോഗിക്കുക.
 
       ഈ നയം കോൺഫിഗർ ചെയ്‌തിട്ടില്ലെങ്കിൽ, സൈൻ ഇൻ ചെയ്യുന്നതിന് ഏതുതരം ഉപയോക്താക്കളെയാണ് അനുവദിച്ചിരിക്കുന്നത് എന്നതിൽ നിയന്ത്രണങ്ങളൊന്നും ഉണ്ടാകില്ല. പുതിയ ഉപയോക്താക്കളെ സൃഷ്‌ടിക്കുന്നതിനായി ഇപ്പോഴും <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> നയം ഉചിതമായി കോൺഫിഗർ ചെയ്യേണ്ടതുണ്ടെന്ന കാര്യം ശ്രദ്ധിക്കുക.</translation>
+<translation id="7126716959063786004">ടാസ്‌ക് മാനേജറിൽ അവസാനിപ്പിക്കൽ പ്രോസസ്സുകൾ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="7127892035367404455">ടാർഗറ്റ് പതിപ്പിലേക്ക് തിരികെ പോവുക</translation>
 <translation id="7128918109610518786">ലോഞ്ചർ ബാറിൽ പിൻ ചെയ്‌ത അപ്ലിക്കേഷനുകളായി കാണിക്കുന്ന <ph name="PRODUCT_OS_NAME" /> അപ്ലിക്കേഷൻ ഐഡന്റിഫയറുകളെ ലിസ്റ്റുചെയ്യുന്നു.
 
@@ -2307,6 +2374,7 @@
           <ph name="PLUGINS_ALLOWED_FOR_URLS_POLICY_NAME" /> നയത്തിൽ വ്യക്തമായി ലിസ്‌റ്റ് ചെയ്ത ഡൊമെയ്നുകൾക്ക് മാത്രമേ സ്വമേധയാ പ്ലേബാക്ക് അനുവദിക്കുകയുള്ളൂ. എല്ലാ സൈറ്റുകൾക്കും സ്വമേധയായുള്ള പ്ലേബാക്ക് പ്രവർത്തനക്ഷമമാക്കാൻ താൽപ്പര്യമുണ്ടെങ്കിൽ, ഈ ലിസ്‌റ്റിലേക്ക് http://*, https://* എന്നിവ ചേർക്കുന്നത് പരിഗണിക്കുക.
 
           ഈ നയം സജ്ജമാക്കാതെ വിട്ടാൽ, ഉപയോക്താവിന് ഈ ക്രമീകരണം നേരിട്ട് മാറ്റാനാകും.</translation>
+<translation id="723103540848640830">ലോക്ക് സ്‌ക്രീൻ പിന്നിന്റെ ഏറ്റവും കുറഞ്ഞ ദൈർഘ്യം സജ്ജീകരിക്കുക</translation>
 <translation id="7234280155140786597">നിരോധിക്കപ്പെട്ട നേറ്റീവ് സന്ദേശമയയ്‌ക്കൽ ഹോസ്റ്റുകളുടെ പേരുകൾ (അല്ലെങ്കിൽ എല്ലാത്തിനുമായി *)</translation>
 <translation id="7236775576470542603">ലോഗിൻ സ്‌ക്രീനിൽ പ്രവർത്തനക്ഷമമായ സ്‌ക്രീൻ മാഗ്നിഫയറിന്റെ സ്ഥിര തരം സജ്ജമാക്കുക.
 
@@ -2371,6 +2439,11 @@
 <translation id="7336878834592315572">സെഷന്റെ ദൈർഘ്യത്തിനായി കുക്കികൾ നിലനിർത്തുക</translation>
 <translation id="7340034977315324840">ഉപകരണ പ്രവർത്തന സമയങ്ങൾ റിപ്പോർട്ടുചെയ്യുക</translation>
 <translation id="7343497214039883642">ഉപകരണങ്ങൾക്കായുള്ള എന്‍റർപ്രൈസ് പ്രിന്റർ കോൺഫിഗറേഷൻ</translation>
+<translation id="7367028210010532881">ക്ഷുദ്രകരമായിരിക്കാൻ സാധ്യതയുള്ളതെന്ന് ഫ്ലാഗ് ചെയ്‌തിട്ടുള്ള സൈറ്റുകളിലേക്ക് ഉപയോക്താക്കൾ നാവിഗേറ്റ് ചെയ്യുമ്പോൾ സുരക്ഷിത ബ്രൗസിംഗ് സേവനം ഒരു മുന്നറിയിപ്പ് പേജ് ദൃശ്യമാക്കുന്നു. ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുന്നതിലൂടെ, മുന്നറിയിപ്പ് പേജിൽ നിന്ന് ഏതെങ്കിലും തരത്തിൽ ക്ഷുദ്രകരമായ സൈറ്റുകളിലേക്ക് ഉപയോക്താക്കൾ പോകുന്നത് തടയുന്നു.
+
+      ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയിട്ടുണ്ടെങ്കിലോ കോൺഫിഗർ ചെയ്‌തിട്ടില്ലെങ്കിലോ, മുന്നറിയിപ്പ് ദൃശ്യമായതിനുശേഷം ഉപയോക്താക്കൾക്ക് ഫ്ലാഗ് ചെയ്‌ത സൈറ്റുകളിലേക്ക് പോകാൻ കഴിയും.
+
+     സുരക്ഷിത ബ്രൗസിംഗിനെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് https://developers.google.com/safe-browsing കാണുക.</translation>
 <translation id="7389872682701720082">ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുകയാണെങ്കിൽ‍, കാലഹരണപ്പെട്ടത് അല്ലാത്ത പ്ലഗിനുകൾ എല്ലായ്‌പ്പോഴും പ്രവര്‍ത്തിക്കും. 
 
 ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയിട്ടുണ്ടെങ്കിലോ സജ്ജമാക്കിയിട്ടില്ലെങ്കിലോ, അംഗീകാരം ആവശ്യമായ പ്ലഗിനുകൾ പ്രവര്‍ത്തിപ്പിക്കാൻ ഉപയോക്താക്കളോട് അനുവാദം ചോദിക്കും. സുരക്ഷയ്‌ക്ക് ഭീഷണിയാണ് ഈ പ്ലഗിനുകൾ‍.</translation>
@@ -2417,6 +2490,11 @@
       GAIA എന്ന് സജ്ജമാക്കിയെങ്കിൽ, സാധാരണ GAIA പരിശോധിച്ചുറപ്പിക്കൽ ഫ്ലോ വഴിയായിരിക്കും ലോഗിൻ ചെയ്യാനാകുക.
 
       SAML_INTERSTITIAL എന്നാണ് സജ്ജമാക്കിയിരിക്കുന്നതെങ്കിൽ, ലോഗിൻ, ഉപകരണത്തിന്റെ എൻറോൾമെന്റ് ഡൊമെയ്‌നിന്റെ SAML IdP വഴി ഉപയോക്താവിന് പരിശോധിച്ചുറപ്പിക്കലുമായി മുന്നോട്ട് പോകാൻ പറയുന്ന ഒരു ഇന്റർസ്‌റ്റീഷ്യൽ സ്‌ക്രീൻ കാണിക്കും അല്ലെങ്കിൽ സാധാരണ GAIA ലോഗിൻ ഫ്ലോയിലേക്ക് മടങ്ങുക.</translation>
+<translation id="755951849901630953">സജ്ജീകരിക്കാത്തപ്പോഴും 'ട്രൂ' എന്ന് സജ്ജീകരിച്ചിരിക്കുമ്പോഴും, <ph name="PRODUCT_NAME" /> എന്നതിലെ എല്ലാ ഘടകങ്ങളുടെയും ഘടക അപ്‌ഡേറ്റുകൾ പ്രവർത്തനക്ഷമമാക്കുന്നു.
+
+      'ഫാൾസ്' എന്ന് സജ്ജീകരിച്ചിരിക്കുകയാണെങ്കിൽ, ഘടകങ്ങളുടെ അപ്‌ഡേറ്റുകളെ പ്രവർത്തനരഹിതമാക്കും. എന്നിരുന്നാലും, ചില ഘടകങ്ങളെ ഈ നയത്തിൽ നിന്ന് ഒഴിവാക്കിയിരിക്കുന്നു: എക്‌സിക്യൂട്ട് ചെയ്യാനാകുന്ന കോഡ് ഉൾപ്പെട്ടിട്ടില്ലാത്തതോ ബ്രൗസറിന്റെ പ്രവർത്തനരീതിയിൽ കാര്യമായ മാറ്റം വരുത്താത്തതോ സുരക്ഷയ്‌ക്ക് ഒഴിച്ചുകൂടാനാവാത്തതോ ആയ ഏതെങ്കിലും ഘടകത്തിന്റെ അപ്‌ഡേറ്റുകളെ പ്രവർത്തനരഹിതമാക്കില്ല.
+      അത്തരം ഘടകങ്ങളുടെ ഉദാഹരണങ്ങളിൽ സർട്ടിഫിക്കറ്റ് അസാധുവാക്കൽ ലിസ്‌റ്റുകളും സുരക്ഷിത ബ്രൗസിംഗ് വിവരങ്ങളും ഉൾപ്പെടുന്നു.
+      സുരക്ഷിത ബ്രൗസിംഗിനെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് https://developers.google.com/safe-browsing കാണുക.</translation>
 <translation id="757395965347379751">ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ <ph name="PRODUCT_NAME" />, മൂല്യനിർണ്ണയം നടത്താനാവുന്നത്രയും സമയം SHA-1 സൈൻ ചെയ്‌ത സർട്ടിഫിക്കറ്റുകളെ അതിന് അനുവദിക്കുകയും പ്രാദേശികമായി ഇൻസ്‌റ്റാൾ ചെയ്‌ത CA സർട്ടിഫിക്കറ്റുകളിലേക്ക് ബന്ധിപ്പിക്കുകയും ചെയ്യും.
 
       ഈ നയം SHA-1 സിഗ്‌നേച്ചറുകളെ അനുവദിക്കുന്ന ഓപ്പറേറ്റിംഗ് സിസ്‌റ്റം സർട്ടിഫിക്കറ്റ് പരിശോധിച്ചുറപ്പിക്കൽ സ്‌റ്റാക്കിനെ ആശ്രയിച്ചുള്ളതാണെന്നത് ശ്രദ്ധിക്കുക.ഒരു OS അപ്‌ഡേറ്റ്, SHA-1 സർട്ടിഫിക്കറ്റുകളുടെ OS കൈകാര്യം ചെയ്യൽ മാറ്റുകയാണെങ്കിൽ, ഈ നയത്തിന് പിന്നെ പ്രാബല്യമുണ്ടായേക്കില്ല.  കൂടാതെ, SHA-1-ൽ നിന്ന് വിട്ടുപോകുന്നതിന് എന്റർപ്രൈസുകൾക്ക് കൂടുതൽ സമയം നൽകാൻ ഉദ്ദേശിച്ചുള്ള ഒരു താൽക്കാലിക പരിഹാരം കൂടിയാണ് ഈ നയം.  2019 ജനുവരി 1-നോ അടുത്ത മറ്റൊരു ദിവസമോ ഈ നയം നീക്കംചെയ്യപ്പെടും.
@@ -2443,6 +2521,21 @@
       നിങ്ങള്‍ ഈ ക്രമീകരണം പ്രാപ്തമാക്കിയാല്‍, <ph name="PRODUCT_NAME" />  നിര്‍ദേശിച്ചിട്ടുള്ള ലോക്കെൽ ആകും ഉപയോഗിക്കുക. കോണ്‍ഫിഗര്‍ ചെയ്തിട്ടുള്ള ലോക്കെൽ പിന്തുണ ഇല്ലെങ്കില്‍, പകരം 'en-US' ഉപയോഗിക്കുന്നു.
 
       ഈ ക്രമീകരണം അപ്രാപ്തമാക്കിയിട്ടുണ്ട് അല്ലെങ്കില്‍ സജ്ജമാക്കിയിട്ടില്ലെങ്കിൽ, <ph name="PRODUCT_NAME" /> ഒന്നുകില്‍ ഉപയോക്തൃ-നിര്‍ദിഷ്ട ലോക്കേൽ (കോണ്‍ഫിഗര്‍ ചെയ്തിട്ടുണ്ടെങ്കില്‍), സിസ്റ്റം ലോക്കേൽ  ഉപയോഗിക്കും അല്ലെങ്കില്‍ 'en-US' ലോക്കെൽ എന്ന ഇതരമാര്‍ഗം ഉപയോഗിക്കും.</translation>
+<translation id="7641363659597330616">സുരക്ഷാ തീരുമാനം അസാധുവാക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കാതെ, <ph name="PRODUCT_NAME" /> പൂർണ്ണമായി ബ്ലോക്ക് ചെയ്യുന്ന ഡൗൺലോഡുകളുടെ തരം കോൺഫിഗർ ചെയ്യുന്നു.
+
+      നിങ്ങൾ ഈ നയം സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ചില തരത്തിലുള്ള ഡൗൺലോഡുകൾ <ph name="PRODUCT_NAME" /> തടയും, മാത്രമല്ല സുരക്ഷാ മുന്നറിയിപ്പുകൾ മറികടക്കാൻ ഉപയോക്താവിനെ അനുവദിക്കുകയുമില്ല.
+
+      'അപകടകരമായ ഡൗൺലോഡുകൾ ബ്ലോക്ക് ചെയ്യുക' എന്ന ഓപ്ഷൻ തിരഞ്ഞെടുക്കുമ്പോൾ, സുരക്ഷിത ബ്രൗസിംഗ് മുന്നറിയിപ്പുകൾ ഉള്ളവ ഒഴികെയുള്ള എല്ലാ ഡൗൺലോഡുകളും അനുവദിക്കപ്പെടും.
+
+      ' അപകടകരമാകാൻ സാധ്യതയുള്ള ഡൗൺലോഡുകൾ ബ്ലോക്കുചെയ്യുക' എന്ന ഓപ്ഷൻ തിരഞ്ഞെടുക്കുമ്പോൾ, അപകടകരമാകാൻ സാധ്യതയുള്ള ഡൗൺലോഡുകളെ കുറിച്ചുള്ള 'സുരക്ഷിത ബ്രൗസിംഗ്' മുന്നറിയിപ്പുകൾ ഉള്ളവ ഒഴികെയുള്ള, എല്ലാ ‌ഡൗൺലോഡുകളും അനുവദിക്കപ്പെടും.
+
+      'എല്ലാ ഡൗൺലോഡുകളും ബ്ലോക്ക് ചെയ്യുക' എന്ന ഓപ്ഷൻ തിരഞ്ഞെടുക്കുമ്പോൾ എല്ലാ ഡൗൺലോഡുകളും ബ്ലോക്ക് ചെയ്യപ്പെടും.
+
+      ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, (അല്ലെങ്കിൽ 'പ്രത്യേക നിയന്ത്രണങ്ങൾ ഒന്നുമില്ല' എന്ന ഓപ്‌ഷൻ തിരഞ്ഞെടുക്കുമ്പോൾ), 'സുരക്ഷിത ബ്രൗസിംഗ്' വിശകലന ഫലങ്ങളെ അടിസ്ഥാനമാക്കിയുള്ള, സാധാരണ സുരക്ഷാ നിയന്ത്രണങ്ങൾക്ക് വിധേയമായാണ് ഡൗൺലോഡുകൾ നടക്കുക.
+
+      വെബ് പേജ് ഉള്ളടക്കത്തിൽ നിന്നോ, 'ഡൗൺലോഡ് ലിങ്ക് ...' സന്ദര്‍ഭ മെനു ഓപ്ഷനിൽ നിന്നോ സംഭവിക്കുന്ന ഡൗൺലോഡുകൾക്ക് ഈ നിയന്ത്രണങ്ങൾ ബാധകമാണ്. നിലവിൽ പ്രദർശിപ്പിച്ച പേജിന്റെ 'സംരക്ഷിച്ചവ' അല്ലെങ്കിൽ ‌'ഡൗൺലോഡ് ചെയ്‌തവ' എന്നിവയ്ക്ക് ഈ നിയന്ത്രണങ്ങൾ ബാധകമാവില്ല, 'അച്ചടിക്കൽ' ഓ‌പ്‌ഷനുകളിൽ നിന്ന് PDF ആയി സംരക്ഷിക്കുന്നതിനും ഇത് ബാധകമല്ല.
+
+      സുരക്ഷിത ബ്രൗസിംഗിനെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് https://developers.google.com/safe-browsing കാണുക.</translation>
 <translation id="7643883929273267746"><ph name="PRODUCT_NAME" />-ൽ ദൃശ്യമാകുന്ന അക്കൗണ്ടുകൾ പരിമിതപ്പെടുത്തുക</translation>
 <translation id="7651739109954974365">ഉപകരണത്തിനായി ഡാറ്റ റോമിംഗ് പ്രാപ്‌തമാക്കിയിട്ടുണ്ടോ എന്നത് നിർണ്ണയിക്കുന്നു. ട്രൂ എന്നായി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ഡാറ്റ റോമിംഗ് അനുവദിക്കും. കോൺഫിഗർ ചെയ്‌തിട്ടില്ലെങ്കിലോ ഫാൾസ് എന്നായി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിലോ, ഡാറ്റ റോമിംഗ് ലഭ്യമാകില്ല.</translation>
 <translation id="7683777542468165012">ഡൈനാമിക്ക് നയം പുതുക്കല്‍</translation>
@@ -2523,6 +2616,20 @@
       ഈ ക്രമീകരണം കോൺഫിഗർ ചെയ്‌തിരിക്കുന്നെങ്കിൽ, ഉപയോക്താക്കൾക്ക് അത് സ്വയം മാറ്റാനാവില്ല.
 
       ഈ ക്രമീകരണം കോൺഫിഗർ ചെയ്‌തിട്ടില്ലെങ്കിൽ, ഉപയോക്താക്കൾക്ക് Android ക്രമീകരണ ആപ്പിൽ Android ബാക്കപ്പ് സേവനം ഓണാക്കാനും ഓഫാക്കാനും കഴിയും.</translation>
+<translation id="780603170519840350">ssubjectPublicKeyInfo ഹാഷുകളുടെ ഒരു ലിസ്‌റ്റിനായുള്ള 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി' ആവശ്യകതകൾ നടപ്പിലാക്കുന്നത് പ്രവർത്തനരഹിതമാക്കുന്നു.
+
+      subjectPublicKeyInfo ഹാഷുകളിലെ ഏതെങ്കിലും നിർദ്ദിഷ്‌ട സർട്ടിഫിക്കറ്റുകളുള്ള സർട്ടിഫിക്കറ്റ് ശൃംഖലയ്ക്കായി, 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി' വെളിപ്പെടുത്തൽ ആവശ്യങ്ങൾ പ്രവർത്തനരഹിതമാക്കാൻ ഈ നയം അനുവദിക്കുന്നു. സർട്ടിഫിക്കറ്റുകൾ ശരിയായ രീതിയിൽ എല്ലാവർക്കുമായി വെളിപ്പെടുത്തിയിട്ടില്ലാത്തതിനാൽ, അതിന്റെ വിശ്വാസ്യത നഷ്‌ടമാകുമെങ്കിലും തുടർന്നും എന്റർപ്രൈസ് ഹോസ്‌റ്റുകൾക്കായി അതിനെ ഉപയോഗിക്കാൻ ഇത് അനുവദിക്കും. 
+
+       ഈ നയം സജ്ജമാക്കുമ്പോൾ, 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി' പ്രവർത്തനരഹിതമാക്കുന്നതിനായി, താഴെപ്പറയുന്ന വ്യവസ്ഥകളിൽ ഏതെങ്കിലും ഒന്ന് അനുസരിക്കേണ്ടതാണ്:
+      1. subjectPublicKeyInfo സർട്ടിഫിക്കറ്റിന്റെ സെർവർ ആയിരിക്കണം ഹാഷ്.
+      2. സർട്ടിഫിക്കറ്റ് ശൃംഘലയിലെ CA സർട്ടിഫിക്കറ്റിൽ കാണുന്ന 
+ഒരു subjectPublicKeyInfo ആണ് ഹാഷ്. X.509v3 nameConstraints വിപുലീകരണം, permittedSubtrees-ൽ ഉള്ള ഒന്നോ അതിലധികമോ directoryName nameConstraints, ഒരു  organizationName ആട്രിബ്യൂട്ടുള്ള directoryName എന്നിവ വഴി ആ CA സർട്ടിഫിക്കറ്റ് പരസ്‌പരം ബന്ധിപ്പിച്ചിരിക്കുന്നു. 
+      3. സർട്ടിഫിക്കറ്റ് ശൃംഖലയിലെ CA സർട്ടിഫിക്കറ്റിൽ കാണുന്ന 
+ഒരു subjectPublicKeyInfo ആണ് ഹാഷ്. ഇതേ ക്രമത്തിലും ബൈറ്റ്-ഫോർ-ബൈറ്റ് ഐഡന്റിക്കൽ മൂല്യങ്ങൾ വഴിയും സർട്ടിഫിക്കറ്റ് Subject-ൽ CA സർട്ടിഫിക്കറ്റിന് ഒന്നോ അതിലധികമോ organizationName ആട്രിബ്യൂട്ടുകളും, സർവറിന്റെ സർട്ടിഫിക്കറ്റിൽ ഇത്രയും എണ്ണം തന്നെ organizationName ആട്രിബ്യൂട്ടുകളും ഉണ്ടാകും.  
+
+      ഹാഷ് അൽഗരിത നാമം, "/" ക്യാരക്റ്റർ, നിർദ്ദിഷ്‌ട സർട്ടിഫിക്കിറ്റിലെ DER-‌എൻകോഡ് ചെയ്‌ത subjectPublicKeyInfo എന്നതിന് ആ ഹാഷ് അൽഗരിതത്തിന്റെ  Base64 എൻകോഡിംഗ് ബാധകമാക്കൽ, എന്നിവയെ പരസ്‌പരം ബന്ധിപ്പിച്ചാണ് ഒരു subjectPublicKeyInfo ഹാഷിനെ വേർതിരിക്കുന്നത്. RFC 7469,  സെക്‌ഷൻ 2.4-ൽ നിർവചിച്ചിരിക്കുന്നത് പോലെ, ഈ Base64 എൻകോഡിംഗ് എന്നത് SPKI ഫിംഗർപ്രിന്റിന് സമാനമായ ഫോർമാറ്റാണ്. തിരിച്ചറിയപ്പെടാത്ത ഹാഷ് അൽഗരിതം അവഗണിക്കപ്പെടുന്നു. ഈ സമയത്ത് പിന്തുണയ്‌ക്കപ്പെടുന്ന ഒരേ ഒരു ഹാഷ് അൽഗരിതം "sha256" ആണ്.
+
+      ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി' നയം അനുസരിച്ച് വെളിപ്പെടുത്തിയിട്ടില്ലാത്തതും എന്നാൽ 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി'യിലൂടെ വെളിപ്പെടുത്തേണ്ടതുമായ ഏതൊരു സർട്ടിഫിക്കറ്റിനെയും വിശ്വാസ്യതയില്ലാത്തതായി മാത്രമേ പരിഗണിക്കുകയുള്ളൂ.</translation>
 <translation id="7818131573217430250">ലോഗിൻ സ്‌ക്രീനിൽ ഉയർന്ന ദൃശ്യതീവ്രതയുടെ സ്ഥിര അവസ്ഥ സജ്ജമാക്കുക</translation>
 <translation id="7822837118545582721">ഈ നയം 'ശരി' എന്ന് സജ്ജമാക്കിയിരിക്കുമ്പോൾ, ഉപയോക്താക്കൾക്ക് എക്‌സ്‌റ്റേണൽ സ്‌റ്റോറേജ് ഉപകരണങ്ങളിൽ ഒന്നും തന്നെ റൈറ്റുചെയ്യാനാവില്ല.
 
@@ -2576,6 +2683,7 @@
       ഈ നയം സജ്ജമാക്കാതെ വിടുകയാണെങ്കിൽ, ഇത് പ്രവർത്തനക്ഷമമാക്കുമെങ്കിലും ഉപയോക്താവിന് അത് മാറ്റാനാകും.</translation>
 <translation id="7953256619080733119">നിയന്ത്രിത ഉപയോക്തൃ മാനുവൽ ഒഴിവാക്കൽ ഹോസ്റ്റുകൾ</translation>
 <translation id="7958537754689366707">ഓരോ പന്ത്രണ്ട് മണിക്കൂറിലും പാസ്‌വേഡ് നൽകേണ്ടതുണ്ട്</translation>
+<translation id="7961779417826583251">ലെഗസി സർട്ടിഫിക്കറ്റ് അധികാരികളുടെ ഒരു ലിസ്‌റ്റിനായുള്ള സർട്ടിഫിക്കറ്റ് സുതാര്യത നടപ്പിലാക്കൽ പ്രവർത്തനരഹിതമാക്കുക</translation>
 <translation id="7974114691960514888">ഈ നയം ഇനിമുതൽ പിന്തുണയ്‌ക്കില്ല.
           വിദൂര ക്ലയന്റിലേക്ക് ഒരു കണക്‌ട് ചെയ്യുമ്പോൾ STUN, റിലേ സെർവറുകളുടെ ഉപയോഗം പ്രാപ്‌തമാക്കുന്നു.
 
@@ -2746,6 +2854,7 @@
       ഈ നയം സജ്ജമാക്കാതെ വിടുകയോ പ്രവർത്തനരഹിതമാക്കുകയോ ആണെങ്കിൽ, ഉപയോക്താവ് PDF പ്ലഗിൻ പ്രവർത്തനരഹിതമാക്കിയില്ലെങ്കിൽ PDF ഫയലുകൾ തുറക്കാൻ അത് ഉപയോഗിക്കും.</translation>
 <translation id="8402079500086185021">PDF ഫയലുകളെ എപ്പോഴും എക്‌സ്‌റ്റേണലായി തുറക്കുക</translation>
 <translation id="8412312801707973447">ഓൺലൈൻ OCSP/CRL ചെക്കുകൾ നടപ്പിലാക്കിയിട്ടുണ്ടോ</translation>
+<translation id="8417305981081876834">ലോക്ക് സ്‌ക്രീൻ പിന്നിന്റെ പരമാവധി ദൈർഘ്യം സജ്ജമാക്കുക</translation>
 <translation id="841977920223099909">പാസ്‍വേഡ് പരിരക്ഷ മുന്നറിയിപ്പ് ട്രിഗ്ഗര്‍</translation>
 <translation id="8424255554404582727">ഓരോ റീബൂട്ടിലും വീണ്ടും ഉപയോഗിച്ച ഡിഫോൾട്ട് ഡിസ്‌പ്ലേ തിരിക്കൽ സജ്ജമാക്കുക</translation>
 <translation id="8426231401662877819">സ്‌ക്രീൻ 90 ഡിഗ്രി ഘടികാരദിശയിൽ തിരിക്കുക</translation>
@@ -2825,6 +2934,19 @@
 
           'DefaultSearchProviderEnabled' നയം പ്രാപ്‌തമാക്കിയെങ്കിൽ മാത്രമേ ഈ നയം പരിഗണിക്കുകയുള്ളൂ.</translation>
 <translation id="8731693562790917685">ഒരു പ്രതേക തരം ഉള്ളടക്കം (ഉദാഹരണത്തിന്‌ കുക്കികള്‍, ഇമേജുകള്‍ അല്ലെങ്കില്‍ JavaScript) എങ്ങനെ കൈകാര്യം ചെയ്യണമെന്ന് നിര്‍ദേശിക്കാന്‍ ഉള്ളടക്ക ക്രമീകരണം നിങ്ങളെ അനുവദിക്കുന്നു.</translation>
+<translation id="8733448613597049197"><ph name="PRODUCT_NAME" /> ഉൽപ്പന്നത്തിന്റെ സുരക്ഷിത ബ്രൗസിംഗിന്റെ വിപുലീകൃത റിപ്പോർട്ടിംഗ് പ്രവർത്തനക്ഷമമാക്കുകയും ഒപ്പം ഈ ക്രമീകരണം മാറ്റുന്നതില്‍ നിന്ന് ഉപയോക്താക്കളെ തടയുകയും ചെയ്യുക.
+
+      അപകടകരമായ ആപ്പുകളും സൈറ്റുകളും കണ്ടെത്താൻ സഹായിക്കാൻ, ചില സിസ്‌റ്റം വിവരങ്ങളും പേജ് ഉള്ളടക്കവും, Google സെർവറുകളിലേക്ക് വിപുലീകൃത റിപ്പോർട്ടിംഗ് അയയ്‌ക്കുന്നു.
+
+      ക്രമീകരണം 'ട്രൂ' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ആവശ്യമുള്ളപ്പോഴൊക്കെ (ഉദാഹരണമായി, ഒരു സുരക്ഷ ഇന്റർസ്‌റ്റീഷ്യൽ കാണിക്കുമ്പോൾ) റിപ്പോർട്ട് സൃഷ്‌ടിക്കുകയും അയയ്ക്ക‌ുകയും ചെയ്യും.
+
+      ക്രമീകരണം 'ഫാൾസ്' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, റിപ്പോർട്ട് അയയ്ക്കില്ല.
+
+      ഈ നയം 'ട്രൂ' അല്ലെങ്കിൽ 'ഫാൾസ്' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ഉപയോക്താവിന് ക്രമീകരണം പരിഷ്‌ക്കരിക്കാനാവില്ല.
+
+      നയം സജ്ജീകരിക്കാതെ വിടുകയാണെങ്കിൽ, ഉപയോക്താവിന് ക്രമീകരണം മാറ്റാനും റിപ്പോർട്ടുകൾ അയയ്ക്കണോ വേണ്ടയോ എന്ന് തീരുമാനിക്കാനും കഴിയും.
+
+      സുരക്ഷിത ബ്രൗസിംഗിനെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് https://developers.google.com/safe-browsing കാണുക.</translation>
 <translation id="8736538322216687231">YouTube-ൽ കുറഞ്ഞ നിയന്ത്രിത മോഡ് നിർബന്ധിതമാക്കുക</translation>
 <translation id="8749370016497832113"><ph name="PRODUCT_NAME" />-ലെ ബ്രൗസിംഗ് ചരിത്രവും ഡൗൺലോഡ് ചരിത്രവും ഇല്ലാതാക്കുന്നത് പ്രവർത്തനക്ഷമമാക്കുകയും ഈ ക്രമീകരണങ്ങൾ മാറ്റുന്നതിൽ നിന്ന് ഉപയോക്താക്കളെ തടയുകയും ചെയ്യുന്നു.
 
@@ -2861,6 +2983,7 @@
 <translation id="8838303810937202360">ഓരോ ഉപയോക്താക്കൾക്കുമായി വീണ്ടും ഡൗൺലോഡുചെയ്യുന്നത് ഒഴിവാക്കുന്നതിന് ഒന്നിലധികം ഉപയോക്താക്കൾ ഒരു ഉപകരണത്തിൽ ഇൻസ്റ്റാളുചെയ്യുന്നതിനായി <ph name="PRODUCT_OS_NAME" /> ആപ്‌സും വിപുലീകരണങ്ങളും കാഷെ ചെയ്യുന്നു.
       നയം കോൺഫിഗചെയ്‌തിട്ടില്ലങ്കിലോ മൂല്യം 1 MB-യേക്കാൾ കുറവാണെങ്കിലോ, <ph name="PRODUCT_OS_NAME" /> എന്നത് സ്ഥിര കാഷെ വലുപ്പം ഉപയോഗിക്കും.</translation>
 <translation id="8858642179038618439">YouTube സുരക്ഷ മോഡ് ഫോഴ്‌സുചെയ്യുക</translation>
+<translation id="8860342862142842017">subjectPublicKeyInfo ഹാഷുകളുടെ ഒരു ലിസ്‌റ്റിനായുള്ള 'സർട്ടിഫിക്കറ്റ് ട്രാൻസ്‌പരൻസി' നടപ്പിലാക്കൽ പ്രവർത്തനരഹിതമാക്കുക</translation>
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME" />, ഒരു സൈറ്റ് റെൻഡർ ചെയ്‌തിരിക്കുമ്പോൾ ദൃശ്യമാകുന്ന നിരസിക്കൽ ആവശ്യം നിയന്ത്രിക്കുക.</translation>
 <translation id="8867464911288727016"><ph name="PRODUCT_NAME" /> എന്നതിൽ സംയോജിത Google Translate സേവനം പ്രാപ്‌തമാക്കുക.
 
@@ -3049,6 +3172,7 @@
 <translation id="915194831143859291">ഈ നയം 'false' ആയി സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിലോ കോൺഫിഗർ ചെയ്തിട്ടില്ലെങ്കിലോ, ഉപകരണം ഷട്ട് ഡൗൺ ചെയ്യാൻ <ph name="PRODUCT_OS_NAME" /> ഉപയോക്താവിനെ അനുവദിക്കും.
       ഈ നയം 'true' ആയി സജ്ജമാക്കുകയാണെങ്കിൽ, ഉപയോക്താവ് ഉപകരണം ഷട്ട് ഡൗൺ ചെയ്യുമ്പോൾ <ph name="PRODUCT_OS_NAME" /> റീബൂട്ട് ട്രിഗർ ചെയ്യും. റീബൂട്ട് ബട്ടണുകൾ കൊണ്ട് UI-യിലെ ഷട്ട് ഡൗൺ ബട്ടണുകളുടെ എല്ലാ ആവർത്തനങ്ങളും <ph name="PRODUCT_OS_NAME" /> മാറ്റി പകരംവയ്‌ക്കും. നയം പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിലും, ഉപയോക്താവ് പവർ ബട്ടൺ ഉപയോഗിച്ച് ഉപകരണം ഷട്ട് ഡൗൺ ചെയ്യുകയാണെങ്കിൽ, ഇത് സ്വയമേവ റീബൂട്ട് ചെയ്യില്ല.</translation>
 <translation id="9158929520101169054">ബ്രൗസറിനുള്ളിൽ ഒന്നിലധികം സൈൻ-ഇൻ അനുവദിക്കുക</translation>
+<translation id="9167719789236691545"><ph name="PRODUCT_OS_NAME" /> ഫയലുകളുടെ ആപ്പിൽ ഡ്രൈവ് പ്രവർത്തനരഹിതമാക്കുക</translation>
 <translation id="9185107612228451403">വിപുലീകരണവുമായി ബന്ധപ്പെട്ട നയങ്ങൾ കോൺഫിഗർ ചെയ്യുന്നു. ബ്ലാക്ക്‌ലിസ്‌റ്റുചെയ്‌ത വിപുലീകരണങ്ങൾ വൈറ്റ്‌ലിസ്‌റ്റുചെയ്യാതിരുന്നാൽ, അവ ഇൻസ്‌റ്റാളുചെയ്യാൻ ഉപയോക്താവിനെ അനുവദിക്കില്ല. <ph name="EXTENSION_INSTALL_FORCELIST_POLICY_NAME" /> എന്നതിൽ വിപുലീകരണങ്ങളെ വ്യക്തമാക്കുന്നതിലൂടെ അവയെ സ്വയമേവ ഇൻസ്‌റ്റാളുചെയ്യാൻ <ph name="PRODUCT_NAME" /> എന്നതിനെ നിങ്ങൾക്ക് നിർബന്ധിതമാക്കാം. നിർബന്ധിതമായി ഇൻസ്‌റ്റാളുചെയ്‌ത വിപുലീകരണങ്ങൾ, അവ ബ്ലാക്ക്‌ലിസ്റ്റിലുണ്ടോയെന്നത് പരിഗണിക്കാതെ തന്നെ ഇൻസ്‌റ്റാളുചെയ്യപ്പെടുന്നു.</translation>
 <translation id="9187743794267626640">ബാഹ്യ സംഭരണം മൗണ്ടുചെയ്യുന്നത് അപ്രാപ്‌തമാക്കുക</translation>
 <translation id="9197740283131855199">മങ്ങിയശേഷം ഉപയോക്താവ് സജീവമാണെങ്കിൽ സ്‌ക്രീൻ മങ്ങുന്നതിന്റെ കാലതാമസം സ്‌കെയിൽ ചെയ്യുന്നതനുസരിച്ചുള്ള ശതമാനം</translation>
diff --git a/components/policy/resources/policy_templates_no.xtb b/components/policy/resources/policy_templates_no.xtb
index dcaa516..44ee924 100644
--- a/components/policy/resources/policy_templates_no.xtb
+++ b/components/policy/resources/policy_templates_no.xtb
@@ -251,19 +251,19 @@
       Hvis den ikke er konfigurert, er rapportering av beregninger og diagnostikkdata deaktivert på ikke-administrerte enheter og aktivert på administrerte enheter.</translation>
 <translation id="1929709556673267855">Gir konfigurasjoner for bedriftsskrivere som er bundet til enheter.
 
-      Med denne regelen kan du gi skriverkonfigurasjoner til enheter med <ph name="PRODUCT_OS_NAME" />.  Formatet er det samme som for NativePrinters-ordlisten, med et ekstra påkrevd «id»- eller «quid»-felt per skriver for godkjenning eller sperring.
+      Med denne regelen kan du gi skriverkonfigurasjoner til enheter med <ph name="PRODUCT_OS_NAME" />. Formatet er det samme som for NativePrinters-ordlisten, med et ekstra påkrevd «id»- eller «quid»-felt per skriver for godkjenning eller sperring.
 
-      Størrelsen på filen må ikke overskride 5 MB, og den må være i JSON-format.  Det anslås at en fil som inneholder omtrent 21 000 skrivere, opptar 5 MB.  Den kryptografiske hashen brukes for å bekrefte integriteten for nedlastingen.
+      Størrelsen på filen må ikke overskride 5 MB, og den må være i JSON-format. Det anslås at en fil som inneholder omtrent 21 000 skrivere, opptar 5 MB. Den kryptografiske hashen brukes for å bekrefte integriteten for nedlastingen.
 
       Filen lastes ned og bufres. Den blir lastet ned på nytt hver gang nettadressen eller hashen endres.
 
-      Hvis denne regelen er angitt, laster <ph name="PRODUCT_OS_NAME" /> ned filen for skriverkonfigurasjoner og gjør skrivere tilgjengelig i henhold til <ph name="DEVICE_PRINTERS_ACCESS_MODE" />, <ph name="DEVICE_PRINTERS_WHITELIST" /> og <ph name="DEVICE_PRINTERS_BLACKLIST" />.
+      Hvis denne regelen er angitt, laster <ph name="PRODUCT_OS_NAME" /> ned filen for skriverkonfigurasjoner og gjør skrivere tilgjengelige i henhold til <ph name="DEVICE_PRINTERS_ACCESS_MODE" />, <ph name="DEVICE_PRINTERS_WHITELIST" /> og <ph name="DEVICE_PRINTERS_BLACKLIST" />.
 
-      Denne regelen påvirker ikke hvorvidt brukere kan konfigurere skrivere på enkeltenheter.  Den er ment å supplere konfigurering av skrivere utført av enkeltbrukere.
+      Denne regelen påvirker ikke hvorvidt brukere kan konfigurere skrivere på enkeltenheter. Den er ment å supplere konfigurering av skrivere utført av enkeltbrukere.
 
       Denne regelen kommer i tillegg til <ph name="BULK_PRINTERS_POLICY" />.
 
-      Hvis denne regelen ikke er angitt (er deaktivert), blir ingen skrivere bundet til enheter, og de andre <ph name="DEVICE_PRINTERS_POLICY_PATTERN" />-reglene blir ignorert.
+      Hvis denne regelen ikke er angitt, blir ingen skrivere bundet til enheter, og de andre <ph name="DEVICE_PRINTERS_POLICY_PATTERN" />-reglene blir ignorert.
       </translation>
 <translation id="193259052151668190">Godkjenningsliste for frakoblingsbare USB-enheter</translation>
 <translation id="1933378685401357864">Bakgrunnsbilde</translation>
@@ -302,15 +302,15 @@
       Denne regelen gjør det mulig for administratorer å gi ut skriverkonfigurasjoner til
       brukerne sine.
 
-      <ph name="PRINTER_DISPLAY_NAME" /> og <ph name="PRINTER_DESCRIPTION" /> er strenger i et fritt format som kan tilpasses for å gjøre det enklere å velge skriver. <ph name="PRINTER_MANUFACTURER" /> og <ph name="PRINTER_MODEL" /> brukes til å gjøre det lettere for brukerne å identifisere skrivere. De representerer skrivermodellen og -produsenten. <ph name="PRINTER_URI" /> bør være en adresse som kan nås fra en klientdatamaskin, inkludert <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> og <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> er valgfritt.  Hvis den oppgis, brukes den til å deduplisere <ph name="ZEROCONF_DISCOVERY" />-skrivere.
+      <ph name="PRINTER_DISPLAY_NAME" /> og <ph name="PRINTER_DESCRIPTION" /> er strenger i et fritt format som kan tilpasses for å gjøre det enklere å velge skriver. <ph name="PRINTER_MANUFACTURER" /> og <ph name="PRINTER_MODEL" /> brukes til å gjøre det lettere for brukerne å identifisere skrivere. De representerer skrivermodellen og -produsenten. <ph name="PRINTER_URI" /> skal være en adresse som kan nås fra en klientdatamaskin, inkludert <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> og <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> er valgfritt. Hvis den oppgis, brukes den til å deduplisere <ph name="ZEROCONF_DISCOVERY" />-skrivere.
 
       <ph name="PRINTER_EFFECTIVE_MODEL" /> må samsvare med en av strengene som representerer en <ph name="PRODUCT_NAME" />-støttet skriver. Strengen blir brukt til å identifisere og installere den riktige PPD-en for skriveren. Du finner mer informasjon på https://support.google.com/chrome?p=noncloudprint.
 
-      Skriverkonfigureringen er fullført når en skriver brukes for første gang.  PPD-er lastes ikke ned før skriveren brukes.  Etter det blir PPD-er som brukes ofte, bufret.
+      Skriverkonfigureringen er fullført når en skriver brukes for første gang. PPD-er lastes ikke ned før skriveren brukes. Etter det blir PPD-er som brukes ofte, bufret.
 
       Denne regelen kan ikke brukes til å bestemme om brukere kan konfigurere skrivere på individuelle enheter.  Den er ment å være et supplement til konfigureringen av skrivere som er gjort av individuelle brukere.
 
-      For Active Directory-administrerte enheter, støtter denne regelen utvidelsen av <ph name="MACHINE_NAME_VARIABLE" /> til maskinnavnet eller en tilknyttet understreng for Active Directory. Hvis maskinnavnet for eksempel er <ph name="MACHINE_NAME_EXAMPLE" />, erstattes <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> med de 4 tegnene etter 6. posisjon, dvs. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Merk at posisjonen er null-basert.
+      For Active Directory-administrerte enheter støtter denne regelen utvidelse av <ph name="MACHINE_NAME_VARIABLE" /> til Active Directory-maskinnavnet eller en delstreng av det. Hvis maskinnavnet for eksempel er <ph name="MACHINE_NAME_EXAMPLE" />, erstattes <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> med de 4 tegnene etter 6. posisjon, dvs. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Merk at posisjonen er null-basert.
       </translation>
 <translation id="2030905906517501646">Søkeord for standard søkeleverandør</translation>
 <translation id="203096360153626918">Denne regelen har ingen innvirkning på Android-apper. Android-apper kan brukes i fullskjermmodus selv om denne regelen er angitt som <ph name="FALSE" />.</translation>
@@ -566,17 +566,17 @@
 <translation id="262740370354162807">Aktiver sending av dokumenter til <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="2627554163382448569">Gir konfigurasjoner for bedriftsskrivere.
 
-      Med denne regelen kan du gi skriverkonfigurasjoner til enheter med <ph name="PRODUCT_OS_NAME" />.  Formatet er det samme som for NativePrinters-ordlisten, med et ekstra påkrevd «id»- eller «quid»-felt per skriver for godkjenning eller sperring.
+      Med denne regelen kan du gi skriverkonfigurasjoner til enheter med <ph name="PRODUCT_OS_NAME" />. Formatet er det samme som for NativePrinters-ordlisten, med et ekstra påkrevd «id»- eller «quid»-felt per skriver for godkjenning eller sperring.
 
-      Størrelsen på filen må ikke overskride 5 MB, og den må være i JSON-format.  Det anslås at en fil som inneholder omtrent 21 000 skrivere, opptar 5 MB.  Den kryptografiske hashen brukes for å bekrefte integriteten for nedlastingen.
+      Størrelsen på filen må ikke overskride 5 MB, og den må være i JSON-format. Det anslås at en fil som inneholder omtrent 21 000 skrivere, opptar 5 MB.  Den kryptografiske hashen brukes for å bekrefte integriteten for nedlastingen.
 
       Filen lastes ned og bufres. Den blir lastet ned på nytt hver gang nettadressen eller hashen endres.
 
-      Hvis denne regelen er angitt, laster <ph name="PRODUCT_OS_NAME" /> ned filen for skriverkonfigurasjoner og gjør skrivere tilgjengelig i henhold til <ph name="BULK_PRINTERS_ACCESS_MODE" />, <ph name="BULK_PRINTERS_WHITELIST" /> og <ph name="BULK_PRINTERS_BLACKLIST" />.
+      Hvis denne regelen er angitt, laster <ph name="PRODUCT_OS_NAME" /> ned filen for skriverkonfigurasjoner og gjør skrivere tilgjengelige i henhold til <ph name="BULK_PRINTERS_ACCESS_MODE" />, <ph name="BULK_PRINTERS_WHITELIST" /> og <ph name="BULK_PRINTERS_BLACKLIST" />.
 
       Hvis du angir denne innstillingen, kan ikke brukere endre eller overstyre den.
 
-      Denne regelen kan ikke brukes til å bestemme om brukere kan konfigurere skrivere på individuelle enheter.  Den er ment å være et supplement til konfigureringen av skrivere som er gjort av individuelle brukere.
+      Denne regelen kan ikke brukes til å bestemme om brukere kan konfigurere skrivere på individuelle enheter. Den er ment å være et supplement til konfigureringen av skrivere som er gjort av individuelle brukere.
       </translation>
 <translation id="2633084400146331575">Aktiverer talerespons</translation>
 <translation id="2646290749315461919">Gjør at du kan angi om nettsteder tillates å spore brukernes fysiske posisjon. Sporing av brukernes fysiske posisjon kan tillates som standard, nektes som standard, eller brukeren kan blir spurt hver gang et nettsted ber om den fysiske posisjonen. Hvis denne retningslinjen ikke angis, brukes AskGeolocation, og brukeren kan endre på dette.</translation>
@@ -642,7 +642,7 @@
 <translation id="2838830882081735096">Ikke tillat dataoverføring og ARC</translation>
 <translation id="2840269525054388612">Angir skriverne som en bruker kan bruke.
 
-      Denne regelen brukes bare hvis <ph name="PRINTERS_WHITELIST" /> er valgt for <ph name="DEVICE_PRINTERS_ACCESS_MODE" />
+      Denne regelen brukes bare hvis <ph name="PRINTERS_WHITELIST" /> er valgt for <ph name="DEVICE_PRINTERS_ACCESS_MODE" />.
 
       Hvis denne regelen brukes, blir bare skriverne med ID-er som samsvarer med verdiene i denne regelen, tilgjengelige for brukeren. ID-ene må samsvare med «id»- eller «quid»-feltene i filen spesifisert i <ph name="DEVICE_PRINTERS_POLICY" />.
       </translation>
diff --git a/components/policy/resources/policy_templates_pl.xtb b/components/policy/resources/policy_templates_pl.xtb
index a3b9e6f1..0beee064 100644
--- a/components/policy/resources/policy_templates_pl.xtb
+++ b/components/policy/resources/policy_templates_pl.xtb
@@ -409,6 +409,27 @@
           Gdy ta zasada nie jest ustawiona, ostrzeżenie nie jest wyświetlane.
 
           Wartość dla zasady należy podać w milisekundach. Wartości są ograniczane, tak aby nie przekraczały wartości opóźnienia nieaktywności.</translation>
+<translation id="2289578386193672044">Określa listę aplikacji i rozszerzeń, które zostaną zainstalowane dyskretnie, bez interakcji
+          z użytkownikiem, a użytkownik nie będzie mógł ich odinstalować
+          ani wyłączyć. Aplikacje/rozszerzenia bez interakcji z użytkownikiem
+          otrzymają wszystkie uprawnienia, o które proszą, w tym wszelkie
+          dodatkowe uprawnienia, o które będą prosić przyszłe ich wersje.
+          Ponadto otrzymają uprawnienia do interfejsów API dla rozszerzeń
+          enterprise.deviceAttributes i enterprise.platformKeys. (Te dwa
+          interfejsy API nie są dostępne dla aplikacji/rozszerzeń, których
+          instalacja nie jest wymuszana).
+
+          Ta zasada ma pierwszeństwo przed potencjalnie powodującą konflikt zasadą <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />. Jeśli z tej listy zostaną usunięte aplikacja lub rozszerzenie, których instalacja została wymuszona wcześniej, <ph name="PRODUCT_NAME" /> automatycznie je odinstaluje.
+
+          W przypadku systemów Windows niepodłączonych do domeny <ph name="MS_AD_NAME" /> wymuszona instalacja jest ograniczona do aplikacji i rozszerzeń dostępnych w Chrome Web Store.
+
+          Pamiętaj, że kod źródłowy każdego rozszerzenia można zmodyfikować za pomocą narzędzi dla programistów (potencjalnie zakłócając jego działanie). Jeśli jest to problemem, ustaw zasadę <ph name="DEVELOPER_TOOLS_POLICY_NAME" />.
+
+          Każdy element na liście tej zasady jest ciągiem zawierającym identyfikator rozszerzenia i opcjonalnie URL „aktualizacji” oddzielone średnikiem (<ph name="SEMICOLON" />). Identyfikator rozszerzenia to ciąg 32 znaków, który znajdziesz np. na <ph name="CHROME_EXTENSIONS_LINK" /> w trybie programisty. URL „aktualizacji” powinien wskazywać plik manifestu aktualizacji w postaci dokumentu XML, zgodnie z opisem w dokumencie <ph name="LINK_TO_EXTENSION_DOC1" />. Domyślnie używany jest URL aktualizacji Chrome Web Store (obecnie to „https://clients2.google.com/service/update2/crx”). Uwaga: URL „aktualizacji” ustawiony przez tę zasadę jest używany tylko podczas pierwszej instalacji. Późniejsze aktualizacje rozszerzenia korzystają z adresu URL aktualizacji wskazanego w pliku manifestu. Pamiętaj też, że podanie adresu URL „aktualizacji” było obowiązkowe w <ph name="PRODUCT_NAME" /> do wersji 67 włącznie.
+
+          Na przykład <ph name="EXTENSION_POLICY_EXAMPLE" /> instaluje aplikację <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> ze standardowego adresu URL „aktualizacji” Chrome Web Store. Więcej informacji o hostowaniu rozszerzeń znajdziesz na <ph name="LINK_TO_EXTENSION_DOC2" />.
+
+          Jeśli ta zasada nie jest ustawiona, aplikacje ani rozszerzenia nie są instalowane automatycznie, a użytkownik może odinstalować dowolne z nich w <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2292084646366244343"><ph name="PRODUCT_NAME" /> może sprawdzać pisownię, używając usługi internetowej Google. Jeśli to ustawienie zostanie włączone, usługa będzie zawsze używana. W przypadku wyłączenia tego ustawienia, usługa nie będzie nigdy wykorzystywana.
 
       Pisownię można nadal sprawdzać, korzystając z pobranego słownika. Ta zasada kontroluje tylko używanie usługi internetowej.
@@ -699,6 +720,16 @@
           Ta zasada jest opcjonalna. Jeśli nie jest ustawiona, nie zachodzi zamiana wyszukiwanego hasła.
 
           Ta zasada jest uwzględniania tylko wtedy, gdy włączona jest zasada „DefaultSearchProviderEnabled”.</translation>
+<translation id="3056439054015239107">
+      Ta zasada ma wpływ na ekran logowania. Zapoznaj się też z informacjami o zasadzie <ph name="SITE_PER_PROCESS_POLICY_NAME" />, która ma wpływ na sesję użytkownika. Zaleca się skonfigurowanie obu tych zasad w jednakowy sposób. Jeśli wartości tych zasad są różne, przy uruchamianiu sesji użytkownika może nastąpić opóźnienie, gdy stosowana jest wartość określona przez zasadę obowiązującą dla użytkownika.
+      Możesz dostosować ustawienie zasady IsolateOrigins, by uzyskać
+      optymalne efekty – izolację i ograniczony wpływ na użytkowników.
+      W tym celu dodaj do zasady IsolateOrigins listę witryn,
+      które chcesz izolować. Ustawienie SitePerProcess izoluje wszystkie witryny.
+      Jeśli ta zasada jest włączona, każda witryna będzie działać w obrębie
+      własnego procesu. Jeśli zasada jest wyłączona, izolacja witryn nie będzie stosowana wprost, a testowe funkcje IsolateOrigins i SitePerProcess będą wyłączone. Użytkownicy będą mogli ręcznie włączyć ustawienie SitePerProcess.
+      Jeśli zasada nie jest skonfigurowana, użytkownik może zmienić to ustawienie.
+      </translation>
 <translation id="306887062252197004">Ta zasada pozwala użytkownikom funkcji WebDriver na zastępowanie zasad, które mogą zakłócać działanie tej funkcji.
 
       Obecnie ta zasada wyłącza zasady SitePerProcess i IsolateOrigins.
@@ -855,6 +886,7 @@
 <translation id="3660562134618097814">Prześlij pliki cookie dostawcy tożsamości SAML podczas logowania</translation>
 <translation id="3709266154059827597">Konfiguruj czarną listę instalacji rozszerzeń</translation>
 <translation id="3711895659073496551">Wstrzymaj</translation>
+<translation id="3715569262675717862">Uwierzytelnianie na podstawie certyfikatów klienta</translation>
 <translation id="3736879847913515635">Włączanie dodawania osób w menedżerze użytkowników</translation>
 <translation id="3737544779868348650">Sieciowa nazwa hosta urządzenia</translation>
 <translation id="3740754010292550733">Ustaw czas wyświetlania powiadomień o ponownym uruchomieniu z powodu aktualizacji</translation>
@@ -1830,6 +1862,15 @@
       Aby uniemożliwić logowanie się na inne konto w trybie incognito, można zablokować ten tryb za pomocą zasady IncognitoModeAvailability.
 
       Pamiętaj, że użytkownicy mogą uzyskać dostęp do usług Google w trybie bez uwierzytelniania, jeśli zablokują pliki cookie.</translation>
+<translation id="6738326937072482736">Konfiguruje dostępność i zachowanie funkcji aktualizacji oprogramowania <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+      Poszczególne ustawienia można określić we właściwościach JSON:
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH" />: jeśli ustawiono na wartość <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE" />, użytkownicy mogą wyzwalać procedurę Powerwash, by zainstalować aktualizację oprogramowania <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE" />: jeśli ustawiono na wartość <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE" />, użytkownicy mogą wyzwalać procedurę aktualizacji oprogramowania <ph name="TPM_FIRMWARE_UPDATE_TPM" />, która zachowa ogólny stan urządzenia (w tym rejestrację w firmie), ale usunie dane użytkownika. Ten rodzaj aktualizacji jest dostępny od wersji 68.
+
+      Jeśli zasada nie jest ustawiona, funkcja aktualizacji oprogramowania <ph name="TPM_FIRMWARE_UPDATE_TPM" /> nie jest dostępna.</translation>
 <translation id="6757438632136860443">Pozwala utworzyć listę wzorców URL-i określających witryny, które mogą uruchamiać wtyczkę <ph name="FLASH_PLUGIN_NAME" />.
 
           Jeśli ta zasada nie zostanie skonfigurowana, będzie używana wartość domyślna pobrana z zasady „DefaultPluginsSetting” (jeśli jest określona) lub z osobistej konfiguracji użytkownika.</translation>
@@ -1848,6 +1889,16 @@
 <translation id="687046793986382807">Począwszy od wersji 35 usługi <ph name="PRODUCT_NAME" />, te zasady są wycofane.
 
       Informacje o pamięci są raportowane do strony niezależnie od ustawionej opcji, jednak wysyłane dane są kwantyzowane, a częstotliwość ich aktualizacji jest ograniczona ze względów bezpieczeństwa. Aby uzyskać precyzyjne dane w czasie rzeczywistym, użyj narzędzi telemetrycznych.</translation>
+<translation id="6870914592443697993">
+      Ta zasada ma wpływ na ekran logowania. Zapoznaj się też z informacjami o zasadzie <ph name="ISOLATE_ORIGINS_POLICY_NAME" />, która ma wpływ na sesję użytkownika. Zaleca się skonfigurowanie obu tych zasad w jednakowy sposób. Jeśli wartości tych zasad są różne, przy uruchamianiu sesji użytkownika może nastąpić opóźnienie, gdy stosowana jest wartość określona przez zasadę obowiązującą dla użytkownika.
+      Jeśli ta zasada jest włączona, każde nazwane źródło na liście oddzielonej
+      przecinkami będzie działać w obrębie własnego procesu. Powoduje to też
+      izolację źródeł z nazwami subdomen, np. określenie https://example.com/
+      spowoduje, że także adres https://foo.example.com/ będzie izolowany
+      jako część witryny https://example.com/
+      Jeśli zasada jest wyłączona, izolacja witryn nie będzie stosowana wprost, a testowe funkcje IsolateOrigins i SitePerProcess będą wyłączone. Użytkownicy będą mogli ręcznie włączyć ustawienie IsolateOrigins.
+      Jeśli zasada nie jest skonfigurowana, do ekranu logowania będą stosowane domyślne ustawienia platformy dotyczące izolacji witryn.
+      </translation>
 <translation id="6894178810167845842">URL strony nowej karty</translation>
 <translation id="6899705656741990703">Automatycznie wykrywaj ustawienia serwera proxy</translation>
 <translation id="6903814433019432303">Ta zasada jest aktywna tylko w trybie sklepu.
@@ -2086,6 +2137,7 @@
       Jeśli zasada ma wartość false, aktualizacje komponentów również są wyłączone. Nie obejmuje to jednak komponentów, które nie zawierają kodu wykonywalnego, nie mają znacznego wpływu na działanie przeglądarki lub mają kluczowe znaczenie dla bezpieczeństwa.
       Przykładami takich komponentów są listy odwołanych certyfikatów i dane Bezpiecznego przeglądania.
       Więcej informacji o Bezpiecznym przeglądaniu znajdziesz na https://developers.google.com/safe-browsing</translation>
+<translation id="7566878661979235378">Typ uwierzytelniania dla logowania SAML</translation>
 <translation id="757395965347379751">Gdy to ustawienie jest włączone, <ph name="PRODUCT_NAME" /> akceptuje certyfikaty z podpisem SHA-1, o ile zostanie potwierdzona ich poprawność i zostaną łańcuchowo powiązane z zainstalowanymi lokalnie certyfikatami CA.
 
       Uwaga: ta zasada zależy od tego, czy stos weryfikacji certyfikatów systemu operacyjnego zezwala na podpisy SHA-1. Jeśli w systemie operacyjnym wskutek aktualizacji zmieni się sposób obsługi certyfikatów SHA-1, może ona przestać działać. Oprócz tego zasada została pomyślana jako rozwiązanie tymczasowe, dzięki któremu firmy mają więcej czasu na rezygnację z podpisów SHA-1. Zostanie ona usunięta 1 stycznia 2019 r.
@@ -2250,6 +2302,16 @@
 <translation id="7961779417826583251">Wyłącz egzekwowanie protokołu Certificate Transparency dla starych urzędów certyfikacji z listy</translation>
 <translation id="7974114691960514888">Ta zasada nie jest już obsługiwana. Umożliwia stosowanie protokołu STUN i serwerów przekazywania podczas łączenia się z klientem zdalnym. Jeśli ustawienie jest włączone, ten komputer może wykrywać hosty zdalne i łączyć się z nimi nawet wówczas, gdy są oddzielone zaporą sieciową. Jeśli ustawienie jest wyłączone, a wychodzące połączenia UDP są filtrowane przez zaporę sieciową, komputer może łączyć się tylko z hostami w sieci lokalnej.</translation>
 <translation id="7976157349247117979">Nazwa miejsca docelowego <ph name="PRODUCT_NAME" /></translation>
+<translation id="7978060394348264922">
+      Możesz dostosować ustawienie zasady IsolateOrigins, by uzyskać optymalne 
+      efekty – izolację i ograniczony wpływ na użytkowników. W tym celu
+      dodaj do zasady IsolateOrigins listę witryn, które chcesz izolować.
+      Ustawienie SitePerProcess izoluje wszystkie witryny.
+      Jeśli ta zasada jest włączona, każda witryna będzie działać w obrębie własnego procesu.
+      Jeśli zasada jest wyłączona, izolacja witryn nie będzie stosowana wprost, a testowe funkcje IsolateOrigins i SitePerProcess będą wyłączone. Użytkownicy będą mogli ręcznie włączyć ustawienie SitePerProcess.
+      Jeśli zasada nie jest skonfigurowana, użytkownik może zmienić to ustawienie.
+      W przypadku systemu <ph name="PRODUCT_OS_NAME" /> zalecane jest ustawienie zasady dla urządzeń <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> na tę samą wartość. Jeśli wartości tych zasad są różne, przy uruchamianiu sesji użytkownika może nastąpić opóźnienie, gdy stosowana jest wartość określona przez zasadę obowiązującą dla użytkownika.
+      </translation>
 <translation id="7980227303582973781">Brak ograniczeń specjalnych</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="802147957407376460">Obróć ekran o 0 stopni</translation>
@@ -2454,6 +2516,13 @@
           Nazwy serwerów należy rozdzielić przecinkami. Można używać symboli wieloznacznych (*).
 
           Jeśli nie ustawisz tej zasady, <ph name="PRODUCT_NAME" /> próbuje wykryć, czy serwer jest w intranecie, i tylko wtedy odpowiada na żądania IWA. W przypadku serwera internetowego <ph name="PRODUCT_NAME" /> ignoruje żądania IWA.</translation>
+<translation id="8667812577403206506">Określa, czy w Chrome OS mogą działać maszyny wirtualne.
+
+      Jeśli zasada ma wartość Prawda, maszyny wirtualne mogą działać na urządzeniu.
+      Jeśli zasada ma wartość Fałsz, maszyny wirtualne nie mogą działać na urządzeniu.
+      Jeśli zmienisz wartość tej zasady na Fałsz, nie będzie można uruchamiać nowych maszyn wirtualnych, ale już działające maszyny nie zostaną zamknięte.
+      Jeśli zasada nie jest ustawiona na urządzeniu zarządzanym, nie można na nim uruchamiać maszyn wirtualnych.
+      Na urządzeniach niezarządzanych można uruchamiać maszyny wirtualne.</translation>
 <translation id="8672321184841719703">Wersja docelowa automatycznych aktualizacji</translation>
 <translation id="867410340948518937">U2F (Uniwersalne uwierzytelnianie dwuskładnikowe)</translation>
 <translation id="8685024486845674965">Ostrzeżenie dotyczące ochrony hasłem jest wyzwalane przez użycie tego samego hasła w innym miejscu</translation>
@@ -2564,6 +2633,7 @@
 
       Nie należy włączać tej zasady, gdy włączona jest zasada <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />, ponieważ używa ona tych samych funkcji po stronie klienta. Synchronizacja obsługiwana przez Google jest w takim przypadku całkowicie wyłączana.</translation>
 <translation id="8955719471735800169">Powrót do góry</translation>
+<translation id="8959992920425111821">Domyślna konfiguracja</translation>
 <translation id="8960850473856121830">Wzorce na tej liście są porównywane ze źródłem zabezpieczeń
       adresu URL, z którego pochodzi żądanie. Gdy znaleziono odpowiednik,
       bez pytania udzielany jest dostęp do urządzeń rejestrujących dźwięk.
@@ -2574,6 +2644,16 @@
 <translation id="8976248126101463034">Zezwalaj na uwierzytelnianie Gnubby w przypadku hostów dostępu zdalnego</translation>
 <translation id="8976531594979650914">Użyj domyślnej drukarki systemowej</translation>
 <translation id="8992176907758534924">Nie zezwalaj na pokazywanie grafik w żadnej witrynie</translation>
+<translation id="9034729899149506577">
+      Jeśli ta zasada jest włączona, każde nazwane źródło na liście oddzielonej
+      przecinkami będzie działać w obrębie własnego procesu. Powoduje to też
+      izolację źródeł z nazwami subdomen, np. określenie https://example.com/
+      spowoduje, że także adres https://foo.example.com/ będzie izolowany jako
+      część witryny https://example.com/
+      Jeśli zasada jest wyłączona, izolacja witryn nie będzie stosowana wprost, a testowe funkcje IsolateOrigins i SitePerProcess będą wyłączone. Użytkownicy będą mogli ręcznie włączyć ustawienie IsolateOrigins.
+      Jeśli zasada nie jest skonfigurowana, użytkownik może zmienić to ustawienie.
+      W przypadku systemu <ph name="PRODUCT_OS_NAME" /> zalecane jest ustawienie zasady dla urządzeń <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" /> na tę samą wartość. Jeśli wartości tych zasad są różne, przy uruchamianiu sesji użytkownika może nastąpić opóźnienie, gdy stosowana jest wartość określona przez zasadę obowiązującą dla użytkownika.
+      </translation>
 <translation id="9035964157729712237">Identyfikatory rozszerzeń nieobjętych czarną listą</translation>
 <translation id="9042911395677044526">Pozwala na przesyłanie konfiguracji sieciowej w trybie push do urządzeń z <ph name="PRODUCT_OS_NAME" /> dla poszczególnych użytkowników. Konfiguracja sieci to łańcuch w formacie JSON zgodny z formatem Open Network Configuration opisanym na <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Określ, czy aktywność związana z filmami wpływa na zarządzanie energią</translation>
@@ -2610,6 +2690,13 @@
 <translation id="9187743794267626640">Wyłącz podłączanie pamięci zewnętrznych</translation>
 <translation id="9197740283131855199">Wartość procentowa skalowania opóźnienia przyciemnienia ekranu, jeśli użytkownik stanie się aktywny po przyciemnieniu</translation>
 <translation id="9200828125069750521">Parametry dla adresów URL obrazów używających POST</translation>
+<translation id="9210953373038593554">Konfiguruje typ uwierzytelniania dla logowania SAML.
+
+      Gdy ta zasada nie jest ustawiona lub jest ustawiona na wartość Domyślna (wartość 0), przebieg logowania SAML jest ustalany przez przeglądarkę na podstawie innych czynników. W podstawowym scenariuszu do uwierzytelniania użytkownika i do ochrony jego danych w pamięci podręcznej używane są hasła wpisywane ręcznie przez użytkownika.
+
+      Gdy zasada jest ustawiona na wartość Certyfikat klienta (wartość 1), dla nowo dodanych użytkowników logujących się za pomocą SAML jest używane uwierzytelnianie przy użyciu certyfikatu klienta. Nie są używane żadne hasła, a dane tych użytkowników w pamięci podręcznej są chronione za pomocą odpowiednich kluczy kryptograficznych. To ustawienie umożliwia na przykład skonfigurowanie uwierzytelniania przy użyciu kart inteligentnych (aplikacje pośredniczące dla kart inteligentnych muszą zostać zainstalowane za pomocą zasady DeviceLoginScreenAppInstallList).
+
+      Ta zasada ma wpływ tylko na użytkowników uwierzytelniających się za pomocą SAML.</translation>
 <translation id="9213347477683611358">Skonfiguruj tapetę na poziomie urządzenia wyświetlaną na ekranie logowania, jeśli żaden użytkownik nie jest jeszcze zalogowany na urządzeniu. Aby ustawić tę zasadę, podaj adres URL, z którego urządzenie z Chrome OS może pobrać tapetę, a także skrót kryptograficzny używany do weryfikacji poprawności pobranego pliku. Obraz musi być w formacie JPEG, a jego rozmiar nie może przekraczać 16 MB. URL musi być dostępny bez żadnego uwierzytelniania. Po pobraniu tapeta jest zapisywana w pamięci podręcznej. Gdy URL lub skrót się zmieni, pobieranie jest powtarzane.
 
       Zasadę należy zdefiniować jako ciąg znaków w formacie JSON zawierający URL i skrót, zgodnie z tym schematem:
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 790e86d..4c718d8 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -404,6 +404,27 @@
           Quando esta política não está definida, nenhuma caixa de diálogo de advertência é mostrada.
 
           O valor da política deve ser especificado em milissegundos. Os valores são fixados para serem iguais ou inferiores ao período de inatividade.</translation>
+<translation id="2289578386193672044">Especifica uma lista de apps e extensões que são instalados silenciosamente,
+          sem a interação do usuário, e que não podem ser desinstalados nem
+          desativados pelo usuário. Todas as permissões solicitadas pelos
+          apps/extensões são concedidas implicitamente, sem a interação do usuário,
+          incluindo as permissões adicionais solicitadas por versões futuras
+          do app/extensão. Além disso, as permissões são concedidas para as
+          APIs de extensão enterprise.deviceAttributes e enterprise.platformKeys.
+          Essas duas APIs não estão disponíveis para os apps/extensões que
+          não são de instalação forçada.
+
+          Esta política tem precedência sobre uma política <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> possivelmente conflitante. Se um app ou uma extensão que foi instalado à força for removido dessa lista, ele será desinstalado automaticamente pelo <ph name="PRODUCT_NAME" />.
+
+          Para instâncias do Windows que não ingressaram em um domínio <ph name="MS_AD_NAME" />, a instalação forçada limita-se aos apps e extensões listados na Chrome Web Store.
+
+          O código-fonte de qualquer extensão pode ser alterado pelos usuários por meio das Ferramentas para Desenvolvedores (possivelmente tornando a extensão defeituosa). Caso isso seja uma preocupação, a política <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> deverá ser definida.
+
+          Cada item da lista da política é uma string que contém um código de extensão e, opcionalmente, um URL de "atualização" separado por ponto e vírgula (<ph name="SEMICOLON" />). O código da extensão é a string de 32 letras encontrada, por exemplo, em <ph name="CHROME_EXTENSIONS_LINK" /> no modo de desenvolvedor. Se especificado, o URL de "atualização" deve apontar para um documento XML de manifesto da atualização, conforme descrito em <ph name="LINK_TO_EXTENSION_DOC1" />. Por padrão, é utilizado o URL de atualização da Chrome Web Store (que atualmente é "https://clients2.google.com/service/update2/crx"). O URL de "atualização" definido nesta política é utilizado somente para a instalação inicial. As atualizações subsequentes da extensão empregam o URL de atualização indicado no manifesto da extensão. A especificação explícita do URL de "atualização" era obrigatória até a versão 67 do <ph name="PRODUCT_NAME" />.
+
+          Por exemplo, <ph name="EXTENSION_POLICY_EXAMPLE" /> instala o app <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> a partir do URL de "atualização" padrão da Chrome Web Store. Para ver mais informações sobre hospedagem de extensões, consulte: <ph name="LINK_TO_EXTENSION_DOC2" />.
+
+          Se esta política não for definida, nenhum app ou extensão será instalado automaticamente, e o usuário poderá desinstalar qualquer app ou extensão no <ph name="PRODUCT_NAME" />.</translation>
 <translation id="2292084646366244343">O <ph name="PRODUCT_NAME" /> pode usar um serviço da web do Google para ajudar a resolver erros de ortografia. Se esta configuração for ativada, esse serviço será sempre usado. Se esta configuração for desativada, esse serviço nunca será usado.
 
       A verificação ortográfica ainda poderá ser realizada utilizando-se um dicionário baixado; esta política só controla o uso do serviço on-line.
@@ -689,6 +710,16 @@
           Esta política é opcional. Se não for definida, não ocorrerá substituição do termo de pesquisa.
 
           Esta política só é respeitada se a política "DefaultSearchProviderEnabled" estiver ativada.</translation>
+<translation id="3056439054015239107">
+      Esta política se aplica à tela de login. Consulte também a política <ph name="SITE_PER_PROCESS_POLICY_NAME" />, que se aplica à sessão do usuário. É recomendado definir as duas políticas com o mesmo valor. Se os valores não coincidirem, poderá haver um atraso ao iniciar uma sessão do usuário enquanto o valor especificado pela política do usuário está sendo aplicado.
+      Recomendamos que você consulte a configuração de política IsolateOrigins para
+      ter os melhores resultados do isolamento e impacto limitado para os usuários, usando
+      IsolateOrigins com uma lista dos sites que você quer isolar. Essa configuração,
+      SitePerProcess, isola todos os sites.
+      Se a política estiver ativada, cada site será executado com seu próprio processo.
+      Se a política estiver desativada, nenhum isolamento de sites ocorrerá, e as versões de teste de IsolateOrigins e SitePerProcess serão desativadas. Os usuários ainda poderão ativar SitePerProcess manualmente.
+      Se a política não estiver configurada, o usuário conseguirá alterar essa configuração.
+      </translation>
 <translation id="306887062252197004">Esta política permite que os usuários do recurso WebDriver modifiquem
       políticas que possam interferir na operação.
 
@@ -848,6 +879,7 @@
 <translation id="3660562134618097814">Transferir cookies do IDP de SAML durante o login</translation>
 <translation id="3709266154059827597">Configurar a lista negra de instalação da extensão</translation>
 <translation id="3711895659073496551">Suspender</translation>
+<translation id="3715569262675717862">Autenticação baseada em certificados do cliente</translation>
 <translation id="3736879847913515635">Ativar adição de uma pessoa no gerenciador de usuários</translation>
 <translation id="3737544779868348650">Nome de host da rede do dispositivo</translation>
 <translation id="3740754010292550733">Definir o período para notificações de reinicialização de atualização</translation>
@@ -1824,6 +1856,15 @@
       Caso o login em uma conta diferente não seja permitido no modo de navegação anônima, avalie a possibilidade de bloquear esse modo usando a política IncognitoModeAvailability.
 
       Os usuários poderão acessar serviços do Google em um estado não autenticado bloqueando os cookies.</translation>
+<translation id="6738326937072482736">Configura a disponibilidade e o comportamento da funcionalidade da atualização de firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+      Configurações individuais podem ser especificadas em propriedades JSON:
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH" />: se for definida como <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE" />, os usuários poderão acionar o fluxo de Powerwash para instalar uma atualização de firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE" />: se for definida como <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE" />, os usuários poderão invocar o fluxo de atualização de firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" />, que preserva o estado do dispositivo (incluindo a inscrição corporativa), mas perde os dados do usuário. Esse fluxo de atualização está disponível a partir da versão 68.
+
+      Se a política não for definida, a funcionalidade de atualização de firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" /> não estará disponível.</translation>
 <translation id="6757438632136860443">Permite definir uma lista de padrões de URL que especificam sites autorizados a executar o plug-in <ph name="FLASH_PLUGIN_NAME" />.
 
           Se esta política não for definida, o valor padrão global será usado para todos os sites, seja a partir da política "DefaultPluginsSetting", caso esta tenha sido definida, ou da configuração pessoal do usuário, caso não tenha sido definida.</translation>
@@ -1844,6 +1885,16 @@
       De alguma forma, as informações da memória são reportadas à página, independentemente do valor da opção. No entanto, os tamanhos reportados são
       quantificados, e a taxa de atualizações é limitada por motivos de segurança. Para obter dados precisos em tempo real,
       utilize ferramentas como o Telemetry.</translation>
+<translation id="6870914592443697993">
+      Esta política se aplica à tela de login. Consulte também a política <ph name="ISOLATE_ORIGINS_POLICY_NAME" />, que se aplica à sessão do usuário. É recomendado definir as duas políticas com o mesmo valor. Se os valores não coincidirem, poderá haver um atraso ao iniciar uma sessão do usuário enquanto o valor especificado pela política do usuário está sendo aplicado.
+      Se a política estiver ativada, cada origem indicada em uma
+      lista separada por vírgulas será executada em seu próprio processo. Isso também isolará as
+      origens indicadas por subdomínios. Por exemplo, a especificação de https://example.com/ também
+      isolará https://foo.example.com/ como parte do site
+      https://example.com/.
+      Se a política estiver desativada, nenhum isolamento de sites explícito ocorrerá, e as versões de teste de IsolateOrigins e SitePerProcess serão desativadas. Os usuários ainda poderão ativar IsolateOrigins manualmente.
+      Se a política não estiver configurada, as configurações de isolamento de sites padrão da plataforma serão usadas para a tela de login.
+      </translation>
 <translation id="6894178810167845842">URL da página "Nova guia"</translation>
 <translation id="6899705656741990703">Detectar automaticamente configurações de proxy</translation>
 <translation id="6903814433019432303">Esta política é ativa somente no modo de varejo. Determina o conjunto de URLs a serem carregados quando a sessão de demonstração for iniciada. Esta política substitui quaisquer outros mecanismos de definição do URL inicial e, portanto, somente pode ser aplicada a uma sessão não associada a determinado usuário.</translation>
@@ -2089,6 +2140,7 @@
       Se a política for definida como falsa, as atualizações dos componentes serão desativadas. Entretanto, alguns componentes estarão isentos desta política: atualizações em quaisquer componentes que não contenham código executável, que não alterem significativamente o comportamento do navegador ou que sejam essenciais para a segurança não serão desativadas.
       Entre os exemplos desses componentes estão as listas de revogação de certificado e os dados do Navegação segura.
       Consulte https://developers.google.com/safe-browsing para saber mais informações sobre o recurso Navegação segura.</translation>
+<translation id="7566878661979235378">Tipo de autenticação de login SAML</translation>
 <translation id="757395965347379751">Quando esta configuração está ativada, o <ph name="PRODUCT_NAME" /> permite certificados SHA-1 assinados, desde que eles sejam validados e estejam vinculados a certificados de CA instalados localmente.
 
       Esta política depende da permissão de assinaturas SHA-1 pela pilha de verificação de certificados do sistema operacional. Se a atualização de um SO alterar o modo como esse sistema lida com certificados SHA-1, talvez esta política deixe de ter efeito. Além disso, esta política é usada como alternativa temporária para dar às empresas mais tempo para deixar de usar SHA-1. Esta política será removida no dia 1 de janeiro de 2019 ou em uma data próxima a essa.
@@ -2253,6 +2305,16 @@
 <translation id="7961779417826583251">Desativar a aplicação da Transparência dos certificados para uma lista de Autoridades de certificação de legado</translation>
 <translation id="7974114691960514888">Esta política não é mais suportada. Ativa o uso de servidores STUN e de retransmissão ao estabelecer conexão a um cliente remoto. Se esta configuração estiver ativada, este computador pode descobrir e conectar-se a computadores host remotos mesmo se separados por um firewall. Se esta configuração estiver desativada e conexões de UDP enviadas forem filtradas pelo firewall, este computador só poderá estabelecer conexões a computadores host na rede local.</translation>
 <translation id="7976157349247117979">Nome do destino do <ph name="PRODUCT_NAME" /></translation>
+<translation id="7978060394348264922">
+      Recomendamos que você consulte a configuração de política IsolateOrigins para
+      ter os melhores resultados do isolamento e impacto limitado para os usuários, usando
+      IsolateOrigins com uma lista dos sites que você quer isolar. Essa configuração,
+      SitePerProcess, isola todos os sites.
+      Se a política estiver ativada, cada site será executado com seu próprio processo.
+      Se a política estiver desativada, nenhum isolamento de sites ocorrerá, e as versões de teste de IsolateOrigins e SitePerProcess serão desativadas. Os usuários ainda poderão ativar SitePerProcess manualmente.
+      Se a política não for configurada, o usuário poderá alterar essa configuração.
+      Em <ph name="PRODUCT_OS_NAME" />, também é recomendado definir a política do dispositivo <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> com o mesmo valor. Se os valores especificados pelas duas políticas não coincidirem, poderá haver um atraso ao iniciar a sessão do usuário enquanto o valor especificado pela política do usuário estiver sendo aplicado.
+      </translation>
 <translation id="7980227303582973781">Nenhuma restrição especial</translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="802147957407376460">Girar tela em 0 graus</translation>
@@ -2448,6 +2510,13 @@
           Separe vários nomes de servidores com vírgulas. Caracteres curinga (*) são permitidos.
 
           Se esta política não é definida, o <ph name="PRODUCT_NAME" /> tenta detectar se um servidor está na Intranet e, só então, responde às solicitações IWA. Se um servidor é detectado como Internet, as solicitações IWA que partem dele são ignoradas pelo <ph name="PRODUCT_NAME" />.</translation>
+<translation id="8667812577403206506">Permite que você controle se máquinas virtuais podem ser executadas no Chrome OS.
+
+      Se a política for definida como verdadeira, o dispositivo poderá executar máquinas virtuais.
+      Se a política for definida como falsa, o dispositivo não poderá executar máquinas virtuais.
+      Quando esta política é alterada para falsa, ela é aplicada à inicialização de novas máquinas virtuais, mas não ao encerramento das máquinas virtuais que já estejam em execução.
+      Quando esta política não é definida em um dispositivo gerenciado, o dispositivo não pode executar máquinas virtuais.
+      Dispositivos não gerenciados podem executar máquinas virtuais.</translation>
 <translation id="8672321184841719703">Versão de atualização automática de destino</translation>
 <translation id="867410340948518937">Segundo fator universal (U2F, na sigla em inglês)</translation>
 <translation id="8685024486845674965">O aviso de proteção de senha é acionado pela reutilização da senha</translation>
@@ -2558,6 +2627,7 @@
 
       Esta política não deve ser ativada quando a política <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> estiver definida como ativada porque esse recurso usa a mesma funcionalidade do lado do cliente. Nesse caso, a sincronização hospedada pelo Google é completamente desativada.</translation>
 <translation id="8955719471735800169">Voltar ao início</translation>
+<translation id="8959992920425111821">Configuração padrão</translation>
 <translation id="8960850473856121830">Os padrões desta lista são comparados com a origem de
       segurança do URL solicitante. Se uma correspondência é encontrada, o acesso aos
       dispositivos de captura de áudio é concedido sem solicitação.
@@ -2568,6 +2638,16 @@
 <translation id="8976248126101463034">Permitir autenticação gnubby para hosts de acesso remoto</translation>
 <translation id="8976531594979650914">Usar a impressora padrão do sistema como padrão</translation>
 <translation id="8992176907758534924">Não permitir que nenhum site exiba imagens</translation>
+<translation id="9034729899149506577">
+      Se a política estiver ativada, cada origem indicada em uma
+     lista separada por vírgulas será executada em seu próprio processo. Isso também isolará as
+      origens indicadas por subdomínios. Por exemplo, a especificação de https://example.com/ também
+      isolará https://foo.example.com/ como parte do site
+      https://example.com/.
+      Se a política estiver desativada, nenhum isolamento de sites explícito ocorrerá, e as versões de teste de IsolateOrigins e SitePerProcess serão desativadas. Os usuários ainda poderão ativar IsolateOrigins manualmente.
+      Se a política não estiver configurada, o usuário poderá alterar essa configuração.
+      Em <ph name="PRODUCT_OS_NAME" />, também é recomendado definir a política do dispositivo <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" /> com o mesmo valor. Se os valores especificados pelas duas políticas não coincidirem, poderá haver um atraso ao iniciar a sessão do usuário enquanto o valor especificado pela política do usuário está sendo aplicado.
+      </translation>
 <translation id="9035964157729712237">IDs de extensão que serão isentos da lista negra</translation>
 <translation id="9042911395677044526">Permite aplicar a configuração de rede por usuário de dispositivo <ph name="PRODUCT_OS_NAME" />. A configuração de rede é uma string formatada em JSON, conforme definido pelo formato Open Network Configuration descrito em <ph name="ONC_SPEC_URL" /></translation>
 <translation id="9084985621503260744">Especifica se a atividade de vídeo afeta o gerenciamento de energia</translation>
@@ -2612,6 +2692,13 @@
 <translation id="9187743794267626640">Desativa a montagem de armazenamento externo</translation>
 <translation id="9197740283131855199">Percentual pelo qual calcular o intervalo de escurecimento da tela se o usuário ficar ativo após o escurecimento</translation>
 <translation id="9200828125069750521">Parâmetros para URL de imagens que usa POST</translation>
+<translation id="9210953373038593554">Configura o tipo de autenticação para logins SAML.
+
+      Quando esta política não é definida ou é definida como "Padrão" (valor 0), o comportamento de logins SAML é determinado pelo navegador dependendo de outros fatores. No cenário mais básico, a autenticação do usuário e a proteção dos dados do usuário armazenados em cache se baseiam em senhas inseridas manualmente pelos usuários.
+
+      Quando esta política é definida como ClientCertificate (valor 1), a autenticação do certificado do cliente é usada para usuários recém-adicionados que fazem login via SAML. Nenhuma senha é usada para esses usuários, e os dados locais deles armazenados em cache são protegidos usando chaves criptográficas correspondentes. Por exemplo, essa configuração permite configurar cartões inteligentes com base na autenticação do usuário (apps de middleware de cartão inteligente precisam ser instalados pela política DeviceLoginScreenAppInstallList).
+
+      Esta política afeta apenas os usuários que autenticam usando SAML.</translation>
 <translation id="9213347477683611358">Configura a imagem de plano de fundo do dispositivo que é exibida na tela de login se nenhum usuário está conectado ao dispositivo. A política é definida pela especificação do URL no qual o dispositivo Chrome OS pode fazer o download da imagem de plano de fundo e de um hash criptográfico usado para verificar a integridade do download. A imagem deve estar no formato JPEG, e seu tamanho não deve ultrapassar 16 MB. O URL deve ser acessado sem nenhuma autenticação. A imagem de plano de fundo é transferida por download e armazenada em cash. Sempre que o URL ou o hash muda, o download é feito novamente.
 
       A política deve ser especificada como uma string que expressa o URL e o hash no formato JSON, por exemplo,
diff --git a/components/policy/resources/policy_templates_te.xtb b/components/policy/resources/policy_templates_te.xtb
index 9d92242..0d1d9bd 100644
--- a/components/policy/resources/policy_templates_te.xtb
+++ b/components/policy/resources/policy_templates_te.xtb
@@ -246,7 +246,7 @@
 <translation id="1797233582739332495">పునఃప్రారంభం అవసరమని సూచించే పునరావృత ప్రాంప్ట్‌ను వినియోగదారుకు చూపండి</translation>
 <translation id="1803646570632580723">లాంచర్‌లో చూపడానికి పిన్ చేసిన అనువర్తనాల జాబితా</translation>
 <translation id="1808715480127969042">ఈ సైట్‌లలో కుక్కీలని బ్లాక్ చెయ్యి</translation>
-<translation id="1810261428246410396">ఉపయోగించాల్సిన తక్షణ టెథెరింగ్ని అనుమతించండి.</translation>
+<translation id="1810261428246410396">ఉపయోగించాల్సిన తక్షణ టెథెరింగ్‌ను అనుమతించండి.</translation>
 <translation id="1827523283178827583">స్థిర పరిచిన ప్రాక్సీ సర్వర్‌లని ఉపయోగించండి</translation>
 <translation id="1843117931376765605">వినియోగదారు విధానం కోసం  రిఫ్రెష్ రేట్</translation>
 <translation id="1844620919405873871">త్వరిత అన్‌లాక్ సంబంధిత విధానాలను కాన్ఫిగర్ చేస్తుంది.</translation>
@@ -1007,7 +1007,7 @@
 <translation id="3758249152301468420">డెవలపర్ ఉపకరణాలని ఆపివేయి</translation>
 <translation id="3764248359515129699">జాబితాలోని లెగసీ సర్టిఫికేట్ అధికారాల కోసం సర్టిఫికేట్ పారదర్శకత ఆవశ్యకాల అమలును నిలిపివేస్తుంది.
 
-      పేర్కొన్న subjectPublicKeyInfo హాష్‌లను ఉన్న సర్టిఫికేట్‌లను కలిగి ఉన్న సర్టిఫికేట్ చైన్‌ల కోసం సర్టిఫికేట్ పారదర్శకతను బహిర్గతం అవసరాలను నిలిపివేయడాన్ని ఈ విధానం అనుమతిస్తుంది. ఎంటర్‌ప్రైజ్ హోస్ట్‌ల కోసం ఇది పబ్లిక్‌గా సక్రమమైన రీతిలో బహిరంగపరచబడని అవిశ్వసనీయమైన సర్టిఫికేట్‌లను ఉపయోగించడానికి అనుమతిస్తుంది.
+      పేర్కొన్న subjectPublicKeyInfo హాష్‌లు ఉన్న సర్టిఫికేట్‌లను కలిగి ఉన్న సర్టిఫికేట్ చైన్‌ల కోసం సర్టిఫికేట్ పారదర్శకతను బహిర్గతం ఆవశ్యకాలను నిలిపివేయడాన్ని ఈ విధానం అనుమతిస్తుంది. ఎంటర్‌ప్రైజ్ హోస్ట్‌ల కోసం ఇది పబ్లిక్‌గా సక్రమమైన రీతిలో బహిరంగపరచబడని అవిశ్వసనీయమైన సర్టిఫికేట్‌లను ఉపయోగించడానికి అనుమతిస్తుంది.
 
       ఈ విధానం సెట్ చేయబడినప్పుడు సర్టిఫికేట్ పారదర్శకత అమలు కోసం నిలిపివేయడానికి, హాష్ తప్పనిసరిగా లెగసీ సర్టిఫికేట్ అధికారం (CA) వలె గుర్తించబడిన CA సర్టిఫికేట్‌లో కనిపిస్తున్న subjectPublicKeyInfoగా ఉండాలి. లెగసీ CA అనేది <ph name="PRODUCT_NAME" /> ద్వారా మద్దతు ఉన్న ఒకటి లేదా మరిన్ని ఆపరేటింగ్ సిస్టమ్‌ల ద్వారా పబ్లిక్‌గా విశ్వసించబడిన CA, కానీ Android ఓపెన్ సోర్స్ ప్రాజెక్ట్ లేదా <ph name="PRODUCT_OS_NAME" /> ద్వారా విశ్వసించినది కాదు.
 
@@ -2248,7 +2248,7 @@
 <translation id="7123160381479171745">పరికరానికి లాగిన్ చేయడానికి అనుమతించబడిన వినియోగదారుల జాబితాను నిర్వచిస్తుంది. నమోదులు <ph name="USER_WHITELIST_ENTRY_EXAMPLE" /> వంటి <ph name="USER_WHITELIST_ENTRY_FORMAT" /> రూపంలో ఉంటాయి. డొమైన్‌లో నిర్హేతుక వినియోగదారులను అనుమతించడానికి, <ph name="USER_WHITELIST_ENTRY_WILDCARD" /> రూపంలో ఉండే నమోదులను ఉపయోగించండి.
 
 ఈ విధానం కాన్ఫిగర్ చేయబడకపోతే, సైన్ ఇన్ చేయడానికి ఏ వినియోగదారులు అనుమతించబడతారనే దానిపై నియంత్రణలు ఉండవు. ఇప్పటికీ కొత్త వినియోగదారులను సృష్టించడానికి <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> విధానానికి తగినట్లుగా కాన్ఫిగర్ చేయబడి ఉండటం అవసరం అని గుర్తుంచుకోండి.</translation>
-<translation id="7126716959063786004">విధి నిర్వాహికిలో ప్రాసెస్‌లను ముగించడాన్ని ప్రారంభించండి</translation>
+<translation id="7126716959063786004">టాస్క్ మేనేజర్‌లో ప్రాసెస్‌లను ముగించడాన్ని ప్రారంభించండి</translation>
 <translation id="7127892035367404455">లక్ష్య వెర్షన్‌కి ఉపసంహరించండి</translation>
 <translation id="7128918109610518786"><ph name="PRODUCT_OS_NAME" /> లాంచర్ బార్‌లో పిన్ చేసిన అనువర్తనాల వలె చూపే అనువర్తన ఐడెంటిఫైయర్‌లను జాబితా చేస్తుంది.
 
@@ -2399,9 +2399,9 @@
       GAIAకి సెట్ చేస్తే, లాగిన్ సాధారణ GAIA ప్రామాణీకరణ విధానం ద్వారా చేయబడుతుంది.
 
       SAML_INTERSTITIALకి సెట్ చేస్తే, లాగిన్ వినియోగదారుకు స్క్రీన్ మధ్యభాగంలో పరికర నమోదు డొమైన్‌లోని SAML IdP ప్రామాణీకరణతో కొనసాగే ఎంపికను లేదా తిరిగి సాధారణ GAIA లాగిన్ విధానానికి వెళ్లే ఎంపికను అందిస్తూ ముందస్తు హెచ్చరికను చూపుతుంది.</translation>
-<translation id="755951849901630953">సెట్ చేయనప్పుడు లేదా ఒప్పు ఎంపికకు సెట్ చేసినప్పుడు, <ph name="PRODUCT_NAME" />లోని అన్ని అంతర్భాగాల కోసం అంతర్భాగ నవీకరణలను ప్రారంభిస్తుంది.
+<translation id="755951849901630953">సెట్ చేయనప్పుడు లేదా ఒప్పు ఎంపికకు సెట్ చేసినప్పుడు, <ph name="PRODUCT_NAME" />లోని అన్ని అంతర్భాగాల కోసం అంతర్భాగ అప్‌డేట్‌లను ప్రారంభిస్తుంది.
 
-      తప్పు ఎంపికకు సెట్ చేసినట్లయితే, అంతర్భాగాలకు నవీకరణలు నిలిపివేయబడతాయి. అయితే, ఈ విధానంలో కొన్ని అంతర్భాగాలకు మినహాయింపు ఉంటుంది: అమలు చేయదగిన కోడ్ ఉండని లేదా బ్రౌజర్ యొక్క ప్రవర్తనను గణనీయ స్థాయిలో మార్చని లేదా భద్రతకు కీలకమైన అంతర్భాగానికి నవీకరణలు నిలిపివేయబడవు.
+      తప్పు ఎంపికకు సెట్ చేసినట్లయితే, అంతర్భాగాలకు అప్‌డేట్‌లు  నిలిపివేయబడతాయి. అయితే, ఈ విధానంలో కొన్ని అంతర్భాగాలకు మినహాయింపు ఉంటుంది: అమలు చేయదగిన కోడ్ ఉండని లేదా బ్రౌజర్ యొక్క ప్రవర్తనను గణనీయ స్థాయిలో మార్చని లేదా భద్రతకు కీలకమైన అంతర్భాగానికి అప్‌డేట్‌లు  నిలిపివేయబడవు.
       సర్టిఫికేట్ ఉపసంహరణ జాబితాలు మరియు సురక్షిత బ్రౌజింగ్ డేటా వంటివి అటువంటి అంతర్భాగాలకు ఉదాహరణలు.
       సురక్షిత బ్రౌజింగ్ గురించి మరింత సమాచారం కావాలంటే https://developers.google.com/safe-browsingని చూడండి.</translation>
 <translation id="757395965347379751">ఈ సెట్టింగ్‌ని ప్రారంభించినప్పుడు, <ph name="PRODUCT_NAME" /> SHA-1 సంతకం గల ప్రమాణపత్రాలను అవి విజయవంతంగా ధృవీకరించబడే వరకు మరియు స్థానికంగా ఇన్‌స్టాల్ చేసిన CA ప్రమాణపత్రాలకు అనుబంధించి ఉన్నంతవరకు అనుమతిస్తుంది.
@@ -2438,7 +2438,7 @@
 
       ఈ విధానాన్ని సెట్ చేయకుంటే (లేదా 'ప్రత్యేక పరిమితులు వద్దు' ఎంపికను ఎంచుకున్నట్లయితే), సురక్షిత బ్రౌజింగ్ విశ్లేషణ ఫలితాల ఆధారంగా డౌన్‌లోడ్‌లు సాధారణ భద్రతా పరిమితుల ప్రకారం పరిశీలించబడతాయి.
 
-      వెబ్ పేజీ కంటెంట్ నుండి ప్రారంభించబడిన డౌన్‌లోడ్‌లకు, వాటితో పాటుగా 'డౌన్‌లోడ్ లింక్...' సందర్భోచిత మెను ఎంపికకు ఈ పరిమితులు వర్తిస్తాయని గుర్తుంచుకోండి. ప్రస్తుతం ప్రదర్శించబడిన పేజీ నుండి సేవ్ చేయడానికి / డౌన్‌లోడ్ చేయడానికి మరియు ముద్రణ ఎంపికల నుండి PDF వలె సేవ్ చేయడానికి ఈ పరిమితులు వర్తించవు.
+      వెబ్ పేజీ కంటెంట్ నుండి ప్రారంభించబడిన డౌన్‌లోడ్‌లకు, వాటితో పాటుగా 'డౌన్‌లోడ్ లింక్...' సందర్భోచిత మెనూ ఎంపికకు ఈ పరిమితులు వర్తిస్తాయని గుర్తుంచుకోండి. ప్రస్తుతం ప్రదర్శించబడిన పేజీ నుండి సేవ్ చేయడానికి / డౌన్‌లోడ్ చేయడానికి మరియు ముద్రణ ఎంపికల నుండి PDF వలె సేవ్ చేయడానికి ఈ పరిమితులు వర్తించవు.
 
       సురక్షిత బ్రౌజింగ్ గురించి మరింత సమాచారం కావాలంటే https://developers.google.com/safe-browsingని చూడండి.</translation>
 <translation id="7643883929273267746"><ph name="PRODUCT_NAME" />లో కనిపించే ఖాతాలను నియంత్రించండి</translation>
@@ -2521,7 +2521,7 @@
       ఈ సెట్టింగ్‌ను కాన్ఫిగర్ చేయకపోతే, వినియోగదారులు Android సెట్టింగ్‌ల అనువర్తనంలో Android బ్యాకప్ సేవను ఆన్ చేయగలరు మరియు ఆఫ్ చేయగలరు.</translation>
 <translation id="780603170519840350">subjectPublicKeyInfo హాష్‌ల కోసం సర్టిఫికేట్ పారదర్శకత ఆవశ్యకాల అమలును నిలిపివేస్తుంది.
 
-      పేర్కొన్న subjectPublicKeyInfo హాష్‌లను ఉన్న సర్టిఫికేట్‌లను కలిగి ఉన్న సర్టిఫికేట్ చైన్‌ల కోసం సర్టిఫికేట్ పారదర్శకతను బహిర్గత అవసరాలను నిలిపివేయడాన్ని ఈ విధానం అనుమతిస్తుంది. ఎంటర్‌ప్రైజ్ హోస్ట్‌ల కోసం ఇది పబ్లిక్‌గా సక్రమమైన రీతిలో బహిరంగపరచబడని అవిశ్వసనీయమైన సర్టిఫికేట్‌లను ఉపయోగించడానికి అనుమతిస్తుంది.
+      పేర్కొన్న subjectPublicKeyInfo హాష్‌లు ఉన్న సర్టిఫికేట్‌లను కలిగి ఉన్న సర్టిఫికేట్ చైన్‌ల కోసం సర్టిఫికేట్ పారదర్శకతను బహిర్గత ఆవశ్యకాలను నిలిపివేయడాన్ని ఈ విధానం అనుమతిస్తుంది. ఎంటర్‌ప్రైజ్ హోస్ట్‌ల కోసం ఇది పబ్లిక్‌గా సక్రమమైన రీతిలో బహిరంగపరచబడని అవిశ్వసనీయమైన సర్టిఫికేట్‌లను ఉపయోగించడానికి అనుమతిస్తుంది.
 
       ఈ విధానం సెట్ చేయబడినప్పుడు సర్టిఫికేట్ పారదర్శకత అమలు కోసం నిలిపివేయడానికి, కింది పరిస్థితుల్లో తప్పనిసరిగా ఒకదాన్ని కలిగి ఉండాలి:
       1. సర్వర్ సర్టిఫికేట్ యొక్క subjectPublicKeyInfo హాష్.
diff --git a/components/security_state/core/security_state.cc b/components/security_state/core/security_state.cc
index 7bf8d4f..dd5195a 100644
--- a/components/security_state/core/security_state.cc
+++ b/components/security_state/core/security_state.cc
@@ -19,6 +19,18 @@
 
 namespace {
 
+// Returns true if |url| is a blob: URL and its path parses as a GURL with a
+// nonsecure origin, and false otherwise. See
+// https://url.spec.whatwg.org/#origin.
+bool IsNonsecureBlobUrl(
+    const GURL& url,
+    const IsOriginSecureCallback& is_origin_secure_callback) {
+  if (!url.SchemeIs(url::kBlobScheme))
+    return false;
+  GURL inner_url(url.path());
+  return !is_origin_secure_callback.Run(inner_url);
+}
+
 // For nonsecure pages, sets |security_level| in |*security_info| based on the
 // provided information and the kMarkHttpAsFeature field trial. Also sets the
 // explanatory fields |incognito_downgraded_security_level| and
@@ -152,7 +164,8 @@
   if (!is_cryptographic_with_certificate) {
     if (!visible_security_state.is_error_page &&
         !is_origin_secure_callback.Run(url) &&
-        (url.IsStandard() || url.SchemeIs(url::kBlobScheme))) {
+        (url.IsStandard() ||
+         IsNonsecureBlobUrl(url, is_origin_secure_callback))) {
       SetSecurityLevelAndRelatedFieldsForNonSecureFieldTrial(
           visible_security_state.is_incognito,
           visible_security_state.is_error_page,
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 6210277..85e30d0 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -149,7 +149,7 @@
 <translation id="192020519938775529">{COUNT,plural, =0{بدون}=1{موقع واحد}two{ موقعان (#)}few{# مواقع}many{# موقعًا}other{# موقع}}</translation>
 <translation id="1927235823738766038">بطاقات الائتمان وبطاقات السحب الآلي المقبولة</translation>
 <translation id="194030505837763158">الانتقال إلى <ph name="LINK" /></translation>
-<translation id="1945968466830820669">‏قد تفقد إمكانية الوصول إلى حساب مؤسستك أو تتعرَّض لسرقة هويتك. لذا يوصي Chromium بتغيير كلمة مرورك الآن.</translation>
+<translation id="1945968466830820669">‏قد تفقد إمكانية الوصول إلى حساب مؤسستك أو تتعرَّض لسرقة هويتك. لذا، يوصي Chromium بتغيير كلمة مرورك الآن.</translation>
 <translation id="1948773908305951926">بطاقات الدفع المُسبق المقبولة</translation>
 <translation id="1962204205936693436">إشارات <ph name="DOMAIN" /></translation>
 <translation id="1973335181906896915">خطأ أثناء التسلسل</translation>
@@ -590,7 +590,7 @@
 <translation id="5141240743006678641">‏تشفير كلمات المرور المتزامنة باستخدام بيانات اعتماد Google</translation>
 <translation id="5145883236150621069">يوجد رمز خطأ في استجابة السياسة</translation>
 <translation id="5159010409087891077">‏يمكنك فتح الصفحة في نافذة جديدة للتصفح المتخفي (⇧⌘N)</translation>
-<translation id="5169827969064885044">‏قد تفقد إمكانية الوصول إلى حساب مؤسستك أو تتعرَّض لسرقة هويتك. لذا يوصي Chrome بتغيير كلمة مرورك الآن.</translation>
+<translation id="5169827969064885044">‏قد تفقد إمكانية الوصول إلى حساب مؤسستك أو تتعرَّض لسرقة هويتك. لذا، يوصي Chrome بتغيير كلمة مرورك الآن.</translation>
 <translation id="5171045022955879922">‏البحث أو إدخال عنوان URL</translation>
 <translation id="5172758083709347301">الجهاز</translation>
 <translation id="5179510805599951267">هل الصفحة ليست باللغة <ph name="ORIGINAL_LANGUAGE" />؟ الإبلاغ عن هذا الخطأ</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index bbb90fe..3a176e1 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -49,6 +49,7 @@
     &lt;li&gt;Zkontrolujte, zda připojení k internetu normálně funguje.&lt;/li&gt;
     &lt;li&gt;Kontaktujte vlastníka webu.&lt;/li&gt;
     &lt;/ol&gt;</translation>
+<translation id="1257286744552378071">Zadali jste své heslo na webu, který není spravován vaší organizací. Kvůli ochraně účtu nepoužívejte jeho heslo v jiných aplikacích a na jiných webech.</translation>
 <translation id="1263231323834454256">Seznam četby</translation>
 <translation id="1264126396475825575">Zpráva o selhání pořízená <ph name="CRASH_TIME" /> (dosud nenahrána nebo ignorována)</translation>
 <translation id="1270502636509132238">Způsob vyzvednutí</translation>
@@ -188,6 +189,7 @@
 <translation id="2212735316055980242">Zásada nebyla nalezena</translation>
 <translation id="2213606439339815911">Načítání záznamů...</translation>
 <translation id="2218879909401188352">Útočníci, kteří na webu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> aktuálně působí, by vám do zařízení mohli nainstalovat nebezpečné aplikace, které jej poškodí, přidat skryté poplatky na účet za mobilní služby nebo odcizit osobní údaje. <ph name="BEGIN_LEARN_MORE_LINK" />Další informace<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="2224337661447660594">Nejste připojeni k internetu</translation>
 <translation id="2230458221926704099">Opravte připojení pomocí <ph name="BEGIN_LINK" />diagnostické aplikace<ph name="END_LINK" /></translation>
 <translation id="2239100178324503013">Odeslat</translation>
 <translation id="225207911366869382">Tato hodnota již pro tuto zásadu není podporována.</translation>
@@ -358,6 +360,7 @@
 <translation id="3422472998109090673">Web <ph name="HOST_NAME" /> momentálně není dostupný.</translation>
 <translation id="3427092606871434483">Povolit (výchozí)</translation>
 <translation id="3427342743765426898">&amp;Opakovat úpravy</translation>
+<translation id="342781501876943858">Pokud jste heslo použili na jiném webu, doporučujeme vám ho resetovat.</translation>
 <translation id="3431636764301398940">Uložit tuto kartu do zařízení</translation>
 <translation id="3447661539832366887">Vlastník tohoto zařízení hru s dinosaurem vypnul.</translation>
 <translation id="3447884698081792621">Zobrazit certifikát (vydavatel: <ph name="ISSUER" />)</translation>
@@ -496,6 +499,7 @@
 <translation id="4340982228985273705">Tento počítač nebyl rozpoznán jako spravovaný organizací, proto lze pomocí zásad automaticky instalovat pouze rozšíření hostovaná v Internetovém obchodě Chrome. Adresa URL Internetového obchodu Chrome pro aktualizace je <ph name="CWS_UPDATE_URL" />.</translation>
 <translation id="4346197816712207223">Přijímané kreditní karty</translation>
 <translation id="4356973930735388585">Útočníci, kteří se aktuálně nacházejí na tomto webu, se mohou pokusit nainstalovat vám do počítače nebezpečné programy, které mohou ukrást nebo smazat vaše informace (například fotky, hesla, zprávy nebo platební karty).</translation>
+<translation id="4358461427845829800">Spravovat platební metody...</translation>
 <translation id="4372948949327679948">Očekávána hodnota <ph name="VALUE_TYPE" />.</translation>
 <translation id="4377125064752653719">Pokusili jste se přejít na web <ph name="DOMAIN" />, ale certifikát prezentovaný tímto webem byl vydavatelem certifikátu zrušen. To znamená, že bezpečnostním pověřením, která web prezentoval, nelze zcela důvěřovat. Je možné, že komunikujete s útočníkem.</translation>
 <translation id="4406896451731180161">výsledky vyhledávání</translation>
@@ -583,6 +587,7 @@
 <translation id="5115563688576182185">(64bitový)</translation>
 <translation id="5121084798328133320">Po ověření budou údaje o kartě z vašeho účtu Google Payments poskytnuty tomuto webu.</translation>
 <translation id="5128122789703661928">Relace s tímto názvem není pro smazání platná.</translation>
+<translation id="5135404736266831032">Spravovat adresy...</translation>
 <translation id="5141240743006678641">Šifrovat synchronizovaná hesla pomocí hesla k účtu Google</translation>
 <translation id="5145883236150621069">Odpověď zásady obsahuje kód chyby</translation>
 <translation id="5159010409087891077">Otevřete stránku v novém anonymním okně (⇧⌘N)</translation>
@@ -668,9 +673,11 @@
 <translation id="5685654322157854305">Přidat dodací adresu</translation>
 <translation id="5689199277474810259">Exportovat do formátu JSON</translation>
 <translation id="5689516760719285838">Poloha</translation>
+<translation id="570530837424789914">Spravovat...</translation>
 <translation id="5710435578057952990">Identita těchto webových stránek nebyla ověřena.</translation>
 <translation id="5719499550583120431">Obchodník přijímá předplacené karty.</translation>
 <translation id="5720705177508910913">Aktuální uživatel</translation>
+<translation id="5730040223043577876">Pokud jste heslo použili na jiném webu, doporučujeme vám ho resetovat.</translation>
 <translation id="5732392974455271431">Rodiče ti jej mohou odblokovat.</translation>
 <translation id="5763042198335101085">Zadejte platnou e-mailovou adresu</translation>
 <translation id="5765072501007116331">Chcete-li zobrazit způsoby doručení a požadavky, vyberte adresu</translation>
@@ -757,6 +764,7 @@
 <translation id="6446608382365791566">Přidání dalších informací</translation>
 <translation id="6447842834002726250">Soubory cookie</translation>
 <translation id="6451458296329894277">Potvrdit nové odeslání formuláře</translation>
+<translation id="6465306955648956876">Spravovat hesla...</translation>
 <translation id="647261751007945333">Zásady zařízení</translation>
 <translation id="6477321094435799029">Chrome na této stránce zjistil neobvyklý kód a z důvodu ochrany vašich osobních údajů (například hesel, telefonních čísel a platebních karet) ji zablokoval.</translation>
 <translation id="6489534406876378309">Začít nahrávat zprávy o selhání</translation>
@@ -776,6 +784,7 @@
 <translation id="6628463337424475685">Vyhledávání <ph name="ENGINE" /></translation>
 <translation id="6630809736994426279">Útočníci, kteří se aktuálně nacházejí na webu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, se mohou pokusit nainstalovat do vašeho počítače Mac nebezpečné programy, které mohou ukrást nebo smazat vaše informace (například fotky, hesla, zprávy nebo platební karty). <ph name="BEGIN_LEARN_MORE_LINK" />Další informace<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="6644283850729428850">Tato zásada se již nepoužívá.</translation>
+<translation id="6646269444027925224">{COUNT,plural, =0{Žádné}=1{Z 1 webu (nebudete odhlášeni z účtu Google)}few{Ze # webů (nebudete odhlášeni z účtu Google)}many{Z # webu (nebudete odhlášeni z účtu Google)}other{Z # webů (nebudete odhlášeni z účtu Google)}}</translation>
 <translation id="6657585470893396449">Heslo</translation>
 <translation id="6671697161687535275">Odstranit návrh položky formuláře z prohlížeče Chromium?</translation>
 <translation id="6685834062052613830">Odhlaste se a dokončete nastavení</translation>
@@ -802,6 +811,7 @@
 <translation id="6915804003454593391">Uživatel:</translation>
 <translation id="6945221475159498467">Vybrat</translation>
 <translation id="6948701128805548767">Chcete-li zobrazit způsoby vyzvednutí a požadavky, vyberte adresu</translation>
+<translation id="6949872517221025916">Resetovat heslo</translation>
 <translation id="6957887021205513506">Zdá se, že certifikát serveru je podvrh.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6965978654500191972">Zařízení</translation>
@@ -824,6 +834,7 @@
 <translation id="7139724024395191329">Emirát</translation>
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> další}few{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> další}many{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> další}other{<ph name="PAYMENT_METHOD_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> dalších}}</translation>
 <translation id="7155487117670177674">Platba není zabezpečená</translation>
+<translation id="717330890047184534">ID Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> další}few{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> další}many{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> další}other{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> dalších}}</translation>
 <translation id="7180611975245234373">Obnovit</translation>
 <translation id="7182878459783632708">Nebyly nastaveny žádné zásady</translation>
@@ -1025,6 +1036,7 @@
 <translation id="8553075262323480129">Překlad se nezdařil. Nepodařilo se rozpoznat jazyk stránky.</translation>
 <translation id="8557066899867184262">Kód CVC je uveden na zadní straně karty.</translation>
 <translation id="8559762987265718583">Soukromé připojení k doméně <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> nelze navázat, protože máte v zařízení nastaveno chybné datum a čas (<ph name="DATE_AND_TIME" />).</translation>
+<translation id="8564985650692024650">Pokud jste heslo organizace <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> použili na jiném webu, doporučujeme vám ho resetovat.</translation>
 <translation id="8571890674111243710">Překlad stránky do jazyka: <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Přidat telefon
 </translation>
@@ -1052,6 +1064,7 @@
 <translation id="884264119367021077">Dodací adresa</translation>
 <translation id="884923133447025588">Nebyl nalezen žádný mechanismus zamítnutí.</translation>
 <translation id="885730110891505394">Sdílení s Googlem</translation>
+<translation id="8858065207712248076">Pokud jste heslo organizace <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> použili na jiném webu, doporučujeme vám ho resetovat.</translation>
 <translation id="8866481888320382733">Při analýze nastavení zásady došlo k chybě</translation>
 <translation id="8870413625673593573">Nedávno zavřené</translation>
 <translation id="8874824191258364635">Zadejte platné číslo karty</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index debf4ecc..1ab5d357 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -49,6 +49,7 @@
     &lt;li&gt;Βεβαιωθείτε ότι η σύνδεσή σας στο διαδίκτυο λειτουργεί κανονικά.&lt;/li&gt;
     &lt;li&gt;Επικοινωνήστε με τον κάτοχο του ιστοτόπου.&lt;/li&gt;
     &lt;/ol&gt;</translation>
+<translation id="1257286744552378071">Έχετε εισαγάγει τον κωδικό πρόσβασής σας σε έναν ιστότοπο τον οποίο δεν διαχειρίζεται ο οργανισμός σας. Για να προστατεύσετε τον λογαριασμό σας, μην χρησιμοποιήσετε ξανά αυτόν τον κωδικό πρόσβασης σε άλλες εφαρμογές και ιστοτόπους.</translation>
 <translation id="1263231323834454256">Λίστα ανάγνωσης</translation>
 <translation id="1264126396475825575">Καταγράφηκαν αναφορές σφαλμάτων <ph name="CRASH_TIME" /> (δεν έχουν ακόμη μεταφορτωθεί ή παραβλεφθεί)</translation>
 <translation id="1270502636509132238">Τρόπος παραλαβής</translation>
@@ -188,6 +189,7 @@
 <translation id="2212735316055980242">Η πολιτική δε βρέθηκε</translation>
 <translation id="2213606439339815911">Ανάκτηση καταχωρίσεων…</translation>
 <translation id="2218879909401188352">Οι εισβολείς στον ιστότοπο <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> θα μπορούσαν να εγκαταστήσουν επικίνδυνες εφαρμογές που προκαλούν ζημιά στη συσκευή σας, να προσθέσουν κρυφές χρεώσεις στον λογαριασμό του κινητού σας ή να κλέψουν τα προσωπικά στοιχεία σας. <ph name="BEGIN_LEARN_MORE_LINK" />Μάθετε περισσότερα<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="2224337661447660594">Χωρίς σύνδεση στο διαδίκτυο</translation>
 <translation id="2230458221926704099">Επιδιορθώστε τη σύνδεσή σας χρησιμοποιώντας την <ph name="BEGIN_LINK" />εφαρμογή διαγνωστικών ελέγχων<ph name="END_LINK" /></translation>
 <translation id="2239100178324503013">Αποστολή τώρα</translation>
 <translation id="225207911366869382">Αυτή η πολιτική έχει καταργηθεί για τη συγκεκριμένη πολιτική.</translation>
@@ -361,6 +363,7 @@
 <translation id="3422472998109090673">Προς το παρόν, δεν είναι δυνατή η πρόσβαση στον κεντρικό υπολογιστή <ph name="HOST_NAME" />.</translation>
 <translation id="3427092606871434483">Να επιτρέπεται (προεπιλογή)</translation>
 <translation id="3427342743765426898">&amp;Επανάληψη επεξεργασίας</translation>
+<translation id="342781501876943858">Το Chromium συνιστά την επαναφορά του κωδικού πρόσβασης, εάν τον έχετε χρησιμοποιήσει και σε άλλους ιστοτόπους.</translation>
 <translation id="3431636764301398940">Αποθήκευση αυτής της κάρτας στη συγκεκριμένη συσκευή</translation>
 <translation id="3447661539832366887">Ο κάτοχος αυτής της συσκευής απενεργοποίησε το παιχνίδι με τους δεινοσαύρους.</translation>
 <translation id="3447884698081792621">Εμφάνιση πιστοποιητικού (εκδόθηκε από <ph name="ISSUER" />)</translation>
@@ -501,6 +504,7 @@
 <translation id="4340982228985273705">Αυτός ο υπολογιστής δεν έχει εντοπιστεί ως διαχειριζόμενος από επιχείρηση. Συνεπώς, η πολιτική μπορεί να εγκαθιστά αυτόματα μόνο επεκτάσεις οι οποίες φιλοξενούνται στο Chrome Webstore. Το URL ενημέρωσης του Chrome Webstore είναι το "<ph name="CWS_UPDATE_URL" />".</translation>
 <translation id="4346197816712207223">Αποδεκτές πιστωτικές κάρτες</translation>
 <translation id="4356973930735388585">Οι εισβολείς σε αυτόν τον ιστότοπο μπορεί να επιχειρήσουν να εγκαταστήσουν επικίνδυνα προγράμματα στον υπολογιστή σας, τα οποία μπορούν να υποκλέψουν ή να διαγράψουν τα δεδομένα σας (για παράδειγμα, φωτογραφίες, κωδικούς πρόσβασης, μηνύματα και στοιχεία πιστωτικών καρτών).</translation>
+<translation id="4358461427845829800">Διαχείριση τρόπων πληρωμής…</translation>
 <translation id="4372948949327679948">Αναμενόμενη τιμή <ph name="VALUE_TYPE" />.</translation>
 <translation id="4377125064752653719">Προσπαθήσατε να μεταβείτε στον τομέα <ph name="DOMAIN" />, όμως το πιστοποιητικό που παρουσιάστηκε από το διακομιστή ανακλήθηκε από τον εκδότη του. Αυτό σημαίνει ότι τα διαπιστευτήρια ασφαλείας που παρουσιάστηκαν από το διακομιστή δεν πρέπει σε καμία περίπτωση να θεωρηθούν αξιόπιστα. Ενδέχεται να επικοινωνείτε με κάποιον εισβολέα.</translation>
 <translation id="4406896451731180161">αποτελέσματα αναζήτησης</translation>
@@ -588,6 +592,7 @@
 <translation id="5115563688576182185">(64-bit)</translation>
 <translation id="5121084798328133320">Μετά την επιβεβαίωση, τα στοιχεία της κάρτας από τον λογαριασμό πληρωμών Google θα κοινοποιηθούν σε αυτόν τον ιστότοπο.</translation>
 <translation id="5128122789703661928">Η περίοδος σύνδεσης με αυτό το όνομα δεν είναι έγκυρη για διαγραφή.</translation>
+<translation id="5135404736266831032">Διαχείριση διευθύνσεων…</translation>
 <translation id="5141240743006678641">Κρυπτογραφήστε συγχρονισμένους κωδικούς πρόσβασης με τα διαπιστευτήριά σας Google.</translation>
 <translation id="5145883236150621069">Βρέθηκε κωδικός σφάλματος στην απόκριση πολιτικής</translation>
 <translation id="5159010409087891077">Ανοίξτε τη σελίδα σε ένα νέο παράθυρο ανώνυμης περιήγησης (⇧⌘N)</translation>
@@ -673,9 +678,11 @@
 <translation id="5685654322157854305">Προσθήκη διεύθυνσης αποστολής</translation>
 <translation id="5689199277474810259">Εξαγωγή σε JSON</translation>
 <translation id="5689516760719285838">Τοποθεσία</translation>
+<translation id="570530837424789914">Διαχείριση…</translation>
 <translation id="5710435578057952990">Η ταυτότητα αυτού του ιστότοπου δεν έχει επαληθευτεί.</translation>
 <translation id="5719499550583120431">Οι προπληρωμένες κάρτες γίνονται δεκτές.</translation>
 <translation id="5720705177508910913">Τρέχων χρήστης</translation>
+<translation id="5730040223043577876">Το Chrome συνιστά την επαναφορά του κωδικού πρόσβασης, εάν τον έχετε χρησιμοποιήσει και σε άλλους ιστοτόπους.</translation>
 <translation id="5732392974455271431">Οι γονείς σου μπορούν να καταργήσουν τον αποκλεισμό του</translation>
 <translation id="5763042198335101085">Εισαγάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου</translation>
 <translation id="5765072501007116331">Για να δείτε τρόπους και απαιτήσεις παράδοσης, επιλέξτε μια διεύθυνση</translation>
@@ -763,6 +770,7 @@
 <translation id="6446608382365791566">Προσθήκη περισσότερων πληροφοριών</translation>
 <translation id="6447842834002726250">Cookies</translation>
 <translation id="6451458296329894277">Επιβεβαίωση νέας υποβολής φόρμας</translation>
+<translation id="6465306955648956876">Διαχείριση κωδικών πρόσβασης…</translation>
 <translation id="647261751007945333">Πολιτικές συσκευών </translation>
 <translation id="6477321094435799029">Το Chrome εντόπισε ασυνήθιστο κώδικα σε αυτήν τη σελίδα και τον απέκλεισε για να προστατεύσει τα προσωπικά σας στοιχεία (για παράδειγμα, κωδικούς πρόσβασης, αριθμούς τηλεφώνου ή πιστωτικές κάρτες).</translation>
 <translation id="6489534406876378309">Έναρξη μεταφόρτωσης σφαλμάτων</translation>
@@ -782,6 +790,7 @@
 <translation id="6628463337424475685">Αναζήτηση <ph name="ENGINE" /></translation>
 <translation id="6630809736994426279">Οι εισβολείς που βρίσκονται αυτήν τη στιγμή στον ιστότοπο <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ενδέχεται να επιχειρήσουν να εγκαταστήσουν επικίνδυνα προγράμματα στον υπολογιστή σας Mac, για να υποκλέψουν ή να διαγράψουν τα δεδομένα σας (για παράδειγμα, φωτογραφίες, κωδικούς πρόσβασης, μηνύματα και πιστωτικές κάρτες). <ph name="BEGIN_LEARN_MORE_LINK" />Μάθετε περισσότερα<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="6644283850729428850">Αυτή η πολιτική έχει αποσυρθεί.</translation>
+<translation id="6646269444027925224">{COUNT,plural, =0{Κανένας}=1{Από 1 ιστότοπο (δεν θα αποσυνδεθείτε από τον Λογαριασμό σας Google)}other{Από # ιστοτόπους (δεν θα αποσυνδεθείτε από τον Λογαριασμό σας Google)}}</translation>
 <translation id="6657585470893396449">Κωδικός πρόσβασης</translation>
 <translation id="6671697161687535275">Να καταργηθεί η πρόταση φόρμας από το Chromium;</translation>
 <translation id="6685834062052613830">Αποσυνδεθείτε και ολοκληρώστε την εγκατάσταση</translation>
@@ -808,6 +817,7 @@
 <translation id="6915804003454593391">Χρήστης</translation>
 <translation id="6945221475159498467">Επιλογή</translation>
 <translation id="6948701128805548767">Για να δείτε τρόπους και απαιτήσεις παραλαβής, επιλέξτε μια διεύθυνση</translation>
+<translation id="6949872517221025916">Επαναφορά κωδικού πρόσβασης</translation>
 <translation id="6957887021205513506">Το πιστοποιητικό του διακομιστή φαίνεται να είναι πλαστό.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6965978654500191972">Συσκευή</translation>
@@ -830,6 +840,7 @@
 <translation id="7139724024395191329">Εμιράτο</translation>
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> και <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> ακόμη}other{<ph name="PAYMENT_METHOD_PREVIEW" /> και <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> ακόμη}}</translation>
 <translation id="7155487117670177674">Μη ασφαλής πληρωμή</translation>
+<translation id="717330890047184534">Αναγνωριστικό Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> και <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ακόμη}other{<ph name="SHIPPING_OPTION_PREVIEW" /> και <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ακόμη}}</translation>
 <translation id="7180611975245234373">Ανανέωση</translation>
 <translation id="7182878459783632708">Δεν έχουν οριστεί πολιτικές</translation>
@@ -1031,6 +1042,7 @@
 <translation id="8553075262323480129">Η μετάφραση απέτυχε επειδή δεν ήταν δυνατός ο προσδιορισμός της σελίδας.</translation>
 <translation id="8557066899867184262">Ο κωδικός CVC βρίσκεται στο πίσω μέρος της κάρτας.</translation>
 <translation id="8559762987265718583">Δεν είναι δυνατή η επίτευξη ιδιωτικής σύνδεσης με τον τομέα <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> επειδή η ημερομηνία και η ώρα (<ph name="DATE_AND_TIME" />) της συσκευής σας είναι λανθασμένες.</translation>
+<translation id="8564985650692024650">Το Chromium συνιστά την επαναφορά του κωδικού πρόσβασης <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, εάν τον έχετε χρησιμοποιήσει και σε άλλους ιστοτόπους.</translation>
 <translation id="8571890674111243710">Μετάφραση σελίδας σε <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Προσθ. τηλεφ.
 </translation>
@@ -1058,6 +1070,7 @@
 <translation id="884264119367021077">Διεύθυνση αποστολής</translation>
 <translation id="884923133447025588">Δεν εντοπίστηκε μηχανισμός ακύρωσης.</translation>
 <translation id="885730110891505394">Κοινοποίηση στις υπηρεσίες της Google</translation>
+<translation id="8858065207712248076">Το Chrome συνιστά την επαναφορά του κωδικού πρόσβασης <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> εάν τον έχετε χρησιμοποιήσει και σε άλλους ιστοτόπους.</translation>
 <translation id="8866481888320382733">Σφάλμα ανάλυσης ρυθμίσεων πολιτικής</translation>
 <translation id="8870413625673593573">Έκλεισαν πρόσφατα</translation>
 <translation id="8874824191258364635">Εισαγάγετε έναν έγκυρο αριθμό κάρτας</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index d3178655..e061f176 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -49,6 +49,7 @@
     &lt;li&gt;Comprueba que tu conexión a Internet funcione con normalidad.&lt;/li&gt;
     &lt;li&gt;Ponte en contacto con el propietario del sitio web.&lt;/li&gt;
     &lt;/ol&gt;</translation>
+<translation id="1257286744552378071">Has introducido tu contraseña en un sitio web que no está gestionado por tu organización. Para proteger tu cuenta, no vuelvas a utilizar tu contraseña en otras aplicaciones ni en otros sitios web.</translation>
 <translation id="1263231323834454256">Lista de lectura</translation>
 <translation id="1264126396475825575">Informe sobre fallos registrado el <ph name="CRASH_TIME" /> (todavía no se ha subido ni ignorado)</translation>
 <translation id="1270502636509132238">Método de recogida</translation>
@@ -188,6 +189,7 @@
 <translation id="2212735316055980242">Política no encontrada</translation>
 <translation id="2213606439339815911">Recuperando entradas...</translation>
 <translation id="2218879909401188352">Se ha detectado la presencia de atacantes en <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> que podrían instalar aplicaciones peligrosas que dañen tu dispositivo, añadir cargos ocultos a tu factura del móvil o robar tu información personal. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="2224337661447660594">Sin conexión a Internet</translation>
 <translation id="2230458221926704099">Soluciona los problemas de tu conexión con la <ph name="BEGIN_LINK" />aplicación de diagnóstico<ph name="END_LINK" /></translation>
 <translation id="2239100178324503013">Enviar ahora</translation>
 <translation id="225207911366869382">Este valor ya no se utiliza para esta política.</translation>
@@ -361,6 +363,7 @@
 <translation id="3422472998109090673">No se puede acceder a la página <ph name="HOST_NAME" /> en este momento.</translation>
 <translation id="3427092606871434483">Permitir (predeterminado)</translation>
 <translation id="3427342743765426898">&amp;Rehacer edición</translation>
+<translation id="342781501876943858">Chromium te recomienda que cambies tu contraseña si la has vuelto a utilizar en otros sitios web.</translation>
 <translation id="3431636764301398940">Guardar esta tarjeta en el dispositivo</translation>
 <translation id="3447661539832366887">El propietario de este dispositivo ha desactivado el juego del dinosaurio.</translation>
 <translation id="3447884698081792621">Mostrar certificado (emitido por <ph name="ISSUER" />)</translation>
@@ -500,6 +503,7 @@
 <translation id="4340982228985273705">No se ha detectado que este ordenador esté administrado por la empresa, por lo que la política solo puede instalar automáticamente extensiones alojadas en Chrome Webstore. La URL de actualización de Chrome Webstore es "<ph name="CWS_UPDATE_URL" />".</translation>
 <translation id="4346197816712207223">Tarjetas de crédito aceptadas</translation>
 <translation id="4356973930735388585">Es posible que los atacantes que se encuentren en este sitio web intenten instalar programas peligrosos en tu ordenador para robar o eliminar tu información (por ejemplo, fotos, contraseñas, mensajes y tarjetas de crédito).</translation>
+<translation id="4358461427845829800">Gestiona tus métodos de pago...</translation>
 <translation id="4372948949327679948">Se esperaba un valor <ph name="VALUE_TYPE" />.</translation>
 <translation id="4377125064752653719">Has intentado acceder a <ph name="DOMAIN" />, pero el emisor ha revocado el certificado mostrado por el servidor, lo que significa que las credenciales de seguridad presentadas por el servidor no son de confianza. Es posible que hayas accedido a la página de un atacante.</translation>
 <translation id="4406896451731180161">resultados de la búsqueda</translation>
@@ -587,6 +591,7 @@
 <translation id="5115563688576182185">(64 bits)</translation>
 <translation id="5121084798328133320">Una vez que confirmes esta acción, la información de la tarjeta de tu cuenta de pagos de Google se compartirá con este sitio web.</translation>
 <translation id="5128122789703661928">No se puede eliminar la sesión con este nombre.</translation>
+<translation id="5135404736266831032">Gestiona tus direcciones...</translation>
 <translation id="5141240743006678641">Cifrar contraseñas sincronizadas con tus credenciales de Google</translation>
 <translation id="5145883236150621069">Código de error presente en respuesta de la política</translation>
 <translation id="5159010409087891077">Abre una página en una nueva ventana de incógnito (⇧ + ⌘ + N)</translation>
@@ -672,9 +677,11 @@
 <translation id="5685654322157854305">Añadir dirección de envío</translation>
 <translation id="5689199277474810259">Exportar a JSON</translation>
 <translation id="5689516760719285838">Ubicación</translation>
+<translation id="570530837424789914">Gestionar...</translation>
 <translation id="5710435578057952990">No se ha verificado la identidad de este sitio web.</translation>
 <translation id="5719499550583120431">Se aceptan tarjetas prepago.</translation>
 <translation id="5720705177508910913">Usuario actual</translation>
+<translation id="5730040223043577876">Chrome te recomienda que cambies tu contraseña si la has vuelto a utilizar en otros sitios web.</translation>
 <translation id="5732392974455271431">Tus padres pueden desbloquearlo</translation>
 <translation id="5763042198335101085">Introduce una dirección de correo electrónico válida</translation>
 <translation id="5765072501007116331">Selecciona una dirección para ver los métodos de entrega y los requisitos</translation>
@@ -762,6 +769,7 @@
 <translation id="6446608382365791566">Añadir más información</translation>
 <translation id="6447842834002726250">Cookies</translation>
 <translation id="6451458296329894277">Confirmar reenvío del formulario</translation>
+<translation id="6465306955648956876">Gestiona tus contraseñas...</translation>
 <translation id="647261751007945333">Políticas de dispositivos</translation>
 <translation id="6477321094435799029">Chrome ha detectado un código inusual en esta página y lo ha bloqueado para proteger tu información personal (por ejemplo, contraseñas, números de teléfono y tarjetas de crédito).</translation>
 <translation id="6489534406876378309">Empezar a subir errores</translation>
@@ -781,6 +789,7 @@
 <translation id="6628463337424475685">Búsqueda de <ph name="ENGINE" /></translation>
 <translation id="6630809736994426279">Es posible que los atacantes que se encuentren en <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> intenten instalar programas peligrosos en tu Mac para robar o eliminar tu información (por ejemplo, fotos, contraseñas, mensajes y tarjetas de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="6644283850729428850">Esta política está obsoleta.</translation>
+<translation id="6646269444027925224">{COUNT,plural, =0{Ninguno}=1{De 1 sitio web (no se cerrará la sesión en tu cuenta de Google)}other{De # sitios web (no se cerrará la sesión en tu cuenta de Google)}}</translation>
 <translation id="6657585470893396449">Contraseña</translation>
 <translation id="6671697161687535275">¿Quitar sugerencia de formulario de Chromium?</translation>
 <translation id="6685834062052613830">Cierra sesión y completa la configuración</translation>
@@ -807,6 +816,7 @@
 <translation id="6915804003454593391">Usuario:</translation>
 <translation id="6945221475159498467">Seleccionar</translation>
 <translation id="6948701128805548767">Selecciona una dirección para ver los métodos de recogida y los requisitos</translation>
+<translation id="6949872517221025916">Cambiar contraseña</translation>
 <translation id="6957887021205513506">El certificado del servidor parece ser falso.</translation>
 <translation id="6965382102122355670">Aceptar</translation>
 <translation id="6965978654500191972">Dispositivo</translation>
@@ -829,6 +839,7 @@
 <translation id="7139724024395191329">Emirato</translation>
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> más}other{<ph name="PAYMENT_METHOD_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> más}}</translation>
 <translation id="7155487117670177674">Pago no seguro</translation>
+<translation id="717330890047184534">ID de GAIA:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}other{<ph name="SHIPPING_OPTION_PREVIEW" /> y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}}</translation>
 <translation id="7180611975245234373">Actualizar</translation>
 <translation id="7182878459783632708">No hay políticas establecidas.</translation>
@@ -1030,6 +1041,7 @@
 <translation id="8553075262323480129">La traducción no se ha realizado correctamente porque no se ha podido determinar el idioma de la página.</translation>
 <translation id="8557066899867184262">Puedes encontrar el CVC en el reverso de la tarjeta.</translation>
 <translation id="8559762987265718583">No se puede establecer una conexión privada con <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> porque la fecha y la hora de tu dispositivo (<ph name="DATE_AND_TIME" />) no son correctas.</translation>
+<translation id="8564985650692024650">Chromium te recomienda que cambies tu contraseña de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si la has vuelto a utilizar en otros sitios web.</translation>
 <translation id="8571890674111243710">Traduciendo página a <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Añade un teléfono</translation>
 <translation id="859285277496340001">El certificado no especifica ningún mecanismo para comprobar si se ha revocado.</translation>
@@ -1056,6 +1068,7 @@
 <translation id="884264119367021077">Dirección de envío</translation>
 <translation id="884923133447025588">No se ha encontrado ningún mecanismo de revocación.</translation>
 <translation id="885730110891505394">Compartir con Google</translation>
+<translation id="8858065207712248076">Chrome te recomienda que cambies tu contraseña de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si la has vuelto a utilizar en otros sitios web.</translation>
 <translation id="8866481888320382733">Error al analizar la configuración de la política</translation>
 <translation id="8870413625673593573">Cerrado recientemente</translation>
 <translation id="8874824191258364635">Introduce un número de tarjeta válido</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index 5449ab6..6dfefef5 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -49,6 +49,7 @@
     &lt;li&gt;Provjerite jeste li povezani s internetom.&lt;/li&gt;
     &lt;li&gt;Obratite se vlasniku web-lokacije.&lt;/li&gt;
     &lt;/ol&gt;</translation>
+<translation id="1257286744552378071">Unijeli ste zaporku na web-lokaciju kojom ne upravlja vaša organizacija. Da biste zaštitili račun, nemojte upotrebljavati tu zaporku za druge aplikacije i web-lokacije.</translation>
 <translation id="1263231323834454256">Popis za čitanje</translation>
 <translation id="1264126396475825575">Izvješća o rušenju programa generirana <ph name="CRASH_TIME" /> (još nisu prenesena ili zanemarena)</translation>
 <translation id="1270502636509132238">Način preuzimanja</translation>
@@ -188,6 +189,7 @@
 <translation id="2212735316055980242">Pravilo nije pronađeno</translation>
 <translation id="2213606439339815911">Dohvaćanje unosa...</translation>
 <translation id="2218879909401188352">Napadači koji su trenutačno na web-lokaciji <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogli bi instalirati opasne aplikacije koje će oštetiti uređaj, dodati skrivene troškove na račun za mobilne usluge ili ukrasti vaše osobne podatke. <ph name="BEGIN_LEARN_MORE_LINK" />Saznajte više<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="2224337661447660594">Nema interneta</translation>
 <translation id="2230458221926704099">Riješite problem s povezivanjem pomoću <ph name="BEGIN_LINK" />dijagnostičke aplikacije<ph name="END_LINK" /></translation>
 <translation id="2239100178324503013">Pošalji sad</translation>
 <translation id="225207911366869382">Ta je vrijednost obustavljena za to pravilo.</translation>
@@ -361,6 +363,7 @@
 <translation id="3422472998109090673">Host <ph name="HOST_NAME" /> trenutačno nije dostupan.</translation>
 <translation id="3427092606871434483">Dopusti (zadano)</translation>
 <translation id="3427342743765426898">&amp;Ponovi uređivanje</translation>
+<translation id="342781501876943858">Chromium preporučuje poništavanje zaporke ako ste je upotrebljavali za druge web-lokacije.</translation>
 <translation id="3431636764301398940">Spremi tu karticu na ovaj uređaj</translation>
 <translation id="3447661539832366887">Vlasnik tog uređaja isključio je igru s dinosaurima.</translation>
 <translation id="3447884698081792621">Prikaz certifikata (izdavač: <ph name="ISSUER" />)</translation>
@@ -499,6 +502,7 @@
 <translation id="4340982228985273705">Za ovo računalo nije otkriveno da njime upravlja tvrtka, pa pravilo može samo automatski instalirati proširenja hostirana u Chrome web-trgovini. URL za ažuriranje Chrome web-trgovine je "<ph name="CWS_UPDATE_URL" />".</translation>
 <translation id="4346197816712207223">Prihvaćene kreditne kartice</translation>
 <translation id="4356973930735388585">Napadači na ovoj web-lokaciji mogu pokušati instalirati opasne programe na vaše računalo radi krađe ili brisanja vaših podataka (na primjer fotografija, zaporki, poruka i brojeva kreditnih kartica).</translation>
+<translation id="4358461427845829800">Upravljajte načinima plaćanja...</translation>
 <translation id="4372948949327679948">Očekivana vrijednost vrste <ph name="VALUE_TYPE" />.</translation>
 <translation id="4377125064752653719">Pokušali ste doseći domenu <ph name="DOMAIN" />, ali certifikat koji je poslužitelj predstavio povučen je od strane izdavača. Prema tome nikako ne biste trebali vjerovati sigurnosnim certifikatima koje predstavlja poslužitelj. Možda komunicirate s napadačem.</translation>
 <translation id="4406896451731180161">rezultati pretraživanja</translation>
@@ -586,6 +590,7 @@
 <translation id="5115563688576182185">(64-bitni)</translation>
 <translation id="5121084798328133320">Nakon što ih potvrdite, podaci o kartici s računa usluge Google podijelit će se s ovom web-lokacijom.</translation>
 <translation id="5128122789703661928">Brisanje sesije nije uspjelo jer naziv sesije nije važeći.</translation>
+<translation id="5135404736266831032">Upravljajte adresama...</translation>
 <translation id="5141240743006678641">Šifriranje sinkroniziranih zaporki s vjerodajnicama za Google</translation>
 <translation id="5145883236150621069">Odgovor na pravilo sadrži kôd pogreške</translation>
 <translation id="5159010409087891077">Otvorite stranicu u novom anonimnom prozoru (⇧⌘N)</translation>
@@ -671,9 +676,11 @@
 <translation id="5685654322157854305">Dodajte adresu za dostavu</translation>
 <translation id="5689199277474810259">Izvezi u JSON</translation>
 <translation id="5689516760719285838">Lokacija</translation>
+<translation id="570530837424789914">Upravljajte...</translation>
 <translation id="5710435578057952990">Identitet ove web lokacije nije ovjeren.</translation>
 <translation id="5719499550583120431">Prihvaćaju se pretplatne kartice.</translation>
 <translation id="5720705177508910913">Trenutačni korisnik:</translation>
+<translation id="5730040223043577876">Chrome preporučuje poništavanje zaporke ako ste je upotrebljavali za druge web-lokacije.</translation>
 <translation id="5732392974455271431">Tvoji je roditelji mogu deblokirati</translation>
 <translation id="5763042198335101085">Unesite važeću e-adresu</translation>
 <translation id="5765072501007116331">Odaberite adresu za prikaz načina dostave i zahtjeva za dostavu.</translation>
@@ -761,6 +768,7 @@
 <translation id="6446608382365791566">Dodajte još podataka</translation>
 <translation id="6447842834002726250">Kolačići</translation>
 <translation id="6451458296329894277">Potvrdi ponovno slanje obrasca</translation>
+<translation id="6465306955648956876">Upravljajte zaporkama...</translation>
 <translation id="647261751007945333">Pravila uređaja</translation>
 <translation id="6477321094435799029">Chrome je otkrio neuobičajeni kôd na toj stranici i blokirao ju je radi zaštite vaših osobnih podataka (primjerice zaporki, telefonskih brojeva i kreditnih kartica).</translation>
 <translation id="6489534406876378309">Pokreni prijenos rušenja</translation>
@@ -780,6 +788,7 @@
 <translation id="6628463337424475685"><ph name="ENGINE" /> Pretraživanje</translation>
 <translation id="6630809736994426279">Napadači koji su trenutačno na web-lokaciji <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogu pokušati instalirati opasne programe na vaš Mac radi krađe ili brisanja vaših podataka (na primjer fotografija, zaporki, poruka i brojeva kreditnih kartica). <ph name="BEGIN_LEARN_MORE_LINK" />Saznajte više<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="6644283850729428850">Ovo je pravilo zastarjelo.</translation>
+<translation id="6646269444027925224">{COUNT,plural, =0{Nijedna}=1{S jedne web-lokacije (nećete se odjaviti s Google računa)}one{S # web-lokacije (nećete se odjaviti s Google računa)}few{S # web-lokacije (nećete se odjaviti s Google računa)}other{S # web-lokacija (nećete se odjaviti s Google računa)}}</translation>
 <translation id="6657585470893396449">Zaporka</translation>
 <translation id="6671697161687535275">Želite li ukloniti prijedlog iz Chromiuma?</translation>
 <translation id="6685834062052613830">Odjavite se i dovršite postavljanje</translation>
@@ -806,6 +815,7 @@
 <translation id="6915804003454593391">Korisnik:</translation>
 <translation id="6945221475159498467">Odaberi</translation>
 <translation id="6948701128805548767">Odaberite adresu za prikaz načina preuzimanja i zahtjeva za preuzimanje</translation>
+<translation id="6949872517221025916">Poništite zaporku</translation>
 <translation id="6957887021205513506">Certifikat poslužitelja izgleda kao falsifikat.</translation>
 <translation id="6965382102122355670">U redu</translation>
 <translation id="6965978654500191972">Uređaj</translation>
@@ -828,6 +838,7 @@
 <translation id="7139724024395191329">Emirat</translation>
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7155487117670177674">Plaćanje nije sigurno</translation>
+<translation id="717330890047184534">ID za GAIA-u:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="7180611975245234373">Osvježi</translation>
 <translation id="7182878459783632708">Nije postavljeno nijedno pravilo</translation>
@@ -1029,6 +1040,7 @@
 <translation id="8553075262323480129">Prijevod nije uspio jer nije bilo moguće odrediti jezik stranice.</translation>
 <translation id="8557066899867184262">CVC možete pronaći na poleđini kartice.</translation>
 <translation id="8559762987265718583">Sigurnu vezu s domenom <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> nije moguće uspostaviti jer datum i vrijeme (<ph name="DATE_AND_TIME" />) na vašem uređaju nisu točni.</translation>
+<translation id="8564985650692024650">Chromium preporučuje poništavanje zaporke za organizaciju <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ako ste je upotrebljavali za druge web-lokacije.</translation>
 <translation id="8571890674111243710">Prijevod stranice na <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Dodaj tel. broj
 </translation>
@@ -1056,6 +1068,7 @@
 <translation id="884264119367021077">Adresa za dostavu</translation>
 <translation id="884923133447025588">Nije pronađen mehanizam za opoziv.</translation>
 <translation id="885730110891505394">Dijeljenje s Googleom</translation>
+<translation id="8858065207712248076">Chrome preporučuje poništavanje zaporke za organizaciju <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ako ste je upotrebljavali za druge web-lokacije.</translation>
 <translation id="8866481888320382733">Pogreška pri analizi postavki pravila</translation>
 <translation id="8870413625673593573">Nedavno zatvoreno</translation>
 <translation id="8874824191258364635">Unesite važeći broj kreditne kartice</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index d66a5258..140e5b4 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -49,6 +49,7 @@
     &lt;li&gt;Pastikan sambungan internet berfungsi normal.&lt;/li&gt;
     &lt;li&gt;Hubungi pemilik situs.&lt;/li&gt;
     &lt;/ol&gt;</translation>
+<translation id="1257286744552378071">Anda memasukkan sandi di situs yang tidak dikelola oleh organisasi. Untuk melindungi akun, jangan gunakan sandi yang sama di aplikasi dan situs lain.</translation>
 <translation id="1263231323834454256">Daftar bacaan</translation>
 <translation id="1264126396475825575">Laporan kerusakan diambil pada pukul <ph name="CRASH_TIME" /> (belum diupload atau diabaikan)</translation>
 <translation id="1270502636509132238">Metode Pengambilan</translation>
@@ -188,6 +189,7 @@
 <translation id="2212735316055980242">Kebijakan tidak ditemukan</translation>
 <translation id="2213606439339815911">Mengambil entri...</translation>
 <translation id="2218879909401188352">Saat ini, penyerang di <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> dapat menginstal aplikasi berbahaya yang dapat merusak perangkat, menambahkan biaya tersembunyi ke tagihan seluler, atau mencuri informasi pribadi Anda. <ph name="BEGIN_LEARN_MORE_LINK" />Pelajari lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="2224337661447660594">Tidak ada internet</translation>
 <translation id="2230458221926704099">Perbaiki sambungan menggunakan <ph name="BEGIN_LINK" />aplikasi diagnosis<ph name="END_LINK" /></translation>
 <translation id="2239100178324503013">Kirim sekarang</translation>
 <translation id="225207911366869382">Nilai ini sudah usang untuk kebijakan ini.</translation>
@@ -361,6 +363,7 @@
 <translation id="3422472998109090673"><ph name="HOST_NAME" /> saat ini tidak dapat dijangkau.</translation>
 <translation id="3427092606871434483">Izinkan (default)</translation>
 <translation id="3427342743765426898">&amp;Ulangi Pengeditan</translation>
+<translation id="342781501876943858">Chromium menyarankan untuk menyetel ulang sandi jika Anda juga menggunakannya di situs lain.</translation>
 <translation id="3431636764301398940">Simpan kartu ini ke perangkat ini</translation>
 <translation id="3447661539832366887">Pemilik perangkat ini menonaktifkan game dinosaurus.</translation>
 <translation id="3447884698081792621">Tampilkan sertifikat (diterbitkan oleh <ph name="ISSUER" />)</translation>
@@ -500,6 +503,7 @@
 <translation id="4340982228985273705">Komputer ini tidak terdeteksi sebagai dikelola perusahaan sehingga kebijakan hanya dapat secara otomatis menginstal ekstensi yang dihosting di Chrome Webstore. URL update Chrome Webstore-nya adalah "<ph name="CWS_UPDATE_URL" />".</translation>
 <translation id="4346197816712207223">Kartu Kredit yang Diterima</translation>
 <translation id="4356973930735388585">Penyerang di situs ini mungkin berusaha memasang program berbahaya di komputer Anda yang dapat mencuri atau menghapus informasi (misalnya, foto, sandi, pesan, dan kartu kredit).</translation>
+<translation id="4358461427845829800">Kelola metode pembayaran...</translation>
 <translation id="4372948949327679948">Nilai <ph name="VALUE_TYPE" /> yang diharapkan.</translation>
 <translation id="4377125064752653719">Anda berusaha menjangkau <ph name="DOMAIN" />, tetapi sertifikat yang disajikan oleh server telah dibatalkan oleh penerbitnya. Artinya informasi rahasia keamanan yang disajikan tidak dapat dipercaya. Anda mungkin sedang berkomunikasi dengan penyerang.</translation>
 <translation id="4406896451731180161">hasil penelusuran</translation>
@@ -587,6 +591,7 @@
 <translation id="5115563688576182185">(64 bit)</translation>
 <translation id="5121084798328133320">Setelah mengonfirmasi, detail kartu dari akun Pembayaran Google Anda akan dibagikan dengan situs ini.</translation>
 <translation id="5128122789703661928">Sesi dengan nama ini tidak valid untuk dihapus.</translation>
+<translation id="5135404736266831032">Kelola alamat...</translation>
 <translation id="5141240743006678641">Enkripsikan sandi yang disinkronkan dengan kredensial Google Anda</translation>
 <translation id="5145883236150621069">Ada kode kesalahan dalam tanggapan kebijakan</translation>
 <translation id="5159010409087891077">Buka halaman dalam Jendela samaran baru (⇧⌘N)</translation>
@@ -672,9 +677,11 @@
 <translation id="5685654322157854305">Tambahkan Alamat Pengiriman</translation>
 <translation id="5689199277474810259">Ekspor ke JSON</translation>
 <translation id="5689516760719285838">Lokasi</translation>
+<translation id="570530837424789914">Kelola...</translation>
 <translation id="5710435578057952990">Identitas situs Web ini belum diverifikasi.</translation>
 <translation id="5719499550583120431">Kartu prabayar diterima.</translation>
 <translation id="5720705177508910913">Pengguna saat ini</translation>
+<translation id="5730040223043577876">Chrome menyarankan untuk menyetel ulang sandi jika Anda juga menggunakannya di situs lain.</translation>
 <translation id="5732392974455271431">Orang tua dapat membuka blokirnya untukmu</translation>
 <translation id="5763042198335101085">Masukkan alamat email yang valid</translation>
 <translation id="5765072501007116331">Untuk melihat persyaratan dan metode pengiriman, pilih alamat</translation>
@@ -762,6 +769,7 @@
 <translation id="6446608382365791566">Tambahkan informasi lainnya</translation>
 <translation id="6447842834002726250">Cookie</translation>
 <translation id="6451458296329894277">Konfirmasikan Pengiriman Ulang Formulir</translation>
+<translation id="6465306955648956876">Kelola sandi...</translation>
 <translation id="647261751007945333">Kebijakan perangkat</translation>
 <translation id="6477321094435799029">Chrome mendeteksi kode yang tidak biasa pada halaman ini dan memblokirnya untuk melindungi informasi pribadi Anda (misalnya, sandi, nomor telepon, dan kartu kredit).</translation>
 <translation id="6489534406876378309">Mulai mengupload kerusakan</translation>
@@ -781,6 +789,7 @@
 <translation id="6628463337424475685"><ph name="ENGINE" /> Penelusuran</translation>
 <translation id="6630809736994426279">Saat ini, penyerang di <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mungkin berusaha menginstal program berbahaya di Mac Anda yang dapat mencuri atau menghapus informasi Anda (misalnya, foto, sandi, pesan, dan kartu kredit). <ph name="BEGIN_LEARN_MORE_LINK" />Pelajari lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="6644283850729428850">Kebijakan ini telah usang.</translation>
+<translation id="6646269444027925224">{COUNT,plural, =0{Tidak ada}=1{Dari 1 situs (Anda tidak akan logout dari Akun Google)}other{Dari # situs (Anda tidak akan logout dari Akun Google)}}</translation>
 <translation id="6657585470893396449">Sandi</translation>
 <translation id="6671697161687535275">Hapus saran formulir dari Chromium?</translation>
 <translation id="6685834062052613830">Keluar dan selesaikan penyiapan</translation>
@@ -807,6 +816,7 @@
 <translation id="6915804003454593391">Pengguna:</translation>
 <translation id="6945221475159498467">Pilih</translation>
 <translation id="6948701128805548767">Untuk melihat persyaratan dan metode pengambilan, pilih alamat</translation>
+<translation id="6949872517221025916">Setel Ulang Sandi</translation>
 <translation id="6957887021205513506">Sertifikat server tampaknya palsu.</translation>
 <translation id="6965382102122355670">Oke</translation>
 <translation id="6965978654500191972">Perangkat</translation>
@@ -829,6 +839,7 @@
 <translation id="7139724024395191329">Emirat</translation>
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> lainnya}other{<ph name="PAYMENT_METHOD_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> lainnya}}</translation>
 <translation id="7155487117670177674">Pembayaran tidak aman</translation>
+<translation id="717330890047184534">ID GAIA:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> lainnya}other{<ph name="SHIPPING_OPTION_PREVIEW" /> dan <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> lainnya}}</translation>
 <translation id="7180611975245234373">Segarkan</translation>
 <translation id="7182878459783632708">Tidak ada kebijakan yang disetel</translation>
@@ -1030,6 +1041,7 @@
 <translation id="8553075262323480129">Terjemahan gagal karena bahasa halaman tidak dapat ditentukan.</translation>
 <translation id="8557066899867184262">CVC terletak di bagian belakang kartu Anda.</translation>
 <translation id="8559762987265718583">Sambungan pribadi ke <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> tidak dapat dibuat karena tanggal dan waktu (<ph name="DATE_AND_TIME" />) perangkat tidak benar.</translation>
+<translation id="8564985650692024650">Chromium menyarankan untuk menyetel ulang sandi <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> jika Anda juga menggunakannya di situs lain.</translation>
 <translation id="8571890674111243710">Menerjemahkan halaman ke <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">+ nomor telepon</translation>
 <translation id="859285277496340001">Sertifikat tidak menetapkan mekanisme untuk memeriksa apakah sertifikat telah ditarik.</translation>
@@ -1056,6 +1068,7 @@
 <translation id="884264119367021077">Alamat pengiriman</translation>
 <translation id="884923133447025588">Tidak ditemukan mekanisme pembatalan.</translation>
 <translation id="885730110891505394">Berbagi dengan Google</translation>
+<translation id="8858065207712248076">Chrome menyarankan untuk menyetel ulang sandi <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> jika Anda juga menggunakannya di situs lain.</translation>
 <translation id="8866481888320382733">Kesalahan saat menguraikan setelan kebijakan</translation>
 <translation id="8870413625673593573">Barusan Ditutup</translation>
 <translation id="8874824191258364635">Masukkan nomor kartu yang valid</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index 724254a..1cc186da 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -854,11 +854,11 @@
 <translation id="7407424307057130981">&lt;p&gt;ನಿಮ್ಮ ವಿಂಡೋಸ್ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಸೂಪರ್‌ಫಿಶ್ ಸಾಫ್ಟ್‌ವೇರ್ ಇದ್ದರೆ, ನಿಮಗೆ ಈ ದೋಷ ಕಾಣಿಸುತ್ತದೆ.&lt;/p&gt;
       &lt;p&gt;ಈ ಹಂತಗಳನ್ನು ಅನುಸರಿಸಿ ತಾತ್ಕಾಲಿಕವಾಗಿ ಸಾಫ್ಟ್‌ವೇರ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ ನೀವು ವೆಬ್‌‍ಗೆ ಪ್ರವೇಶಿಸಬಹುದಾಗಿದೆ. ನಿಮಗೆ ನಿರ್ವಾಹಕರ ಸವಲತ್ತುಗಳ ಅಗತ್ಯವಿದೆ.&lt;/p&gt;
       &lt;ol&gt;
-      &lt;li&gt;ಕ್ಲಿಕ್ ಮಾಡಿ &lt;strong&gt;ಪ್ರಾರಂಭಿಸಿ&lt;/strong&gt;, ನಂತರ &lt;strong&gt;"ಸ್ಥಳೀಯ ಸೇವೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ"&lt;/strong&gt; ಅನ್ನು ಹುಡುಕಿ ಮತ್ತು ಆಯ್ಕೆಮಾಡಿ
+      &lt;li&gt;&lt;strong&gt;ಪ್ರಾರಂಭಿಸಿ&lt;/strong&gt; ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ, ನಂತರ &lt;strong&gt;"ಸ್ಥಳೀಯ ಸೇವೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ"&lt;/strong&gt; ಅನ್ನು ಹುಡುಕಿ ಮತ್ತು ಆಯ್ಕೆಮಾಡಿ
       &lt;li&gt;&lt;strong&gt;VisualDiscovery&lt;/strong&gt; ಆಯ್ಕೆಮಾಡಿ
       &lt;li&gt;&lt;strong&gt;ಪ್ರಾರಂಭಿಸುವಿಕೆ ವಿಧದ&lt;/strong&gt; ಅಡಿಯಲ್ಲಿ, &lt;strong&gt;ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ&lt;/strong&gt; ಆಯ್ಕೆಮಾಡಿ
       &lt;li&gt;&lt;strong&gt;ಸೇವೆಯ ಸ್ಥಿತಿಯ&lt;/strong&gt; ಅಡಿಯಲ್ಲಿ, &lt;strong&gt;ನಿಲ್ಲಿಸಿ&lt;/strong&gt; ಕ್ಲಿಕ್ ಮಾಡಿ
-      &lt;li&gt; &lt;strong&gt;ಅನ್ವಯಿಸಿ&lt;/strong&gt; ಕ್ಲಿಕ್ ಮಾಡಿ, ನಂತರ&lt;strong&gt;ಸರಿ&lt;/strong&gt; ಕ್ಲಿಕ್ ಮಾಡಿ
+      &lt;li&gt; &lt;strong&gt;ಅನ್ವಯಿಸಿ&lt;/strong&gt; ಕ್ಲಿಕ್ ಮಾಡಿ, ನಂತರ &lt;strong&gt;ಸರಿ&lt;/strong&gt; ಕ್ಲಿಕ್ ಮಾಡಿ
       &lt;li&gt;ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಿಂದ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ಶಾಶ್ವತವಾಗಿ ತೆಗೆದುಹಾಕುವುದು ಹೇಗೆ ಎಂದು ತಿಳಿದುಕೊಳ್ಳಲು &lt;a href="https://support.google.com/chrome/answer/6098869"&gt;Chrome ಸಹಾಯ ಕೇಂದ್ರಕ್ಕೆ&lt;/a&gt; ಭೇಟಿ ನೀಡಿ &lt;/ol&gt;</translation>
 <translation id="7419106976560586862">ಪ್ರೊಫೈಲ್ ಹಾದಿ</translation>
 <translation id="7437289804838430631">ಸಂಪರ್ಕ ಮಾಹಿತಿಯನ್ನು ಸೇರಿಸು</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index a7cdbc26..bfab7ac 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -49,6 +49,7 @@
     &lt;li&gt;인터넷 연결에 문제가 없는지 확인합니다.&lt;/li&gt;
     &lt;li&gt;웹사이트 소유자에게 문의합니다.&lt;/li&gt;
     &lt;/ol&gt;</translation>
+<translation id="1257286744552378071">조직에서 관리하지 않는 사이트에 내 비밀번호를 입력했습니다. 계정을 안전하게 보호하려면 다른 앱과 사이트에서 동일한 비밀번호를 재사용하지 마세요.</translation>
 <translation id="1263231323834454256">읽기 목록</translation>
 <translation id="1264126396475825575"><ph name="CRASH_TIME" />에 캡처된 비정상 종료 보고서(아직 업로드 또는 무시되지 않음)</translation>
 <translation id="1270502636509132238">픽업 방법</translation>
@@ -188,6 +189,7 @@
 <translation id="2212735316055980242">정책을 찾을 수 없음</translation>
 <translation id="2213606439339815911">항목을 가져오는 중...</translation>
 <translation id="2218879909401188352">현재 <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />에 있는 공격자는 기기를 손상시키거나, 모바일 요금에 몰래 추가 요금을 부과하거나, 개인정보를 도용하는 위험한 앱을 설치할 수도 있습니다. <ph name="BEGIN_LEARN_MORE_LINK" />자세히 알아보기<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="2224337661447660594">인터넷 연결 없음</translation>
 <translation id="2230458221926704099"><ph name="BEGIN_LINK" />진단 앱<ph name="END_LINK" />을 사용하여 연결 문제를 해결하세요.</translation>
 <translation id="2239100178324503013">지금 보내기</translation>
 <translation id="225207911366869382">이 값은 이 정책에 사용되지 않습니다.</translation>
@@ -361,6 +363,7 @@
 <translation id="3422472998109090673">현재 <ph name="HOST_NAME" />에 연결할 수 없습니다.</translation>
 <translation id="3427092606871434483">허용(기본값)</translation>
 <translation id="3427342743765426898">수정 다시 실행(&amp;R)</translation>
+<translation id="342781501876943858">다른 사이트에서 비밀번호를 재사용했다면 비밀번호를 재설정하는 것이 좋습니다.</translation>
 <translation id="3431636764301398940">기기에 카드 저장</translation>
 <translation id="3447661539832366887">이 기기의 소유자가 공룡 게임을 사용 중지했습니다.</translation>
 <translation id="3447884698081792621">인증서 표시(발급 기관: <ph name="ISSUER" />)</translation>
@@ -500,6 +503,7 @@
 <translation id="4340982228985273705">이 컴퓨터는 기업에서 관리하는 기기가 아닌 것으로 파악되므로, Chrome 웹 스토어에 호스팅된 확장 프로그램만 정책을 통해 자동으로 설치할 수 있습니다. Chrome 웹 스토어의 업데이트 URL은 '<ph name="CWS_UPDATE_URL" />'입니다.</translation>
 <translation id="4346197816712207223">사용 가능한 신용카드</translation>
 <translation id="4356973930735388585">이 사이트의 공격자가 사용자 정보(예: 사진, 비밀번호, 메시지, 신용카드)를 도용하거나 삭제하는 위험한 프로그램을 컴퓨터에 설치하려고 시도할 수 있습니다.</translation>
+<translation id="4358461427845829800">결제 수단 관리...</translation>
 <translation id="4372948949327679948">예상 <ph name="VALUE_TYPE" /> 값입니다.</translation>
 <translation id="4377125064752653719"><ph name="DOMAIN" />에 접속하려 했으나 발행기관에서 서버가 전달한 인증서를 폐기했습니다. 이는 서버가 제시한 보안 자격증명 정보를 신뢰할 수 없음을 의미합니다. 사용자는 현재 공격자와 통신 중일 수도 있습니다.</translation>
 <translation id="4406896451731180161">검색결과</translation>
@@ -587,6 +591,7 @@
 <translation id="5115563688576182185">(64비트)</translation>
 <translation id="5121084798328133320">카드를 확인하면 Google Payments 계정의 카드 세부정보가 이 사이트와 공유됩니다.</translation>
 <translation id="5128122789703661928">세션 이름이 잘못되어 삭제할 수 없습니다.</translation>
+<translation id="5135404736266831032">주소 관리...</translation>
 <translation id="5141240743006678641">동기화 비밀번호를 Google 자격증명으로 암호화</translation>
 <translation id="5145883236150621069">정책 응답에 오류 코드가 포함되어 있음</translation>
 <translation id="5159010409087891077">새 시크릿 창에서 페이지 열기(⇧⌘N)</translation>
@@ -672,9 +677,11 @@
 <translation id="5685654322157854305">배송지 주소 추가</translation>
 <translation id="5689199277474810259">JSON 형식으로 내보내기</translation>
 <translation id="5689516760719285838">위치</translation>
+<translation id="570530837424789914">관리...</translation>
 <translation id="5710435578057952990">이 웹사이트의 주소가 확인되지 않았습니다.</translation>
 <translation id="5719499550583120431">선불카드를 사용할 수 있습니다.</translation>
 <translation id="5720705177508910913">현재 사용자</translation>
+<translation id="5730040223043577876">다른 사이트에서 비밀번호를 재사용했다면 비밀번호를 재설정하는 것이 좋습니다.</translation>
 <translation id="5732392974455271431">부모님이 차단 해제할 수 있습니다.</translation>
 <translation id="5763042198335101085">올바른 이메일 주소를 입력하세요.</translation>
 <translation id="5765072501007116331">배달 방법과 요구사항을 확인하려면 주소를 선택하세요.</translation>
@@ -762,6 +769,7 @@
 <translation id="6446608382365791566">자세한 정보 추가</translation>
 <translation id="6447842834002726250">쿠키</translation>
 <translation id="6451458296329894277">양식 다시 제출 확인</translation>
+<translation id="6465306955648956876">비밀번호 관리...</translation>
 <translation id="647261751007945333">기기 정책</translation>
 <translation id="6477321094435799029">Chrome이 이 페이지에서 비정상적인 코드를 감지했으며 개인정보(예: 비밀번호, 전화번호, 신용카드) 보호를 위해 차단했습니다.</translation>
 <translation id="6489534406876378309">비정상 종료 업로드 시작하기</translation>
@@ -781,6 +789,7 @@
 <translation id="6628463337424475685"><ph name="ENGINE" /> 검색</translation>
 <translation id="6630809736994426279"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />의 공격자가 사용자 정보(예: 사진, 비밀번호, 메시지, 신용카드)를 도용하거나 삭제하는 위험한 프로그램을 Mac에 설치하려고 시도할 수 있습니다. <ph name="BEGIN_LEARN_MORE_LINK" />자세히 알아보기<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="6644283850729428850">이 정책은 사용되지 않습니다.</translation>
+<translation id="6646269444027925224">{COUNT,plural, =0{없음}=1{사이트 1개(Google 계정에서 로그아웃되지 않음)}other{사이트 #개(Google 계정에서 로그아웃되지 않음)}}</translation>
 <translation id="6657585470893396449">비밀번호</translation>
 <translation id="6671697161687535275">Chromium에서 자동완성 항목 추천을 삭제하시겠습니까?</translation>
 <translation id="6685834062052613830">로그아웃 후 설정 완료</translation>
@@ -807,6 +816,7 @@
 <translation id="6915804003454593391">사용자:</translation>
 <translation id="6945221475159498467">선택</translation>
 <translation id="6948701128805548767">수령 방법과 요구사항을 확인하려면 주소를 선택하세요.</translation>
+<translation id="6949872517221025916">비밀번호 재설정</translation>
 <translation id="6957887021205513506">서버의 인증서가 위조된 것 같습니다.</translation>
 <translation id="6965382102122355670">확인</translation>
 <translation id="6965978654500191972">기기</translation>
@@ -829,6 +839,7 @@
 <translation id="7139724024395191329">에미리트</translation>
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> 외 <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />개}other{<ph name="PAYMENT_METHOD_PREVIEW" /> 외 <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />개}}</translation>
 <translation id="7155487117670177674">결제가 안전하지 않음</translation>
+<translation id="717330890047184534">GAIA ID:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> 외 <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />개}other{<ph name="SHIPPING_OPTION_PREVIEW" /> 외 <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />개}}</translation>
 <translation id="7180611975245234373">새로고침</translation>
 <translation id="7182878459783632708">설정된 정책 없음</translation>
@@ -1029,6 +1040,7 @@
 <translation id="8553075262323480129">페이지의 언어를 결정할 수 없으므로 번역하지 못했습니다.</translation>
 <translation id="8557066899867184262">CVC는 카드 뒷면에 있습니다.</translation>
 <translation id="8559762987265718583">기기의 날짜와 시간(<ph name="DATE_AND_TIME" />)이 잘못되어 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />에 대한 비공개 연결을 설정할 수 없습니다.</translation>
+<translation id="8564985650692024650">다른 사이트에서 비밀번호를 재사용했다면 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 비밀번호를 재설정하는 것이 좋습니다.</translation>
 <translation id="8571890674111243710">페이지를 <ph name="LANGUAGE" />(으)로 번역 중...</translation>
 <translation id="858637041960032120">번호 추가</translation>
 <translation id="859285277496340001">인증서는 취소 여부를 확인하는 매커니즘을 지정하지 않습니다.</translation>
@@ -1055,6 +1067,7 @@
 <translation id="884264119367021077">배송지 주소</translation>
 <translation id="884923133447025588">폐기 매커니즘을 찾을 수 없습니다.</translation>
 <translation id="885730110891505394">Google과 공유</translation>
+<translation id="8858065207712248076">다른 사이트에서 비밀번호를 재사용했다면 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 비밀번호를 재설정하는 것이 좋습니다.</translation>
 <translation id="8866481888320382733">정책 설정을 파싱하는 중 오류 발생</translation>
 <translation id="8870413625673593573">최근에 닫은 탭</translation>
 <translation id="8874824191258364635">올바른 카드 번호를 입력하세요.</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index 23716f6..6e6af97 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -856,6 +856,14 @@
 <translation id="7378810950367401542">/</translation>
 <translation id="7390545607259442187">കാർഡ് സ്ഥിരീകരിക്കുക</translation>
 <translation id="7400418766976504921">URL</translation>
+<translation id="7407424307057130981">&lt;p&gt;നിങ്ങളുടെ Windows കമ്പ്യൂട്ടറിൽ Superfish സോഫ്റ്റ്‌വെയർ ഉണ്ടെങ്കിൽ, നിങ്ങൾ ഈ പിശക് കാണും.&lt;/p&gt;
+      &lt;p&gt;നിങ്ങൾക്ക് വെബിലേക്ക് കണക്‌റ്റ് ചെയ്യാൻ, സോഫ്‌റ്റ്‌വെയർ താൽക്കാലികമായി പ്രവർത്തനരഹിതമാക്കാൻ ഈ ഘട്ടങ്ങൾ പിന്തുടരുക. നിങ്ങൾക്ക് അഡ്‌മിനിസ്ട്രേറ്ററുടെ സവിശേഷാധികാരങ്ങൾ ആവശ്യമായിവരും.&lt;/p&gt;
+      &lt;ol&gt;
+      &lt;li&gt; &lt;strong&gt;ആരംഭിക്കാൻ&lt;/strong&gt; ക്ലിക്ക് ചെയ്യുക, തുടർന്ന് &lt;strong&gt;"പ്രാദേശിക സേവനങ്ങൾ"&lt;/strong&gt; കാണുക എന്നത് തിരയുകയും തെരഞ്ഞെടുക്കുകയും ചെയ്യുക"
+      
+&lt;strong&gt;സ്റ്റാർട്ടപ്പ് തരം/strong&gt; എന്നതിന് താഴെ, &lt;strong&gt;പ്രവർത്തനരഹിതമാക്കി&lt;/strong&gt; തിരഞ്ഞെടുക്കുക &lt;li&gt;&lt;strong&gt;സേവന നില&lt;/strong&gt; എന്നതിന് താഴെ, &lt;strong&gt;നിർത്തുക&lt;/strong&gt; ക്ലിക്ക് ചെയ്യുക &lt;li&gt;&lt;strong&gt;പ്രയോഗിക്കുക&lt;/strong&gt; ക്ലിക്ക് ചെയ്യുക, തുടർന്ന് &lt;strong&gt;ശരി&lt;/strong&gt; ക്ലിക്ക് ചെയ്യുക &lt;li&gt;
+      
+നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ നിന്ന് എങ്ങനെയാണ് സോഫ്റ്റ്‌വെയർ ശാശ്വതമായി നീക്കംചെയ്യുന്നത് എന്നറിയാൻ &lt;a href="https://support.google.com/chrome/answer/6098869"&gt;Chrome സഹായ കേന്ദ്രം&lt;/a&gt; സന്ദർശിക്കുക &lt;/ol&gt;</translation>
 <translation id="7419106976560586862">പ്രൊഫൈൽ പാത</translation>
 <translation id="7437289804838430631">ബന്ധപ്പെടാനുള്ള വിവരങ്ങൾ ചേർക്കുക</translation>
 <translation id="7441627299479586546">തെറ്റായ നയ വിഷയം</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index 2f990f0..bf28904d 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -49,6 +49,7 @@
     &lt;li&gt;Upewnij się, że połączenie internetowe działa prawidłowo.&lt;/li&gt;
     &lt;li&gt;Skontaktuj się z właścicielem strony.&lt;/li&gt;
     &lt;/ol&gt;</translation>
+<translation id="1257286744552378071">Wpisałeś swoje hasło na stronie, którą nie zarządza Twoja organizacja. Aby chronić konto, nie używaj swojego hasła w innych aplikacjach ani na innych stronach.</translation>
 <translation id="1263231323834454256">Do przeczytania</translation>
 <translation id="1264126396475825575">Utworzono raport o awarii w dniu: <ph name="CRASH_TIME" /> (nie został jeszcze przesłany ani zignorowany)</translation>
 <translation id="1270502636509132238">Metoda odbioru</translation>
@@ -188,6 +189,7 @@
 <translation id="2212735316055980242">Nie znaleziono zasady</translation>
 <translation id="2213606439339815911">Pobieram wpisy...</translation>
 <translation id="2218879909401188352">Osoby obecnie atakujące stronę <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogą instalować niebezpieczne aplikacje, które mogą uszkodzić Twoje urządzenie, dodać ukryte opłaty do rachunku za usługi telefoniczne lub wykraść Twoje dane osobowe. <ph name="BEGIN_LEARN_MORE_LINK" />Więcej informacji<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="2224337661447660594">Brak internetu</translation>
 <translation id="2230458221926704099">Napraw połączenie, używając <ph name="BEGIN_LINK" />aplikacji diagnostycznej<ph name="END_LINK" /></translation>
 <translation id="2239100178324503013">Wyślij teraz</translation>
 <translation id="225207911366869382">Ta wartość tej zasady została wycofana.</translation>
@@ -361,6 +363,7 @@
 <translation id="3422472998109090673">Strona <ph name="HOST_NAME" /> jest obecnie nieosiągalna.</translation>
 <translation id="3427092606871434483">Zezwalaj (domyślnie)</translation>
 <translation id="3427342743765426898">&amp;Ponów edycję</translation>
+<translation id="342781501876943858">Chromium zaleca zresetowanie hasła, jeśli zostało użyte na innej stronie.</translation>
 <translation id="3431636764301398940">Zapisz tę kartę na tym urządzeniu</translation>
 <translation id="3447661539832366887">Właściciel tego urządzenia wyłączył grę z dinozaurem.</translation>
 <translation id="3447884698081792621">Pokaż certyfikat (wydany przez: <ph name="ISSUER" />)</translation>
@@ -500,6 +503,7 @@
 <translation id="4340982228985273705">Ten komputer nie został wykryty jako zarządzany przez firmę, przez co zasada może instalować automatycznie tylko rozszerzenia hostowane w Chrome Web Store. URL sklepu Chrome Web Store służący do aktualizacji to „<ph name="CWS_UPDATE_URL" />”.</translation>
 <translation id="4346197816712207223">Akceptowane karty kredytowe</translation>
 <translation id="4356973930735388585">Osoby atakujące tę stronę mogą próbować zainstalować na Twoim komputerze niebezpieczne programy przeznaczone do kradzieży lub usuwania Twoich danych (na przykład zdjęć, haseł, wiadomości czy numerów kart kredytowych).</translation>
+<translation id="4358461427845829800">Zarządzaj formami płatności…</translation>
 <translation id="4372948949327679948">Oczekiwano wartości typu <ph name="VALUE_TYPE" />.</translation>
 <translation id="4377125064752653719">Próbujesz wejść na <ph name="DOMAIN" />, ale serwer przedstawił certyfikat unieważniony przez wystawcę. Oznacza to, że dane uwierzytelniające podane przez serwer są zupełnie niewiarygodne. Możliwe, że komunikujesz się z intruzem.</translation>
 <translation id="4406896451731180161">wyniki wyszukiwania</translation>
@@ -587,6 +591,7 @@
 <translation id="5115563688576182185">(64-bitowa)</translation>
 <translation id="5121084798328133320">Po potwierdzeniu szczegółowe dane karty z Twojego konta Google Payments zostaną udostępnione tej stronie.</translation>
 <translation id="5128122789703661928">Nie możesz usunąć tej sesji, bo jej nazwa jest nieprawidłowa.</translation>
+<translation id="5135404736266831032">Zarządzaj adresami…</translation>
 <translation id="5141240743006678641">Szyfruj synchronizowane hasła za pomocą danych logowania Google</translation>
 <translation id="5145883236150621069">W odebranej polityce znajduje się kod błędu</translation>
 <translation id="5159010409087891077">Otwórz stronę w nowym oknie incognito (⇧⌘N)</translation>
@@ -672,9 +677,11 @@
 <translation id="5685654322157854305">Dodaj adres wysyłki</translation>
 <translation id="5689199277474810259">Eksportuj w formacie JSON</translation>
 <translation id="5689516760719285838">Lokalizacja</translation>
+<translation id="570530837424789914">Zarządzaj…</translation>
 <translation id="5710435578057952990">Tożsamość witryny nie została zweryfikowana.</translation>
 <translation id="5719499550583120431">Karty przedpłacone są akceptowane.</translation>
 <translation id="5720705177508910913">Bieżący użytkownik</translation>
+<translation id="5730040223043577876">Chrome zaleca zresetowanie hasła, jeśli zostało użyte na innej stronie.</translation>
 <translation id="5732392974455271431">Mogą ją dla Ciebie odblokować Twoi rodzice</translation>
 <translation id="5763042198335101085">Wpisz prawidłowy adres e-mail</translation>
 <translation id="5765072501007116331">Aby zobaczyć metody dostawy oraz wymagania, wybierz adres</translation>
@@ -762,6 +769,7 @@
 <translation id="6446608382365791566">Dodaj więcej informacji</translation>
 <translation id="6447842834002726250">Pliki cookie</translation>
 <translation id="6451458296329894277">Potwierdź ponowne przesłanie formularza</translation>
+<translation id="6465306955648956876">Zarządzaj hasłami…</translation>
 <translation id="647261751007945333">Zasady dotyczące urządzeń</translation>
 <translation id="6477321094435799029">Chrome wykrył nietypowy kod na tej stronie i zablokował ją, by chronić Twoje dane osobowe (np. hasła, numery telefonu czy dane kart kredytowych).</translation>
 <translation id="6489534406876378309">Rozpocznij przesyłanie informacji o awariach</translation>
@@ -781,6 +789,7 @@
 <translation id="6628463337424475685">Wyszukiwarka <ph name="ENGINE" /></translation>
 <translation id="6630809736994426279">Osoby obecnie atakujące stronę <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogą próbować zainstalować na Twoim komputerze Mac niebezpieczne programy wykradające lub usuwające informacje (na przykład zdjęcia, hasła, wiadomości lub dane kart kredytowych). <ph name="BEGIN_LEARN_MORE_LINK" />Więcej informacji<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="6644283850729428850">Zasada jest przestarzała.</translation>
+<translation id="6646269444027925224">{COUNT,plural, =0{Brak}=1{Z 1 witryny (nie spowoduje to wylogowania z konta Google)}few{Z # witryn (nie spowoduje to wylogowania z konta Google)}many{Z # witryn (nie spowoduje to wylogowania z konta Google)}other{Z # witryny (nie spowoduje to wylogowania z konta Google)}}</translation>
 <translation id="6657585470893396449">Hasło</translation>
 <translation id="6671697161687535275">Usunąć tę podpowiedź do formularza z Chromium?</translation>
 <translation id="6685834062052613830">Wyloguj się i dokończ konfigurację</translation>
@@ -807,6 +816,7 @@
 <translation id="6915804003454593391">Użytkownik:</translation>
 <translation id="6945221475159498467">Wybierz</translation>
 <translation id="6948701128805548767">Aby zobaczyć metody odbioru oraz wymagania, wybierz adres</translation>
+<translation id="6949872517221025916">Resetuj hasło</translation>
 <translation id="6957887021205513506">Certyfikat serwera wydaje się sfałszowany.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6965978654500191972">Urządzenie</translation>
@@ -829,6 +839,7 @@
 <translation id="7139724024395191329">Emirat</translation>
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}many{<ph name="PAYMENT_METHOD_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7155487117670177674">Płatność nie jest bezpieczna</translation>
+<translation id="717330890047184534">Identyfikator GAIA:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}many{<ph name="SHIPPING_OPTION_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> i jeszcze <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="7180611975245234373">Odśwież</translation>
 <translation id="7182878459783632708">Brak ustawionych zasad</translation>
@@ -1030,6 +1041,7 @@
 <translation id="8553075262323480129">Tłumaczenie nie powiodło się, ponieważ nie można określić języka strony.</translation>
 <translation id="8557066899867184262">Kod CVC znajduje się na odwrocie karty.</translation>
 <translation id="8559762987265718583">Nie można nawiązać prywatnego połączenia z <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, ponieważ data i godzina (<ph name="DATE_AND_TIME" />) ustawione na urządzeniu są nieprawidłowe.</translation>
+<translation id="8564985650692024650">Chromium zaleca zresetowanie hasła, którego używasz w: <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, jeśli zostało użyte na innej stronie.</translation>
 <translation id="8571890674111243710">Trwa tłumaczenie strony na język: <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Dodaj numer telefonu</translation>
 <translation id="859285277496340001">Certyfikat nie określa mechanizmu do sprawdzania, czy został on unieważniony.</translation>
@@ -1056,6 +1068,7 @@
 <translation id="884264119367021077">Adres wysyłki</translation>
 <translation id="884923133447025588">Nie znaleziono mechanizmu unieważniania.</translation>
 <translation id="885730110891505394">Udostępnianie Google</translation>
+<translation id="8858065207712248076">Chrome zaleca zresetowanie hasła, którego używasz w: <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, jeśli zostało użyte na innej stronie.</translation>
 <translation id="8866481888320382733">Podczas przetwarzania ustawień zasady wystąpił błąd</translation>
 <translation id="8870413625673593573">Ostatnio zamknięte</translation>
 <translation id="8874824191258364635">Wpisz prawidłowy numer karty</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index e30f317..e31d532e 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -49,6 +49,7 @@
     &lt;li&gt;Verifique se sua conexão com a Internet está funcionando normalmente.&lt;/li&gt;
     &lt;li&gt;Entre em contato com o proprietário do site.&lt;/li&gt;
     &lt;/ol&gt;</translation>
+<translation id="1257286744552378071">Você informou sua senha em um site que não é gerenciado pela sua organização. Para proteger sua conta, não reutilize sua senha em outros apps e sites.</translation>
 <translation id="1263231323834454256">Lista de leitura</translation>
 <translation id="1264126396475825575">Relatório de erros registrado em <ph name="CRASH_TIME" /> (ainda não enviado ou ignorado)</translation>
 <translation id="1270502636509132238">Método de Retirada</translation>
@@ -188,6 +189,7 @@
 <translation id="2212735316055980242">Política não encontrada</translation>
 <translation id="2213606439339815911">Buscando entradas...</translation>
 <translation id="2218879909401188352">Os invasores que estão em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> no momento podem instalar apps perigosos que danificam seu dispositivo, acrescentam cobranças ocultas junto à operadora ou roubam suas informações pessoais. <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="2224337661447660594">Sem Internet</translation>
 <translation id="2230458221926704099">Corrija sua conexão usando o <ph name="BEGIN_LINK" />app de diagnóstico<ph name="END_LINK" /></translation>
 <translation id="2239100178324503013">Enviar agora</translation>
 <translation id="225207911366869382">Este valor está obsoleto para esta política.</translation>
@@ -361,6 +363,7 @@
 <translation id="3422472998109090673">No momento, não é possível acessar <ph name="HOST_NAME" />.</translation>
 <translation id="3427092606871434483">Permitir (padrão)</translation>
 <translation id="3427342743765426898">&amp;Refazer editar</translation>
+<translation id="342781501876943858">O Chromium recomenda redefinir sua senha se você a reutilizou em outros sites.</translation>
 <translation id="3431636764301398940">Salvar este cartão neste dispositivo</translation>
 <translation id="3447661539832366887">O proprietário deste dispositivo desativou o jogo do dinossauro.</translation>
 <translation id="3447884698081792621">Mostrar certificado (emitido por <ph name="ISSUER" />)</translation>
@@ -500,6 +503,7 @@
 <translation id="4340982228985273705">Este computador não foi detectado como gerenciado por empresa, portanto, a política só pode instalar automaticamente as extensões hospedadas na Chrome Web Store. O URL de atualização da Chrome Web Store é o seguinte: <ph name="CWS_UPDATE_URL" />.</translation>
 <translation id="4346197816712207223">Cartões de crédito aceitos</translation>
 <translation id="4356973930735388585">Invasores nesse site podem tentar instalar programas perigosos no seu computador para roubar ou excluir informações (por exemplo, fotos, senhas, mensagens e cartões de crédito).</translation>
+<translation id="4358461427845829800">Gerenciar formas de pagamento…</translation>
 <translation id="4372948949327679948">Valor <ph name="VALUE_TYPE" /> esperado.</translation>
 <translation id="4377125064752653719">Você tentou acessar <ph name="DOMAIN" />, mas o certificado que o servidor apresentou foi revogado pelo seu emissor. Isso significa que as credenciais de segurança que o servidor apresentou não são nem um pouco seguras. Talvez você esteja se comunicando com um invasor.</translation>
 <translation id="4406896451731180161">resultados da pesquisa</translation>
@@ -587,6 +591,7 @@
 <translation id="5115563688576182185">64 bits</translation>
 <translation id="5121084798328133320">Depois da confirmação, os detalhes do cartão da sua conta do Google Payments serão compartilhados com esse site.</translation>
 <translation id="5128122789703661928">A sessão com este nome não é válida para exclusão.</translation>
+<translation id="5135404736266831032">Gerenciar endereços…</translation>
 <translation id="5141240743006678641">Criptografar senhas sincronizadas com suas credenciais do Google</translation>
 <translation id="5145883236150621069">Código de erro presente na resposta da política</translation>
 <translation id="5159010409087891077">Abrir página em uma nova janela anônima (⇧⌘N)</translation>
@@ -672,9 +677,11 @@
 <translation id="5685654322157854305">Adicionar endereço para envio</translation>
 <translation id="5689199277474810259">Exportar para JSON</translation>
 <translation id="5689516760719285838">Local</translation>
+<translation id="570530837424789914">Gerenciar…</translation>
 <translation id="5710435578057952990">A identidade deste site não foi confirmada.</translation>
 <translation id="5719499550583120431">Cartões pré-pagos são aceitos.</translation>
 <translation id="5720705177508910913">Usuário atual</translation>
+<translation id="5730040223043577876">O Chrome recomenda redefinir sua senha se você a reutilizou em outros sites.</translation>
 <translation id="5732392974455271431">Seus responsáveis podem desbloqueá-lo para você</translation>
 <translation id="5763042198335101085">Informe um endereço de e-mail válido.</translation>
 <translation id="5765072501007116331">Para ver métodos e requisitos de entrega, selecione um endereço</translation>
@@ -762,6 +769,7 @@
 <translation id="6446608382365791566">Adicionar mais informações</translation>
 <translation id="6447842834002726250">Cookies</translation>
 <translation id="6451458296329894277">Confirmar reenvio do formulário</translation>
+<translation id="6465306955648956876">Gerenciar senhas…</translation>
 <translation id="647261751007945333">Políticas de dispositivos</translation>
 <translation id="6477321094435799029">O Chrome detectou um código incomum nesta página e a bloqueou para proteger suas informações pessoais (por exemplo, senhas, números de telefone e cartões de crédito).</translation>
 <translation id="6489534406876378309">Iniciar upload de falhas</translation>
@@ -781,6 +789,7 @@
 <translation id="6628463337424475685">Pesquisa do <ph name="ENGINE" /></translation>
 <translation id="6630809736994426279">Invasores presentes no momento em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> podem tentar instalar programas perigosos no seu Mac e roubar ou excluir suas informações (por exemplo, fotos, senhas, mensagens e cartões de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="6644283850729428850">Esta política foi encerrada.</translation>
+<translation id="6646269444027925224">{COUNT,plural, =0{Nenhum}=1{Em 1 site (você não será desconectado da sua Conta do Google)}one{Em # site (você não será desconectado da sua Conta do Google)}other{Em # sites (você não será desconectado da sua Conta do Google)}}</translation>
 <translation id="6657585470893396449">Senha</translation>
 <translation id="6671697161687535275">Remover sugestão de formulário do Chromium?</translation>
 <translation id="6685834062052613830">Saia e conclua a configuração</translation>
@@ -807,6 +816,7 @@
 <translation id="6915804003454593391">Usuário:</translation>
 <translation id="6945221475159498467">Selecionar</translation>
 <translation id="6948701128805548767">Para ver métodos e requisitos de retirada, selecione um endereço</translation>
+<translation id="6949872517221025916">Redefinir senha</translation>
 <translation id="6957887021205513506">O certificado do servidor parece ser falsificado.</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6965978654500191972">Dispositivo</translation>
@@ -829,6 +839,7 @@
 <translation id="7139724024395191329">Emirado</translation>
 <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7155487117670177674">Pagamento não seguro</translation>
+<translation id="717330890047184534">Código Gaia:</translation>
 <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="7180611975245234373">Atualizar</translation>
 <translation id="7182878459783632708">Não há políticas definidas</translation>
@@ -1030,6 +1041,7 @@
 <translation id="8553075262323480129">A tradução falhou porque não foi possível determinar o idioma da página.</translation>
 <translation id="8557066899867184262">O CVC está localizado atrás do seu cartão.</translation>
 <translation id="8559762987265718583">Não é possível estabelecer uma conexão privada com <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, porque a data e a hora do seu dispositivo (<ph name="DATE_AND_TIME" />) estão incorretas.</translation>
+<translation id="8564985650692024650">O Chromium recomenda redefinir sua senha de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> se você a reutilizou em outros sites.</translation>
 <translation id="8571890674111243710">Traduzindo página para <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Ad. nº. telefone
 </translation>
@@ -1057,6 +1069,7 @@
 <translation id="884264119367021077">Endereço de entrega</translation>
 <translation id="884923133447025588">Nenhum mecanismo de revogação encontrado.</translation>
 <translation id="885730110891505394">Compartilhar com o Google</translation>
+<translation id="8858065207712248076">O Chrome recomenda redefinir sua senha de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> se você a reutilizou em outros sites.</translation>
 <translation id="8866481888320382733">Configurações da política de análise de erros</translation>
 <translation id="8870413625673593573">Recentemente fechadas</translation>
 <translation id="8874824191258364635">Informe um número de cartão válido</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index 4cb4e63..c6a935a 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -735,6 +735,7 @@
 <translation id="6263376278284652872">Обележивачи домена <ph name="DOMAIN" /></translation>
 <translation id="6264485186158353794">Назад на безбедно</translation>
 <translation id="6276112860590028508">Странице са листе за читање ће се појавити овде</translation>
+<translation id="627746635834430766">Да бисте следећи пут платили брже, сачувајте картицу и адресу за обрачун на Google налогу.</translation>
 <translation id="6280223929691119688">Испорука на ову адресу није могућа. Изаберите другу адресу.</translation>
 <translation id="6282194474023008486">Поштански број</translation>
 <translation id="6290238015253830360">Предложени чланци се приказују овде</translation>
@@ -749,6 +750,7 @@
 <translation id="6355080345576803305">Замена јавне сесије</translation>
 <translation id="6358450015545214790">Шта ово значи?</translation>
 <translation id="6386120369904791316">{COUNT,plural, =1{још 1 предлог}one{још # предлог}few{још # предлога}other{још # предлога}}</translation>
+<translation id="6387754724289022810">Да бисте следећи пут платили брже, сачувајте картицу и адресу за обрачун на Google налогу и овом уређају.</translation>
 <translation id="6397451950548600259">Софтвер на вашем рачунару онемогућава Chrome-у да се безбедно повеже на веб.</translation>
 <translation id="6404511346730675251">Измена обележивача</translation>
 <translation id="6410264514553301377">Унесите датум истека и CVC за картицу <ph name="CREDIT_CARD" /></translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index aea4d2d..9511d5aa 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -736,7 +736,7 @@
 <translation id="6263376278284652872">Alamisho za <ph name="DOMAIN" /></translation>
 <translation id="6264485186158353794">Rejea kwenye usalama</translation>
 <translation id="6276112860590028508">Kurasa kutoka orodha yako ya usomaji huonekana hapa</translation>
-<translation id="627746635834430766">Ili ulipe kwa haraka wakati ujao, hifadhi anwani ya kutuma bili na kadi yako kwenye Akaunti yako ya Google.</translation>
+<translation id="627746635834430766">Ili ulipe kwa haraka wakati ujao, hifadhi anwani ya kutuma bili na maelezo ya kadi yako kwenye Akaunti yako ya Google.</translation>
 <translation id="6280223929691119688">Haiwezi kuwasilisha kwenye anwani hii. Chagua anwani tofauti.</translation>
 <translation id="6282194474023008486">Msimbo wa posta</translation>
 <translation id="6290238015253830360">Makala unayopendekezewa yataonekana hapa</translation>
@@ -751,7 +751,7 @@
 <translation id="6355080345576803305">Kipindi cha umma kimebatilishwa</translation>
 <translation id="6358450015545214790">Je, hii inamaanisha nini?</translation>
 <translation id="6386120369904791316">{COUNT,plural, =1{Pendekezo jingine 1}other{Mapendekezo mengine #}}</translation>
-<translation id="6387754724289022810">Ili ulipe kwa haraka wakati ujao, hifadhi anwani ya kutuma bili na kadi yako kwenye Akaunti yako ya Google na kwenye kifaa hiki.</translation>
+<translation id="6387754724289022810">Ili ulipe kwa haraka wakati ujao, hifadhi anwani ya kutuma bili na maelezo ya kadi yako kwenye Akaunti yako ya Google na kwenye kifaa hiki.</translation>
 <translation id="6397451950548600259">Programu kwenye kompyuta yako inayoizuia Chrome kuunganisha salama kwenye wavuti</translation>
 <translation id="6404511346730675251">Badilisha alamisho</translation>
 <translation id="6410264514553301377">Weka tarehe ya mwisho wa matumizi na CVC ya <ph name="CREDIT_CARD" /></translation>
diff --git a/components/subresource_filter/tools/BUILD.gn b/components/subresource_filter/tools/BUILD.gn
index f825e1a..f34edd6 100644
--- a/components/subresource_filter/tools/BUILD.gn
+++ b/components/subresource_filter/tools/BUILD.gn
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/config/chromecast_build.gni")
+
 static_library("tools_lib") {
   sources = [
     "filter_tool.cc",
@@ -38,9 +40,10 @@
     "//url",
   ]
 }
-
-if (is_linux || is_mac || is_win) {
+if (!is_ios && !is_android && !is_chromecast && !is_fuchsia) {
   executable("subresource_filter_tool") {
+    # Production code should not depend on this.
+    testonly = true
     sources = [
       "filter_tool_main.cc",
     ]
@@ -52,6 +55,8 @@
   }
 
   executable("subresource_indexing_tool") {
+    # Production code should not depend on this.
+    testonly = true
     sources = [
       "indexing_tool_main.cc",
     ]
@@ -61,4 +66,14 @@
       "//build/config:exe_and_shlib_deps",
     ]
   }
+
+  group("subresource_filter_tools") {
+    # Production code should not depend on this.
+    testonly = true
+    deps = [
+      ":subresource_filter_tool",
+      ":subresource_indexing_tool",
+      "ruleset_converter",
+    ]
+  }
 }
diff --git a/components/subresource_filter/tools/ruleset_converter/BUILD.gn b/components/subresource_filter/tools/ruleset_converter/BUILD.gn
index 652c88d0..9cbc413 100644
--- a/components/subresource_filter/tools/ruleset_converter/BUILD.gn
+++ b/components/subresource_filter/tools/ruleset_converter/BUILD.gn
@@ -2,7 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-source_set("ruleset_converter_support") {
+import("//build/config/chromecast_build.gni")
+
+source_set("support") {
   sources = [
     "//third_party/protobuf:protobuf_lite",
     "rule_stream.cc",
@@ -25,7 +27,7 @@
     "rule_stream_test.cc",
   ]
   deps = [
-    ":ruleset_converter_support",
+    ":support",
     "../rule_parser",
     "//base",
     "//base/test:test_support",
@@ -35,3 +37,17 @@
     "//testing/gtest",
   ]
 }
+
+if (!is_ios && !is_android && !is_chromecast && !is_fuchsia) {
+  executable("ruleset_converter") {
+    sources = [
+      "main.cc",
+    ]
+    deps = [
+      ":support",
+      "//base",
+      "//build/config:exe_and_shlib_deps",
+      "//third_party/protobuf:protobuf_lite",
+    ]
+  }
+}
diff --git a/components/subresource_filter/tools/ruleset_converter/main.cc b/components/subresource_filter/tools/ruleset_converter/main.cc
new file mode 100644
index 0000000..b2f2df69
--- /dev/null
+++ b/components/subresource_filter/tools/ruleset_converter/main.cc
@@ -0,0 +1,207 @@
+// 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 <cstdio>
+#include <fstream>
+#include <iostream>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/logging.h"
+#include "base/strings/string16.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_piece.h"
+#include "base/strings/string_split.h"
+#include "base/strings/utf_string_conversions.h"
+#include "build/build_config.h"
+#include "components/subresource_filter/tools/ruleset_converter/rule_stream.h"
+#include "components/subresource_filter/tools/ruleset_converter/ruleset_format.h"
+
+namespace {
+
+const char kSwitchInputFiles[] = "input_files";
+const char kSwitchOutputFile[] = "output_file";
+
+const char kSwitchOutputFileUrl[] = "output_file_url";
+const char kSwitchOutputFileCss[] = "output_file_css";
+
+const char kSwitchInputFormat[] = "input_format";
+const char kSwitchOutputFormat[] = "output_format";
+
+const char kSwitchChromeVersion[] = "chrome_version";
+
+const char kHelpMsg[] = R"(
+  ruleset_converter [--input_format=<format>] --output_format=<format>
+  --input_files=<path1>[:<path2>...]
+  (--output_file=<path> | [--output_file_url=<path>] [--output_file_css=<path>)
+  [--chrome_version=<version>]
+
+  ruleset_converter is a utility for converting subresource_filter rulesets
+  across multiple formats:
+
+  * --input_files: Colon-separated list of input files with rules. The files
+     are processed in the order of declaration
+
+  * --output_file: The file to output the rules. Either this option or at least
+    one of the --output_file_url|--output_file_css should be specified.
+
+  * --output_file_url: The file to output URL rules. If equal to
+    --output_file_css, the results are merged.
+
+  *  --output_file_css: The file to output CSS rules. See --output_file and
+     --output_file_url for details.
+
+  * --input_format: The format of the input file(s). One of
+    {filter-list, proto, unindexed-ruleset}
+
+  * --output_format: The format of the output file(s). See --input_format for
+    available formats.
+
+  * --chrome_version: The earliest version of Chrome that the produced ruleset
+    needs to be compatible with. Currently one of 54, 59, or 0
+    (not Chrome-specific). Defaults to the maximum (i.e. 59).
+)";
+
+void PrintHelp() {
+  printf("%s\n\n", kHelpMsg);
+}
+
+}  // namespace
+
+int main(int argc, char* argv[]) {
+  base::CommandLine::Init(argc, argv);
+  base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess();
+
+  if (command_line.GetArgs().size() != 0U) {
+    PrintHelp();
+    return 1;
+  }
+
+  if (!command_line.HasSwitch(kSwitchInputFiles)) {
+    std::fprintf(stderr, "--input_files flag is not specified.\n");
+    PrintHelp();
+    return 1;
+  }
+
+  if (command_line.GetSwitchValueASCII(kSwitchOutputFile).empty() &&
+      command_line.GetSwitchValueASCII(kSwitchOutputFileUrl).empty() &&
+      command_line.GetSwitchValueASCII(kSwitchOutputFileCss).empty()) {
+    std::fprintf(stderr,
+                 "Either --output_file, or at least of one "
+                 "--output_file_url|--output_file_css should be specified.\n");
+    PrintHelp();
+    return 1;
+  }
+
+  const subresource_filter::RulesetFormat input_format =
+      command_line.HasSwitch(kSwitchInputFormat)
+          ? subresource_filter::ParseFlag(
+                command_line.GetSwitchValueASCII(kSwitchInputFormat))
+          : subresource_filter::RulesetFormat::kFilterList;
+  if (input_format == subresource_filter::RulesetFormat::kUndefined) {
+    std::fprintf(stderr, "Input format is not defined.\n");
+    return 1;
+  }
+
+  const subresource_filter::RulesetFormat output_format =
+      subresource_filter::ParseFlag(
+          command_line.GetSwitchValueASCII(kSwitchOutputFormat));
+  if (output_format == subresource_filter::RulesetFormat::kUndefined) {
+    std::fprintf(stderr, "Output format is not defined.\n");
+    return 1;
+  }
+
+  int chrome_version = 59;
+  if (command_line.HasSwitch(kSwitchChromeVersion)) {
+    if (!base::StringToInt(
+            command_line.GetSwitchValueASCII(kSwitchChromeVersion),
+            &chrome_version)) {
+      fprintf(stderr, "Unable to parse chrome version");
+      return 1;
+    }
+  }
+  if (chrome_version != 0 && chrome_version != 54 && chrome_version != 59) {
+    std::fprintf(stderr, "chrome_version should be in {0, 54, 59}.\n");
+    return 1;
+  }
+
+  // Vet the input paths.
+  base::CommandLine::StringType inputs =
+      command_line.GetSwitchValueNative(kSwitchInputFiles);
+  std::vector<base::FilePath> input_paths;
+#if defined(OS_WIN)
+  base::StringPiece16 separator(base::ASCIIToUTF16(":"));
+#else
+  base::StringPiece separator(":");
+#endif
+  for (const auto& piece :
+       base::SplitStringPiece(inputs, separator, base::TRIM_WHITESPACE,
+                              base::SPLIT_WANT_NONEMPTY)) {
+    base::FilePath path(piece);
+    if (!base::PathExists(path)) {
+      std::fprintf(stderr, "Input path does not exist\n");
+      return 1;
+    }
+    input_paths.push_back(path);
+  }
+
+  // Create output stream(s).
+  std::unique_ptr<subresource_filter::RuleOutputStream> primary_output;
+  std::unique_ptr<subresource_filter::RuleOutputStream> secondary_output;
+  subresource_filter::RuleOutputStream* css_rules_output = nullptr;
+
+  base::FilePath primary_filename =
+      command_line.GetSwitchValuePath(kSwitchOutputFile);
+  const bool single_output = !primary_filename.empty();
+  if (!single_output)
+    primary_filename = command_line.GetSwitchValuePath(kSwitchOutputFileUrl);
+
+  if (!primary_filename.empty()) {
+    if (!base::DirectoryExists(primary_filename.DirName())) {
+      std::fprintf(stderr, "Output directory does not exist\n");
+      return 1;
+    }
+    primary_output = subresource_filter::RuleOutputStream::Create(
+        std::make_unique<std::ofstream>(primary_filename.AsUTF8Unsafe(),
+                                        std::ios::binary | std::ios::out),
+        output_format);
+  }
+
+  base::FilePath secondary_filename =
+      command_line.GetSwitchValuePath(kSwitchOutputFileCss);
+  if (single_output || secondary_filename == primary_filename) {
+    css_rules_output = primary_output.get();
+  } else if (!secondary_filename.empty()) {
+    if (!base::DirectoryExists(secondary_filename.DirName())) {
+      std::fprintf(stderr, "Output directory does not exist\n");
+      return 1;
+    }
+    secondary_output = subresource_filter::RuleOutputStream::Create(
+        std::make_unique<std::ofstream>(secondary_filename.AsUTF8Unsafe(),
+                                        std::ios::binary | std::ios::out),
+        output_format);
+    css_rules_output = secondary_output.get();
+  }
+
+  // Iterate through input files and stream them to the outputs.
+  for (const auto& path : input_paths) {
+    auto input_stream = subresource_filter::RuleInputStream::Create(
+        std::make_unique<std::ifstream>(path.AsUTF8Unsafe(),
+                                        std::ios::binary | std::ios::in),
+        input_format);
+    CHECK(input_stream);
+    CHECK(subresource_filter::TransferRules(input_stream.get(),
+                                            primary_output.get(),
+                                            css_rules_output, chrome_version));
+  }
+  if (primary_output)
+    CHECK(primary_output->Finish());
+  if (secondary_output)
+    CHECK(secondary_output->Finish());
+  return 0;
+}
diff --git a/components/subresource_filter/tools/ruleset_converter/rule_stream.cc b/components/subresource_filter/tools/ruleset_converter/rule_stream.cc
index aa1aca3..ae26038 100644
--- a/components/subresource_filter/tools/ruleset_converter/rule_stream.cc
+++ b/components/subresource_filter/tools/ruleset_converter/rule_stream.cc
@@ -298,6 +298,7 @@
     std::unique_ptr<std::istream> input,
     RulesetFormat format) {
   CHECK(input);
+  CHECK(!input->bad());
   std::unique_ptr<RuleInputStream> result;
   switch (format) {
     case RulesetFormat::kFilterList:
@@ -321,6 +322,7 @@
     std::unique_ptr<std::ostream> output,
     RulesetFormat format) {
   CHECK(output);
+  CHECK(!output->bad());
   std::unique_ptr<RuleOutputStream> result;
   switch (format) {
     case RulesetFormat::kFilterList:
diff --git a/components/subresource_filter/tools/ruleset_converter/ruleset_format.cc b/components/subresource_filter/tools/ruleset_converter/ruleset_format.cc
index 743c5d74..0b09335 100644
--- a/components/subresource_filter/tools/ruleset_converter/ruleset_format.cc
+++ b/components/subresource_filter/tools/ruleset_converter/ruleset_format.cc
@@ -8,42 +8,14 @@
 
 namespace subresource_filter {
 
-bool ParseFlag(const std::string& text,
-               RulesetFormat* format,
-               std::string* error) {
-  if (text.empty()) {
-    *format = RulesetFormat::kUndefined;
-    return true;
-  }
-  if (text == "filter-list") {
-    *format = RulesetFormat::kFilterList;
-    return true;
-  }
-  if (text == "proto") {
-    *format = RulesetFormat::kProto;
-    return true;
-  }
-  if (text == "unindexed-ruleset") {
-    *format = RulesetFormat::kUnindexedRuleset;
-    return true;
-  }
-  *error = "unknown RulesetFormat";
-  return false;
-}
-
-std::string UnparseFlag(RulesetFormat format) {
-  switch (format) {
-    case RulesetFormat::kUndefined:
-      return "";
-    case RulesetFormat::kFilterList:
-      return "filter-list";
-    case RulesetFormat::kProto:
-      return "proto";
-    case RulesetFormat::kUnindexedRuleset:
-      return "unindexed-ruleset";
-    default:
-      return base::IntToString(static_cast<int>(format));
-  }
+RulesetFormat ParseFlag(const std::string& text) {
+  if (text == "filter-list")
+    return RulesetFormat::kFilterList;
+  if (text == "proto")
+    return RulesetFormat::kProto;
+  if (text == "unindexed-ruleset")
+    return RulesetFormat::kUnindexedRuleset;
+  return RulesetFormat::kUndefined;
 }
 
 }  // namespace subresource_filter
diff --git a/components/subresource_filter/tools/ruleset_converter/ruleset_format.h b/components/subresource_filter/tools/ruleset_converter/ruleset_format.h
index ca11b91d..97ea708 100644
--- a/components/subresource_filter/tools/ruleset_converter/ruleset_format.h
+++ b/components/subresource_filter/tools/ruleset_converter/ruleset_format.h
@@ -24,11 +24,7 @@
   kUnindexedRuleset,
 };
 
-// Functions used for compatibility with "base/commandlineflags.h".
-bool ParseFlag(const std::string& text,
-               RulesetFormat* format,
-               std::string* error);
-std::string UnparseFlag(RulesetFormat format);
+RulesetFormat ParseFlag(const std::string& text);
 
 }  // namespace subresource_filter
 
diff --git a/components/sync/engine_impl/cycle/sync_cycle.cc b/components/sync/engine_impl/cycle/sync_cycle.cc
index fdf8f923..95d30f4c 100644
--- a/components/sync/engine_impl/cycle/sync_cycle.cc
+++ b/components/sync/engine_impl/cycle/sync_cycle.cc
@@ -8,6 +8,7 @@
 #include <iterator>
 
 #include "base/logging.h"
+#include "components/sync/engine_impl/update_handler.h"
 #include "components/sync/syncable/directory.h"
 
 namespace syncer {
@@ -25,14 +26,23 @@
 
 SyncCycleSnapshot SyncCycle::TakeSnapshotWithOrigin(
     sync_pb::SyncEnums::GetUpdatesOrigin get_updates_origin) const {
-  syncable::Directory* dir = context_->directory();
-
   ProgressMarkerMap download_progress_markers;
   for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) {
     ModelType type(ModelTypeFromInt(i));
-    dir->GetDownloadProgressAsString(type, &download_progress_markers[type]);
+    const UpdateHandler* update_handler =
+        context_->model_type_registry()->GetUpdateHandler(type);
+    if (update_handler == nullptr) {
+      continue;
+    }
+    sync_pb::DataTypeProgressMarker progress_marker;
+    update_handler->GetDownloadProgress(&progress_marker);
+    download_progress_markers[type] = progress_marker.SerializeAsString();
   }
 
+  // TODO(mastiz): Remove dependency to directory, since it most likely hides
+  // an issue with USS types.
+  syncable::Directory* dir = context_->directory();
+
   std::vector<int> num_entries_by_type(MODEL_TYPE_COUNT, 0);
   std::vector<int> num_to_delete_entries_by_type(MODEL_TYPE_COUNT, 0);
   dir->CollectMetaHandleCounts(&num_entries_by_type,
diff --git a/components/sync/engine_impl/model_type_registry.cc b/components/sync/engine_impl/model_type_registry.cc
index 1868357f..75a4be5 100644
--- a/components/sync/engine_impl/model_type_registry.cc
+++ b/components/sync/engine_impl/model_type_registry.cc
@@ -253,6 +253,11 @@
   return types;
 }
 
+const UpdateHandler* ModelTypeRegistry::GetUpdateHandler(ModelType type) const {
+  UpdateHandlerMap::const_iterator it = update_handler_map_.find(type);
+  return it == update_handler_map_.end() ? nullptr : it->second;
+}
+
 UpdateHandlerMap* ModelTypeRegistry::update_handler_map() {
   return &update_handler_map_;
 }
diff --git a/components/sync/engine_impl/model_type_registry.h b/components/sync/engine_impl/model_type_registry.h
index c729e19..56b3501 100644
--- a/components/sync/engine_impl/model_type_registry.h
+++ b/components/sync/engine_impl/model_type_registry.h
@@ -94,6 +94,9 @@
   // Returns the set of non-blocking types with initial sync done.
   ModelTypeSet GetInitialSyncDoneNonBlockingTypes() const;
 
+  // Returns the update handler for |type|.
+  const UpdateHandler* GetUpdateHandler(ModelType type) const;
+
   // Simple getters.
   UpdateHandlerMap* update_handler_map();
   CommitContributorMap* commit_contributor_map();
diff --git a/components/sync/engine_impl/syncer_proto_util_unittest.cc b/components/sync/engine_impl/syncer_proto_util_unittest.cc
index 8db9591..6880f3e1 100644
--- a/components/sync/engine_impl/syncer_proto_util_unittest.cc
+++ b/components/sync/engine_impl/syncer_proto_util_unittest.cc
@@ -26,18 +26,6 @@
 
 namespace syncer {
 
-class MockDelegate : public SyncCycle::Delegate {
- public:
-  MockDelegate() {}
-  ~MockDelegate() override {}
-
-  MOCK_METHOD1(OnReceivedShortPollIntervalUpdate, void(const base::TimeDelta&));
-  MOCK_METHOD1(OnReceivedLongPollIntervalUpdate, void(const base::TimeDelta&));
-  MOCK_METHOD1(OnReceivedSessionsCommitDelay, void(const base::TimeDelta&));
-  MOCK_METHOD1(OnReceivedClientInvalidationHintBufferSize, void(int));
-  MOCK_METHOD1(OnSyncProtocolError, void(const SyncProtocolError&));
-};
-
 // Builds a ClientToServerResponse with some data type ids, including
 // invalid ones.  GetTypesToMigrate() should return only the valid
 // model types.
diff --git a/components/sync/syncable/directory.cc b/components/sync/syncable/directory.cc
index 30e56b0..b0853ea 100644
--- a/components/sync/syncable/directory.cc
+++ b/components/sync/syncable/directory.cc
@@ -820,13 +820,6 @@
       kernel_->persisted_info.download_progress[model_type]);
 }
 
-void Directory::GetDownloadProgressAsString(ModelType model_type,
-                                            std::string* value_out) const {
-  ScopedKernelLock lock(this);
-  kernel_->persisted_info.download_progress[model_type].SerializeToString(
-      value_out);
-}
-
 size_t Directory::GetEntriesCount() const {
   ScopedKernelLock lock(this);
   return kernel_->metahandles_map.size();
diff --git a/components/sync/syncable/directory.h b/components/sync/syncable/directory.h
index 71b783f9..29907fe 100644
--- a/components/sync/syncable/directory.h
+++ b/components/sync/syncable/directory.h
@@ -265,8 +265,6 @@
   // to indicate the continuation state of the next GetUpdates operation.
   void GetDownloadProgress(ModelType type,
                            sync_pb::DataTypeProgressMarker* value_out) const;
-  void GetDownloadProgressAsString(ModelType type,
-                                   std::string* value_out) const;
   void SetDownloadProgress(ModelType type,
                            const sync_pb::DataTypeProgressMarker& value);
   bool HasEmptyDownloadProgress(ModelType type) const;
diff --git a/components/viz/service/surfaces/surface_hittest_unittest.cc b/components/viz/service/surfaces/surface_hittest_unittest.cc
index ed2cf41..53c9ae5 100644
--- a/components/viz/service/surfaces/surface_hittest_unittest.cc
+++ b/components/viz/service/surfaces/surface_hittest_unittest.cc
@@ -121,10 +121,11 @@
 
   // Submit the root frame.
   ParentLocalSurfaceIdAllocator root_allocator;
-  LocalSurfaceId root_local_surface_id = root_allocator.GenerateId();
-  SurfaceId root_surface_id(kRootFrameSink, root_local_surface_id);
-  root_support().SubmitCompositorFrame(root_local_surface_id,
-                                       std::move(root_frame));
+  root_allocator.GenerateId();
+  SurfaceId root_surface_id(kRootFrameSink,
+                            root_allocator.GetCurrentLocalSurfaceId());
+  root_support().SubmitCompositorFrame(
+      root_allocator.GetCurrentLocalSurfaceId(), std::move(root_frame));
 
   {
     SurfaceHittest hittest(nullptr, surface_manager());
@@ -145,10 +146,11 @@
 
   // Submit the root frame.
   ParentLocalSurfaceIdAllocator root_allocator;
-  LocalSurfaceId root_local_surface_id = root_allocator.GenerateId();
-  SurfaceId root_surface_id(kRootFrameSink, root_local_surface_id);
-  root_support().SubmitCompositorFrame(root_local_surface_id,
-                                       std::move(root_frame));
+  root_allocator.GenerateId();
+  SurfaceId root_surface_id(kRootFrameSink,
+                            root_allocator.GetCurrentLocalSurfaceId());
+  root_support().SubmitCompositorFrame(
+      root_allocator.GetCurrentLocalSurfaceId(), std::move(root_frame));
   TestCase tests[] = {
       {root_surface_id, gfx::Point(100, 100), root_surface_id,
        gfx::Point(100, 100), false},
@@ -165,8 +167,9 @@
 
   // Add a reference to the child surface on the root surface.
   ParentLocalSurfaceIdAllocator child_allocator;
-  LocalSurfaceId child_local_surface_id = child_allocator.GenerateId();
-  SurfaceId child_surface_id(kChildFrameSink, child_local_surface_id);
+  child_allocator.GenerateId();
+  SurfaceId child_surface_id(kChildFrameSink,
+                             child_allocator.GetCurrentLocalSurfaceId());
   gfx::Rect child_rect(200, 200);
   CreateSurfaceDrawQuad(
       root_pass,
@@ -176,10 +179,11 @@
 
   // Submit the root frame.
   ParentLocalSurfaceIdAllocator root_allocator;
-  LocalSurfaceId root_local_surface_id = root_allocator.GenerateId();
-  SurfaceId root_surface_id(kRootFrameSink, root_local_surface_id);
-  root_support().SubmitCompositorFrame(root_local_surface_id,
-                                       std::move(root_frame));
+  root_allocator.GenerateId();
+  SurfaceId root_surface_id(kRootFrameSink,
+                            root_allocator.GetCurrentLocalSurfaceId());
+  root_support().SubmitCompositorFrame(
+      root_allocator.GetCurrentLocalSurfaceId(), std::move(root_frame));
 
   // Creates a child surface.
   RenderPass* child_pass = nullptr;
@@ -194,8 +198,8 @@
       root_rect, child_solid_quad_rect);
 
   // Submit the frame.
-  child_support().SubmitCompositorFrame(child_local_surface_id,
-                                        std::move(child_frame));
+  child_support().SubmitCompositorFrame(
+      child_allocator.GetCurrentLocalSurfaceId(), std::move(child_frame));
 
   TestCase tests[] = {{root_surface_id, gfx::Point(10, 10), root_surface_id,
                        gfx::Point(10, 10), false},
@@ -219,8 +223,8 @@
       gfx::Transform(1.0f, 0.0f, 0.0f, 75.0f, 0.0f, 1.0f, 0.0f, 75.0f, 0.0f,
                      0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f),
       root_rect, child_rect, child_surface_id);
-  root_support().SubmitCompositorFrame(root_local_surface_id,
-                                       std::move(root_frame));
+  root_support().SubmitCompositorFrame(
+      root_allocator.GetCurrentLocalSurfaceId(), std::move(root_frame));
 
   // Verify that point (100, 100) no longer falls on the child surface.
   // Verify that the transform to the child surface's space has also shifted.
@@ -263,8 +267,9 @@
 
   // Add a reference to the child surface on the root surface.
   ParentLocalSurfaceIdAllocator child_allocator;
-  LocalSurfaceId child_local_surface_id = child_allocator.GenerateId();
-  SurfaceId child_surface_id(kChildFrameSink, child_local_surface_id);
+  child_allocator.GenerateId();
+  SurfaceId child_surface_id(kChildFrameSink,
+                             child_allocator.GetCurrentLocalSurfaceId());
   gfx::Rect child_rect(200, 200);
   CreateSurfaceDrawQuad(
       root_pass,
@@ -274,10 +279,11 @@
 
   // Submit the root frame.
   ParentLocalSurfaceIdAllocator root_allocator;
-  LocalSurfaceId root_local_surface_id = root_allocator.GenerateId();
-  SurfaceId root_surface_id(kRootFrameSink, root_local_surface_id);
-  root_support().SubmitCompositorFrame(root_local_surface_id,
-                                       std::move(root_frame));
+  root_allocator.GenerateId();
+  SurfaceId root_surface_id(kRootFrameSink,
+                            root_allocator.GetCurrentLocalSurfaceId());
+  root_support().SubmitCompositorFrame(
+      root_allocator.GetCurrentLocalSurfaceId(), std::move(root_frame));
 
   // Creates a child surface.
   RenderPass* child_pass = nullptr;
@@ -292,8 +298,8 @@
       root_rect, child_solid_quad_rect);
 
   // Submit the frame.
-  child_support().SubmitCompositorFrame(child_local_surface_id,
-                                        std::move(child_frame));
+  child_support().SubmitCompositorFrame(
+      child_allocator.GetCurrentLocalSurfaceId(), std::move(child_frame));
 
   TestCase tests[] = {{root_surface_id, gfx::Point(10, 10), root_surface_id,
                        gfx::Point(10, 10), false},
@@ -337,10 +343,11 @@
 
   // Submit the root frame.
   ParentLocalSurfaceIdAllocator root_allocator;
-  LocalSurfaceId root_local_surface_id = root_allocator.GenerateId();
-  SurfaceId root_surface_id(kRootFrameSink, root_local_surface_id);
-  root_support().SubmitCompositorFrame(root_local_surface_id,
-                                       std::move(root_frame));
+  root_allocator.GenerateId();
+  SurfaceId root_surface_id(kRootFrameSink,
+                            root_allocator.GetCurrentLocalSurfaceId());
+  root_support().SubmitCompositorFrame(
+      root_allocator.GetCurrentLocalSurfaceId(), std::move(root_frame));
 
   // Creates a child surface.
   RenderPass* child_pass = nullptr;
@@ -355,8 +362,8 @@
       root_rect, child_solid_quad_rect);
 
   // Submit the frame.
-  child_support().SubmitCompositorFrame(child_local_surface_id,
-                                        std::move(child_frame));
+  child_support().SubmitCompositorFrame(
+      child_allocator.GetCurrentLocalSurfaceId(), std::move(child_frame));
 
   TestCase tests[] = {{root_surface_id, gfx::Point(10, 10), root_surface_id,
                        gfx::Point(10, 10), false},
@@ -409,10 +416,11 @@
 
   // Submit the root frame.
   ParentLocalSurfaceIdAllocator root_allocator;
-  LocalSurfaceId root_local_surface_id = root_allocator.GenerateId();
-  SurfaceId root_surface_id(kRootFrameSink, root_local_surface_id);
-  root_support().SubmitCompositorFrame(root_local_surface_id,
-                                       std::move(root_frame));
+  root_allocator.GenerateId();
+  SurfaceId root_surface_id(kRootFrameSink,
+                            root_allocator.GetCurrentLocalSurfaceId());
+  root_support().SubmitCompositorFrame(
+      root_allocator.GetCurrentLocalSurfaceId(), std::move(root_frame));
 
   TestCase tests[] = {// These tests just miss the RenderPassDrawQuad.
                       {root_surface_id, gfx::Point(49, 49), root_surface_id,
@@ -443,8 +451,9 @@
 
   // Add a reference to the child surface on the root surface.
   ParentLocalSurfaceIdAllocator child_allocator;
-  LocalSurfaceId child_local_surface_id = child_allocator.GenerateId();
-  SurfaceId child_surface_id(kChildFrameSink, child_local_surface_id);
+  child_allocator.GenerateId();
+  SurfaceId child_surface_id(kChildFrameSink,
+                             child_allocator.GetCurrentLocalSurfaceId());
   gfx::Rect child_rect(200, 200);
   CreateSurfaceDrawQuad(
       root_pass,
@@ -454,10 +463,11 @@
 
   // Submit the root frame.
   ParentLocalSurfaceIdAllocator root_allocator;
-  LocalSurfaceId root_local_surface_id = root_allocator.GenerateId();
-  SurfaceId root_surface_id(kRootFrameSink, root_local_surface_id);
-  root_support().SubmitCompositorFrame(root_local_surface_id,
-                                       std::move(root_frame));
+  root_allocator.GenerateId();
+  SurfaceId root_surface_id(kRootFrameSink,
+                            root_allocator.GetCurrentLocalSurfaceId());
+  root_support().SubmitCompositorFrame(
+      root_allocator.GetCurrentLocalSurfaceId(), std::move(root_frame));
 
   // Creates a child surface.
   RenderPass* child_pass = nullptr;
@@ -472,8 +482,8 @@
       root_rect, child_solid_quad_rect);
 
   // Submit the frame.
-  child_support().SubmitCompositorFrame(child_local_surface_id,
-                                        std::move(child_frame));
+  child_support().SubmitCompositorFrame(
+      child_allocator.GetCurrentLocalSurfaceId(), std::move(child_frame));
 
   TestCase test_expectations_without_insets[] = {
       {root_surface_id, gfx::Point(55, 55), child_surface_id, gfx::Point(5, 5),
diff --git a/content/app/strings/translations/content_strings_cs.xtb b/content/app/strings/translations/content_strings_cs.xtb
index 4fa1461..0b6d7dc 100644
--- a/content/app/strings/translations/content_strings_cs.xtb
+++ b/content/app/strings/translations/content_strings_cs.xtb
@@ -94,6 +94,7 @@
 <translation id="5034860022980953847">indikátor průběhu</translation>
 <translation id="5117590920725113268">Zobrazit další měsíc</translation>
 <translation id="512758898067543763">záhlaví řádku</translation>
+<translation id="5153163864850940242">Toto video se přehrává v režimu obrazu v obraze</translation>
 <translation id="5164977714490026579">Hodnota musí být větší nebo rovna <ph name="MINIMUM" />.</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5307600278924710095">Zadejte část před znakem <ph name="ATSIGN" />. Adresa <ph name="INVALIDADDRESS" /> není úplná.</translation>
diff --git a/content/app/strings/translations/content_strings_el.xtb b/content/app/strings/translations/content_strings_el.xtb
index 1c9126b..0cb3df8 100644
--- a/content/app/strings/translations/content_strings_el.xtb
+++ b/content/app/strings/translations/content_strings_el.xtb
@@ -94,6 +94,7 @@
 <translation id="5034860022980953847">ένδειξη προόδου</translation>
 <translation id="5117590920725113268">Εμφάνιση επόμενου μήνα</translation>
 <translation id="512758898067543763">κεφαλίδα σειράς</translation>
+<translation id="5153163864850940242">Η αναπαραγωγή αυτού του βίντεο γίνεται σε λειτουργία Picture-in-Picture</translation>
 <translation id="5164977714490026579">Η τιμή πρέπει να είναι μεγαλύτερη ή ίση του <ph name="MINIMUM" />.</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5307600278924710095">Καταχωρίστε το τμήμα της διεύθυνσης πριν το σύμβολο "<ph name="ATSIGN" />". Η διεύθυνση "<ph name="INVALIDADDRESS" />" δεν είναι πλήρης.</translation>
diff --git a/content/app/strings/translations/content_strings_es.xtb b/content/app/strings/translations/content_strings_es.xtb
index f145a7d3..afa3528 100644
--- a/content/app/strings/translations/content_strings_es.xtb
+++ b/content/app/strings/translations/content_strings_es.xtb
@@ -94,6 +94,7 @@
 <translation id="5034860022980953847">indicador de progreso</translation>
 <translation id="5117590920725113268">Mostrar mes siguiente</translation>
 <translation id="512758898067543763">encabezado de fila</translation>
+<translation id="5153163864850940242">Este vídeo se está reproduciendo en modo imagen en imagen</translation>
 <translation id="5164977714490026579">El valor debe ser superior o igual a <ph name="MINIMUM" /></translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5307600278924710095">Introduce texto seguido del signo "<ph name="ATSIGN" />". La dirección "<ph name="INVALIDADDRESS" />" está incompleta.</translation>
diff --git a/content/app/strings/translations/content_strings_hr.xtb b/content/app/strings/translations/content_strings_hr.xtb
index 2aeb0bb..16f2c2a7 100644
--- a/content/app/strings/translations/content_strings_hr.xtb
+++ b/content/app/strings/translations/content_strings_hr.xtb
@@ -94,6 +94,7 @@
 <translation id="5034860022980953847">pokazivač napretka</translation>
 <translation id="5117590920725113268">Prikaži sljedeći mjesec</translation>
 <translation id="512758898067543763">zaglavlje retka</translation>
+<translation id="5153163864850940242">Ovaj se videozapis prikazuje u značajci slike u slici</translation>
 <translation id="5164977714490026579">Vrijednost mora biti <ph name="MINIMUM" /> ili veća.</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5307600278924710095">Unesite dio adrese ispred znaka "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" nije potpuna e-adresa.</translation>
diff --git a/content/app/strings/translations/content_strings_id.xtb b/content/app/strings/translations/content_strings_id.xtb
index d8bdb7f..efefb44 100644
--- a/content/app/strings/translations/content_strings_id.xtb
+++ b/content/app/strings/translations/content_strings_id.xtb
@@ -94,6 +94,7 @@
 <translation id="5034860022980953847">indikator kemajuan</translation>
 <translation id="5117590920725113268">Tampilkan bulan berikutnya</translation>
 <translation id="512758898067543763">judul baris</translation>
+<translation id="5153163864850940242">Video ini diputar dalam Picture-in-Picture</translation>
 <translation id="5164977714490026579">Nilai harus lebih besar daripada atau sama dengan <ph name="MINIMUM" />.</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5307600278924710095">Masukkan bagian yang diikuti dengan '<ph name="ATSIGN" />'. '<ph name="INVALIDADDRESS" />' tidak lengkap.</translation>
diff --git a/content/app/strings/translations/content_strings_ko.xtb b/content/app/strings/translations/content_strings_ko.xtb
index a130aed0..14566f0 100644
--- a/content/app/strings/translations/content_strings_ko.xtb
+++ b/content/app/strings/translations/content_strings_ko.xtb
@@ -94,6 +94,7 @@
 <translation id="5034860022980953847">진행률 표시기</translation>
 <translation id="5117590920725113268">다음 달 표시</translation>
 <translation id="512758898067543763">행 헤더</translation>
+<translation id="5153163864850940242">이 동영상은 PIP 모드에서 재생 중입니다.</translation>
 <translation id="5164977714490026579">값은 <ph name="MINIMUM" /> 이상이어야 합니다.</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" />PB</translation>
 <translation id="5307600278924710095">'<ph name="ATSIGN" />' 앞 부분을 입력해 주세요. '<ph name="INVALIDADDRESS" />'(이)가 완전하지 않습니다.</translation>
diff --git a/content/app/strings/translations/content_strings_pl.xtb b/content/app/strings/translations/content_strings_pl.xtb
index 2a459e34..c8db3a0 100644
--- a/content/app/strings/translations/content_strings_pl.xtb
+++ b/content/app/strings/translations/content_strings_pl.xtb
@@ -94,6 +94,7 @@
 <translation id="5034860022980953847">wskaźnik postępu</translation>
 <translation id="5117590920725113268">Pokaż przyszły miesiąc</translation>
 <translation id="512758898067543763">nagłówek wiersza</translation>
+<translation id="5153163864850940242">Ten film jest odtwarzany w trybie obrazu w obrazie</translation>
 <translation id="5164977714490026579">Wartość nie może być mniejsza niż <ph name="MINIMUM" />.</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5307600278924710095">Podaj część przed znakiem „<ph name="ATSIGN" />”. Adres „<ph name="INVALIDADDRESS" />” jest niepełny.</translation>
diff --git a/content/app/strings/translations/content_strings_pt-BR.xtb b/content/app/strings/translations/content_strings_pt-BR.xtb
index 1d67ac0..68ffc6d 100644
--- a/content/app/strings/translations/content_strings_pt-BR.xtb
+++ b/content/app/strings/translations/content_strings_pt-BR.xtb
@@ -94,6 +94,7 @@
 <translation id="5034860022980953847">indicador de progresso</translation>
 <translation id="5117590920725113268">Mostrar próximo mês</translation>
 <translation id="512758898067543763">cabeçalho de linha</translation>
+<translation id="5153163864850940242">Este vídeo está sendo reproduzido em picture-in-picture</translation>
 <translation id="5164977714490026579">O valor deve ser maior ou igual a <ph name="MINIMUM" />.</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5307600278924710095">Insira uma parte seguida por "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" está incompleto.</translation>
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index ee24073..f4b0f8f 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -1286,7 +1286,6 @@
     "renderer_host/input/synthetic_touchscreen_pinch_gesture.h",
     "renderer_host/input/tap_suppression_controller.cc",
     "renderer_host/input/tap_suppression_controller.h",
-    "renderer_host/input/tap_suppression_controller_client.h",
     "renderer_host/input/timeout_monitor.cc",
     "renderer_host/input/timeout_monitor.h",
     "renderer_host/input/touch_action_filter.cc",
diff --git a/content/browser/appcache/appcache_interceptor.cc b/content/browser/appcache/appcache_interceptor.cc
index 2498518..6ff24bf3 100644
--- a/content/browser/appcache/appcache_interceptor.cc
+++ b/content/browser/appcache/appcache_interceptor.cc
@@ -81,45 +81,6 @@
     handler->GetExtraResponseInfo(cache_id, manifest_url);
 }
 
-void AppCacheInterceptor::PrepareForCrossSiteTransfer(
-    net::URLRequest* request,
-    int old_process_id) {
-  AppCacheRequestHandler* handler = GetHandler(request);
-  if (!handler)
-    return;
-  handler->PrepareForCrossSiteTransfer(old_process_id);
-}
-
-void AppCacheInterceptor::CompleteCrossSiteTransfer(
-    net::URLRequest* request,
-    int new_process_id,
-    int new_host_id,
-    ResourceRequesterInfo* requester_info) {
-  // AppCache is supported only for renderer initiated requests.
-  DCHECK(requester_info->IsRenderer());
-  AppCacheRequestHandler* handler = GetHandler(request);
-  if (!handler)
-    return;
-  if (!handler->SanityCheckIsSameService(requester_info->appcache_service())) {
-    // This can happen when V2 apps and web pages end up in the same storage
-    // partition.
-    bad_message::ReceivedBadMessage(requester_info->filter(),
-                                    bad_message::ACI_WRONG_STORAGE_PARTITION);
-    return;
-  }
-  DCHECK_NE(kAppCacheNoHostId, new_host_id);
-  handler->CompleteCrossSiteTransfer(new_process_id, new_host_id);
-}
-
-void AppCacheInterceptor::MaybeCompleteCrossSiteTransferInOldProcess(
-    net::URLRequest* request,
-    int process_id) {
-  AppCacheRequestHandler* handler = GetHandler(request);
-  if (!handler)
-    return;
-  handler->MaybeCompleteCrossSiteTransferInOldProcess(process_id);
-}
-
 AppCacheInterceptor::AppCacheInterceptor() {
 }
 
diff --git a/content/browser/appcache/appcache_interceptor.h b/content/browser/appcache/appcache_interceptor.h
index 7f802d1..6658220 100644
--- a/content/browser/appcache/appcache_interceptor.h
+++ b/content/browser/appcache/appcache_interceptor.h
@@ -24,7 +24,6 @@
 class AppCacheHost;
 class AppCacheRequestHandler;
 class AppCacheServiceImpl;
-class ResourceRequesterInfo;
 
 // An interceptor to hijack requests and potentially service them out of
 // the appcache.
@@ -51,17 +50,6 @@
                                    int64_t* cache_id,
                                    GURL* manifest_url);
 
-  // Methods to support cross site navigations.
-  static void PrepareForCrossSiteTransfer(net::URLRequest* request,
-                                          int old_process_id);
-  static void CompleteCrossSiteTransfer(net::URLRequest* request,
-                                        int new_process_id,
-                                        int new_host_id,
-                                        ResourceRequesterInfo* requester_info);
-  static void MaybeCompleteCrossSiteTransferInOldProcess(
-      net::URLRequest* request,
-      int old_process_id);
-
   AppCacheInterceptor();
   ~AppCacheInterceptor() override;
 
diff --git a/content/browser/appcache/appcache_request_handler.cc b/content/browser/appcache/appcache_request_handler.cc
index f7d16136..07d2b05 100644
--- a/content/browser/appcache/appcache_request_handler.cc
+++ b/content/browser/appcache/appcache_request_handler.cc
@@ -47,8 +47,6 @@
       cache_entry_not_found_(false),
       is_delivering_network_response_(false),
       maybe_load_resource_executed_(false),
-      old_process_id_(0),
-      old_host_id_(kAppCacheNoHostId),
       cache_id_(kAppCacheNoCacheId),
       service_(host_->service()),
       request_(std::move(request)),
@@ -222,37 +220,6 @@
   *manifest_url = manifest_url_;
 }
 
-void AppCacheRequestHandler::PrepareForCrossSiteTransfer(int old_process_id) {
-  if (!host_)
-    return;
-  AppCacheBackendImpl* backend = host_->service()->GetBackend(old_process_id);
-  DCHECK(backend) << "appcache detected likely storage partition mismatch";
-  old_process_id_ = old_process_id;
-  old_host_id_ = host_->host_id();
-  host_for_cross_site_transfer_ = backend->TransferHostOut(host_->host_id());
-  DCHECK_EQ(host_, host_for_cross_site_transfer_.get());
-}
-
-void AppCacheRequestHandler::CompleteCrossSiteTransfer(
-    int new_process_id, int new_host_id) {
-  if (!host_for_cross_site_transfer_.get())
-    return;
-  DCHECK_EQ(host_, host_for_cross_site_transfer_.get());
-  AppCacheBackendImpl* backend = host_->service()->GetBackend(new_process_id);
-  DCHECK(backend) << "appcache detected likely storage partition mismatch";
-  backend->TransferHostIn(new_host_id,
-                          std::move(host_for_cross_site_transfer_));
-}
-
-void AppCacheRequestHandler::MaybeCompleteCrossSiteTransferInOldProcess(
-    int old_process_id) {
-  if (!host_ || !host_for_cross_site_transfer_.get() ||
-      old_process_id != old_process_id_) {
-    return;
-  }
-  CompleteCrossSiteTransfer(old_process_id_, old_host_id_);
-}
-
 // static
 std::unique_ptr<AppCacheRequestHandler>
 AppCacheRequestHandler::InitializeForNavigationNetworkService(
@@ -286,13 +253,11 @@
     AppCacheServiceImpl* service) {
   service_ = nullptr;
   if (!host_) {
-    DCHECK(!host_for_cross_site_transfer_);
     DCHECK(!job_);
     return;
   }
   host_->RemoveObserver(this);
   OnDestructionImminent(host_);
-  host_for_cross_site_transfer_.reset();
 }
 
 void AppCacheRequestHandler::DeliverAppCachedResponse(
diff --git a/content/browser/appcache/appcache_request_handler.h b/content/browser/appcache/appcache_request_handler.h
index 9f79c30..c9ed56ef 100644
--- a/content/browser/appcache/appcache_request_handler.h
+++ b/content/browser/appcache/appcache_request_handler.h
@@ -67,17 +67,6 @@
 
   void GetExtraResponseInfo(int64_t* cache_id, GURL* manifest_url);
 
-  // Methods to support cross site navigations.
-  void PrepareForCrossSiteTransfer(int old_process_id);
-  void CompleteCrossSiteTransfer(int new_process_id, int new_host_id);
-  void MaybeCompleteCrossSiteTransferInOldProcess(int old_process_id);
-
-  // Useful for detecting storage partition mismatches in the context
-  // of cross site transfer navigations.
-  bool SanityCheckIsSameService(AppCacheService* service) {
-    return !host_ || (host_->service() == service);
-  }
-
   // NetworkService loading
 
   // NavigationLoaderInterceptor overrides - main resource loading.
@@ -249,12 +238,6 @@
   // 3) Request has been cancelled, and the job killed.
   base::WeakPtr<AppCacheJob> job_;
 
-  // During a cross site navigation, we transfer ownership the AppcacheHost
-  // from the old processes structures over to the new structures.
-  std::unique_ptr<AppCacheHost> host_for_cross_site_transfer_;
-  int old_process_id_;
-  int old_host_id_;
-
   // Cached information about the response being currently served by the
   // AppCache, if there is one.
   int cache_id_;
diff --git a/content/browser/appcache/appcache_request_handler_unittest.cc b/content/browser/appcache/appcache_request_handler_unittest.cc
index f239159..3e742cd 100644
--- a/content/browser/appcache/appcache_request_handler_unittest.cc
+++ b/content/browser/appcache/appcache_request_handler_unittest.cc
@@ -818,28 +818,6 @@
     TestFinished();
   }
 
-  void DestroyedServiceWithCrossSiteNav() {
-    EXPECT_TRUE(CreateRequestAndHandler(GURL("http://blah/"), host_,
-                                        RESOURCE_TYPE_MAIN_FRAME));
-    EXPECT_TRUE(handler_.get());
-    handler_->PrepareForCrossSiteTransfer(backend_impl_->process_id());
-    EXPECT_TRUE(handler_->host_for_cross_site_transfer_.get());
-
-    backend_impl_.reset();
-    mock_frontend_.reset();
-    mock_service_.reset();
-    mock_policy_.reset();
-    host_ = nullptr;
-
-    EXPECT_FALSE(handler_->host_for_cross_site_transfer_.get());
-    EXPECT_FALSE(handler_->MaybeLoadResource(nullptr));
-    EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect(
-        nullptr, GURL("http://blah/redirect")));
-    EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse(nullptr));
-
-    TestFinished();
-  }
-
   // UnsupportedScheme -----------------------------
 
   void UnsupportedScheme() {
@@ -1065,11 +1043,6 @@
   RunTestOnIOThread(&AppCacheRequestHandlerTest::DestroyedService);
 }
 
-TEST_P(AppCacheRequestHandlerTest, DestroyedServiceWithCrossSiteNav) {
-  RunTestOnIOThread(
-      &AppCacheRequestHandlerTest::DestroyedServiceWithCrossSiteNav);
-}
-
 TEST_P(AppCacheRequestHandlerTest, UnsupportedScheme) {
   RunTestOnIOThread(&AppCacheRequestHandlerTest::UnsupportedScheme);
 }
diff --git a/content/browser/bad_message.h b/content/browser/bad_message.h
index 1c8180a..d0e0a40 100644
--- a/content/browser/bad_message.h
+++ b/content/browser/bad_message.h
@@ -52,7 +52,7 @@
   OBSOLETE_DBMF_DB_NOT_OPEN_ON_CLOSE = 25,
   OBSOLETE_DBMF_INVALID_ORIGIN_ON_SQLITE_ERROR = 26,
   RDH_INVALID_PRIORITY = 27,
-  RDH_REQUEST_NOT_TRANSFERRING = 28,
+  OBSOLETE_RDH_REQUEST_NOT_TRANSFERRING = 28,
   RDH_BAD_DOWNLOAD = 29,
   OBSOLETE_NMF_NO_PERMISSION_SHOW = 30,
   OBSOLETE_NMF_NO_PERMISSION_CLOSE = 31,
@@ -130,8 +130,8 @@
   DWNLD_INVALID_SAVABLE_RESOURCE_LINKS_RESPONSE = 103,
   DWNLD_INVALID_SERIALIZE_AS_MHTML_RESPONSE = 104,
   BDH_DEVICE_NOT_ALLOWED_FOR_ORIGIN = 105,
-  ACI_WRONG_STORAGE_PARTITION = 106,
-  RDHI_WRONG_STORAGE_PARTITION = 107,
+  OBSOLETE_ACI_WRONG_STORAGE_PARTITION = 106,
+  OBSOLETE_RDHI_WRONG_STORAGE_PARTITION = 107,
   RDH_INVALID_REQUEST_ID = 108,
   BDH_SERVICE_NOT_ALLOWED_FOR_ORIGIN = 109,
   WSI_UNEXPECTED_ADD_CHANNEL_REQUEST = 110,
@@ -170,8 +170,9 @@
   OBSOLETE_SWDH_ENABLE_NAVIGATION_PRELOAD_NO_HOST = 143,
   OBSOLETE_SWDH_ENABLE_NAVIGATION_PRELOAD_INVALID_ORIGIN = 144,
   OBSOLETE_SWDH_ENABLE_NAVIGATION_PRELOAD_BAD_REGISTRATION_ID = 145,
-  RDH_TRANSFERRING_REQUEST_NOT_FOUND = 146,  // Disabled - crbug.com/659613.
-  RDH_TRANSFERRING_NONNAVIGATIONAL_REQUEST = 147,
+  OBSOLETE_RDH_TRANSFERRING_REQUEST_NOT_FOUND =
+      146,  // Disabled - crbug.com/659613.
+  OBSOLETE_RDH_TRANSFERRING_NONNAVIGATIONAL_REQUEST = 147,
   OBSOLETE_SWDH_GET_NAVIGATION_PRELOAD_STATE_NO_HOST = 148,
   OBSOLETE_SWDH_GET_NAVIGATION_PRELOAD_STATE_INVALID_ORIGIN = 149,
   OBSOLETE_SWDH_GET_NAVIGATION_PRELOAD_STATE_BAD_REGISTRATION_ID = 150,
diff --git a/content/browser/devtools/devtools_url_interceptor_request_job.cc b/content/browser/devtools/devtools_url_interceptor_request_job.cc
index 0133abcd..d231d82 100644
--- a/content/browser/devtools/devtools_url_interceptor_request_job.cc
+++ b/content/browser/devtools/devtools_url_interceptor_request_job.cc
@@ -135,7 +135,6 @@
       resource_request_info->IsMainFrame(),
       resource_request_info->GetResourceType(),
       resource_request_info->GetPageTransition(),
-      resource_request_info->should_replace_current_entry(),
       resource_request_info->IsDownload(), resource_request_info->is_stream(),
       resource_request_info->allow_download(),
       resource_request_info->HasUserGesture(),
diff --git a/content/browser/loader/mojo_async_resource_handler.cc b/content/browser/loader/mojo_async_resource_handler.cc
index dfeeb79..d4b74d3 100644
--- a/content/browser/loader/mojo_async_resource_handler.cc
+++ b/content/browser/loader/mojo_async_resource_handler.cc
@@ -40,11 +40,6 @@
 
 constexpr size_t kMaxChunkSize = 32 * 1024;
 
-void NotReached(network::mojom::URLLoaderRequest mojo_request,
-                network::mojom::URLLoaderClientPtr url_loader_client) {
-  NOTREACHED();
-}
-
 // Records histograms for the time spent between several events in the
 // MojoAsyncResourceHandler for a navigation.
 // - |response_started| is when the response's headers and metadata are
@@ -140,13 +135,6 @@
   // the callback will never be called after |this| is destroyed.
   binding_.set_connection_error_with_reason_handler(base::BindOnce(
       &MojoAsyncResourceHandler::Cancel, base::Unretained(this)));
-
-  if (IsResourceTypeFrame(resource_type)) {
-    GetRequestInfo()->set_on_transfer(base::Bind(
-        &MojoAsyncResourceHandler::OnTransfer, weak_factory_.GetWeakPtr()));
-  } else {
-    GetRequestInfo()->set_on_transfer(base::Bind(&NotReached));
-  }
 }
 
 MojoAsyncResourceHandler::~MojoAsyncResourceHandler() {
@@ -657,16 +645,6 @@
       from_here, std::move(callback), request());
 }
 
-void MojoAsyncResourceHandler::OnTransfer(
-    network::mojom::URLLoaderRequest mojo_request,
-    network::mojom::URLLoaderClientPtr url_loader_client) {
-  binding_.Unbind();
-  binding_.Bind(std::move(mojo_request));
-  binding_.set_connection_error_with_reason_handler(base::BindOnce(
-      &MojoAsyncResourceHandler::Cancel, base::Unretained(this)));
-  url_loader_client_ = std::move(url_loader_client);
-}
-
 void MojoAsyncResourceHandler::SendUploadProgress(
     const net::UploadProgress& progress) {
   url_loader_client_->OnUploadProgress(
diff --git a/content/browser/loader/mojo_async_resource_handler.h b/content/browser/loader/mojo_async_resource_handler.h
index 029ea5d..1cea185 100644
--- a/content/browser/loader/mojo_async_resource_handler.h
+++ b/content/browser/loader/mojo_async_resource_handler.h
@@ -130,8 +130,6 @@
       const base::Location& from_here,
       network::UploadProgressTracker::UploadProgressReportCallback callback);
 
-  void OnTransfer(network::mojom::URLLoaderRequest mojo_request,
-                  network::mojom::URLLoaderClientPtr url_loader_client);
   void SendUploadProgress(const net::UploadProgress& progress);
   void OnUploadProgressACK();
   static void InitializeResourceBufferConstants();
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
index 126071c..14ef9d21 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.cc
+++ b/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -443,7 +443,6 @@
         (loader->GetRequestInfo()->detachable_handler() &&
          loader->GetRequestInfo()->detachable_handler()->is_detached()) ||
         loader->GetRequestInfo()->requester_info()->IsBrowserSideNavigation() ||
-        loader->is_transferring() ||
         loader->GetRequestInfo()->GetResourceType() ==
             RESOURCE_TYPE_SERVICE_WORKER);
   }
@@ -744,132 +743,6 @@
   return false;
 }
 
-void ResourceDispatcherHostImpl::UpdateRequestForTransfer(
-    ResourceRequesterInfo* requester_info,
-    int route_id,
-    int request_id,
-    const network::ResourceRequest& request_data,
-    LoaderMap::iterator iter,
-    network::mojom::URLLoaderRequest mojo_request,
-    network::mojom::URLLoaderClientPtr url_loader_client) {
-  DCHECK(requester_info->IsRenderer());
-  int child_id = requester_info->child_id();
-  ResourceRequestInfoImpl* info = iter->second->GetRequestInfo();
-  GlobalFrameRoutingId old_routing_id(request_data.transferred_request_child_id,
-                                      info->GetRenderFrameID());
-  GlobalRequestID old_request_id(request_data.transferred_request_child_id,
-                                 request_data.transferred_request_request_id);
-  GlobalFrameRoutingId new_routing_id(child_id, request_data.render_frame_id);
-  GlobalRequestID new_request_id(child_id, request_id);
-
-  // Clear out data that depends on |info| before updating it.
-  // We always need to move the memory stats to the new process.  In contrast,
-  // stats.num_requests is only tracked for some requests (those that require
-  // file descriptors for their shared memory buffer).
-  IncrementOutstandingRequestsMemory(-1, *info);
-  bool should_update_count = info->counted_as_in_flight_request();
-  if (should_update_count)
-    IncrementOutstandingRequestsCount(-1, info);
-
-  DCHECK(pending_loaders_.find(old_request_id) == iter);
-  std::unique_ptr<ResourceLoader> loader = std::move(iter->second);
-  ResourceLoader* loader_ptr = loader.get();
-  pending_loaders_.erase(iter);
-
-  // ResourceHandlers should always get state related to the request from the
-  // ResourceRequestInfo rather than caching it locally.  This lets us update
-  // the info object when a transfer occurs.
-  info->UpdateForTransfer(route_id, request_data.render_frame_id, request_id,
-                          requester_info, std::move(mojo_request),
-                          std::move(url_loader_client));
-
-  // Update maps that used the old IDs, if necessary.  Some transfers in tests
-  // do not actually use a different ID, so not all maps need to be updated.
-  pending_loaders_[new_request_id] = std::move(loader);
-  IncrementOutstandingRequestsMemory(1, *info);
-  if (should_update_count)
-    IncrementOutstandingRequestsCount(1, info);
-  if (old_routing_id != new_routing_id) {
-    if (blocked_loaders_map_.find(old_routing_id) !=
-            blocked_loaders_map_.end()) {
-      blocked_loaders_map_[new_routing_id] =
-          std::move(blocked_loaders_map_[old_routing_id]);
-      blocked_loaders_map_.erase(old_routing_id);
-    }
-  }
-
-  AppCacheInterceptor::CompleteCrossSiteTransfer(
-      loader_ptr->request(), child_id, request_data.appcache_host_id,
-      requester_info);
-
-  ServiceWorkerRequestHandler* handler =
-      ServiceWorkerRequestHandler::GetHandler(loader_ptr->request());
-  if (handler) {
-    if (!handler->SanityCheckIsSameContext(
-            requester_info->service_worker_context())) {
-      bad_message::ReceivedBadMessage(
-          requester_info->filter(), bad_message::RDHI_WRONG_STORAGE_PARTITION);
-    } else {
-      handler->CompleteCrossSiteTransfer(
-          child_id, request_data.service_worker_provider_id);
-    }
-  }
-}
-
-void ResourceDispatcherHostImpl::CompleteTransfer(
-    ResourceRequesterInfo* requester_info,
-    int request_id,
-    const network::ResourceRequest& request_data,
-    int route_id,
-    network::mojom::URLLoaderRequest mojo_request,
-    network::mojom::URLLoaderClientPtr url_loader_client) {
-  DCHECK(requester_info->IsRenderer());
-  // Caller should ensure that |request_data| is associated with a transfer.
-  DCHECK(request_data.transferred_request_child_id != -1 ||
-         request_data.transferred_request_request_id != -1);
-
-  if (!IsResourceTypeFrame(
-          static_cast<ResourceType>(request_data.resource_type))) {
-    // Transfers apply only to navigational requests - the renderer seems to
-    // have sent bogus IPC data.
-    bad_message::ReceivedBadMessage(
-        requester_info->filter(),
-        bad_message::RDH_TRANSFERRING_NONNAVIGATIONAL_REQUEST);
-    return;
-  }
-
-  // Attempt to find a loader associated with the deferred transfer request.
-  LoaderMap::iterator it = pending_loaders_.find(
-      GlobalRequestID(request_data.transferred_request_child_id,
-                      request_data.transferred_request_request_id));
-  if (it == pending_loaders_.end()) {
-    // Renderer sent transferred_request_request_id and/or
-    // transferred_request_child_id that doesn't have a corresponding entry on
-    // the browser side.
-    // TODO(lukasza): https://crbug.com/659613: Need to understand the scenario
-    // that can lead here (and then attempt to reintroduce a renderer kill
-    // below).
-    return;
-  }
-  ResourceLoader* pending_loader = it->second.get();
-
-  if (!pending_loader->is_transferring()) {
-    // Renderer sent transferred_request_request_id and/or
-    // transferred_request_child_id that doesn't correspond to an actually
-    // transferring loader on the browser side.
-    bad_message::ReceivedBadMessage(requester_info->filter(),
-                                    bad_message::RDH_REQUEST_NOT_TRANSFERRING);
-    return;
-  }
-
-  // If the request is transferring to a new process, we can update our
-  // state and let it resume with its existing ResourceHandlers.
-  UpdateRequestForTransfer(requester_info, route_id, request_id, request_data,
-                           it, std::move(mojo_request),
-                           std::move(url_loader_client));
-  pending_loader->CompleteTransfer();
-}
-
 void ResourceDispatcherHostImpl::BeginRequest(
     ResourceRequesterInfo* requester_info,
     int request_id,
@@ -921,15 +794,6 @@
   // http://crbug.com/91398
   DEBUG_ALIAS_FOR_GURL(url_buf, request_data.url);
 
-  // If the request that's coming in is being transferred from another process,
-  // we want to reuse and resume the old loader rather than start a new one.
-  if (request_data.transferred_request_child_id != -1 ||
-      request_data.transferred_request_request_id != -1) {
-    CompleteTransfer(requester_info, request_id, request_data, route_id,
-                     std::move(mojo_request), std::move(url_loader_client));
-    return;
-  }
-
   ResourceContext* resource_context = nullptr;
   net::URLRequestContext* request_context = nullptr;
   requester_info->GetContexts(
@@ -1182,7 +1046,6 @@
       request_data.is_main_frame,
       static_cast<ResourceType>(request_data.resource_type),
       static_cast<ui::PageTransition>(request_data.transition_type),
-      request_data.should_replace_current_entry,
       false,  // is download
       false,  // is stream
       false,  // allow_download,
@@ -1436,7 +1299,6 @@
       MakeRequestID(), render_frame_route_id,
       false,  // is_main_frame
       RESOURCE_TYPE_SUB_RESOURCE, ui::PAGE_TRANSITION_LINK,
-      false,     // should_replace_current_entry
       download,  // is_download
       false,     // is_stream
       download,  // allow_download
@@ -1476,20 +1338,6 @@
   scheduler_->DeprecatedOnLoadingStateChanged(child_id, route_id, !is_loading);
 }
 
-void ResourceDispatcherHostImpl::MarkAsTransferredNavigation(
-    const GlobalRequestID& id,
-    const base::Closure& on_transfer_complete_callback) {
-  GetLoader(id)->MarkAsTransferring(on_transfer_complete_callback);
-}
-
-void ResourceDispatcherHostImpl::ResumeDeferredNavigation(
-    const GlobalRequestID& id) {
-  ResourceLoader* loader = GetLoader(id);
-  // The response we were meant to resume could have already been canceled.
-  if (loader)
-    loader->CompleteTransfer();
-}
-
 // The object died, so cancel and detach all requests associated with it except
 // for downloads and detachable resources, which belong to the browser process
 // even if initiated via a renderer.
@@ -1514,7 +1362,6 @@
   int route_id = global_routing_id.frame_routing_id;
   bool cancel_all_routes = (route_id == MSG_ROUTING_NONE);
 
-  bool any_requests_transferring = false;
   std::vector<GlobalRequestID> matching_requests;
   for (const auto& loader : pending_loaders_) {
     if (loader.first.child_id != child_id)
@@ -1525,16 +1372,13 @@
     GlobalRequestID id(child_id, loader.first.request_id);
     DCHECK(id == loader.first);
     // Don't cancel navigations that are expected to live beyond this process.
-    if (IsTransferredNavigation(id))
-      any_requests_transferring = true;
     if (cancel_all_routes || route_id == info->GetRenderFrameID()) {
       if (info->keepalive() && !cancel_all_routes) {
         // If the keepalive flag is set, that request will outlive the frame
         // deliberately, so we don't cancel it here.
       } else if (info->detachable_handler()) {
         info->detachable_handler()->Detach();
-      } else if (!info->IsDownload() && !info->is_stream() &&
-                 !IsTransferredNavigation(id)) {
+      } else if (!info->IsDownload() && !info->is_stream()) {
         matching_requests.push_back(id);
       }
     }
@@ -1556,14 +1400,6 @@
       RemovePendingLoader(iter);
   }
 
-  // Don't clear the blocked loaders or offline policy maps if any of the
-  // requests in route_id are being transferred to a new process, since those
-  // maps will be updated with the new route_id after the transfer.  Otherwise
-  // we will lose track of this info when the old route goes away, before the
-  // new one is created.
-  if (any_requests_transferring)
-    return;
-
   // Now deal with blocked requests if any.
   if (!cancel_all_routes) {
     if (blocked_loaders_map_.find(global_routing_id) !=
@@ -1845,9 +1681,6 @@
       MakeRequestID(),
       -1,  // request_data.render_frame_id,
       info.is_main_frame, resource_type, info.common_params.transition,
-      // should_replace_current_entry. This was only maintained at layer for
-      // request transfers and isn't needed for browser-side navigations.
-      false,
       false,  // is download
       false,  // is stream
       info.common_params.allow_download, info.common_params.has_user_gesture,
@@ -2132,11 +1965,6 @@
 
 void ResourceDispatcherHostImpl::CancelRequestFromRenderer(
     GlobalRequestID request_id) {
-  // When the old renderer dies, it sends a message to us to cancel its
-  // requests.
-  if (IsTransferredNavigation(request_id))
-    return;
-
   ResourceLoader* loader = GetLoader(request_id);
 
   // It is possible that the request has been completed and removed from the
@@ -2388,12 +2216,6 @@
   return allow_cross_origin_auth_prompt_;
 }
 
-bool ResourceDispatcherHostImpl::IsTransferredNavigation(
-    const GlobalRequestID& id) const {
-  ResourceLoader* loader = GetLoader(id);
-  return loader ? loader->is_transferring() : false;
-}
-
 ResourceLoader* ResourceDispatcherHostImpl::GetLoader(
     const GlobalRequestID& id) const {
   DCHECK(io_thread_task_runner_->BelongsToCurrentThread());
diff --git a/content/browser/loader/resource_dispatcher_host_impl.h b/content/browser/loader/resource_dispatcher_host_impl.h
index ef311be..628c2f1 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.h
+++ b/content/browser/loader/resource_dispatcher_host_impl.h
@@ -126,16 +126,6 @@
   // Cancels the given request if it still exists.
   void CancelRequest(int child_id, int request_id);
 
-  // Marks the request, with its current |response|, as "parked". This
-  // happens if a request is redirected cross-site and needs to be
-  // resumed by a new process.
-  void MarkAsTransferredNavigation(
-      const GlobalRequestID& id,
-      const base::Closure& on_transfer_complete_callback);
-
-  // Resumes the request without transferring it to a new process.
-  void ResumeDeferredNavigation(const GlobalRequestID& id);
-
   // Returns the number of pending requests. This is designed for the unittests
   int pending_requests() const {
     return static_cast<int>(pending_loaders_.size());
@@ -555,26 +545,6 @@
 
   bool IsRequestIDInUse(const GlobalRequestID& id) const;
 
-  // Update the ResourceRequestInfo and internal maps when a request is
-  // transferred from one process to another.
-  void UpdateRequestForTransfer(
-      ResourceRequesterInfo* requester_info,
-      int route_id,
-      int request_id,
-      const network::ResourceRequest& request_data,
-      LoaderMap::iterator iter,
-      network::mojom::URLLoaderRequest mojo_request,
-      network::mojom::URLLoaderClientPtr url_loader_client);
-
-  // If |request_data| is for a request being transferred from another process,
-  // then CompleteTransfer method can be used to complete the transfer.
-  void CompleteTransfer(ResourceRequesterInfo* requester_info,
-                        int request_id,
-                        const network::ResourceRequest& request_data,
-                        int route_id,
-                        network::mojom::URLLoaderRequest mojo_request,
-                        network::mojom::URLLoaderClientPtr url_loader_client);
-
   void BeginRequest(ResourceRequesterInfo* requester_info,
                     int request_id,
                     const network::ResourceRequest& request_data,
@@ -660,13 +630,6 @@
   HttpAuthRelationType HttpAuthRelationTypeOf(const GURL& request_url,
                                               const GURL& first_party);
 
-  // Returns whether the URLRequest identified by |transferred_request_id| is
-  // currently in the process of being transferred to a different renderer.
-  // This happens if a request is redirected cross-site and needs to be resumed
-  // by a new process.
-  bool IsTransferredNavigation(
-      const GlobalRequestID& transferred_request_id) const;
-
   ResourceLoader* GetLoader(const GlobalRequestID& id) const;
   ResourceLoader* GetLoader(int child_id, int request_id) const;
 
diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc
index bad80bb..872326a 100644
--- a/content/browser/loader/resource_loader.cc
+++ b/content/browser/loader/resource_loader.cc
@@ -215,7 +215,6 @@
       request_(std::move(request)),
       handler_(std::move(handler)),
       delegate_(delegate),
-      is_transferring_(false),
       times_cancelled_before_request_start_(0),
       started_request_(false),
       times_cancelled_after_request_start_(0),
@@ -274,46 +273,6 @@
   CancelRequestInternal(error_code, false);
 }
 
-void ResourceLoader::MarkAsTransferring(
-    const base::Closure& on_transfer_complete_callback) {
-  CHECK(IsResourceTypeFrame(GetRequestInfo()->GetResourceType()))
-      << "Can only transfer for navigations";
-  is_transferring_ = true;
-  on_transfer_complete_callback_ = on_transfer_complete_callback;
-
-  int child_id = GetRequestInfo()->GetChildID();
-  AppCacheInterceptor::PrepareForCrossSiteTransfer(request(), child_id);
-  ServiceWorkerRequestHandler* handler =
-      ServiceWorkerRequestHandler::GetHandler(request());
-  if (handler)
-    handler->PrepareForCrossSiteTransfer(child_id);
-}
-
-void ResourceLoader::CompleteTransfer() {
-  // Although NavigationResourceThrottle defers at WillProcessResponse
-  // (DEFERRED_READ), it may be seeing a replay of events via
-  // MimeTypeResourceHandler, and so the request itself is actually deferred at
-  // a later read stage.
-  DCHECK(DEFERRED_READ == deferred_stage_ ||
-         DEFERRED_RESPONSE_COMPLETE == deferred_stage_);
-  DCHECK(is_transferring_);
-  DCHECK(!on_transfer_complete_callback_.is_null());
-
-  // In some cases, a process transfer doesn't really happen and the
-  // request is resumed in the original process. Real transfers to a new process
-  // are completed via ResourceDispatcherHostImpl::UpdateRequestForTransfer.
-  int child_id = GetRequestInfo()->GetChildID();
-  AppCacheInterceptor::MaybeCompleteCrossSiteTransferInOldProcess(
-      request(), child_id);
-  ServiceWorkerRequestHandler* handler =
-      ServiceWorkerRequestHandler::GetHandler(request());
-  if (handler)
-    handler->MaybeCompleteCrossSiteTransferInOldProcess(child_id);
-
-  is_transferring_ = false;
-  base::ResetAndReturn(&on_transfer_complete_callback_).Run();
-}
-
 ResourceRequestInfoImpl* ResourceLoader::GetRequestInfo() {
   return ResourceRequestInfoImpl::ForRequest(request_.get());
 }
@@ -545,8 +504,6 @@
 }
 
 void ResourceLoader::Resume(bool called_from_resource_controller) {
-  DCHECK(!is_transferring_);
-
   DeferredStage stage = deferred_stage_;
   deferred_stage_ = DEFERRED_NONE;
   switch (stage) {
diff --git a/content/browser/loader/resource_loader.h b/content/browser/loader/resource_loader.h
index e5276077..93ea0021 100644
--- a/content/browser/loader/resource_loader.h
+++ b/content/browser/loader/resource_loader.h
@@ -7,7 +7,6 @@
 
 #include <memory>
 
-#include "base/callback_forward.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
@@ -49,10 +48,6 @@
   void StartRequest();
   void CancelRequest(bool from_renderer);
 
-  bool is_transferring() const { return is_transferring_; }
-  void MarkAsTransferring(const base::Closure& on_transfer_complete_callback);
-  void CompleteTransfer();
-
   net::URLRequest* request() { return request_.get(); }
   ResourceRequestInfoImpl* GetRequestInfo();
 
@@ -163,14 +158,6 @@
 
   base::TimeTicks read_deferral_start_time_;
 
-  // Indicates that we are in a state of being transferred to a new downstream
-  // consumer.  We are waiting for a notification to complete the transfer, at
-  // which point we'll receive a new ResourceHandler.
-  bool is_transferring_;
-
-  // Called when a navigation has finished transfer.
-  base::Closure on_transfer_complete_callback_;
-
   // Instrumentation add to investigate http://crbug.com/503306.
   // TODO(mmenke): Remove once bug is fixed.
   int times_cancelled_before_request_start_;
diff --git a/content/browser/loader/resource_request_info_impl.cc b/content/browser/loader/resource_request_info_impl.cc
index 704bce3..36ffa04 100644
--- a/content/browser/loader/resource_request_info_impl.cc
+++ b/content/browser/loader/resource_request_info_impl.cc
@@ -69,7 +69,6 @@
       is_main_frame,                       // is_main_frame
       resource_type,                       // resource_type
       ui::PAGE_TRANSITION_LINK,            // transition_type
-      false,                               // should_replace_current_entry
       false,                               // is_download
       false,                               // is_stream
       allow_download,                      // allow_download
@@ -138,7 +137,6 @@
     bool is_main_frame,
     ResourceType resource_type,
     ui::PageTransition transition_type,
-    bool should_replace_current_entry,
     bool is_download,
     bool is_stream,
     bool allow_download,
@@ -164,7 +162,6 @@
       request_id_(request_id),
       render_frame_id_(render_frame_id),
       is_main_frame_(is_main_frame),
-      should_replace_current_entry_(should_replace_current_entry),
       is_download_(is_download),
       is_stream_(is_stream),
       allow_download_(allow_download),
@@ -347,26 +344,6 @@
   return GlobalRoutingID(GetChildID(), route_id_);
 }
 
-void ResourceRequestInfoImpl::UpdateForTransfer(
-    int route_id,
-    int render_frame_id,
-    int request_id,
-    ResourceRequesterInfo* requester_info,
-    network::mojom::URLLoaderRequest url_loader_request,
-    network::mojom::URLLoaderClientPtr url_loader_client) {
-  route_id_ = route_id;
-  render_frame_id_ = render_frame_id;
-  plugin_child_id_ = ChildProcessHost::kInvalidUniqueID;
-  request_id_ = request_id;
-  requester_info_ = requester_info;
-
-  // on_transfer_ is non-null only when MojoAsyncResourceHandler is used.
-  if (on_transfer_) {
-    on_transfer_.Run(std::move(url_loader_request),
-                     std::move(url_loader_client));
-  }
-}
-
 void ResourceRequestInfoImpl::ResetBody() {
   body_ = nullptr;
 }
diff --git a/content/browser/loader/resource_request_info_impl.h b/content/browser/loader/resource_request_info_impl.h
index 10cfae2..93f3018 100644
--- a/content/browser/loader/resource_request_info_impl.h
+++ b/content/browser/loader/resource_request_info_impl.h
@@ -36,10 +36,6 @@
 class ResourceRequestInfoImpl : public ResourceRequestInfo,
                                 public base::SupportsUserData::Data {
  public:
-  using TransferCallback =
-      base::Callback<void(network::mojom::URLLoaderRequest,
-                          network::mojom::URLLoaderClientPtr)>;
-
   // Returns the ResourceRequestInfoImpl associated with the given URLRequest.
   CONTENT_EXPORT static ResourceRequestInfoImpl* ForRequest(
       net::URLRequest* request);
@@ -58,7 +54,6 @@
       bool is_main_frame,
       ResourceType resource_type,
       ui::PageTransition transition_type,
-      bool should_replace_current_entry,
       bool is_download,
       bool is_stream,
       bool allow_download,
@@ -120,24 +115,6 @@
     return requester_info_.get();
   }
 
-  // Updates the data associated with this request after it is is transferred
-  // to a new renderer process.  Not all data will change during a transfer.
-  // We do not expect the ResourceContext to change during navigation, so that
-  // does not need to be updated.
-  void UpdateForTransfer(int route_id,
-                         int render_frame_id,
-                         int request_id,
-                         ResourceRequesterInfo* requester_info,
-                         network::mojom::URLLoaderRequest url_loader_request,
-                         network::mojom::URLLoaderClientPtr url_loader_client);
-
-  // Whether this request is part of a navigation that should replace the
-  // current session history entry. This state is shuffled up and down the stack
-  // for request transfers.
-  bool should_replace_current_entry() const {
-    return should_replace_current_entry_;
-  }
-
   // DetachableResourceHandler for this request.  May be NULL.
   DetachableResourceHandler* detachable_handler() const {
     return detachable_handler_;
@@ -198,10 +175,6 @@
     navigation_ui_data_ = std::move(navigation_ui_data);
   }
 
-  void set_on_transfer(const TransferCallback& on_transfer) {
-    on_transfer_ = on_transfer;
-  }
-
   void set_devtools_status(DevToolsStatus devtools_status) {
     devtools_status_ = devtools_status;
   }
@@ -244,7 +217,6 @@
   int request_id_;
   int render_frame_id_;
   bool is_main_frame_;
-  bool should_replace_current_entry_;
   bool is_download_;
   bool is_stream_;
   bool allow_download_;
@@ -274,11 +246,6 @@
   // Keeps upload body blobs alive for the duration of the request.
   BlobHandles blob_handles_;
 
-  // This callback is set by MojoAsyncResourceHandler to update its mojo binding
-  // and remote endpoint. This callback will be removed once PlzNavigate is
-  // shipped.
-  TransferCallback on_transfer_;
-
   std::string custom_cancel_reason_;
 
   DISALLOW_COPY_AND_ASSIGN(ResourceRequestInfoImpl);
diff --git a/content/browser/payments/payment_app_context_impl.cc b/content/browser/payments/payment_app_context_impl.cc
index ed97900..f4801e1 100644
--- a/content/browser/payments/payment_app_context_impl.cc
+++ b/content/browser/payments/payment_app_context_impl.cc
@@ -7,7 +7,6 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/memory/ptr_util.h"
 #include "base/stl_util.h"
 #include "content/browser/payments/payment_manager.h"
 
@@ -82,9 +81,9 @@
 void PaymentAppContextImpl::CreatePaymentManagerOnIO(
     mojo::InterfaceRequest<payments::mojom::PaymentManager> request) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  PaymentManager* payment_manager =
-      new PaymentManager(this, std::move(request));
-  payment_managers_[payment_manager] = base::WrapUnique(payment_manager);
+  auto payment_manager =
+      std::make_unique<PaymentManager>(this, std::move(request));
+  payment_managers_[payment_manager.get()] = std::move(payment_manager);
 }
 
 void PaymentAppContextImpl::ShutdownOnIO() {
diff --git a/content/browser/renderer_host/input/fling_controller.cc b/content/browser/renderer_host/input/fling_controller.cc
index cfd3ac2f..5650eb0 100644
--- a/content/browser/renderer_host/input/fling_controller.cc
+++ b/content/browser/renderer_host/input/fling_controller.cc
@@ -28,16 +28,13 @@
 
 FlingController::FlingController(
     GestureEventQueue* gesture_event_queue,
-    TouchpadTapSuppressionControllerClient* touchpad_client,
     FlingControllerClient* fling_client,
     const Config& config)
     : gesture_event_queue_(gesture_event_queue),
       client_(fling_client),
       touchpad_tap_suppression_controller_(
-          touchpad_client,
           config.touchpad_tap_suppression_config),
       touchscreen_tap_suppression_controller_(
-          gesture_event_queue,
           config.touchscreen_tap_suppression_config),
       fling_in_progress_(false),
       send_wheel_events_nonblocking_(
@@ -45,7 +42,6 @@
               features::kTouchpadAndWheelScrollLatching) &&
           base::FeatureList::IsEnabled(features::kAsyncWheelEvents)) {
   DCHECK(gesture_event_queue);
-  DCHECK(touchpad_client);
   DCHECK(fling_client);
 }
 
@@ -59,8 +55,7 @@
   if (fling_in_progress_)
     return !fling_booster_->fling_cancellation_is_deferred();
 
-  // Auto-scroll flings are still handled by renderer.
-  return !gesture_event_queue_->ShouldDiscardFlingCancelEvent(gesture_event);
+  return false;
 }
 
 bool FlingController::ShouldForwardForTapSuppression(
@@ -69,10 +64,11 @@
     case WebInputEvent::kGestureFlingCancel:
       if (gesture_event.event.SourceDevice() ==
           blink::kWebGestureDeviceTouchscreen) {
-        touchscreen_tap_suppression_controller_.GestureFlingCancel();
+        touchscreen_tap_suppression_controller_
+            .GestureFlingCancelStoppedFling();
       } else if (gesture_event.event.SourceDevice() ==
                  blink::kWebGestureDeviceTouchpad) {
-        touchpad_tap_suppression_controller_.GestureFlingCancel();
+        touchpad_tap_suppression_controller_.GestureFlingCancelStoppedFling();
       }
       return true;
     case WebInputEvent::kGestureTapDown:
@@ -172,18 +168,9 @@
 void FlingController::ProcessGestureFlingCancel(
     const GestureEventWithLatencyInfo& gesture_event) {
   fling_in_progress_ = false;
-  bool processed = false;
-  if (fling_curve_) {
+
+  if (fling_curve_)
     CancelCurrentFling();
-    processed = true;
-  }
-  // FlingCancelEvent handled without being sent to the renderer.
-  blink::WebGestureDevice source_device = gesture_event.event.SourceDevice();
-  if (source_device == blink::kWebGestureDeviceTouchscreen) {
-    touchscreen_tap_suppression_controller_.GestureFlingCancelAck(processed);
-  } else if (source_device == blink::kWebGestureDeviceTouchpad) {
-    touchpad_tap_suppression_controller_.GestureFlingCancelAck(processed);
-  }
 }
 
 gfx::Vector2dF FlingController::ProgressFling(base::TimeTicks current_time) {
diff --git a/content/browser/renderer_host/input/fling_controller.h b/content/browser/renderer_host/input/fling_controller.h
index c762b57..4a0afe5 100644
--- a/content/browser/renderer_host/input/fling_controller.h
+++ b/content/browser/renderer_host/input/fling_controller.h
@@ -62,7 +62,6 @@
   };
 
   FlingController(GestureEventQueue* gesture_event_queue,
-                  TouchpadTapSuppressionControllerClient* touchpad_client,
                   FlingControllerClient* fling_client,
                   const Config& config);
 
diff --git a/content/browser/renderer_host/input/fling_controller_unittest.cc b/content/browser/renderer_host/input/fling_controller_unittest.cc
index 07f1e41..fa26165 100644
--- a/content/browser/renderer_host/input/fling_controller_unittest.cc
+++ b/content/browser/renderer_host/input/fling_controller_unittest.cc
@@ -22,11 +22,9 @@
 class FakeFlingController : public FlingController {
  public:
   FakeFlingController(GestureEventQueue* gesture_event_queue,
-                      TouchpadTapSuppressionControllerClient* touchpad_client,
                       FlingControllerClient* fling_client,
                       const Config& config)
       : FlingController(gesture_event_queue,
-                        touchpad_client,
                         fling_client,
                         config) {}
 
@@ -34,7 +32,6 @@
 };
 
 class FlingControllerTest : public testing::Test,
-                            public TouchpadTapSuppressionControllerClient,
                             public GestureEventQueueClient,
                             public FlingControllerClient {
  public:
@@ -46,18 +43,14 @@
   ~FlingControllerTest() override {}
 
   void SetUp() override {
-    queue_ = std::make_unique<GestureEventQueue>(this, this, this,
+    queue_ = std::make_unique<GestureEventQueue>(this, this,
                                                  GestureEventQueue::Config());
     fling_controller_ = std::make_unique<FakeFlingController>(
-        queue_.get(), this, this, FlingController::Config());
+        queue_.get(), this, FlingController::Config());
     feature_list_.InitFromCommandLine(
         features::kTouchpadAndWheelScrollLatching.name, "");
   }
 
-  // TouchpadTapSuppressionControllerClient
-  void SendMouseEventImmediately(
-      const MouseEventWithLatencyInfo& event) override {}
-
   // GestureEventQueueClient
   void SendGestureEventImmediately(
       const GestureEventWithLatencyInfo& event) override {}
diff --git a/content/browser/renderer_host/input/gesture_event_queue.cc b/content/browser/renderer_host/input/gesture_event_queue.cc
index 673be7e..900eb52f 100644
--- a/content/browser/renderer_host/input/gesture_event_queue.cc
+++ b/content/browser/renderer_host/input/gesture_event_queue.cc
@@ -26,7 +26,6 @@
 
 GestureEventQueue::GestureEventQueue(
     GestureEventQueueClient* client,
-    TouchpadTapSuppressionControllerClient* touchpad_client,
     FlingControllerClient* fling_client,
     const Config& config)
     : client_(client),
@@ -37,11 +36,9 @@
           base::FeatureList::IsEnabled(features::kVsyncAlignedInputEvents)),
       debounce_interval_(config.debounce_interval),
       fling_controller_(this,
-                        touchpad_client,
                         fling_client,
                         config.fling_config) {
   DCHECK(client);
-  DCHECK(touchpad_client);
   DCHECK(fling_client);
 }
 
diff --git a/content/browser/renderer_host/input/gesture_event_queue.h b/content/browser/renderer_host/input/gesture_event_queue.h
index fbba8a45..b014137 100644
--- a/content/browser/renderer_host/input/gesture_event_queue.h
+++ b/content/browser/renderer_host/input/gesture_event_queue.h
@@ -72,7 +72,6 @@
 
   // Both |client| and |touchpad_client| must outlive the GestureEventQueue.
   GestureEventQueue(GestureEventQueueClient* client,
-                    TouchpadTapSuppressionControllerClient* touchpad_client,
                     FlingControllerClient* fling_client,
                     const Config& config);
   ~GestureEventQueue();
diff --git a/content/browser/renderer_host/input/gesture_event_queue_unittest.cc b/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
index 75ad2cd..c9e1978 100644
--- a/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
@@ -36,7 +36,6 @@
 
 class GestureEventQueueTest : public testing::Test,
                               public GestureEventQueueClient,
-                              public TouchpadTapSuppressionControllerClient,
                               public FlingControllerClient {
  public:
   GestureEventQueueTest() : GestureEventQueueTest(false) {}
@@ -56,7 +55,7 @@
 
   // testing::Test
   void SetUp() override {
-    queue_.reset(new GestureEventQueue(this, this, this, DefaultConfig()));
+    queue_.reset(new GestureEventQueue(this, this, DefaultConfig()));
   }
 
   void TearDown() override {
@@ -65,18 +64,14 @@
     queue_.reset();
   }
 
-  void SetUpForTapSuppression(int max_cancel_to_down_time_ms,
-                              int max_tap_gap_time_ms) {
+  void SetUpForTapSuppression(int max_cancel_to_down_time_ms) {
     GestureEventQueue::Config gesture_config;
     gesture_config.fling_config.touchscreen_tap_suppression_config.enabled =
         true;
     gesture_config.fling_config.touchscreen_tap_suppression_config
         .max_cancel_to_down_time =
         base::TimeDelta::FromMilliseconds(max_cancel_to_down_time_ms);
-    gesture_config.fling_config.touchscreen_tap_suppression_config
-        .max_tap_gap_time =
-        base::TimeDelta::FromMilliseconds(max_tap_gap_time_ms);
-    queue_.reset(new GestureEventQueue(this, this, this, gesture_config));
+    queue_.reset(new GestureEventQueue(this, this, gesture_config));
   }
 
   // GestureEventQueueClient
@@ -101,10 +96,6 @@
     }
   }
 
-  // TouchpadTapSuppressionControllerClient
-  void SendMouseEventImmediately(
-      const MouseEventWithLatencyInfo& event) override {}
-
   // FlingControllerClient
   void SendGeneratedWheelEvent(
       const MouseWheelEventWithLatencyInfo& wheel_event) override {}
@@ -1159,7 +1150,7 @@
 // Test that the fling cancelling tap down event and its following tap get
 // suppressed when tap suppression is enabled.
 TEST_F(GestureEventQueueTest, TapGetsSuppressedAfterTapDownCancellsFling) {
-  SetUpForTapSuppression(400, 200);
+  SetUpForTapSuppression(400);
   SimulateGestureFlingStartEvent(0, -10, blink::kWebGestureDeviceTouchscreen);
   EXPECT_TRUE(FlingInProgress());
   // The fling start event is not sent to the renderer.
diff --git a/content/browser/renderer_host/input/input_router_config_helper.cc b/content/browser/renderer_host/input/input_router_config_helper.cc
index f76d4df..6028f64 100644
--- a/content/browser/renderer_host/input/input_router_config_helper.cc
+++ b/content/browser/renderer_host/input/input_router_config_helper.cc
@@ -50,24 +50,11 @@
       .max_cancel_to_down_time = base::TimeDelta::FromMilliseconds(
       gesture_config->fling_max_cancel_to_down_time_in_ms());
 
-  // Tap suppression controller forwards the stashed tapDown and drops the rest
-  // of the stashed events when the tapDownTimer expires. If a fling cancel ack
-  // with |processed = false| arrives before the timer expiration, all stashed
-  // events will be forwarded. The timer is used to avoid waiting for an
-  // arbitrarily late fling cancel ack. Its delay should be large enough for
-  // a long press to get stashed and forwarded if needed.
-  config.fling_config.touchscreen_tap_suppression_config.max_tap_gap_time =
-      base::TimeDelta::FromMilliseconds(
-          gesture_config->long_press_time_in_ms() + 50);
-
   config.fling_config.touchpad_tap_suppression_config.enabled =
       gesture_config->fling_touchpad_tap_suppression_enabled();
   config.fling_config.touchpad_tap_suppression_config.max_cancel_to_down_time =
       base::TimeDelta::FromMilliseconds(
           gesture_config->fling_max_cancel_to_down_time_in_ms());
-  config.fling_config.touchpad_tap_suppression_config.max_tap_gap_time =
-      base::TimeDelta::FromMilliseconds(
-          gesture_config->fling_max_tap_gap_time_in_ms());
 
   return config;
 }
diff --git a/content/browser/renderer_host/input/input_router_impl.cc b/content/browser/renderer_host/input/input_router_impl.cc
index be69517..4c896cfd 100644
--- a/content/browser/renderer_host/input/input_router_impl.cc
+++ b/content/browser/renderer_host/input/input_router_impl.cc
@@ -15,7 +15,6 @@
 #include "content/browser/renderer_host/input/gesture_event_queue.h"
 #include "content/browser/renderer_host/input/input_disposition_handler.h"
 #include "content/browser/renderer_host/input/input_router_client.h"
-#include "content/browser/renderer_host/input/touchpad_tap_suppression_controller.h"
 #include "content/common/content_constants_internal.h"
 #include "content/common/edit_command.h"
 #include "content/common/input/input_handler.mojom.h"
@@ -81,7 +80,7 @@
           features::kTouchpadAndWheelScrollLatching)),
       wheel_event_queue_(this, wheel_scroll_latching_enabled_),
       touch_event_queue_(this, config.touch_config),
-      gesture_event_queue_(this, this, this, config.gesture_config),
+      gesture_event_queue_(this, this, config.gesture_config),
       device_scale_factor_(1.f),
       host_binding_(this),
       frame_host_binding_(this),
@@ -99,7 +98,7 @@
     const MouseEventWithLatencyInfo& mouse_event) {
   if (mouse_event.event.GetType() == WebInputEvent::kMouseDown &&
       gesture_event_queue_.GetTouchpadTapSuppressionController()
-          ->ShouldDeferMouseDown(mouse_event))
+          ->ShouldSuppressMouseDown(mouse_event))
     return;
   if (mouse_event.event.GetType() == WebInputEvent::kMouseUp &&
       gesture_event_queue_.GetTouchpadTapSuppressionController()
diff --git a/content/browser/renderer_host/input/input_router_impl.h b/content/browser/renderer_host/input/input_router_impl.h
index a7da333..3367e32 100644
--- a/content/browser/renderer_host/input/input_router_impl.h
+++ b/content/browser/renderer_host/input/input_router_impl.h
@@ -21,7 +21,6 @@
 #include "content/browser/renderer_host/input/mouse_wheel_event_queue.h"
 #include "content/browser/renderer_host/input/passthrough_touch_event_queue.h"
 #include "content/browser/renderer_host/input/touch_action_filter.h"
-#include "content/browser/renderer_host/input/touchpad_tap_suppression_controller.h"
 #include "content/common/input/input_event_stream_validator.h"
 #include "content/common/input/input_handler.mojom.h"
 #include "content/common/widget.mojom.h"
@@ -56,7 +55,6 @@
       public FlingControllerClient,
       public MouseWheelEventQueueClient,
       public PassthroughTouchEventQueueClient,
-      public TouchpadTapSuppressionControllerClient,
       public mojom::WidgetInputHandlerHost {
  public:
   InputRouterImpl(InputRouterImplClient* client,
@@ -109,9 +107,7 @@
   // Keeps track of last position of touch points and sets MovementXY for them.
   void SetMovementXYForTouchPoints(blink::WebTouchEvent* event);
 
-  // TouchpadTapSuppressionControllerClient
-  void SendMouseEventImmediately(
-      const MouseEventWithLatencyInfo& mouse_event) override;
+  void SendMouseEventImmediately(const MouseEventWithLatencyInfo& mouse_event);
 
   // PassthroughTouchEventQueueClient
   void SendTouchEventImmediately(
diff --git a/content/browser/renderer_host/input/tap_suppression_controller.cc b/content/browser/renderer_host/input/tap_suppression_controller.cc
index 5d14ea93..ff618b5 100644
--- a/content/browser/renderer_host/input/tap_suppression_controller.cc
+++ b/content/browser/renderer_host/input/tap_suppression_controller.cc
@@ -6,102 +6,45 @@
 
 #include "base/logging.h"
 #include "base/trace_event/trace_event.h"
-#include "content/browser/renderer_host/input/tap_suppression_controller_client.h"
 #include "ui/events/gesture_detection/gesture_configuration.h"
 
 namespace content {
 
-// The tapDownTimer is used to avoid waiting for an arbitrarily late fling
-// cancel ack. While the timer is running, if a fling cancel ack with
-// |Processed = false| arrives, all stashed gesture events get forwarded. If
-// the timer expires, the controller forwards stashed GestureTapDown only, and
-// drops the rest of the stashed events. The timer delay should be large enough
-// for a GestureLongPress to get stashed and forwarded if needed. It's still
-// possible for a GestureLongPress to arrive after the timer expiration. In
-// this case, it will be suppressed if the controller is in SUPPRESSING_TAPS
-// state.
-
 TapSuppressionController::Config::Config()
     : enabled(false),
       max_cancel_to_down_time(base::TimeDelta::FromMilliseconds(180)) {
-  ui::GestureConfiguration* gesture_config =
-      ui::GestureConfiguration::GetInstance();
-  max_tap_gap_time = base::TimeDelta::FromMilliseconds(
-      gesture_config->long_press_time_in_ms() + 50);
 }
 
-TapSuppressionController::TapSuppressionController(
-    TapSuppressionControllerClient* client,
-    const Config& config)
-    : client_(client),
-      state_(config.enabled ? NOTHING : DISABLED),
-      max_cancel_to_down_time_(config.max_cancel_to_down_time),
-      max_tap_gap_time_(config.max_tap_gap_time) {
-}
+TapSuppressionController::TapSuppressionController(const Config& config)
+    : state_(config.enabled ? NOTHING : DISABLED),
+      max_cancel_to_down_time_(config.max_cancel_to_down_time) {}
 
 TapSuppressionController::~TapSuppressionController() {}
 
-void TapSuppressionController::GestureFlingCancel() {
-  switch (state_) {
-    case DISABLED:
-      break;
-    case NOTHING:
-    case GFC_IN_PROGRESS:
-    case LAST_CANCEL_STOPPED_FLING:
-    case SUPPRESSING_TAPS:
-      state_ = GFC_IN_PROGRESS;
-      break;
-    case TAP_DOWN_STASHED:
-      break;
-  }
-}
-
-void TapSuppressionController::GestureFlingCancelAck(bool processed) {
+void TapSuppressionController::GestureFlingCancelStoppedFling() {
   base::TimeTicks event_time = Now();
   switch (state_) {
     case DISABLED:
-    case NOTHING:
     case SUPPRESSING_TAPS:
       break;
-    case GFC_IN_PROGRESS:
-      if (processed)
-        fling_cancel_time_ = event_time;
+    case NOTHING:
+      fling_cancel_time_ = event_time;
       state_ = LAST_CANCEL_STOPPED_FLING;
       break;
-    case TAP_DOWN_STASHED:
-      if (!processed) {
-        TRACE_EVENT0("browser",
-                     "TapSuppressionController::GestureFlingCancelAck");
-        StopTapDownTimer();
-        // If the fling cancel is not processed, forward all stashed
-        // gesture events.
-        client_->ForwardStashedGestureEvents();
-        state_ = NOTHING;
-      }  // Else waiting for the timer to release the stashed tap down.
-      break;
     case LAST_CANCEL_STOPPED_FLING:
       break;
   }
 }
 
-bool TapSuppressionController::ShouldDeferTapDown() {
+bool TapSuppressionController::ShouldSuppressTapDown() {
   base::TimeTicks event_time = Now();
   switch (state_) {
     case DISABLED:
     case NOTHING:
       return false;
-    case GFC_IN_PROGRESS:
-      state_ = TAP_DOWN_STASHED;
-      StartTapDownTimer(max_tap_gap_time_);
-      return true;
-    case TAP_DOWN_STASHED:
-      NOTREACHED() << "TapDown on TAP_DOWN_STASHED state";
-      state_ = NOTHING;
-      return false;
     case LAST_CANCEL_STOPPED_FLING:
       if ((event_time - fling_cancel_time_) < max_cancel_to_down_time_) {
-        state_ = TAP_DOWN_STASHED;
-        StartTapDownTimer(max_tap_gap_time_);
+        state_ = SUPPRESSING_TAPS;
         return true;
       } else {
         state_ = NOTHING;
@@ -120,16 +63,7 @@
   switch (state_) {
     case DISABLED:
     case NOTHING:
-    case GFC_IN_PROGRESS:
       return false;
-    case TAP_DOWN_STASHED:
-      // A tap cancel happens before long tap and two finger tap events. To
-      // drop the latter events as well as the tap cancel, change the state
-      // to "SUPPRESSING_TAPS" when the stashed tap down is dropped.
-      state_ = SUPPRESSING_TAPS;
-      StopTapDownTimer();
-      client_->DropStashedTapDown();
-      return true;
     case LAST_CANCEL_STOPPED_FLING:
       NOTREACHED() << "Invalid tap end on LAST_CANCEL_STOPPED_FLING state";
       return true;
@@ -143,36 +77,4 @@
   return base::TimeTicks::Now();
 }
 
-void TapSuppressionController::StartTapDownTimer(const base::TimeDelta& delay) {
-  tap_down_timer_.Start(FROM_HERE, delay, this,
-                        &TapSuppressionController::TapDownTimerExpired);
-}
-
-void TapSuppressionController::StopTapDownTimer() {
-  tap_down_timer_.Stop();
-}
-
-void TapSuppressionController::TapDownTimerExpired() {
-  switch (state_) {
-    case DISABLED:
-    case NOTHING:
-    case SUPPRESSING_TAPS:
-      NOTREACHED() << "Timer fired on invalid state.";
-      break;
-    case GFC_IN_PROGRESS:
-    case LAST_CANCEL_STOPPED_FLING:
-      NOTREACHED() << "Timer fired on invalid state.";
-      state_ = NOTHING;
-      break;
-    case TAP_DOWN_STASHED:
-      TRACE_EVENT0("browser",
-                   "TapSuppressionController::TapDownTimerExpired");
-      // When the timer expires, only forward the stashed tap down event, and
-      // drop other stashed gesture events (show press or long press).
-      client_->ForwardStashedTapDown();
-      state_ = SUPPRESSING_TAPS;
-      break;
-  }
-}
-
 }  // namespace content
diff --git a/content/browser/renderer_host/input/tap_suppression_controller.h b/content/browser/renderer_host/input/tap_suppression_controller.h
index b238258b..bcd8ba3 100644
--- a/content/browser/renderer_host/input/tap_suppression_controller.h
+++ b/content/browser/renderer_host/input/tap_suppression_controller.h
@@ -12,8 +12,6 @@
 
 namespace content {
 
-class TapSuppressionControllerClient;
-
 // The core controller for suppression of taps (touchpad or touchscreen)
 // immediately following a GestureFlingCancel event (caused by the same tap).
 // Only taps of sufficient speed and within a specified time window after a
@@ -29,27 +27,19 @@
     // The maximum time allowed between a GestureFlingCancel and its
     // corresponding tap down.
     base::TimeDelta max_cancel_to_down_time;
-
-    // The maximum time allowed between a single tap's down and up events.
-    base::TimeDelta max_tap_gap_time;
   };
 
-  TapSuppressionController(TapSuppressionControllerClient* client,
-                           const Config& config);
+  TapSuppressionController(const Config& config);
   virtual ~TapSuppressionController();
 
-  // Should be called whenever a GestureFlingCancel event is received.
-  void GestureFlingCancel();
-
-  // Should be called whenever an ACK for a GestureFlingCancel event is
-  // received. |processed| is true when the GestureFlingCancel actually stopped
-  // a fling and therefore should suppress the forwarding of the following tap.
-  void GestureFlingCancelAck(bool processed);
+  // Should be called whenever a GestureFlingCancel actually stopped a fling and
+  // therefore the controller should suppress the forwarding of the following
+  // tap.
+  void GestureFlingCancelStoppedFling();
 
   // Should be called whenever a tap down (touchpad or touchscreen) is received.
-  // Returns true if the tap down should be deferred. The caller is responsible
-  // for keeping the event for later release, if needed.
-  bool ShouldDeferTapDown();
+  // Returns true if the tap down should be suppressed.
+  bool ShouldSuppressTapDown();
 
   // Should be called whenever a tap ending event is received. Returns true if
   // the tap event should be suppressed.
@@ -57,33 +47,23 @@
 
  protected:
   virtual base::TimeTicks Now();
-  virtual void StartTapDownTimer(const base::TimeDelta& delay);
-  virtual void StopTapDownTimer();
-  void TapDownTimerExpired();
-
  private:
   friend class MockTapSuppressionController;
 
   enum State {
     DISABLED,
     NOTHING,
-    GFC_IN_PROGRESS,
-    TAP_DOWN_STASHED,
     LAST_CANCEL_STOPPED_FLING,
-    // When the stashed TapDown event is dropped or forwarded due to tap down
-    // timer expiration, the controller enters the SUPPRESSING_TAPS state.
-    // This state shows that the controller will suppress LongTap,
-    // TwoFingerTap, and TapCancel gesture events until the next tapDown event
-    // arrives.
+    // When the stashed TapDown event is dropped, the controller enters the
+    // SUPPRESSING_TAPS state. This state shows that the controller will
+    // suppress LongTap, TwoFingerTap, and TapCancel gesture events until the
+    // next tapDown event arrives.
     SUPPRESSING_TAPS,
   };
 
-  TapSuppressionControllerClient* client_;
-  base::OneShotTimer tap_down_timer_;
   State state_;
 
   base::TimeDelta max_cancel_to_down_time_;
-  base::TimeDelta max_tap_gap_time_;
 
   // TODO(rjkroege): During debugging, the event times did not prove reliable.
   // Replace the use of base::TimeTicks with an accurate event time when they
diff --git a/content/browser/renderer_host/input/tap_suppression_controller_client.h b/content/browser/renderer_host/input/tap_suppression_controller_client.h
deleted file mode 100644
index 0b917a6..0000000
--- a/content/browser/renderer_host/input/tap_suppression_controller_client.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2013 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 CONTENT_BROWSER_RENDERER_HOST_INPUT_TAP_SUPPRESSION_CONTROLLER_CLIENT_H_
-#define CONTENT_BROWSER_RENDERER_HOST_INPUT_TAP_SUPPRESSION_CONTROLLER_CLIENT_H_
-
-#include "base/macros.h"
-
-namespace content {
-
-// This class provides an interface for callbacks made by
-// TapSuppressionController.
-class TapSuppressionControllerClient {
- public:
-  virtual ~TapSuppressionControllerClient() {}
-
-  // Called whenever the deferred tap down (if saved) should be dropped totally.
-  virtual void DropStashedTapDown() = 0;
-
-  // Called whenever the deferred tap down and other gesture events (if saved)
-  // should be forwarded to the renderer. The tap down (and possibly other
-  // gesture events) should go back to normal path they were on before being
-  // deferred.
-  virtual void ForwardStashedGestureEvents() = 0;
-
-  // Called whenever only the deferred tap down (if saved) should be forwarded
-  // to the renderer. Other saved gesture events will be dropped.
-  virtual void ForwardStashedTapDown() = 0;
-
- protected:
-  TapSuppressionControllerClient() {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(TapSuppressionControllerClient);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_RENDERER_HOST_INPUT_TAP_SUPPRESSION_CONTROLLER_CLIENT_H_
diff --git a/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc b/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
index b064a5bf..3f23de8 100644
--- a/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
+++ b/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
@@ -7,57 +7,41 @@
 #include <memory>
 
 #include "base/macros.h"
-#include "content/browser/renderer_host/input/tap_suppression_controller_client.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using base::TimeDelta;
 
 namespace content {
 
-class MockTapSuppressionController : public TapSuppressionController,
-                                     public TapSuppressionControllerClient {
+class MockTapSuppressionController : public TapSuppressionController {
  public:
   using TapSuppressionController::DISABLED;
   using TapSuppressionController::NOTHING;
-  using TapSuppressionController::GFC_IN_PROGRESS;
-  using TapSuppressionController::TAP_DOWN_STASHED;
   using TapSuppressionController::LAST_CANCEL_STOPPED_FLING;
   using TapSuppressionController::SUPPRESSING_TAPS;
 
   enum Action {
-    NONE                                 = 0,
-    TAP_DOWN_DEFERRED                    = 1 << 0,
-    TAP_DOWN_FORWARDED                   = 1 << 1,
-    TAP_DOWN_DROPPED                     = 1 << 2,
-    TAP_UP_SUPPRESSED                    = 1 << 3,
-    TAP_UP_FORWARDED                     = 1 << 4,
-    TAP_CANCEL_SUPPRESSED                = 1 << 5,
-    TAP_CANCEL_FORWARDED                 = 1 << 6,
-    STASHED_TAP_DOWN_FORWARDED           = 1 << 7,
+    NONE = 0,
+    TAP_DOWN_FORWARDED = 1 << 0,
+    TAP_DOWN_SUPPRESSED = 1 << 1,
+    TAP_UP_SUPPRESSED = 1 << 2,
+    TAP_UP_FORWARDED = 1 << 3,
   };
 
   MockTapSuppressionController(const TapSuppressionController::Config& config)
-      : TapSuppressionController(this, config),
-        last_actions_(NONE),
-        time_(),
-        timer_started_(false) {}
+      : TapSuppressionController(config), last_actions_(NONE), time_() {}
 
   ~MockTapSuppressionController() override {}
 
-  void SendGestureFlingCancel() {
+  void NotifyGestureFlingCancelStoppedFling() {
     last_actions_ = NONE;
-    GestureFlingCancel();
-  }
-
-  void SendGestureFlingCancelAck(bool processed) {
-    last_actions_ = NONE;
-    GestureFlingCancelAck(processed);
+    GestureFlingCancelStoppedFling();
   }
 
   void SendTapDown() {
     last_actions_ = NONE;
-    if (ShouldDeferTapDown())
-      last_actions_ |= TAP_DOWN_DEFERRED;
+    if (ShouldSuppressTapDown())
+      last_actions_ |= TAP_DOWN_SUPPRESSED;
     else
       last_actions_ |= TAP_DOWN_FORWARDED;
   }
@@ -70,23 +54,9 @@
       last_actions_ |= TAP_UP_FORWARDED;
   }
 
-  void SendTapCancel() {
-    bool stashed_tap_down_forwarded =
-        last_actions_ & STASHED_TAP_DOWN_FORWARDED;
-    last_actions_ = NONE;
-    if (!stashed_tap_down_forwarded && ShouldSuppressTapEnd())
-      last_actions_ |= TAP_CANCEL_SUPPRESSED;
-    else
-      last_actions_ |= TAP_CANCEL_FORWARDED;
-  }
-
   void AdvanceTime(const base::TimeDelta& delta) {
     last_actions_ = NONE;
     time_ += delta;
-    if (timer_started_ && time_ >= timer_expiry_time_) {
-      timer_started_ = false;
-      TapDownTimerExpired();
-    }
   }
 
   State state() { return state_; }
@@ -96,36 +66,17 @@
  protected:
   base::TimeTicks Now() override { return time_; }
 
-  void StartTapDownTimer(const base::TimeDelta& delay) override {
-    timer_expiry_time_ = time_ + delay;
-    timer_started_ = true;
-  }
-
-  void StopTapDownTimer() override { timer_started_ = false; }
 
  private:
-  // TapSuppressionControllerClient implementation
-  void DropStashedTapDown() override { last_actions_ |= TAP_DOWN_DROPPED; }
-
-  void ForwardStashedGestureEvents() override {
-    last_actions_ |= STASHED_TAP_DOWN_FORWARDED;
-  }
-
-  void ForwardStashedTapDown() override {
-    last_actions_ |= STASHED_TAP_DOWN_FORWARDED;
-  }
 
   // Hiding some derived public methods
-  using TapSuppressionController::GestureFlingCancel;
-  using TapSuppressionController::GestureFlingCancelAck;
-  using TapSuppressionController::ShouldDeferTapDown;
+  using TapSuppressionController::GestureFlingCancelStoppedFling;
+  using TapSuppressionController::ShouldSuppressTapDown;
   using TapSuppressionController::ShouldSuppressTapEnd;
 
   int last_actions_;
 
   base::TimeTicks time_;
-  bool timer_started_;
-  base::TimeTicks timer_expiry_time_;
 
   DISALLOW_COPY_AND_ASSIGN(MockTapSuppressionController);
 };
@@ -149,25 +100,17 @@
     TapSuppressionController::Config config;
     config.enabled = true;
     config.max_cancel_to_down_time = base::TimeDelta::FromMilliseconds(10);
-    config.max_tap_gap_time = base::TimeDelta::FromMilliseconds(10);
     return config;
   }
 
   std::unique_ptr<MockTapSuppressionController> tap_suppression_controller_;
 };
 
-// Test TapSuppressionController for when GestureFlingCancel Ack comes before
-// TapDown and everything happens without any delays.
+// Test TapSuppressionController for when GestureFlingCancel actually stops
+// fling and the tap down event arrives without any delay.
 TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapFast) {
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
-            tap_suppression_controller_->state());
-
-  // Send GestureFlingCancel Ack.
-  tap_suppression_controller_->SendGestureFlingCancelAck(true);
+  // Notify the controller that the GFC has stooped an active fling.
+  tap_suppression_controller_->NotifyGestureFlingCancelStoppedFling();
   EXPECT_EQ(MockTapSuppressionController::NONE,
             tap_suppression_controller_->last_actions());
   EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING,
@@ -175,158 +118,24 @@
 
   // Send TapDown. This TapDown should be suppressed.
   tap_suppression_controller_->SendTapDown();
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
+  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_SUPPRESSED,
             tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
+  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
             tap_suppression_controller_->state());
 
   // Send TapUp. This TapUp should be suppressed.
   tap_suppression_controller_->SendTapUp();
-  EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED |
-            MockTapSuppressionController::TAP_DOWN_DROPPED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
-            tap_suppression_controller_->state());
-}
-
-// Test TapSuppressionController for when GestureFlingCancel Ack comes before
-// TapDown, but there is a small delay between TapDown and TapUp.
-TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapInsufficientlyLateTapUp) {
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
-            tap_suppression_controller_->state());
-
-  // Send GestureFlingCancel Ack.
-  tap_suppression_controller_->SendGestureFlingCancelAck(true);
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING,
-            tap_suppression_controller_->state());
-
-  // Send TapDown. This TapDown should be suppressed.
-  tap_suppression_controller_->SendTapDown();
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Wait less than allowed delay between TapDown and TapUp, so they are still
-  // considered a tap.
-  tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(7));
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Send TapUp. This TapUp should be suppressed.
-  tap_suppression_controller_->SendTapUp();
-  EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED |
-            MockTapSuppressionController::TAP_DOWN_DROPPED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
-            tap_suppression_controller_->state());
-}
-
-// Test TapSuppressionController for when GestureFlingCancel Ack comes before
-// TapDown, but there is a long delay between TapDown and TapUp.
-TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapSufficientlyLateTapUp) {
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
-            tap_suppression_controller_->state());
-
-  // Send processed GestureFlingCancel Ack.
-  tap_suppression_controller_->SendGestureFlingCancelAck(true);
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING,
-            tap_suppression_controller_->state());
-
-  // Send TapDown. This TapDown should be suppressed, for now.
-  tap_suppression_controller_->SendTapDown();
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Wait more than allowed delay between TapDown and TapUp, so they are not
-  // considered a tap. This should release the previously suppressed TapDown.
-  tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(13));
-  EXPECT_EQ(MockTapSuppressionController::STASHED_TAP_DOWN_FORWARDED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
-            tap_suppression_controller_->state());
-
-  // Send TapUp. This TapUp should be still suppressed.
-  // LongTap should be suppressed when the previously suppressed TapDown is
-  // forwarded because of the timer expiration.
-  tap_suppression_controller_->SendTapUp();
   EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED,
             tap_suppression_controller_->last_actions());
   EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
             tap_suppression_controller_->state());
 }
 
-// Test TapSuppressionController for when stashed TapDown gets forwarded.
-// The next TapCancel should be forwarded as well to maintain a valid input
-// stream.
-TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapSufficientlyLateTapCancel) {
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
-            tap_suppression_controller_->state());
-
-  // Send processed GestureFlingCancel Ack.
-  tap_suppression_controller_->SendGestureFlingCancelAck(true);
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING,
-            tap_suppression_controller_->state());
-
-  // Send TapDown. This TapDown should be suppressed, for now.
-  tap_suppression_controller_->SendTapDown();
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Wait more than the delay for TapDown timer. This should release the
-  // previously stashed TapDown.
-  tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(13));
-  EXPECT_EQ(MockTapSuppressionController::STASHED_TAP_DOWN_FORWARDED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
-            tap_suppression_controller_->state());
-
-  // Send TapCancel. This TapCancel should be forwarded.
-  // When a TapDown is forwarded because of the timer expiration, the next
-  // TapCancel should get forwarded as well to maintain a valid input stream.
-  tap_suppression_controller_->SendTapCancel();
-  EXPECT_EQ(MockTapSuppressionController::TAP_CANCEL_FORWARDED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
-            tap_suppression_controller_->state());
-}
-
-// Test TapSuppressionController for when GestureFlingCancel Ack comes before
-// TapDown, but there is a small delay between the Ack and TapDown.
+// Test TapSuppressionController for when GestureFlingCancel actually stops
+// fling but there is a small delay between the Ack and TapDown.
 TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapInsufficientlyLateTapDown) {
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
-            tap_suppression_controller_->state());
-
-  // Send GestureFlingCancel Ack.
-  tap_suppression_controller_->SendGestureFlingCancelAck(true);
+  // Notify the controller that the GFC has stooped an active fling.
+  tap_suppression_controller_->NotifyGestureFlingCancelStoppedFling();
   EXPECT_EQ(MockTapSuppressionController::NONE,
             tap_suppression_controller_->last_actions());
   EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING,
@@ -342,32 +151,24 @@
 
   // Send TapDown. This TapDown should be suppressed.
   tap_suppression_controller_->SendTapDown();
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
+  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_SUPPRESSED,
             tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
+  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
             tap_suppression_controller_->state());
 
   // Send TapUp. This TapUp should be suppressed.
   tap_suppression_controller_->SendTapUp();
-  EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED |
-            MockTapSuppressionController::TAP_DOWN_DROPPED,
+  EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED,
             tap_suppression_controller_->last_actions());
   EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
             tap_suppression_controller_->state());
 }
 
-// Test TapSuppressionController for when GestureFlingCancel Ack comes before
-// TapDown, but there is a long delay between the Ack and TapDown.
+// Test TapSuppressionController for when GestureFlingCancel actually stops
+// fling but there is a long delay between the Ack and TapDown.
 TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapSufficientlyLateTapDown) {
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
-            tap_suppression_controller_->state());
-
-  // Send GestureFlingCancel Ack.
-  tap_suppression_controller_->SendGestureFlingCancelAck(true);
+  // Notify the controller that the GFC has stooped an active fling.
+  tap_suppression_controller_->NotifyGestureFlingCancelStoppedFling();
   EXPECT_EQ(MockTapSuppressionController::NONE,
             tap_suppression_controller_->last_actions());
   EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING,
@@ -396,155 +197,6 @@
             tap_suppression_controller_->state());
 }
 
-// Test TapSuppressionController for when unprocessed GestureFlingCancel Ack
-// comes after TapDown and everything happens without any delay.
-TEST_F(TapSuppressionControllerTest, GFCAckUnprocessedAfterTapFast) {
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
-            tap_suppression_controller_->state());
-
-  // Send TapDown. This TapDown should be suppressed, for now.
-  tap_suppression_controller_->SendTapDown();
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Send unprocessed GestureFlingCancel Ack. This should release the
-  // previously suppressed TapDown.
-  tap_suppression_controller_->SendGestureFlingCancelAck(false);
-  EXPECT_EQ(MockTapSuppressionController::STASHED_TAP_DOWN_FORWARDED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::NOTHING,
-            tap_suppression_controller_->state());
-
-  // Send TapUp. This TapUp should not be suppressed.
-  tap_suppression_controller_->SendTapUp();
-  EXPECT_EQ(MockTapSuppressionController::TAP_UP_FORWARDED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::NOTHING,
-            tap_suppression_controller_->state());
-}
-
-// Test TapSuppressionController for when processed GestureFlingCancel Ack comes
-// after TapDown and everything happens without any delay.
-TEST_F(TapSuppressionControllerTest, GFCAckProcessedAfterTapFast) {
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
-            tap_suppression_controller_->state());
-
-  // Send TapDown. This TapDown should be suppressed.
-  tap_suppression_controller_->SendTapDown();
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Send processed GestureFlingCancel Ack.
-  tap_suppression_controller_->SendGestureFlingCancelAck(true);
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Send TapUp. This TapUp should be suppressed.
-  tap_suppression_controller_->SendTapUp();
-  EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED |
-            MockTapSuppressionController::TAP_DOWN_DROPPED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
-            tap_suppression_controller_->state());
-}
-
-// Test TapSuppressionController for when GestureFlingCancel Ack comes after
-// TapDown and there is a small delay between the Ack and TapUp.
-TEST_F(TapSuppressionControllerTest, GFCAckAfterTapInsufficientlyLateTapUp) {
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
-            tap_suppression_controller_->state());
-
-  // Send TapDown. This TapDown should be suppressed.
-  tap_suppression_controller_->SendTapDown();
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Send GestureFlingCancel Ack.
-  tap_suppression_controller_->SendGestureFlingCancelAck(true);
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Wait less than allowed delay between TapDown and TapUp, so they are still
-  // considered as a tap.
-  tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(7));
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Send TapUp. This TapUp should be suppressed.
-  tap_suppression_controller_->SendTapUp();
-  EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED |
-            MockTapSuppressionController::TAP_DOWN_DROPPED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
-            tap_suppression_controller_->state());
-}
-
-// Test TapSuppressionController for when GestureFlingCancel Ack comes after
-// TapDown and there is a long delay between the Ack and TapUp.
-TEST_F(TapSuppressionControllerTest, GFCAckAfterTapSufficientlyLateTapUp) {
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
-            tap_suppression_controller_->state());
-
-  // Send TapDown. This TapDown should be suppressed, for now.
-  tap_suppression_controller_->SendTapDown();
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Send GestureFlingCancel Ack.
-  tap_suppression_controller_->SendGestureFlingCancelAck(true);
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
-            tap_suppression_controller_->state());
-
-  // Wait more than allowed delay between TapDown and TapUp, so they are not
-  // considered as a tap. This should release the previously suppressed TapDown.
-  tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(13));
-  EXPECT_EQ(MockTapSuppressionController::STASHED_TAP_DOWN_FORWARDED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
-            tap_suppression_controller_->state());
-
-  // Send TapUp. This TapUp should be still suppressed.
-  // LongTap should be suppressed when the previously suppressed TapDown is
-  // forwarded because of timer expiration.
-  tap_suppression_controller_->SendTapUp();
-  EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
-            tap_suppression_controller_->state());
-}
-
 // Test that no suppression occurs if the TapSuppressionController is disabled.
 TEST_F(TapSuppressionControllerTest, NoSuppressionIfDisabled) {
   TapSuppressionController::Config disabled_config;
@@ -552,15 +204,8 @@
   tap_suppression_controller_.reset(
       new MockTapSuppressionController(disabled_config));
 
-  // Send GestureFlingCancel.
-  tap_suppression_controller_->SendGestureFlingCancel();
-  EXPECT_EQ(MockTapSuppressionController::NONE,
-            tap_suppression_controller_->last_actions());
-  EXPECT_EQ(MockTapSuppressionController::DISABLED,
-            tap_suppression_controller_->state());
-
   // Send GestureFlingCancel Ack.
-  tap_suppression_controller_->SendGestureFlingCancelAck(true);
+  tap_suppression_controller_->NotifyGestureFlingCancelStoppedFling();
   EXPECT_EQ(MockTapSuppressionController::NONE,
             tap_suppression_controller_->last_actions());
   EXPECT_EQ(MockTapSuppressionController::DISABLED,
diff --git a/content/browser/renderer_host/input/touchpad_tap_suppression_controller.cc b/content/browser/renderer_host/input/touchpad_tap_suppression_controller.cc
index dac3af2..45d712f 100644
--- a/content/browser/renderer_host/input/touchpad_tap_suppression_controller.cc
+++ b/content/browser/renderer_host/input/touchpad_tap_suppression_controller.cc
@@ -7,46 +7,18 @@
 namespace content {
 
 TouchpadTapSuppressionController::TouchpadTapSuppressionController(
-    TouchpadTapSuppressionControllerClient* client,
     const TapSuppressionController::Config& config)
-    : client_(client), controller_(this, config) {
-}
+    : TapSuppressionController(config) {}
 
 TouchpadTapSuppressionController::~TouchpadTapSuppressionController() {}
 
-void TouchpadTapSuppressionController::GestureFlingCancel() {
-  controller_.GestureFlingCancel();
-}
-
-void TouchpadTapSuppressionController::GestureFlingCancelAck(bool processed) {
-  controller_.GestureFlingCancelAck(processed);
-}
-
-bool TouchpadTapSuppressionController::ShouldDeferMouseDown(
+bool TouchpadTapSuppressionController::ShouldSuppressMouseDown(
     const MouseEventWithLatencyInfo& event) {
-  bool should_defer = controller_.ShouldDeferTapDown();
-  if (should_defer)
-    stashed_mouse_down_ = event;
-  return should_defer;
+  return ShouldSuppressTapDown();
 }
 
 bool TouchpadTapSuppressionController::ShouldSuppressMouseUp() {
-  return controller_.ShouldSuppressTapEnd();
-}
-
-void TouchpadTapSuppressionController::DropStashedTapDown() {
-}
-
-void TouchpadTapSuppressionController::ForwardStashedGestureEvents() {
-  // Mouse downs are not handled by gesture event filter; so, they are
-  // immediately forwarded to the renderer.
-  client_->SendMouseEventImmediately(stashed_mouse_down_);
-}
-
-void TouchpadTapSuppressionController::ForwardStashedTapDown() {
-  // Mouse downs are not handled by gesture event filter; so, they are
-  // immediately forwarded to the renderer.
-  client_->SendMouseEventImmediately(stashed_mouse_down_);
+  return ShouldSuppressTapEnd();
 }
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h b/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h
index cbacd33..66e00c4 100644
--- a/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h
+++ b/content/browser/renderer_host/input/touchpad_tap_suppression_controller.h
@@ -8,42 +8,23 @@
 #include "base/macros.h"
 #include "content/browser/renderer_host/event_with_latency_info.h"
 #include "content/browser/renderer_host/input/tap_suppression_controller.h"
-#include "content/browser/renderer_host/input/tap_suppression_controller_client.h"
 #include "content/common/content_export.h"
 #include "third_party/blink/public/platform/web_input_event.h"
 
 namespace content {
 
-class TapSuppressionController;
-
-class CONTENT_EXPORT TouchpadTapSuppressionControllerClient {
- public:
-  virtual ~TouchpadTapSuppressionControllerClient() {}
-  virtual void SendMouseEventImmediately(
-      const MouseEventWithLatencyInfo& event) = 0;
-};
-
 // Controls the suppression of touchpad taps immediately following the dispatch
 // of a GestureFlingCancel event.
-class TouchpadTapSuppressionController : public TapSuppressionControllerClient {
+class TouchpadTapSuppressionController : public TapSuppressionController {
  public:
   // The |client| must outlive the TouchpadTapSupressionController.
   TouchpadTapSuppressionController(
-      TouchpadTapSuppressionControllerClient* client,
       const TapSuppressionController::Config& config);
   ~TouchpadTapSuppressionController() override;
 
-  // Should be called on arrival of GestureFlingCancel events.
-  void GestureFlingCancel();
-
-  // Should be called on arrival of ACK for a GestureFlingCancel event.
-  // |processed| is true if the GestureFlingCancel successfully stopped a fling.
-  void GestureFlingCancelAck(bool processed);
-
   // Should be called on arrival of MouseDown events. Returns true if the caller
-  // should stop normal handling of the MouseDown. In this case, the caller is
-  // responsible for saving the event for later use, if needed.
-  bool ShouldDeferMouseDown(const MouseEventWithLatencyInfo& event);
+  // should stop normal handling of the MouseDown.
+  bool ShouldSuppressMouseDown(const MouseEventWithLatencyInfo& event);
 
   // Should be called on arrival of MouseUp events. Returns true if the caller
   // should stop normal handling of the MouseUp.
@@ -52,17 +33,6 @@
  private:
   friend class MockRenderWidgetHost;
 
-  // TapSuppressionControllerClient implementation.
-  void DropStashedTapDown() override;
-  void ForwardStashedGestureEvents() override;
-  void ForwardStashedTapDown() override;
-
-  TouchpadTapSuppressionControllerClient* client_;
-  MouseEventWithLatencyInfo stashed_mouse_down_;
-
-  // The core controller of tap suppression.
-  TapSuppressionController controller_;
-
   DISALLOW_COPY_AND_ASSIGN(TouchpadTapSuppressionController);
 };
 
diff --git a/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.cc b/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.cc
index 58801cc2..2372fb3 100644
--- a/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.cc
+++ b/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.cc
@@ -13,60 +13,26 @@
 namespace content {
 
 TouchscreenTapSuppressionController::TouchscreenTapSuppressionController(
-    GestureEventQueue* geq,
     const TapSuppressionController::Config& config)
-    : gesture_event_queue_(geq),
-      forward_next_tap_cancel_(false),
-      controller_(this, config) {}
+    : TapSuppressionController(config) {}
 
 TouchscreenTapSuppressionController::~TouchscreenTapSuppressionController() {}
 
-void TouchscreenTapSuppressionController::GestureFlingCancel() {
-  controller_.GestureFlingCancel();
-}
-
-void TouchscreenTapSuppressionController::GestureFlingCancelAck(
-    bool processed) {
-  controller_.GestureFlingCancelAck(processed);
-}
-
 bool TouchscreenTapSuppressionController::FilterTapEvent(
     const GestureEventWithLatencyInfo& event) {
   switch (event.event.GetType()) {
     case WebInputEvent::kGestureTapDown:
-      forward_next_tap_cancel_ = false;
-      if (!controller_.ShouldDeferTapDown())
-        return false;
-      stashed_tap_down_.reset(new GestureEventWithLatencyInfo(event));
-      return true;
+      return ShouldSuppressTapDown();
 
     case WebInputEvent::kGestureShowPress:
-      if (!stashed_tap_down_)
-        return false;
-      stashed_show_press_.reset(new GestureEventWithLatencyInfo(event));
-      return true;
-
     case WebInputEvent::kGestureLongPress:
-      // It is possible that a GestureLongPress arrives after tapDownTimer
-      // expiration, in this case it should still get filtered if the
-      // controller suppresses the tap end events.
-      if (!stashed_tap_down_)
-        return controller_.ShouldSuppressTapEnd();
-
-      stashed_long_press_.reset(new GestureEventWithLatencyInfo(event));
-      return true;
-
     case WebInputEvent::kGestureTapUnconfirmed:
-      return !!stashed_tap_down_;
-
     case WebInputEvent::kGestureTapCancel:
-      return !forward_next_tap_cancel_ && controller_.ShouldSuppressTapEnd();
-
     case WebInputEvent::kGestureTap:
     case WebInputEvent::kGestureDoubleTap:
     case WebInputEvent::kGestureLongTap:
     case WebInputEvent::kGestureTwoFingerTap:
-      return controller_.ShouldSuppressTapEnd();
+      return ShouldSuppressTapEnd();
 
     default:
       break;
@@ -74,31 +40,4 @@
   return false;
 }
 
-void TouchscreenTapSuppressionController::DropStashedTapDown() {
-  stashed_tap_down_.reset();
-  stashed_show_press_.reset();
-  stashed_long_press_.reset();
-}
-
-void TouchscreenTapSuppressionController::ForwardStashedGestureEvents() {
-  DCHECK(stashed_tap_down_);
-  ScopedGestureEvent tap_down = std::move(stashed_tap_down_);
-  ScopedGestureEvent show_press = std::move(stashed_show_press_);
-  ScopedGestureEvent long_press = std::move(stashed_long_press_);
-  gesture_event_queue_->ForwardGestureEvent(*tap_down);
-  if (show_press)
-    gesture_event_queue_->ForwardGestureEvent(*show_press);
-  if (long_press)
-    gesture_event_queue_->ForwardGestureEvent(*long_press);
-}
-
-void TouchscreenTapSuppressionController::ForwardStashedTapDown() {
-  DCHECK(stashed_tap_down_);
-  ScopedGestureEvent tap_down = std::move(stashed_tap_down_);
-  gesture_event_queue_->ForwardGestureEvent(*tap_down);
-  stashed_show_press_.reset();
-  stashed_long_press_.reset();
-  forward_next_tap_cancel_ = true;
-}
-
 }  // namespace content
diff --git a/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h b/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h
index 64f72a0d..c7845e2f 100644
--- a/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h
+++ b/content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h
@@ -10,53 +10,22 @@
 #include "base/macros.h"
 #include "content/browser/renderer_host/event_with_latency_info.h"
 #include "content/browser/renderer_host/input/tap_suppression_controller.h"
-#include "content/browser/renderer_host/input/tap_suppression_controller_client.h"
 
 namespace content {
 
-class GestureEventQueue;
-
 // Controls the suppression of touchscreen taps immediately following the
 // dispatch of a GestureFlingCancel event.
-class TouchscreenTapSuppressionController
-    : public TapSuppressionControllerClient {
+class TouchscreenTapSuppressionController : public TapSuppressionController {
  public:
   TouchscreenTapSuppressionController(
-      GestureEventQueue* geq,
       const TapSuppressionController::Config& config);
   ~TouchscreenTapSuppressionController() override;
 
-  // Should be called on arrival of GestureFlingCancel events.
-  void GestureFlingCancel();
-
-  // Should be called on arrival of ACK for a GestureFlingCancel event.
-  // |processed| is true if the GestureFlingCancel successfully stopped a fling.
-  void GestureFlingCancelAck(bool processed);
-
   // Should be called on arrival of any tap-related events. Returns true if the
   // caller should stop normal handling of the gesture.
   bool FilterTapEvent(const GestureEventWithLatencyInfo& event);
 
  private:
-  // TapSuppressionControllerClient implementation.
-  void DropStashedTapDown() override;
-  void ForwardStashedGestureEvents() override;
-  void ForwardStashedTapDown() override;
-
-  GestureEventQueue* gesture_event_queue_;
-
-  typedef std::unique_ptr<GestureEventWithLatencyInfo> ScopedGestureEvent;
-  ScopedGestureEvent stashed_tap_down_;
-  ScopedGestureEvent stashed_show_press_;
-  ScopedGestureEvent stashed_long_press_;
-
-  // This is true when the stashed GestureTapDown event gets forwarded. The
-  // controller should forward the next GestureTapCancel as well to maintain a
-  // valid input stream.
-  bool forward_next_tap_cancel_;
-
-  // The core controller of tap suppression.
-  TapSuppressionController controller_;
 
   DISALLOW_COPY_AND_ASSIGN(TouchscreenTapSuppressionController);
 };
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index dbe51d2..a44ffee 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -2146,11 +2146,6 @@
   return widget_helper_->GetNextRoutingID();
 }
 
-void RenderProcessHostImpl::ResumeDeferredNavigation(
-    const GlobalRequestID& request_id) {
-  widget_helper_->ResumeDeferredNavigation(request_id);
-}
-
 void RenderProcessHostImpl::BindInterface(
     const std::string& interface_name,
     mojo::ScopedMessagePipeHandle interface_pipe) {
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index 4a9513bf..e709fd1 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -194,7 +194,6 @@
       const WebRtcRtpPacketCallback& packet_callback) override;
   void SetWebRtcEventLogOutput(int lid, bool enabled) override;
 #endif
-  void ResumeDeferredNavigation(const GlobalRequestID& request_id) override;
   void BindInterface(const std::string& interface_name,
                      mojo::ScopedMessagePipeHandle interface_pipe) override;
   const service_manager::Identity& GetChildIdentity() const override;
diff --git a/content/browser/renderer_host/render_widget_helper.cc b/content/browser/renderer_host/render_widget_helper.cc
index 6a7e9ee..c54233d8 100644
--- a/content/browser/renderer_host/render_widget_helper.cc
+++ b/content/browser/renderer_host/render_widget_helper.cc
@@ -68,19 +68,6 @@
   return (ci == g_widget_helpers.Get().end())? NULL : ci->second;
 }
 
-void RenderWidgetHelper::ResumeDeferredNavigation(
-    const GlobalRequestID& request_id) {
-  BrowserThread::PostTask(
-      BrowserThread::IO, FROM_HERE,
-      base::BindOnce(&RenderWidgetHelper::OnResumeDeferredNavigation, this,
-                     request_id));
-}
-
-void RenderWidgetHelper::OnResumeDeferredNavigation(
-    const GlobalRequestID& request_id) {
-  resource_dispatcher_host_->ResumeDeferredNavigation(request_id);
-}
-
 void RenderWidgetHelper::CreateNewWidget(int opener_id,
                                          blink::WebPopupType popup_type,
                                          mojom::WidgetPtr widget,
diff --git a/content/browser/renderer_host/render_widget_helper.h b/content/browser/renderer_host/render_widget_helper.h
index 1fcb3097..30012c9 100644
--- a/content/browser/renderer_host/render_widget_helper.h
+++ b/content/browser/renderer_host/render_widget_helper.h
@@ -48,13 +48,6 @@
   // store in a scoped_refptr.
   static RenderWidgetHelper* FromProcessHostID(int render_process_host_id);
 
-  // UI THREAD ONLY -----------------------------------------------------------
-
-  // These two functions provide the backend implementation of the
-  // corresponding functions in RenderProcessHost. See those declarations
-  // for documentation.
-  void ResumeDeferredNavigation(const GlobalRequestID& request_id);
-
   // IO THREAD ONLY -----------------------------------------------------------
   void CreateNewWidget(int opener_id,
                        blink::WebPopupType popup_type,
@@ -82,14 +75,6 @@
                                     int32_t route_id,
                                     mojom::WidgetPtrInfo widget);
 
-  // Called on the IO thread to resume a paused navigation in the network
-  // stack without transferring it to a new renderer process.
-  void OnResumeDeferredNavigation(const GlobalRequestID& request_id);
-
-  // Called on the IO thread to resume a navigation paused immediately after
-  // receiving response headers.
-  void OnResumeResponseDeferredAtStart(const GlobalRequestID& request_id);
-
   int render_process_id_;
 
   // The next routing id to use.
diff --git a/content/browser/service_worker/service_worker_request_handler.cc b/content/browser/service_worker/service_worker_request_handler.cc
index 9e582f9b..7aaa707 100644
--- a/content/browser/service_worker/service_worker_request_handler.cc
+++ b/content/browser/service_worker/service_worker_request_handler.cc
@@ -312,28 +312,6 @@
   std::move(callback).Run({});
 }
 
-void ServiceWorkerRequestHandler::PrepareForCrossSiteTransfer(
-    int old_process_id) {
-  CHECK(!IsBrowserSideNavigationEnabled());
-}
-
-void ServiceWorkerRequestHandler::CompleteCrossSiteTransfer(
-    int new_process_id, int new_provider_id) {
-  CHECK(!IsBrowserSideNavigationEnabled());
-}
-
-void ServiceWorkerRequestHandler::MaybeCompleteCrossSiteTransferInOldProcess(
-    int old_process_id) {
-  CHECK(!IsBrowserSideNavigationEnabled());
-}
-
-bool ServiceWorkerRequestHandler::SanityCheckIsSameContext(
-    ServiceWorkerContextWrapper* wrapper) {
-  if (!wrapper)
-    return !context_;
-  return context_.get() == wrapper->context();
-}
-
 ServiceWorkerRequestHandler::~ServiceWorkerRequestHandler() {
 }
 
diff --git a/content/browser/service_worker/service_worker_request_handler.h b/content/browser/service_worker/service_worker_request_handler.h
index da73b702..1dc6fb7 100644
--- a/content/browser/service_worker/service_worker_request_handler.h
+++ b/content/browser/service_worker/service_worker_request_handler.h
@@ -143,18 +143,6 @@
                          ResourceContext* resource_context,
                          LoaderCallback callback) override;
 
-  // These are obsolete, needed for non-PlzNavigate.
-  // TODO(falken): Remove these completely.
-  void PrepareForCrossSiteTransfer(int old_process_id);
-  void CompleteCrossSiteTransfer(int new_process_id,
-                                 int new_provider_id);
-  void MaybeCompleteCrossSiteTransferInOldProcess(
-      int old_process_id);
-
-  // Useful for detecting storage partition mismatches in the context of cross
-  // site transfer navigations.
-  bool SanityCheckIsSameContext(ServiceWorkerContextWrapper* wrapper);
-
  protected:
   ServiceWorkerRequestHandler(
       base::WeakPtr<ServiceWorkerContextCore> context,
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java
index 8df9e3b8..7d50494 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java
@@ -163,13 +163,9 @@
 
     private long mNativeChildProcessLauncherHelper;
 
-    // Controls the strong binding.
-    private boolean mForeground;
-    // Roughly true when process has a pending navigation and is waiting to be swapped
-    // in. Controls the initial binding, which is bound initially.
-    private boolean mBoostPriorityForPendingViews = true;
-    // Explicit signal from content embedder. Controls both strong and moderate bindings.
-    private @ChildProcessImportance int mImportance = ChildProcessImportance.NORMAL;
+    // This is the current computed importance from all the inputs from setPriority.
+    // The initial value is MODERATE since a newly created connection has moderate bindings.
+    private @ChildProcessImportance int mEffectiveImportance = ChildProcessImportance.MODERATE;
 
     @CalledByNative
     private static FileDescriptorInfo makeFdInfo(
@@ -476,17 +472,27 @@
             boostForPendingViews = false;
         }
 
+        @ChildProcessImportance
+        int newEffectiveImportance;
+        if ((foreground && frameDepth == 0) || importance == ChildProcessImportance.IMPORTANT) {
+            newEffectiveImportance = ChildProcessImportance.IMPORTANT;
+        } else if ((foreground && frameDepth > 0)
+                || importance == ChildProcessImportance.MODERATE) {
+            newEffectiveImportance = ChildProcessImportance.MODERATE;
+        } else {
+            newEffectiveImportance = ChildProcessImportance.NORMAL;
+        }
+
         // Add first and remove second.
-        if (!mForeground && foreground) {
-            connection.addStrongBinding();
+        if (newEffectiveImportance == ChildProcessImportance.IMPORTANT
+                && mEffectiveImportance != ChildProcessImportance.IMPORTANT) {
             BindingManager manager = getBindingManager();
             if (mUseBindingManager && manager != null) {
                 manager.increaseRecency(connection);
             }
         }
-        if (!mBoostPriorityForPendingViews && boostForPendingViews) connection.addInitialBinding();
-        if (mImportance != importance) {
-            switch (importance) {
+        if (mEffectiveImportance != newEffectiveImportance) {
+            switch (newEffectiveImportance) {
                 case ChildProcessImportance.NORMAL:
                     // Nothing to add.
                     break;
@@ -504,17 +510,12 @@
             }
         }
 
-        if (mForeground && !foreground) connection.removeStrongBinding();
-        if (mBoostPriorityForPendingViews && !boostForPendingViews) {
-            connection.removeInitialBinding();
-        }
-
         if (mRanking != null) {
             mRanking.updateConnection(connection, foreground, frameDepth, importance);
         }
 
-        if (mImportance != importance) {
-            switch (mImportance) {
+        if (mEffectiveImportance != newEffectiveImportance) {
+            switch (mEffectiveImportance) {
                 case ChildProcessImportance.NORMAL:
                     // Nothing to remove.
                     break;
@@ -532,9 +533,7 @@
             }
         }
 
-        mForeground = foreground;
-        mBoostPriorityForPendingViews = boostForPendingViews;
-        mImportance = importance;
+        mEffectiveImportance = newEffectiveImportance;
     }
 
     @CalledByNative
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherIntegrationTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherIntegrationTest.java
index 254c394..5439e9e3 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherIntegrationTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherIntegrationTest.java
@@ -57,7 +57,7 @@
     }
 
     private static class TestChildProcessConnection extends ChildProcessConnection {
-        private RuntimeException mRemovedBothInitialAndStrongBinding;
+        private RuntimeException mRemovedBothModerateAndStrongBinding;
 
         public TestChildProcessConnection(Context context, ComponentName serviceName,
                 boolean bindToCaller, boolean bindAsExternalService,
@@ -69,30 +69,31 @@
         @Override
         protected void unbind() {
             super.unbind();
-            if (mRemovedBothInitialAndStrongBinding == null) {
-                mRemovedBothInitialAndStrongBinding = new RuntimeException("unbind");
+            if (mRemovedBothModerateAndStrongBinding == null) {
+                mRemovedBothModerateAndStrongBinding = new RuntimeException("unbind");
             }
         }
 
         @Override
-        public void removeInitialBinding() {
-            super.removeInitialBinding();
-            if (mRemovedBothInitialAndStrongBinding == null && !isStrongBindingBound()) {
-                mRemovedBothInitialAndStrongBinding = new RuntimeException("removeInitialBinding");
+        public void removeModerateBinding() {
+            super.removeModerateBinding();
+            if (mRemovedBothModerateAndStrongBinding == null && !isStrongBindingBound()) {
+                mRemovedBothModerateAndStrongBinding =
+                        new RuntimeException("removeModerateBinding");
             }
         }
 
         @Override
         public void removeStrongBinding() {
             super.removeStrongBinding();
-            if (mRemovedBothInitialAndStrongBinding == null && !isInitialBindingBound()) {
-                mRemovedBothInitialAndStrongBinding = new RuntimeException("removeStrongBinding");
+            if (mRemovedBothModerateAndStrongBinding == null && !isModerateBindingBound()) {
+                mRemovedBothModerateAndStrongBinding = new RuntimeException("removeStrongBinding");
             }
         }
 
-        public void throwIfDroppedBothInitialAndStrongBinding() {
-            if (mRemovedBothInitialAndStrongBinding != null) {
-                throw mRemovedBothInitialAndStrongBinding;
+        public void throwIfDroppedBothModerateAndStrongBinding() {
+            if (mRemovedBothModerateAndStrongBinding != null) {
+                throw mRemovedBothModerateAndStrongBinding;
             }
         }
     }
@@ -119,7 +120,7 @@
             @Override
             public void run() {
                 Assert.assertEquals(1, connections.size());
-                connections.get(0).throwIfDroppedBothInitialAndStrongBinding();
+                connections.get(0).throwIfDroppedBothModerateAndStrongBinding();
             }
         });
 
@@ -130,7 +131,7 @@
             public void run() {
                 Assert.assertEquals(2, connections.size());
                 // connections.get(0).didDropBothInitialAndImportantBindings();
-                connections.get(1).throwIfDroppedBothInitialAndStrongBinding();
+                connections.get(1).throwIfDroppedBothModerateAndStrongBinding();
             }
         });
     }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/webcontents/WebContentsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/webcontents/WebContentsTest.java
index 5a1b042..87073a6 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/webcontents/WebContentsTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/webcontents/WebContentsTest.java
@@ -390,6 +390,8 @@
                 mActivityTestRule.launchContentShellWithUrl(TEST_URL_1);
         mActivityTestRule.waitForActiveShellToBeDoneLoading();
         final WebContents webContents = activity.getActiveWebContents();
+        // Make sure visibility do not affect bindings.
+        ThreadUtils.runOnUiThreadBlocking(() -> webContents.onHide());
 
         final ChildProcessConnection connection = getSandboxedChildProcessConnection();
         ChildProcessLauncherTestUtils.runOnLauncherThreadBlocking(
diff --git a/content/public/android/junit/src/org/chromium/content/browser/BindingManagerImplTest.java b/content/public/android/junit/src/org/chromium/content/browser/BindingManagerImplTest.java
index 8d57faf..c0a6e8f 100644
--- a/content/public/android/junit/src/org/chromium/content/browser/BindingManagerImplTest.java
+++ b/content/public/android/junit/src/org/chromium/content/browser/BindingManagerImplTest.java
@@ -47,9 +47,8 @@
                 null /* serviceBundle */);
         connection.setPid(pid);
         connection.start(false /* useStrongBinding */, null /* serviceCallback */);
-        if (manager != null) {
-            manager.increaseRecency(connection);
-        }
+        manager.increaseRecency(connection);
+        connection.removeModerateBinding(); // Remove initial binding.
         return connection;
     }
 
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index f006f854..61da560 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -48,7 +48,6 @@
 class RenderWidgetHost;
 class RendererAudioOutputStreamFactoryContext;
 class StoragePartition;
-struct GlobalRequestID;
 
 #if defined(OS_ANDROID)
 enum class ChildProcessImportance;
@@ -304,10 +303,6 @@
   virtual void SetWebRtcEventLogOutput(int lid, bool enabled) = 0;
 #endif
 
-  // Tells the ResourceDispatcherHost to resume a deferred navigation without
-  // transferring it to a new renderer process.
-  virtual void ResumeDeferredNavigation(const GlobalRequestID& request_id) = 0;
-
   // Binds interfaces exposed to the browser process from the renderer.
   virtual void BindInterface(const std::string& interface_name,
                              mojo::ScopedMessagePipeHandle interface_pipe) = 0;
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc
index 072181e1..6380903d 100644
--- a/content/public/test/mock_render_process_host.cc
+++ b/content/public/test/mock_render_process_host.cc
@@ -439,9 +439,6 @@
 
 #endif
 
-void MockRenderProcessHost::ResumeDeferredNavigation(
-    const GlobalRequestID& request_id) {}
-
 bool MockRenderProcessHost::OnMessageReceived(const IPC::Message& msg) {
   IPC::Listener* listener = listeners_.Lookup(msg.routing_id());
   if (listener)
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h
index b243c27..95521a2 100644
--- a/content/public/test/mock_render_process_host.h
+++ b/content/public/test/mock_render_process_host.h
@@ -119,7 +119,6 @@
       const WebRtcRtpPacketCallback& packet_callback) override;
   void SetWebRtcEventLogOutput(int lid, bool enabled) override;
 #endif
-  void ResumeDeferredNavigation(const GlobalRequestID& request_id) override;
   void BindInterface(const std::string& interface_name,
                      mojo::ScopedMessagePipeHandle interface_pipe) override;
   const service_manager::Identity& GetChildIdentity() const override;
diff --git a/content/renderer/loader/request_extra_data.cc b/content/renderer/loader/request_extra_data.cc
index 3b52397..de59451 100644
--- a/content/renderer/loader/request_extra_data.cc
+++ b/content/renderer/loader/request_extra_data.cc
@@ -17,7 +17,6 @@
       is_main_frame_(false),
       allow_download_(true),
       transition_type_(ui::PAGE_TRANSITION_LINK),
-      should_replace_current_entry_(false),
       service_worker_provider_id_(kInvalidServiceWorkerProviderId),
       originated_from_service_worker_(false),
       initiated_in_secure_context_(false),
@@ -39,7 +38,6 @@
 
   request->allow_download = allow_download_;
   request->transition_type = transition_type_;
-  request->should_replace_current_entry = should_replace_current_entry_;
   request->service_worker_provider_id = service_worker_provider_id_;
   request->originated_from_service_worker = originated_from_service_worker_;
 
diff --git a/content/renderer/loader/request_extra_data.h b/content/renderer/loader/request_extra_data.h
index 02e6dbdb..1c2f0bac 100644
--- a/content/renderer/loader/request_extra_data.h
+++ b/content/renderer/loader/request_extra_data.h
@@ -50,10 +50,6 @@
   void set_transition_type(ui::PageTransition transition_type) {
     transition_type_ = transition_type;
   }
-  void set_should_replace_current_entry(
-      bool should_replace_current_entry) {
-    should_replace_current_entry_ = should_replace_current_entry;
-  }
   int service_worker_provider_id() const {
     return service_worker_provider_id_;
   }
@@ -164,7 +160,6 @@
   bool is_main_frame_;
   bool allow_download_;
   ui::PageTransition transition_type_;
-  bool should_replace_current_entry_;
   int service_worker_provider_id_;
   bool originated_from_service_worker_;
   blink::WebString custom_user_agent_;
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index dec8b187..79f6814 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -4684,12 +4684,6 @@
   // present.
   request.SetHTTPOriginIfNeeded(WebSecurityOrigin::CreateUnique());
 
-  // Attach |should_replace_current_entry| state to requests so that, should
-  // this navigation later require a request transfer, all state is preserved
-  // when it is re-created in the new process.
-  bool should_replace_current_entry =
-      document_loader->ReplacesCurrentHistoryItem();
-
   WebFrame* parent = frame_->Parent();
 
   ResourceType resource_type = WebURLRequestToResourceType(request);
@@ -4705,7 +4699,6 @@
   extra_data->set_allow_download(
       navigation_state->common_params().allow_download);
   extra_data->set_transition_type(transition_type);
-  extra_data->set_should_replace_current_entry(should_replace_current_entry);
   extra_data->set_navigation_response_override(std::move(response_override));
   bool is_for_no_state_prefetch =
       GetContentClient()->renderer()->IsPrefetchOnly(this, request);
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm
index c59a357..34b60a7 100644
--- a/ios/chrome/app/main_controller.mm
+++ b/ios/chrome/app/main_controller.mm
@@ -1126,24 +1126,19 @@
 
 - (void)initializeMailtoHandling {
   if (base::FeatureList::IsEnabled(kMailtoHandledWithGoogleUI)) {
+    __weak __typeof(self) weakSelf = self;
     [[DeferredInitializationRunner sharedInstance]
         enqueueBlockNamed:kMailtoHandlingInitialization
                     block:^{
+                      __strong __typeof(weakSelf) strongSelf = weakSelf;
+                      if (!strongSelf) {
+                        return;
+                      }
                       MailtoHandlerProvider* provider =
                           ios::GetChromeBrowserProvider()
                               ->GetMailtoHandlerProvider();
-                      ios::ChromeIdentityService* identityService =
-                          ios::GetChromeBrowserProvider()
-                              ->GetChromeIdentityService();
                       provider->PrepareMailtoHandling(
-                          ^ChromeIdentity* {
-                            // TODO:(crbug.com/810904) Replace with currently
-                            // signed-in user.
-                            return nil;
-                          },
-                          ^NSArray<ChromeIdentity*>* {
-                            return identityService->GetAllIdentities();
-                          });
+                          strongSelf->_mainBrowserState);
                     }];
   }
 }
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index 8349cdea..e0a6840 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -363,6 +363,7 @@
 <translation id="7605594153474022051">Synchronizace nefunguje</translation>
 <translation id="7638584964844754484">Nesprávná heslová fráze</translation>
 <translation id="7649070708921625228">Nápověda</translation>
+<translation id="7657481849127058215">Přidat kartu</translation>
 <translation id="7658239707568436148">Zrušit</translation>
 <translation id="7671141431838911305">INSTALOVAT</translation>
 <translation id="7765158879357617694">Přesunout</translation>
@@ -385,6 +386,7 @@
 <translation id="8073670137947914548">Stahování bylo dokončeno</translation>
 <translation id="8076014560081431679">Uložená nastavení webů nebudou smazána a mohou vypovídat o vašich zvycích při prohlížení. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
 <translation id="8080028325999236607">Zavřít všechny karty</translation>
+<translation id="8114753159095730575">Je k dispozici soubor ke stažení. Možnosti jsou k dispozici ve spodní části obrazovky.</translation>
 <translation id="8205564605687841303">Zrušit</translation>
 <translation id="8225985093977202398">Obrázky a soubory v mezipaměti</translation>
 <translation id="8261506727792406068">Smazat</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index 214af83a..bb31ccb0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -363,6 +363,7 @@
 <translation id="7605594153474022051">Ο συγχρονισμός δεν λειτουργεί</translation>
 <translation id="7638584964844754484">Εσφαλμένη φράση πρόσβασης</translation>
 <translation id="7649070708921625228">Βοήθεια</translation>
+<translation id="7657481849127058215">Προσθήκη καρτέλας</translation>
 <translation id="7658239707568436148">Ακύρωση</translation>
 <translation id="7671141431838911305">ΕΓΚΑΤΑΣΤΑΣΗ</translation>
 <translation id="7765158879357617694">Μεταφορά</translation>
@@ -385,6 +386,7 @@
 <translation id="8073670137947914548">Η λήψη ολοκληρώθηκε</translation>
 <translation id="8076014560081431679">Οι αποθηκευμένες ρυθμίσεις ιστότοπου δεν θα διαγραφούν και ενδέχεται να υποδεικνύουν τις συνήθειες περιήγησής σας. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation>
 <translation id="8080028325999236607">Κλείσ. όλων των καρτελών</translation>
+<translation id="8114753159095730575">Η λήψη του αρχείου είναι διαθέσιμη. Οι διαθέσιμες επιλογές βρίσκονται κοντά στο κάτω μέρος της οθόνης.</translation>
 <translation id="8205564605687841303">Ακύρωση</translation>
 <translation id="8225985093977202398">Εικόνες και αρχεία στην κρυφή μνήμη</translation>
 <translation id="8261506727792406068">Διαγραφή</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb
index ede6d26..e9ae218 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -363,6 +363,7 @@
 <translation id="7605594153474022051">La sincronización no funciona</translation>
 <translation id="7638584964844754484">Frase de contraseña incorrecta</translation>
 <translation id="7649070708921625228">Ayuda</translation>
+<translation id="7657481849127058215">Añadir pestaña</translation>
 <translation id="7658239707568436148">Cancelar</translation>
 <translation id="7671141431838911305">INSTALAR</translation>
 <translation id="7765158879357617694">Mover</translation>
@@ -385,6 +386,7 @@
 <translation id="8073670137947914548">Descarga finalizada</translation>
 <translation id="8076014560081431679">No se eliminará la configuración guardada de los sitios web, lo cual puede reflejar tus hábitos de navegación. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="8080028325999236607">Cerrar todas las pestañas</translation>
+<translation id="8114753159095730575">La descarga de archivos está disponible. Hay opciones disponibles en la parte inferior de la pantalla.</translation>
 <translation id="8205564605687841303">Cancelar</translation>
 <translation id="8225985093977202398">Archivos e imágenes en caché</translation>
 <translation id="8261506727792406068">Eliminar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index 463a5ae9..826b253 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -363,6 +363,7 @@
 <translation id="7605594153474022051">Sinkronizacija ne radi</translation>
 <translation id="7638584964844754484">Pogrešna zaporka</translation>
 <translation id="7649070708921625228">Pomoć</translation>
+<translation id="7657481849127058215">Dodavanje kartice</translation>
 <translation id="7658239707568436148">Odustani</translation>
 <translation id="7671141431838911305">INSTALIRANJE</translation>
 <translation id="7765158879357617694">Pomakni</translation>
@@ -385,6 +386,7 @@
 <translation id="8073670137947914548">Preuzimanje je dovršeno</translation>
 <translation id="8076014560081431679">Spremljene postavke web-lokacije neće se izbrisati i mogu odražavati vaše navike prilikom pregledavanja. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="8080028325999236607">Zatvori sve kartice</translation>
+<translation id="8114753159095730575">Dostupno je preuzimanje datoteka. Opcije su dostupne pri dnu zaslona.</translation>
 <translation id="8205564605687841303">Odustani</translation>
 <translation id="8225985093977202398">Predmemorirane slike i datoteke</translation>
 <translation id="8261506727792406068">Izbriši</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index 64d99911b..f0f9ceb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -363,6 +363,7 @@
 <translation id="7605594153474022051">Sinkronisasi tidak berfungsi</translation>
 <translation id="7638584964844754484">Frasa sandi salah</translation>
 <translation id="7649070708921625228">Bantuan</translation>
+<translation id="7657481849127058215">Tambahkan Tab</translation>
 <translation id="7658239707568436148">Batal</translation>
 <translation id="7671141431838911305">INSTAL</translation>
 <translation id="7765158879357617694">Pindahkan</translation>
@@ -385,6 +386,7 @@
 <translation id="8073670137947914548">Download selesai</translation>
 <translation id="8076014560081431679">Setelan situs yang disimpan tidak akan dihapus dan dapat mencerminkan kebiasaan penjelajahan Anda. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation>
 <translation id="8080028325999236607">Tutup Semua Tab</translation>
+<translation id="8114753159095730575">Download file tersedia. Opsi tersedia di dekat bagian bawah layar.</translation>
 <translation id="8205564605687841303">Batal</translation>
 <translation id="8225985093977202398">Gambar &amp; File dalam Cache</translation>
 <translation id="8261506727792406068">Hapus</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
index 85fcaba..5c9cacc2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -363,6 +363,7 @@
 <translation id="7605594153474022051">동기화가 작동하지 않음</translation>
 <translation id="7638584964844754484">암호가 잘못되었습니다.</translation>
 <translation id="7649070708921625228">도움말</translation>
+<translation id="7657481849127058215">탭 추가</translation>
 <translation id="7658239707568436148">취소</translation>
 <translation id="7671141431838911305">설치</translation>
 <translation id="7765158879357617694">이동</translation>
@@ -385,6 +386,7 @@
 <translation id="8073670137947914548">다운로드가 완료되었습니다</translation>
 <translation id="8076014560081431679">저장된 사이트 설정은 삭제되지 않으며 인터넷 사용 습관이 반영될 수 있습니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation>
 <translation id="8080028325999236607">탭 모두 닫기</translation>
+<translation id="8114753159095730575">파일을 다운로드할 수 있습니다. 화면 하단에서 옵션을 선택할 수 있습니다.</translation>
 <translation id="8205564605687841303">취소</translation>
 <translation id="8225985093977202398">캐시된 이미지 및 파일</translation>
 <translation id="8261506727792406068">삭제</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
index 8ceab98a..c1fcbc1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -137,6 +137,7 @@
 <translation id="3393920035788932672">പോപ്പ്-അപ്പുകൾ അനുവദിച്ചു</translation>
 <translation id="3445288400492335833"><ph name="MINUTES" /> മി.</translation>
 <translation id="3448016392200048164">വിഭജിത കാഴ്‌ച</translation>
+<translation id="3469166899695866866">ഡൗൺലോഡ് നിർത്തണോ?</translation>
 <translation id="3474624961160222204"><ph name="NAME" /> ആയി തുടരുക</translation>
 <translation id="3474649192738347024">ഫോമുകൾ പൂരിപ്പിച്ചു.</translation>
 <translation id="3478058380795961209">കാലഹരണപ്പെടുന്ന മാസം</translation>
@@ -381,6 +382,7 @@
 <translation id="8023878949384262191">വിഭാഗത്തെ വിപുലീകരിക്കുന്നു.</translation>
 <translation id="8059533439631660104">വിഭാഗത്തെ ചുരുക്കുന്നു.</translation>
 <translation id="806745655614357130">എന്റെ വിവരങ്ങൾ പ്രത്യേകം വേർതിരിച്ച് സൂക്ഷിക്കുക</translation>
+<translation id="8073670137947914548">ഡൗൺലോഡ് പൂർത്തിയായി</translation>
 <translation id="8076014560081431679">സംരക്ഷിച്ച സൈറ്റ് ക്രമീകരണം ഇല്ലാതാക്കപ്പെടില്ല, ഇത് നിങ്ങളുടെ ബ്രൗസിംഗ് രീതികളെ പ്രതിഫലിപ്പിക്കാനുമിടയുണ്ട്. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation>
 <translation id="8080028325999236607">എല്ലാ ടാബുകളും അടയ്‌ക്കുക</translation>
 <translation id="8205564605687841303">റദ്ദാക്കുക</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index 33fdd1cf..3af23d0f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -363,6 +363,7 @@
 <translation id="7605594153474022051">Synchronizacja nie działa</translation>
 <translation id="7638584964844754484">Nieprawidłowe hasło</translation>
 <translation id="7649070708921625228">Pomoc</translation>
+<translation id="7657481849127058215">Dodaj kartę</translation>
 <translation id="7658239707568436148">Anuluj</translation>
 <translation id="7671141431838911305">ZAINSTALUJ</translation>
 <translation id="7765158879357617694">Przenieś</translation>
@@ -385,6 +386,7 @@
 <translation id="8073670137947914548">Pobieranie zakończone</translation>
 <translation id="8076014560081431679">Zapisane ustawienia witryn nie zostaną usunięte i mogą zawierać informacje o Twoim korzystaniu z przeglądarki. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
 <translation id="8080028325999236607">Zamknij wszystkie karty</translation>
+<translation id="8114753159095730575">Pobrany plik jest dostępny. Opcje są dostępne u dołu ekranu.</translation>
 <translation id="8205564605687841303">Anuluj</translation>
 <translation id="8225985093977202398">Obrazy i pliki w pamięci podręcznej</translation>
 <translation id="8261506727792406068">Usuń</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
index 51a70bed..fef1608 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -364,6 +364,7 @@
 <translation id="7605594153474022051">A sincronização não está funcionando</translation>
 <translation id="7638584964844754484">Senha incorreta</translation>
 <translation id="7649070708921625228">Ajuda</translation>
+<translation id="7657481849127058215">Adicionar guia</translation>
 <translation id="7658239707568436148">Cancelar</translation>
 <translation id="7671141431838911305">INSTALAR</translation>
 <translation id="7765158879357617694">Mover</translation>
@@ -386,6 +387,7 @@
 <translation id="8073670137947914548">Download concluído</translation>
 <translation id="8076014560081431679">As configurações salvas em sites não são excluídas e podem refletir seus hábitos de navegação. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="8080028325999236607">Fechar todas as guias</translation>
+<translation id="8114753159095730575">O download de arquivo está disponível. Opções disponíveis perto da parte inferior da tela.</translation>
 <translation id="8205564605687841303">Cancelar</translation>
 <translation id="8225985093977202398">Imagens e arquivos armazenados em cache</translation>
 <translation id="8261506727792406068">Excluir</translation>
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_cell.mm b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_cell.mm
index bb251a4..644f549 100644
--- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_cell.mm
+++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_cell.mm
@@ -178,9 +178,6 @@
                     title:(NSString*)title
             publisherName:(NSString*)publisherName
           publicationDate:(NSString*)publicationDate {
-  if (IsUIRefreshPhase1Enabled()) {
-    return [[self class] imageSize] + [[self class] standardSpacing];
-  } else {
     UILabel* titleLabel = [[UILabel alloc] init];
     [self configureTitleLabel:titleLabel];
     titleLabel.text = title;
@@ -193,15 +190,27 @@
     CGSize sizeForLabels =
         CGSizeMake(width - [self labelMarginWithImage:hasImage], 500);
 
-    CGFloat labelHeight = 3 * [[self class] standardSpacing];
-    labelHeight += [titleLabel sizeThatFits:sizeForLabels].height;
-    CGFloat additionalInfoHeight =
-        [additionalInfoLabel sizeThatFits:sizeForLabels].height;
-    labelHeight += MAX(additionalInfoHeight, kFaviconSize);
+    if (IsUIRefreshPhase1Enabled()) {
+      CGFloat minimalHeight =
+          [[self class] imageSize] + [[self class] standardSpacing];
 
-    CGFloat minimalHeight = hasImage ? [[self class] imageSize] : 0;
-    minimalHeight += 2 * [[self class] standardSpacing];
-    return MAX(minimalHeight, labelHeight);
+      CGFloat labelHeight = [[self class] standardSpacing];
+      labelHeight += [titleLabel sizeThatFits:sizeForLabels].height;
+      labelHeight += [[self class] smallSpacing];
+      CGFloat additionalInfoHeight =
+          [additionalInfoLabel sizeThatFits:sizeForLabels].height;
+      labelHeight += MAX(additionalInfoHeight, kFaviconSize);
+      return MAX(minimalHeight, labelHeight);
+    } else {
+      CGFloat labelHeight = 3 * [[self class] standardSpacing];
+      labelHeight += [titleLabel sizeThatFits:sizeForLabels].height;
+      CGFloat additionalInfoHeight =
+          [additionalInfoLabel sizeThatFits:sizeForLabels].height;
+      labelHeight += MAX(additionalInfoHeight, kFaviconSize);
+
+      CGFloat minimalHeight = hasImage ? [[self class] imageSize] : 0;
+      minimalHeight += 2 * [[self class] standardSpacing];
+      return MAX(minimalHeight, labelHeight);
   }
 }
 
@@ -215,6 +224,16 @@
 
 #pragma mark - UIView
 
+- (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection {
+  [super traitCollectionDidChange:previousTraitCollection];
+  if (IsUIRefreshPhase1Enabled() &&
+      self.traitCollection.preferredContentSizeCategory !=
+          previousTraitCollection.preferredContentSizeCategory) {
+    [[self class] configureTitleLabel:_titleLabel];
+    _additionalInformationLabel.font = [[self class] additionalInformationFont];
+  }
+}
+
 // Implements -layoutSubviews as per instructions in documentation for
 // +[MDCCollectionViewCell cr_preferredHeightForWidth:forItem:].
 - (void)layoutSubviews {
@@ -247,9 +266,10 @@
   if (IsUIRefreshPhase1Enabled()) {
     [NSLayoutConstraint activateConstraints:@[
       [_imageContainer.bottomAnchor
-          constraintLessThanOrEqualToAnchor:self.contentView.bottomAnchor],
-      [_faviconView.bottomAnchor
-          constraintEqualToAnchor:_imageContainer.bottomAnchor],
+          constraintLessThanOrEqualToAnchor:_faviconView.bottomAnchor],
+      [_faviconView.topAnchor
+          constraintGreaterThanOrEqualToAnchor:self.titleLabel.bottomAnchor
+                                      constant:[[self class] smallSpacing]]
     ]];
   } else {
     [NSLayoutConstraint activateConstraints:@[
diff --git a/ios/chrome/browser/ui/external_url_error_page_egtest.mm b/ios/chrome/browser/ui/external_url_error_page_egtest.mm
index ae144d773..61d5b9e 100644
--- a/ios/chrome/browser/ui/external_url_error_page_egtest.mm
+++ b/ios/chrome/browser/ui/external_url_error_page_egtest.mm
@@ -52,23 +52,6 @@
 
 #pragma mark - tests
 
-// Tests whether the error page is displayed for a bad URL.
-- (void)testErrorPage {
-// TODO(crbug.com/694662): This test relies on external URL because of the bug.
-// Re-enable this test on device once the bug is fixed.
-#if !TARGET_IPHONE_SIMULATOR
-  EARL_GREY_TEST_DISABLED(@"Test disabled on device.");
-#endif
-
-  std::unique_ptr<web::DataResponseProvider> provider(
-      new ErrorPageResponseProvider());
-  web::test::SetUpHttpServer(std::move(provider));
-
-  [ChromeEarlGrey loadURL:ErrorPageResponseProvider::GetDnsFailureUrl()];
-
-  [ChromeEarlGrey waitForErrorPage];
-}
-
 // Tests whether the error page is displayed if it is behind a redirect.
 - (void)testErrorPageRedirect {
 // TODO(crbug.com/694662): This test relies on external URL because of the bug.
diff --git a/ios/chrome/browser/ui/infobars/infobar_view.mm b/ios/chrome/browser/ui/infobars/infobar_view.mm
index 7474f78..b8cb765a4 100644
--- a/ios/chrome/browser/ui/infobars/infobar_view.mm
+++ b/ios/chrome/browser/ui/infobars/infobar_view.mm
@@ -34,25 +34,58 @@
 
 const char kChromeInfobarURL[] = "chromeinternal://infobar/";
 
-// UX configuration for the layout of items.
-const CGFloat kLeftMarginOnFirstLineWhenIconAbsent = 20.0;
-const CGFloat kMinimumSpaceBetweenRightAndLeftAlignedWidgets = 30.0;
-const CGFloat kRightMargin = 10.0;
-const CGFloat kSpaceBetweenWidgets = 10.0;
+// UX configuration metrics for the layout of items.
+struct LayoutMetrics {
+  CGFloat left_margin_on_first_line_when_icon_absent;
+  CGFloat minimum_space_between_right_and_left_aligned_widgets;
+  CGFloat right_margin;
+  CGFloat space_between_widgets;
+  CGFloat close_button_inner_padding;
+  CGFloat button_height;
+  CGFloat button_margin;
+  CGFloat extra_button_margin_on_single_line;
+  CGFloat button_spacing;
+  CGFloat button_width_units;
+  CGFloat buttons_margin_top;
+  CGFloat close_button_margin_left;
+  CGFloat label_line_spacing;
+  CGFloat label_margin_bottom;
+  CGFloat extra_margin_between_label_and_button;
+  CGFloat label_margin_top;
+  CGFloat minimum_infobar_height;
+  CGFloat horizontal_space_between_icon_and_text;
+};
+
+// This defines the layout metrics for Chrome iOS legacy UI.
+// Some layout metrics defined as constants are inter-related.
 const CGFloat kCloseButtonInnerPadding = 16.0;
-const CGFloat kButtonHeight = 36.0;
-const CGFloat kButtonMargin = 16.0;
-const CGFloat kExtraButtonMarginOnSingleLine = 8.0;
-const CGFloat kButtonSpacing = 8.0;
-const CGFloat kButtonWidthUnits = 8.0;
-const CGFloat kButtonsTopMargin = kCloseButtonInnerPadding;
-const CGFloat kCloseButtonLeftMargin = 16.0;
-const CGFloat kLabelLineSpacing = 5.0;
-const CGFloat kLabelMarginBottom = 22.0;
-const CGFloat kExtraMarginBetweenLabelAndButton = 8.0;
-const CGFloat kLabelMarginTop = kButtonsTopMargin + 5.0;  // Baseline lowered.
-const CGFloat kMinimumInfobarHeight = 68.0;
-const CGFloat kHorizontalSpaceBetweenIconAndText = 16.0;
+const CGFloat kButtonsMarginTop = kCloseButtonInnerPadding;
+const CGFloat kLabelMarginTop = kButtonsMarginTop + 5.0;  // Baseline lowered.
+const LayoutMetrics kLayoutMetricsLegacy = {
+    20.0,  // left_margin_on_first_line_when_icon_absent
+    30.0,  // minimum_space_between_right_and_left_aligned_widgets
+    10.0,  // right_margin
+    10.0,  // space_between_widgets
+    kCloseButtonInnerPadding,
+    36.0,  // button_height
+    16.0,  // button_margin
+    8.0,   // extra_button_margin_on_single_line
+    8.0,   // button_spacing
+    8.0,   // button_width_units
+    kButtonsMarginTop,
+    16.0,  // close_button_margin_left
+    5.0,   // label_line_spacing
+    22.0,  // label_margin_bottom
+    8.0,   // extra_margin_between_label_and_button
+    kLabelMarginTop,
+    68.0,  // minimum_infobar_height
+    16.0   // horizontal_space_between_icon_and_text
+};
+
+// Returns the layout metrics data structure. Returned value is never nil.
+const LayoutMetrics* GetCurrentLayoutMetrics() {
+  return &kLayoutMetricsLegacy;
+}
 
 const int kButton2TitleColor = 0x4285f4;
 
@@ -84,9 +117,13 @@
   UISwitch* switch_;
   CGFloat preferredTotalWidth_;
   CGFloat preferredLabelWidth_;
+  // Layout metrics for calculating item placement.
+  const LayoutMetrics* metrics_;
 }
 
 - (id)initWithLabel:(NSString*)labelText isOn:(BOOL)isOn {
+  metrics_ = GetCurrentLayoutMetrics();
+
   // Creates switch and label.
   UILabel* tempLabel = [[UILabel alloc] initWithFrame:CGRectZero];
   [tempLabel setTextAlignment:NSTextAlignmentNatural];
@@ -108,7 +145,8 @@
       [[tempLabel text] cr_boundingSizeWithSize:maxSize font:[tempLabel font]];
   CGSize switchSize = [tempSwitch frame].size;
   CGRect frameRect = CGRectMake(
-      0, 0, labelSize.width + kSpaceBetweenWidgets + switchSize.width,
+      0, 0,
+      labelSize.width + metrics_->space_between_widgets + switchSize.width,
       std::max(labelSize.height, switchSize.height));
   self = [super initWithFrame:frameRect];
   if (!self)
@@ -148,7 +186,7 @@
 
 - (CGFloat)heightRequiredForSwitchWithWidth:(CGFloat)width layout:(BOOL)layout {
   CGFloat widthLeftForLabel =
-      width - [switch_ frame].size.width - kSpaceBetweenWidgets;
+      width - [switch_ frame].size.width - metrics_->space_between_widgets;
   CGSize maxSize = CGSizeMake(widthLeftForLabel, CGFLOAT_MAX);
   CGSize labelSize =
       [[label_ text] cr_boundingSizeWithSize:maxSize font:[label_ font]];
@@ -163,7 +201,7 @@
     [label_ setFrame:newLabelFrame];
     CGRect newSwitchFrame;
     newSwitchFrame.origin.x =
-        CGRectGetMaxX(newLabelFrame) + kSpaceBetweenWidgets;
+        CGRectGetMaxX(newLabelFrame) + metrics_->space_between_widgets;
     newSwitchFrame.origin.y = (viewHeight - [switch_ frame].size.height) / 2;
     newSwitchFrame.size = [switch_ frame].size;
     newSwitchFrame = AlignRectOriginAndSizeToPixels(newSwitchFrame);
@@ -248,6 +286,8 @@
   UIButton* button2_;
   // Drop shadow.
   UIImageView* shadow_;
+  // Layout metrics for calculating item placement.
+  const LayoutMetrics* metrics_;
 }
 
 @synthesize visibleHeight = visibleHeight_;
@@ -257,6 +297,7 @@
   self = [super initWithFrame:frame];
   if (self) {
     delegate_ = delegate;
+    metrics_ = GetCurrentLayoutMetrics();
     // Make the drop shadow.
     UIImage* shadowImage = [UIImage imageNamed:@"infobar_shadow"];
     shadow_ = [[UIImageView alloc] initWithImage:shadowImage];
@@ -282,9 +323,9 @@
   CGFloat leftMargin = 0;
   if (imageView_) {
     leftMargin += CGRectGetMaxX([self frameOfIcon]);
-    leftMargin += kHorizontalSpaceBetweenIconAndText;
+    leftMargin += metrics_->horizontal_space_between_icon_and_text;
   } else {
-    leftMargin += kLeftMarginOnFirstLineWhenIconAbsent;
+    leftMargin += metrics_->left_margin_on_first_line_when_icon_absent;
     leftMargin += SafeAreaInsetsForView(self).left;
   }
   return leftMargin;
@@ -293,7 +334,8 @@
 // Returns the width reserved for the close button.
 - (CGFloat)rightMarginOnFirstLine {
   return [closeButton_ imageView].image.size.width +
-         kCloseButtonInnerPadding * 2 + SafeAreaInsetsForView(self).right;
+         metrics_->close_button_inner_padding * 2 +
+         SafeAreaInsetsForView(self).right;
 }
 
 // Returns the horizontal space available between the icon and the close
@@ -325,7 +367,8 @@
   // multiple of 8 to fit Material grid spacing requirements.
   CGFloat labelWidth =
       [button sizeThatFits:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)].width;
-  return ceil(labelWidth / kButtonWidthUnits) * kButtonWidthUnits;
+  return ceil(labelWidth / metrics_->button_width_units) *
+         metrics_->button_width_units;
 }
 
 // Returns the width of the buttons if they are laid out on the first line.
@@ -333,7 +376,7 @@
   CGFloat width = [self narrowestWidthOfButton:button1_] +
                   [self narrowestWidthOfButton:button2_];
   if (button1_ && button2_) {
-    width += kSpaceBetweenWidgets;
+    width += metrics_->space_between_widgets;
   }
   return width;
 }
@@ -350,7 +393,7 @@
   BOOL rightWidgetsArePresent = button1_ || button2_ || switchView_;
   if (!leftWidgetsArePresent || !rightWidgetsArePresent)
     return 0;
-  return kMinimumSpaceBetweenRightAndLeftAlignedWidgets;
+  return metrics_->minimum_space_between_right_and_left_aligned_widgets;
 }
 
 // Returns the space required to separate the switch and the buttons.
@@ -359,7 +402,7 @@
   BOOL switchIsPresent = (switchView_ != nil);
   if (!buttonsArePresent || !switchIsPresent)
     return 0;
-  return kSpaceBetweenWidgets;
+  return metrics_->space_between_widgets;
 }
 
 // Lays out |button| at the height |y| and in the position |position|.
@@ -397,7 +440,7 @@
   CGFloat minWidth =
       std::min([self narrowestWidthOfButton:button], maxX - minX);
   CGFloat left = midpoint - minWidth / 2;
-  CGRect frame = CGRectMake(left, y, minWidth, kButtonHeight);
+  CGRect frame = CGRectMake(left, y, minWidth, metrics_->button_height);
   frame = AlignRectOriginAndSizeToPixels(frame);
   [button setFrame:frame];
 }
@@ -407,7 +450,7 @@
                                     y:(CGFloat)y {
   CGFloat width = [self narrowestWidthOfButton:button];
   CGFloat leftEdge = rightEdge - width;
-  CGRect frame = CGRectMake(leftEdge, y, width, kButtonHeight);
+  CGRect frame = CGRectMake(leftEdge, y, width, metrics_->button_height);
   frame = AlignRectOriginAndSizeToPixels(frame);
   [button setFrame:frame];
   return leftEdge;
@@ -422,28 +465,30 @@
       // Each button can fit in half the screen's width.
       if (layout) {
         // When there are two buttons on one line, they are positioned aligned
-        // right in the available space, spaced apart by kButtonSpacing.
+        // right in the available space, spaced apart by
+        // metrics_->button_spacing.
         CGFloat leftOfRightmostButton =
             [self layoutWideButtonAlignRight:button1_
                                    rightEdge:CGRectGetWidth(self.bounds) -
-                                             kButtonMargin -
+                                             metrics_->button_margin -
                                              SafeAreaInsetsForView(self).right
                                            y:heightOfFirstLine];
         [self layoutWideButtonAlignRight:button2_
-                               rightEdge:leftOfRightmostButton - kButtonSpacing
+                               rightEdge:leftOfRightmostButton -
+                                         metrics_->button_spacing
                                        y:heightOfFirstLine];
       }
-      return kButtonHeight;
+      return metrics_->button_height;
     } else {
       // At least one of the two buttons is larger than half the screen's width,
       // so |button2_| is placed underneath |button1_|.
       if (layout) {
         [self layoutWideButton:button1_ y:heightOfFirstLine position:CENTER];
         [self layoutWideButton:button2_
-                             y:heightOfFirstLine + kButtonHeight
+                             y:heightOfFirstLine + metrics_->button_height
                       position:CENTER];
       }
-      return 2 * kButtonHeight;
+      return 2 * metrics_->button_height;
     }
   }
   // There is at most 1 button to layout.
@@ -454,11 +499,11 @@
       // available space.
       [self layoutWideButtonAlignRight:button
                              rightEdge:CGRectGetWidth(self.bounds) -
-                                       kButtonMargin -
+                                       metrics_->button_margin -
                                        SafeAreaInsetsForView(self).right
                                      y:heightOfFirstLine];
     }
-    return kButtonHeight;
+    return metrics_->button_height;
   }
   return 0;
 }
@@ -479,45 +524,50 @@
   // Tests if the label, switch, and buttons can fit on a single line.
   if (widthOfLabel + widthOfButtonAndSwitch < spaceAvailableOnFirstLine) {
     // The label, switch, and buttons can fit on a single line.
-    requiredHeight = kMinimumInfobarHeight;
+    requiredHeight = metrics_->minimum_infobar_height;
     if (layout) {
       // Lays out the close button.
       CGRect buttonFrame = [self frameOfCloseButton:YES];
       [closeButton_ setFrame:buttonFrame];
       // Lays out the label.
       CGFloat labelHeight = [self heightRequiredForLabelWithWidth:widthOfLabel];
-      CGRect frame = CGRectMake([self leftMarginOnFirstLine],
-                                (kMinimumInfobarHeight - labelHeight) / 2,
-                                [self widthOfLabelOnASingleLine], labelHeight);
+      CGRect frame =
+          CGRectMake([self leftMarginOnFirstLine],
+                     (metrics_->minimum_infobar_height - labelHeight) / 2,
+                     [self widthOfLabelOnASingleLine], labelHeight);
       frame = AlignRectOriginAndSizeToPixels(frame);
       [label_ setFrame:frame];
       // Layouts the buttons.
       CGFloat buttonMargin =
-          rightMarginOnFirstLine + kExtraButtonMarginOnSingleLine;
+          rightMarginOnFirstLine + metrics_->extra_button_margin_on_single_line;
       if (button1_) {
         CGFloat width = [self narrowestWidthOfButton:button1_];
         CGFloat offset = width;
-        frame = CGRectMake(widthOfScreen - buttonMargin - offset,
-                           (kMinimumInfobarHeight - kButtonHeight) / 2, width,
-                           kButtonHeight);
+        frame = CGRectMake(
+            widthOfScreen - buttonMargin - offset,
+            (metrics_->minimum_infobar_height - metrics_->button_height) / 2,
+            width, metrics_->button_height);
         frame = AlignRectOriginAndSizeToPixels(frame);
         [button1_ setFrame:frame];
       }
       if (button2_) {
         CGFloat width = [self narrowestWidthOfButton:button2_];
         CGFloat offset = widthOfButtons;
-        frame = CGRectMake(widthOfScreen - buttonMargin - offset,
-                           (kMinimumInfobarHeight - kButtonHeight) / 2, width,
-                           frame.size.height = kButtonHeight);
+        frame = CGRectMake(
+            widthOfScreen - buttonMargin - offset,
+            (metrics_->minimum_infobar_height - metrics_->button_height) / 2,
+            width, frame.size.height = metrics_->button_height);
         frame = AlignRectOriginAndSizeToPixels(frame);
         [button2_ setFrame:frame];
       }
       // Lays out the switch view to the left of the buttons.
       if (switchView_) {
-        frame = CGRectMake(
-            widthOfScreen - buttonMargin - widthOfButtonAndSwitch,
-            (kMinimumInfobarHeight - [switchView_ frame].size.height) / 2.0,
-            preferredWidthOfSwitch, [switchView_ frame].size.height);
+        frame =
+            CGRectMake(widthOfScreen - buttonMargin - widthOfButtonAndSwitch,
+                       (metrics_->minimum_infobar_height -
+                        [switchView_ frame].size.height) /
+                           2.0,
+                       preferredWidthOfSwitch, [switchView_ frame].size.height);
         frame = AlignRectOriginAndSizeToPixels(frame);
         [switchView_ setFrame:frame];
       }
@@ -535,7 +585,7 @@
     }
     if (widthOfLabel + preferredWidthOfSwitch < spaceAvailableOnFirstLine) {
       // The label and switch can fit on the first line.
-      heightOfLabelAndSwitch = kMinimumInfobarHeight;
+      heightOfLabelAndSwitch = metrics_->minimum_infobar_height;
       if (layout) {
         CGFloat labelHeight =
             [self heightRequiredForLabelWithWidth:widthOfLabel];
@@ -558,20 +608,21 @@
       // The label and switch can't fit on the first line, so lay them out on
       // different lines.
       // Computes the height of the label, and optionally lays it out.
-      CGFloat labelMarginBottom = kLabelMarginBottom;
+      CGFloat labelMarginBottom = metrics_->label_margin_bottom;
       if (button1_ || button2_) {
         // Material features more padding between the label and the button than
         // the label and the bottom of the dialog when there is no button.
-        labelMarginBottom += kExtraMarginBetweenLabelAndButton;
+        labelMarginBottom += metrics_->extra_margin_between_label_and_button;
       }
       CGFloat heightOfLabelWithPadding =
           [self heightRequiredForLabelWithWidth:spaceAvailableOnFirstLine] +
-          kLabelMarginTop + labelMarginBottom;
+          metrics_->label_margin_top + labelMarginBottom;
       if (layout) {
-        CGRect labelFrame = CGRectMake(
-            [self leftMarginOnFirstLine], kLabelMarginTop,
-            spaceAvailableOnFirstLine,
-            heightOfLabelWithPadding - kLabelMarginTop - labelMarginBottom);
+        CGRect labelFrame =
+            CGRectMake([self leftMarginOnFirstLine], metrics_->label_margin_top,
+                       spaceAvailableOnFirstLine,
+                       heightOfLabelWithPadding - metrics_->label_margin_top -
+                           labelMarginBottom);
         labelFrame = AlignRectOriginAndSizeToPixels(labelFrame);
         [label_ setFrame:labelFrame];
       }
@@ -583,14 +634,15 @@
         // call to |leftMarginOnFirstLine|.
         CGFloat widthAvailableForSwitchView = [self frame].size.width -
                                               [self leftMarginOnFirstLine] -
-                                              kRightMargin;
+                                              metrics_->right_margin;
         CGFloat heightOfSwitch = [switchView_
             heightRequiredForSwitchWithWidth:widthAvailableForSwitchView
                                       layout:layout];
         // If there are buttons underneath the switch, add padding.
         if (button1_ || button2_) {
-          heightOfSwitchWithPadding = heightOfSwitch + kSpaceBetweenWidgets +
-                                      kExtraMarginBetweenLabelAndButton;
+          heightOfSwitchWithPadding =
+              heightOfSwitch + metrics_->space_between_widgets +
+              metrics_->extra_margin_between_label_and_button;
         } else {
           heightOfSwitchWithPadding = heightOfSwitch;
         }
@@ -604,7 +656,7 @@
       }
       heightOfLabelAndSwitch =
           std::max(heightOfLabelWithPadding + heightOfSwitchWithPadding,
-                   kMinimumInfobarHeight);
+                   metrics_->minimum_infobar_height);
     }
     // Lays out the button(s) under the label and switch.
     CGFloat heightOfButtons =
@@ -612,7 +664,7 @@
                                               layout:layout];
     requiredHeight = heightOfLabelAndSwitch;
     if (heightOfButtons > 0)
-      requiredHeight += heightOfButtons + kButtonMargin;
+      requiredHeight += heightOfButtons + metrics_->button_margin;
   }
   // Take into account the bottom safe area.
   // The top safe area is ignored because at rest (i.e. not during animations)
@@ -768,7 +820,7 @@
   NSMutableParagraphStyle* paragraphStyle =
       [[NSMutableParagraphStyle alloc] init];
   paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
-  paragraphStyle.lineSpacing = kLabelLineSpacing;
+  paragraphStyle.lineSpacing = metrics_->label_line_spacing;
   NSDictionary* attributes = @{
     NSParagraphStyleAttributeName : paragraphStyle,
     NSFontAttributeName : font,
@@ -881,8 +933,8 @@
   DCHECK(closeButton_);
   // Add padding to increase the touchable area.
   CGSize closeButtonSize = [closeButton_ imageView].image.size;
-  closeButtonSize.width += kCloseButtonInnerPadding * 2;
-  closeButtonSize.height += kCloseButtonInnerPadding * 2;
+  closeButtonSize.width += metrics_->close_button_inner_padding * 2;
+  closeButtonSize.height += metrics_->close_button_inner_padding * 2;
   CGFloat x = CGRectGetMaxX(self.frame) - closeButtonSize.width -
               SafeAreaInsetsForView(self).right;
   // Aligns the close button at the top (height includes touch padding).
@@ -890,15 +942,16 @@
   if (singleLineMode) {
     // On single-line mode the button is centered vertically.
     y = ui::AlignValueToUpperPixel(
-        (kMinimumInfobarHeight - closeButtonSize.height) * 0.5);
+        (metrics_->minimum_infobar_height - closeButtonSize.height) * 0.5);
   }
   return CGRectMake(x, y, closeButtonSize.width, closeButtonSize.height);
 }
 
 - (CGRect)frameOfIcon {
   CGSize iconSize = [imageView_ image].size;
-  CGFloat y = kButtonsTopMargin;
-  CGFloat x = kCloseButtonLeftMargin + SafeAreaInsetsForView(self).left;
+  CGFloat y = metrics_->buttons_margin_top;
+  CGFloat x =
+      metrics_->close_button_margin_left + SafeAreaInsetsForView(self).left;
   return CGRectMake(AlignValueToPixel(x), AlignValueToPixel(y), iconSize.width,
                     iconSize.height);
 }
@@ -921,15 +974,15 @@
 #pragma mark - Testing
 
 - (CGFloat)minimumInfobarHeight {
-  return kMinimumInfobarHeight;
+  return metrics_->minimum_infobar_height;
 }
 
 - (CGFloat)buttonsHeight {
-  return kButtonHeight;
+  return metrics_->button_height;
 }
 
 - (CGFloat)buttonMargin {
-  return kButtonMargin;
+  return metrics_->button_margin;
 }
 
 - (const std::vector<std::pair<NSUInteger, NSRange>>&)linkRanges {
diff --git a/ios/chrome/browser/ui/omnibox/autocomplete_match_formatter.mm b/ios/chrome/browser/ui/omnibox/autocomplete_match_formatter.mm
index 8a9025d9..fe2707e 100644
--- a/ios/chrome/browser/ui/omnibox/autocomplete_match_formatter.mm
+++ b/ios/chrome/browser/ui/omnibox/autocomplete_match_formatter.mm
@@ -168,10 +168,25 @@
   return attributedText;
 }
 
+// The primary purpose of this list is to omit the "what you typed" types, since
+// those are simply the input in the omnibox and copying the text back to the
+// omnibox would be a noop. However, this list also omits other types that are
+// deprecated or not launched on iOS.
 - (BOOL)isAppendable {
-  return _match.type == AutocompleteMatchType::SEARCH_HISTORY ||
+  return _match.type == AutocompleteMatchType::BOOKMARK_TITLE ||
+         _match.type == AutocompleteMatchType::CALCULATOR ||
+         _match.type == AutocompleteMatchType::HISTORY_BODY ||
+         _match.type == AutocompleteMatchType::HISTORY_KEYWORD ||
+         _match.type == AutocompleteMatchType::HISTORY_TITLE ||
+         _match.type == AutocompleteMatchType::HISTORY_URL ||
+         _match.type == AutocompleteMatchType::NAVSUGGEST ||
+         _match.type == AutocompleteMatchType::NAVSUGGEST_PERSONALIZED ||
+         _match.type == AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED ||
+         _match.type == AutocompleteMatchType::SEARCH_SUGGEST_TAIL ||
          _match.type == AutocompleteMatchType::SEARCH_SUGGEST ||
          _match.type == AutocompleteMatchType::SEARCH_SUGGEST_ENTITY ||
+         _match.type == AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED ||
+         _match.type == AutocompleteMatchType::SEARCH_SUGGEST_TAIL ||
          _match.type == AutocompleteMatchType::PHYSICAL_WEB_DEPRECATED;
 }
 
diff --git a/ios/chrome/browser/ui/omnibox/autocomplete_suggestion.h b/ios/chrome/browser/ui/omnibox/autocomplete_suggestion.h
index 09fc8e8..3ea161fa 100644
--- a/ios/chrome/browser/ui/omnibox/autocomplete_suggestion.h
+++ b/ios/chrome/browser/ui/omnibox/autocomplete_suggestion.h
@@ -19,7 +19,7 @@
 // Some suggestions represent a URL, for example the ones from history.
 - (BOOL)isURL;
 // Some suggestions can be appended to omnibox text in order to refine the
-// query.
+// query or URL.
 - (BOOL)isAppendable;
 // The leading image for this suggestion type (loupe, globe, etc). Values are
 // described in AutocompleteMatchType enum.
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_ios.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_ios.mm
index 39c04de..bfd4393 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_ios.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_ios.mm
@@ -119,10 +119,10 @@
 
 void OmniboxPopupViewIOS::OnMatchSelectedForAppending(
     const AutocompleteMatch& match) {
-  // Make a defensive copy of |match.contents|, as CopyToOmnibox() will trigger
-  // a new round of autocomplete and modify |match|.
-  base::string16 contents(match.contents);
-  delegate_->OnSelectedMatchForAppending(contents);
+  // Make a defensive copy of |match.fill_into_edit|, as CopyToOmnibox() will
+  // trigger a new round of autocomplete and modify |match|.
+  base::string16 fill_into_edit(match.fill_into_edit);
+  delegate_->OnSelectedMatchForAppending(fill_into_edit);
 }
 
 void OmniboxPopupViewIOS::OnMatchSelectedForDeletion(
diff --git a/ios/chrome/browser/web/BUILD.gn b/ios/chrome/browser/web/BUILD.gn
index 4d6dae8..8465db0a 100644
--- a/ios/chrome/browser/web/BUILD.gn
+++ b/ios/chrome/browser/web/BUILD.gn
@@ -276,6 +276,7 @@
     "browsing_prevent_default_egtest.mm",
     "cache_egtest.mm",
     "child_window_open_by_dom_egtest.mm",
+    "error_page_egtest.mm",
     "forms_egtest.mm",
     "http_auth_egtest.mm",
     "js_print_egtest.mm",
diff --git a/ios/chrome/browser/web/error_page_egtest.mm b/ios/chrome/browser/web/error_page_egtest.mm
new file mode 100644
index 0000000..e8d6e3ad
--- /dev/null
+++ b/ios/chrome/browser/web/error_page_egtest.mm
@@ -0,0 +1,73 @@
+// 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 <EarlGrey/EarlGrey.h>
+
+#include <string>
+
+#import "base/mac/bind_objc_block.h"
+#include "base/strings/sys_string_conversions.h"
+#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
+#import "ios/chrome/test/earl_grey/chrome_test_case.h"
+#include "net/test/embedded_test_server/http_request.h"
+#include "net/test/embedded_test_server/http_response.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+// Returns ERR_INTERNET_DISCONNECTED error message.
+NSString* GetErrorMessage() {
+  return base::SysUTF8ToNSString(
+      net::ErrorToShortString(net::ERR_INTERNET_DISCONNECTED));
+}
+}  // namespace
+
+// Tests critical user journeys reloated to page load errors.
+@interface ErrorPageTestCase : ChromeTestCase
+// YES if test server is replying with valid HTML content (URL query). NO if
+// test server closes the socket.
+@property(atomic) BOOL serverRespondsWithContent;
+@end
+
+@implementation ErrorPageTestCase
+@synthesize serverRespondsWithContent = _serverRespondsWithContent;
+
+- (void)setUp {
+  [super setUp];
+
+  // Tests handler which replies with URL query if serverRespondsWithContent set
+  // to YES. Otherwise the handler closes the socket.
+  using net::test_server::HttpRequest;
+  using net::test_server::HttpResponse;
+  auto handler = ^std::unique_ptr<HttpResponse>(const HttpRequest& request) {
+    if (!self.serverRespondsWithContent) {
+      return std::make_unique<net::test_server::RawHttpResponse>(
+          /*headers=*/"", /*contents=*/"");
+    }
+    auto response = std::make_unique<net::test_server::BasicHttpResponse>();
+    response->set_content_type("text/html");
+    response->set_content(request.GetURL().query());
+    return std::move(response);
+  };
+  self.testServer->RegisterDefaultHandler(base::BindBlockArc(handler));
+
+  GREYAssertTrue(self.testServer->Start(), @"Test server failed to start.");
+}
+
+// Loads the URL which fails to load, then sucessfully reloads the page.
+- (void)testReload {
+  // No response leads to ERR_INTERNET_DISCONNECTED error.
+  self.serverRespondsWithContent = NO;
+  [ChromeEarlGrey loadURL:self.testServer->GetURL("/?foo")];
+  [ChromeEarlGrey waitForStaticHTMLViewContainingText:GetErrorMessage()];
+
+  // Reload the page, which should load without errors.
+  self.serverRespondsWithContent = YES;
+  [ChromeEarlGrey reload];
+  [ChromeEarlGrey waitForWebViewContainingText:"foo"];
+}
+
+@end
diff --git a/mojo/edk/system/channel_unittest.cc b/mojo/edk/system/channel_unittest.cc
index de6aa85..7969f9f 100644
--- a/mojo/edk/system/channel_unittest.cc
+++ b/mojo/edk/system/channel_unittest.cc
@@ -37,7 +37,7 @@
   MOCK_METHOD0(ShutDownImpl, void());
   MOCK_METHOD0(LeakHandle, void());
 
-  void Write(MessagePtr message) {}
+  void Write(MessagePtr message) override {}
 
  protected:
   ~TestChannel() override {}
diff --git a/mojo/public/cpp/bindings/thread_safe_interface_ptr.h b/mojo/public/cpp/bindings/thread_safe_interface_ptr.h
index fb69037..0a5c7f6 100644
--- a/mojo/public/cpp/bindings/thread_safe_interface_ptr.h
+++ b/mojo/public/cpp/bindings/thread_safe_interface_ptr.h
@@ -192,7 +192,7 @@
         response_->event.Signal();
     }
 
-    bool Accept(Message* message) {
+    bool Accept(Message* message) override {
       response_->message = std::move(*message);
       response_->received = true;
       response_->event.Signal();
diff --git a/net/cert/internal/system_trust_store.cc b/net/cert/internal/system_trust_store.cc
index f5c2b5f..0ae0abb2 100644
--- a/net/cert/internal/system_trust_store.cc
+++ b/net/cert/internal/system_trust_store.cc
@@ -157,7 +157,7 @@
 
 namespace {
 
-constexpr char kRootCertsFileFuchsia[] = "/system/data/boringssl/cert.pem";
+constexpr char kRootCertsFileFuchsia[] = "/config/ssl/cert.pem";
 
 class FuchsiaSystemCerts {
  public:
diff --git a/net/quic/chromium/quic_test_packet_maker.cc b/net/quic/chromium/quic_test_packet_maker.cc
index c6f8056..6541b19 100644
--- a/net/quic/chromium/quic_test_packet_maker.cc
+++ b/net/quic/chromium/quic_test_packet_maker.cc
@@ -125,9 +125,11 @@
   DVLOG(1) << "Adding frame: " << frames[0];
 
   QuicStopWaitingFrame stop_waiting;
-  stop_waiting.least_unacked = least_unacked;
-  frames.push_back(QuicFrame(&stop_waiting));
-  DVLOG(1) << "Adding frame: " << frames[1];
+  if (version_ <= QUIC_VERSION_43) {
+    stop_waiting.least_unacked = least_unacked;
+    frames.push_back(QuicFrame(&stop_waiting));
+    DVLOG(1) << "Adding frame: " << frames[1];
+  }
 
   frames.push_back(QuicFrame(QuicPingFrame()));
   DVLOG(1) << "Adding frame: " << frames[2];
@@ -218,9 +220,11 @@
   DVLOG(1) << "Adding frame: " << frames[0];
 
   QuicStopWaitingFrame stop_waiting;
-  stop_waiting.least_unacked = least_unacked;
-  frames.push_back(QuicFrame(&stop_waiting));
-  DVLOG(1) << "Adding frame: " << frames[1];
+  if (version_ <= QUIC_VERSION_43) {
+    stop_waiting.least_unacked = least_unacked;
+    frames.push_back(QuicFrame(&stop_waiting));
+    DVLOG(1) << "Adding frame: " << frames[1];
+  }
 
   QuicRstStreamFrame rst(1, stream_id, error_code, bytes_written);
   frames.push_back(QuicFrame(&rst));
@@ -270,9 +274,11 @@
   DVLOG(1) << "Adding frame: " << frames[0];
 
   QuicStopWaitingFrame stop_waiting;
-  stop_waiting.least_unacked = least_unacked;
-  frames.push_back(QuicFrame(&stop_waiting));
-  DVLOG(1) << "Adding frame: " << frames[1];
+  if (version_ <= QUIC_VERSION_43) {
+    stop_waiting.least_unacked = least_unacked;
+    frames.push_back(QuicFrame(&stop_waiting));
+    DVLOG(1) << "Adding frame: " << frames[1];
+  }
 
   QuicConnectionCloseFrame close;
   close.error_code = quic_error;
@@ -378,8 +384,10 @@
   frames.push_back(ack_frame);
 
   QuicStopWaitingFrame stop_waiting;
-  stop_waiting.least_unacked = least_unacked;
-  frames.push_back(QuicFrame(&stop_waiting));
+  if (version_ <= QUIC_VERSION_43) {
+    stop_waiting.least_unacked = least_unacked;
+    frames.push_back(QuicFrame(&stop_waiting));
+  }
 
   std::unique_ptr<QuicPacket> packet(
       BuildUnsizedDataPacket(&framer, header, frames));
@@ -456,8 +464,10 @@
   frames.push_back(QuicFrame(&ack));
 
   QuicStopWaitingFrame stop_waiting;
-  stop_waiting.least_unacked = least_unacked;
-  frames.push_back(QuicFrame(&stop_waiting));
+  if (version_ <= QUIC_VERSION_43) {
+    stop_waiting.least_unacked = least_unacked;
+    frames.push_back(QuicFrame(&stop_waiting));
+  }
 
   QuicStreamFrame stream_frame(stream_id, fin, offset, data);
   frames.push_back(QuicFrame(&stream_frame));
@@ -932,9 +942,11 @@
   DVLOG(1) << "Adding frame: " << frames[0];
 
   QuicStopWaitingFrame stop_waiting;
-  stop_waiting.least_unacked = least_unacked;
-  frames.push_back(QuicFrame(&stop_waiting));
-  DVLOG(1) << "Adding frame: " << frames[1];
+  if (version_ <= QUIC_VERSION_43) {
+    stop_waiting.least_unacked = least_unacked;
+    frames.push_back(QuicFrame(&stop_waiting));
+    DVLOG(1) << "Adding frame: " << frames[1];
+  }
 
   const bool exclusive = client_headers_include_h2_stream_dependency_;
   QuicStreamOffset header_offset = 0;
diff --git a/net/quic/core/quic_connection.cc b/net/quic/core/quic_connection.cc
index b86d9cd..aa98f08 100644
--- a/net/quic/core/quic_connection.cc
+++ b/net/quic/core/quic_connection.cc
@@ -308,7 +308,7 @@
       next_mtu_probe_at_(kPacketsBetweenMtuProbesBase),
       largest_received_packet_size_(0),
       write_error_occurred_(false),
-      no_stop_waiting_frames_(false),
+      no_stop_waiting_frames_(transport_version() > QUIC_VERSION_43),
       consecutive_num_packets_with_no_retransmittable_frames_(0),
       fill_up_link_during_probing_(false),
       probing_retransmission_pending_(false),
diff --git a/net/quic/core/quic_connection_test.cc b/net/quic/core/quic_connection_test.cc
index 39fed05..ce54802 100644
--- a/net/quic/core/quic_connection_test.cc
+++ b/net/quic/core/quic_connection_test.cc
@@ -747,9 +747,13 @@
   for (size_t i = 0; i < all_supported_versions.size(); ++i) {
     for (AckResponse ack_response :
          {AckResponse::kDefer, AckResponse::kImmediate}) {
-      for (bool stop_waiting : {true, false}) {
-        params.push_back(
-            TestParams(all_supported_versions[i], ack_response, stop_waiting));
+      for (bool no_stop_waiting : {true, false}) {
+        // After version 43, never use STOP_WAITING.
+        if (all_supported_versions[i].transport_version <= QUIC_VERSION_43 ||
+            no_stop_waiting) {
+          params.push_back(TestParams(all_supported_versions[i], ack_response,
+                                      no_stop_waiting));
+        }
       }
     }
   }
@@ -795,8 +799,12 @@
     SetQuicReloadableFlag(quic_respect_ietf_header, true);
     connection_.set_defer_send_in_response_to_packets(GetParam().ack_response ==
                                                       AckResponse::kDefer);
-    QuicConnectionPeer::SetNoStopWaitingFrames(&connection_,
-                                               GetParam().no_stop_waiting);
+    if (version().transport_version > QUIC_VERSION_43) {
+      EXPECT_TRUE(QuicConnectionPeer::GetNoStopWaitingFrames(&connection_));
+    } else {
+      QuicConnectionPeer::SetNoStopWaitingFrames(&connection_,
+                                                 GetParam().no_stop_waiting);
+    }
     connection_.set_visitor(&visitor_);
     if (connection_.session_decides_what_to_write()) {
       connection_.SetSessionNotifier(&notifier_);
@@ -2235,6 +2243,9 @@
 }
 
 TEST_P(QuicConnectionTest, LeastUnackedLower) {
+  if (GetParam().version.transport_version > QUIC_VERSION_43) {
+    return;
+  }
   EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
 
   SendStreamDataToPeer(1, "foo", 0, NO_FIN, nullptr);
@@ -5506,6 +5517,9 @@
 }
 
 TEST_P(QuicConnectionTest, MissingPacketsBeforeLeastUnacked) {
+  if (GetParam().version.transport_version > QUIC_VERSION_43) {
+    return;
+  }
   // Set the packet number of the ack packet to be least unacked (4).
   QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 3);
   EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
diff --git a/net/quic/core/quic_framer.cc b/net/quic/core/quic_framer.cc
index f8dce9c5..26df755 100644
--- a/net/quic/core/quic_framer.cc
+++ b/net/quic/core/quic_framer.cc
@@ -3004,6 +3004,7 @@
 bool QuicFramer::AppendStopWaitingFrame(const QuicPacketHeader& header,
                                         const QuicStopWaitingFrame& frame,
                                         QuicDataWriter* writer) {
+  DCHECK_GE(QUIC_VERSION_43, version_.transport_version);
   DCHECK_GE(header.packet_number, frame.least_unacked);
   const QuicPacketNumber least_unacked_delta =
       header.packet_number - frame.least_unacked;
diff --git a/net/quic/core/quic_framer_test.cc b/net/quic/core/quic_framer_test.cc
index 09fabe7..0d9ed6b 100644
--- a/net/quic/core/quic_framer_test.cc
+++ b/net/quic/core/quic_framer_test.cc
@@ -3399,6 +3399,9 @@
 }
 
 TEST_P(QuicFramerTest, NewStopWaitingFrame) {
+  if (version_.transport_version > QUIC_VERSION_43) {
+    return;
+  }
   // clang-format off
   PacketFragments packet = {
       // public flags (8 byte connection_id)
@@ -3477,6 +3480,9 @@
 }
 
 TEST_P(QuicFramerTest, InvalidNewStopWaitingFrame) {
+  if (version_.transport_version > QUIC_VERSION_43) {
+    return;
+  }
   // clang-format off
   unsigned char packet[] = {
     // public flags (8 byte connection_id)
@@ -5986,6 +5992,9 @@
 }
 
 TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) {
+  if (version_.transport_version > QUIC_VERSION_43) {
+    return;
+  }
   QuicPacketHeader header;
   header.connection_id = kConnectionId;
   header.reset_flag = false;
diff --git a/net/quic/core/quic_packet_generator_test.cc b/net/quic/core/quic_packet_generator_test.cc
index 38053c75..0fdf2d6 100644
--- a/net/quic/core/quic_packet_generator_test.cc
+++ b/net/quic/core/quic_packet_generator_test.cc
@@ -653,8 +653,11 @@
 }
 
 TEST_F(QuicPacketGeneratorTest, ConsumeDataLargeSendAckTrue) {
+  if (framer_.transport_version() > QUIC_VERSION_43) {
+    return;
+  }
   delegate_.SetCanNotWrite();
-  generator_.SetShouldSendAck(true);
+  generator_.SetShouldSendAck(true /* stop_waiting */);
   delegate_.SetCanWriteAnything();
 
   // Set up frames to write into the creator when control frames are written.
@@ -1035,6 +1038,9 @@
 }
 
 TEST_F(QuicPacketGeneratorTest, DontCrashOnInvalidStopWaiting) {
+  if (framer_.transport_version() > QUIC_VERSION_43) {
+    return;
+  }
   // Test added to ensure the generator does not crash when an invalid frame is
   // added.  Because this is an indication of internal programming errors,
   // DFATALs are expected.
diff --git a/net/quic/test_tools/quic_connection_peer.cc b/net/quic/test_tools/quic_connection_peer.cc
index 11e4227..3b2bf966 100644
--- a/net/quic/test_tools/quic_connection_peer.cc
+++ b/net/quic/test_tools/quic_connection_peer.cc
@@ -279,6 +279,11 @@
 }
 
 // static
+bool QuicConnectionPeer::GetNoStopWaitingFrames(QuicConnection* connection) {
+  return connection->no_stop_waiting_frames_;
+}
+
+// static
 void QuicConnectionPeer::SetNoStopWaitingFrames(QuicConnection* connection,
                                                 bool no_stop_waiting_frames) {
   connection->no_stop_waiting_frames_ = no_stop_waiting_frames;
diff --git a/net/quic/test_tools/quic_connection_peer.h b/net/quic/test_tools/quic_connection_peer.h
index d67cb753..361895c1 100644
--- a/net/quic/test_tools/quic_connection_peer.h
+++ b/net/quic/test_tools/quic_connection_peer.h
@@ -120,6 +120,7 @@
                                     float ack_decimation_delay);
   static bool HasRetransmittableFrames(QuicConnection* connection,
                                        QuicPacketNumber packet_number);
+  static bool GetNoStopWaitingFrames(QuicConnection* connection);
   static void SetNoStopWaitingFrames(QuicConnection* connection,
                                      bool no_stop_waiting_frames);
   static void SetMaxTrackedPackets(QuicConnection* connection,
diff --git a/remoting/resources/remoting_strings_ar.xtb b/remoting/resources/remoting_strings_ar.xtb
index 50578e8c..1b88def4 100644
--- a/remoting/resources/remoting_strings_ar.xtb
+++ b/remoting/resources/remoting_strings_ar.xtb
@@ -145,7 +145,7 @@
 <translation id="4207623512727273241">يُرجى تشغيل أداة التثبيت قبل المتابعة.</translation>
 <translation id="4227991223508142681">أداة إدارة حسابات المضيفين</translation>
 <translation id="4240294130679914010">‏أداة إزالة مضيف التوافق مع نظام التشغيل Chrome</translation>
-<translation id="4249741460382919890">إصلاحات عامة وتحسينات في الثبات</translation>
+<translation id="4249741460382919890">الإصلاحات العامة والتحسينات في الثبات</translation>
 <translation id="4277463233460010382">تمت تهيئة هذا الكمبيوتر بحيث يسمح لعميل واحد أو أكثر بالاتصال بدون إدخال رقم تعريف شخصي.</translation>
 <translation id="4277736576214464567">رمز الدخول غير صالح، يُرجى إعادة المحاولة.</translation>
 <translation id="4361728918881830843">‏لتمكين الاتصالات عن بُعد بجهاز كمبيوتر مختلف، ثبِّت 
diff --git a/remoting/resources/remoting_strings_ml.xtb b/remoting/resources/remoting_strings_ml.xtb
index d5ea4776..89df605 100644
--- a/remoting/resources/remoting_strings_ml.xtb
+++ b/remoting/resources/remoting_strings_ml.xtb
@@ -144,6 +144,7 @@
 <translation id="4207623512727273241">തുടരുന്നതിന് മുമ്പായി ഇൻസ്റ്റാളർ പ്രവർത്തിപ്പിക്കുക.</translation>
 <translation id="4227991223508142681">ഹോസ്‌റ്റ് പ്രൊവിഷനിംഗ് യൂട്ടിലിറ്റി</translation>
 <translation id="4240294130679914010">ക്രോമോട്ടിംഗ് ഹോസ്റ്റ് അൺഇൻസ്റ്റാളർ</translation>
+<translation id="4249741460382919890">പൊതുവായ പരിഹരിക്കലുകളും സ്ഥിരത മെച്ചപ്പെടുത്തലുകളും</translation>
 <translation id="4277463233460010382">ഒരു PIN നൽകാതെ ഒന്നോ അതിലധികമോ ക്ലയന്റുകളെ കണക്റ്റുചെയ്യാൻ അനുവദിക്കുന്നതിന് ഈ കമ്പ്യൂട്ടർ കോൺഫിഗർ ചെയ്‌തിരിക്കുന്നു.</translation>
 <translation id="4277736576214464567">ആക്‌സസ് കോഡ് അസാധുവാണ്. വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="4361728918881830843">മറ്റൊരു കമ്പ്യൂട്ടറിൽ വിദൂര കണക്ഷൻ പ്രാപ്‌തമാക്കുന്നതിന്, അതിൽ Chrome വിദൂര ഡെസ്‌ക്‌ടോപ്പ് ഇൻസ്റ്റാൾ ചെയ്‌ത് “<ph name="BUTTON_NAME" />” ക്ലിക്കുചെയ്യുക.</translation>
@@ -189,6 +190,7 @@
 <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ഓഫ്‌ലൈൻ)</translation>
 <translation id="5070121137485264635">റിമോട്ട് ഹോസ്റ്റിന് നിങ്ങളെ ഒരു മൂന്നാംകക്ഷി വെബ്‌സൈറ്റിലേക്ക് പ്രാമാണീകരിക്കേണ്ടത് ആവശ്യമാണ്. തുടരുന്നതിന്, ഇനിപ്പറയുന്ന വിലാസം ആക്‌സസ്സുചെയ്യുന്നതിനായി നിങ്ങൾ Chrome വിദൂര ഡെസ്‌ക്‌ടോപ്പ് അധിക അനുമതികൾ അനുവദിക്കണം:</translation>
 <translation id="507204348399810022"><ph name="HOSTNAME" /> എന്നതിലേക്കുള്ള റിമോട്ട് കണക്ഷനുകൾ പ്രവർത്തനരഹിതമാക്കണമെന്ന് തീർച്ചയാണോ?</translation>
+<translation id="5081343395220691640">സെർവറുമായി ആശയ വിനിമയം നടത്തുന്നതിൽ പരാജയപ്പെട്ടു: <ph name="ERROR" /></translation>
 <translation id="5156271271724754543">രണ്ട് ബോക്‌സുകളിലും സമാന PIN നൽകുക.</translation>
 <translation id="5170982930780719864">ഹോസ്റ്റ് ഐഡി അസാധുവാണ്.</translation>
 <translation id="518094545883702183">നിങ്ങൾ റിപ്പോർട്ടുചെയ്യുന്ന പ്രശ്‌നം പരിഹരിക്കാനായി മാത്രമേ ഈ വിവരങ്ങൾ ഉപയോഗിക്കൂ, ഇത് നിങ്ങളുടെ റിപ്പോർട്ട് അന്വേഷിക്കുന്നവർക്ക് മാത്രമേ ലഭ്യമാകൂ ഒപ്പം 30 ദിവസത്തിൽ കൂടുതൽ നിലനിർത്തുകയുമില്ല.</translation>
diff --git a/services/network/cors/preflight_controller.cc b/services/network/cors/preflight_controller.cc
index 5a2e306e..53239f3 100644
--- a/services/network/cors/preflight_controller.cc
+++ b/services/network/cors/preflight_controller.cc
@@ -150,34 +150,19 @@
       detected_error);
 }
 
-base::Optional<mojom::CORSError> CheckPreflightResult(
+base::Optional<CORSErrorStatus> CheckPreflightResult(
     PreflightResult* result,
-    const ResourceRequest& original_request,
-    scoped_refptr<net::HttpResponseHeaders>* error_header) {
-  DCHECK(error_header);
-
+    const ResourceRequest& original_request) {
   base::Optional<mojom::CORSError> error =
       result->EnsureAllowedCrossOriginMethod(original_request.method);
   if (error)
-    return error;
+    return CORSErrorStatus(*error, original_request.method);
 
   std::string detected_error_header;
   error = result->EnsureAllowedCrossOriginHeaders(original_request.headers,
                                                   &detected_error_header);
-  if (error) {
-    // Gather information to report the error's details.
-    DCHECK(!detected_error_header.empty());
-    std::string header_value;
-    bool found = original_request.headers.GetHeader(detected_error_header,
-                                                    &header_value);
-    DCHECK(found);
-    // Status line below is dummy to construct a response header instance.
-    *error_header =
-        base::MakeRefCounted<net::HttpResponseHeaders>(base::StringPrintf(
-            "HTTP/1.0 200 OK\n%s: %s", detected_error_header.c_str(),
-            header_value.c_str()));
-    return error;
-  }
+  if (error)
+    return CORSErrorStatus(*error, detected_error_header);
 
   return base::nullopt;
 }
@@ -291,27 +276,25 @@
     std::unique_ptr<PreflightResult> result = CreatePreflightResult(
         final_url, head, original_request_, &detected_error);
 
-    scoped_refptr<net::HttpResponseHeaders> error_header;
+    base::Optional<CORSErrorStatus> detected_error_status;
     if (result) {
       // Preflight succeeded. Check |original_request_| with |result|.
       DCHECK(!detected_error);
-      detected_error =
-          CheckPreflightResult(result.get(), original_request_, &error_header);
+      detected_error_status =
+          CheckPreflightResult(result.get(), original_request_);
+    } else {
+      DCHECK(detected_error);
+      detected_error_status = CORSErrorStatus(*detected_error);
     }
 
     // TODO(toyoshim): Check the spec if we cache |result| regardless of
     // following checks.
-    if (!detected_error) {
+    if (!detected_error_status) {
       controller_->AppendToCache(*original_request_.request_initiator,
                                  original_request_.url, std::move(result));
     }
 
-    if (detected_error) {
-      std::move(completion_callback_)
-          .Run(CORSErrorStatus(*detected_error, error_header));
-    } else {
-      std::move(completion_callback_).Run(base::nullopt);
-    }
+    std::move(completion_callback_).Run(detected_error_status);
 
     RemoveFromController();
     // |this| is deleted here.
diff --git a/services/network/public/cpp/cors/cors_error_status.cc b/services/network/public/cpp/cors/cors_error_status.cc
index 4ead6ac..3179e72 100644
--- a/services/network/public/cpp/cors/cors_error_status.cc
+++ b/services/network/public/cpp/cors/cors_error_status.cc
@@ -19,18 +19,15 @@
 CORSErrorStatus::CORSErrorStatus(network::mojom::CORSError error)
     : cors_error(error) {}
 
-CORSErrorStatus::CORSErrorStatus(
-    network::mojom::CORSError error,
-    scoped_refptr<net::HttpResponseHeaders> headers)
-    : CORSErrorStatus(error) {
-  related_response_headers = headers;
-}
+CORSErrorStatus::CORSErrorStatus(network::mojom::CORSError error,
+                                 const std::string& failed_parameter)
+    : cors_error(error), failed_parameter(failed_parameter) {}
 
 CORSErrorStatus::~CORSErrorStatus() = default;
 
 bool CORSErrorStatus::operator==(const CORSErrorStatus& rhs) const {
   return cors_error == rhs.cors_error &&
-         related_response_headers == rhs.related_response_headers;
+         failed_parameter == rhs.failed_parameter;
 }
 
 }  // namespace network
diff --git a/services/network/public/cpp/cors/cors_error_status.h b/services/network/public/cpp/cors/cors_error_status.h
index 0a417346..9b79aed 100644
--- a/services/network/public/cpp/cors/cors_error_status.h
+++ b/services/network/public/cpp/cors/cors_error_status.h
@@ -5,6 +5,8 @@
 #ifndef SERVICES_NETWORK_PUBLIC_CPP_CORS_CORS_ERROR_STATUS_H_
 #define SERVICES_NETWORK_PUBLIC_CPP_CORS_CORS_ERROR_STATUS_H_
 
+#include <string>
+
 #include "base/component_export.h"
 #include "base/memory/scoped_refptr.h"
 #include "net/http/http_response_headers.h"
@@ -22,9 +24,8 @@
   CORSErrorStatus(const CORSErrorStatus& status);
 
   explicit CORSErrorStatus(network::mojom::CORSError error);
-  CORSErrorStatus(
-      network::mojom::CORSError error,
-      scoped_refptr<net::HttpResponseHeaders> related_response_headers);
+  CORSErrorStatus(network::mojom::CORSError error,
+                  const std::string& failed_parameter);
 
   ~CORSErrorStatus();
 
@@ -33,9 +34,8 @@
 
   network::mojom::CORSError cors_error;
 
-  // Partial HTTP response headers including status line that will be useful to
-  // generate a human readable error message.
-  scoped_refptr<net::HttpResponseHeaders> related_response_headers;
+  // Contains request method name, or header name that didn't pass a CORS check.
+  std::string failed_parameter;
 };
 
 }  // namespace network
diff --git a/services/network/public/cpp/network_param_ipc_traits.h b/services/network/public/cpp/network_param_ipc_traits.h
index 005ea26..7f4fc52 100644
--- a/services/network/public/cpp/network_param_ipc_traits.h
+++ b/services/network/public/cpp/network_param_ipc_traits.h
@@ -277,7 +277,7 @@
 
 IPC_STRUCT_TRAITS_BEGIN(network::CORSErrorStatus)
   IPC_STRUCT_TRAITS_MEMBER(cors_error)
-  IPC_STRUCT_TRAITS_MEMBER(related_response_headers)
+  IPC_STRUCT_TRAITS_MEMBER(failed_parameter)
 IPC_STRUCT_TRAITS_END()
 
 IPC_STRUCT_TRAITS_BEGIN(network::URLLoaderCompletionStatus)
@@ -341,9 +341,6 @@
   IPC_STRUCT_TRAITS_MEMBER(render_frame_id)
   IPC_STRUCT_TRAITS_MEMBER(is_main_frame)
   IPC_STRUCT_TRAITS_MEMBER(transition_type)
-  IPC_STRUCT_TRAITS_MEMBER(should_replace_current_entry)
-  IPC_STRUCT_TRAITS_MEMBER(transferred_request_child_id)
-  IPC_STRUCT_TRAITS_MEMBER(transferred_request_request_id)
   IPC_STRUCT_TRAITS_MEMBER(allow_download)
   IPC_STRUCT_TRAITS_MEMBER(report_raw_headers)
   IPC_STRUCT_TRAITS_MEMBER(previews_state)
diff --git a/services/network/public/cpp/resource_request.h b/services/network/public/cpp/resource_request.h
index f74f132..ee3ccdc8 100644
--- a/services/network/public/cpp/resource_request.h
+++ b/services/network/public/cpp/resource_request.h
@@ -187,17 +187,6 @@
   // about this.
   int transition_type = 0;
 
-  // For navigations, whether this navigation should replace the current session
-  // history entry on commit.
-  bool should_replace_current_entry = false;
-
-  // The following two members identify a previous request that has been
-  // created before this navigation has been transferred to a new process.
-  // This serves the purpose of recycling the old request.
-  // Unless this refers to a transferred navigation, these values are -1 and -1.
-  int transferred_request_child_id = -1;
-  int transferred_request_request_id = -1;
-
   // Whether or not we should allow the URL to download.
   bool allow_download = false;
 
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h
index 91072b0..46ec92f 100644
--- a/skia/config/SkUserConfig.h
+++ b/skia/config/SkUserConfig.h
@@ -234,10 +234,6 @@
 #define SK_DONT_OPTIMIZE_SRC_PROFILES_FOR_SPEED
 #define SK_DONT_OPTIMIZE_DST_PROFILES_FOR_SPEED
 
-// Deleting this requires rebaselining trivial diffs to
-// fast/canvas/canvas-composite-transformclip.html
-#define SK_DISABLE_ARC_TO_LINE_TO_CHECK
-
 ///////////////////////// Imported from BUILD.gn and skia_common.gypi
 
 /* In some places Skia can use static initializers for global initialization,
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index de689abd..1594ca7 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -1389,43 +1389,6 @@
         },
         "test": "wtf_unittests"
       }
-    ],
-    "isolated_scripts": [
-      {
-        "args": [
-          "--browser=exact",
-          "--browser-executable=./test_chrome",
-          "--xvfb",
-          "--skip=benchmarks.benchmark_smoke_unittest.BenchmarkSmokeTest.v8.runtime_stats.top_25",
-          "--skip=scripts_smoke_unittest.ScriptsSmokeTest.testRunTelemetryBenchmarkAsGoogletest"
-        ],
-        "isolate_name": "telemetry_perf_unittests",
-        "name": "telemetry_perf_unittests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "hard_timeout": 960,
-          "shards": 12
-        }
-      },
-      {
-        "args": [
-          "--browser=exact",
-          "--browser-executable=./test_chrome",
-          "--jobs=1",
-          "--skip=telemetry.internal.actions.action_runner_unittest.ActionRunnerTest.testWaitForElement",
-          "--skip=telemetry.internal.actions.action_runner_unittest.ActionRunnerTest.testWaitForElementWithWrongText",
-          "--skip=telemetry.internal.actions.action_runner_unittest.ActionRunnerTest.testWaitForJavaScriptCondition",
-          "--skip=telemetry.internal.actions.key_event_unittest.KeyPressActionTest.testPressEndAndHome",
-          "--skip=telemetry.internal.actions.repeatable_scroll_unittest.RepeatableScrollActionTest.testRepeatableScrollActionNoRepeats",
-          "--skip=telemetry.page.page_run_end_to_end_unittest.ActualPageRunEndToEndTests.testTrafficSettings"
-        ],
-        "isolate_name": "telemetry_unittests",
-        "name": "telemetry_unittests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "shards": 4
-        }
-      }
     ]
   }
 }
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index 240b50a..d3f753d 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -2680,5 +2680,18 @@
     "additional_compile_targets": [
       "all"
     ]
+  },
+  "linux-ozone-rel": {
+    "additional_compile_targets": [
+      "chrome"
+    ],
+    "gtest_tests": [
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "services_unittests"
+      }
+    ]
   }
 }
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json
index 9df79a3..e03aa78 100644
--- a/testing/buildbot/chromium.perf.fyi.json
+++ b/testing/buildbot/chromium.perf.fyi.json
@@ -23,6 +23,8 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
+              "device_os": "O",
+              "device_type": "gobo",
               "os": "Android",
               "pool": "chrome.tests.perf-fyi"
             }
@@ -36,8 +38,6 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build30-a7--device1\"}, {\"id\": \"build30-a7--device2\"}, {\"id\": \"build30-a7--device3\"}, {\"id\": \"build30-a7--device4\"}, {\"id\": \"build30-a7--device5\"}, {\"id\": \"build30-a7--device6\"}, {\"id\": \"build30-a7--device7\"}, {\"id\": \"build31-a7--device1\"}, {\"id\": \"build31-a7--device2\"}, {\"id\": \"build31-a7--device3\"}, {\"id\": \"build31-a7--device4\"}, {\"id\": \"build31-a7--device5\"}, {\"id\": \"build31-a7--device6\"}, {\"id\": \"build31-a7--device7\"}]",
             "--multiple-dimension-script-verbose",
             "True"
           ],
@@ -484,8 +484,6 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build246-a9\"}]",
             "--multiple-dimension-script-verbose",
             "True"
           ],
@@ -528,8 +526,6 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build246-a9\"}, {\"id\": \"build247-a9\"}, {\"id\": \"build248-a9\"}, {\"id\": \"build249-a9\"}, {\"id\": \"build250-a9\"}, {\"id\": \"build251-a9\"}, {\"id\": \"build252-a9\"}, {\"id\": \"build253-a9\"}, {\"id\": \"build254-a9\"}, {\"id\": \"build255-a9\"}, {\"id\": \"build256-a9\"}, {\"id\": \"build257-a9\"}, {\"id\": \"build258-a9\"}, {\"id\": \"build259-a9\"}, {\"id\": \"build260-a9\"}, {\"id\": \"build261-a9\"}, {\"id\": \"build262-a9\"}, {\"id\": \"build263-a9\"}, {\"id\": \"build264-a9\"}, {\"id\": \"build265-a9\"}, {\"id\": \"build266-a9\"}, {\"id\": \"build267-a9\"}, {\"id\": \"build268-a9\"}, {\"id\": \"build269-a9\"}, {\"id\": \"build270-a9\"}, {\"id\": \"build271-a9\"}]",
             "--multiple-dimension-script-verbose",
             "True"
           ],
@@ -571,8 +567,6 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build247-a9\"}]",
             "--multiple-dimension-script-verbose",
             "True"
           ],
@@ -636,6 +630,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
+              "gpu": "none",
               "os": "Linux",
               "pool": "chrome.tests.perf-fyi"
             }
@@ -649,8 +644,6 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"swarm77-c7\"}]",
             "--multiple-dimension-script-verbose",
             "True"
           ],
@@ -681,6 +674,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
+              "gpu": "none",
               "os": "Linux",
               "pool": "chrome.tests.perf-fyi"
             }
@@ -694,8 +688,6 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"swarm77-c7\"}, {\"id\": \"swarm78-c7\"}, {\"id\": \"swarm79-c7\"}]",
             "--multiple-dimension-script-verbose",
             "True"
           ],
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json
index fd2013ab..76511ffc 100644
--- a/testing/buildbot/chromium.perf.json
+++ b/testing/buildbot/chromium.perf.json
@@ -50559,10 +50559,10 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build67-a7\"}]",
             "--multiple-dimension-script-verbose",
-            "True"
+            "True",
+            "--multiple-trigger-configs",
+            "[{\"id\": \"build67-a7\"}]"
           ],
           "script": "//testing/trigger_scripts/perf_device_trigger.py"
         }
@@ -50602,10 +50602,10 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build70-a7\"}]",
             "--multiple-dimension-script-verbose",
-            "True"
+            "True",
+            "--multiple-trigger-configs",
+            "[{\"id\": \"build70-a7\"}]"
           ],
           "script": "//testing/trigger_scripts/perf_device_trigger.py"
         }
@@ -50645,10 +50645,10 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build68-a7\"}]",
             "--multiple-dimension-script-verbose",
-            "True"
+            "True",
+            "--multiple-trigger-configs",
+            "[{\"id\": \"build68-a7\"}]"
           ],
           "script": "//testing/trigger_scripts/perf_device_trigger.py"
         }
@@ -50689,10 +50689,10 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build67-a7\"}, {\"id\": \"build68-a7\"}, {\"id\": \"build69-a7\"}, {\"id\": \"build70-a7\"}, {\"id\": \"build71-a7\"}, {\"id\": \"build72-a7\"}, {\"id\": \"build73-a7\"}, {\"id\": \"build74-a7\"}, {\"id\": \"build75-a7\"}, {\"id\": \"build76-a7\"}, {\"id\": \"build77-a7\"}, {\"id\": \"build78-a7\"}, {\"id\": \"build79-a7\"}, {\"id\": \"build80-a7\"}, {\"id\": \"build81-a7\"}, {\"id\": \"build82-a7\"}, {\"id\": \"build83-a7\"}, {\"id\": \"build84-a7\"}, {\"id\": \"build85-a7\"}, {\"id\": \"build86-a7\"}, {\"id\": \"build87-a7\"}, {\"id\": \"build88-a7\"}, {\"id\": \"build89-a7\"}, {\"id\": \"build90-a7\"}, {\"id\": \"build91-a7\"}, {\"id\": \"build92-a7\"}]",
             "--multiple-dimension-script-verbose",
-            "True"
+            "True",
+            "--multiple-trigger-configs",
+            "[{\"id\": \"build67-a7\"}, {\"id\": \"build68-a7\"}, {\"id\": \"build69-a7\"}, {\"id\": \"build70-a7\"}, {\"id\": \"build71-a7\"}, {\"id\": \"build72-a7\"}, {\"id\": \"build73-a7\"}, {\"id\": \"build74-a7\"}, {\"id\": \"build75-a7\"}, {\"id\": \"build76-a7\"}, {\"id\": \"build77-a7\"}, {\"id\": \"build78-a7\"}, {\"id\": \"build79-a7\"}, {\"id\": \"build80-a7\"}, {\"id\": \"build81-a7\"}, {\"id\": \"build82-a7\"}, {\"id\": \"build83-a7\"}, {\"id\": \"build84-a7\"}, {\"id\": \"build85-a7\"}, {\"id\": \"build86-a7\"}, {\"id\": \"build87-a7\"}, {\"id\": \"build88-a7\"}, {\"id\": \"build89-a7\"}, {\"id\": \"build90-a7\"}, {\"id\": \"build91-a7\"}, {\"id\": \"build92-a7\"}]"
           ],
           "script": "//testing/trigger_scripts/perf_device_trigger.py"
         }
@@ -50732,10 +50732,10 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build69-a7\"}]",
             "--multiple-dimension-script-verbose",
-            "True"
+            "True",
+            "--multiple-trigger-configs",
+            "[{\"id\": \"build69-a7\"}]"
           ],
           "script": "//testing/trigger_scripts/perf_device_trigger.py"
         }
@@ -50779,10 +50779,10 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build41-a7\"}]",
             "--multiple-dimension-script-verbose",
-            "True"
+            "True",
+            "--multiple-trigger-configs",
+            "[{\"id\": \"build41-a7\"}]"
           ],
           "script": "//testing/trigger_scripts/perf_device_trigger.py"
         }
@@ -50823,10 +50823,10 @@
         },
         "trigger_script": {
           "args": [
-            "--multiple-trigger-configs",
-            "[{\"id\": \"build41-a7\"}, {\"id\": \"build42-a7\"}, {\"id\": \"build43-a7\"}, {\"id\": \"build44-a7\"}, {\"id\": \"build45-a7\"}, {\"id\": \"build46-a7\"}, {\"id\": \"build47-a7\"}, {\"id\": \"build48-a7\"}, {\"id\": \"build49-a7\"}, {\"id\": \"build50-a7\"}, {\"id\": \"build51-a7\"}, {\"id\": \"build52-a7\"}, {\"id\": \"build53-a7\"}, {\"id\": \"build54-a7\"}, {\"id\": \"build55-a7\"}, {\"id\": \"build56-a7\"}, {\"id\": \"build57-a7\"}, {\"id\": \"build58-a7\"}, {\"id\": \"build59-a7\"}, {\"id\": \"build60-a7\"}, {\"id\": \"build61-a7\"}, {\"id\": \"build62-a7\"}, {\"id\": \"build63-a7\"}, {\"id\": \"build64-a7\"}, {\"id\": \"build65-a7\"}, {\"id\": \"build66-a7\"}]",
             "--multiple-dimension-script-verbose",
-            "True"
+            "True",
+            "--multiple-trigger-configs",
+            "[{\"id\": \"build41-a7\"}, {\"id\": \"build42-a7\"}, {\"id\": \"build43-a7\"}, {\"id\": \"build44-a7\"}, {\"id\": \"build45-a7\"}, {\"id\": \"build46-a7\"}, {\"id\": \"build47-a7\"}, {\"id\": \"build48-a7\"}, {\"id\": \"build49-a7\"}, {\"id\": \"build50-a7\"}, {\"id\": \"build51-a7\"}, {\"id\": \"build52-a7\"}, {\"id\": \"build53-a7\"}, {\"id\": \"build54-a7\"}, {\"id\": \"build55-a7\"}, {\"id\": \"build56-a7\"}, {\"id\": \"build57-a7\"}, {\"id\": \"build58-a7\"}, {\"id\": \"build59-a7\"}, {\"id\": \"build60-a7\"}, {\"id\": \"build61-a7\"}, {\"id\": \"build62-a7\"}, {\"id\": \"build63-a7\"}, {\"id\": \"build64-a7\"}, {\"id\": \"build65-a7\"}, {\"id\": \"build66-a7\"}]"
           ],
           "script": "//testing/trigger_scripts/perf_device_trigger.py"
         }
diff --git a/testing/buildbot/filters/OWNERS b/testing/buildbot/filters/OWNERS
index 42c55bb..386f093 100644
--- a/testing/buildbot/filters/OWNERS
+++ b/testing/buildbot/filters/OWNERS
@@ -1,5 +1,12 @@
 *
 per-file fuchsia*=file://build/fuchsia/OWNERS
 
+# For changes to:
+#   mojo.fyi.network_browser_tests.filter
+#   mojo.fyi.network_content_browsertests.filter
+# If adding an exclusion for an existing failure (e.g. additional test for
+# feature X that is already not working), please add it beside the existing
+# failures. Otherwise please reach out to network-service-dev@.
+
 # TEAM: infra-dev@chromium.org
 # COMPONENT: Infra>Client>Chrome
diff --git a/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter b/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter
index 770929d..abda8105 100644
--- a/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter
+++ b/testing/buildbot/filters/mac_window_server_killers.browser_tests.filter
@@ -1,25 +1,25 @@
 # https://crbug.com/828031
 
 # Suites implicated in window_server deaths.
--PDFExtensionTest.*
--SubresourceFilterBrowserTest.*
--DevToolsBeforeUnloadTest.*
--PushMessagingBrowserTest.*
--TaskManagerBrowserTest.*
--AppBannerManagerBrowserTest.*
--SpellingMenuObserverTest.*
--PluginPowerSaverBrowserTest.*
--SubresourceFilterPopupBrowserTest.*
--FindInPageControllerTest.*
--TestStatsDictionaryTest.*
--PlatformAppWithFileBrowserTest.*
--PermissionDialogTest.*
--SecurityStateTabHelperTest.*
--PrerenderBrowserTest.*
--DomDistillerViewerSourceBrowserTest.*
--PredictorBrowserTest.*
--TabManagerTest.*
--PasswordManagerBrowserTestBase.*
+# -PDFExtensionTest.*
+# -SubresourceFilterBrowserTest.*
+# -DevToolsBeforeUnloadTest.*
+# -PushMessagingBrowserTest.*
+# -TaskManagerBrowserTest.*
+# -AppBannerManagerBrowserTest.*
+# -SpellingMenuObserverTest.*
+# -PluginPowerSaverBrowserTest.*
+# -SubresourceFilterPopupBrowserTest.*
+# -FindInPageControllerTest.*
+# -TestStatsDictionaryTest.*
+# -PlatformAppWithFileBrowserTest.*
+# -PermissionDialogTest.*
+# -SecurityStateTabHelperTest.*
+# -PrerenderBrowserTest.*
+# -DomDistillerViewerSourceBrowserTest.*
+# -PredictorBrowserTest.*
+# -TabManagerTest.*
+# -PasswordManagerBrowserTestBase.*
 -DevToolsSanityTest.*
 -WebRtcBrowserTest.*
 -LoginPromptBrowserTest.*
diff --git a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
index 654abc2d..43ccce8 100644
--- a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
+++ b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
@@ -1,3 +1,7 @@
+# NOTE: if adding an exclusion for an existing failure (e.g. additional test for
+# feature X that is already not working), please add it beside the existing
+# failures. Otherwise please reach out to network-service-dev@.
+
 # These tests currently fail when run with --enable-features=NetworkService
 # See https://crbug.com/769401
 
@@ -252,6 +256,7 @@
 # Fails because of missing support to navigate to filesystem: URLs.
 # https://crbug.com/797292
 -ProcessManagerBrowserTest.NestedURLNavigationsToExtensionBlocked
+-SecurityStateTabHelperTest.DefaultSecurityLevelOnSecureFilesystemUrl
 
 # Flaky in linux tests.
 # https://crbug.com/820995
@@ -270,4 +275,6 @@
 -CertificateTransparencyBrowserTest.ProfileRequest
 -CertificateTransparencyBrowserTest.SystemRequest
 
-# NOTE: before adding new exclusions, please reach out to network-service-dev@.
+# NOTE: if adding an exclusion for an existing failure (e.g. additional test for
+# feature X that is already not working), please add it beside the existing
+# failures. Otherwise please reach out to network-service-dev@.
diff --git a/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter b/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter
index 253667de..435339e 100644
--- a/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter
+++ b/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter
@@ -1,4 +1,8 @@
-# http://crbug.com/715640
+# NOTE: if adding an exclusion for an existing failure (e.g. additional test for
+# feature X that is already not working), please add it beside the existing
+# failures. Otherwise please reach out to network-service-dev@.
+
+# https://crbug.com/715640
 -ServiceWorkerBrowserTest.FetchPageWithSaveData
 -ServiceWorkerBrowserTest.ImportsBustMemcache
 -ServiceWorkerBrowserTest.Reload
@@ -13,7 +17,7 @@
 # https://crbug.com/756312
 -ServiceWorkerVersionBrowserV8CacheTest.Restart
 
-# http://crbug.com/721398
+# https://crbug.com/721398
 -ClearSiteDataThrottleBrowserTest.CacheIntegrationTest
 -ClearSiteDataThrottleBrowserTest.CookiesIntegrationTest
 -ClearSiteDataThrottleBrowserTest.Credentials
@@ -25,17 +29,19 @@
 -ClearSiteDataThrottleBrowserTest.StorageServiceWorkersIntegrationTest
 -ClearSiteDataThrottleBrowserTest.Types
 
-# http://crbug.com/820060
+# https://crbug.com/820060
 -PreviewsStateBrowserTest.ShouldEnableLoFiModeNavigateBackThenForward
 -PreviewsStateBrowserTest.ShouldEnableLoFiModeOff
 -PreviewsStateBrowserTest.ShouldEnableLoFiModeOn
 -PreviewsStateBrowserTest.ShouldEnableLoFiModeReload
 -PreviewsStateBrowserTest.ShouldEnableLoFiModeReloadDisableLoFi
 
+# https://crbug.com/837666
+-NavigationHandleImplBrowserTest.RedirectToRendererDebugUrl
+
 -AsyncResourceHandlerBrowserTest/AsyncResourceHandlerBrowserTest.UploadProgress*
 -IsolatedDevToolsProtocolTest.ControlNavigationsChildFrames
 -NavigationHandleImplBrowserTest.ErrorCodeOnRedirect
--NavigationHandleImplBrowserTest.RedirectToRendererDebugUrl
 -RenderViewBrowserTest.ConfirmCacheInformationPlumbed
 -WebContentsImplBrowserTest.DownloadImage_Deny_FileImage
 
@@ -61,11 +67,13 @@
 -CrossSiteDocumentBlockingServiceWorkerTest.NetworkToServiceWorkerResponse
 
 # Flakes on Android.
-# http://crbug.com/827318
+# https://crbug.com/827318
 -RenderThreadImplBrowserTest.NonResourceDispatchIPCTasksDontGoThroughScheduler
 
 # Network service path needs some way to update the per-WebContents load state.
-# http://crbug.com/819663.
+# https://crbug.com/819663.
 -WebContentsImplBrowserTest.UpdateLoadState
 
-# NOTE: before adding new exclusions, please reach out to network-service-dev@.
\ No newline at end of file
+# NOTE: if adding an exclusion for an existing failure (e.g. additional test for
+# feature X that is already not working), please add it beside the existing
+# failures. Otherwise please reach out to network-service-dev@.
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index a2d4cd7..137b2afe 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -974,38 +974,6 @@
     },
    },
 
-  'linux_chromeos_rel_isolated_scripts': {
-    'telemetry_perf_unittests': {
-      'args': [
-        '--browser=exact',
-        '--browser-executable=./test_chrome',
-        '--xvfb',
-        '--skip=benchmarks.benchmark_smoke_unittest.BenchmarkSmokeTest.v8.runtime_stats.top_25',
-        '--skip=scripts_smoke_unittest.ScriptsSmokeTest.testRunTelemetryBenchmarkAsGoogletest',
-      ],
-      'swarming': {
-        'hard_timeout': 960,
-        'shards': 12,
-      },
-    },
-    'telemetry_unittests': {
-      'args': [
-        '--browser=exact',
-        '--browser-executable=./test_chrome',
-        '--jobs=1',
-        '--skip=telemetry.internal.actions.action_runner_unittest.ActionRunnerTest.testWaitForElement',
-        '--skip=telemetry.internal.actions.action_runner_unittest.ActionRunnerTest.testWaitForElementWithWrongText',
-        '--skip=telemetry.internal.actions.action_runner_unittest.ActionRunnerTest.testWaitForJavaScriptCondition',
-        '--skip=telemetry.internal.actions.key_event_unittest.KeyPressActionTest.testPressEndAndHome',
-        '--skip=telemetry.internal.actions.repeatable_scroll_unittest.RepeatableScrollActionTest.testRepeatableScrollActionNoRepeats',
-        '--skip=telemetry.page.page_run_end_to_end_unittest.ActualPageRunEndToEndTests.testTrafficSettings',
-      ],
-      'swarming': {
-        'shards': 4,
-      },
-    },
-  },
-
   'linux_viz_isolated_scripts': {
     'telemetry_perf_unittests': {
       'args': [
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index efc7c14..63bfbcf 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -576,7 +576,6 @@
         ],
         'test_suites': {
           'gtest_tests': 'linux_chromeos_rel_gtests',
-          'isolated_scripts': 'linux_chromeos_rel_isolated_scripts',
         },
       },
     },
@@ -1489,6 +1488,14 @@
           'empty_main',
         ],
       },
+      'linux-ozone-rel': {
+        'additional_compile_targets': [
+          'chrome',
+        ],
+        'test_suites': {
+          'gtest_tests': 'ozone_linux_gtests',
+        },
+      },
     },
   },
   {
diff --git a/testing/trigger_scripts/base_test_triggerer.py b/testing/trigger_scripts/base_test_triggerer.py
index 598bdea..d66c485 100755
--- a/testing/trigger_scripts/base_test_triggerer.py
+++ b/testing/trigger_scripts/base_test_triggerer.py
@@ -30,13 +30,11 @@
 
 SWARMING_PY = os.path.join(SRC_DIR, 'tools', 'swarming_client', 'swarming.py')
 
-
 def strip_unicode(obj):
   """Recursively re-encodes strings as utf-8 inside |obj|. Returns the result.
   """
   if isinstance(obj, unicode):
     return obj.encode('utf-8', 'replace')
-
   if isinstance(obj, list):
     return list(map(strip_unicode, obj))
 
@@ -44,7 +42,6 @@
     new_obj = type(obj)(
         (strip_unicode(k), strip_unicode(v)) for k, v in obj.iteritems() )
     return new_obj
-
   return obj
 
 
@@ -116,6 +113,36 @@
     if not all(isinstance(entry, dict) for entry in self._bot_configs):
       raise ValueError('Bot configurations must all be dictionaries')
 
+  # TODO(eyaich): Move the stateless logic that is specific to querying
+  # swarming to its own object to make trigger logic more clear.
+  def query_swarming(self, api, query_args, verbose,
+                     limit='0',
+                     server='chromium-swarm.appspot.com',
+                     service_account=None):
+    try:
+      temp_file = self.make_temp_file(prefix='base_trigger_dimensions',
+                                      suffix='.json')
+      encoded_args = urllib.urlencode(query_args)
+      args =['query',
+             '-S',
+             server,
+             '--limit',
+             limit,
+             '--json',
+             temp_file]
+      # Add in service account auth if present
+      if service_account:
+        args.append('--auth-service-account-json')
+        args.append(service_account)
+      # Append the query at the end
+      args.append(('%s?%s' % (api, encoded_args)))
+      ret = self.run_swarming(args, verbose)
+      if ret:
+        raise Exception('Error running swarming.py')
+      return self.read_encoded_json_from_temp_file(temp_file)
+    finally:
+      self.delete_temp_file(temp_file)
+
   def query_swarming_for_bot_configs(self, verbose):
     # Query Swarming to figure out which bots are available.
     for config in self._bot_configs:
@@ -125,34 +152,16 @@
       # Ignore dead and quarantined bots.
       values.append(('is_dead', 'FALSE'))
       values.append(('quarantined', 'FALSE'))
-      query_arg = urllib.urlencode(values)
 
-      temp_file = self.make_temp_file(prefix='base_trigger_dimensions',
-                                      suffix='.json')
-      try:
-        ret = self.run_swarming(['query',
-                                 '-S',
-                                 'chromium-swarm.appspot.com',
-                                 '--limit',
-                                 '0',
-                                 '--json',
-                                 temp_file,
-                                 ('bots/count?%s' % query_arg)],
-                                verbose)
-        if ret:
-          raise Exception('Error running swarming.py')
-        with open(temp_file) as fp:
-          query_result = strip_unicode(json.load(fp))
-        # Summarize number of available bots per configuration.
-        count = int(query_result['count'])
-        # Be robust against errors in computation.
-        available = max(0, count - int(query_result['busy']))
-        self._bot_statuses.append({'total': count, 'available': available})
-        if verbose:
-          idx = len(self._bot_statuses) - 1
-          print 'Bot config %d: %s' % (idx, str(self._bot_statuses[idx]))
-      finally:
-        self.delete_temp_file(temp_file)
+      query_result = self.query_swarming('bots/count', values, verbose)
+      # Summarize number of available bots per configuration.
+      count = int(query_result['count'])
+      # Be robust against errors in computation.
+      available = max(0, count - int(query_result['busy']))
+      self._bot_statuses.append({'total': count, 'available': available})
+      if verbose:
+        idx = len(self._bot_statuses) - 1
+        print 'Bot config %d: %s' % (idx, str(self._bot_statuses[idx]))
     # Sum up the total count of all bots.
     self._total_bots = sum(x['total'] for x in self._bot_statuses)
     if verbose:
@@ -178,6 +187,9 @@
     with open(temp_file) as f:
       return json.load(f)
 
+  def read_encoded_json_from_temp_file(self, temp_file):
+    return strip_unicode(self.read_json_from_temp_file(temp_file))
+
   def write_json_to_file(self, merged_json, output_file):
     with open(output_file, 'w') as f:
       json.dump(merged_json, f)
@@ -266,13 +278,13 @@
     self.write_json_to_file(merged_json, args.dump_json)
     return 0
 
-
-  def setup_parser_contract(self, parser):
-    parser.add_argument('--multiple-trigger-configs', type=str, required=True,
+  @staticmethod
+  def setup_parser_contract(parser):
+    parser.add_argument('--multiple-trigger-configs', type=str, required=False,
                         help='The Swarming configurations to trigger tasks on, '
                         'in the form of a JSON array of dictionaries (these are'
-                        ' Swarming dimension_sets). At least one entry in this '
-                        'dictionary is required.')
+                        ' Swarming dimension_sets). At least one entry is'
+                        'required if you dont override parse_bot_configs')
     parser.add_argument('--multiple-dimension-script-verbose', type=bool,
                         default=False, help='Turn on verbose logging')
     parser.add_argument('--dump-json', required=True,
diff --git a/testing/trigger_scripts/perf_device_trigger.py b/testing/trigger_scripts/perf_device_trigger.py
index c9568e6e..f745833 100755
--- a/testing/trigger_scripts/perf_device_trigger.py
+++ b/testing/trigger_scripts/perf_device_trigger.py
@@ -7,21 +7,38 @@
 This script does custom swarming triggering logic, to enable device affinity
 for our bots, while lumping all trigger calls under one logical step.
 
-This script receives multiple machine configurations on the command line in the
-form of quoted strings. These strings are JSON dictionaries that represent
-entries in the "dimensions" array of the "swarming" dictionary in the
-src/testing/buildbot JSON files.
+For the perf use case of device affinity, this script now enables soft device
+affinity.  This means that it tries to smartly allocate jobs to bots based
+on what is currently alive and what bot the task was last triggered on,
+preferring that last triggered bot if available.  If the
+--multiple-trigger-configs flag is specified than this script overrides
+the soft device affinity functionality in favor of the provided ids.
+
+The algorithm is roughly the following:
+
+Find eligible bots, healthy or not.
+  * Query swarming for eligible bots based on the dimensions passed in
+    on the swarming call.  Determine their health status based on
+    is not quarantied and is not is_dead
+
+Of the eligible bots determine what bot id to run the shard on.
+(Implementation in _select_config_indices_with_soft_affinity)
+  * First query swarming for the last task that ran that shard with
+    given dimensions.  Assuming they are returned with most recent first.
+  * Check if the bot id that ran that task is alive, if so trigger
+    on that bot again.
+  * If that bot isn't alive, allocate to another alive bot or if no
+    other alive bots exist, trigger on the same dead one.
 
 Scripts inheriting must have roughly the same command line interface as
 swarming.py trigger. It modifies it in the following ways:
+
  * Intercepts the dump-json argument, and creates its own by combining the
    results from each trigger call.
- * Scans through the multiple-trigger-configs dictionaries. For any key found,
-   deletes that dimension from the originally triggered task's dimensions. This
-   is what allows the Swarming dimensions to be replaced.  Must contain the
-   dimension "id" for the perf device affinity use case.
- * On a per-shard basis, adds the Swarming dimensions chosen from the
-   multiple-trigger-configs list to the dimensions for the shard.
+ * Intercepts the dimensions from the swarming call and determines what bots
+   are healthy based on the above device affinity algorithm, and triggers
+ * Adds a tag to the swarming trigger job with the shard so we know the last
+   bot that ran this shard.
 
 This script is normally called from the swarming recipe module in tools/build.
 
@@ -33,12 +50,44 @@
 import subprocess
 import sys
 import tempfile
+import urllib
 
 import base_test_triggerer
 
+class Bot(object):
+  """ Eligible bots to run the task"""
+  def __init__(self, bot_id, is_alive):
+    self._bot_id = bot_id
+    self._is_alive = is_alive
+
+  def id(self):
+    return self._bot_id
+
+  def is_alive(self):
+    return self._is_alive
+
+  def as_json_config(self):
+    return {'id': self._bot_id}
+
 class PerfDeviceTriggerer(base_test_triggerer.BaseTestTriggerer):
-  def __init__(self):
+  def __init__(self, args, swarming_args):
     super(PerfDeviceTriggerer, self).__init__()
+    if not args.multiple_trigger_configs:
+      # Represents the list of current dimensions requested
+      # by the parent swarming job.
+      self._dimensions = self._get_swarming_dimensions(swarming_args)
+
+      # Store what swarming server we need and whether or not we need
+      # to send down authentication with it
+      self._swarming_server = self._get_swarming_server(swarming_args)
+      self._service_account = self._get_service_account(swarming_args)
+
+      # Map of all existing bots in swarming that satisfy the current
+      # set of dimensions indexed by bot id.
+      # Note: this assumes perf bot dimensions are unique between
+      # configurations.
+      self._eligible_bots_by_ids = (
+          self._query_swarming_for_eligible_bot_configs(self._dimensions))
 
   def append_additional_args(self, args, shard_index):
     # Append a tag to the swarming task with the shard number
@@ -53,21 +102,159 @@
     else:
       return args + shard_tag
 
+  def parse_bot_configs(self, args):
+    if args.multiple_trigger_configs:
+      super(PerfDeviceTriggerer, self).parse_bot_configs(args)
+    else:
+      self._bot_configs = []
+      # For each eligible bot, append the dimension
+      # to the eligible bot_configs
+      for  _, bot in self._eligible_bots_by_ids.iteritems():
+        self._bot_configs.append(bot.as_json_config())
+
   def select_config_indices(self, args, verbose):
-    # For perf we want to trigger a job for every valid config since
-    # each config represents exactly one bot in the perf swarming pool,
+    if args.multiple_trigger_configs:
+      # If specific bot ids were passed in, we want to trigger a job for
+      # every valid config regardless of health status since
+      # each config represents exactly one bot in the perf swarming pool.
+      return range(args.shards)
+    return self._select_config_indices_with_soft_affinity(args, verbose)
+
+  def _select_config_indices_with_soft_affinity(self, args, verbose):
+    # First make sure the number of shards doesn't exceed the
+    # number of eligible bots.  This means there is a config error somewhere.
+    if args.shards > len(self._eligible_bots_by_ids):
+      raise ValueError('Not enough available machines exist in in swarming'
+                       'pool. Contact labs to rack in more hardware')
+
+    shard_to_bot_assignment_map = {}
+    unallocated_bots = set(self._eligible_bots_by_ids.values())
+    for shard_index in xrange(args.shards):
+      bot_id = self._query_swarming_for_last_shard_id(shard_index)
+      if bot_id:
+        bot = self._eligible_bots_by_ids[bot_id]
+        shard_to_bot_assignment_map[shard_index] = bot
+        unallocated_bots.discard(bot)
+      else:
+        shard_to_bot_assignment_map[shard_index] = None
+
+    # Now create sets of remaining healthy and bad bots
+    unallocated_healthy_bots = {b for b in unallocated_bots if b.is_alive()}
+    unallocated_bad_bots = {b for b in unallocated_bots if not b.is_alive()}
+
+    # Try assigning healthy bots for new shards first.
+    for shard_index, bot in sorted(shard_to_bot_assignment_map.iteritems()):
+      if not bot and unallocated_healthy_bots:
+        shard_to_bot_assignment_map[shard_index] = \
+            unallocated_healthy_bots.pop()
+        if verbose:
+          print 'First time shard %d has been triggered' % shard_index
+      elif not bot:
+        shard_to_bot_assignment_map[shard_index] = unallocated_bad_bots.pop()
+
+    # Handle the rest of shards that were assigned dead bots:
+    for shard_index, bot in sorted(shard_to_bot_assignment_map.iteritems()):
+      if not bot.is_alive() and unallocated_healthy_bots:
+        dead_bot = bot
+        healthy_bot = unallocated_healthy_bots.pop()
+        shard_to_bot_assignment_map[shard_index] = healthy_bot
+        if verbose:
+          print ('Device affinity broken for bot %s, new '
+                 'mapping to bot %s' % (dead_bot.id(), healthy_bot.id()))
+
+    # Now populate the indices into the bot_configs array
     selected_configs = []
-    for i in xrange(args.shards):
-      selected_configs.append(i)
+    for shard_index in xrange(args.shards):
+      selected_configs.append(self._find_bot_config_index(
+          shard_to_bot_assignment_map[shard_index].id()))
     return selected_configs
 
 
+  def _query_swarming_for_eligible_bot_configs(self, dimensions):
+    """ Query Swarming to figure out which bots are available.
+
+      Returns: a dictionary in which the keys are the bot id and
+      the values are Bot object that indicate the health status
+      of the bots.
+    """
+    values = []
+    for key, value in sorted(dimensions.iteritems()):
+      values.append(('dimensions', '%s:%s' % (key, value)))
+
+    query_result = self.query_swarming(
+        'bots/list', values, True, server=self._swarming_server,
+        service_account=self._service_account)
+    perf_bots = {}
+    for bot in query_result['items']:
+      alive = (not bot['is_dead'] and not bot['quarantined'])
+      perf_bots[bot['bot_id']] = Bot(bot['bot_id'], alive)
+    return perf_bots
+
+  def _find_bot_config_index(self, bot_id):
+    # Find the index into the bot_config map that
+    # maps to the bot id in question
+    for i, dimensions in enumerate(self._bot_configs):
+      if dimensions['id'] == bot_id:
+        return i
+    return None
+
+  def _query_swarming_for_last_shard_id(self, shard_index):
+    # Per shard, query swarming for the last bot that ran the task
+    # Example: swarming.py query -S server-url.com --limit 1 \\
+    #  'tasks/list?tags=os:Windows&tags=pool:chrome.tests.perf&tags=shard:12'
+    values = [
+      ('tags', '%s:%s' % (k, v)) for k, v in self._dimensions.iteritems()
+    ]
+    # Append the shard as a tag
+    values.append(('tags', '%s:%s' % ('shard', str(shard_index))))
+    values.sort()
+    # TODO(eyaich): For now we are ignoring the state of the returned
+    # task (ie completed, timed_out, bot_died, etc) as we are just
+    # answering the question "What bot did we last trigger this shard on?"
+    # Evaluate if this is the right decision going forward.
+
+    # Query for the last task that ran with these dimensions and this shard
+    query_result = self.query_swarming(
+          'tasks/list', values, True, limit='1', server=self._swarming_server,
+         service_account=self._service_account)
+    tasks = query_result.get('items')
+    if tasks:
+      # We queried with a limit of 1 so we could only get back
+      # the most recent which is what we care about.
+      task = tasks[0]
+      for tag in task['tags']:
+        if 'id' in tag:
+          return tag[len('id;'):]
+    # No eligible shard for this bot
+    return None
+
+  def _get_swarming_dimensions(self, args):
+    dimensions = {}
+    for i in xrange(len(args) - 2):
+      if args[i] == '--dimension':
+        dimensions[args[i+1]] = args[i+2]
+    return dimensions
+
+  def _get_swarming_server(self, args):
+    for i in xrange(len(args)):
+      if '--swarming' in args[i]:
+        server = args[i+1]
+        slashes_index = server.index('//') + 2
+        # Strip out the protocol
+        return server[slashes_index:]
+
+  def _get_service_account(self, args):
+    for i in xrange(len(args) - 1):
+      if '--auth-service-account-json' in args[i]:
+        return args[i+1]
+
 def main():
-  triggerer = PerfDeviceTriggerer()
   # Setup args for common contract of base class
-  parser = triggerer.setup_parser_contract(
+  parser = base_test_triggerer.BaseTestTriggerer.setup_parser_contract(
       argparse.ArgumentParser(description=__doc__))
   args, remaining = parser.parse_known_args()
+
+  triggerer = PerfDeviceTriggerer(args, remaining)
   return triggerer.trigger_tasks(args, remaining)
 
 if __name__ == '__main__':
diff --git a/testing/trigger_scripts/perf_device_trigger_unittest.py b/testing/trigger_scripts/perf_device_trigger_unittest.py
index d40293e4..ee8f8e6 100755
--- a/testing/trigger_scripts/perf_device_trigger_unittest.py
+++ b/testing/trigger_scripts/perf_device_trigger_unittest.py
@@ -13,18 +13,18 @@
   def __init__(self):
     self.shards = 1
     self.dump_json = ''
-    self.multiple_trigger_configs = []
+    self.multiple_trigger_configs = None
     self.multiple_dimension_script_verbose = False
 
 
 class FakeTriggerer(perf_device_trigger.PerfDeviceTriggerer):
-  def __init__(self, bot_configs):
-    super(FakeTriggerer, self).__init__()
-    self._bot_configs = bot_configs
+  def __init__(self, args, swarming_args, files):
     self._bot_statuses = []
     self._swarming_runs = []
-    self._files = {}
+    self._files = files
     self._temp_file_id = 0
+    super(FakeTriggerer, self).__init__(args, swarming_args)
+
 
   def set_files(self, files):
     self._files = files
@@ -40,39 +40,69 @@
   def read_json_from_temp_file(self, temp_file):
     return self._files[temp_file]
 
+  def read_encoded_json_from_temp_file(self, temp_file):
+    return self._files[temp_file]
+
   def write_json_to_file(self, merged_json, output_file):
     self._files[output_file] = merged_json
 
-  def parse_bot_configs(self, args):
-    pass
-
   def run_swarming(self, args, verbose):
+    del verbose #unused
     self._swarming_runs.append(args)
 
 
-PERF_BOT1 = {
-  'pool': 'Chrome-perf-fyi',
-  'id': 'build1'
-}
-
-PERF_BOT2 = {
-  'pool': 'Chrome-perf-fyi',
-  'id': 'build2'
-}
-
 class UnitTest(unittest.TestCase):
-  def basic_setup(self):
-    triggerer = FakeTriggerer(
-      [
-        PERF_BOT1,
-        PERF_BOT2
+  def setup_and_trigger(
+      self, previous_task_assignment_map, alive_bots, dead_bots):
+    args = Args()
+    args.shards = len(previous_task_assignment_map)
+    args.dump_json = 'output.json'
+    swarming_args = [
+        'trigger',
+        '--swarming',
+        'http://foo_server',
+        '--auth-service-account-json',
+        '/creds/test_service_account',
+        '--dimension',
+        'pool',
+        'chrome-perf-fyi',
+        '--dimension',
+        'os',
+        'windows',
+        '--',
+        'benchmark1',
       ]
-    )
-    # Note: the contents of these JSON files don't accurately reflect
-    # that produced by "swarming.py trigger". The unit tests only
-    # verify that shard 0's JSON is preserved.
-    triggerer.set_files({
-      'base_trigger_dimensions0.json': {
+
+    triggerer = FakeTriggerer(args, swarming_args,
+        self.get_files(args.shards, previous_task_assignment_map,
+                       alive_bots, dead_bots))
+    triggerer.trigger_tasks(
+      args,
+      swarming_args)
+    return triggerer
+
+  def get_files(self, num_shards, previous_task_assignment_map,
+                alive_bots, dead_bots):
+    files = {}
+    file_index = 0
+    files['base_trigger_dimensions%d.json' % file_index] = (
+        self.generate_list_of_eligible_bots_query_response(
+            alive_bots, dead_bots))
+    file_index = file_index + 1
+    # Perf device trigger will call swarming n times:
+    #   1. Once for all eligible bots
+    #   2. once per shard to determine last bot run
+    # Shard builders is a list of build ids that represents
+    # the last build that ran the shard that corresponds to that
+    # index.  If that shard hasn't been run before the entry
+    # should be an empty string.
+    for i in xrange(num_shards):
+      bot_id = previous_task_assignment_map.get(i)
+      files['base_trigger_dimensions%d.json' % file_index] = (
+          self.generate_last_task_to_shard_query_response(bot_id))
+      file_index = file_index + 1
+    for i in xrange(num_shards):
+      task = {
         'base_task_name': 'webgl_conformance_tests',
         'request': {
           'expiration_secs': 3600,
@@ -82,69 +112,152 @@
         },
         'tasks': {
           'webgl_conformance_tests on NVIDIA GPU on Windows': {
-            'task_id': 'f001',
+            'task_id': 'f%d' % i,
           },
         },
-      },
-      'base_trigger_dimensions1.json': {
-        'tasks': {
-          'webgl_conformance_tests on NVIDIA GPU on Windows': {
-            'task_id': 'f002',
-          },
-        },
-      },
-    })
-    args = Args()
-    args.shards = 2
-    args.dump_json = 'output.json'
-    args.multiple_dimension_script_verbose = False
-    triggerer.trigger_tasks(
-      args,
-      [
-        'trigger',
-        '--dimension',
-        'pool',
-        'chrome-perf-fyi',
-        '--dimension',
-        'id',
-        'build1',
-        '--',
-        'benchmark1',
-      ])
-    return triggerer
+      }
+      files['base_trigger_dimensions%d.json' % file_index] = task
+      file_index = file_index + 1
+    return files
+
+  def generate_last_task_to_shard_query_response(self, bot_id):
+    if len(bot_id):
+      return {'items': [{'tags': [('id:%s' % bot_id)]}]}
+    return {}
+
+  def generate_list_of_eligible_bots_query_response(
+      self, alive_bots, dead_bots):
+    items = {'items': []}
+    for bot_id in alive_bots:
+      items['items'].append(
+          { 'bot_id': ('%s' % bot_id), 'is_dead': False, 'quarantined': False })
+    is_dead = True
+    for bot_id in dead_bots:
+      is_quarantined = (not is_dead)
+      items['items'].append({
+          'bot_id': ('%s' % bot_id),
+          'is_dead': is_dead,
+          'quarantined': is_quarantined
+      })
+      is_dead = (not is_dead)
+    return items
+
 
   def list_contains_sublist(self, main_list, sub_list):
     return any(sub_list == main_list[offset:offset + len(sub_list)]
                for offset in xrange(len(main_list) - (len(sub_list) - 1)))
 
-  def test_shard_env_vars_and_bot_id(self):
-    triggerer = self.basic_setup()
-    self.assertTrue(self.list_contains_sublist(
-      triggerer._swarming_runs[0], ['id', 'build1']))
-    self.assertTrue(self.list_contains_sublist(
-      triggerer._swarming_runs[1], ['id', 'build2']))
-    self.assertTrue(self.list_contains_sublist(
-      triggerer._swarming_runs[0], ['--tag', 'shard:0']))
-    self.assertTrue(self.list_contains_sublist(
-      triggerer._swarming_runs[1], ['--tag', 'shard:1']))
-    self.assertTrue(self.list_contains_sublist(
-      triggerer._swarming_runs[0], ['--env', 'GTEST_SHARD_INDEX', '0']))
-    self.assertTrue(self.list_contains_sublist(
-      triggerer._swarming_runs[1], ['--env', 'GTEST_SHARD_INDEX', '1']))
-    self.assertTrue(self.list_contains_sublist(
-      triggerer._swarming_runs[0], ['--env', 'GTEST_TOTAL_SHARDS', '2']))
-    self.assertTrue(self.list_contains_sublist(
-      triggerer._swarming_runs[1], ['--env', 'GTEST_TOTAL_SHARDS', '2']))
+  def assert_query_swarming_args(self, triggerer, num_shards):
+    # Assert the calls to query swarming send the right args
+    # First call is to get eligible bots and then one query
+    # per shard
+    for i in range(num_shards + 1):
+      self.assertTrue('query' in triggerer._swarming_runs[i])
+      self.assertTrue(self.list_contains_sublist(
+        triggerer._swarming_runs[i], ['-S', 'foo_server']))
+      self.assertTrue(self.list_contains_sublist(
+        triggerer._swarming_runs[i], ['--auth-service-account-json',
+                                      '/creds/test_service_account']))
 
-  def test_json_merging(self):
-    triggerer = self.basic_setup()
-    self.assertTrue('output.json' in triggerer._files)
-    output_json = triggerer._files['output.json']
-    self.assertTrue('base_task_name' in output_json)
-    self.assertTrue('request' in output_json)
-    self.assertEqual(output_json['request']['expiration_secs'], 3600)
-    self.assertEqual(
-      output_json['request']['properties']['execution_timeout_secs'], 3600)
+  def get_triggered_shard_to_bot(self, triggerer, num_shards):
+    self.assert_query_swarming_args(triggerer, num_shards)
+    triggered_map = {}
+    for run in triggerer._swarming_runs:
+      if not 'trigger' in run:
+        continue
+      bot_id = run[(run.index('id') + 1)]
+      shard = int(run[(run.index('GTEST_SHARD_INDEX') + 1)])
+      triggered_map[shard] = bot_id
+    return triggered_map
+
+
+  def test_all_healthy_shards(self):
+    triggerer = self.setup_and_trigger(
+        previous_task_assignment_map={0: 'build3', 1: 'build4', 2: 'build5'},
+        alive_bots=['build3', 'build4', 'build5'],
+        dead_bots=['build1', 'build2'])
+    expected_task_assignment = self.get_triggered_shard_to_bot(
+        triggerer, num_shards=3)
+    self.assertEquals(len(set(expected_task_assignment.values())), 3)
+
+    # All three bots were healthy so we should expect the task assignment to
+    # stay the same
+    self.assertEquals(expected_task_assignment.get(0), 'build3')
+    self.assertEquals(expected_task_assignment.get(1), 'build4')
+    self.assertEquals(expected_task_assignment.get(2), 'build5')
+
+  def test_previously_healthy_now_dead(self):
+    # Test that it swaps out build1 and build2 that are dead
+    # for two healthy bots
+    triggerer = self.setup_and_trigger(
+        previous_task_assignment_map={0: 'build1', 1: 'build2', 2: 'build3'},
+        alive_bots=['build3', 'build4', 'build5'],
+        dead_bots=['build1', 'build2'])
+    expected_task_assignment = self.get_triggered_shard_to_bot(
+        triggerer, num_shards=3)
+    self.assertEquals(len(set(expected_task_assignment.values())), 3)
+
+    # The first two should be assigned to one of the unassigned healthy bots
+    new_healthy_bots = ['build4', 'build5']
+    self.assertIn(expected_task_assignment.get(0), new_healthy_bots)
+    self.assertIn(expected_task_assignment.get(1), new_healthy_bots)
+    self.assertEquals(expected_task_assignment.get(2), 'build3')
+
+  def test_not_enough_healthy_bots(self):
+    triggerer = self.setup_and_trigger(
+        previous_task_assignment_map= {0: 'build1', 1: 'build2',
+                                       2: 'build3', 3: 'build4', 4: 'build5'},
+        alive_bots=['build3', 'build4', 'build5'],
+        dead_bots=['build1', 'build2'])
+    expected_task_assignment = self.get_triggered_shard_to_bot(
+        triggerer, num_shards=5)
+    self.assertEquals(len(set(expected_task_assignment.values())), 5)
+
+    # We have 5 shards and 5 bots that ran them, but two
+    # are now dead and there aren't any other healthy bots
+    # to swap out to.  Make sure they still assign to the
+    # same shards.
+    self.assertEquals(expected_task_assignment.get(0), 'build1')
+    self.assertEquals(expected_task_assignment.get(1), 'build2')
+    self.assertEquals(expected_task_assignment.get(2), 'build3')
+    self.assertEquals(expected_task_assignment.get(3), 'build4')
+    self.assertEquals(expected_task_assignment.get(4), 'build5')
+
+  def test_not_enough_healthy_bots_shard_not_seen(self):
+    triggerer = self.setup_and_trigger(
+        previous_task_assignment_map= {0: 'build1', 1: '',
+                                       2: 'build3', 3: 'build4', 4: 'build5'},
+        alive_bots=['build3', 'build4', 'build5'],
+        dead_bots=['build1', 'build2'])
+    expected_task_assignment = self.get_triggered_shard_to_bot(
+        triggerer, num_shards=5)
+    self.assertEquals(len(set(expected_task_assignment.values())), 5)
+
+    # Not enough healthy bots so make sure shard 0 is still assigned to its
+    # same dead bot.
+    self.assertEquals(expected_task_assignment.get(0), 'build1')
+    # Shard 1 had not been triggered yet, but there weren't enough
+    # healthy bots.  Make sure it got assigned to the other dead bot.
+    self.assertEquals(expected_task_assignment.get(1), 'build2')
+    # The rest of the assignments should stay the same.
+    self.assertEquals(expected_task_assignment.get(2), 'build3')
+    self.assertEquals(expected_task_assignment.get(3), 'build4')
+    self.assertEquals(expected_task_assignment.get(4), 'build5')
+
+  def test_shards_not_triggered_yet(self):
+    # First time this configuration has been seen.  Choose three
+    # healthy shards to trigger jobs on
+    triggerer = self.setup_and_trigger(
+        previous_task_assignment_map= {0: '', 1: '', 2: ''},
+        alive_bots=['build3', 'build4', 'build5'],
+        dead_bots=['build1', 'build2'])
+    expected_task_assignment = self.get_triggered_shard_to_bot(
+        triggerer, num_shards=3)
+    self.assertEquals(len(set(expected_task_assignment.values())), 3)
+    new_healthy_bots = ['build3', 'build4', 'build5']
+    self.assertIn(expected_task_assignment.get(0), new_healthy_bots)
+    self.assertIn(expected_task_assignment.get(1), new_healthy_bots)
+    self.assertIn(expected_task_assignment.get(2), new_healthy_bots)
 
 if __name__ == '__main__':
   unittest.main()
diff --git a/testing/trigger_scripts/trigger_multiple_dimensions.py b/testing/trigger_scripts/trigger_multiple_dimensions.py
index c17984a3..d85afd56 100755
--- a/testing/trigger_scripts/trigger_multiple_dimensions.py
+++ b/testing/trigger_scripts/trigger_multiple_dimensions.py
@@ -121,11 +121,12 @@
     self.query_swarming_for_bot_configs(verbose)
 
 def main():
-  triggerer =  MultiDimensionTestTriggerer()
   # setup args for common contract of base class
-  parser = triggerer.setup_parser_contract(
+  parser = base_test_triggerer.BaseTestTriggerer.setup_parser_contract(
       argparse.ArgumentParser(description=__doc__))
   args, remaining = parser.parse_known_args()
+
+  triggerer =  MultiDimensionTestTriggerer()
   return triggerer.trigger_tasks(args, remaining)
 
 
diff --git a/third_party/WebKit/LayoutTests/ASANExpectations b/third_party/WebKit/LayoutTests/ASANExpectations
index 4a25f084..7a2dac1 100644
--- a/third_party/WebKit/LayoutTests/ASANExpectations
+++ b/third_party/WebKit/LayoutTests/ASANExpectations
@@ -70,3 +70,14 @@
 crbug.com/803276 virtual/sampling-heap-profiler/inspector-protocol/memory/sampling-native-profile.js [ Skip ]
 crbug.com/803276 virtual/sampling-heap-profiler/inspector-protocol/memory/sampling-native-snapshot.js [ Skip ]
 
+# CORS test crash on ASAN
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-cookies-redirect.any.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-cookies-redirect.any.worker.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight-star.any.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight-star.any.worker.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight.any.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight.any.worker.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.worker.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Crash ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
index ced8228f..fccacf7 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -109,7 +109,6 @@
 crbug.com/591099 compositing/geometry/clipping-foreground.html [ Failure ]
 crbug.com/591099 compositing/geometry/foreground-layer.html [ Failure ]
 crbug.com/591099 compositing/geometry/repaint-foreground-layer.html [ Failure ]
-crbug.com/591099 compositing/geometry/video-opacity-overlay.html [ Failure ]
 crbug.com/591099 compositing/iframes/floating-self-painting-frame.html [ Failure ]
 crbug.com/591099 compositing/layer-creation/rotate3d-overlap.html [ Failure ]
 crbug.com/591099 compositing/overflow/border-radius-above-composited-subframe.html [ Failure ]
@@ -257,7 +256,6 @@
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-insert-001h.xht [ Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-insert-002e.xht [ Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-nested-002.xht [ Pass ]
-crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-percents-001.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-remove-006.xht [ Pass ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/root-box-001.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/text/white-space-mixed-003.xht [ Pass ]
@@ -634,7 +632,6 @@
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-writing-mode-012.html [ Failure ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-writing-mode-014.html [ Failure ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-writing-mode-015.html [ Failure ]
-crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/ib-split/percent-height-1.html [ Failure ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/ib-split/remove-from-split-inline-6.html [ Pass ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/ib-split/split-inner-inline-2.html [ Pass ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-break-inside-001.html [ Failure ]
@@ -1221,9 +1218,7 @@
 crbug.com/591099 fast/replaced/absolute-position-percentage-height.html [ Failure ]
 crbug.com/591099 fast/replaced/border-radius-clip.html [ Failure ]
 crbug.com/591099 fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor-vertical-lr.html [ Failure ]
-crbug.com/591099 fast/replaced/percent-height-in-anonymous-block.html [ Failure ]
 crbug.com/591099 fast/replaced/preferred-widths.html [ Failure ]
-crbug.com/591099 fast/replaced/replaced-element-with-percentage-height-anonymous-block-parent.html [ Failure ]
 crbug.com/591099 fast/replaced/table-percent-height.html [ Failure ]
 crbug.com/591099 fast/replaced/table-percent-width.html [ Failure ]
 crbug.com/591099 fast/replaced/table-replaced-element.html [ Failure ]
@@ -1933,17 +1928,11 @@
 crbug.com/591099 svg/custom/getscreenctm-in-scrollable-div-area-nested.xhtml [ Failure ]
 crbug.com/591099 svg/custom/getscreenctm-in-scrollable-div-area.xhtml [ Failure ]
 crbug.com/591099 svg/custom/inline-svg-use-available-width-in-stf.html [ Failure ]
-crbug.com/591099 svg/custom/junk-data.svg [ Failure ]
-crbug.com/591099 svg/custom/load-non-wellformed.svg [ Failure ]
-crbug.com/591099 svg/custom/missing-xlink.svg [ Failure ]
 crbug.com/591099 svg/custom/object-sizing-no-width-height.xhtml [ Failure ]
-crbug.com/591099 svg/custom/path-bad-data.svg [ Failure ]
 crbug.com/591099 svg/custom/text-match-highlight.html [ Failure ]
 crbug.com/591099 svg/custom/use-event-retargeting.html [ Failure ]
-crbug.com/591099 svg/custom/use-font-face-crash.svg [ Failure ]
 crbug.com/591099 svg/dom/svgangle-units.html [ Pass Timeout ]
 crbug.com/591099 svg/filters/feTurbulence-bad-seeds.html [ Failure ]
-crbug.com/591099 svg/hixie/error/012.xml [ Failure ]
 crbug.com/591099 svg/hixie/error/dumpAsText/004.xml [ Failure ]
 crbug.com/591099 svg/hixie/error/dumpAsText/005.xml [ Failure ]
 crbug.com/591099 svg/in-html/sizing/svg-inline.html [ Timeout ]
diff --git a/third_party/WebKit/LayoutTests/MSANExpectations b/third_party/WebKit/LayoutTests/MSANExpectations
index 764b2ca3..b5ec20dd 100644
--- a/third_party/WebKit/LayoutTests/MSANExpectations
+++ b/third_party/WebKit/LayoutTests/MSANExpectations
@@ -98,3 +98,14 @@
 crbug.com/803276 virtual/sampling-heap-profiler/inspector-protocol/memory/sampling-native-profile.js [ Skip ]
 crbug.com/803276 virtual/sampling-heap-profiler/inspector-protocol/memory/sampling-native-snapshot.js [ Skip ]
 
+# CORS test crash on MSAN
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-cookies-redirect.any.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-cookies-redirect.any.worker.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight-star.any.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight-star.any.worker.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight.any.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight.any.worker.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.worker.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Crash ]
+crbug.com/838057 [ Linux ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Crash ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 15d363b..0f586fb 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -5,6 +5,10 @@
 # Intentional failures to test the layout test system.
 Bug(intentional) harness-tests/crash.html [ Crash ]
 Bug(intentional) harness-tests/timeout.html [ Timeout ]
+Bug(intentional) external/wpt/infrastructure/reftest/reftest_timeout.html [ Timeout ]
+Bug(intentional) external/wpt/infrastructure/reftest/reftest_mismatch_fail.html [ Failure ]
+Bug(intentional) external/wpt/infrastructure/reftest/reftest_ref_timeout.html [ Timeout ]
+Bug(intentional) external/wpt/infrastructure/reftest/reftest_match_fail.html [ Failure ]
 
 crbug.com/807686 crbug.com/24182 jquery/manipulation.html [ Timeout Pass ]
 
@@ -275,9 +279,6 @@
 ### virtual/layout_ng/external/wpt/css/CSS2/normal-flow
 crbug.com/704961 [ Mac ] virtual/layout_ng/external/wpt/css/CSS2/normal-flow/width-inherit-001.xht [ Failure ]
 
-# Block: percent height in continuations.
-crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-percents-001.xht [ Failure ]
-
 # Inline: border in continuations. Fail in Blink.
 crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-empty-001.xht [ Failure ]
 crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/block-in-inline-empty-004.xht [ Failure ]
@@ -1228,18 +1229,6 @@
 # Total  2098
 # Counts skip: 2 crash: 14 text: 67 image: 1 pass: 2005 timeout: 9
 
-# Release build only wpt test crashes on CORS-preflight. Should be fixed soon.
-crbug.com/836741 [ Release ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-cookies-redirect.any.html [ Crash ]
-crbug.com/836741 [ Release ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-cookies-redirect.any.worker.html [ Crash ]
-crbug.com/836741 [ Release ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight-star.any.html [ Crash ]
-crbug.com/836741 [ Release ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight-star.any.worker.html [ Crash ]
-crbug.com/836741 [ Release ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight.any.html [ Crash ]
-crbug.com/836741 [ Release ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-preflight.any.worker.html [ Crash ]
-crbug.com/836741 [ Release ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.html [ Crash ]
-crbug.com/836741 [ Release ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.worker.html [ Crash ]
-crbug.com/836741 [ Release ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Crash ]
-crbug.com/836741 [ Release ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Crash ]
-
 # Skipped tests in dictionary order.
 crbug.com/757165 [ Win ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/navigation-redirect.https.html [ Skip ]
 crbug.com/691944 virtual/outofblink-cors/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
@@ -1285,20 +1274,17 @@
 crbug.com/736308 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/cross-origin-unsupported-url.html [ Timeout ]
 
 # Failing tests in dictionary order.
-crbug.com/736308 [ Debug ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.html [ Failure ]
-crbug.com/736308 [ Debug ] virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.worker.html [ Failure ]
+crbug.com/736308 virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.html [ Failure ]
+crbug.com/736308 virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect-preflight.any.worker.html [ Failure ]
 crbug.com/736308 virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect.any.html [ Failure ]
 crbug.com/736308 virtual/outofblink-cors/external/wpt/fetch/api/cors/cors-redirect.any.worker.html [ Failure ]
 crbug.com/802835 virtual/outofblink-cors/external/wpt/fetch/corb/img-mime-types-coverage.tentative.sub.html [ Failure ]
-crbug.com/802835 virtual/outofblink-cors/external/wpt/fetch/corb/img-png-mislabeled-as-html-nosniff.tentative.sub.html [ Failure ]
-crbug.com/802835 virtual/outofblink-cors/external/wpt/fetch/corb/preload-image-png-mislabeled-as-html-nosniff.tentative.sub.html [ Failure ]
-crbug.com/802835 virtual/outofblink-cors/external/wpt/fetch/corb/script-html-correctly-labeled.tentative.sub.html [ Failure ]
 crbug.com/745327 virtual/outofblink-cors/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html [ Failure Pass ]
 crbug.com/834183 virtual/outofblink-cors/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/update.https.html [ Failure Pass ]
 crbug.com/736308 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-image-cache.https.html [ Failure ]
 crbug.com/736308 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-image.https.html [ Failure ]
-crbug.com/736308 [ Debug ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Failure ]
-crbug.com/736308 [ Debug ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Failure ]
+crbug.com/736308 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Failure ]
+crbug.com/736308 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Failure ]
 crbug.com/736308 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-event-referrer-policy.https.html [ Failure ]
 crbug.com/595993 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
 crbug.com/736308 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-request-html-imports.https.html [ Failure ]
@@ -3231,9 +3217,6 @@
 
 crbug.com/780398 [ Mac ] plugins/mouse-capture-inside-shadow.html [ Failure Pass ]
 
-# Failing on Trusty Debug, disabled while investigating.
-crbug.com/836623 [ Linux Debug ] virtual/android/rootscroller/gesture-scroll-document-not-root-scroller.html [ Failure ]
-
 crbug.com/678346 [ Debug ] fast/dom/shadow/selections-in-shadow.html [ Pass Timeout ]
 crbug.com/678346 [ Win7 Mac Debug ] storage/indexeddb/index-cursor.html [ Pass Timeout ]
 crbug.com/810254 [ Win7 ] storage/indexeddb/observer-frame.html [ Pass Timeout ]
diff --git a/third_party/WebKit/LayoutTests/W3CImportExpectations b/third_party/WebKit/LayoutTests/W3CImportExpectations
index 8d9e772..d39cd16 100644
--- a/third_party/WebKit/LayoutTests/W3CImportExpectations
+++ b/third_party/WebKit/LayoutTests/W3CImportExpectations
@@ -122,6 +122,8 @@
 external/wpt/dpub-aria [ Skip ]
 external/wpt/fonts/math [ Skip ]
 external/wpt/html-longdesc [ Skip ]
+external/wpt/infrastructure/metadata/infrastructure/browsers/firefox [ Skip ]
+external/wpt/infrastructure/browsers/firefox [ Skip ]
 external/wpt/js [ Skip ]
 external/wpt/mathml [ Skip ]
 external/wpt/old-tests [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/css3/calc/webkit-line-clamp-calc.html b/third_party/WebKit/LayoutTests/css3/calc/webkit-line-clamp-calc.html
new file mode 100644
index 0000000..15d43c04
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/css3/calc/webkit-line-clamp-calc.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: calc() function in webkit-line-clamp</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<style>
+    #test {
+        -webkit-line-clamp: calc(2);
+    }
+</style>
+<div id="test"></div>
+<script>
+    const div = document.querySelector("#test");
+    test(function() {
+        assert_equals(getComputedStyle(div).webkitLineClamp, "2");
+    }, "calc() in webkit-line-clamp");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index d3869fe1..56e2d42 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -81965,6 +81965,18 @@
      {}
     ]
    ],
+   "css/css-writing-modes/sizing-percentages-replaced-orthogonal-001.html": [
+    [
+     "/css/css-writing-modes/sizing-percentages-replaced-orthogonal-001.html",
+     [
+      [
+       "/css/css-writing-modes/sizing-percentages-replaced-orthogonal-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-writing-modes/svg-aliasing-001.html": [
     [
      "/css/css-writing-modes/svg-aliasing-001.html",
@@ -92897,6 +92909,142 @@
      {}
     ]
    ],
+   "infrastructure/reftest/green-ref.html": [
+    [
+     "/infrastructure/reftest/green-ref.html",
+     [
+      [
+       "/infrastructure/reftest/green.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest.https.html": [
+    [
+     "/infrastructure/reftest/reftest.https.html",
+     [
+      [
+       "/infrastructure/reftest/green.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_and_fail.html": [
+    [
+     "/infrastructure/reftest/reftest_and_fail.html",
+     [
+      [
+       "/infrastructure/reftest/reftest_and_fail_0-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_match.html": [
+    [
+     "/infrastructure/reftest/reftest_match.html",
+     [
+      [
+       "/infrastructure/reftest/green.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_match_fail.html": [
+    [
+     "/infrastructure/reftest/reftest_match_fail.html",
+     [
+      [
+       "/infrastructure/reftest/red.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_mismatch.html": [
+    [
+     "/infrastructure/reftest/reftest_mismatch.html",
+     [
+      [
+       "/infrastructure/reftest/red.html",
+       "!="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_mismatch_fail.html": [
+    [
+     "/infrastructure/reftest/reftest_mismatch_fail.html",
+     [
+      [
+       "/infrastructure/reftest/green.html",
+       "!="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_or_0.html": [
+    [
+     "/infrastructure/reftest/reftest_or_0.html",
+     [
+      [
+       "/infrastructure/reftest/red.html",
+       "=="
+      ],
+      [
+       "/infrastructure/reftest/green.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_ref_timeout.html": [
+    [
+     "/infrastructure/reftest/reftest_ref_timeout.html",
+     [
+      [
+       "/infrastructure/reftest/reftest_ref_timeout-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_timeout.html": [
+    [
+     "/infrastructure/reftest/reftest_timeout.html",
+     [
+      [
+       "/infrastructure/reftest/green.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_wait_0.html": [
+    [
+     "/infrastructure/reftest/reftest_wait_0.html",
+     [
+      [
+       "/infrastructure/reftest/green.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "quirks/historical/list-item-bullet-size.html": [
     [
      "/quirks/historical/list-item-bullet-size.html",
@@ -97086,6 +97234,78 @@
      ],
      {}
     ]
+   ],
+   "infrastructure/reftest/reftest_and_fail_0-ref.html": [
+    [
+     "/infrastructure/reftest/reftest_and_fail_0-ref.html",
+     [
+      [
+       "/infrastructure/reftest/red.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_cycle.html": [
+    [
+     "/infrastructure/reftest/reftest_cycle.html",
+     [
+      [
+       "/infrastructure/reftest/reftest_cycle_0-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_cycle_0-ref.html": [
+    [
+     "/infrastructure/reftest/reftest_cycle_0-ref.html",
+     [
+      [
+       "/infrastructure/reftest/reftest_cycle_1-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_cycle_1-ref.html": [
+    [
+     "/infrastructure/reftest/reftest_cycle_1-ref.html",
+     [
+      [
+       "/infrastructure/reftest/reftest_cycle.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_cycle_fail.html": [
+    [
+     "/infrastructure/reftest/reftest_cycle_fail.html",
+     [
+      [
+       "/infrastructure/reftest/reftest_cycle_fail_0-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_cycle_fail_0-ref.html": [
+    [
+     "/infrastructure/reftest/reftest_cycle_fail_0-ref.html",
+     [
+      [
+       "/infrastructure/reftest/reftest_cycle_fail.html",
+       "!="
+      ]
+     ],
+     {}
+    ]
    ]
   },
   "stub": {
@@ -130906,6 +131126,11 @@
      {}
     ]
    ],
+   "css/css-writing-modes/sizing-percentages-replaced-orthogonal-001-ref.html": [
+    [
+     {}
+    ]
+   ],
    "css/css-writing-modes/support/100x100-lime.png": [
     [
      {}
@@ -139046,11 +139271,6 @@
      {}
     ]
    ],
-   "fetch/api/request/request-init-003.sub-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "fetch/api/request/request-keepalive-expected.txt": [
     [
      {}
@@ -139061,11 +139281,6 @@
      {}
     ]
    ],
-   "fetch/api/request/request-structure-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "fetch/api/request/resources/cache.py": [
     [
      {}
@@ -153591,26 +153806,61 @@
      {}
     ]
    ],
-   "infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini": [
-    [
-     {}
-    ]
-   ],
-   "infrastructure/metadata/infrastructure/browsers/firefox/prefs.html.ini": [
-    [
-     {}
-    ]
-   ],
    "infrastructure/metadata/infrastructure/expected-fail/failing-test.html.ini": [
     [
      {}
     ]
    ],
+   "infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini": [
+    [
+     {}
+    ]
+   ],
+   "infrastructure/metadata/infrastructure/reftest/reftest_cycle_fail.html.ini": [
+    [
+     {}
+    ]
+   ],
+   "infrastructure/metadata/infrastructure/reftest/reftest_match_fail.html.ini": [
+    [
+     {}
+    ]
+   ],
+   "infrastructure/metadata/infrastructure/reftest/reftest_mismatch_fail.html.ini": [
+    [
+     {}
+    ]
+   ],
+   "infrastructure/metadata/infrastructure/reftest/reftest_ref_timeout.html.ini": [
+    [
+     {}
+    ]
+   ],
+   "infrastructure/metadata/infrastructure/reftest/reftest_timeout.html.ini": [
+    [
+     {}
+    ]
+   ],
    "infrastructure/reftest-wait-ref.html": [
     [
      {}
     ]
    ],
+   "infrastructure/reftest/green.html": [
+    [
+     {}
+    ]
+   ],
+   "infrastructure/reftest/red.html": [
+    [
+     {}
+    ]
+   ],
+   "infrastructure/reftest/reftest_ref_timeout-ref.html": [
+    [
+     {}
+    ]
+   ],
    "infrastructure/testdriver/send_keys-expected.txt": [
     [
      {}
@@ -168346,11 +168596,6 @@
      {}
     ]
    ],
-   "xhr/abort-during-open.js": [
-    [
-     {}
-    ]
-   ],
    "xhr/abort-during-upload-expected.txt": [
     [
      {}
@@ -168996,11 +169241,6 @@
      {}
     ]
    ],
-   "xhr/send-send.js": [
-    [
-     {}
-    ]
-   ],
    "xhr/setrequestheader-content-type-expected.txt": [
     [
      {}
@@ -209708,12 +209948,6 @@
      {}
     ]
    ],
-   "infrastructure/browsers/firefox/prefs.html": [
-    [
-     "/infrastructure/browsers/firefox/prefs.html",
-     {}
-    ]
-   ],
    "infrastructure/expected-fail/failing-test.html": [
     [
      "/infrastructure/expected-fail/failing-test.html",
@@ -242140,15 +242374,13 @@
      {}
     ]
    ],
-   "xhr/abort-during-open.htm": [
+   "xhr/abort-during-open.any.js": [
     [
-     "/xhr/abort-during-open.htm",
+     "/xhr/abort-during-open.any.html",
      {}
-    ]
-   ],
-   "xhr/abort-during-open.worker.js": [
+    ],
     [
-     "/xhr/abort-during-open.worker.html",
+     "/xhr/abort-during-open.any.worker.html",
      {}
     ]
    ],
@@ -243476,15 +243708,13 @@
      {}
     ]
    ],
-   "xhr/send-send.htm": [
+   "xhr/send-send.any.js": [
     [
-     "/xhr/send-send.htm",
+     "/xhr/send-send.any.html",
      {}
-    ]
-   ],
-   "xhr/send-send.worker.js": [
+    ],
     [
-     "/xhr/send-send.worker.html",
+     "/xhr/send-send.any.worker.html",
      {}
     ]
    ],
@@ -320901,6 +321131,14 @@
    "2543ef7b6e41b2b0614c32167f4e0a85319dae0c",
    "reftest"
   ],
+  "css/css-writing-modes/sizing-percentages-replaced-orthogonal-001-ref.html": [
+   "59177963e949b6c60b3e919f87de243a5ca24522",
+   "support"
+  ],
+  "css/css-writing-modes/sizing-percentages-replaced-orthogonal-001.html": [
+   "c558b746bdc80a28371146de9a54ba4822e91088",
+   "reftest"
+  ],
   "css/css-writing-modes/support/100x100-lime.png": [
    "b02fc2d0ad1d95a2aeb6011022e63928841b183f",
    "support"
@@ -334649,10 +334887,6 @@
    "3a0e29dacdea8256a57293f8256c881d307cd4f6",
    "testharness"
   ],
-  "fetch/api/request/request-init-003.sub-expected.txt": [
-   "8844526688e4d42148b7858ff91a3b1e221cd7fa",
-   "support"
-  ],
   "fetch/api/request/request-init-003.sub.html": [
    "98e47b378d13b9b94601eb7c6035c457d53151ca",
    "testharness"
@@ -334677,10 +334911,6 @@
    "132b917c77c61230f7c5e84c3c9cafe4d1f0b565",
    "testharness"
   ],
-  "fetch/api/request/request-structure-expected.txt": [
-   "ec59e589ff73278c2d076677b437c228e6cbfeac",
-   "support"
-  ],
   "fetch/api/request/request-structure.html": [
    "2af02f3ecf8449c91f2f1d28effc3478a4bfc235",
    "testharness"
@@ -356069,10 +356299,6 @@
    "60b3082e7b4b85acfbd6239f69fe5c70db274450",
    "support"
   ],
-  "infrastructure/browsers/firefox/prefs.html": [
-   "32cd95068c1f207719e75f27144ebe74eb7a9c75",
-   "testharness"
-  ],
   "infrastructure/expected-fail/failing-test-expected.txt": [
    "936079eb1760f752fca0b0af39eecaf59d233c90",
    "support"
@@ -356085,18 +356311,34 @@
    "0f536ac59a959769966d56c5a546f9f2c2557e97",
    "support"
   ],
-  "infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini": [
-   "29d2053e55e60d4e8a15def3a96a3501db03ec54",
-   "support"
-  ],
-  "infrastructure/metadata/infrastructure/browsers/firefox/prefs.html.ini": [
-   "073cc56d2a4655779b55cf543a27ce1daded5936",
-   "support"
-  ],
   "infrastructure/metadata/infrastructure/expected-fail/failing-test.html.ini": [
    "7eecbfc4845e6befe54b0f007d587a1a003993dc",
    "support"
   ],
+  "infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini": [
+   "b6c1fe38e610a8ffaf843c0c0b791c65fe6d5145",
+   "support"
+  ],
+  "infrastructure/metadata/infrastructure/reftest/reftest_cycle_fail.html.ini": [
+   "36720a54c9121d83c2f42150be8249442f8d4006",
+   "support"
+  ],
+  "infrastructure/metadata/infrastructure/reftest/reftest_match_fail.html.ini": [
+   "30338e0d6c39e1ae6150a109166e598330cc467f",
+   "support"
+  ],
+  "infrastructure/metadata/infrastructure/reftest/reftest_mismatch_fail.html.ini": [
+   "49250363a779c7f544ce20808c479ed21dfccf34",
+   "support"
+  ],
+  "infrastructure/metadata/infrastructure/reftest/reftest_ref_timeout.html.ini": [
+   "a243788611107b6c2d228c1c793e1b966a91187d",
+   "support"
+  ],
+  "infrastructure/metadata/infrastructure/reftest/reftest_timeout.html.ini": [
+   "8afb2d014ce4d04b79388feac15416215095b47f",
+   "support"
+  ],
   "infrastructure/reftest-wait-ref.html": [
    "62552ac6981fc0c7aca84983569717eb2990a31e",
    "support"
@@ -356105,6 +356347,86 @@
    "1a291b68cdf6edcfc28a2ff22e294e8e8ebc0c42",
    "reftest"
   ],
+  "infrastructure/reftest/green-ref.html": [
+   "13751835b881c199844f514e773df112385a9e13",
+   "reftest"
+  ],
+  "infrastructure/reftest/green.html": [
+   "e698bcd7504f6c9fe04f3a15b5b948ae0fec856e",
+   "support"
+  ],
+  "infrastructure/reftest/red.html": [
+   "9563fe27abd39ec6dab17ab599215a69b2324982",
+   "support"
+  ],
+  "infrastructure/reftest/reftest.https.html": [
+   "b1c85b1eead1885a0fe977e95641b94fa3d6b726",
+   "reftest"
+  ],
+  "infrastructure/reftest/reftest_and_fail.html": [
+   "641b3d7927737e81ccc480ab6e994a06dc4bd3cf",
+   "reftest"
+  ],
+  "infrastructure/reftest/reftest_and_fail_0-ref.html": [
+   "52ab7ba703c4dc25a7435344b57c2dc6eef08571",
+   "reftest_node"
+  ],
+  "infrastructure/reftest/reftest_cycle.html": [
+   "1775b919ba7e5dc9e44935ace5d53ec25453c7f9",
+   "reftest_node"
+  ],
+  "infrastructure/reftest/reftest_cycle_0-ref.html": [
+   "b6faf401dde43e8afcad1278f6243b6b9c484893",
+   "reftest_node"
+  ],
+  "infrastructure/reftest/reftest_cycle_1-ref.html": [
+   "7bbd342c126d2e445b83c89df98b3bf43884fa79",
+   "reftest_node"
+  ],
+  "infrastructure/reftest/reftest_cycle_fail.html": [
+   "6acd776b1c04a8b069bd8f7bbc5bd001b7cd9d0a",
+   "reftest_node"
+  ],
+  "infrastructure/reftest/reftest_cycle_fail_0-ref.html": [
+   "ca6da32889313e85ac1da20ceba8f38cbae50c45",
+   "reftest_node"
+  ],
+  "infrastructure/reftest/reftest_match.html": [
+   "dd0dacd73566a26aed0fb6764d7c1a18b504c2d2",
+   "reftest"
+  ],
+  "infrastructure/reftest/reftest_match_fail.html": [
+   "b45099526551022cd6ebc834981bd4abebc1d6ac",
+   "reftest"
+  ],
+  "infrastructure/reftest/reftest_mismatch.html": [
+   "6eb987daabbbacbba7c5bffa7edbd57c8534cc80",
+   "reftest"
+  ],
+  "infrastructure/reftest/reftest_mismatch_fail.html": [
+   "e5343dc9300974de71f96f0c736b2ff4e5920848",
+   "reftest"
+  ],
+  "infrastructure/reftest/reftest_or_0.html": [
+   "1beaea5c2f84162bc279a9eb3d5861e509ac61b3",
+   "reftest"
+  ],
+  "infrastructure/reftest/reftest_ref_timeout-ref.html": [
+   "da36ed75287ab3f4a92a32f82fea7084e3599a2b",
+   "support"
+  ],
+  "infrastructure/reftest/reftest_ref_timeout.html": [
+   "be5bd98927dbda42fd41dfb3e696a2866746cd59",
+   "reftest"
+  ],
+  "infrastructure/reftest/reftest_timeout.html": [
+   "280c5719094807cb8d80d706585c0dea586b1cd8",
+   "reftest"
+  ],
+  "infrastructure/reftest/reftest_wait_0.html": [
+   "7c39501c8a2ddcd9ee0405af1df84e259205ab04",
+   "reftest"
+  ],
   "infrastructure/server/secure-context.https.any.js": [
    "6f246bdc6d67a92a6518870542c20d2f8b2b5f5d",
    "testharness"
@@ -385102,27 +385424,27 @@
    "support"
   ],
   "websockets/Close-1000-reason.any.js": [
-   "232e2286e3a5d8017a4da0d6800af6f955e802be",
+   "c73946ea1fd8c159de394e2275d58f7c7ca5f20c",
    "testharness"
   ],
   "websockets/Close-1000.any.js": [
-   "9aacd24847225cc15883bc97fe6083b1bce87585",
+   "e5084bdfe6473d7f980e841f3c943c16955af48e",
    "testharness"
   ],
   "websockets/Close-Reason-124Bytes.any.js": [
-   "8fa6ced38fcc2199953370eefcb5007999d8f294",
+   "a9bc7a9db95787e5169df6b17fcf1fff2feba610",
    "testharness"
   ],
   "websockets/Close-reason-unpaired-surrogates.any.js": [
-   "11a06fcb4b623667e880fa1b8410a0bceb158d13",
+   "e633954d64c77a2d7018592491cc4c8e06951db1",
    "testharness"
   ],
   "websockets/Close-undefined.any.js": [
-   "e83fdcf0a96ff04974ab87cf103f1c6aa0da816d",
+   "4c3eb3b1fb0f2b5a86778473790b4ad01ba7913d",
    "testharness"
   ],
   "websockets/Create-Secure-extensions-empty.any.js": [
-   "29649e1db7331a95da9f62b19d31bc072ee6fe81",
+   "8a9fa5df9c663bc03ea4a3c95a07ed03716c4d03",
    "testharness"
   ],
   "websockets/Create-Secure-url-with-space-expected.txt": [
@@ -385130,43 +385452,43 @@
    "support"
   ],
   "websockets/Create-Secure-url-with-space.any-expected.txt": [
-   "212012d32e644e0c2acdab195af159e9cb9cf313",
+   "02da2dc04abfd0327ae58b9dc51cd9e7d3d0f430",
    "support"
   ],
   "websockets/Create-Secure-url-with-space.any.js": [
-   "06ac8bf7174529557116aade3a716a340e9d1500",
+   "7bb26f1f8a0508aa5e63e13a3944069ed4f664c0",
    "testharness"
   ],
   "websockets/Create-Secure-url-with-space.any.worker-expected.txt": [
-   "212012d32e644e0c2acdab195af159e9cb9cf313",
+   "02da2dc04abfd0327ae58b9dc51cd9e7d3d0f430",
    "support"
   ],
   "websockets/Create-Secure-valid-url-array-protocols.any.js": [
-   "242bf917d9ac4dcf6f11a8a9d1b597f956a4ef9e",
+   "5f03fbef258dceab738c9bab5a27b9e76d54cfd3",
    "testharness"
   ],
   "websockets/Create-Secure-valid-url-binaryType-blob.any.js": [
-   "d0129913180eb49c7836672274386b26e1a26c09",
+   "64f5fdb17f8c8def458c6758e44ad5ec36fa64da",
    "testharness"
   ],
   "websockets/Create-Secure-valid-url-protocol-setCorrectly.any.js": [
-   "e12b21a173d36dc1ecf06317f99e3dab212e5f53",
+   "f4ce408dcfb8df678635d9f47238ff3c37052297",
    "testharness"
   ],
   "websockets/Create-Secure-valid-url-protocol-string.any.js": [
-   "34690bcf8232fe3ea672325af804e40025263fd5",
+   "9e257d2bf6e91198a1dc68d638505cdee5d861c9",
    "testharness"
   ],
   "websockets/Create-Secure-valid-url.any.js": [
-   "c88bfec8807165df66fe07c9f45e84c4ce407a27",
+   "82d84cd25acb8ff4c5d821d19ee399dd8eeeeb54",
    "testharness"
   ],
   "websockets/Create-Secure-verify-url-set-non-default-port.any.js": [
-   "3d5c48e01b37a39e47b9192e30d38d21d7278326",
+   "30d65805f43d04019390c3cc44be510cb6940f50",
    "testharness"
   ],
   "websockets/Create-asciiSep-protocol-string.any.js": [
-   "b0778289d527b2a580788d91415ea70ca329caa2",
+   "1923df0d3f148f95ed38c58c800994dbda645cf6",
    "testharness"
   ],
   "websockets/Create-blocked-port-expected.txt": [
@@ -385178,7 +385500,7 @@
    "support"
   ],
   "websockets/Create-blocked-port.any.js": [
-   "b2fba708f014738eee1efcceeb4c396ebf5ca5e8",
+   "e09fb109af886f9f85a7ba94556158e0d8a19a52",
    "testharness"
   ],
   "websockets/Create-blocked-port.any.worker-expected.txt": [
@@ -385186,19 +385508,19 @@
    "support"
   ],
   "websockets/Create-invalid-urls.any.js": [
-   "a61ec657e6b8e81b7ea3fd196f1553cf001c0b51",
+   "f856b70ef0d75e488dbf2d8f1e7d4f782f33ba66",
    "testharness"
   ],
   "websockets/Create-non-absolute-url.any.js": [
-   "43a74d73fe628dce359ae02a549ac6eebde63c04",
+   "19ba28b0d4398943fdc99136015086822923ee8b",
    "testharness"
   ],
   "websockets/Create-nonAscii-protocol-string.any.js": [
-   "7354ded8647d934361f297eac82e6c35c332e3de",
+   "25f712f43f31a6af798beb1a42d0192c33a8bb32",
    "testharness"
   ],
   "websockets/Create-on-worker-shutdown.any.js": [
-   "44ebfd931d7db3e79dcd6c4869809d6812b6d3ec",
+   "a3770c937d8c97584cc380b21c1fb56a8db44c43",
    "testharness"
   ],
   "websockets/Create-on-worker-shutdown.any.worker-expected.txt": [
@@ -385206,7 +385528,7 @@
    "support"
   ],
   "websockets/Create-protocol-with-space.any.js": [
-   "0952d876349721a3ce7d8f444310265b56714e31",
+   "758bd4553fffbe2be5772fa7899ed47df124d233",
    "testharness"
   ],
   "websockets/Create-protocols-repeated-case-insensitive-expected.txt": [
@@ -385214,43 +385536,43 @@
    "support"
   ],
   "websockets/Create-protocols-repeated-case-insensitive.any-expected.txt": [
-   "7c1310532fa4bb427a461181dff73d8b944560cc",
+   "677037807f66c56a088385a9fba98f78d9e7ca61",
    "support"
   ],
   "websockets/Create-protocols-repeated-case-insensitive.any.js": [
-   "119f105406ffd23d5e061907dfd05a033ab063a6",
+   "9849c576fc21afd75e890d258e511c85b7716c31",
    "testharness"
   ],
   "websockets/Create-protocols-repeated-case-insensitive.any.worker-expected.txt": [
-   "7c1310532fa4bb427a461181dff73d8b944560cc",
+   "677037807f66c56a088385a9fba98f78d9e7ca61",
    "support"
   ],
   "websockets/Create-protocols-repeated.any.js": [
-   "7d9693702e2c00b5ad4f5f20ced8ee6d4f5b995e",
+   "25d5a390c53ba31893c9a4e38b865bdf129226d1",
    "testharness"
   ],
   "websockets/Create-valid-url-array-protocols.any.js": [
-   "ef97eccc11ffd79158008ccbe5a883cc71e0bb2e",
+   "1e91ac9f1a048fddfa12cfd00a7f8f05df7dc55a",
    "testharness"
   ],
   "websockets/Create-valid-url-protocol-empty.any.js": [
-   "0a373bbf19d2632d56ae7a798b628a2590544625",
+   "895ef38f0243b76b7cf82105bc33aac09ab8d692",
    "testharness"
   ],
   "websockets/Create-valid-url-protocol.any.js": [
-   "7781737cf28ba7d96fdbf5db96c461b3f1b784ca",
+   "8771222d6b7f90890c17770d4848d5ac339d8fbd",
    "testharness"
   ],
   "websockets/Create-valid-url.any.js": [
-   "5fd613b75c784f6c8c3f73775701afc132460167",
+   "bf76962a23369386bfe330df6643f157907bae1c",
    "testharness"
   ],
   "websockets/Create-verify-url-set-non-default-port.any.js": [
-   "395dcc95796f3208ef4c70f02f3b9ef968f52ad9",
+   "48d6c6bcafe581b4ad6a958fdfd78cd1804e603b",
    "testharness"
   ],
   "websockets/Create-wrong-scheme.any.js": [
-   "972ee46955f31fa402fcd0c83e528f2a803cad5b",
+   "d304ef9fac5ff9fe0ed78f3afd5705587dd126b4",
    "testharness"
   ],
   "websockets/OWNERS": [
@@ -385262,171 +385584,171 @@
    "support"
   ],
   "websockets/Secure-Close-1000-reason.any.js": [
-   "fbca7237aa1fcd8d93e61f1a25ce54e42ef947fe",
+   "8221d0691dc86d29a7dee193e20513c00ea46b00",
    "testharness"
   ],
   "websockets/Secure-Close-1000-verify-code.any.js": [
-   "218c68a257e21c5f60dcf2d92e418e48955586a6",
+   "4e2249b7acb742493f6a9d55f4fd56a9d3cf63d1",
    "testharness"
   ],
   "websockets/Secure-Close-1000.any.js": [
-   "c6c4580f1b8da8e1ad36cb143601495362bfd508",
+   "4f63153e506021917ce40a1d4a5c53e13d6c3ef4",
    "testharness"
   ],
   "websockets/Secure-Close-1005-verify-code.any.js": [
-   "f0bf3684d5aeb48bd86fba2c02efd9f8190181f5",
+   "580df1d1e6e8f66b0bbc71f6c5d4990ff3b02c41",
    "testharness"
   ],
   "websockets/Secure-Close-1005.any.js": [
-   "e23e64eccd5a030e894f09ffe798d3ddb67de995",
+   "339ba6a21ca5d866e495b795f231a9daee82a8fb",
    "testharness"
   ],
   "websockets/Secure-Close-2999-reason.any.js": [
-   "683f82a05bac2622bda9f6a45d78174d49451541",
+   "c2bf627158d2ec8451e422361c63120483ac9111",
    "testharness"
   ],
   "websockets/Secure-Close-3000-reason.any.js": [
-   "2d7d21e6e694f95493b6bb29af9e917b5bc87c3e",
+   "fa6643162dcb0625e334e30bfc5c37366642a7b5",
    "testharness"
   ],
   "websockets/Secure-Close-3000-verify-code.any.js": [
-   "163a79159ada3cfb3ace3198b6e4374b9d46478a",
+   "b3c3d45983381ae71812a11b9c40f68025eaf952",
    "testharness"
   ],
   "websockets/Secure-Close-4999-reason.any.js": [
-   "fce275a67d48f16dd383e4a1e40c9aae20604d56",
+   "84aa123efd5eabf160fd177da8660902cca41bac",
    "testharness"
   ],
   "websockets/Secure-Close-Reason-124Bytes.any.js": [
-   "f92ea585dd90a6e2a7d60c1199aa55c053e1d0fd",
+   "0f105f09a7ac90e83cf84c2bfc1d9a7aaab8ec95",
    "testharness"
   ],
   "websockets/Secure-Close-Reason-Unpaired-surrogates.any.js": [
-   "8d8499fe89fb9391011851d02a2a1cc87f3091d5",
+   "7ba712430ddc2ff7186f22f5b0f6137861344422",
    "testharness"
   ],
   "websockets/Secure-Close-onlyReason.any.js": [
-   "094f560d486ed7d46c583f8412b27d4aa472cf3c",
+   "2ce5d4482f03c8ba76c2cd47bd3c817640420fee",
    "testharness"
   ],
   "websockets/Secure-Close-readyState-Closed.any.js": [
-   "38acc8f3a4469183285601cf9345a924488e45c9",
+   "50ca1c7d19b7f857c85efd876a1813d55c7bae1f",
    "testharness"
   ],
   "websockets/Secure-Close-readyState-Closing.any.js": [
-   "aded4a277b4c64b8c3ded0a4f4b0779d08b3cea6",
+   "6dff428424d3b91c431a858435ce9336a091d734",
    "testharness"
   ],
   "websockets/Secure-Close-server-initiated-close.any.js": [
-   "1d87d57a4d15f4b811a2c420af673365a107b407",
+   "50d25f9ff3866cc534114ac2b709c01e9e40dce5",
    "testharness"
   ],
   "websockets/Secure-Close-undefined.any.js": [
-   "3e508273245b39ea92e0cf3ab9d593627520368b",
+   "79ea9f2a46dda082fb368ac11d04176310a5186f",
    "testharness"
   ],
   "websockets/Secure-Send-65K-data.any.js": [
-   "d104efed7f007b3f7de3caae01fe806e1c530880",
+   "4d237d1718c1a6befe7a437abeeccf6fd5c0bec9",
    "testharness"
   ],
   "websockets/Secure-Send-binary-65K-arraybuffer.any.js": [
-   "e9266889aee0cdfcf086582583ed93a14f6385b3",
+   "166093627308dc67db01f49d124d2ec5645a7d17",
    "testharness"
   ],
   "websockets/Secure-Send-binary-arraybuffer.any.js": [
-   "cc091b222b393d6d909362c156e8eaa72152188f",
+   "3675bebc4bc0b714eed1d68bed8aa71d3d480749",
    "testharness"
   ],
   "websockets/Secure-Send-binary-arraybufferview-float32.any.js": [
-   "59517667216000d2478a85b1d7b055cebf4a754b",
+   "06f1ec6d8d9c460c1c4adb7b621645cbad6bd298",
    "testharness"
   ],
   "websockets/Secure-Send-binary-arraybufferview-float64.any.js": [
-   "b7ae95fa2dd0ab49debc4d6642a419ee4a7f35ce",
+   "603b86abe929f38d560944602bbb1e14ce335ce3",
    "testharness"
   ],
   "websockets/Secure-Send-binary-arraybufferview-int32.any.js": [
-   "4ef004ec08824b203f6cbdc975389a9dff654cb0",
+   "6b53dfeab2b33c534a658b44979af0e91adae204",
    "testharness"
   ],
   "websockets/Secure-Send-binary-arraybufferview-uint16-offset-length.any.js": [
-   "c781ce38ea37f957d4d137736030b966721631f0",
+   "b43580e7e84b5a413a2fabf0b8c166c1a46320b5",
    "testharness"
   ],
   "websockets/Secure-Send-binary-arraybufferview-uint32-offset.any.js": [
-   "39cea2900157e85cf65872050800d0ea7d466a55",
+   "353ad1ce837ae296cbb9704e6455f43d37c9dfb8",
    "testharness"
   ],
   "websockets/Secure-Send-binary-arraybufferview-uint8-offset-length.any.js": [
-   "e106db1dc4ca7a06fa774be241095e4e6deb60e8",
+   "97da4f658e030ac313bca0d1a0bd1bbb886453bd",
    "testharness"
   ],
   "websockets/Secure-Send-binary-arraybufferview-uint8-offset.any.js": [
-   "8f9e231fe07f0ed7e567f24c534333cfb9cb32fb",
+   "050785f65ee4929b693b2f10c13b686a40dd1ef1",
    "testharness"
   ],
   "websockets/Secure-Send-binary-blob.any.js": [
-   "a1a21715d21201d6fad1f0335a5ea0e51e31cd1b",
+   "9f87909c3a863306a0000934f92a8878a4ab90e9",
    "testharness"
   ],
   "websockets/Secure-Send-data.any.js": [
-   "b10e32b6d25283cfe95d00a142b389610b646862",
+   "26b24fae3ecfcc5c54e0369994aa5cbea35b8aa2",
    "testharness"
   ],
   "websockets/Secure-Send-null.any.js": [
-   "eb112f60b553a387ac8a27f53b58e96afa4de1aa",
+   "f1890361335c1aabc1e169b95ee23bcd35196394",
    "testharness"
   ],
   "websockets/Secure-Send-paired-surrogates.any.js": [
-   "aa67cb57c54847413d87f367d49079e92a0062a8",
+   "2ceb927d3e4252b58759e38f1462be8f0b8b7009",
    "testharness"
   ],
   "websockets/Secure-Send-unicode-data.any.js": [
-   "f745957aac340a3125bb70548063dd16ed681ead",
+   "fe879468ca28a2b9dc74a2eb863905885f33d472",
    "testharness"
   ],
   "websockets/Secure-Send-unpaired-surrogates.any.js": [
-   "44db96d250737541d81b85c16bfc13814b213ef9",
+   "0a04efcfafd84ceb1686dc41ef5ddabff3ff0fe9",
    "testharness"
   ],
   "websockets/Send-0byte-data.any.js": [
-   "2c21aa13b8ce7b4baf94ef0bb8b583be9608e10e",
+   "547a4daeef60c2e509a8ab136e5f6e6e839691bc",
    "testharness"
   ],
   "websockets/Send-65K-data.any.js": [
-   "4ef718a1e4211c5e96c7ef54568ced94a05fc0ff",
+   "f1f9b1da0de2910fba3ab0b2f27ccd6ecbf58e96",
    "testharness"
   ],
   "websockets/Send-Unpaired-Surrogates.any.js": [
-   "565ec0feb15b7e71df3be3fd8b5ec049cd40b43d",
+   "cdf08b6708090bbff835f1e240736b5e594c2594",
    "testharness"
   ],
   "websockets/Send-before-open.any.js": [
-   "8a3f6d4560e087962406377082b5be13851adfec",
+   "a782a3a149e527c1d298fe06ad14a75d74936483",
    "testharness"
   ],
   "websockets/Send-binary-65K-arraybuffer.any.js": [
-   "6ef670a54495dec8beb8f64cf94316b2a02d7a0e",
+   "ce3e5fb8d8e090654984f32730abbd83d21ddc29",
    "testharness"
   ],
   "websockets/Send-binary-arraybuffer.any.js": [
-   "68e1aea078f7f9584727a59e2e6b4de3c65dc124",
+   "8c11cfdbe0538787e9511ca083909c1b081dc0b2",
    "testharness"
   ],
   "websockets/Send-binary-arraybufferview-int16-offset.any.js": [
-   "4e3e87ed3db6af233a42eaa701922447a12db386",
+   "719a0982190474eaa21d39ea62377a9edbfd8868",
    "testharness"
   ],
   "websockets/Send-binary-arraybufferview-int8.any.js": [
-   "03b5defa1ec4c48b91f70b49cc6ea97a405c71b2",
+   "a7ab13227f528bb95a6d50ab34b78722222a253d",
    "testharness"
   ],
   "websockets/Send-binary-blob.any.js": [
-   "04e9e6a6bf04008e30687723bf9ffcfdc44096c1",
+   "1a72e7872cc281cc371bf5d458a2f7e7c8982eb1",
    "testharness"
   ],
   "websockets/Send-data.any.js": [
-   "91c1ceaacb5851b9b440d07788a8eef33d2d6005",
+   "dfbfbdf8355b48f87d33eecc057ef5ace354c427",
    "testharness"
   ],
   "websockets/Send-data.worker.js": [
@@ -385434,15 +385756,15 @@
    "testharness"
   ],
   "websockets/Send-null.any.js": [
-   "ebffe5099f644882956b1625f9017622a2f1f05f",
+   "2a7f3263f2485b7fd55b0a760a7f8a7ecea450a1",
    "testharness"
   ],
   "websockets/Send-paired-surrogates.any.js": [
-   "196a425e64e9ec7d4e40bb72723abc349d3ed929",
+   "cc69d672f6a5d73600f4907382ae6ddee8c082e6",
    "testharness"
   ],
   "websockets/Send-unicode-data.any.js": [
-   "5408066bfb2939cf2e6c2ce5f03dd0fb86c17e60",
+   "4c23d6be59d3f08645664e5b6ca3b856dd130f22",
    "testharness"
   ],
   "websockets/binary/001.html": [
@@ -385462,11 +385784,11 @@
    "testharness"
   ],
   "websockets/binaryType-wrong-value.any.js": [
-   "2dd693107e5bf29112bd3d08b45c6eccb081569e",
+   "81270d4f5bf218b58bbd399dacfb228d0722a127",
    "testharness"
   ],
   "websockets/close-invalid.any.js": [
-   "d50557d4578f2d96080748315dcc8ffc7d6b7485",
+   "0e3c8c4c1220bc98b1d086eccb1a6596b5255291",
    "testharness"
   ],
   "websockets/closing-handshake/002.html": [
@@ -385486,7 +385808,7 @@
    "support"
   ],
   "websockets/constructor.any.js": [
-   "657960be0311f8859d64d69bfba00ffd493e135f",
+   "92fc1ff4b09dfc7cf045d7f278b435a4b5977da8",
    "testharness"
   ],
   "websockets/constructor/001.html": [
@@ -385618,7 +385940,7 @@
    "support"
   ],
   "websockets/eventhandlers.any.js": [
-   "ca5ba116d24a47d5903d1d76333fc7ae2da68cb0",
+   "7e46185674a47f12277346635469fa73df4f8606",
    "testharness"
   ],
   "websockets/extended-payload-length.html": [
@@ -390901,16 +391223,8 @@
    "d536b0f1b6cd251a3ee1812501bf60e25130b543",
    "testharness"
   ],
-  "xhr/abort-during-open.htm": [
-   "bc528083ac09ef3666eb07d294bc2b48dc142791",
-   "testharness"
-  ],
-  "xhr/abort-during-open.js": [
-   "f46bf95a38cc79fe499f4990457fcf1eaa193068",
-   "support"
-  ],
-  "xhr/abort-during-open.worker.js": [
-   "94180bce348fa9fd3826a8993d701936141b8b0b",
+  "xhr/abort-during-open.any.js": [
+   "8b86a0c9cb405aa6bbc934cc99e3bdc0d5e23d85",
    "testharness"
   ],
   "xhr/abort-during-unsent.htm": [
@@ -392321,16 +392635,8 @@
    "3e1788b46878b452f4417eb72dc16b80bcbad46c",
    "testharness"
   ],
-  "xhr/send-send.htm": [
-   "8090983cb88c47209dd3e8a22883434401811985",
-   "testharness"
-  ],
-  "xhr/send-send.js": [
-   "c802b56486b0967c4ede9d15dc64a546a627ef4a",
-   "support"
-  ],
-  "xhr/send-send.worker.js": [
-   "f2de076a4fd8e7987aeb57b8f7cc44706d0cfa88",
+  "xhr/send-send.any.js": [
+   "2c667c5a4901d91b491c34c90d57cd01eb37a7b3",
    "testharness"
   ],
   "xhr/send-sync-blocks-async.htm": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-writing-modes/sizing-percentages-replaced-orthogonal-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-writing-modes/sizing-percentages-replaced-orthogonal-001-ref.html
new file mode 100644
index 0000000..0fd818c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-writing-modes/sizing-percentages-replaced-orthogonal-001-ref.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Reftest Reference: Percentage size on orthogonal replaced elements</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<style>
+.container {
+  display: inline-block;
+  border: solid 5px black;
+  margin: 10px;
+  vertical-align: top;
+  width: 200px;
+  height: 100px;
+}
+
+img {
+  display: block;
+  width: 200px;
+  height: 100px;
+}
+
+</style>
+
+<p>The test passes if you see four filled lime rectangles with black border and <strong>no red</strong>.</p>
+
+<div class="container">
+  <img src="support/100x100-lime.png" />
+</div>
+
+<div class="container">
+  <img src="support/100x100-lime.png" />
+</div>
+
+<div class="container">
+  <img src="support/100x100-lime.png" />
+</div>
+
+<div class="container">
+  <img src="support/100x100-lime.png" />
+</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-writing-modes/sizing-percentages-replaced-orthogonal-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-writing-modes/sizing-percentages-replaced-orthogonal-001.html
new file mode 100644
index 0000000..6829920c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-writing-modes/sizing-percentages-replaced-orthogonal-001.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Writing Modes Test: Percentage size on orthogonal replaced elements</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#orthogonal-auto">
+<link rel="match" href="sizing-percentages-replaced-orthogonal-001-ref.html">
+<meta name="assert" content="Checks that orthogonal replaced elements resolve properly their percentage sizes against the expected axis from their containing block.">
+<style>
+.container {
+  display: inline-block;
+  border: solid 5px black;
+  margin: 10px;
+  vertical-align: top;
+  width: 200px;
+  height: 100px;
+  background: red;
+}
+
+img {
+  display: block;
+  width: 100%;
+  height: 100%;
+}
+
+.horizontalTB { writing-mode: horizontal-tb; }
+.verticalLR { writing-mode: vertical-lr; }
+.verticalRL {  writing-mode: vertical-rl; }
+</style>
+
+<p>The test passes if you see four filled lime rectangles with black border and <strong>no red</strong>.</p>
+
+<div class="container horizontalTB">
+  <img class="verticalLR" src="support/100x100-lime.png" />
+</div>
+
+<div class="container horizontalTB">
+  <img class="verticalRL" src="support/100x100-lime.png" />
+</div>
+
+<div class="container verticalLR">
+  <img class="horizontalTB" src="support/100x100-lime.png" />
+</div>
+
+<div class="container verticalRL">
+  <img class="horizontalTB" src="support/100x100-lime.png" />
+</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/browsers/firefox/prefs.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/browsers/firefox/prefs.html
deleted file mode 100644
index 64a985a..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/browsers/firefox/prefs.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<title>Ensure that setting gecko prefs works</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
-assert_equals(getComputedStyle(document.documentElement).color, "rgb(0, 255, 0)")
-</script>
-<p>This should be green</p>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini
deleted file mode 100644
index 3e0ed18..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-disabled:
-  if product != "firefox": true
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/browsers/firefox/prefs.html.ini b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/browsers/firefox/prefs.html.ini
deleted file mode 100644
index 7b78d216..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/browsers/firefox/prefs.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[prefs.html]
-  prefs: ["browser.display.foreground_color:#00FF00"]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini
new file mode 100644
index 0000000..81aef04
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_and_fail.html.ini
@@ -0,0 +1,3 @@
+[reftest_and_fail.html]
+  type: reftest
+  expected: FAIL
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_cycle_fail.html.ini b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_cycle_fail.html.ini
new file mode 100644
index 0000000..472b33f7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_cycle_fail.html.ini
@@ -0,0 +1,3 @@
+[reftest_cycle_fail.html]
+  type: reftest
+  expected: FAIL
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_match_fail.html.ini b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_match_fail.html.ini
new file mode 100644
index 0000000..f3dc336
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_match_fail.html.ini
@@ -0,0 +1,3 @@
+[reftest_match_fail.html]
+  type: reftest
+  expected: FAIL
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_mismatch_fail.html.ini b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_mismatch_fail.html.ini
new file mode 100644
index 0000000..1055337
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_mismatch_fail.html.ini
@@ -0,0 +1,3 @@
+[reftest_mismatch_fail.html]
+  type: reftest
+  expected: FAIL
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_ref_timeout.html.ini b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_ref_timeout.html.ini
new file mode 100644
index 0000000..8936241
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_ref_timeout.html.ini
@@ -0,0 +1,3 @@
+[reftest_ref_timeout.html]
+  type: reftest
+  expected: TIMEOUT
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_timeout.html.ini b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_timeout.html.ini
new file mode 100644
index 0000000..0d1b9bad
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/metadata/infrastructure/reftest/reftest_timeout.html.ini
@@ -0,0 +1,3 @@
+[reftest_timeout.html]
+  type: reftest
+  expected: TIMEOUT
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/green-ref.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/green-ref.html
new file mode 100644
index 0000000..0e145d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/green-ref.html
@@ -0,0 +1,4 @@
+<link rel=match href=green.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/green.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/green.html
new file mode 100644
index 0000000..38167bb5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/green.html
@@ -0,0 +1,3 @@
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/red.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/red.html
new file mode 100644
index 0000000..2b677e00
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/red.html
@@ -0,0 +1,3 @@
+<style>
+:root {background-color:red}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest.https.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest.https.html
new file mode 100644
index 0000000..5a45f10f3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest.https.html
@@ -0,0 +1,9 @@
+<link rel=match href=green.html>
+<style>
+:root {background-color:red}
+</style>
+<script>
+if (window.location.protocol === "https:") {
+   document.documentElement.style.backgroundColor = "green";
+}
+</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_and_fail.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_and_fail.html
new file mode 100644
index 0000000..2960195
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_and_fail.html
@@ -0,0 +1,5 @@
+<title>Reftest chain that should fail</title>
+<link rel=match href=reftest_and_fail_0-ref.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_and_fail_0-ref.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_and_fail_0-ref.html
new file mode 100644
index 0000000..04fb9aa1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_and_fail_0-ref.html
@@ -0,0 +1,5 @@
+<title>Reftest chain that should fail</title>
+<link rel=match href=red.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle.html
new file mode 100644
index 0000000..4a84a3b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle.html
@@ -0,0 +1,5 @@
+<title>Reftest with cycle, all match</title>
+<link rel=match href=reftest_cycle_0-ref.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_0-ref.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_0-ref.html
new file mode 100644
index 0000000..118bfd8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_0-ref.html
@@ -0,0 +1,5 @@
+<title>OR match that should pass</title>
+<link rel=match href=reftest_cycle_1-ref.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_1-ref.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_1-ref.html
new file mode 100644
index 0000000..59be0b64
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_1-ref.html
@@ -0,0 +1,5 @@
+<title>Reftest with cycle, all match</title>
+<link rel=match href=reftest_cycle.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_fail.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_fail.html
new file mode 100644
index 0000000..175e76c4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_fail.html
@@ -0,0 +1,5 @@
+<title>Reftest with cycle, fails</title>
+<link rel=match href=reftest_cycle_fail_0-ref.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_fail_0-ref.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_fail_0-ref.html
new file mode 100644
index 0000000..c8e548c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_cycle_fail_0-ref.html
@@ -0,0 +1,5 @@
+<title>Reftest with cycle, fails</title>
+<link rel=mismatch href=reftest_cycle_fail.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_match.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_match.html
new file mode 100644
index 0000000..333cc6c1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_match.html
@@ -0,0 +1,5 @@
+<title>rel=match that should pass</title>
+<link rel=match href=green.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_match_fail.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_match_fail.html
new file mode 100644
index 0000000..a9272ef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_match_fail.html
@@ -0,0 +1,5 @@
+<title>rel=match that should fail</title>
+<link rel=match href=red.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_mismatch.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_mismatch.html
new file mode 100644
index 0000000..af5fa07
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_mismatch.html
@@ -0,0 +1,5 @@
+<title>rel=mismatch that should pass</title>
+<link rel=mismatch href=red.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_mismatch_fail.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_mismatch_fail.html
new file mode 100644
index 0000000..8d160c4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_mismatch_fail.html
@@ -0,0 +1,5 @@
+<title>rel=mismatch that should fail</title>
+<link rel=mismatch href=green.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_or_0.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_or_0.html
new file mode 100644
index 0000000..3a51de2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_or_0.html
@@ -0,0 +1,6 @@
+<title>OR match that should pass</title>
+<link rel=match href=red.html>
+<link rel=match href=green.html>
+<style>
+:root {background-color:green}
+</style>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_ref_timeout-ref.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_ref_timeout-ref.html
new file mode 100644
index 0000000..2f52c059
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_ref_timeout-ref.html
@@ -0,0 +1,5 @@
+<html class="reftest-wait">
+<title>rel=match that should time out in the ref</title>
+<style>
+:root {background-color:green}
+</style>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_ref_timeout.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_ref_timeout.html
new file mode 100644
index 0000000..aaf68f5c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_ref_timeout.html
@@ -0,0 +1,6 @@
+<html>
+<title>rel=match that should time out in the ref</title>
+<link rel=match href=reftest_ref_timeout-ref.html>
+<style>
+:root {background-color:green}
+</style>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_timeout.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_timeout.html
new file mode 100644
index 0000000..b10e676
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_timeout.html
@@ -0,0 +1,6 @@
+<html class="reftest-wait">
+<title>rel=match that should timeout</title>
+<link rel=match href=green.html>
+<style>
+:root {background-color:green}
+</style>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_wait_0.html b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_wait_0.html
new file mode 100644
index 0000000..fec62a3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/reftest/reftest_wait_0.html
@@ -0,0 +1,13 @@
+<html class="reftest-wait">
+<title>Test with reftest-wait</title>
+<link rel=match href=green.html>
+<style>
+:root {background-color:red}
+</style>
+<script>
+setTimeout(function() {
+  document.documentElement.style.backgroundColor = "green";
+  document.documentElement.className = "";
+}, 2000);
+</script>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-1000-reason.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-1000-reason.any.js
index 9c2f8e1..1517db2 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-1000-reason.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-1000-reason.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - close(1000, reason) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - close(1000, reason) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
 
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close(1000, "Clean Close");
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close(1000, "Clean Close");
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be opened");
-            assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
-            assert_equals(evt.wasClean, true, "wasClean should be TRUE");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be opened");
+  assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
+  assert_equals(evt.wasClean, true, "wasClean should be TRUE");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-1000.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-1000.any.js
index 382ab98..e052f23 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-1000.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-1000.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create WebSocket - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - close(1000) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create WebSocket - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - close(1000) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
 
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close(1000);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close(1000);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be opened");
-            assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
-            assert_equals(evt.wasClean, true, "wasClean should be TRUE");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be opened");
+  assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
+  assert_equals(evt.wasClean, true, "wasClean should be TRUE");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-Reason-124Bytes.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-Reason-124Bytes.any.js
index 41299169..97bc1bb 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-Reason-124Bytes.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-Reason-124Bytes.any.js
@@ -1,13 +1,15 @@
 // META: script=websocket.sub.js
 
-        var test = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - close(code, 'reason more than 123 bytes') - SYNTAX_ERR is thrown");
+var test = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - close(code, 'reason more than 123 bytes') - SYNTAX_ERR is thrown");
 
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', test.step_func(function (evt) {
-            var reason = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123";
-            assert_equals(reason.length, 124);
-            assert_throws("SYNTAX_ERR", function () { wsocket.close(1000, reason) });
-            test.done();
-        }), true);
+wsocket.addEventListener('open', test.step_func(function(evt) {
+  var reason = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123";
+  assert_equals(reason.length, 124);
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket.close(1000, reason)
+  });
+  test.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-reason-unpaired-surrogates.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-reason-unpaired-surrogates.any.js
index 7d2a7a2..119a32d 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-reason-unpaired-surrogates.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-reason-unpaired-surrogates.any.js
@@ -1,21 +1,21 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - close(reason with unpaired surrogates) - connection should get opened");
-        var testClose = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - close(reason with unpaired surrogates) - connection should get closed");
+var testOpen = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - close(reason with unpaired surrogates) - connection should get opened");
+var testClose = async_test("W3C WebSocket API - Create WebSocket - Close the Connection - close(reason with unpaired surrogates) - connection should get closed");
 
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
-        var replacementChar = "\uFFFD";
-        var reason = "\uD807";
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
+var replacementChar = "\uFFFD";
+var reason = "\uD807";
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close(1000, reason);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close(1000, reason);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be opened");
-            assert_equals(evt.reason, replacementChar, "reason replaced with replacement character");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be opened");
+  assert_equals(evt.reason, replacementChar, "reason replaced with replacement character");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-undefined.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-undefined.any.js
index d6d2ba7d..67bc9b2 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-undefined.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Close-undefined.any.js
@@ -1,11 +1,11 @@
 // META: script=websocket.sub.js
 
-        var test = async_test();
+var test = async_test();
 
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', test.step_func(function (evt) {
-            wsocket.close(undefined);
-            test.done();
-        }), true);
+wsocket.addEventListener('open', test.step_func(function(evt) {
+  wsocket.close(undefined);
+  test.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-extensions-empty.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-extensions-empty.any.js
index 705814e..82b000dd 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-extensions-empty.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-extensions-empty.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - wsocket.extensions should be set to '' after connection is established - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - wsocket.extensions should be set to '' after connection is established - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - wsocket.extensions should be set to '' after connection is established - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - wsocket.extensions should be set to '' after connection is established - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            assert_equals(wsocket.extensions, "", "extensions should be empty");
-            wsocket.close();
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  assert_equals(wsocket.extensions, "", "extensions should be empty");
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be closed");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be closed");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any-expected.txt
index f4448a51..ab89227 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any-expected.txt
@@ -1,4 +1,6 @@
 This is a testharness.js-based test.
-FAIL W3C WebSocket API - Create Secure WebSocket - Pass a URL with a space - SYNTAX_ERR should be thrown assert_throws: function "function () { wsocket = CreateWebSocketWithSpaceInUrl(spaceUrl) }" did not throw
+FAIL W3C WebSocket API - Create Secure WebSocket - Pass a URL with a space - SYNTAX_ERR should be thrown assert_throws: function "function() {
+    wsocket = CreateWebSocketWithSpaceInUrl(spaceUrl)
+  }" did not throw
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any.js
index 9c97995..94265c6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any.js
@@ -1,7 +1,9 @@
 // META: script=websocket.sub.js
 
-        test(function () {
-            var wsocket;
-            var spaceUrl = "web platform.test";
-            assert_throws("SYNTAX_ERR", function () { wsocket = CreateWebSocketWithSpaceInUrl(spaceUrl) });
-        }, "W3C WebSocket API - Create Secure WebSocket - Pass a URL with a space - SYNTAX_ERR should be thrown")
+test(function() {
+  var wsocket;
+  var spaceUrl = "web platform.test";
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = CreateWebSocketWithSpaceInUrl(spaceUrl)
+  });
+}, "W3C WebSocket API - Create Secure WebSocket - Pass a URL with a space - SYNTAX_ERR should be thrown")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any.worker-expected.txt
index f4448a51..ab89227 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any.worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-url-with-space.any.worker-expected.txt
@@ -1,4 +1,6 @@
 This is a testharness.js-based test.
-FAIL W3C WebSocket API - Create Secure WebSocket - Pass a URL with a space - SYNTAX_ERR should be thrown assert_throws: function "function () { wsocket = CreateWebSocketWithSpaceInUrl(spaceUrl) }" did not throw
+FAIL W3C WebSocket API - Create Secure WebSocket - Pass a URL with a space - SYNTAX_ERR should be thrown assert_throws: function "function() {
+    wsocket = CreateWebSocketWithSpaceInUrl(spaceUrl)
+  }" did not throw
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-array-protocols.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-array-protocols.any.js
index d2b10541..fcaf8a3 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-array-protocols.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-array-protocols.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL and array of protocol strings - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL and array of protocol strings - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL and array of protocol strings - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL and array of protocol strings - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, true);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, true);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
-            wsocket.close();
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-binaryType-blob.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-binaryType-blob.any.js
index 4de8c08d..fed88f5c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-binaryType-blob.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-binaryType-blob.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - wsocket.binaryType should be set to 'blob' after connection is established - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - wsocket.binaryType should be set to 'blob' after connection is established - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - wsocket.binaryType should be set to 'blob' after connection is established - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - wsocket.binaryType should be set to 'blob' after connection is established - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            assert_equals(wsocket.binaryType, "blob", "binaryType should be set to Blob");
-            wsocket.close();
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  assert_equals(wsocket.binaryType, "blob", "binaryType should be set to Blob");
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-protocol-setCorrectly.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-protocol-setCorrectly.any.js
index 54074cc5..7ecd295 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-protocol-setCorrectly.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-protocol-setCorrectly.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-            var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL and protocol string - protocol should be set correctly - Connection should be opened");
-            var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL and protocol string - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL and protocol string - protocol should be set correctly - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL and protocol string - Connection should be closed");
 
-            var wsocket = CreateWebSocket(true, true, false);
-            var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, true, false);
+var isOpenCalled = false;
 
-            wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-                assert_equals(wsocket.protocol, "echo", "protocol should be set to echo");
-                wsocket.close();
-                isOpenCalled = true;
-                testOpen.done();
-            }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  assert_equals(wsocket.protocol, "echo", "protocol should be set to echo");
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-            wsocket.addEventListener('close', testClose.step_func(function (evt) {
-                assert_true(isOpenCalled, "WebSocket connection should be open");
-                assert_equals(evt.wasClean, true, "wasClean should be true");
-                    testClose.done();
-            }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-protocol-string.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-protocol-string.any.js
index 5c2682d..59c77c6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-protocol-string.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url-protocol-string.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Check readyState is 1");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL and protocol string - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Check readyState is 1");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL and protocol string - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, true, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, true, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
-            wsocket.close();
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url.any.js
index 5d9ca87..6f1229e7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-valid-url.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL  - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL  - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Pass a valid URL - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
-            wsocket.close();
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-verify-url-set-non-default-port.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-verify-url-set-non-default-port.any.js
index 0b4aa60f..755dbe2 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-verify-url-set-non-default-port.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-Secure-verify-url-set-non-default-port.any.js
@@ -1,7 +1,7 @@
 // META: script=websocket.sub.js
 
-        test(function () {
-            var urlNonDefaultPort = "wss://" + __SERVER__NAME + ":" + __NEW__SECURE__PORT + "/" + __PATH;
-            var wsocket = new WebSocket(urlNonDefaultPort);
-            assert_equals(wsocket.url, urlNonDefaultPort, "wsocket.url is set correctly");
-        }, "W3C WebSocket API - Create Secure WebSocket - wsocket.url should be set correctly")
+test(function() {
+  var urlNonDefaultPort = "wss://" + __SERVER__NAME + ":" + __NEW__SECURE__PORT + "/" + __PATH;
+  var wsocket = new WebSocket(urlNonDefaultPort);
+  assert_equals(wsocket.url, urlNonDefaultPort, "wsocket.url is set correctly");
+}, "W3C WebSocket API - Create Secure WebSocket - wsocket.url should be set correctly")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-asciiSep-protocol-string.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-asciiSep-protocol-string.any.js
index b9e4c44..cb3c3e4 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-asciiSep-protocol-string.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-asciiSep-protocol-string.any.js
@@ -1,7 +1,9 @@
 // META: script=websocket.sub.js
 
-            test(function () {
-                var asciiWithSep = "/echo";
-                var wsocket;
-                assert_throws("SYNTAX_ERR", function () { wsocket = CreateWebSocketWithAsciiSep(asciiWithSep) });
-            }, "W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string with an ascii separator character - SYNTAX_ERR is thrown")
+test(function() {
+  var asciiWithSep = "/echo";
+  var wsocket;
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = CreateWebSocketWithAsciiSep(asciiWithSep)
+  });
+}, "W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string with an ascii separator character - SYNTAX_ERR is thrown")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-blocked-port.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-blocked-port.any.js
index 77f205e1..f0dbc3f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-blocked-port.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-blocked-port.any.js
@@ -1,81 +1,81 @@
 // META: script=websocket.sub.js
 
-            async_test(t => {
-              const ws = CreateWebSocketWithBlockedPort(__PORT)
-              ws.onerror = t.unreached_func()
-              ws.onopen = t.step_func_done()
-            }, 'Basic check');
-            // list of bad ports according to
-            // https://fetch.spec.whatwg.org/#port-blocking
-            [
-                1,    // tcpmux
-                7,    // echo
-                9,    // discard
-                11,   // systat
-                13,   // daytime
-                15,   // netstat
-                17,   // qotd
-                19,   // chargen
-                20,   // ftp-data
-                21,   // ftp
-                22,   // ssh
-                23,   // telnet
-                25,   // smtp
-                37,   // time
-                42,   // name
-                43,   // nicname
-                53,   // domain
-                77,   // priv-rjs
-                79,   // finger
-                87,   // ttylink
-                95,   // supdup
-                101,  // hostriame
-                102,  // iso-tsap
-                103,  // gppitnp
-                104,  // acr-nema
-                109,  // pop2
-                110,  // pop3
-                111,  // sunrpc
-                113,  // auth
-                115,  // sftp
-                117,  // uucp-path
-                119,  // nntp
-                123,  // ntp
-                135,  // loc-srv / epmap
-                139,  // netbios
-                143,  // imap2
-                179,  // bgp
-                389,  // ldap
-                465,  // smtp+ssl
-                512,  // print / exec
-                513,  // login
-                514,  // shell
-                515,  // printer
-                526,  // tempo
-                530,  // courier
-                531,  // chat
-                532,  // netnews
-                540,  // uucp
-                556,  // remotefs
-                563,  // nntp+ssl
-                587,  // smtp
-                601,  // syslog-conn
-                636,  // ldap+ssl
-                993,  // imap+ssl
-                995,  // pop3+ssl
-                2049, // nfs
-                3659, // apple-sasl
-                4045, // lockd
-                6000, // x11
-                6665, // irc (alternate)
-                6666, // irc (alternate)
-                6667, // irc (default)
-                6668, // irc (alternate)
-                6669, // irc (alternate)
-            ].forEach(blockedPort => {
-              async_test(t => {
-                const ws = CreateWebSocketWithBlockedPort(blockedPort)
-                ws.onerror = t.step_func_done()
-                ws.onopen = t.unreached_func()
-              }, "WebSocket blocked port test " + blockedPort)
-            })
+async_test(t => {
+  const ws = CreateWebSocketWithBlockedPort(__PORT)
+  ws.onerror = t.unreached_func()
+  ws.onopen = t.step_func_done()
+}, 'Basic check');
+// list of bad ports according to
+// https://fetch.spec.whatwg.org/#port-blocking
+[
+  1, // tcpmux
+  7, // echo
+  9, // discard
+  11, // systat
+  13, // daytime
+  15, // netstat
+  17, // qotd
+  19, // chargen
+  20, // ftp-data
+  21, // ftp
+  22, // ssh
+  23, // telnet
+  25, // smtp
+  37, // time
+  42, // name
+  43, // nicname
+  53, // domain
+  77, // priv-rjs
+  79, // finger
+  87, // ttylink
+  95, // supdup
+  101, // hostriame
+  102, // iso-tsap
+  103, // gppitnp
+  104, // acr-nema
+  109, // pop2
+  110, // pop3
+  111, // sunrpc
+  113, // auth
+  115, // sftp
+  117, // uucp-path
+  119, // nntp
+  123, // ntp
+  135, // loc-srv / epmap
+  139, // netbios
+  143, // imap2
+  179, // bgp
+  389, // ldap
+  465, // smtp+ssl
+  512, // print / exec
+  513, // login
+  514, // shell
+  515, // printer
+  526, // tempo
+  530, // courier
+  531, // chat
+  532, // netnews
+  540, // uucp
+  556, // remotefs
+  563, // nntp+ssl
+  587, // smtp
+  601, // syslog-conn
+  636, // ldap+ssl
+  993, // imap+ssl
+  995, // pop3+ssl
+  2049, // nfs
+  3659, // apple-sasl
+  4045, // lockd
+  6000, // x11
+  6665, // irc (alternate)
+  6666, // irc (alternate)
+  6667, // irc (default)
+  6668, // irc (alternate)
+  6669, // irc (alternate)
+].forEach(blockedPort => {
+  async_test(t => {
+    const ws = CreateWebSocketWithBlockedPort(blockedPort)
+    ws.onerror = t.step_func_done()
+    ws.onopen = t.unreached_func()
+  }, "WebSocket blocked port test " + blockedPort)
+})
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-invalid-urls.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-invalid-urls.any.js
index 029e45c..5ae25a2c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-invalid-urls.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-invalid-urls.any.js
@@ -1,22 +1,32 @@
 // META: script=websocket.sub.js
 
-        var wsocket;
-        test(function() {
-            assert_throws("SYNTAX_ERR", function () { wsocket = new WebSocket("/echo") });
-        }, "Url is /echo - should throw SYNTAX_ERR");
+var wsocket;
+test(function() {
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = new WebSocket("/echo")
+  });
+}, "Url is /echo - should throw SYNTAX_ERR");
 
-        test(function () {
-            assert_throws("SYNTAX_ERR", function () { wsocket = new WebSocket("mailto:microsoft@microsoft.com") });
-        }, "Url is a mail address - should throw SYNTAX_ERR");
+test(function() {
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = new WebSocket("mailto:microsoft@microsoft.com")
+  });
+}, "Url is a mail address - should throw SYNTAX_ERR");
 
-        test(function () {
-            assert_throws("SYNTAX_ERR", function () { wsocket = new WebSocket("about:blank") });
-        }, "Url is about:blank - should throw SYNTAX_ERR");
+test(function() {
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = new WebSocket("about:blank")
+  });
+}, "Url is about:blank - should throw SYNTAX_ERR");
 
-        test(function () {
-            assert_throws("SYNTAX_ERR", function () { wsocket = new WebSocket("?test") });
-        }, "Url is ?test - should throw SYNTAX_ERR");
+test(function() {
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = new WebSocket("?test")
+  });
+}, "Url is ?test - should throw SYNTAX_ERR");
 
-        test(function () {
-            assert_throws("SYNTAX_ERR", function () { wsocket = new WebSocket("#test") });
-        }, "Url is #test - should throw SYNTAX_ERR");
+test(function() {
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = new WebSocket("#test")
+  });
+}, "Url is #test - should throw SYNTAX_ERR");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-non-absolute-url.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-non-absolute-url.any.js
index 3f789477..369557e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-non-absolute-url.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-non-absolute-url.any.js
@@ -1,6 +1,8 @@
 // META: script=websocket.sub.js
 
-        test(function () {
-            var wsocket;
-            assert_throws("SYNTAX_ERR", function () { wsocket = CreateWebSocketNonAbsolute() });
-        }, "W3C WebSocket API - Create WebSocket - Pass a non absolute URL - SYNTAX_ERR is thrown")
+test(function() {
+  var wsocket;
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = CreateWebSocketNonAbsolute()
+  });
+}, "W3C WebSocket API - Create WebSocket - Pass a non absolute URL - SYNTAX_ERR is thrown")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-nonAscii-protocol-string.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-nonAscii-protocol-string.any.js
index a4f8bb68..39be9f458 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-nonAscii-protocol-string.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-nonAscii-protocol-string.any.js
@@ -1,7 +1,9 @@
 // META: script=websocket.sub.js
 
-            test(function () {
-                var nonAsciiProtocol = "\u0080echo";
-                var wsocket;
-                assert_throws("SYNTAX_ERR", function () { wsocket = CreateWebSocketNonAsciiProtocol(nonAsciiProtocol) });
-            }, "W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string with non-ascii values - SYNTAX_ERR is thrown")
+test(function() {
+  var nonAsciiProtocol = "\u0080echo";
+  var wsocket;
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = CreateWebSocketNonAsciiProtocol(nonAsciiProtocol)
+  });
+}, "W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string with non-ascii values - SYNTAX_ERR is thrown")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-on-worker-shutdown.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-on-worker-shutdown.any.js
index 35d92551..cb3eff8 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-on-worker-shutdown.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-on-worker-shutdown.any.js
@@ -7,7 +7,9 @@
     postMessage(ws.readyState == WebSocket.CONNECTING);
   }
 
-  var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {type:"application/javascript"});
+  var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {
+    type: "application/javascript"
+  });
 
   var w = new Worker(URL.createObjectURL(workerBlob));
   w.onmessage = function(e) {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocol-with-space.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocol-with-space.any.js
index 0f8c82e..b3c14d8e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocol-with-space.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocol-with-space.any.js
@@ -1,6 +1,8 @@
 // META: script=websocket.sub.js
 
-        test(function () {
-            var wsocket;
-            assert_throws("SYNTAX_ERR", function () { wsocket = CreateWebSocketWithSpaceInProtocol("ec ho") });
-        }, "W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string with a space in it - SYNTAX_ERR is thrown")
+test(function() {
+  var wsocket;
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = CreateWebSocketWithSpaceInProtocol("ec ho")
+  });
+}, "W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string with a space in it - SYNTAX_ERR is thrown")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any-expected.txt
index c3b58c7..2687b40 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any-expected.txt
@@ -1,4 +1,6 @@
 This is a testharness.js-based test.
-FAIL W3C WebSocket API - Create WebSocket - Pass a valid URL and an array of protocol strings with repeated values but different case - SYNTAX_ERR is thrown assert_throws: function "function () { wsocket = CreateWebSocketWithRepeatedProtocolsCaseInsensitive() }" did not throw
+FAIL W3C WebSocket API - Create WebSocket - Pass a valid URL and an array of protocol strings with repeated values but different case - SYNTAX_ERR is thrown assert_throws: function "function() {
+    wsocket = CreateWebSocketWithRepeatedProtocolsCaseInsensitive()
+  }" did not throw
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.js
index 855e4f8..16f9975 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.js
@@ -1,6 +1,8 @@
 // META: script=websocket.sub.js
 
-        test(function () {
-            var wsocket;
-            assert_throws("SYNTAX_ERR", function () { wsocket = CreateWebSocketWithRepeatedProtocolsCaseInsensitive() });
-        }, "W3C WebSocket API - Create WebSocket - Pass a valid URL and an array of protocol strings with repeated values but different case - SYNTAX_ERR is thrown")
+test(function() {
+  var wsocket;
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = CreateWebSocketWithRepeatedProtocolsCaseInsensitive()
+  });
+}, "W3C WebSocket API - Create WebSocket - Pass a valid URL and an array of protocol strings with repeated values but different case - SYNTAX_ERR is thrown")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.worker-expected.txt
index c3b58c7..2687b40 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.worker-expected.txt
@@ -1,4 +1,6 @@
 This is a testharness.js-based test.
-FAIL W3C WebSocket API - Create WebSocket - Pass a valid URL and an array of protocol strings with repeated values but different case - SYNTAX_ERR is thrown assert_throws: function "function () { wsocket = CreateWebSocketWithRepeatedProtocolsCaseInsensitive() }" did not throw
+FAIL W3C WebSocket API - Create WebSocket - Pass a valid URL and an array of protocol strings with repeated values but different case - SYNTAX_ERR is thrown assert_throws: function "function() {
+    wsocket = CreateWebSocketWithRepeatedProtocolsCaseInsensitive()
+  }" did not throw
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated.any.js
index ff30a90..624d453 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-protocols-repeated.any.js
@@ -1,6 +1,8 @@
 // META: script=websocket.sub.js
 
-        test(function () {
-            var wsocket;
-            assert_throws("SYNTAX_ERR", function () { wsocket = CreateWebSocketWithRepeatedProtocols() });
-        }, "W3C WebSocket API - Create WebSocket - Pass a valid URL and an array of protocol strings with repeated values - SYNTAX_ERR is thrown")
+test(function() {
+  var wsocket;
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = CreateWebSocketWithRepeatedProtocols()
+  });
+}, "W3C WebSocket API - Create WebSocket - Pass a valid URL and an array of protocol strings with repeated values - SYNTAX_ERR is thrown")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-array-protocols.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-array-protocols.any.js
index 28c6b462..dde0303a 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-array-protocols.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-array-protocols.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL and array of protocol strings - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL and array of protocol strings - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL and array of protocol strings - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL and array of protocol strings - Connection should be closed");
 
-        var wsocket = CreateWebSocket(false, false, true);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(false, false, true);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
-            wsocket.close();
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-protocol-empty.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-protocol-empty.any.js
index 261ce8f..8682e4a 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-protocol-empty.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-protocol-empty.any.js
@@ -1,7 +1,7 @@
 // META: script=websocket.sub.js
 
-        test(function () {
-            var wsocket = CreateWebSocket(false, true, false);
-            assert_equals(wsocket.protocol, "", "protocol should be empty");
-            wsocket.close();
-        }, "W3C WebSocket API - Create WebSocket - wsocket.protocol should be empty before connection is established")
+test(function() {
+  var wsocket = CreateWebSocket(false, true, false);
+  assert_equals(wsocket.protocol, "", "protocol should be empty");
+  wsocket.close();
+}, "W3C WebSocket API - Create WebSocket - wsocket.protocol should be empty before connection is established")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-protocol.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-protocol.any.js
index f7bb429..85e870f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-protocol.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url-protocol.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL and a protocol string - Connection should be closed");
 
-        var wsocket = CreateWebSocket(false, true, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(false, true, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
-            wsocket.close();
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url.any.js
index 0dfa148..9a43dcc 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-valid-url.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create WebSocket - Pass a valid URL - Connection should be closed");
 
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
-            wsocket.close();
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  assert_equals(wsocket.readyState, 1, "readyState should be 1(OPEN)");
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-verify-url-set-non-default-port.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-verify-url-set-non-default-port.any.js
index f4000e5..5548fd1 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-verify-url-set-non-default-port.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-verify-url-set-non-default-port.any.js
@@ -1,7 +1,7 @@
 // META: script=websocket.sub.js
 
-        test(function () {
-            var urlNonDefaultPort = "ws://" + __SERVER__NAME + ":" + __NEW__PORT + "/" + __PATH;
-            var wsocket = new WebSocket(urlNonDefaultPort);
-            assert_equals(wsocket.url, urlNonDefaultPort, "wsocket.url is set correctly");
-        }, "W3C WebSocket API - Create WebSocket - wsocket.url should be set correctly");
+test(function() {
+  var urlNonDefaultPort = "ws://" + __SERVER__NAME + ":" + __NEW__PORT + "/" + __PATH;
+  var wsocket = new WebSocket(urlNonDefaultPort);
+  assert_equals(wsocket.url, urlNonDefaultPort, "wsocket.url is set correctly");
+}, "W3C WebSocket API - Create WebSocket - wsocket.url should be set correctly");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-wrong-scheme.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-wrong-scheme.any.js
index e8adba0..506f81c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-wrong-scheme.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Create-wrong-scheme.any.js
@@ -1,6 +1,8 @@
 // META: script=websocket.sub.js
 
-        test(function () {
-            var wsocket;
-            assert_throws("SYNTAX_ERR", function () { wsocket = CreateWebSocketNonWsScheme() });
-        }, "W3C WebSocket API - Create WebSocket - Pass a URL with a non ws/wss scheme - SYNTAX_ERR is thrown")
+test(function() {
+  var wsocket;
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket = CreateWebSocketNonWsScheme()
+  });
+}, "W3C WebSocket API - Create WebSocket - Pass a URL with a non ws/wss scheme - SYNTAX_ERR is thrown")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000-reason.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000-reason.any.js
index 9ec34bbe0..4d3f67c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000-reason.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000-reason.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000, reason) - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000, reason) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000, reason) - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000, reason) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close(1000, "Clean Close");
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close(1000, "Clean Close");
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
-            assert_equals(evt.wasClean, true, "wasClean should be TRUE");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
+  assert_equals(evt.wasClean, true, "wasClean should be TRUE");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000-verify-code.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000-verify-code.any.js
index e95e3c59..87ba407 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000-verify-code.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000-verify-code.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000, reason) - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000, reason) - event.code == 1000 and event.reason = 'Clean Close'");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000, reason) - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000, reason) - event.code == 1000 and event.reason = 'Clean Close'");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close(1000, "Clean Close");
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close(1000, "Clean Close");
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.code, 1000, "CloseEvent.code should be 1000");
-            assert_equals(evt.reason, "Clean Close", "CloseEvent.reason should be the same as the reason sent in close");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.code, 1000, "CloseEvent.code should be 1000");
+  assert_equals(evt.reason, "Clean Close", "CloseEvent.reason should be the same as the reason sent in close");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000.any.js
index 6b13bd38..67f4e05 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1000.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000) - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000) - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1000) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close(1000);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close(1000);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
-            assert_equals(evt.wasClean, true, "wasClean should be TRUE");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
+  assert_equals(evt.wasClean, true, "wasClean should be TRUE");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1005-verify-code.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1005-verify-code.any.js
index c6712a1..a7c72eaf 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1005-verify-code.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1005-verify-code.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close() - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close() - return close code is 1005 - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close() - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close() - return close code is 1005 - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close();
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.code, 1005, "CloseEvent.code should be 1005");
-            assert_equals(evt.reason, "", "CloseEvent.reason should be empty");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.code, 1005, "CloseEvent.code should be 1005");
+  assert_equals(evt.reason, "", "CloseEvent.reason should be empty");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1005.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1005.any.js
index c01b16e..ddb2c18 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1005.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-1005.any.js
@@ -1,11 +1,13 @@
 // META: script=websocket.sub.js
 
-        var test = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1005) - see '7.1.5.  The WebSocket Connection Close Code' in http://www.ietf.org/rfc/rfc6455.txt");
+var test = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(1005) - see '7.1.5.  The WebSocket Connection Close Code' in http://www.ietf.org/rfc/rfc6455.txt");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', test.step_func(function (evt) {
-            assert_throws("INVALID_ACCESS_ERR", function () { wsocket.close(1005, "1005 - reserved code") });
-            test.done();
-        }), true);
+wsocket.addEventListener('open', test.step_func(function(evt) {
+  assert_throws("INVALID_ACCESS_ERR", function() {
+    wsocket.close(1005, "1005 - reserved code")
+  });
+  test.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-2999-reason.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-2999-reason.any.js
index 61ba413..0fa198eb 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-2999-reason.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-2999-reason.any.js
@@ -1,10 +1,12 @@
 // META: script=websocket.sub.js
 
-        var test = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(2999, reason) - INVALID_ACCESS_ERR is thrown");
+var test = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(2999, reason) - INVALID_ACCESS_ERR is thrown");
 
-        var wsocket = CreateWebSocket(true, false, false);
+var wsocket = CreateWebSocket(true, false, false);
 
-        wsocket.addEventListener('open', test.step_func(function (evt) {
-            assert_throws("INVALID_ACCESS_ERR", function () { wsocket.close(2999, "Close not in range 3000-4999") });
-            test.done();
-        }), true);
+wsocket.addEventListener('open', test.step_func(function(evt) {
+  assert_throws("INVALID_ACCESS_ERR", function() {
+    wsocket.close(2999, "Close not in range 3000-4999")
+  });
+  test.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-3000-reason.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-3000-reason.any.js
index fe25d59..6640ddc 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-3000-reason.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-3000-reason.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(3000, reason) - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(3000, reason) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(3000, reason) - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(3000, reason) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close(3000, "Clean Close with code - 3000");
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close(3000, "Clean Close with code - 3000");
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
-            assert_equals(evt.wasClean, true, "wasClean should be TRUE");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
+  assert_equals(evt.wasClean, true, "wasClean should be TRUE");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-3000-verify-code.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-3000-verify-code.any.js
index 92d14132..5b122d4c3 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-3000-verify-code.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-3000-verify-code.any.js
@@ -1,19 +1,19 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(3000, reason) - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(3000, reason) - verify return code is 3000 - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(3000, reason) - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(3000, reason) - verify return code is 3000 - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close(3000, "Clean Close");
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close(3000, "Clean Close");
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.code, 3000, "CloseEvent.code should be 3000");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.code, 3000, "CloseEvent.code should be 3000");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-4999-reason.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-4999-reason.any.js
index cba254c0..d57899e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-4999-reason.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-4999-reason.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(4999, reason) - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(4999, reason) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(4999, reason) - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(4999, reason) - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close(3000, "Clean Close with code - 4999");
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close(3000, "Clean Close with code - 4999");
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
-            assert_equals(evt.wasClean, true, "wasClean should be TRUE");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
+  assert_equals(evt.wasClean, true, "wasClean should be TRUE");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-Reason-124Bytes.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-Reason-124Bytes.any.js
index ecb8c5b..826cb6ec 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-Reason-124Bytes.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-Reason-124Bytes.any.js
@@ -1,13 +1,15 @@
 // META: script=websocket.sub.js
 
-        var test = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(code, 'reason more than 123 bytes') - SYNTAX_ERR is thrown");
+var test = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(code, 'reason more than 123 bytes') - SYNTAX_ERR is thrown");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', test.step_func(function (evt) {
-            var reason = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123";
-            assert_equals(reason.length, 124);
-            assert_throws("SYNTAX_ERR", function () { wsocket.close(1000, reason) });
-            test.done();
-        }), true);
+wsocket.addEventListener('open', test.step_func(function(evt) {
+  var reason = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123";
+  assert_equals(reason.length, 124);
+  assert_throws("SYNTAX_ERR", function() {
+    wsocket.close(1000, reason)
+  });
+  test.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-Reason-Unpaired-surrogates.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-Reason-Unpaired-surrogates.any.js
index f7fc8b4..fdc62c4 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-Reason-Unpaired-surrogates.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-Reason-Unpaired-surrogates.any.js
@@ -1,21 +1,21 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(reason with unpaired surrogates) - connection should get opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(reason with unpaired surrogates) - connection should get closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(reason with unpaired surrogates) - connection should get opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(reason with unpaired surrogates) - connection should get closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
-        var replacementChar = "\uFFFD";
-        var reason = "\uD807";
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
+var replacementChar = "\uFFFD";
+var reason = "\uD807";
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close(1000, reason);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close(1000, reason);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be opened");
-            assert_equals(evt.reason, replacementChar, "reason replaced with replacement character");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be opened");
+  assert_equals(evt.reason, replacementChar, "reason replaced with replacement character");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-onlyReason.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-onlyReason.any.js
index 77604ed9..79f79b5 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-onlyReason.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-onlyReason.any.js
@@ -1,10 +1,12 @@
 // META: script=websocket.sub.js
 
-        var test = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(only reason) - INVALID_ACCESS_ERR is thrown");
+var test = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - close(only reason) - INVALID_ACCESS_ERR is thrown");
 
-        var wsocket = CreateWebSocket(true, false, false);
+var wsocket = CreateWebSocket(true, false, false);
 
-        wsocket.addEventListener('open', test.step_func(function (evt) {
-            assert_throws("INVALID_ACCESS_ERR", function () { wsocket.close("Close with only reason") });
-            test.done();
-        }), true);
+wsocket.addEventListener('open', test.step_func(function(evt) {
+  assert_throws("INVALID_ACCESS_ERR", function() {
+    wsocket.close("Close with only reason")
+  });
+  test.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-readyState-Closed.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-readyState-Closed.any.js
index 98018e6..32797448 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-readyState-Closed.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-readyState-Closed.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.close();
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.close();
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
-            assert_equals(evt.wasClean, true, "wasClean should be TRUE");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
+  assert_equals(evt.wasClean, true, "wasClean should be TRUE");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-readyState-Closing.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-readyState-Closing.any.js
index f43adfc..b183474 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-readyState-Closing.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-readyState-Closing.any.js
@@ -1,12 +1,12 @@
 // META: script=websocket.sub.js
 
-        var test = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - readyState should be in CLOSING state just before onclose is called");
+var test = async_test("W3C WebSocket API - Create Secure WebSocket - Close the Connection - readyState should be in CLOSING state just before onclose is called");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', test.step_func(function (evt) {
-            wsocket.close();
-            assert_equals(wsocket.readyState, 2, "readyState should be 2(CLOSING)");
-            test.done();
-        }), true);
+wsocket.addEventListener('open', test.step_func(function(evt) {
+  wsocket.close();
+  assert_equals(wsocket.readyState, 2, "readyState should be 2(CLOSING)");
+  test.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-server-initiated-close.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-server-initiated-close.any.js
index 240b2b65..8531b31 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-server-initiated-close.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-server-initiated-close.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Server initiated Close - Client sends back a CLOSE - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Server initiated Close - Client sends back a CLOSE - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create Secure WebSocket - Server initiated Close - Client sends back a CLOSE - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create Secure WebSocket - Server initiated Close - Client sends back a CLOSE - readyState should be in CLOSED state and wasClean is TRUE - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send("Goodbye");
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send("Goodbye");
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
-            assert_equals(evt.wasClean, true, "wasClean should be TRUE");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(wsocket.readyState, 3, "readyState should be 3(CLOSED)");
+  assert_equals(evt.wasClean, true, "wasClean should be TRUE");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-undefined.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-undefined.any.js
index dc356ab..31b36e4 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-undefined.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Close-undefined.any.js
@@ -1,11 +1,11 @@
 // META: script=websocket.sub.js
 
-        var test = async_test();
+var test = async_test();
 
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', test.step_func(function (evt) {
-            wsocket.close(undefined);
-            test.done();
-        }), true);
+wsocket.addEventListener('open', test.step_func(function(evt) {
+  wsocket.close(undefined);
+  test.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-65K-data.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-65K-data.any.js
index b2cdd338..daa937a 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-65K-data.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-65K-data.any.js
@@ -1,31 +1,31 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send  65K data on a Secure WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send 65K data on a Secure WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send 65K data on a Secure WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send  65K data on a Secure WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send 65K data on a Secure WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send 65K data on a Secure WebSocket - Connection should be closed");
 
-        var data = "";
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "";
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            for (var i = 0; i < 65000; i++) {
-                data = data + "c";
-            }
-            wsocket.send(data);
-            assert_equals(data.length, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  for (var i = 0; i < 65000; i++) {
+    data = data + "c";
+  }
+  wsocket.send(data);
+  assert_equals(data.length, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, data);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, data);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-65K-arraybuffer.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-65K-arraybuffer.any.js
index 92bc2cd..17859e5 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-65K-arraybuffer.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-65K-arraybuffer.any.js
@@ -1,31 +1,31 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send 65K binary data on a Secure WebSocket - ArrayBuffer - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send 65K binary data on a Secure WebSocket - ArrayBuffer - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send 65K binary data on a Secure WebSocket - ArrayBuffer - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send 65K binary data on a Secure WebSocket - ArrayBuffer - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send 65K binary data on a Secure WebSocket - ArrayBuffer - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send 65K binary data on a Secure WebSocket - ArrayBuffer - Connection should be closed");
 
-        var data = "";
-        var datasize = 65000;
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 65000;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            wsocket.send(data);
-            assert_equals(datasize, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  wsocket.send(data);
+  assert_equals(datasize, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data.byteLength, datasize);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data.byteLength, datasize);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybuffer.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybuffer.any.js
index b1a5ca80..6e4c08d 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybuffer.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybuffer.any.js
@@ -1,31 +1,31 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - ArrayBuffer - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - ArrayBuffer - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - ArrayBuffer - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - ArrayBuffer - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - ArrayBuffer - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - ArrayBuffer - Connection should be closed");
 
-        var data = "";
-        var datasize = 15;
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 15;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            wsocket.send(data);
-            assert_equals(datasize, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  wsocket.send(data);
+  assert_equals(datasize, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data.byteLength, datasize);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data.byteLength, datasize);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-float32.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-float32.any.js
index c744e562..9825d34 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-float32.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-float32.any.js
@@ -1,38 +1,38 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float32Array - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float32Array - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float32Array - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float32Array - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float32Array - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float32Array - Connection should be closed");
 
-        var data = "";
-        var datasize = 8;
-        var view;
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 8;
+var view;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            view = new Float32Array(data);
-            for(var i = 0; i < 2; i++) {
-                view[i] = i;
-            }
-            wsocket.send(view);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  view = new Float32Array(data);
+  for (var i = 0; i < 2; i++) {
+    view[i] = i;
+  }
+  wsocket.send(view);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            var resultView = new Float32Array(evt.data);
-            for(var i = 0; i < resultView.length; i++) {
-                assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
-            }
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  var resultView = new Float32Array(evt.data);
+  for (var i = 0; i < resultView.length; i++) {
+    assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
+  }
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-float64.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-float64.any.js
index 9d903733..4dcac40 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-float64.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-float64.any.js
@@ -1,38 +1,38 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float64Array - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float64Array - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float64Array - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float64Array - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float64Array - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Float64Array - Connection should be closed");
 
-        var data = "";
-        var datasize = 8;
-        var view;
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 8;
+var view;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            view = new Float64Array(data);
-            for (var i = 0; i < 1; i++) {
-                view[i] = i;
-            }
-            wsocket.send(view);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  view = new Float64Array(data);
+  for (var i = 0; i < 1; i++) {
+    view[i] = i;
+  }
+  wsocket.send(view);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            var resultView = new Float64Array(evt.data);
-            for(var i = 0; i < resultView.length; i++) {
-                assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
-            }
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  var resultView = new Float64Array(evt.data);
+  for (var i = 0; i < resultView.length; i++) {
+    assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
+  }
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-int32.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-int32.any.js
index 116209c..655af21 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-int32.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-int32.any.js
@@ -1,38 +1,38 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int32Array - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int32Array - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int32Array - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int32Array - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int32Array - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int32Array - Connection should be closed");
 
-        var data = "";
-        var datasize = 8;
-        var view;
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 8;
+var view;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            view = new Int32Array(data);
-            for(var i = 0; i < 2; i++) {
-                view[i] = i;
-            }
-            wsocket.send(view);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  view = new Int32Array(data);
+  for (var i = 0; i < 2; i++) {
+    view[i] = i;
+  }
+  wsocket.send(view);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            var resultView = new Int32Array(evt.data);
-            for(var i = 0; i < resultView.length; i++) {
-                assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
-            }
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  var resultView = new Int32Array(evt.data);
+  for (var i = 0; i < resultView.length; i++) {
+    assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
+  }
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint16-offset-length.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint16-offset-length.any.js
index 6429730..16f050f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint16-offset-length.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint16-offset-length.any.js
@@ -1,38 +1,38 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint16Array with offset and length - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint16Array with offset and length - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint16Array with offset and length - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint16Array with offset and length - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint16Array with offset and length - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint16Array with offset and length - Connection should be closed");
 
-        var data = "";
-        var datasize = 8;
-        var view;
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 8;
+var view;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            view = new Uint16Array(data, 2, 2);
-            for(var i = 0; i < 4; i++) {
-                view[i] = i;
-            }
-            wsocket.send(view);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  view = new Uint16Array(data, 2, 2);
+  for (var i = 0; i < 4; i++) {
+    view[i] = i;
+  }
+  wsocket.send(view);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            var resultView = new Uint16Array(evt.data);
-            for(var i = 0; i < resultView.length; i++) {
-                assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
-            }
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  var resultView = new Uint16Array(evt.data);
+  for (var i = 0; i < resultView.length; i++) {
+    assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
+  }
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint32-offset.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint32-offset.any.js
index 5f988c0..8976b3dc 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint32-offset.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint32-offset.any.js
@@ -1,38 +1,38 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint32Array with offset - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint32Array with offset - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint32Array with offset - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint32Array with offset - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint32Array with offset - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint32Array with offset - Connection should be closed");
 
-        var data = "";
-        var datasize = 8;
-        var view;
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 8;
+var view;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            view = new Uint32Array(data, 0);
-            for(var i = 0; i < 2; i++) {
-                view[i] = i;
-            }
-            wsocket.send(view);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  view = new Uint32Array(data, 0);
+  for (var i = 0; i < 2; i++) {
+    view[i] = i;
+  }
+  wsocket.send(view);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            var resultView = new Uint32Array(evt.data);
-            for(var i = 0; i < resultView.length; i++) {
-                assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
-            }
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  var resultView = new Uint32Array(evt.data);
+  for (var i = 0; i < resultView.length; i++) {
+    assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
+  }
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint8-offset-length.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint8-offset-length.any.js
index 59d292b..9e9d1b5 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint8-offset-length.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint8-offset-length.any.js
@@ -1,38 +1,38 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset and length - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset and length - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset and length - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset and length - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset and length - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset and length - Connection should be closed");
 
-        var data = "";
-        var datasize = 8;
-        var view;
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 8;
+var view;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            view = new Uint8Array(data, 2, 4);
-            for(var i = 0; i < 8; i++) {
-                view[i] = i;
-            }
-            wsocket.send(view);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  view = new Uint8Array(data, 2, 4);
+  for (var i = 0; i < 8; i++) {
+    view[i] = i;
+  }
+  wsocket.send(view);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            var resultView = new Uint8Array(evt.data);
-            for(var i = 0; i < resultView.length; i++) {
-                assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
-            }
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  var resultView = new Uint8Array(evt.data);
+  for (var i = 0; i < resultView.length; i++) {
+    assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
+  }
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint8-offset.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint8-offset.any.js
index 65e6d3c..f563cec 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint8-offset.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-arraybufferview-uint8-offset.any.js
@@ -1,38 +1,38 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Uint8Array with offset - Connection should be closed");
 
-        var data = "";
-        var datasize = 8;
-    var view;
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 8;
+var view;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-        view = new Uint8Array(data, 2);
-        for(var i = 0; i < 8; i++) {
-        view[i] = i;
-        }
-            wsocket.send(view);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  view = new Uint8Array(data, 2);
+  for (var i = 0; i < 8; i++) {
+    view[i] = i;
+  }
+  wsocket.send(view);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            var resultView = new Uint8Array(evt.data);
-        for(var i = 0; i < resultView.length; i++) {
-            assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
-        }
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  var resultView = new Uint8Array(evt.data);
+  for (var i = 0; i < resultView.length; i++) {
+    assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
+  }
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-blob.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-blob.any.js
index f32294ff..8bf0f12e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-blob.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-binary-blob.any.js
@@ -1,34 +1,34 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - Blob - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - Blob - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - Blob - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - Blob - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - Blob - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a Secure WebSocket - Blob - Connection should be closed");
 
-        var data = "";
-        var datasize = 65000;
-        var isOpenCalled = false;
+var data = "";
+var datasize = 65000;
+var isOpenCalled = false;
 
-        var wsocket = CreateWebSocket(true, false, false);
+var wsocket = CreateWebSocket(true, false, false);
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "blob";
-            for (var i = 0; i < datasize; i++)
-                data += String.fromCharCode(0);
-            data = new Blob([data]);
-            isOpenCalled = true;
-            wsocket.send(data);
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "blob";
+  for (var i = 0; i < datasize; i++)
+    data += String.fromCharCode(0);
+  data = new Blob([data]);
+  isOpenCalled = true;
+  wsocket.send(data);
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_true(evt.data instanceof Blob);
-            assert_equals(evt.data.size, datasize);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_true(evt.data instanceof Blob);
+  assert_equals(evt.data.size, datasize);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_true(evt.wasClean, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_true(evt.wasClean, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-data.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-data.any.js
index afd4f198..04c720d 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-data.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-data.any.js
@@ -1,28 +1,28 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send  data on a Secure WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send data on a Secure WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send data on a Secure WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send  data on a Secure WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send data on a Secure WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send data on a Secure WebSocket - Connection should be closed");
 
-        var data = "Message to send";
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "Message to send";
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            assert_equals(data.length, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  assert_equals(data.length, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, data);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, data);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-null.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-null.any.js
index b10b3d9..7c374c2 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-null.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-null.any.js
@@ -1,30 +1,30 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send null data on a Secure WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send null data on a Secure WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send null data on a Secure WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send null data on a Secure WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send null data on a Secure WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send null data on a Secure WebSocket - Connection should be closed");
 
-        var data = null;
-        var nullReturned = false;
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = null;
+var nullReturned = false;
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            if ("null" == evt.data || "" == evt.data)
-                nullReturned = true;
-            assert_true(nullReturned);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  if ("null" == evt.data || "" == evt.data)
+    nullReturned = true;
+  assert_true(nullReturned);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-paired-surrogates.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-paired-surrogates.any.js
index 473685a..073f064 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-paired-surrogates.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-paired-surrogates.any.js
@@ -1,28 +1,28 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send paired surrogates data on a Secure WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send paired surrogates data on a Secure WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send paired surrogates data on a Secure WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send paired surrogates data on a Secure WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send paired surrogates data on a Secure WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send paired surrogates data on a Secure WebSocket - Connection should be closed");
 
-        var data = "\uD801\uDC07";
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "\uD801\uDC07";
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            assert_equals(data.length * 2, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  assert_equals(data.length * 2, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, data);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, data);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-unicode-data.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-unicode-data.any.js
index da28ebb6..a3518c1 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-unicode-data.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-unicode-data.any.js
@@ -1,28 +1,28 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send  unicode data on a Secure WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send unicode data on a Secure WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send unicode data on a Secure WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send  unicode data on a Secure WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send unicode data on a Secure WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send unicode data on a Secure WebSocket - Connection should be closed");
 
-        var data = "¥¥¥¥¥¥";
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "¥¥¥¥¥¥";
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            assert_equals(data.length * 2, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  assert_equals(data.length * 2, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, data);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, data);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-unpaired-surrogates.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-unpaired-surrogates.any.js
index 618fb98e..83f3e7b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-unpaired-surrogates.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Secure-Send-unpaired-surrogates.any.js
@@ -1,28 +1,28 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send unpaired surrogates on a Secure WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send unpaired surrogates on a Secure WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send unpaired surrogates on a Secure WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send unpaired surrogates on a Secure WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send unpaired surrogates on a Secure WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send unpaired surrogates on a Secure WebSocket - Connection should be closed");
 
-        var data = "\uD807";
-        var replacementChar = "\uFFFD";
-        var wsocket = CreateWebSocket(true, false, false);
-        var isOpenCalled = false;
+var data = "\uD807";
+var replacementChar = "\uFFFD";
+var wsocket = CreateWebSocket(true, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, replacementChar);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, replacementChar);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-0byte-data.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-0byte-data.any.js
index 92949021..131a19d7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-0byte-data.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-0byte-data.any.js
@@ -1,28 +1,28 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send 0 byte data on a WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send 0 byte data on a WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send 0 byte data on a WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send 0 byte data on a WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send 0 byte data on a WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send 0 byte data on a WebSocket - Connection should be closed");
 
-        var data = "";
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "";
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            assert_equals(data.length, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  assert_equals(data.length, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, data);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, data);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-65K-data.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-65K-data.any.js
index e042e96..172e6ee 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-65K-data.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-65K-data.any.js
@@ -1,31 +1,31 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send 65K data on a WebSocket -  Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send 65K data on a WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send 65K data on a WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send 65K data on a WebSocket -  Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send 65K data on a WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send 65K data on a WebSocket - Connection should be closed");
 
-        var data = "";
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "";
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            for (var i = 0; i < 65000; i++) {
-                data = data + "c";
-            }
-            wsocket.send(data);
-            assert_equals(data.length, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  for (var i = 0; i < 65000; i++) {
+    data = data + "c";
+  }
+  wsocket.send(data);
+  assert_equals(data.length, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, data);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, data);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-Unpaired-Surrogates.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-Unpaired-Surrogates.any.js
index fc23693..65bb2b1 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-Unpaired-Surrogates.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-Unpaired-Surrogates.any.js
@@ -1,28 +1,28 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send unpaired surrogates on a WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send unpaired surrogates on a WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send unpaired surrogates on a WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send unpaired surrogates on a WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send unpaired surrogates on a WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send unpaired surrogates on a WebSocket - Connection should be closed");
 
-        var data = "\uD807";
-        var replacementChar = "\uFFFD";
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "\uD807";
+var replacementChar = "\uFFFD";
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, replacementChar);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, replacementChar);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-before-open.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-before-open.any.js
index 14c03e94..101a1a2 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-before-open.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-before-open.any.js
@@ -1,6 +1,8 @@
 // META: script=websocket.sub.js
 
-        test(function () {
-            var wsocket = CreateWebSocket(false, false, false);
-            assert_throws("INVALID_STATE_ERR", function () { wsocket.send("Message to send") });
-        }, "W3C WebSocket API - Send data on a WebSocket before connection is opened - INVALID_STATE_ERR is returned")
+test(function() {
+  var wsocket = CreateWebSocket(false, false, false);
+  assert_throws("INVALID_STATE_ERR", function() {
+    wsocket.send("Message to send")
+  });
+}, "W3C WebSocket API - Send data on a WebSocket before connection is opened - INVALID_STATE_ERR is returned")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-65K-arraybuffer.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-65K-arraybuffer.any.js
index fcea1851..f446a25 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-65K-arraybuffer.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-65K-arraybuffer.any.js
@@ -1,31 +1,31 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send 65K binary data on a WebSocket - ArrayBuffer - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send 65K binary data on a WebSocket - ArrayBuffer - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send 65K binary data on a WebSocket - ArrayBuffer - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send 65K binary data on a WebSocket - ArrayBuffer - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send 65K binary data on a WebSocket - ArrayBuffer - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send 65K binary data on a WebSocket - ArrayBuffer - Connection should be closed");
 
-        var data = "";
-        var datasize = 65000;
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 65000;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            wsocket.send(data);
-            assert_equals(datasize, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  wsocket.send(data);
+  assert_equals(datasize, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data.byteLength, datasize);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data.byteLength, datasize);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybuffer.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybuffer.any.js
index 543bc09..6205143 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybuffer.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybuffer.any.js
@@ -1,31 +1,31 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBuffer - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBuffer - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBuffer - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBuffer - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBuffer - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBuffer - Connection should be closed");
 
-        var data = "";
-        var datasize = 15;
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 15;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            wsocket.send(data);
-            assert_equals(datasize, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  wsocket.send(data);
+  assert_equals(datasize, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data.byteLength, datasize);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data.byteLength, datasize);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.js
index 07c0ff2..7022668 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.js
@@ -1,38 +1,38 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int16Array with offset - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int16Array with offset - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int16Array with offset - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int16Array with offset - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int16Array with offset - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int16Array with offset - Connection should be closed");
 
-        var data = "";
-        var datasize = 8;
-        var view;
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 8;
+var view;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            view = new Int16Array(data, 2);
-            for(var i = 0; i < 4; i++) {
-                view[i] = i;
-            }
-            wsocket.send(view);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  view = new Int16Array(data, 2);
+  for (var i = 0; i < 4; i++) {
+    view[i] = i;
+  }
+  wsocket.send(view);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            var resultView = new Int16Array(evt.data);
-            for(var i = 0; i < resultView.length; i++) {
-                assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
-            }
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  var resultView = new Int16Array(evt.data);
+  for (var i = 0; i < resultView.length; i++) {
+    assert_equals(resultView[i], view[i], "ArrayBufferView returned is the same");
+  }
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybufferview-int8.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybufferview-int8.any.js
index 1bad2c6..242c8c6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybufferview-int8.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-arraybufferview-int8.any.js
@@ -1,38 +1,38 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int8Array - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int8Array - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int8Array - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int8Array - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int8Array - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - ArrayBufferView - Int8Array - Connection should be closed");
 
-        var data = "";
-        var datasize = 8;
-        var int8View;
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "";
+var datasize = 8;
+var int8View;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "arraybuffer";
-            data = new ArrayBuffer(datasize);
-            int8View = new Int8Array(data);
-            for (var i = 0; i < 8; i++) {
-                int8View[i] = i;
-            }
-            wsocket.send(int8View);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "arraybuffer";
+  data = new ArrayBuffer(datasize);
+  int8View = new Int8Array(data);
+  for (var i = 0; i < 8; i++) {
+    int8View[i] = i;
+  }
+  wsocket.send(int8View);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            var resultView = new Int8Array(evt.data);
-            for (var i = 0; i < resultView.length; i++) {
-                assert_equals(resultView[i], int8View[i], "ArrayBufferView returned is the same");
-            }
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  var resultView = new Int8Array(evt.data);
+  for (var i = 0; i < resultView.length; i++) {
+    assert_equals(resultView[i], int8View[i], "ArrayBufferView returned is the same");
+  }
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-blob.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-blob.any.js
index a5f39ee..ee6486e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-blob.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-binary-blob.any.js
@@ -1,34 +1,34 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - Blob - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - Blob - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - Blob - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send binary data on a WebSocket - Blob - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send binary data on a WebSocket - Blob - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send binary data on a WebSocket - Blob - Connection should be closed");
 
-        var data = "";
-        var datasize = 65000;
-        var isOpenCalled = false;
+var data = "";
+var datasize = 65000;
+var isOpenCalled = false;
 
-        var wsocket = CreateWebSocket(false, false, false);
+var wsocket = CreateWebSocket(false, false, false);
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.binaryType = "blob";
-            for (var i = 0; i < datasize; i++)
-                data += String.fromCharCode(0);
-            data = new Blob([data]);
-            isOpenCalled = true;
-            wsocket.send(data);
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.binaryType = "blob";
+  for (var i = 0; i < datasize; i++)
+    data += String.fromCharCode(0);
+  data = new Blob([data]);
+  isOpenCalled = true;
+  wsocket.send(data);
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_true(evt.data instanceof Blob);
-            assert_equals(evt.data.size, datasize);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_true(evt.data instanceof Blob);
+  assert_equals(evt.data.size, datasize);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_true(evt.wasClean, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_true(evt.wasClean, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-data.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-data.any.js
index 53f4bd85..487393b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-data.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-data.any.js
@@ -1,28 +1,28 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send data on a WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send data on a WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send data on a WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send data on a WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send data on a WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send data on a WebSocket - Connection should be closed");
 
-        var data = "Message to send";
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "Message to send";
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            assert_equals(data.length, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  assert_equals(data.length, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, data);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, data);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-null.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-null.any.js
index 25b5307c..8d8d6b7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-null.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-null.any.js
@@ -1,30 +1,30 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send null data on a WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send null data on a WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send null data on a WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send null data on a WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send null data on a WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send null data on a WebSocket - Connection should be closed");
 
-        var data = null;
-        var nullReturned = false;
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = null;
+var nullReturned = false;
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            if ("null" == evt.data || "" == evt.data)
-                nullReturned = true;
-            assert_true(nullReturned);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  if ("null" == evt.data || "" == evt.data)
+    nullReturned = true;
+  assert_true(nullReturned);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-paired-surrogates.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-paired-surrogates.any.js
index 94889ce..f12b001 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-paired-surrogates.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-paired-surrogates.any.js
@@ -1,28 +1,28 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send (paired surrogates) data on a WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send (paired surrogates) data on a WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send (paired surrogates) data on a WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send (paired surrogates) data on a WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send (paired surrogates) data on a WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send (paired surrogates) data on a WebSocket - Connection should be closed");
 
-        var data = "\uD801\uDC07";
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "\uD801\uDC07";
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            assert_equals(data.length * 2, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  assert_equals(data.length * 2, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, data);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, data);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-unicode-data.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-unicode-data.any.js
index 9265ac8..ce2b9a0e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-unicode-data.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/Send-unicode-data.any.js
@@ -1,28 +1,28 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Send unicode data on a WebSocket - Connection should be opened");
-        var testMessage = async_test("W3C WebSocket API - Send unicode data on a WebSocket - Message should be received");
-        var testClose = async_test("W3C WebSocket API - Send unicode data on a WebSocket - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Send unicode data on a WebSocket - Connection should be opened");
+var testMessage = async_test("W3C WebSocket API - Send unicode data on a WebSocket - Message should be received");
+var testClose = async_test("W3C WebSocket API - Send unicode data on a WebSocket - Connection should be closed");
 
-        var data = "¥¥¥¥¥¥";
-        var wsocket = CreateWebSocket(false, false, false);
-        var isOpenCalled = false;
+var data = "¥¥¥¥¥¥";
+var wsocket = CreateWebSocket(false, false, false);
+var isOpenCalled = false;
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            wsocket.send(data);
-            assert_equals(data.length * 2, wsocket.bufferedAmount);
-            isOpenCalled = true;
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  wsocket.send(data);
+  assert_equals(data.length * 2, wsocket.bufferedAmount);
+  isOpenCalled = true;
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('message', testMessage.step_func(function (evt) {
-            assert_equals(evt.data, data);
-            wsocket.close();
-            testMessage.done();
-        }), true);
+wsocket.addEventListener('message', testMessage.step_func(function(evt) {
+  assert_equals(evt.data, data);
+  wsocket.close();
+  testMessage.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(isOpenCalled, "WebSocket connection should be open");
-            assert_equals(evt.wasClean, true, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(isOpenCalled, "WebSocket connection should be open");
+  assert_equals(evt.wasClean, true, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/binaryType-wrong-value.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/binaryType-wrong-value.any.js
index 22e6d04..6030608 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/binaryType-wrong-value.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/binaryType-wrong-value.any.js
@@ -1,19 +1,19 @@
 // META: script=websocket.sub.js
 
-        var testOpen = async_test("W3C WebSocket API - Create WebSocket - set binaryType to something other than blob or arraybuffer - SYNTAX_ERR is returned - Connection should be opened");
-        var testClose = async_test("W3C WebSocket API - Create WebSocket - set binaryType to something other than blob or arraybuffer - SYNTAX_ERR is returned - Connection should be closed");
+var testOpen = async_test("W3C WebSocket API - Create WebSocket - set binaryType to something other than blob or arraybuffer - SYNTAX_ERR is returned - Connection should be opened");
+var testClose = async_test("W3C WebSocket API - Create WebSocket - set binaryType to something other than blob or arraybuffer - SYNTAX_ERR is returned - Connection should be closed");
 
-        var wsocket = CreateWebSocket(true, false, false);
+var wsocket = CreateWebSocket(true, false, false);
 
-        wsocket.addEventListener('open', testOpen.step_func(function (evt) {
-            assert_equals(wsocket.binaryType, "blob");
-            wsocket.binaryType = "notBlobOrArrayBuffer";
-            assert_equals(wsocket.binaryType, "blob");
-            wsocket.close();
-            testOpen.done();
-        }), true);
+wsocket.addEventListener('open', testOpen.step_func(function(evt) {
+  assert_equals(wsocket.binaryType, "blob");
+  wsocket.binaryType = "notBlobOrArrayBuffer";
+  assert_equals(wsocket.binaryType, "blob");
+  wsocket.close();
+  testOpen.done();
+}), true);
 
-        wsocket.addEventListener('close', testClose.step_func(function (evt) {
-            assert_true(evt.wasClean, "wasClean should be true");
-            testClose.done();
-        }), true);
+wsocket.addEventListener('close', testClose.step_func(function(evt) {
+  assert_true(evt.wasClean, "wasClean should be true");
+  testClose.done();
+}), true);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/close-invalid.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/close-invalid.any.js
index a930495..8ac1da3f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/close-invalid.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/close-invalid.any.js
@@ -1,20 +1,20 @@
 // META: script=websocket.sub.js
 
 [
-    [0, "0"],
-    [500, "500"],
-    [NaN, "NaN"],
-    ["string", "String"],
-    [null, "null"],
-    [0x10000 + 1000, "2**16+1000"],
+  [0, "0"],
+  [500, "500"],
+  [NaN, "NaN"],
+  ["string", "String"],
+  [null, "null"],
+  [0x10000 + 1000, "2**16+1000"],
 ].forEach(function(t) {
-    [true, false].forEach(function(secure) {
-        test(function() {
-            var ws = CreateWebSocket(secure, false, false);
-            assert_throws("InvalidAccessError", function () {
-                ws.close(t[0]);
-            });
-            wsocket.onerror = this.unreached_func();
-        }, t[1] + " on a " + (secure ? "secure" : "insecure") + " websocket");
-    });
+  [true, false].forEach(function(secure) {
+    test(function() {
+      var ws = CreateWebSocket(secure, false, false);
+      assert_throws("InvalidAccessError", function() {
+        ws.close(t[0]);
+      });
+      wsocket.onerror = this.unreached_func();
+    }, t[1] + " on a " + (secure ? "secure" : "insecure") + " websocket");
+  });
 });
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/constructor.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/constructor.any.js
index 60f5335..0605d5e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/constructor.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/constructor.any.js
@@ -2,6 +2,6 @@
 
 test(function() {
   var ws = new WebSocket("ws://" + __SERVER__NAME + ":" + __PORT + "/" + __PATH,
-                         "echo", "Stray argument")
+    "echo", "Stray argument")
   assert_true(ws instanceof WebSocket, "Expected a WebSocket instance.")
 }, "Calling the WebSocket constructor with too many arguments should not throw.")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/eventhandlers.any.js b/third_party/WebKit/LayoutTests/external/wpt/websockets/eventhandlers.any.js
index f97c668a..b30b0b6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/eventhandlers.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/eventhandlers.any.js
@@ -3,7 +3,7 @@
 function testEventHandler(name) {
   test(function() {
     var ws = new WebSocket("ws://" + __SERVER__NAME + ":" + __PORT + "/" + __PATH,
-                           "echo")
+      "echo")
     assert_equals(ws["on" + name], null);
     ws["on" + name] = function() {};
     ws["on" + name] = 2;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.js b/third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.any.js
similarity index 88%
rename from third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.js
rename to third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.any.js
index 26d3f57..42a1bce0e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.any.js
@@ -1,4 +1,4 @@
-var test = async_test()
+var test = async_test("XMLHttpRequest: abort() during OPEN");
 test.step(function() {
   var client = new XMLHttpRequest()
   client.open("GET", "...")
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.htm b/third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.htm
deleted file mode 100644
index dde94f2..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.htm
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html>
-<html>
-  <head>
-    <title>XMLHttpRequest: abort() during OPEN</title>
-    <script src="/resources/testharness.js"></script>
-    <script src="/resources/testharnessreport.js"></script>
-    <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" />
-    <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[1]" />
-  </head>
-  <body>
-    <div id="log"></div>
-    <script src="abort-during-open.js"></script>
-  </body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.worker.js b/third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.worker.js
deleted file mode 100644
index ffb687d0..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/xhr/abort-during-open.worker.js
+++ /dev/null
@@ -1,3 +0,0 @@
-importScripts("/resources/testharness.js");
-importScripts("abort-during-open.js");
-done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.js b/third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.any.js
similarity index 84%
rename from third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.js
rename to third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.any.js
index 2e7fe865..2bfe404 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.any.js
@@ -4,4 +4,4 @@
   client.send(null)
   assert_throws("InvalidStateError", function() { client.send(null) })
   client.abort()
-})
+}, "XMLHttpRequest: send() - send()");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.htm b/third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.htm
deleted file mode 100644
index cbcbdb4..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.htm
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html>
-<html>
-  <head>
-    <title>XMLHttpRequest: send() - send()</title>
-    <script src="/resources/testharness.js"></script>
-    <script src="/resources/testharnessreport.js"></script>
-    <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol/li[2]" />
-  </head>
-  <body>
-    <div id="log"></div>
-    <script src="send-send.js"></script>
-  </body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.worker.js b/third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.worker.js
deleted file mode 100644
index 9d34ce6..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/xhr/send-send.worker.js
+++ /dev/null
@@ -1,3 +0,0 @@
-importScripts("/resources/testharness.js");
-importScripts("send-send.js");
-done();
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-transformclip-expected.png b/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-transformclip-expected.png
index 71396432..c841985 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-transformclip-expected.png
+++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-transformclip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/css/invalidation/is.html b/third_party/WebKit/LayoutTests/fast/css/invalidation/is.html
new file mode 100644
index 0000000..b202155
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/css/invalidation/is.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <!-- Move to external/wpt/css/selectors/invalidation once the selector name is resolved. -->
+    <title>CSS Selectors Invalidation: :is()</title>
+    <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com">
+    <link rel="help" href="https://drafts.csswg.org/selectors-4/#zero-matches">
+    <meta name="assert" content="This tests that the :is() selector is effective">
+    <script src="../../../resources/testharness.js"></script>
+    <script src="../../../resources/testharnessreport.js"></script>
+    <style>
+      .b {
+        color: yellow;
+      }
+      /*Simple selector arguments */
+      :is(.b, .c) {
+        color: red;
+      }
+      /*Compound selector arguments */
+      .a~:is(.c#d, .e) {
+        color: green;
+      }
+      /* Complex selector arguments */
+      .h {
+        color: red;
+      }
+      :is(.a~.h, .a~.h+.f) {
+        color: yellow;
+      }
+      /* Nested */
+      :is(.a>:is(.g+.h, .b)~.i) {
+        color: blue;
+      }
+      :is(:matches(.a~.h)) {
+        color: yellow;
+      }
+    </style>
+  </head>
+  <body>
+    <div id="a1">
+      <div class="g">
+      </div>
+      <div class="h">
+      </div>
+      <div class="i" id="i1">
+        Blue
+      </div>
+    </div>
+    <div class="b" id="b1">
+      Yellow
+    </div>
+    <div class="c" id="c1">
+      Red
+    </div>
+    <div class="c" id="d">
+      Green
+    </div>
+    <div class="h" id="h1">
+      Red
+    </div>
+    <div class="f" id="f1">
+      Yellow
+    </div>
+    <script>
+      document.body.offsetTop;
+
+      var black = "rgb(0, 0, 0)";
+      var green = "rgb(0, 128, 0)";
+      var red = "rgb(255, 0, 0)";
+      var yellow = "rgb(255, 255, 0)";
+      var blue = "rgb(0, 0, 255)";
+
+      test(() => {
+        assert_equals(getComputedStyle(b1).color, yellow);
+        assert_equals(getComputedStyle(c1).color, red);
+        assert_equals(getComputedStyle(d).color, red);
+        assert_equals(getComputedStyle(h1).color, red);
+        assert_equals(getComputedStyle(f1).color, black);
+        assert_equals(getComputedStyle(i1).color, black);
+      }, "Preconditions.");
+
+      test(() => {
+        a1.className = "a";
+        assert_equals(getComputedStyle(b1).color, yellow);
+        assert_equals(getComputedStyle(c1).color, red);
+      }, "Invalidate :is() for simple selector arguments.");
+
+      test(() => {
+        a1.className = "a";
+        assert_equals(getComputedStyle(d).color, green);
+      }, "Invalidate :is() for compound selector arguments.");
+
+      test(() => {
+        a1.className = "a";
+        assert_equals(getComputedStyle(h1).color, red);
+        assert_equals(getComputedStyle(f1).color, yellow);
+      }, "Invalidate :is() for complex selector arguments.");
+
+      test(() => {
+        a1.className = "a";
+        assert_equals(getComputedStyle(i1).color, blue);
+      }, "Invalidate nested :is().");
+
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/fast/scrolling/detach-during-scroll-to-fragment-doesnt-crash.html b/third_party/WebKit/LayoutTests/fast/scrolling/detach-during-scroll-to-fragment-doesnt-crash.html
new file mode 100644
index 0000000..2f48f07
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/scrolling/detach-during-scroll-to-fragment-doesnt-crash.html
@@ -0,0 +1,24 @@
+<!DOCTYPE>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<body>
+  <script>
+    test( () => {
+      const iframe = document.createElement('iframe')
+      document.body.appendChild(iframe);
+
+      const button = document.createElement('button');
+      iframe.contentDocument.body.appendChild(button);
+      button.id = 'button';
+      button.onfocus = () => {
+        // This will detach the iframe's document from its frame before
+        // reattaching to the DOM and creating a new document. Ensure nothing
+        // touches the cleared frame.
+        document.body.appendChild(iframe);
+      };
+
+      // Cause the button to be focused and scrolled into view.
+      iframe.contentWindow.location.hash = 'button';
+    }, "Detaching document during scroll to fragment doesn't crash");
+  </script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/media/picture-in-picture/clear-player-during-pip.html b/third_party/WebKit/LayoutTests/media/picture-in-picture/clear-player-during-pip.html
new file mode 100644
index 0000000..ce273cbb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/media/picture-in-picture/clear-player-during-pip.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>No crash when resetting player during PIP</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<video></video>
+<script>
+async_test(t => {
+  if (!document.pictureInPictureEnabled)
+    t.done();
+
+  const video = document.querySelector('video');
+  video.src = '../content/test.ogv';
+
+  video.addEventListener('click', t.step_func(() => {
+    video.requestPictureInPicture().then(t.step_func_done(() => {
+      video.src = '';
+      // Do not crash.
+    }));
+  }), { once: true });
+
+  video.play().then(t.step_func(() => {
+    const bounds = video.getBoundingClientRect();
+
+    chrome.gpuBenchmarking.pointerActionSequence([{
+      source: 'mouse',
+      actions: [
+        { name: 'pointerDown',
+          x: bounds.left + bounds.width / 2,
+          y: bounds.top + bounds.height / 2
+        },
+        { name: 'pointerUp' }
+      ]
+    }]);
+  }));
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/rootscroller/gesture-scroll-document-not-root-scroller.html b/third_party/WebKit/LayoutTests/rootscroller/gesture-scroll-document-not-root-scroller.html
index 84b7e63a..59adca455 100644
--- a/third_party/WebKit/LayoutTests/rootscroller/gesture-scroll-document-not-root-scroller.html
+++ b/third_party/WebKit/LayoutTests/rootscroller/gesture-scroll-document-not-root-scroller.html
@@ -65,7 +65,7 @@
     });
   }
 
-  function waitForScrollAndCheck() {
+  function waitForScroll() {
     const MAX_FRAME = 500;
     return new Promise((resolve, reject) => {
       function tick(frames) {
@@ -80,26 +80,28 @@
     });
   }
 
-  window.onload = function() {
+  // Do a rAF before actually starting the test to ensure we leave enough time
+  // to commit layers to the compositor before we start scrolling.
+  window.onload = function() { requestAnimationFrame(() => {
     var rootscroller = document.querySelector('#rootscroller');
     document.rootScroller = rootscroller;
 
     promise_test( t => {
       const GESTURE_SOURCE_TYPE = 2; // MOUSE_INPUT from synthetic_gesture_params.h
       return scrollDown(500, 100, 100, GESTURE_SOURCE_TYPE, 1000)
-          .then(waitForScrollAndCheck)
-          .then(() => {
-            if (window.internals) {
-              assert_equals(window.internals.effectiveRootScroller(document),
-                            rootscroller,
-                            "Failed to set root scroller");
-            }
+        .then(waitForScroll)
+        .then(() => {
+          if (window.internals) {
+            assert_equals(window.internals.effectiveRootScroller(document),
+                          rootscroller,
+                          "Failed to set root scroller");
+          }
 
-            assert_greater_than(
-                document.scrollingElement.scrollTop, 0, "Document must be scrolled");
-            assert_equals(
-                rootscroller.scrollTop, 0, "RootScroller must not be scrolled");
-          });
+          assert_greater_than(
+              document.scrollingElement.scrollTop, 0, "Document must be scrolled");
+          assert_equals(
+              rootscroller.scrollTop, 0, "RootScroller must not be scrolled");
+        });
     }, "Gesture scrolling should scroll document.");
-  }
+  });}
 </script>
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-keyframes-expected.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-keyframes-expected.html
new file mode 100644
index 0000000..0712e04
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-keyframes-expected.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<style>
+.box {
+  width: 100px;
+  height: 100px;
+  transform: translateX(100px);
+  background-color: #00ff00;
+  opacity: 0.8;
+  will-change: transform;
+}
+</style>
+
+<div class="box"></div>
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-keyframes.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-keyframes.html
new file mode 100644
index 0000000..b14abf6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-keyframes.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<style>
+#box {
+  width: 100px;
+  height: 100px;
+  background-color: #00ff00;
+}
+</style>
+
+<div id="box"></div>
+
+<script id="visual_update"  type="text/worklet">
+registerAnimator("test_animator", class {
+  animate(currentTime, effect) {
+    effect.localTime = 500;
+  }
+});
+</script>
+
+<script src="resources/animation-worklet-tests.js"></script>
+<script>
+if (window.testRunner) {
+  testRunner.waitUntilDone();
+}
+
+runInAnimationWorklet(
+  document.getElementById('visual_update').textContent
+).then(()=>{
+  const keyframes_before = [
+    { transform: 'translateY(0)' },
+    { transform: 'translateY(200px)' }
+  ];
+  const keyframes_after = [
+    { transform: 'translateX(0)' },
+    { transform: 'translateX(200px)' }
+  ];
+
+  const box = document.getElementById('box');
+  const effect = new KeyframeEffect(box, keyframes_before, {duration: 1000});
+  const animation = new WorkletAnimation('test_animator', effect, document.timeline, {});
+  animation.play();
+
+  waitTwoAnimationFrames(_ => {
+    effect.setKeyframes(keyframes_after);
+    waitTwoAnimationFrames(_ => {
+      // TODO(crbug.com/829926): The same issue that is affecting
+      // worklet-animation-cancel test is at play here. Change opacity to force
+      // a new animation frame and commit to get updated result.
+      box.style.opacity = 0.8;
+      waitTwoAnimationFrames(_ => {
+        if (window.testRunner)
+          testRunner.notifyDone();
+       });
+     });
+  });
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-timing-expected.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-timing-expected.html
new file mode 100644
index 0000000..478d791
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-timing-expected.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<style>
+.box {
+  width: 100px;
+  height: 100px;
+  transform: translateX(50px);
+  opacity: 0.8;
+  background-color: #00ff00;
+  will-change: transform;
+}
+</style>
+
+<div class="box"></div>
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-timing.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-timing.html
new file mode 100644
index 0000000..5bf8b9a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/animationworklet/worklet-animation-set-timing.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<style>
+#box {
+  width: 100px;
+  height: 100px;
+  background-color: #00ff00;
+}
+</style>
+
+<div id="box"></div>
+
+<script id="visual_update"  type="text/worklet">
+registerAnimator("test_animator", class {
+  animate(currentTime, effect) {
+    effect.localTime = 500;
+  }
+});
+</script>
+
+<script src="resources/animation-worklet-tests.js"></script>
+<script>
+if (window.testRunner)
+  testRunner.waitUntilDone();
+
+runInAnimationWorklet(
+  document.getElementById('visual_update').textContent
+).then(()=>{
+  console.log('aw');
+  const keyframes = [
+    { transform: 'translateX(0)' },
+    { transform: 'translateX(200px)' }
+  ];
+
+  const options_before = {
+    duration: 1000
+  };
+
+  const options_after = {
+    duration: 2000
+  };
+
+  const box = document.getElementById('box');
+  const effect = new KeyframeEffect(box, keyframes, options_before);
+  const animation = new WorkletAnimation('test_animator', effect, document.timeline, {});
+  animation.play();
+
+  waitTwoAnimationFrames(_ => {
+    effect.updateTiming(options_after);
+    waitTwoAnimationFrames(_ => {
+      box.style.opacity = 0.8;
+      // TODO(crbug.com/829926): The same issue that is affecting
+      // worklet-animation-cancel is at play here. Change opacity to force a
+      // new animation frame and commit to get updated result.
+      waitTwoAnimationFrames(_ => {
+        if (window.testRunner)
+          testRunner.notifyDone();
+      });
+    });
+  });
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/webaudio/AudioParam/worklet-warnings-expected.txt b/third_party/WebKit/LayoutTests/webaudio/AudioParam/worklet-warnings-expected.txt
index 43304ef..ffb2e87 100644
--- a/third_party/WebKit/LayoutTests/webaudio/AudioParam/worklet-warnings-expected.txt
+++ b/third_party/WebKit/LayoutTests/webaudio/AudioParam/worklet-warnings-expected.txt
@@ -1,7 +1,7 @@
-CONSOLE WARNING: line 39: AudioWorklet("noise-generator").amplitude.value 99 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 39: AudioWorklet("noise-generator").amplitude.setValueAtTime value 99 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 43: AudioWorklet("noise-generator").amplitude.setValueAtTime value -1 outside nominal range [0, 1]; value will be clamped.
-CONSOLE WARNING: line 44: AudioWorklet("noise-generator").amplitude.linearRampToValueAtTime value 5 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 39: AudioWorkletNode("noise-generator").amplitude.value 99 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 39: AudioWorkletNode("noise-generator").amplitude.setValueAtTime value 99 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 43: AudioWorkletNode("noise-generator").amplitude.setValueAtTime value -1 outside nominal range [0, 1]; value will be clamped.
+CONSOLE WARNING: line 44: AudioWorkletNode("noise-generator").amplitude.linearRampToValueAtTime value 5 outside nominal range [0, 1]; value will be clamped.
 This is a testharness.js-based test.
 PASS # AUDIT TASK RUNNER STARTED.
 PASS > [AudioWorklet AudioParam] Generate warnings if outside nominal range
diff --git a/third_party/blink/public/platform/web_feature.mojom b/third_party/blink/public/platform/web_feature.mojom
index 761a511b..4a400d6 100644
--- a/third_party/blink/public/platform/web_feature.mojom
+++ b/third_party/blink/public/platform/web_feature.mojom
@@ -1910,6 +1910,7 @@
   kShapeOutsideMarginBox = 2428,
   kPerformanceTimeline = 2429,
   kUserTiming = 2430,
+  kCSSSelectorPseudoIS = 2431,
 
   // Add new features immediately above this line. Don't change assigned
   // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/renderer/core/animation/worklet_animation_base.h b/third_party/blink/renderer/core/animation/worklet_animation_base.h
index b68ee07..5b1c504b 100644
--- a/third_party/blink/renderer/core/animation/worklet_animation_base.h
+++ b/third_party/blink/renderer/core/animation/worklet_animation_base.h
@@ -21,14 +21,12 @@
   // Asks the animation to update its effect inherited time.
   virtual void Update(TimingUpdateReason) = 0;
 
-  // Attempts to start the animation on the compositor side, returning true if
-  // it succeeds or false otherwise. If false is returned and failure_message
-  // was non-null, failure_message may be filled with an error description.
+  // Updates the animation on the compositor side to reflect the main thread
+  // state.
   //
-  // On a false return it may still be possible to start the animation on the
-  // compositor later (e.g. if an incompatible property is removed from the
-  // element), so the caller should try again next main frame.
-  virtual bool StartOnCompositor(String* failure_message) = 0;
+  // Returns true if animation is started on compositor and should now start
+  // receiving timing update requests.
+  virtual bool UpdateCompositingState() = 0;
 
   virtual Document* GetDocument() const = 0;
   virtual KeyframeEffect* GetEffect() const = 0;
diff --git a/third_party/blink/renderer/core/animation/worklet_animation_controller.cc b/third_party/blink/renderer/core/animation/worklet_animation_controller.cc
index a40f1ec..39553dd 100644
--- a/third_party/blink/renderer/core/animation/worklet_animation_controller.cc
+++ b/third_party/blink/renderer/core/animation/worklet_animation_controller.cc
@@ -7,7 +7,6 @@
 #include "third_party/blink/renderer/core/animation/worklet_animation_base.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
-#include "third_party/blink/renderer/core/inspector/console_message.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
@@ -32,14 +31,16 @@
 void WorkletAnimationController::DetachAnimation(
     WorkletAnimationBase& animation) {
   DCHECK(IsMainThread());
-  DCHECK(pending_animations_.Contains(&animation) !=
-         compositor_animations_.Contains(&animation));
-  // If detached animation is in pending list, it has not been started on the
-  // compositor yet so it just needs to be removed from pending list.
-  if (pending_animations_.Contains(&animation))
-    pending_animations_.erase(&animation);
-  else
-    compositor_animations_.erase(&animation);
+  pending_animations_.erase(&animation);
+  compositor_animations_.erase(&animation);
+}
+
+void WorkletAnimationController::InvalidateAnimation(
+    WorkletAnimationBase& animation) {
+  DCHECK(IsMainThread());
+  pending_animations_.insert(&animation);
+  if (LocalFrameView* view = animation.GetDocument()->View())
+    view->ScheduleAnimation();
 }
 
 void WorkletAnimationController::UpdateAnimationCompositingStates() {
@@ -47,12 +48,8 @@
   HeapHashSet<Member<WorkletAnimationBase>> animations;
   animations.swap(pending_animations_);
   for (const auto& animation : animations) {
-    String failure_message;
-    if (animation->StartOnCompositor(&failure_message)) {
+    if (animation->UpdateCompositingState()) {
       compositor_animations_.insert(animation);
-    } else {
-      document_->AddConsoleMessage(ConsoleMessage::Create(
-          kOtherMessageSource, kWarningMessageLevel, failure_message));
     }
   }
 }
diff --git a/third_party/blink/renderer/core/animation/worklet_animation_controller.h b/third_party/blink/renderer/core/animation/worklet_animation_controller.h
index 6d2d102..2aff829 100644
--- a/third_party/blink/renderer/core/animation/worklet_animation_controller.h
+++ b/third_party/blink/renderer/core/animation/worklet_animation_controller.h
@@ -34,6 +34,7 @@
 
   void AttachAnimation(WorkletAnimationBase&);
   void DetachAnimation(WorkletAnimationBase&);
+  void InvalidateAnimation(WorkletAnimationBase&);
 
   void UpdateAnimationCompositingStates();
   void UpdateAnimationTimings(TimingUpdateReason);
diff --git a/third_party/blink/renderer/core/css/css_selector.cc b/third_party/blink/renderer/core/css/css_selector.cc
index c220c622..5bcbcbd 100644
--- a/third_party/blink/renderer/core/css/css_selector.cc
+++ b/third_party/blink/renderer/core/css/css_selector.cc
@@ -100,6 +100,8 @@
   // FIXME: Pseudo-elements and pseudo-classes do not have the same specificity.
   // This function isn't quite correct.
   // http://www.w3.org/TR/selectors/#specificity
+  if (ignore_specificity_)
+    return 0;
   switch (match_) {
     case kId:
       return 0x010000;
@@ -216,6 +218,7 @@
     case kPseudoVisited:
     case kPseudoAny:
     case kPseudoMatches:
+    case kPseudoIS:
     case kPseudoAnyLink:
     case kPseudoWebkitAnyLink:
     case kPseudoAutofill:
@@ -390,6 +393,7 @@
     {"cue", CSSSelector::kPseudoCue},
     {"host", CSSSelector::kPseudoHost},
     {"host-context", CSSSelector::kPseudoHostContext},
+    {"is", CSSSelector::kPseudoIS},
     {"lang", CSSSelector::kPseudoLang},
     {"matches", CSSSelector::kPseudoMatches},
     {"not", CSSSelector::kPseudoNot},
@@ -606,6 +610,7 @@
     case kPseudoIncrement:
     case kPseudoIndeterminate:
     case kPseudoInvalid:
+    case kPseudoIS:
     case kPseudoLang:
     case kPseudoLastChild:
     case kPseudoLastOfType:
@@ -757,6 +762,7 @@
         case kPseudoHostContext:
         case kPseudoAny:
         case kPseudoMatches:
+        case kPseudoIS:
           break;
         default:
           break;
@@ -1098,6 +1104,14 @@
   return false;
 }
 
+bool CSSSelector::HasPseudoIS() const {
+  for (const CSSSelector* s = this; s; s = s->TagHistory()) {
+    if (s->GetPseudoType() == CSSSelector::kPseudoIS)
+      return true;
+  }
+  return false;
+}
+
 CSSSelector::RareData::RareData(const AtomicString& value)
     : matching_value_(value),
       serializing_value_(value),
diff --git a/third_party/blink/renderer/core/css/css_selector.h b/third_party/blink/renderer/core/css/css_selector.h
index 66da4c7..b709e69 100644
--- a/third_party/blink/renderer/core/css/css_selector.h
+++ b/third_party/blink/renderer/core/css/css_selector.h
@@ -160,6 +160,7 @@
     kPseudoVisited,
     kPseudoAny,
     kPseudoMatches,
+    kPseudoIS,
     kPseudoAnyLink,
     kPseudoWebkitAnyLink,
     kPseudoAutofill,
@@ -348,6 +349,9 @@
   bool IsLastInTagHistory() const { return is_last_in_tag_history_; }
   void SetLastInTagHistory(bool is_last) { is_last_in_tag_history_ = is_last; }
 
+  bool IgnoreSpecificity() const { return ignore_specificity_; }
+  void SetIgnoreSpecificity(bool ignore) { ignore_specificity_ = ignore; }
+
   // https://drafts.csswg.org/selectors/#compound
   bool IsCompound() const;
 
@@ -375,6 +379,7 @@
   bool HasDeepCombinatorOrShadowPseudo() const;
   bool NeedsUpdatedDistribution() const;
   bool HasPseudoMatches() const;
+  bool HasPseudoIS() const;
 
  private:
   unsigned relation_ : 4;     // enum RelationType
@@ -387,6 +392,7 @@
   unsigned tag_is_implicit_ : 1;
   unsigned relation_is_affected_by_pseudo_content_ : 1;
   unsigned is_last_in_original_list_ : 1;
+  unsigned ignore_specificity_ : 1;
 
   void SetPseudoType(PseudoType pseudo_type) {
     pseudo_type_ = pseudo_type;
@@ -488,7 +494,8 @@
       is_for_page_(false),
       tag_is_implicit_(false),
       relation_is_affected_by_pseudo_content_(false),
-      is_last_in_original_list_(false) {}
+      is_last_in_original_list_(false),
+      ignore_specificity_(false) {}
 
 inline CSSSelector::CSSSelector(const QualifiedName& tag_q_name,
                                 bool tag_is_implicit)
@@ -501,7 +508,8 @@
       is_for_page_(false),
       tag_is_implicit_(tag_is_implicit),
       relation_is_affected_by_pseudo_content_(false),
-      is_last_in_original_list_(false) {
+      is_last_in_original_list_(false),
+      ignore_specificity_(false) {
   data_.tag_q_name_ = tag_q_name.Impl();
   data_.tag_q_name_->AddRef();
 }
@@ -517,7 +525,8 @@
       tag_is_implicit_(o.tag_is_implicit_),
       relation_is_affected_by_pseudo_content_(
           o.relation_is_affected_by_pseudo_content_),
-      is_last_in_original_list_(o.is_last_in_original_list_) {
+      is_last_in_original_list_(o.is_last_in_original_list_),
+      ignore_specificity_(o.ignore_specificity_) {
   if (o.match_ == kTag) {
     data_.tag_q_name_ = o.data_.tag_q_name_;
     data_.tag_q_name_->AddRef();
diff --git a/third_party/blink/renderer/core/css/css_selector_list.cc b/third_party/blink/renderer/core/css/css_selector_list.cc
index 7929e2035..3f475853 100644
--- a/third_party/blink/renderer/core/css/css_selector_list.cc
+++ b/third_party/blink/renderer/core/css/css_selector_list.cc
@@ -29,6 +29,7 @@
 #include <memory>
 #include <vector>
 #include "third_party/blink/renderer/core/css/parser/css_parser_selector.h"
+#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/partitions.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 
@@ -56,7 +57,7 @@
   return list;
 }
 
-CSSSelectorList CSSSelectorList::ConcatenatePseudoMatchesExpansion(
+CSSSelectorList CSSSelectorList::ConcatenateListExpansion(
     const CSSSelectorList& expanded,
     const CSSSelectorList& original) {
   unsigned expanded_length = expanded.ComputeLength();
@@ -112,101 +113,107 @@
 void AddToList(CSSSelector*& destination,
                const CSSSelector* begin,
                const CSSSelector* end,
-               CSSSelector::RelationType relation,
-               bool IsLastInTagHistory) {
+               const CSSSelector* selector_to_expand) {
   for (const CSSSelector* current = begin; current != end; ++current) {
     new (destination) CSSSelector(*current);
     DCHECK_EQ(current + 1 == end, current->IsLastInTagHistory());
     if (current->IsLastInTagHistory()) {
-      destination->SetRelation(relation);
-      if (!IsLastInTagHistory)
+      destination->SetRelation(selector_to_expand->Relation());
+      if (!selector_to_expand->IsLastInTagHistory())
         destination->SetLastInTagHistory(false);
     }
+    if (selector_to_expand->GetPseudoType() == CSSSelector::kPseudoIS ||
+        selector_to_expand->IgnoreSpecificity())
+      destination->SetIgnoreSpecificity(true);
     destination->SetLastInSelectorList(false);
     destination->SetLastInOriginalList(false);
     destination++;
   }
 }
 
-CSSSelectorList CSSSelectorList::ExpandedFirstMatchesPseudo() const {
+CSSSelectorList CSSSelectorList::ExpandedFirstPseudoClass() const {
+  DCHECK(this->RequiresExpansion());
   unsigned original_length = this->ComputeLength();
-  std::vector<const CSSSelector*> matches_boundaries =
+  std::vector<const CSSSelector*> selector_boundaries =
       SelectorBoundaries(*this);
 
   size_t i = 0;
-  while (!matches_boundaries[i]->HasPseudoMatches()) {
+  CSSSelectorList transformed = this->Copy();
+  while (!selector_boundaries[i]->HasPseudoMatches() &&
+         !selector_boundaries[i]->HasPseudoIS())
     ++i;
-  }
-  const CSSSelector* selector_with_matches_begin = matches_boundaries[i];
-  const CSSSelector* selector_with_matches_end = matches_boundaries[i + 1];
-  size_t selector_with_matches_length =
-      selector_with_matches_end - selector_with_matches_begin;
 
-  const CSSSelector* simple_matches = selector_with_matches_begin;
-  while (simple_matches->GetPseudoType() != CSSSelector::kPseudoMatches) {
-    simple_matches = simple_matches->TagHistory();
+  const CSSSelector* selector_to_expand_begin = selector_boundaries[i];
+  const CSSSelector* selector_to_expand_end = selector_boundaries[i + 1];
+  size_t selector_to_expand_length =
+      selector_to_expand_end - selector_to_expand_begin;
+
+  const CSSSelector* simple_selector = selector_to_expand_begin;
+  while (simple_selector->GetPseudoType() != CSSSelector::kPseudoMatches &&
+         simple_selector->GetPseudoType() != CSSSelector::kPseudoIS) {
+    simple_selector = simple_selector->TagHistory();
   }
 
-  unsigned inner_matches_length =
-      simple_matches->SelectorList()->ComputeLength();
-  std::vector<const CSSSelector*> matches_arg_boundaries =
-      SelectorBoundaries(*simple_matches->SelectorList());
+  unsigned inner_selector_length =
+      simple_selector->SelectorList()->ComputeLength();
+  std::vector<const CSSSelector*> selector_arg_boundaries =
+      SelectorBoundaries(*simple_selector->SelectorList());
 
-  size_t num_matches_args = matches_arg_boundaries.size() - 1;
-  unsigned other_selectors_length =
-      original_length - selector_with_matches_length;
+  size_t num_args = selector_arg_boundaries.size() - 1;
+  unsigned other_selectors_length = original_length - selector_to_expand_length;
 
-  unsigned expanded_matches_length =
-      (selector_with_matches_length - 1) * num_matches_args +
-      inner_matches_length + other_selectors_length;
+  unsigned expanded_selector_list_length =
+      (selector_to_expand_length - 1) * num_args + inner_selector_length +
+      other_selectors_length;
 
   // Do not perform expansion if the selector list size is too large to create
   // RuleData
-  if (expanded_matches_length > 8192)
+  if (expanded_selector_list_length > 8192)
     return CSSSelectorList();
 
   CSSSelectorList list;
   list.selector_array_ =
       reinterpret_cast<CSSSelector*>(WTF::Partitions::FastMalloc(
-          WTF::Partitions::ComputeAllocationSize(expanded_matches_length,
+          WTF::Partitions::ComputeAllocationSize(expanded_selector_list_length,
                                                  sizeof(CSSSelector)),
           kCSSSelectorTypeName));
 
   CSSSelector* destination = list.selector_array_;
 
-  AddToList(destination, matches_boundaries[0], selector_with_matches_begin);
-  for (size_t i = 0; i < num_matches_args; ++i) {
-    AddToList(destination, selector_with_matches_begin, simple_matches);
-    AddToList(destination, matches_arg_boundaries[i],
-              matches_arg_boundaries[i + 1], simple_matches->Relation(),
-              simple_matches->IsLastInTagHistory());
-    AddToList(destination, simple_matches + 1, selector_with_matches_end);
+  AddToList(destination, selector_boundaries[0], selector_to_expand_begin);
+  for (size_t i = 0; i < num_args; ++i) {
+    AddToList(destination, selector_to_expand_begin, simple_selector);
+    AddToList(destination, selector_arg_boundaries[i],
+              selector_arg_boundaries[i + 1], simple_selector);
+    AddToList(destination, simple_selector + 1, selector_to_expand_end);
   }
-  AddToList(destination, selector_with_matches_end, matches_boundaries.back());
+  AddToList(destination, selector_to_expand_end, selector_boundaries.back());
 
-  DCHECK(destination == list.selector_array_ + expanded_matches_length);
+  DCHECK(destination == list.selector_array_ + expanded_selector_list_length);
 
-  list.selector_array_[expanded_matches_length - 1].SetLastInOriginalList(true);
-  list.selector_array_[expanded_matches_length - 1].SetLastInSelectorList(true);
+  list.selector_array_[expanded_selector_list_length - 1].SetLastInOriginalList(
+      true);
+  list.selector_array_[expanded_selector_list_length - 1].SetLastInSelectorList(
+      true);
 
   return list;
 }
 
-CSSSelectorList CSSSelectorList::TransformForPseudoMatches() {
+CSSSelectorList CSSSelectorList::TransformForListExpansion() {
   DCHECK_GT(this->ComputeLength(), 0u);
   DCHECK(
       this->selector_array_[this->ComputeLength() - 1].IsLastInOriginalList());
-  DCHECK(this->HasPseudoMatches());
+  DCHECK(this->RequiresExpansion());
 
   // Append the expanded form of matches to the original selector list
   CSSSelectorList transformed = this->Copy();
   do {
-    transformed = transformed.ExpandedFirstMatchesPseudo();
-  } while (transformed.HasPseudoMatches());
+    transformed = transformed.ExpandedFirstPseudoClass();
+  } while (transformed.RequiresExpansion());
 
   if (transformed.ComputeLength() == 0)
     return CSSSelectorList();
-  return CSSSelectorList::ConcatenatePseudoMatchesExpansion(transformed, *this);
+  return CSSSelectorList::ConcatenateListExpansion(transformed, *this);
 }
 
 bool CSSSelectorList::HasPseudoMatches() const {
@@ -217,6 +224,22 @@
   return false;
 }
 
+bool CSSSelectorList::HasPseudoIS() const {
+  for (const CSSSelector* s = FirstForCSSOM(); s; s = Next(*s)) {
+    if (s->HasPseudoIS())
+      return true;
+  }
+  return false;
+}
+
+bool CSSSelectorList::RequiresExpansion() const {
+  for (const CSSSelector* s = FirstForCSSOM(); s; s = Next(*s)) {
+    if (s->HasPseudoMatches() || s->HasPseudoIS())
+      return true;
+  }
+  return false;
+}
+
 CSSSelectorList CSSSelectorList::AdoptSelectorVector(
     Vector<std::unique_ptr<CSSParserSelector>>& selector_vector) {
   size_t flattened_size = 0;
diff --git a/third_party/blink/renderer/core/css/css_selector_list.h b/third_party/blink/renderer/core/css/css_selector_list.h
index c779e77..de61b99 100644
--- a/third_party/blink/renderer/core/css/css_selector_list.h
+++ b/third_party/blink/renderer/core/css/css_selector_list.h
@@ -71,13 +71,15 @@
     o.selector_array_ = nullptr;
   }
 
-  static CSSSelectorList ConcatenatePseudoMatchesExpansion(
+  static CSSSelectorList ConcatenateListExpansion(
       const CSSSelectorList& expanded,
       const CSSSelectorList& original);
 
-  CSSSelectorList ExpandedFirstMatchesPseudo() const;
-  CSSSelectorList TransformForPseudoMatches();
+  CSSSelectorList ExpandedFirstPseudoClass() const;
+  CSSSelectorList TransformForListExpansion();
   bool HasPseudoMatches() const;
+  bool HasPseudoIS() const;
+  bool RequiresExpansion() const;
 
   CSSSelectorList& operator=(CSSSelectorList&& o) {
     DCHECK(this != &o);
diff --git a/third_party/blink/renderer/core/css/parser/css_selector_parser.cc b/third_party/blink/renderer/core/css/parser/css_selector_parser.cc
index 65c0de7..bd4f0d8 100644
--- a/third_party/blink/renderer/core/css/parser/css_selector_parser.cc
+++ b/third_party/blink/renderer/core/css/parser/css_selector_parser.cc
@@ -30,8 +30,8 @@
 
   parser.RecordUsageAndDeprecations(result);
 
-  if (result.HasPseudoMatches())
-    return result.TransformForPseudoMatches();
+  if (result.RequiresExpansion())
+    return result.TransformForListExpansion();
   return result;
 }
 
@@ -46,8 +46,8 @@
   CSSSelectorList result = parser.ConsumeComplexSelectorList(stream, observer);
   parser.RecordUsageAndDeprecations(result);
 
-  if (result.HasPseudoMatches())
-    return result.TransformForPseudoMatches();
+  if (result.RequiresExpansion())
+    return result.TransformForListExpansion();
   return result;
 }
 
@@ -549,6 +549,20 @@
       selector->SetSelectorList(std::move(selector_list));
       return selector;
     }
+    case CSSSelector::kPseudoIS: {
+      if (!RuntimeEnabledFeatures::CSSPseudoISEnabled())
+        break;
+
+      DisallowPseudoElementsScope scope(this);
+
+      std::unique_ptr<CSSSelectorList> selector_list =
+          std::make_unique<CSSSelectorList>();
+      *selector_list = ConsumeComplexSelectorList(block);
+      if (!selector_list->IsValid() || !block.AtEnd())
+        return nullptr;
+      selector->SetSelectorList(std::move(selector_list));
+      return selector;
+    }
     case CSSSelector::kPseudoHost:
     case CSSSelector::kPseudoHostContext:
     case CSSSelector::kPseudoAny:
@@ -559,7 +573,7 @@
           std::make_unique<CSSSelectorList>();
       *selector_list = ConsumeCompoundSelectorList(block);
       if (!selector_list->IsValid() || !block.AtEnd() ||
-          selector_list->HasPseudoMatches())
+          selector_list->HasPseudoMatches() || selector_list->HasPseudoIS())
         return nullptr;
       selector->SetSelectorList(std::move(selector_list));
       return selector;
@@ -591,7 +605,8 @@
           ConsumeCompoundSelector(block);
       block.ConsumeWhitespace();
       if (!inner_selector || !block.AtEnd() ||
-          inner_selector->GetPseudoType() == CSSSelector::kPseudoMatches)
+          inner_selector->GetPseudoType() == CSSSelector::kPseudoMatches ||
+          inner_selector->GetPseudoType() == CSSSelector::kPseudoIS)
         return nullptr;
       Vector<std::unique_ptr<CSSParserSelector>> selector_vector;
       selector_vector.push_back(std::move(inner_selector));
@@ -960,6 +975,10 @@
         case CSSSelector::kPseudoWebkitAnyLink:
           feature = WebFeature::kCSSSelectorPseudoWebkitAnyLink;
           break;
+        case CSSSelector::kPseudoIS:
+          DCHECK(RuntimeEnabledFeatures::CSSPseudoISEnabled());
+          feature = WebFeature::kCSSSelectorPseudoIS;
+          break;
         case CSSSelector::kPseudoUnresolved:
           feature = WebFeature::kCSSSelectorPseudoUnresolved;
           break;
diff --git a/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc b/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc
index 5880a93..68540910 100644
--- a/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc
+++ b/third_party/blink/renderer/core/css/parser/css_selector_parser_test.cc
@@ -499,6 +499,40 @@
   }
 }
 
+TEST(CSSSelectorParserTest, InvalidNestingPseudoIS) {
+  // :is() is currently not supported within these pseudo classes as they
+  // currently do not support complex selector arguments (:is() does support
+  // this and the expansion of :is() may provide complex selector arguments to
+  // these pseudo classes). Most of these test cases should eventually be
+  // removed once they support complex selector arguments.
+  const char* test_cases[] = {":-webkit-any(:is(.a))",
+                              "::cue(:is(.a))",
+                              ":cue(:is(.a))",
+                              ":host(:is(.a))",
+                              ":host-context(:is(.a))",
+                              ":lang(:is(.a))",
+                              ":not(:is(.a))",
+                              ":nth-child(:is(.a))",
+                              ":nth-last-child(:is(.a))",
+                              ":nth-last-of-type(:is(.a))",
+                              ":nth-of-type(:is(.a))",
+                              "::slotted(:is(.a))"};
+
+  CSSParserContext* context = CSSParserContext::Create(
+      kHTMLStandardMode, SecureContextMode::kInsecureContext);
+  StyleSheetContents* sheet = StyleSheetContents::Create(context);
+
+  for (const char* test_case : test_cases) {
+    SCOPED_TRACE(test_case);
+    CSSTokenizer tokenizer(test_case);
+    const auto tokens = tokenizer.TokenizeToEOF();
+    CSSParserTokenRange range(tokens);
+    CSSSelectorList list =
+        CSSSelectorParser::ParseSelector(range, context, sheet);
+    EXPECT_FALSE(list.IsValid());
+  }
+}
+
 namespace {
 
 const auto TagLocalName = [](const CSSSelector* selector) {
diff --git a/third_party/blink/renderer/core/css/properties/longhands/webkit_line_clamp_custom.cc b/third_party/blink/renderer/core/css/properties/longhands/webkit_line_clamp_custom.cc
index be96a8c9..23a30d3d 100644
--- a/third_party/blink/renderer/core/css/properties/longhands/webkit_line_clamp_custom.cc
+++ b/third_party/blink/renderer/core/css/properties/longhands/webkit_line_clamp_custom.cc
@@ -14,9 +14,6 @@
     CSSParserTokenRange& range,
     const CSSParserContext& context,
     const CSSParserLocalContext&) const {
-  if (range.Peek().GetType() != kNumberToken)
-    return nullptr;
-
   // When specifying number of lines, don't allow 0 as a valid value.
   return CSSPropertyParserHelpers::ConsumePositiveInteger(range);
 }
diff --git a/third_party/blink/renderer/core/css/rule_feature_set.cc b/third_party/blink/renderer/core/css/rule_feature_set.cc
index 81123504..c1e683e 100644
--- a/third_party/blink/renderer/core/css/rule_feature_set.cc
+++ b/third_party/blink/renderer/core/css/rule_feature_set.cc
@@ -165,6 +165,7 @@
     case CSSSelector::kPseudoVideoPersistentAncestor:
       return true;
     case CSSSelector::kPseudoMatches:
+    case CSSSelector::kPseudoIS:
     case CSSSelector::kPseudoUnknown:
     case CSSSelector::kPseudoLeftPage:
     case CSSSelector::kPseudoRightPage:
diff --git a/third_party/blink/renderer/core/css/rule_feature_set_test.cc b/third_party/blink/renderer/core/css/rule_feature_set_test.cc
index 065777e..827933c07 100644
--- a/third_party/blink/renderer/core/css/rule_feature_set_test.cc
+++ b/third_party/blink/renderer/core/css/rule_feature_set_test.cc
@@ -1090,4 +1090,117 @@
   ExpectNoInvalidation(invalidation_lists.siblings);
 }
 
+TEST_F(RuleFeatureSetTest, pseudoIS) {
+  EXPECT_EQ(RuleFeatureSet::kSelectorMayMatch, CollectFeatures(":is(.w, .x)"));
+
+  {
+    InvalidationLists invalidation_lists;
+    CollectInvalidationSetsForClass(invalidation_lists, "w");
+    ExpectSelfInvalidation(invalidation_lists.descendants);
+    ExpectNoInvalidation(invalidation_lists.siblings);
+  }
+  {
+    InvalidationLists invalidation_lists;
+    CollectInvalidationSetsForClass(invalidation_lists, "x");
+    ExpectSelfInvalidation(invalidation_lists.descendants);
+    ExpectNoInvalidation(invalidation_lists.siblings);
+  }
+}
+
+TEST_F(RuleFeatureSetTest, pseudoISSibling) {
+  EXPECT_EQ(RuleFeatureSet::kSelectorMayMatch,
+            CollectFeatures(":is(.q, .r) ~ .s .t"));
+  {
+    InvalidationLists invalidation_lists;
+    CollectInvalidationSetsForClass(invalidation_lists, "q");
+    ExpectNoInvalidation(invalidation_lists.descendants);
+    ExpectSiblingDescendantInvalidation(UINT_MAX, "s", "t",
+                                        invalidation_lists.siblings);
+  }
+  {
+    InvalidationLists invalidation_lists;
+    CollectInvalidationSetsForClass(invalidation_lists, "r");
+    ExpectNoInvalidation(invalidation_lists.descendants);
+    ExpectSiblingDescendantInvalidation(UINT_MAX, "s", "t",
+                                        invalidation_lists.siblings);
+  }
+}
+
+TEST_F(RuleFeatureSetTest, pseudoISIdDescendant) {
+  EXPECT_EQ(RuleFeatureSet::kSelectorMayMatch,
+            CollectFeatures(".a :is(#b, #c)"));
+
+  InvalidationLists invalidation_lists;
+  CollectInvalidationSetsForClass(invalidation_lists, "a");
+  ExpectIdInvalidation("b", "c", invalidation_lists.descendants);
+}
+
+TEST_F(RuleFeatureSetTest, pseudoISTagDescendant) {
+  EXPECT_EQ(RuleFeatureSet::kSelectorMayMatch,
+            CollectFeatures(".a :is(span, div)"));
+
+  InvalidationLists invalidation_lists;
+  CollectInvalidationSetsForClass(invalidation_lists, "a");
+  ExpectTagNameInvalidation("span", "div", invalidation_lists.descendants);
+}
+
+TEST_F(RuleFeatureSetTest, pseudoISAnySibling) {
+  EXPECT_EQ(RuleFeatureSet::kSelectorMayMatch,
+            CollectFeatures(".v ~ :is(.w, .x)"));
+
+  InvalidationLists invalidation_lists;
+  CollectInvalidationSetsForClass(invalidation_lists, "v");
+  ExpectNoInvalidation(invalidation_lists.descendants);
+  ExpectClassInvalidation("w", "x", invalidation_lists.siblings);
+}
+
+TEST_F(RuleFeatureSetTest, pseudoISDescendantSibling) {
+  EXPECT_EQ(RuleFeatureSet::kSelectorMayMatch,
+            CollectFeatures(".u .v ~ :is(.w, .x)"));
+
+  InvalidationLists invalidation_lists;
+  CollectInvalidationSetsForClass(invalidation_lists, "u");
+  ExpectClassInvalidation("w", "x", invalidation_lists.descendants);
+  ExpectNoInvalidation(invalidation_lists.siblings);
+}
+
+TEST_F(RuleFeatureSetTest, pseudoISWithComplexSelectors) {
+  EXPECT_EQ(RuleFeatureSet::kSelectorMayMatch,
+            CollectFeatures(".a :is(.w+.b, .x>#c)"));
+
+  InvalidationLists invalidation_lists;
+  CollectInvalidationSetsForClass(invalidation_lists, "a");
+  ExpectClassInvalidation("b", invalidation_lists.descendants);
+  ExpectIdInvalidation("c", invalidation_lists.descendants);
+  ExpectNoInvalidation(invalidation_lists.siblings);
+}
+
+TEST_F(RuleFeatureSetTest, pseudoISNested) {
+  EXPECT_EQ(RuleFeatureSet::kSelectorMayMatch,
+            CollectFeatures(".a :is(.w+.b, .e+:is(.c, #d))"));
+
+  InvalidationLists invalidation_lists;
+  CollectInvalidationSetsForClass(invalidation_lists, "a");
+  ExpectClassInvalidation("b", "c", invalidation_lists.descendants);
+  ExpectIdInvalidation("d", invalidation_lists.descendants);
+  ExpectNoInvalidation(invalidation_lists.siblings);
+}
+
+TEST_F(RuleFeatureSetTest, pseudoISTooLarge) {
+  // RuleData cannot support selectors at index 8192 or beyond so the expansion
+  // is limited to this size
+  EXPECT_EQ(RuleFeatureSet::kSelectorNeverMatches,
+            CollectFeatures(":is(.a#a, .b#b, .c#c, .d#d) + "
+                            ":is(.e#e, .f#f, .g#g, .h#h) + "
+                            ":is(.i#i, .j#j, .k#k, .l#l) + "
+                            ":is(.m#m, .n#n, .o#o, .p#p) + "
+                            ":is(.q#q, .r#r, .s#s, .t#t) + "
+                            ":is(.u#u, .v#v, .w#w, .x#x)"));
+
+  InvalidationLists invalidation_lists;
+  CollectInvalidationSetsForClass(invalidation_lists, "a");
+  ExpectNoInvalidation(invalidation_lists.descendants);
+  ExpectNoInvalidation(invalidation_lists.siblings);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/rule_set_test.cc b/third_party/blink/renderer/core/css/rule_set_test.cc
index ae430ed..e34b9d5 100644
--- a/third_party/blink/renderer/core/css/rule_set_test.cc
+++ b/third_party/blink/renderer/core/css/rule_set_test.cc
@@ -265,6 +265,31 @@
   }
 }
 
+TEST(RuleSetTest, findBestRuleSetAndAdd_PseudoIS) {
+  CSSTestHelper helper;
+
+  helper.AddCSSRules(".a :is(.b+.c, .d>:is(.e, .f)) { }");
+  RuleSet& rule_set = helper.GetRuleSet();
+  {
+    AtomicString str("c");
+    const TerminatedArray<RuleData>* rules = rule_set.ClassRules(str);
+    ASSERT_EQ(1u, rules->size());
+    ASSERT_EQ(str, rules->at(0).Selector().Value());
+  }
+  {
+    AtomicString str("e");
+    const TerminatedArray<RuleData>* rules = rule_set.ClassRules(str);
+    ASSERT_EQ(1u, rules->size());
+    ASSERT_EQ(str, rules->at(0).Selector().Value());
+  }
+  {
+    AtomicString str("f");
+    const TerminatedArray<RuleData>* rules = rule_set.ClassRules(str);
+    ASSERT_EQ(1u, rules->size());
+    ASSERT_EQ(str, rules->at(0).Selector().Value());
+  }
+}
+
 TEST(RuleSetTest, findBestRuleSetAndAdd_PseudoMatchesTooLarge) {
   // RuleData cannot support selectors at index 8192 or beyond so the expansion
   // is limited to this size
@@ -283,6 +308,21 @@
   ASSERT_EQ(0u, rule_set.RuleCount());
 }
 
+TEST(RuleSetTest, findBestRuleSetAndAdd_PseudoISTooLarge) {
+  // RuleData cannot support selectors at index 8192 or beyond so the expansion
+  // is limited to this size
+  CSSTestHelper helper;
+
+  helper.AddCSSRules(
+      ":is(.a#a, .b#b, .c#c, .d#d) + :is(.e#e, .f#f, .g#g, .h#h) + "
+      ":is(.i#i, .j#j, .k#k, .l#l) + :is(.m#m, .n#n, .o#o, .p#p) + "
+      ":is(.q#q, .r#r, .s#s, .t#t) + :is(.u#u, .v#v, .w#w, .x#x) { }",
+      true);
+
+  RuleSet& rule_set = helper.GetRuleSet();
+  ASSERT_EQ(0u, rule_set.RuleCount());
+}
+
 TEST(RuleSetTest, SelectorIndexLimit) {
   StringBuilder builder;
 
diff --git a/third_party/blink/renderer/core/css/selector_checker.cc b/third_party/blink/renderer/core/css/selector_checker.cc
index a6bc95ab..f6849df 100644
--- a/third_party/blink/renderer/core/css/selector_checker.cc
+++ b/third_party/blink/renderer/core/css/selector_checker.cc
@@ -1119,6 +1119,7 @@
       return false;
     case CSSSelector::kPseudoUnknown:
     case CSSSelector::kPseudoMatches:
+    case CSSSelector::kPseudoIS:
     default:
       NOTREACHED();
       break;
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index 121a0d1..0a92e228 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -2366,10 +2366,15 @@
 }
 
 void Document::LayoutUpdated() {
+  DCHECK(GetFrame());
+  DCHECK(View());
+
+  // If we're restoring a scroll position from history, that takes precedence
+  // over scrolling to the anchor in the URL.
+  View()->ScrollAndFocusFragmentAnchor();
+
+  // Script run in the call above may detach the document.
   if (GetFrame() && View()) {
-    // If we're restoring a scroll position from history, that takes precedence
-    // over scrolling to the anchor in the URL.
-    View()->ScrollAndFocusFragmentAnchor();
     GetFrame()->Loader().RestoreScrollPositionAndViewState();
 
     // The focus call above can execute JS which can dirty layout. Ensure
diff --git a/third_party/blink/renderer/core/frame/use_counter_test.cc b/third_party/blink/renderer/core/frame/use_counter_test.cc
index 63dc6e4..e853da57 100644
--- a/third_party/blink/renderer/core/frame/use_counter_test.cc
+++ b/third_party/blink/renderer/core/frame/use_counter_test.cc
@@ -258,6 +258,17 @@
       [&](LocalFrame* frame) { use_counter.DidCommitLoad(frame); }, kSvgUrl);
 }
 
+TEST_F(UseCounterTest, CSSSelectorPseudoIS) {
+  std::unique_ptr<DummyPageHolder> dummy_page_holder =
+      DummyPageHolder::Create(IntSize(800, 600));
+  Document& document = dummy_page_holder->GetDocument();
+  WebFeature feature = WebFeature::kCSSSelectorPseudoIS;
+  EXPECT_FALSE(UseCounter::IsCounted(document, feature));
+  document.documentElement()->SetInnerHTMLFromString(
+      "<style>.a+:is(.b, .c+.d) { color: red; }</style>");
+  EXPECT_TRUE(UseCounter::IsCounted(document, feature));
+}
+
 // TODO(lunalu): When removing the legacy use counter and its tests, find
 // another way to test muting behavior.
 TEST_F(UseCounterTest, InspectorDisablesMeasurement) {
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 4d3d608..63c67492 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,6 @@
 // DOMRectList only exists for compatibility with legacy web content.
 // When specifying a new API, use sequence<DOMRect> instead.
 
-// TODO: Spec also includes LegacyArrayClass that our IDL doesn't support yet.
 [ NoInterfaceObject ] interface DOMRectList {
     readonly attribute unsigned long length;
     [MeasureAs=ClientRectListItem] getter DOMRect? item(unsigned long index);
diff --git a/third_party/blink/renderer/core/html/canvas/image_data.cc b/third_party/blink/renderer/core/html/canvas/image_data.cc
index b440ab3..31bf360a 100644
--- a/third_party/blink/renderer/core/html/canvas/image_data.cc
+++ b/third_party/blink/renderer/core/html/canvas/image_data.cc
@@ -307,11 +307,8 @@
 
 static SkImageInfo GetImageInfo(scoped_refptr<StaticBitmapImage> image) {
   sk_sp<SkImage> skia_image = image->PaintImageForCurrentFrame().GetSkImage();
-  SkColorType color_type = kN32_SkColorType;
-  if (skia_image->colorSpace() && skia_image->colorSpace()->gammaIsLinear())
-    color_type = kRGBA_F16_SkColorType;
   return SkImageInfo::Make(skia_image->width(), skia_image->height(),
-                           color_type, skia_image->alphaType(),
+                           skia_image->colorType(), skia_image->alphaType(),
                            skia_image->refColorSpace());
 }
 
diff --git a/third_party/blink/renderer/core/html/media/picture_in_picture_interstitial.cc b/third_party/blink/renderer/core/html/media/picture_in_picture_interstitial.cc
index 5b8f4fc..fd3dbcc 100644
--- a/third_party/blink/renderer/core/html/media/picture_in_picture_interstitial.cc
+++ b/third_party/blink/renderer/core/html/media/picture_in_picture_interstitial.cc
@@ -78,8 +78,8 @@
   interstitial_timer_.StartOneShot(kPictureInPictureHiddenAnimationSeconds,
                                    FROM_HERE);
 
-  DCHECK(GetVideoElement().PlatformLayer());
-  GetVideoElement().PlatformLayer()->SetDrawsContent(true);
+  if (GetVideoElement().PlatformLayer())
+    GetVideoElement().PlatformLayer()->SetDrawsContent(true);
 }
 
 void PictureInPictureInterstitial::ToggleInterstitialTimerFired(TimerBase*) {
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
index 1df04e2..87a4ca18 100644
--- a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
+++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
@@ -158,8 +158,10 @@
 
 SkImageInfo GetSkImageInfo(sk_sp<SkImage> skia_image) {
   SkColorType color_type = kN32_SkColorType;
-  if (skia_image->colorSpace() && skia_image->colorSpace()->gammaIsLinear())
+  if (skia_image->colorType() == kRGBA_F16_SkColorType ||
+      (skia_image->colorSpace() && skia_image->colorSpace()->gammaIsLinear())) {
     color_type = kRGBA_F16_SkColorType;
+  }
   return SkImageInfo::Make(skia_image->width(), skia_image->height(),
                            color_type, skia_image->alphaType(),
                            skia_image->refColorSpace());
diff --git a/third_party/blink/renderer/core/inspector/inspector_trace_events.cc b/third_party/blink/renderer/core/inspector/inspector_trace_events.cc
index 18aedc6..964d81f 100644
--- a/third_party/blink/renderer/core/inspector/inspector_trace_events.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_trace_events.cc
@@ -246,6 +246,7 @@
     DEFINE_STRING_MAPPING(PseudoVisited)
     DEFINE_STRING_MAPPING(PseudoAny)
     DEFINE_STRING_MAPPING(PseudoMatches)
+    DEFINE_STRING_MAPPING(PseudoIS)
     DEFINE_STRING_MAPPING(PseudoWebkitAnyLink)
     DEFINE_STRING_MAPPING(PseudoAnyLink)
     DEFINE_STRING_MAPPING(PseudoAutofill)
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc
index 6d218ed6..3f824a9 100644
--- a/third_party/blink/renderer/core/layout/layout_box.cc
+++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -3542,13 +3542,16 @@
     case kFillAvailable:
     case kPercent:
     case kCalculated: {
-      // FIXME: containingBlockLogicalWidthForContent() is wrong if the replaced
-      // element's writing-mode is perpendicular to the containing block's
-      // writing-mode. https://bugs.webkit.org/show_bug.cgi?id=46496
-      const LayoutUnit cw = IsOutOfFlowPositioned()
-                                ? ContainingBlockLogicalWidthForPositioned(
-                                      ToLayoutBoxModelObject(Container()))
-                                : ContainingBlockLogicalWidthForContent();
+      LayoutUnit cw;
+      if (IsOutOfFlowPositioned()) {
+        cw = ContainingBlockLogicalWidthForPositioned(
+            ToLayoutBoxModelObject(Container()));
+      } else {
+        cw = IsHorizontalWritingMode() ==
+                     ContainingBlock()->IsHorizontalWritingMode()
+                 ? ContainingBlockLogicalWidthForContent()
+                 : PerpendicularContainingBlockLogicalHeight();
+      }
       Length container_logical_width =
           ContainingBlock()->Style()->LogicalWidth();
       // FIXME: Handle cases when containing block width is calculated or
@@ -3666,20 +3669,18 @@
             ValueForLength(logical_height, new_content_height));
       }
 
-      // FIXME: availableLogicalHeight() is wrong if the replaced element's
-      // writing-mode is perpendicular to the containing block's writing-mode.
-      // https://bugs.webkit.org/show_bug.cgi?id=46496
       LayoutUnit available_height;
       if (IsOutOfFlowPositioned()) {
         available_height = ContainingBlockLogicalHeightForPositioned(
             ToLayoutBoxModelObject(cb));
       } else if (stretched_height != -1) {
         available_height = stretched_height;
-      } else if (HasOverrideContainingBlockContentLogicalHeight()) {
-        available_height = OverrideContainingBlockContentLogicalHeight();
       } else {
         available_height =
-            ContainingBlockLogicalHeightForContent(kIncludeMarginBorderPadding);
+            IsHorizontalWritingMode() == cb->IsHorizontalWritingMode()
+                ? ContainingBlockLogicalHeightForContent(
+                      kIncludeMarginBorderPadding)
+                : ContainingBlockLogicalWidthForContent();
         // It is necessary to use the border-box to match WinIE's broken
         // box model.  This is essential for sizing inside
         // table cells using percentage heights.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
index 49edbbd..dd3c7e7 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
@@ -293,7 +293,7 @@
 
   // Anonymous constraint spaces are auto-sized. Don't let that affect
   // block-axis percentage resolution.
-  if (ConstraintSpace().IsAnonymous())
+  if (ConstraintSpace().IsAnonymous() || Node().IsAnonymous())
     child_percentage_size_ = ConstraintSpace().PercentageResolutionSize();
   else
     child_percentage_size_ = adjusted_size;
@@ -1645,7 +1645,6 @@
   space_builder.SetFragmentainerSpaceAtBfcStart(space_available);
   space_builder.SetFragmentationType(
       ConstraintSpace().BlockFragmentationType());
-
   return space_builder.ToConstraintSpace(writing_mode);
 }
 
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.cc b/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.cc
index 73e695f..15978cd 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.cc
@@ -95,6 +95,10 @@
   return IsBlock() && box_->IsLayoutNGListMarker();
 }
 
+bool NGLayoutInputNode::IsAnonymous() const {
+  return box_->IsAnonymous();
+}
+
 bool NGLayoutInputNode::IsQuirkyContainer() const {
   return box_->GetDocument().InQuirksMode() &&
          (box_->IsBody() || box_->IsTableCell());
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.h b/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.h
index 4d93434..06a331ae 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_layout_input_node.h
@@ -59,6 +59,7 @@
   bool ShouldBeConsideredAsReplaced() const;
   bool IsListItem() const;
   bool IsListMarker() const;
+  bool IsAnonymous() const;
 
   // If the node is a quirky container for margin collapsing, see:
   // https://html.spec.whatwg.org/#margin-collapsing-quirks
diff --git a/third_party/blink/renderer/core/loader/document_threadable_loader.cc b/third_party/blink/renderer/core/loader/document_threadable_loader.cc
index 7054ae4..85d0d04 100644
--- a/third_party/blink/renderer/core/loader/document_threadable_loader.cc
+++ b/third_party/blink/renderer/core/loader/document_threadable_loader.cc
@@ -1116,20 +1116,15 @@
   if (error.CORSErrorStatus()) {
     DCHECK(out_of_blink_cors_);
     // TODO(toyoshim): Should consider to pass correct arguments instead of
-    // WebURL() and WebHTTPHeaderMap() to GetErrorString().
-    // We still need plumbing required information.
-    const int response_code =
-        error.CORSErrorStatus()->related_response_headers
-            ? error.CORSErrorStatus()->related_response_headers->response_code()
-            : 0;
+    // KURL(), 0, and HTTPHeaderMap() to GetErrorString().
+    // We still need plumbing some more information.
     GetExecutionContext()->AddConsoleMessage(ConsoleMessage::Create(
         kJSMessageSource, kErrorMessageLevel,
         "Failed to load " + error.FailingURL() + ": " +
-            CORS::GetErrorString(CORS::ErrorParameter::Create(
-                                     error.CORSErrorStatus()->cors_error,
-                                     KURL(error.FailingURL()), KURL(),
-                                     response_code, HTTPHeaderMap(),
-                                     *GetSecurityOrigin(), request_context_))
+            CORS::GetErrorString(
+                CORS::ErrorParameter::Create(
+                    *error.CORSErrorStatus(), KURL(error.FailingURL()), KURL(),
+                    0, HTTPHeaderMap(), *GetSecurityOrigin(), request_context_))
                 .Utf8()
                 .data()));
   }
diff --git a/third_party/blink/renderer/core/style/style_fetched_image.cc b/third_party/blink/renderer/core/style/style_fetched_image.cc
index ed7079f..524217d 100644
--- a/third_party/blink/renderer/core/style/style_fetched_image.cc
+++ b/third_party/blink/renderer/core/style/style_fetched_image.cc
@@ -93,7 +93,7 @@
   // border-image, etc.)
   //
   // https://drafts.csswg.org/css-images-3/#the-image-orientation
-  FloatSize size(image_->IntrinsicSize(kDoNotRespectImageOrientation));
+  FloatSize size(image->Size());
   return ApplyZoom(size, multiplier);
 }
 
diff --git a/third_party/blink/renderer/core/style/style_fetched_image_set.cc b/third_party/blink/renderer/core/style/style_fetched_image_set.cc
index 3b6107d..86def132 100644
--- a/third_party/blink/renderer/core/style/style_fetched_image_set.cc
+++ b/third_party/blink/renderer/core/style/style_fetched_image_set.cc
@@ -94,8 +94,7 @@
   // border-image, etc.)
   //
   // https://drafts.csswg.org/css-images-3/#the-image-orientation
-  FloatSize natural_size(
-      best_fit_image_->IntrinsicSize(kDoNotRespectImageOrientation));
+  FloatSize natural_size(image->Size());
   FloatSize scaled_image_size(ApplyZoom(natural_size, multiplier));
   scaled_image_size.Scale(1 / image_scale_factor_);
   return scaled_image_size;
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc b/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
index 6120d9f3..78d1e67 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
@@ -13,6 +13,7 @@
 #include "third_party/blink/renderer/core/animation/timing.h"
 #include "third_party/blink/renderer/core/dom/node.h"
 #include "third_party/blink/renderer/core/dom/node_computed_style.h"
+#include "third_party/blink/renderer/core/inspector/console_message.h"
 #include "third_party/blink/renderer/core/layout/layout_box.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
@@ -153,6 +154,22 @@
                                                     time_range.GetAsDouble());
 }
 
+void StartEffectOnCompositor(CompositorAnimation* animation,
+                             KeyframeEffect* effect) {
+  DCHECK(effect);
+  Element& target = *effect->target();
+  effect->Model()->SnapshotAllCompositorKeyframes(
+      target, target.ComputedStyleRef(), target.ParentComputedStyle());
+
+  int group = 0;
+  base::Optional<double> start_time = base::nullopt;
+  double time_offset = 0;
+  double playback_rate = 1;
+
+  effect->StartAnimationOnCompositor(group, start_time, time_offset,
+                                     playback_rate, animation);
+}
+
 unsigned NextSequenceNumber() {
   // TODO(majidvp): This should actually come from the same source as other
   // animation so that they have the correct ordering.
@@ -228,8 +245,7 @@
   document_->GetWorkletAnimationController().AttachAnimation(*this);
   play_state_ = Animation::kPending;
 
-  KeyframeEffect* target_effect = effects_.at(0);
-  Element* target = target_effect->target();
+  Element* target = GetEffect()->target();
   if (!target)
     return;
   target->EnsureElementAnimations().GetWorkletAnimations().insert(this);
@@ -244,15 +260,14 @@
     return;
   document_->GetWorkletAnimationController().DetachAnimation(*this);
 
-  KeyframeEffect* target_effect = effects_.at(0);
   if (compositor_animation_) {
-    target_effect->CancelAnimationOnCompositor(compositor_animation_.get());
+    GetEffect()->CancelAnimationOnCompositor(compositor_animation_.get());
     DestroyCompositorAnimation();
   }
 
   play_state_ = Animation::kIdle;
 
-  Element* target = target_effect->target();
+  Element* target = GetEffect()->target();
   if (!target)
     return;
   target->EnsureElementAnimations().GetWorkletAnimations().erase(this);
@@ -271,6 +286,10 @@
   Update(kTimingUpdateOnDemand);
 }
 
+void WorkletAnimation::EffectInvalidated() {
+  document_->GetWorkletAnimationController().InvalidateAnimation(*this);
+}
+
 void WorkletAnimation::Update(TimingUpdateReason reason) {
   if (play_state_ != Animation::kRunning)
     return;
@@ -281,9 +300,7 @@
   // TODO(crbug.com/756359): For now we use 0 as inherited time in but we will
   // need to get the inherited time from worklet context.
   double inherited_time_seconds = 0;
-
-  KeyframeEffect* target_effect = effects_.at(0);
-  target_effect->UpdateInheritedTime(inherited_time_seconds, reason);
+  GetEffect()->UpdateInheritedTime(inherited_time_seconds, reason);
 }
 
 AnimationTimeline& WorkletAnimation::GetAnimationTimeline() {
@@ -295,10 +312,28 @@
   return *timeline_.GetAsDocumentTimeline();
 }
 
+bool WorkletAnimation::UpdateCompositingState() {
+  switch (play_state_) {
+    case Animation::kPending: {
+      String failure_message;
+      if (StartOnCompositor(&failure_message))
+        return true;
+      document_->AddConsoleMessage(ConsoleMessage::Create(
+          kOtherMessageSource, kWarningMessageLevel, failure_message));
+      return false;
+    }
+    case Animation::kRunning: {
+      UpdateOnCompositor();
+      return false;
+    }
+    default:
+      return false;
+  }
+}
+
 bool WorkletAnimation::StartOnCompositor(String* failure_message) {
   DCHECK(IsMainThread());
-  KeyframeEffect* target_effect = effects_.at(0);
-  Element& target = *target_effect->target();
+  Element& target = *GetEffect()->target();
 
   // TODO(crbug.com/836393): This should not be possible but it is currently
   // happening and needs to be investigated/fixed.
@@ -311,7 +346,7 @@
   // keyframe groups have been created. To ensure this we manually snapshot the
   // frames in the target effect.
   // TODO(smcgruer): This shouldn't be necessary - Animation doesn't do this.
-  target_effect->Model()->SnapshotAllCompositorKeyframes(
+  GetEffect()->Model()->SnapshotAllCompositorKeyframes(
       target, target.ComputedStyleRef(), target.ParentComputedStyle());
 
   if (!CheckElementComposited(target)) {
@@ -330,7 +365,7 @@
 
   double playback_rate = 1;
   CompositorAnimations::FailureCode failure_code =
-      target_effect->CheckCanStartAnimationOnCompositor(playback_rate);
+      GetEffect()->CheckCanStartAnimationOnCompositor(playback_rate);
 
   if (!failure_code.Ok()) {
     play_state_ = Animation::kIdle;
@@ -354,14 +389,8 @@
   CompositorAnimations::AttachCompositedLayers(target,
                                                compositor_animation_.get());
 
-  base::Optional<double> start_time = base::nullopt;
-  double time_offset = 0;
-  int group = 0;
-
   // TODO(smcgruer): We need to start all of the effects, not just the first.
-  effects_.at(0)->StartAnimationOnCompositor(group, start_time, time_offset,
-                                             playback_rate,
-                                             compositor_animation_.get());
+  StartEffectOnCompositor(compositor_animation_.get(), GetEffect());
   play_state_ = Animation::kRunning;
 
   AnimationTimeline& timeline = GetAnimationTimeline();
@@ -373,6 +402,14 @@
   return true;
 }
 
+void WorkletAnimation::UpdateOnCompositor() {
+  // We want to update the keyframe effect on compositor animation without
+  // destroying the compositor animation instance. This is achieved by
+  // canceling, and start the blink keyframe effect on compositor.
+  GetEffect()->CancelAnimationOnCompositor(compositor_animation_.get());
+  StartEffectOnCompositor(compositor_animation_.get(), GetEffect());
+}
+
 void WorkletAnimation::DestroyCompositorAnimation() {
   if (compositor_animation_ && compositor_animation_->IsElementAttached())
     compositor_animation_->DetachElement();
@@ -387,6 +424,11 @@
   }
 }
 
+KeyframeEffect* WorkletAnimation::GetEffect() const {
+  DCHECK(effects_.at(0));
+  return effects_.at(0);
+}
+
 void WorkletAnimation::Dispose() {
   DCHECK(IsMainThread());
   DestroyCompositorAnimation();
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.h b/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
index aef0c19..923823a3 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
@@ -65,16 +65,14 @@
   // is not currently supported by worklet animations.
   bool EffectSuppressed() const override { return false; }
 
-  // TODO(crbug.com/833846): We should update compositor animation when this
-  // happens.
-  void EffectInvalidated() override {}
+  void EffectInvalidated() override;
   void UpdateIfNecessary() override;
 
   Animation* GetAnimation() override { return nullptr; }
 
   // WorkletAnimationBase implementation.
   void Update(TimingUpdateReason) override;
-  bool StartOnCompositor(String* failure_message) override;
+  bool UpdateCompositingState() override;
 
   // CompositorAnimationClient implementation.
   CompositorAnimation* GetCompositorAnimation() const override {
@@ -94,7 +92,7 @@
   const DocumentTimelineOrScrollTimeline& Timeline() { return timeline_; }
 
   const scoped_refptr<SerializedScriptValue> Options() { return options_; }
-  KeyframeEffect* GetEffect() const override { return effects_.at(0); }
+  KeyframeEffect* GetEffect() const override;
 
   void Trace(blink::Visitor*) override;
 
@@ -108,6 +106,14 @@
 
   AnimationTimeline& GetAnimationTimeline();
 
+  // Attempts to start the animation on the compositor side, returning true if
+  // it succeeds or false otherwise. If false is returned and failure_message
+  // was non-null, failure_message may be filled with an error description.
+  bool StartOnCompositor(String* failure_message);
+
+  // Updates a running animation on the compositor side.
+  void UpdateOnCompositor();
+
   unsigned sequence_number_;
 
   const String animator_name_;
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
index 53856ef7..82f5de0 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
@@ -1889,7 +1889,7 @@
   else if (GetState().GetLineCap() == kSquareCap)
     delta *= kRoot2;
 
-  rect.Inflate(delta);
+  rect.Inflate(clampTo<float>(delta));
 }
 
 bool BaseRenderingContext2D::imageSmoothingEnabled() const {
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_overflow_menu_list_element.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_overflow_menu_list_element.cc
index 554e508..2733ab6 100644
--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_overflow_menu_list_element.cc
+++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_overflow_menu_list_element.cc
@@ -21,7 +21,11 @@
 
 void MediaControlOverflowMenuListElement::MaybeRecordTimeTaken(
     TimeTakenHistogram histogram_name) {
-  DCHECK(time_shown_);
+  // TODO(mlamouri): we may end up hitting a race where both actions and dismiss
+  // are fired very close to eachother. This change is meant to prevent a crash
+  // but doesn't avoid the sometimes incorrect metrics recording.
+  if (!time_shown_)
+    return;
 
   if (current_task_handle_.IsActive())
     current_task_handle_.Cancel();
diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.cc b/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.cc
index 6aad7c1..68990d10 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_buffer_source_node.cc
@@ -649,14 +649,12 @@
       playback_rate_(
           AudioParam::Create(context,
                              kParamTypeAudioBufferSourcePlaybackRate,
-                             "AudioBufferSource.playbackRate",
                              1.0,
                              AudioParamHandler::AutomationRate::kControl,
                              AudioParamHandler::AutomationRateMode::kFixed)),
       detune_(
           AudioParam::Create(context,
                              kParamTypeAudioBufferSourceDetune,
-                             "AudioBufferSource.detune",
                              0.0,
                              AudioParamHandler::AutomationRate::kControl,
                              AudioParamHandler::AutomationRateMode::kFixed)) {
diff --git a/third_party/blink/renderer/modules/webaudio/audio_listener.cc b/third_party/blink/renderer/modules/webaudio/audio_listener.cc
index fe21a83..33574aa 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_listener.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_listener.cc
@@ -38,63 +38,54 @@
     : position_x_(
           AudioParam::Create(context,
                              kParamTypeAudioListenerPositionX,
-                             "AudioListener.positionX",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       position_y_(
           AudioParam::Create(context,
                              kParamTypeAudioListenerPositionY,
-                             "AudioListener.positionY",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       position_z_(
           AudioParam::Create(context,
                              kParamTypeAudioListenerPositionZ,
-                             "AudioListener.positionZ",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       forward_x_(
           AudioParam::Create(context,
                              kParamTypeAudioListenerForwardX,
-                             "AudioListener.forwardX",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       forward_y_(
           AudioParam::Create(context,
                              kParamTypeAudioListenerForwardY,
-                             "AudioListener.forwardY",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       forward_z_(
           AudioParam::Create(context,
                              kParamTypeAudioListenerForwardZ,
-                             "AudioListener.forwardZ",
                              -1.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       up_x_(
           AudioParam::Create(context,
                              kParamTypeAudioListenerUpX,
-                             "AudioListener.upX",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       up_y_(
           AudioParam::Create(context,
                              kParamTypeAudioListenerUpY,
-                             "AudioListener.upY",
                              1.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       up_z_(
           AudioParam::Create(context,
                              kParamTypeAudioListenerUpZ,
-                             "AudioListener.upZ",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
diff --git a/third_party/blink/renderer/modules/webaudio/audio_param.cc b/third_party/blink/renderer/modules/webaudio/audio_param.cc
index 1faaf14..14df3dc8 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_param.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_param.cc
@@ -40,7 +40,6 @@
 
 AudioParamHandler::AudioParamHandler(BaseAudioContext& context,
                                      AudioParamType param_type,
-                                     String param_name,
                                      double default_value,
                                      AutomationRate rate,
                                      AutomationRateMode rate_mode,
@@ -48,7 +47,6 @@
                                      float max_value)
     : AudioSummingJunction(context.GetDeferredTaskHandler()),
       param_type_(param_type),
-      param_name_(param_name),
       intrinsic_value_(default_value),
       default_value_(default_value),
       automation_rate_(rate),
@@ -71,8 +69,82 @@
   param_type_ = param_type;
 }
 
+void AudioParamHandler::SetCustomParamName(const String name) {
+  DCHECK(param_type_ == kParamTypeAudioWorklet);
+  custom_param_name_ = name;
+}
+
 String AudioParamHandler::GetParamName() const {
-  return param_name_;
+  switch (GetParamType()) {
+    case kParamTypeAudioBufferSourcePlaybackRate:
+      return "AudioBufferSource.playbackRate";
+    case kParamTypeAudioBufferSourceDetune:
+      return "AudioBufferSource.detune";
+    case kParamTypeBiquadFilterFrequency:
+      return "BiquadFilter.frequency";
+    case kParamTypeBiquadFilterQ:
+      return "BiquadFilter.Q";
+    case kParamTypeBiquadFilterGain:
+      return "BiquadFilter.Gain";
+    case kParamTypeBiquadFilterDetune:
+      return "BiquadFilter.detune";
+    case kParamTypeDelayDelayTime:
+      return "Delay.delayTime";
+    case kParamTypeDynamicsCompressorThreshold:
+      return "DynamicsCompressor.threshold";
+    case kParamTypeDynamicsCompressorKnee:
+      return "DynamicsCompressor.knee";
+    case kParamTypeDynamicsCompressorRatio:
+      return "DynamicsCompressor.ratio";
+    case kParamTypeDynamicsCompressorAttack:
+      return "DynamicsCompressor.attack";
+    case kParamTypeDynamicsCompressorRelease:
+      return "DynamicsCompressor.release";
+    case kParamTypeGainGain:
+      return "Gain.gain";
+    case kParamTypeOscillatorFrequency:
+      return "Oscillator.frequency";
+    case kParamTypeOscillatorDetune:
+      return "Oscillator.detune";
+    case kParamTypeStereoPannerPan:
+      return "StereoPanner.pan";
+    case kParamTypePannerPositionX:
+      return "Panner.positionX";
+    case kParamTypePannerPositionY:
+      return "Panner.positionY";
+    case kParamTypePannerPositionZ:
+      return "Panner.positionZ";
+    case kParamTypePannerOrientationX:
+      return "Panner.orientationX";
+    case kParamTypePannerOrientationY:
+      return "Panner.orientationY";
+    case kParamTypePannerOrientationZ:
+      return "Panner.orientationZ";
+    case kParamTypeAudioListenerPositionX:
+      return "AudioListener.positionX";
+    case kParamTypeAudioListenerPositionY:
+      return "AudioListener.positionY";
+    case kParamTypeAudioListenerPositionZ:
+      return "AudioListener.positionZ";
+    case kParamTypeAudioListenerForwardX:
+      return "AudioListener.forwardX";
+    case kParamTypeAudioListenerForwardY:
+      return "AudioListener.forwardY";
+    case kParamTypeAudioListenerForwardZ:
+      return "AudioListener.forwardZ";
+    case kParamTypeAudioListenerUpX:
+      return "AudioListener.upX";
+    case kParamTypeAudioListenerUpY:
+      return "AudioListener.upY";
+    case kParamTypeAudioListenerUpZ:
+      return "AudioListener.upZ";
+    case kParamTypeConstantSourceOffset:
+      return "ConstantSource.offset";
+    case kParamTypeAudioWorklet:
+      return custom_param_name_;
+    default:
+      NOTREACHED();
+  }
 }
 
 float AudioParamHandler::Value() {
@@ -255,7 +327,6 @@
 
 AudioParam::AudioParam(BaseAudioContext& context,
                        AudioParamType param_type,
-                       String param_name,
                        double default_value,
                        AudioParamHandler::AutomationRate rate,
                        AudioParamHandler::AutomationRateMode rate_mode,
@@ -263,7 +334,6 @@
                        float max_value)
     : handler_(AudioParamHandler::Create(context,
                                          param_type,
-                                         param_name,
                                          default_value,
                                          rate,
                                          rate_mode,
@@ -273,7 +343,16 @@
 
 AudioParam* AudioParam::Create(BaseAudioContext& context,
                                AudioParamType param_type,
-                               String param_name,
+                               double default_value) {
+  return new AudioParam(context, param_type, default_value,
+                        AudioParamHandler::AutomationRate::kAudio,
+                        AudioParamHandler::AutomationRateMode::kVariable,
+                        -std::numeric_limits<float>::max(),
+                        std::numeric_limits<float>::max());
+}
+
+AudioParam* AudioParam::Create(BaseAudioContext& context,
+                               AudioParamType param_type,
                                double default_value,
                                AudioParamHandler::AutomationRate rate,
                                AudioParamHandler::AutomationRateMode rate_mode,
@@ -281,8 +360,8 @@
                                float max_value) {
   DCHECK_LE(min_value, max_value);
 
-  return new AudioParam(context, param_type, param_name, default_value, rate,
-                        rate_mode, min_value, max_value);
+  return new AudioParam(context, param_type, default_value, rate, rate_mode,
+                        min_value, max_value);
 }
 
 void AudioParam::Trace(blink::Visitor* visitor) {
@@ -337,6 +416,10 @@
   Handler().SetParamType(param_type);
 }
 
+void AudioParam::SetCustomParamName(const String name) {
+  Handler().SetCustomParamName(name);
+}
+
 String AudioParam::automationRate() const {
   switch (Handler().GetAutomationRate()) {
     case AudioParamHandler::AutomationRate::kAudio:
diff --git a/third_party/blink/renderer/modules/webaudio/audio_param.h b/third_party/blink/renderer/modules/webaudio/audio_param.h
index dc43b2c..96c782d 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_param.h
+++ b/third_party/blink/renderer/modules/webaudio/audio_param.h
@@ -112,6 +112,8 @@
 
   AudioParamType GetParamType() const { return param_type_; }
   void SetParamType(AudioParamType);
+  // Set the parameter name for an AudioWorklet.
+  void SetCustomParamName(const String name);
   // Return a nice name for the AudioParam.
   String GetParamName() const;
 
@@ -120,13 +122,12 @@
 
   static scoped_refptr<AudioParamHandler> Create(BaseAudioContext& context,
                                                  AudioParamType param_type,
-                                                 String param_name,
                                                  double default_value,
                                                  AutomationRate rate,
                                                  AutomationRateMode rate_mode,
                                                  float min_value,
                                                  float max_value) {
-    return base::AdoptRef(new AudioParamHandler(context, param_type, param_name,
+    return base::AdoptRef(new AudioParamHandler(context, param_type,
                                                 default_value, rate, rate_mode,
                                                 min_value, max_value));
   }
@@ -201,7 +202,6 @@
  private:
   AudioParamHandler(BaseAudioContext&,
                     AudioParamType,
-                    String param_name,
                     double default_value,
                     AutomationRate rate,
                     AutomationRateMode rate_mode,
@@ -221,9 +221,11 @@
   // node it belongs to.  Mostly for informational purposes and doesn't affect
   // implementation.
   AudioParamType param_type_;
-  // Name of the AudioParam. This is only used for printing out more
-  // informative warnings, and is otherwise arbitrary.
-  String param_name_;
+  // Name of the AudioParam. This is only used for printing out more informative
+  // warnings, and only used for AudioWorklets.  All others have a name derived
+  // from the |param_type_|.  Worklets need custom names because they're defined
+  // by the user.
+  String custom_param_name_;
 
   // Intrinsic value
   float intrinsic_value_;
@@ -253,10 +255,15 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
+  // The most common case where the rate, mode, and limits can default.
+  static AudioParam* Create(BaseAudioContext&,
+                            AudioParamType,
+                            double default_value);
+  // The general case where the rate and mode cannot use defaults (but the
+  // limits can).
   static AudioParam* Create(
       BaseAudioContext&,
       AudioParamType,
-      String param_name,
       double default_value,
       AudioParamHandler::AutomationRate rate,
       AudioParamHandler::AutomationRateMode rate_mode,
@@ -271,6 +278,7 @@
 
   AudioParamType GetParamType() const { return Handler().GetParamType(); }
   void SetParamType(AudioParamType);
+  void SetCustomParamName(const String name);
   String GetParamName() const;
 
   float value() const;
@@ -306,7 +314,6 @@
  private:
   AudioParam(BaseAudioContext&,
              AudioParamType,
-             String param_name,
              double default_value,
              AudioParamHandler::AutomationRate rate,
              AudioParamHandler::AutomationRateMode rate_mode,
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_node.cc b/third_party/blink/renderer/modules/webaudio/audio_worklet_node.cc
index b256c01..891d36f 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_worklet_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_node.cc
@@ -223,10 +223,11 @@
     String param_name = param_info.Name().IsolatedCopy();
     AudioParam* audio_param = AudioParam::Create(
         context, kParamTypeAudioWorklet,
-        "AudioWorklet(\"" + name + "\")." + param_name,
         param_info.DefaultValue(), AudioParamHandler::AutomationRate::kAudio,
         AudioParamHandler::AutomationRateMode::kVariable, param_info.MinValue(),
         param_info.MaxValue());
+    audio_param->SetCustomParamName("AudioWorkletNode(\"" + name + "\")." +
+                                    param_name);
     audio_param_map.Set(param_name, audio_param);
     param_handler_map.Set(param_name, WrapRefCounted(&audio_param->Handler()));
 
diff --git a/third_party/blink/renderer/modules/webaudio/biquad_filter_node.cc b/third_party/blink/renderer/modules/webaudio/biquad_filter_node.cc
index 6999fb1..d31cc7a 100644
--- a/third_party/blink/renderer/modules/webaudio/biquad_filter_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/biquad_filter_node.cc
@@ -71,7 +71,6 @@
       frequency_(
           AudioParam::Create(context,
                              kParamTypeBiquadFilterFrequency,
-                             "BiquadFilter.frequency",
                              350.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable,
@@ -79,21 +78,18 @@
                              context.sampleRate() / 2)),
       q_(AudioParam::Create(context,
                             kParamTypeBiquadFilterQ,
-                            "BiquadFilter.Q",
                             1.0,
                             AudioParamHandler::AutomationRate::kAudio,
                             AudioParamHandler::AutomationRateMode::kVariable)),
       gain_(
           AudioParam::Create(context,
                              kParamTypeBiquadFilterGain,
-                             "BiquadFilter.gain",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       detune_(AudioParam::Create(
           context,
           kParamTypeBiquadFilterDetune,
-          "BiquadFilter.detune",
           0.0,
           AudioParamHandler::AutomationRate::kAudio,
           AudioParamHandler::AutomationRateMode::kVariable)) {
diff --git a/third_party/blink/renderer/modules/webaudio/constant_source_node.cc b/third_party/blink/renderer/modules/webaudio/constant_source_node.cc
index 9e4142ae..3fe45de 100644
--- a/third_party/blink/renderer/modules/webaudio/constant_source_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/constant_source_node.cc
@@ -110,7 +110,6 @@
       offset_(AudioParam::Create(
           context,
           kParamTypeConstantSourceOffset,
-          "ConstantSource.offset",
           1,
           AudioParamHandler::AutomationRate::kAudio,
           AudioParamHandler::AutomationRateMode::kVariable)) {
diff --git a/third_party/blink/renderer/modules/webaudio/delay_node.cc b/third_party/blink/renderer/modules/webaudio/delay_node.cc
index 8ac9c28..a433e9307 100644
--- a/third_party/blink/renderer/modules/webaudio/delay_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/delay_node.cc
@@ -68,7 +68,6 @@
       delay_time_(
           AudioParam::Create(context,
                              kParamTypeDelayDelayTime,
-                             "Delay.delayTime",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable,
diff --git a/third_party/blink/renderer/modules/webaudio/dynamics_compressor_node.cc b/third_party/blink/renderer/modules/webaudio/dynamics_compressor_node.cc
index 5722aa2..dbf4430 100644
--- a/third_party/blink/renderer/modules/webaudio/dynamics_compressor_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/dynamics_compressor_node.cc
@@ -195,7 +195,6 @@
       threshold_(
           AudioParam::Create(context,
                              kParamTypeDynamicsCompressorThreshold,
-                             "DynamicsCompressor.threshold",
                              -24,
                              AudioParamHandler::AutomationRate::kControl,
                              AudioParamHandler::AutomationRateMode::kFixed,
@@ -203,7 +202,6 @@
                              0)),
       knee_(AudioParam::Create(context,
                                kParamTypeDynamicsCompressorKnee,
-                               "DynamicsCompressor.knee",
                                30,
                                AudioParamHandler::AutomationRate::kControl,
                                AudioParamHandler::AutomationRateMode::kFixed,
@@ -211,7 +209,6 @@
                                40)),
       ratio_(AudioParam::Create(context,
                                 kParamTypeDynamicsCompressorRatio,
-                                "DynamicsCompressor.ratio",
                                 12,
                                 AudioParamHandler::AutomationRate::kControl,
                                 AudioParamHandler::AutomationRateMode::kFixed,
@@ -219,7 +216,6 @@
                                 20)),
       attack_(AudioParam::Create(context,
                                  kParamTypeDynamicsCompressorAttack,
-                                 "DynamicsCompressor.attack",
                                  0.003,
                                  AudioParamHandler::AutomationRate::kControl,
                                  AudioParamHandler::AutomationRateMode::kFixed,
@@ -227,7 +223,6 @@
                                  1)),
       release_(AudioParam::Create(context,
                                   kParamTypeDynamicsCompressorRelease,
-                                  "DynamicsCompressor.release",
                                   0.250,
                                   AudioParamHandler::AutomationRate::kControl,
                                   AudioParamHandler::AutomationRateMode::kFixed,
diff --git a/third_party/blink/renderer/modules/webaudio/gain_node.cc b/third_party/blink/renderer/modules/webaudio/gain_node.cc
index dbeb5dd2..546e2d4d 100644
--- a/third_party/blink/renderer/modules/webaudio/gain_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/gain_node.cc
@@ -138,7 +138,6 @@
       gain_(AudioParam::Create(
           context,
           kParamTypeGainGain,
-          "Gain.gain",
           1.0,
           AudioParamHandler::AutomationRate::kAudio,
           AudioParamHandler::AutomationRateMode::kVariable)) {
diff --git a/third_party/blink/renderer/modules/webaudio/oscillator_node.cc b/third_party/blink/renderer/modules/webaudio/oscillator_node.cc
index ab6294e..a7c84e21 100644
--- a/third_party/blink/renderer/modules/webaudio/oscillator_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/oscillator_node.cc
@@ -473,7 +473,6 @@
       frequency_(
           AudioParam::Create(context,
                              kParamTypeOscillatorFrequency,
-                             "Oscillator.frequency",
                              440,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable,
@@ -483,7 +482,6 @@
       detune_(AudioParam::Create(
           context,
           kParamTypeOscillatorDetune,
-          "Oscillator.detune",
           0,
           AudioParamHandler::AutomationRate::kAudio,
           AudioParamHandler::AutomationRateMode::kVariable)) {
diff --git a/third_party/blink/renderer/modules/webaudio/panner_node.cc b/third_party/blink/renderer/modules/webaudio/panner_node.cc
index 846eb9b..3c5f8d6 100644
--- a/third_party/blink/renderer/modules/webaudio/panner_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/panner_node.cc
@@ -665,42 +665,36 @@
       position_x_(
           AudioParam::Create(context,
                              kParamTypePannerPositionX,
-                             "Panner.positionX",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       position_y_(
           AudioParam::Create(context,
                              kParamTypePannerPositionY,
-                             "Panner.positionY",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       position_z_(
           AudioParam::Create(context,
                              kParamTypePannerPositionZ,
-                             "Panner.positionZ",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       orientation_x_(
           AudioParam::Create(context,
                              kParamTypePannerOrientationX,
-                             "Panner.orientationX",
                              1.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       orientation_y_(
           AudioParam::Create(context,
                              kParamTypePannerOrientationY,
-                             "Panner.orientationY",
                              0.0,
                              AudioParamHandler::AutomationRate::kAudio,
                              AudioParamHandler::AutomationRateMode::kVariable)),
       orientation_z_(AudioParam::Create(
           context,
           kParamTypePannerOrientationZ,
-          "Panner.orientationZ",
           0.0,
           AudioParamHandler::AutomationRate::kAudio,
           AudioParamHandler::AutomationRateMode::kVariable)) {
diff --git a/third_party/blink/renderer/modules/webaudio/stereo_panner_node.cc b/third_party/blink/renderer/modules/webaudio/stereo_panner_node.cc
index 47be2cc..9ef38b6 100644
--- a/third_party/blink/renderer/modules/webaudio/stereo_panner_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/stereo_panner_node.cc
@@ -143,7 +143,6 @@
     : AudioNode(context),
       pan_(AudioParam::Create(context,
                               kParamTypeStereoPannerPan,
-                              "StereoPanner.pan",
                               0,
                               AudioParamHandler::AutomationRate::kAudio,
                               AudioParamHandler::AutomationRateMode::kVariable,
diff --git a/third_party/blink/renderer/platform/loader/cors/cors_error_string.cc b/third_party/blink/renderer/platform/loader/cors/cors_error_string.cc
index 2ad0718f..be05c48 100644
--- a/third_party/blink/renderer/platform/loader/cors/cors_error_string.cc
+++ b/third_party/blink/renderer/platform/loader/cors/cors_error_string.cc
@@ -37,15 +37,25 @@
 
 // static
 ErrorParameter ErrorParameter::Create(
-    const network::mojom::CORSError error,
+    const network::CORSErrorStatus& error_status,
     const KURL& first_url,
     const KURL& second_url,
     const int status_code,
     const HTTPHeaderMap& header_map,
     const SecurityOrigin& origin,
     const WebURLRequest::RequestContext context) {
-  return ErrorParameter(error, first_url, second_url, status_code, header_map,
-                        origin, context, String(), false);
+  String hint;
+  switch (error_status.cors_error) {
+    case network::mojom::CORSError::kMethodDisallowedByPreflightResponse:
+    case network::mojom::CORSError::kHeaderDisallowedByPreflightResponse:
+      DCHECK(!error_status.failed_parameter.empty());
+      hint = String(error_status.failed_parameter.c_str());
+      break;
+    default:
+      break;
+  }
+  return ErrorParameter(error_status.cors_error, first_url, second_url,
+                        status_code, header_map, origin, context, hint, false);
 }
 
 // static
diff --git a/third_party/blink/renderer/platform/loader/cors/cors_error_string.h b/third_party/blink/renderer/platform/loader/cors/cors_error_string.h
index 73bd0f9..8adfbf61 100644
--- a/third_party/blink/renderer/platform/loader/cors/cors_error_string.h
+++ b/third_party/blink/renderer/platform/loader/cors/cors_error_string.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_CORS_CORS_ERROR_STRING_H_
 
 #include "base/macros.h"
+#include "services/network/public/cpp/cors/cors_error_status.h"
 #include "services/network/public/mojom/cors.mojom-shared.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
@@ -23,7 +24,7 @@
 struct PLATFORM_EXPORT ErrorParameter {
   // Creates an ErrorParameter for generic cases. Use this function if |error|
   // can contain any.
-  static ErrorParameter Create(const network::mojom::CORSError,
+  static ErrorParameter Create(const network::CORSErrorStatus&,
                                const KURL& first_url,
                                const KURL& second_url,
                                const int status_code,
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
index d4a4429f1..54750ac 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
@@ -308,7 +308,8 @@
         if (!unused_preload) {
           Context().AddErrorConsoleMessage(
               CORS::GetErrorString(CORS::ErrorParameter::Create(
-                  *cors_error, redirect_response.Url(), new_url,
+                  network::CORSErrorStatus(*cors_error),
+                  redirect_response.Url(), new_url,
                   redirect_response.HttpStatusCode(),
                   redirect_response.HttpHeaderFields(), *source_origin.get(),
                   resource_->LastResourceRequest().GetRequestContext())),
@@ -487,7 +488,7 @@
   error_msg.Append(source_origin->ToString());
   error_msg.Append("' has been blocked by CORS policy: ");
   error_msg.Append(CORS::GetErrorString(CORS::ErrorParameter::Create(
-      *cors_error, initial_request.Url(), KURL(),
+      network::CORSErrorStatus(*cors_error), initial_request.Url(), KURL(),
       response_for_access_control.HttpStatusCode(),
       response_for_access_control.HttpHeaderFields(), *source_origin,
       initial_request.GetRequestContext())));
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 8414f8c..72bf86c 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -319,6 +319,10 @@
       status: "experimental",
     },
     {
+      name: "CSSPseudoIS",
+      status: "experimental",
+    },
+    {
       name: "CSSScrollSnapPoints",
       status: "experimental",
     },
diff --git a/third_party/blink/renderer/platform/scheduler/BUILD.gn b/third_party/blink/renderer/platform/scheduler/BUILD.gn
index a1b883e..7d2372f9 100644
--- a/third_party/blink/renderer/platform/scheduler/BUILD.gn
+++ b/third_party/blink/renderer/platform/scheduler/BUILD.gn
@@ -164,7 +164,13 @@
   testonly = true
 
   sources = [
-    "base/test_task_time_observer.h",
+    "base/test/task_queue_manager_for_test.cc",
+    "base/test/task_queue_manager_for_test.h",
+    "base/test/test_count_uses_time_source.cc",
+    "base/test/test_count_uses_time_source.h",
+    "base/test/test_task_queue.cc",
+    "base/test/test_task_queue.h",
+    "base/test/test_task_time_observer.h",
     "test/fake_frame_scheduler.h",
     "test/fake_page_scheduler.h",
     "test/fake_renderer_scheduler.cc",
@@ -173,10 +179,6 @@
     "test/lazy_thread_controller_for_test.cc",
     "test/lazy_thread_controller_for_test.h",
     "test/renderer_scheduler_test_support.cc",
-    "test/task_queue_manager_for_test.cc",
-    "test/task_queue_manager_for_test.h",
-    "test/test_task_queue.cc",
-    "test/test_task_queue.h",
   ]
 
   deps = [
@@ -194,8 +196,6 @@
     "base/intrusive_heap_unittest.cc",
     "base/task_queue_manager_impl_unittest.cc",
     "base/task_queue_selector_unittest.cc",
-    "base/test_count_uses_time_source.cc",
-    "base/test_count_uses_time_source.h",
     "base/time_domain_unittest.cc",
     "base/work_queue_sets_unittest.cc",
     "base/work_queue_unittest.cc",
diff --git a/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_impl_unittest.cc
index 42257fb..590054b 100644
--- a/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_impl_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_impl_unittest.cc
@@ -22,18 +22,17 @@
 #include "base/trace_event/blame_context.h"
 #include "components/viz/test/ordered_simple_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
-#include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
 #include "third_party/blink/renderer/platform/scheduler/base/real_time_domain.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_selector.h"
-#include "third_party/blink/renderer/platform/scheduler/base/test_count_uses_time_source.h"
-#include "third_party/blink/renderer/platform/scheduler/base/test_task_time_observer.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_count_uses_time_source.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_time_observer.h"
 #include "third_party/blink/renderer/platform/scheduler/base/thread_controller_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/base/virtual_time_domain.h"
 #include "third_party/blink/renderer/platform/scheduler/base/work_queue.h"
 #include "third_party/blink/renderer/platform/scheduler/base/work_queue_sets.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
-#include "third_party/blink/renderer/platform/scheduler/test/test_task_queue.h"
 
 using testing::AnyNumber;
 using testing::Contains;
@@ -87,7 +86,7 @@
     // A null clock triggers some assertions.
     now_src_.Advance(base::TimeDelta::FromMicroseconds(1000));
     manager_ = TaskQueueManagerForTest::Create(
-        message_loop_.get(), GetSingleThreadTaskRunnerForTesting(), &now_src_);
+        message_loop_.get(), base::ThreadTaskRunnerHandle::Get(), &now_src_);
 
     for (size_t i = 0; i < num_queues; i++)
       runners_.push_back(CreateTaskQueue());
@@ -160,7 +159,7 @@
   TestCountUsesTimeSource test_count_uses_time_source;
 
   manager_ = TaskQueueManagerForTest::Create(
-      nullptr, GetSingleThreadTaskRunnerForTesting(),
+      nullptr, base::ThreadTaskRunnerHandle::Get(),
       &test_count_uses_time_source);
   manager_->SetWorkBatchSize(6);
   manager_->AddTaskTimeObserver(&test_task_time_observer_);
diff --git a/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_perftest.cc b/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_perftest.cc
index acaf725..58405dd 100644
--- a/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_perftest.cc
+++ b/third_party/blink/renderer/platform/scheduler/base/task_queue_manager_perftest.cc
@@ -19,11 +19,11 @@
 #include "testing/perf/perf_test.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_selector.h"
-#include "third_party/blink/renderer/platform/scheduler/base/test_task_time_observer.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_time_observer.h"
 #include "third_party/blink/renderer/platform/scheduler/base/virtual_time_domain.h"
 #include "third_party/blink/renderer/platform/scheduler/base/work_queue_sets.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
-#include "third_party/blink/renderer/platform/scheduler/test/test_task_queue.h"
 
 namespace blink {
 namespace scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.cc b/third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.cc
similarity index 96%
rename from third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.cc
rename to third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.cc
index cfa0fcc9..50773e19 100644
--- a/third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.cc
+++ b/third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_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/platform/scheduler/test/task_queue_manager_for_test.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 
 #include "third_party/blink/renderer/platform/scheduler/base/thread_controller_impl.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h b/third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h
similarity index 82%
rename from third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h
rename to third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h
index 5ad15825..1b95198 100644
--- a/third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h
+++ b/third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h
@@ -2,8 +2,8 @@
 // source code is governed by a BSD-style license that can be found in the
 // LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_TASK_QUEUE_MANAGER_FOR_TEST_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_TASK_QUEUE_MANAGER_FOR_TEST_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TASK_QUEUE_MANAGER_FOR_TEST_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TASK_QUEUE_MANAGER_FOR_TEST_H_
 
 #include "base/single_thread_task_runner.h"
 #include "base/time/tick_clock.h"
@@ -44,4 +44,4 @@
 }  // namespace scheduler
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_TASK_QUEUE_MANAGER_FOR_TEST_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TASK_QUEUE_MANAGER_FOR_TEST_H_
diff --git a/third_party/blink/renderer/platform/scheduler/base/test_count_uses_time_source.cc b/third_party/blink/renderer/platform/scheduler/base/test/test_count_uses_time_source.cc
similarity index 87%
rename from third_party/blink/renderer/platform/scheduler/base/test_count_uses_time_source.cc
rename to third_party/blink/renderer/platform/scheduler/base/test/test_count_uses_time_source.cc
index 9b6e17a..1241b3b7 100644
--- a/third_party/blink/renderer/platform/scheduler/base/test_count_uses_time_source.cc
+++ b/third_party/blink/renderer/platform/scheduler/base/test/test_count_uses_time_source.cc
@@ -1,8 +1,8 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
+// 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 "third_party/blink/renderer/platform/scheduler/base/test_count_uses_time_source.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_count_uses_time_source.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/base/test_count_uses_time_source.h b/third_party/blink/renderer/platform/scheduler/base/test/test_count_uses_time_source.h
similarity index 83%
rename from third_party/blink/renderer/platform/scheduler/base/test_count_uses_time_source.h
rename to third_party/blink/renderer/platform/scheduler/base/test/test_count_uses_time_source.h
index c953ab1..f409955 100644
--- a/third_party/blink/renderer/platform/scheduler/base/test_count_uses_time_source.h
+++ b/third_party/blink/renderer/platform/scheduler/base/test/test_count_uses_time_source.h
@@ -1,9 +1,9 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
+// 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 THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_COUNT_USES_TIME_SOURCE_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_COUNT_USES_TIME_SOURCE_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TEST_COUNT_USES_TIME_SOURCE_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TEST_COUNT_USES_TIME_SOURCE_H_
 
 #include "base/macros.h"
 #include "base/time/tick_clock.h"
@@ -28,4 +28,4 @@
 }  // namespace scheduler
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_COUNT_USES_TIME_SOURCE_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TEST_COUNT_USES_TIME_SOURCE_H_
diff --git a/third_party/blink/renderer/platform/scheduler/test/test_task_queue.cc b/third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.cc
similarity index 72%
rename from third_party/blink/renderer/platform/scheduler/test/test_task_queue.cc
rename to third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.cc
index 340b05d..be5fa93 100644
--- a/third_party/blink/renderer/platform/scheduler/test/test_task_queue.cc
+++ b/third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.cc
@@ -1,8 +1,8 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
+// 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 "third_party/blink/renderer/platform/scheduler/test/test_task_queue.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.h"
 
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl.h"
 
@@ -11,8 +11,7 @@
 
 TestTaskQueue::TestTaskQueue(std::unique_ptr<internal::TaskQueueImpl> impl,
                              const TaskQueue::Spec& spec)
-    : TaskQueue(std::move(impl), spec),
-      weak_factory_(this) {}
+    : TaskQueue(std::move(impl), spec), weak_factory_(this) {}
 
 TestTaskQueue::~TestTaskQueue() = default;
 
diff --git a/third_party/blink/renderer/platform/scheduler/test/test_task_queue.h b/third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.h
similarity index 69%
rename from third_party/blink/renderer/platform/scheduler/test/test_task_queue.h
rename to third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.h
index 9c834f4..6fbd297 100644
--- a/third_party/blink/renderer/platform/scheduler/test/test_task_queue.h
+++ b/third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.h
@@ -1,9 +1,9 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
+// 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 THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_TEST_TASK_QUEUE_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_TEST_TASK_QUEUE_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TEST_TASK_QUEUE_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TEST_TASK_QUEUE_H_
 
 #include "base/memory/weak_ptr.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue.h"
@@ -29,4 +29,4 @@
 }  // namespace scheduler
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_TEST_TEST_TASK_QUEUE_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TEST_TASK_QUEUE_H_
diff --git a/third_party/blink/renderer/platform/scheduler/base/test_task_time_observer.h b/third_party/blink/renderer/platform/scheduler/base/test/test_task_time_observer.h
similarity index 82%
rename from third_party/blink/renderer/platform/scheduler/base/test_task_time_observer.h
rename to third_party/blink/renderer/platform/scheduler/base/test/test_task_time_observer.h
index 62a4db3b..1364bfa 100644
--- a/third_party/blink/renderer/platform/scheduler/base/test_task_time_observer.h
+++ b/third_party/blink/renderer/platform/scheduler/base/test/test_task_time_observer.h
@@ -1,9 +1,9 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
+// 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 THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TASK_TIME_OBSERVER_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TASK_TIME_OBSERVER_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TEST_TASK_TIME_OBSERVER_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TEST_TASK_TIME_OBSERVER_H_
 
 #include "base/time/time.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_time_observer.h"
@@ -20,4 +20,4 @@
 }  // namespace scheduler
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TASK_TIME_OBSERVER_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_BASE_TEST_TEST_TASK_TIME_OBSERVER_H_
diff --git a/third_party/blink/renderer/platform/scheduler/child/idle_canceled_delayed_task_sweeper_unittest.cc b/third_party/blink/renderer/platform/scheduler/child/idle_canceled_delayed_task_sweeper_unittest.cc
index 3960b38..328445f 100644
--- a/third_party/blink/renderer/platform/scheduler/child/idle_canceled_delayed_task_sweeper_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/child/idle_canceled_delayed_task_sweeper_unittest.cc
@@ -9,10 +9,10 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/scheduler/base/lazy_now.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/child/idle_helper.h"
 #include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_helper.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 
 namespace blink {
 namespace scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/child/idle_helper_unittest.cc b/third_party/blink/renderer/platform/scheduler/child/idle_helper_unittest.cc
index df65ee8..946be29 100644
--- a/third_party/blink/renderer/platform/scheduler/child/idle_helper_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/child/idle_helper_unittest.cc
@@ -18,8 +18,8 @@
 #include "third_party/blink/renderer/platform/scheduler/base/real_time_domain.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_manager.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h"
 
 using testing::_;
diff --git a/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_proxy_unittest.cc b/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_proxy_unittest.cc
index 707f3dc8..f78b06c36 100644
--- a/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_proxy_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_proxy_unittest.cc
@@ -7,11 +7,11 @@
 #include "components/viz/test/ordered_simple_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/child/webthread_impl_for_worker_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.h"
 #include "third_party/blink/renderer/platform/waitable_event.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_unittest.cc b/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_unittest.cc
index 1d9f562..4ecb26b 100644
--- a/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/child/worker_scheduler_unittest.cc
@@ -10,7 +10,7 @@
 #include "base/test/test_simple_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/common/scheduler_helper_unittest.cc b/third_party/blink/renderer/platform/scheduler/common/scheduler_helper_unittest.cc
index 4cc7fba..a6ee224 100644
--- a/third_party/blink/renderer/platform/scheduler/common/scheduler_helper_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/scheduler_helper_unittest.cc
@@ -14,7 +14,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/scheduler/base/lazy_now.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h"
 
 using testing::_;
diff --git a/third_party/blink/renderer/platform/scheduler/common/throttling/budget_pool_unittest.cc b/third_party/blink/renderer/platform/scheduler/common/throttling/budget_pool_unittest.cc
index 09b4f14..5cd5849 100644
--- a/third_party/blink/renderer/platform/scheduler/common/throttling/budget_pool_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/throttling/budget_pool_unittest.cc
@@ -15,11 +15,11 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/common/throttling/budget_pool.h"
 #include "third_party/blink/renderer/platform/scheduler/common/throttling/cpu_time_budget_pool.h"
 #include "third_party/blink/renderer/platform/scheduler/common/throttling/wake_up_budget_pool.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 
 namespace blink {
 namespace scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler_unittest.cc b/third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler_unittest.cc
index e8d57e2..53ce2e1 100644
--- a/third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/common/throttling/task_queue_throttler_unittest.cc
@@ -18,11 +18,11 @@
 #include "third_party/blink/renderer/platform/scheduler/base/real_time_domain.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_manager.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/common/throttling/budget_pool.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/renderer/auto_advancing_virtual_time_domain.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 
 using testing::ElementsAre;
 
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc
index 763ac9e..1f40847 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc
@@ -12,9 +12,9 @@
 #include "components/viz/test/ordered_simple_task_runner.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 #include "third_party/blink/renderer/platform/web_task_runner.h"
 
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
index c7bfb7e..0fa0f8c 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
@@ -22,11 +22,11 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/page/launching_process_state.h"
 #include "third_party/blink/renderer/platform/scheduler/base/real_time_domain.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/child/features.h"
 #include "third_party/blink/renderer/platform/scheduler/common/throttling/budget_pool.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/renderer/auto_advancing_virtual_time_domain.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl_unittest.cc
index 0b5260d..d731c99 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl_unittest.cc
@@ -16,10 +16,10 @@
 #include "components/viz/test/ordered_simple_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/child/task_runner_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 
 using testing::ElementsAre;
diff --git a/third_party/blink/renderer/platform/scheduler/renderer/auto_advancing_virtual_time_domain_unittest.cc b/third_party/blink/renderer/platform/scheduler/renderer/auto_advancing_virtual_time_domain_unittest.cc
index af07588..0d78251 100644
--- a/third_party/blink/renderer/platform/scheduler/renderer/auto_advancing_virtual_time_domain_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/renderer/auto_advancing_virtual_time_domain_unittest.cc
@@ -10,9 +10,9 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_manager.h"
-#include "third_party/blink/renderer/platform/scheduler/base/test_task_time_observer.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
-#include "third_party/blink/renderer/platform/scheduler/test/test_task_queue.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_time_observer.h"
 #include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/scheduler/renderer/idle_time_estimator_unittest.cc b/third_party/blink/renderer/platform/scheduler/renderer/idle_time_estimator_unittest.cc
index 326bdcc..f02498c 100644
--- a/third_party/blink/renderer/platform/scheduler/renderer/idle_time_estimator_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/renderer/idle_time_estimator_unittest.cc
@@ -12,9 +12,9 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_manager.h"
-#include "third_party/blink/renderer/platform/scheduler/base/test_task_time_observer.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
-#include "third_party/blink/renderer/platform/scheduler/test/test_task_queue.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_queue.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/test_task_time_observer.h"
 
 namespace blink {
 namespace scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/renderer/renderer_metrics_helper_unittest.cc b/third_party/blink/renderer/platform/scheduler/renderer/renderer_metrics_helper_unittest.cc
index 3b2cd3f..b373f18 100644
--- a/third_party/blink/renderer/platform/scheduler/renderer/renderer_metrics_helper_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/renderer/renderer_metrics_helper_unittest.cc
@@ -12,11 +12,11 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/page/launching_process_state.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/test/fake_frame_scheduler.h"
 #include "third_party/blink/renderer/platform/scheduler/test/fake_page_scheduler.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 
 namespace blink {
 namespace scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/renderer/webthread_impl_for_renderer_scheduler_unittest.cc b/third_party/blink/renderer/platform/scheduler/renderer/webthread_impl_for_renderer_scheduler_unittest.cc
index f10992d..982e69cf 100644
--- a/third_party/blink/renderer/platform/scheduler/renderer/webthread_impl_for_renderer_scheduler_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/renderer/webthread_impl_for_renderer_scheduler_unittest.cc
@@ -15,8 +15,8 @@
 #include "base/test/simple_test_tick_clock.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 
 namespace blink {
 namespace scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/test/renderer_scheduler_test_support.cc b/third_party/blink/renderer/platform/scheduler/test/renderer_scheduler_test_support.cc
index dadc3ec..f4ae842c 100644
--- a/third_party/blink/renderer/platform/scheduler/test/renderer_scheduler_test_support.cc
+++ b/third_party/blink/renderer/platform/scheduler/test/renderer_scheduler_test_support.cc
@@ -10,9 +10,9 @@
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "third_party/blink/renderer/platform/scheduler/base/task_queue_manager_impl.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h"
 #include "third_party/blink/renderer/platform/scheduler/test/lazy_thread_controller_for_test.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
 
 namespace blink {
 namespace scheduler {
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler_unittest.cc b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler_unittest.cc
index fe4fb13d..1d1680f714 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/worker_thread_scheduler_unittest.cc
@@ -12,7 +12,7 @@
 #include "components/viz/test/ordered_simple_task_runner.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 
 using testing::ElementsAreArray;
 
diff --git a/third_party/blink/renderer/platform/scroll/scroll_animator.cc b/third_party/blink/renderer/platform/scroll/scroll_animator.cc
index 57675df..f0615c1 100644
--- a/third_party/blink/renderer/platform/scroll/scroll_animator.cc
+++ b/third_party/blink/renderer/platform/scroll/scroll_animator.cc
@@ -161,7 +161,8 @@
     DCHECK(run_state_ == RunState::kRunningOnMainThread ||
            run_state_ == RunState::kRunningOnCompositor ||
            run_state_ == RunState::kRunningOnCompositorButNeedsUpdate ||
-           run_state_ == RunState::kRunningOnCompositorButNeedsTakeover);
+           run_state_ == RunState::kRunningOnCompositorButNeedsTakeover ||
+           run_state_ == RunState::kRunningOnCompositorButNeedsAdjustment);
 
     // Running on the main thread, simply update the target offset instead
     // of sending to the compositor.
diff --git a/third_party/blink/renderer/platform/testing/testing_platform_support_with_mock_scheduler.h b/third_party/blink/renderer/platform/testing/testing_platform_support_with_mock_scheduler.h
index 8b483633..45f57648 100644
--- a/third_party/blink/renderer/platform/testing/testing_platform_support_with_mock_scheduler.h
+++ b/third_party/blink/renderer/platform/testing/testing_platform_support_with_mock_scheduler.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include "base/test/simple_test_tick_clock.h"
 #include "third_party/blink/public/platform/web_thread.h"
-#include "third_party/blink/renderer/platform/scheduler/test/task_queue_manager_for_test.h"
+#include "third_party/blink/renderer/platform/scheduler/base/test/task_queue_manager_for_test.h"
 #include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
 #include "third_party/blink/renderer/platform/wtf/noncopyable.h"
 
diff --git a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
index 7ec37b3c..4deee9cb 100644
--- a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
+++ b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
@@ -711,7 +711,7 @@
   std::string filename;
   if (!GetFilename(info->record()->getLocStart(), &filename))
     return false;  // TODO: should we ignore non-existing file locations?
-#if defined(LLVM_ON_WIN32)
+#if defined(_WIN32)
   std::replace(filename.begin(), filename.end(), '\\', '/');
 #endif
   for (const auto& dir : options_.ignored_directories)
diff --git a/tools/clang/plugins/ChromeClassTester.cpp b/tools/clang/plugins/ChromeClassTester.cpp
index ecc3e82..ae4bb2eb 100644
--- a/tools/clang/plugins/ChromeClassTester.cpp
+++ b/tools/clang/plugins/ChromeClassTester.cpp
@@ -17,7 +17,7 @@
 #ifdef LLVM_ON_UNIX
 #include <sys/param.h>
 #endif
-#if defined(LLVM_ON_WIN32)
+#if defined(_WIN32)
 #include <windows.h>
 #endif
 
@@ -154,7 +154,11 @@
       break;
     }
     record_location =
+#if defined(LLVM_FORCE_HEAD_REVISION)
+        source_manager.getImmediateExpansionRange(record_location).getBegin();
+#else
         source_manager.getImmediateExpansionRange(record_location).first;
+#endif
   }
 
   return false;
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index b3bad52..00cdf60 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -156,8 +156,6 @@
 
       'Android Builder (dbg) Goma Canary': 'android_debug_static_bot_vrdata',
 
-      'Android deterministic': 'android_without_codecs_release_bot_minimal_symbols',
-      'Android deterministic (dbg)': 'android_debug_bot',
       'Browser Side Navigation Linux': 'release_bot',
       'CFI Linux CF': 'cfi_full_cfi_icall_cfi_diag_recover_release_static',
       'CFI Linux ToT': 'clang_tot_cfi_full_cfi_icall_cfi_diag_thin_lto_release_static_dcheck_always_on',
@@ -226,8 +224,6 @@
       'Linux ARM64': 'release_bot_arm64',
       'Linux ARM64 (dbg)': 'debug_bot_arm64',
       'Linux Clang Analyzer': 'linux_chromium_analysis',
-      'Linux deterministic': 'release_bot',
-      'Linux deterministic (dbg)': 'debug_bot',
       'Linux remote_run Builder': 'release_bot',
       'Linux remote_run Tester': 'release_bot',
       'Linux Viz': 'release_trybot',
@@ -345,6 +341,7 @@
       'Fuchsia x64': 'release_bot_fuchsia',
       'Ozone Linux': 'ozone_linux_release_bot',
       'linux-gcc-rel': 'release_bot_x86_minimal_symbols_no_clang_cxx11',
+      'linux-ozone-rel': 'ozone_linux_release_bot',
     },
 
     'chromium.lkgr': {
@@ -611,7 +608,9 @@
       'leak_detection_linux': 'release_trybot',
       'linux-blink-heap-incremental-marking': 'debug_trybot_enable_blink_heap_incremental_marking',
       'linux-blink-heap-verification-try': 'release_trybot_enable_blink_heap_verification',
+      'linux-gcc-rel': 'release_bot_x86_minimal_symbols_no_clang_cxx11',
       'linux-jumbo-rel': 'jumbo_release_bot_minimal_symbols',
+      'linux-ozone-rel': 'ozone_linux_release_trybot',
       'linux_arm': 'release_trybot_arm',
       'linux_chromium_archive_rel_ng': 'release_bot',
       'linux_chromium_asan_rel_ng': 'asan_lsan_release_trybot',
@@ -648,7 +647,6 @@
       'linux_site_isolation': 'release_trybot',
       'linux_upload_clang': 'release_bot',
       'linux_vr': 'vr_release_trybot',
-      'linux-gcc-rel': 'release_bot_x86_minimal_symbols_no_clang_cxx11',
     },
 
     'tryserver.chromium.mac': {
@@ -1453,6 +1451,10 @@
       'ozone_linux', 'release_bot',
     ],
 
+    'ozone_linux_release_trybot': [
+      'ozone_linux', 'release_trybot',
+    ],
+
     'ozone_linux_release_trybot_compile_only': [
       'ozone_linux', 'release_trybot', 'compile_only',
     ],
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index f832032..908d5db 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -2862,7 +2862,7 @@
   <int value="25" label="OBSOLETE_DBMF_DB_NOT_OPEN_ON_CLOSE"/>
   <int value="26" label="OBSOLETE_DBMF_INVALID_ORIGIN_ON_SQLITE_ERROR"/>
   <int value="27" label="RDH_INVALID_PRIORITY"/>
-  <int value="28" label="RDH_REQUEST_NOT_TRANSFERRING"/>
+  <int value="28" label="OBSOLETE_RDH_REQUEST_NOT_TRANSFERRING"/>
   <int value="29" label="RDH_BAD_DOWNLOAD"/>
   <int value="30" label="OBSOLETE_NMF_NO_PERMISSION_SHOW"/>
   <int value="31" label="OBSOLETE_NMF_NO_PERMISSION_CLOSE"/>
@@ -2942,8 +2942,8 @@
   <int value="103" label="DWNLD_INVALID_SAVABLE_RESOURCE_LINKS_RESPONSE"/>
   <int value="104" label="DWNLD_INVALID_SERIALIZE_AS_MHTML_RESPONSE"/>
   <int value="105" label="BDH_DEVICE_NOT_ALLOWED_FOR_ORIGIN"/>
-  <int value="106" label="ACI_WRONG_STORAGE_PARTITION"/>
-  <int value="107" label="RDHI_WRONG_STORAGE_PARTITION"/>
+  <int value="106" label="OBSOLETE_ACI_WRONG_STORAGE_PARTITION"/>
+  <int value="107" label="OBSOLETE_RDHI_WRONG_STORAGE_PARTITION"/>
   <int value="108" label="RDH_INVALID_REQUEST_ID"/>
   <int value="109" label="BDH_SERVICE_NOT_ALLOWED_FOR_ORIGIN"/>
   <int value="110" label="WSI_UNEXPECTED_ADD_CHANNEL_REQUEST"/>
@@ -2984,8 +2984,8 @@
       label="OBSOLETE_SWDH_ENABLE_NAVIGATION_PRELOAD_INVALID_ORIGIN"/>
   <int value="145"
       label="OBSOLETE_SWDH_ENABLE_NAVIGATION_PRELOAD_BAD_REGISTRATION_ID"/>
-  <int value="146" label="RDH_TRANSFERRING_REQUEST_NOT_FOUND"/>
-  <int value="147" label="RDH_TRANSFERRING_NONNAVIGATIONAL_REQUEST"/>
+  <int value="146" label="OBSOLETE_RDH_TRANSFERRING_REQUEST_NOT_FOUND"/>
+  <int value="147" label="OBSOLETE_RDH_TRANSFERRING_NONNAVIGATIONAL_REQUEST"/>
   <int value="148" label="OBSOLETE_SWDH_GET_NAVIGATION_PRELOAD_STATE_NO_HOST"/>
   <int value="149"
       label="OBSOLETE_SWDH_GET_NAVIGATION_PRELOAD_STATE_INVALID_ORIGIN"/>
@@ -18489,6 +18489,7 @@
   <int value="2428" label="ShapeOutsideMarginBox"/>
   <int value="2429" label="PerformanceTimeline"/>
   <int value="2430" label="UserTiming"/>
+  <int value="2431" label="CSSSelectorPseudoIS"/>
 </enum>
 
 <enum name="FeedbackSource">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index a1e41f3..f0facc5 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -118639,10 +118639,11 @@
              (desktop) or background app (mobile), or because it isn't active
              in its tab strip."/>
   <suffix name="Occluded"
-      label="The tab is fully covered by other windows. ChromeOS-only."/>
+      label="The tab is fully covered by other windows. ChromeOS and Mac OS X
+             only."/>
   <suffix name="Visible"
-      label="The tab is visible. Except on ChromeOS, a tab fully covered by
-             other windows is considered visible."/>
+      label="The tab is visible. Except on ChromeOS and Mac OS X, a tab fully
+             covered by other windows is considered visible."/>
   <affected-histogram name="Tab.Visibility"/>
 </histogram_suffixes>
 
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index f675207..14600f5 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -2492,6 +2492,12 @@
       by the origin site (rather than the user).
     </summary>
   </metric>
+  <metric name="save_data_enabled">
+    <summary>
+      Set to 1 if the data saver feature was enabled in Chrome at the time of
+      the page commit.
+    </summary>
+  </metric>
   <metric name="server_lofi">
     <summary>
       Set to 1 when a user is shown a server lo-fi image in a page load.
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py
index c0c98c8..e531f7a8 100755
--- a/tools/perf/core/perf_data_generator.py
+++ b/tools/perf/core/perf_data_generator.py
@@ -962,15 +962,16 @@
       'tests': [
         {
           'isolate': 'performance_test_suite',
+          'num_shards': 26
         },
         {
           'isolate': 'net_perftests',
-          'shards': [0],
+          'num_shards': 1,
           'telemetry': False,
         },
         {
           'isolate': 'views_perftests',
-          'shards': [1],
+          'num_shards': 1,
           'telemetry': False,
         }
       ],
@@ -981,13 +982,6 @@
         'gpu': '1002:6821'
       },
       'device_ids': [
-          'build246-a9', 'build247-a9', 'build248-a9', 'build249-a9',
-          'build250-a9', 'build251-a9', 'build252-a9', 'build253-a9',
-          'build254-a9', 'build255-a9', 'build256-a9', 'build257-a9',
-          'build258-a9', 'build259-a9', 'build260-a9', 'build261-a9',
-          'build262-a9', 'build263-a9', 'build264-a9', 'build265-a9',
-          'build266-a9', 'build267-a9', 'build268-a9', 'build269-a9',
-          'build270-a9', 'build271-a9'
       ],
     },
     'One Buildbot Step Test Builder': {
@@ -995,23 +989,22 @@
         {
           'isolate': 'telemetry_perf_tests_without_chrome',
           'extra_args': ['--xvfb'],
+          'num_shards': 3
         },
         {
           'isolate': 'load_library_perf_tests',
-          'shards': [0],
+          'num_shards': 1,
           'telemetry': False,
         }
       ],
       'platform': 'linux',
       'dimension': {
+        'gpu': 'none',
         'pool': 'chrome.tests.perf-fyi',
         'os': 'Linux',
       },
       'testing': True,
       'device_ids': [
-          'swarm77-c7',
-          'swarm78-c7',
-          'swarm79-c7'
       ],
     },
     'Android Go': {
@@ -1019,19 +1012,17 @@
         {
           'name': 'performance_test_suite',
           'isolate': 'performance_test_suite',
+          'num_shards': 14
         }
       ],
       'platform': 'android',
       'dimension': {
+        'device_os': 'O',
+        'device_type': 'gobo',
         'pool': 'chrome.tests.perf-fyi',
         'os': 'Android',
       },
       'device_ids': [
-          'build30-a7--device1', 'build30-a7--device2', 'build30-a7--device3',
-          'build30-a7--device4', 'build30-a7--device5', 'build30-a7--device6',
-          'build30-a7--device7', 'build31-a7--device1', 'build31-a7--device2',
-          'build31-a7--device3', 'build31-a7--device4', 'build31-a7--device5',
-          'build31-a7--device6', 'build31-a7--device7'
       ],
     }
   }
@@ -1057,6 +1048,7 @@
         'os': 'Mac-10.12',
         'gpu': '8086:1626'
       },
+      'shards': 26,
       'device_ids': [
           'build41-a7', 'build42-a7', 'build43-a7', 'build44-a7',
           'build45-a7', 'build46-a7', 'build47-a7', 'build48-a7',
@@ -1128,12 +1120,15 @@
   test_entry['trigger_script'] = {
       'script': '//testing/trigger_scripts/perf_device_trigger.py',
       'args': [
-          '--multiple-trigger-configs',
-          json.dumps(dimensions),
           '--multiple-dimension-script-verbose',
           'True'
       ],
   }
+  # Only want to append multiple-trigger-configs if we don't support
+  # soft device affinity
+  if len(dimensions):
+    test_entry['trigger_script']['args'].append('--multiple-trigger-configs')
+    test_entry['trigger_script']['args'].append(json.dumps(dimensions))
   test_entry['merge'] = {
       'script': '//tools/perf/process_perf_results.py',
       'args': [
@@ -1210,7 +1205,12 @@
       isolate_name
     ]
   }
+  # For now we either get shards from the number of devices specified
+  # or a test entry needs to specify the num shards if it supports
+  # soft device affinity.
   shards = add_common_test_properties(result, tester_config, test)
+  if not shards:
+    shards = test.get('num_shards')
   result['swarming'] = {
     # Always say this is true regardless of whether the tester
     # supports swarming. It doesn't hurt.
diff --git a/ui/events/BUILD.gn b/ui/events/BUILD.gn
index 5f5f9bb..688eaa8 100644
--- a/ui/events/BUILD.gn
+++ b/ui/events/BUILD.gn
@@ -149,6 +149,7 @@
     "keyboard_hook_base.h",
     "keycodes/platform_key_map_win.cc",
     "keycodes/platform_key_map_win.h",
+    "mac/keyboard_hook_mac.mm",
     "null_event_targeter.cc",
     "null_event_targeter.h",
     "scoped_target_handler.cc",
@@ -180,7 +181,7 @@
   if (use_x11) {
     sources += [
       "x/events_x.cc",
-      "x/keyboard_hook_posix.cc",
+      "x/keyboard_hook_x11.cc",
     ]
     configs += [ "//build/config/linux:x11" ]
     deps += [
diff --git a/ui/events/mac/keyboard_hook_mac.mm b/ui/events/mac/keyboard_hook_mac.mm
new file mode 100644
index 0000000..f0eea67
--- /dev/null
+++ b/ui/events/mac/keyboard_hook_mac.mm
@@ -0,0 +1,16 @@
+// 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 "ui/events/keyboard_hook.h"
+
+namespace ui {
+
+// static
+std::unique_ptr<KeyboardHook> KeyboardHook::Create(
+    base::Optional<base::flat_set<int>> key_codes,
+    KeyEventCallback callback) {
+  return nullptr;
+}
+
+}  // namespace ui
diff --git a/ui/events/x/keyboard_hook_posix.cc b/ui/events/x/keyboard_hook_posix.cc
deleted file mode 100644
index 17c59bd..0000000
--- a/ui/events/x/keyboard_hook_posix.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 "ui/events/keyboard_hook_base.h"
-
-#include "base/callback.h"
-#include "base/macros.h"
-#include "base/optional.h"
-#include "ui/events/event.h"
-
-namespace ui {
-
-namespace {
-
-// A default implementation for POSIX platforms.
-class KeyboardHookPosix : public KeyboardHookBase {
- public:
-  KeyboardHookPosix(base::Optional<base::flat_set<int>> native_key_codes,
-                    KeyEventCallback callback);
-  ~KeyboardHookPosix() override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(KeyboardHookPosix);
-};
-
-KeyboardHookPosix::KeyboardHookPosix(
-    base::Optional<base::flat_set<int>> key_codes,
-    KeyEventCallback callback)
-    : KeyboardHookBase(std::move(key_codes), std::move(callback)) {}
-
-KeyboardHookPosix::~KeyboardHookPosix() = default;
-
-}  // namespace
-
-// static
-std::unique_ptr<KeyboardHook> KeyboardHook::Create(
-    base::Optional<base::flat_set<int>> native_key_codes,
-    KeyboardHook::KeyEventCallback callback) {
-  return nullptr;
-}
-
-}  // namespace ui
diff --git a/ui/events/x/keyboard_hook_x11.cc b/ui/events/x/keyboard_hook_x11.cc
new file mode 100644
index 0000000..c2d21e5
--- /dev/null
+++ b/ui/events/x/keyboard_hook_x11.cc
@@ -0,0 +1,56 @@
+// 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 "base/callback.h"
+#include "base/containers/flat_set.h"
+#include "base/macros.h"
+#include "base/optional.h"
+#include "ui/events/keyboard_hook_base.h"
+
+namespace ui {
+
+namespace {
+
+// A default implementation for the X11 platform.
+class KeyboardHookX11 : public KeyboardHookBase {
+ public:
+  KeyboardHookX11(base::Optional<base::flat_set<int>> native_key_codes,
+                  KeyEventCallback callback);
+  ~KeyboardHookX11() override;
+
+  bool Register();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(KeyboardHookX11);
+};
+
+KeyboardHookX11::KeyboardHookX11(base::Optional<base::flat_set<int>> key_codes,
+                                 KeyEventCallback callback)
+    : KeyboardHookBase(std::move(key_codes), std::move(callback)) {}
+
+KeyboardHookX11::~KeyboardHookX11() = default;
+
+bool KeyboardHookX11::Register() {
+  // TODO(680809): Implement system-level keyboard lock feature for X11.
+  // Return true to enable browser-level keyboard lock for the X11 platform.
+  return true;
+}
+
+}  // namespace
+
+// static
+std::unique_ptr<KeyboardHook> KeyboardHook::Create(
+    base::Optional<base::flat_set<int>> native_key_codes,
+    KeyboardHook::KeyEventCallback callback) {
+  std::unique_ptr<KeyboardHookX11> keyboard_hook =
+      std::make_unique<KeyboardHookX11>(std::move(native_key_codes),
+                                        std::move(callback));
+
+  if (!keyboard_hook->Register())
+    return nullptr;
+
+  return keyboard_hook;
+}
+
+}  // namespace ui
diff --git a/ui/strings/translations/ui_strings_ml.xtb b/ui/strings/translations/ui_strings_ml.xtb
index 22a7fb9..bdc8533 100644
--- a/ui/strings/translations/ui_strings_ml.xtb
+++ b/ui/strings/translations/ui_strings_ml.xtb
@@ -86,6 +86,7 @@
 <translation id="5266161281976477809">ഡിസ്‌ക്ലോഷർ ത്രികോണം</translation>
 <translation id="528468243742722775">അവസാനം</translation>
 <translation id="5329858601952122676">&amp;ഇല്ലാതാക്കൂ</translation>
+<translation id="5463830097259460683">ഇമോജിയും ചിഹ്നങ്ങളും</translation>
 <translation id="5476505524087279545">അണ്‍ചെക്ക് ചെയ്യുക</translation>
 <translation id="5574202486608032840"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> സിസ്‌റ്റം</translation>
 <translation id="5583640892426849032">ബാക്ക്‌സ്പെയ്‌സ്</translation>